Статья написана по мотивам одного не очень приятного разговора на последнем IT global митапе в Питере.

Мне нравится язык go. Он очень прост, его легко изучить (я проверил это на практике — его действительно можно освоить за одни выходные). Горутины, http-сервер и многое другое прямо из коробки, легкость чтения чужого кода. Евангелисты языка уверяют, что язык специально был создан для того, чтобы любой новичок мог быстро вклиниться в проект и начать фигачить код. Т.е. все сделано настолько просто, насколько это возможно.

Соотвественно, для бизнеса этот язык тоже очень хорош — берешь всех подряд, грубо говоря, школьников и студентов, совсем чуть-чуть обучаешь, и вуаля, у тебя команда. Попробуй такое провернуть с каким нибудь c++.

На митапе прозвучало выражение “набрать мясо”, которое будет писать код. Это между прочим сказал евангелист golang, который изо всех сил уговаривал всех перейти на го.

Стоп!
Он сказал… “мясо”??

Он так и сказал, мне не послышалось!

И тут, как говорится, меня накрыло. Хочу ли я сделать go своим основным языком разработки? Т.е. стать “мясом”?

Какие вообще перспективы у языка го с точки зрения карьерного роста? Если язык имеет чрезвычайно низкий порог вхождения, то рано или поздно все новички окажутся там, предложение превысит спрос, и их можно будет брать по рублю за десяток.

Ну ладно, допустим, деньги не самое главное.

Но и тут go со своей гиперпростотой возможно никогда не будет чем-то захватывающим. В чем challenge (кроме как выучить новый язык за выходные)? Где архитектура, где головоломные паттерны, о которых можно поспорить с коллегами?

Ну то есть выгода языка го для бизнеса понятна, а как насчет программиста? Какая мотивация на перспективу?

На самом деле это сильно напоминает развитие php в нулевых годах. Тогда язык был чрезвычайно прост, и за счет этого на нем стали писать абсолютно все. Каждый студент мог накидать глючный сайтик за копейку, не заморачиваясь с ООП, паттернами, да и вообще ни с чем.

Но! Php с тех пор сильно усложнился, улучшился, сейчас это полноценный язык с развитой инфраструктурой и, на самом деле, уже немаленьким порогом входа. В язык напихали замыкания, генераторы, полноценное ООП, трейты, опционально строгую проверку типов и т.д. Сейчас, чтобы найти нормальную работу на php, нужно знать хотя бы один рельсоподобный фреймворк.

Но го — не php. Он задумывался простым by design, а не потому что так вышло. И на усложнение они не пойдут никогда.

Понятно, что знание языка — это лишь малая доля работы программиста. Еще надо понять бессмысленное бормотание менеджера и превратить это в логичный код. Еще надо уметь работать с базой данных, уметь взаимодействовать с коллегами в команде и еще тысячи таких вещей. Но при прочих равных, язык go, получается, наверное не так интересен, как остальные.

Если уж смотреть на модные языки на перспективу, то возможно стоит обратить внимание на rust или что-то подобное. Там без понимания концепции владения не скомпилируешь даже helloworld-оподобную программу. Вот где challenge!

Подведу итоги.
Несмотря на то, что я написал выше, язык мне всё-таки нравится )
В общем, пока что для себя я решил, что возможно буду использовать язык го для каких-то вещей (например, если буду мутить какой-нибудь стартап), но наверно никогда не сделаю его своим основным, т.е. первой строчкой в гипотетическом будущем резюме.

Собственно, очень интересно знать мнение тех, кто постоянно пишет на го, поделитесь плиз, что вас мотивирует на будущее. Это тот редкий случай, когда очень хочется поменять свою точку зрения на противоположную!

Комментарии (104)


  1. esc
    14.04.2016 14:14
    +21

    Вы предлагаете усложнять язык просто чтобы программистам было о чем похоливарить и чем потешить ЧСВ?

    Наоборот, это круто, когда язык простой в освоении, но при этом не дубовый, как php ранних версий. php усложняли потому, что на нем стремились писать все более объемные проекты. Зачем — долгий разговор, но так было.

    Го имеет достаточно четкую направленность, его не рассчитывают как ЯП для энтерпрайза например. Но когда программисту на php, питоне или чем-то еще нужно будет сделать какой-то сервис быстрым, то большим плюсом будет то, что Го просто освоить. Сервис на Го и напишут, а не будут придумывать где бы найти спеца по С или подобному прямо сейчас и не забьют, оставив на медленном (но знакомом языке). Ну по крайней мере, вероятность этого достаточно высокая.

    Проста это ниша Го. В том числе и помогает решить проблему отсутствия разработчиков на старте. Делать из Го очередную Джаву — в чем смысл, если Джава уже есть?


    1. atc
      14.04.2016 15:41
      +3

      Кажется автор имел в виду не усложнение ради усложнения\элитарности, а намеренное ограничение языком Go доступных программисту выразительных средств. Как может выглядеть путь развития Go программиста? Какие инструменты язык предоставит ему для совершенствования своего кода? Какими новыми навыками Go программист будет располагать через несколько лет?

      Между тем стоит заметить, что современные яп постоянно наращивают арсенал выразительных средств, пример тому — ecmascript 2015, новая версия которого на порядок улучшила лаконичность кода.


      1. Ad_Astra
        14.04.2016 15:48
        +3

        В Lisp (в разных его вариациях) «выразительных средств» изначально немного. Но сделать ими при желании можно практически всё. Количественная метрика синтаксического сахара «из коробки» — ИМХО, далеко не лучший показатель «совершенствования кода». Вот возможность этот самый «сахар» при желании замутить самому, а не дожидаться, пока добрые разработчики тебе это дадут — (тоже ИМХО) хорошая и годная метрика, и немало движения в эту сторону наблюдается и в «модных» языках.


        1. atc
          14.04.2016 15:57
          +1

          Lisp это язык совершенно иного сорта, он изначально расчитан на легкое расширение и создание собственных выразительных средств, сравнивать с ним некорректно.
          Тут вопрос, как жить с изначально (by design) простым языком, дальнейшее расширение\усложнение которого этому «by design» и противоречит.

          Кстати, почему Go, а не Nodejs?


          1. AterCattus
            15.04.2016 13:35

            Отвечу на последний вопрос, влезая в дискуссию. На Go получаются более производительные решения с гораздо более надежным кодом.


      1. creker
        14.04.2016 17:40
        +9

        Чего-то вообще не понятно, при чем здесь язык и путь развития программиста. Программист по профессии решает задачи, он не изучает языки ради забавы. Go решает задачи, и свои задачи он успешно решает без необходимости что-то в него еще добавлять. Он простой, но мощный. Развитие программиста это умение решать все новые задачи. Go этому никак не мешает — он никак не мешает развиваться как архитектору. Более того, его модель конкурентности породила более ценные разговоры в интернетах, чем обсуждение какой же сложный язык я выучил — как по-лучше замутить всякие паттерны конкурентные, которых полно. Каждый предлагает что-то свое со своими ограничениеми. Вот оно развитие программиста.

        Освоить новую версию C# и заучить новые синтаксические конструкции — это никаким местом не развитие программиста. Количество выразительных средства, которые я могу использовать, никак не улучшает меня как программиста. А навыки я будут приобретать от решения задач, а не изучения языка. И не важно, Rust это будет или Go


        1. atc
          14.04.2016 18:05
          +6

          Давайте за пример возьмем php4 (да, я утрирую, но для аналогии не помешает), помогает ли его простая структура программисту больше концентрироваться на Api приложения, его архитектуре и алгоритмах? Скорее нет чем да, вероятно программист будет тратить добрую часть своего времени на борьбу с ограничениями языка, вместо того, чтобы просто воспользоваться встроенными возможностями.
          В конце концов синтаксис\экосистема языка изучается один раз, это не столь большая плата за использование более мощного инструмента.

          Посмотрите на современные мультипарадигменные\объектные\функциональные языки, они действительно настолько сложны, чтобы это вызывало проблемы?


          1. creker
            14.04.2016 18:12
            -1

            Опять. Я не вижу связи между развитием программиста и объемом спецификаций языка, который он использует. Что до вопроса про PHP. Применительно к Go, да. Его простота и одновременная мощь позволяют концентрироваться на решении задачи. Это было и есть его главное достоинство, которое дало ему очень серьезный буст в популярности.


            1. qw1
              14.04.2016 18:27
              +8

              простота и одновременная мощь позволяют концентрироваться на решении задачи

              То же самое можно сказать о BASIC времён ZX-Spectrum. Какая перегрузка операторов, там даже параметров функций нет.
              Установил значения переменных (глобальных, других нет) и выполнил GO SUB, такая вот простота.


      1. esc
        14.04.2016 21:59
        +2

        Какими новыми навыками Go программист будет располагать через несколько лет?


        Неужели пусть развития программиста состоит в использовании все большего количества синтаксического сахара? Мне всегда казалось, что программист развивается по мере написания все более сложных, эффективных и расширяемых программ. Завитушки есть смысл добавлять когда их реально не хватает, а не потому что мидлам нечем понты перед джунионари покидать.


        1. atc
          14.04.2016 22:03
          +2

          Новые выразительные стредства\Сахар как раз и вводятся в целях борьбы со сложностью, дабы программист мог писать более эффектиный, расширяемый, а главное понятный код. Конечно в некоторых случаях сахаром злоупотребляют, в некоторых он входит в противоречие со старыми концепциями и нарушает совместимость легаси кода, но конечная цель — все же помочь программисту, разве это не так?


          1. esc
            15.04.2016 09:58
            +2

            Это все так, если изначально чего-то не хватает. Если Го (в рамках тех проектов, для которых он предназначен) позволяет писать понятный и простой код без синтаксического сахара, то не надо его туда добавлять.

            Добавление таких вещей говорит о том, что ЯП используют не совсем так, как задумывали разработчики. Когда на php начали писать не personal home pages, а все более сложные сайта, а потом еще и корпортаривные системы, естественно, разработчикам языка пришлось как-то бороться с тем ужасом, который творился в коде сложных систем.

            Го предназначен для сравнительно небольших и быстрых сервисов. Если не пытаться писать на нем ERP, то и расширение синтаксиса не понадобится. А пытаться, с моей точки зрения, не стоит.


        1. stepanp
          14.04.2016 23:20
          +1

          За несколько лет стоит изучить больше одного языка, иначе так и останешься «мясом»


          1. esc
            15.04.2016 09:54

            Go не совсем универсальный ЯП, так что вряд ли получится ограничиться только им одним.


    1. algebrain
      14.04.2016 15:53

      его не рассчитывают как ЯП для энтерпрайза например


      А чего не хватает для энтерпрайза и почему?


    1. varanio
      14.04.2016 21:38
      +1

      Я не предлагаю усложнять язык го. Я говорил о том, что мне было бы интереснее писать на более сложных языках.


      1. esc
        15.04.2016 10:00
        +1

        В таком случае, вам просто стоит искать альтернативу Го. Пишите на плюсах, при хорошем подходе там сложности надолго хватит. Да и есть немало языков, авторы которых похоже специально ставили себе целью усложнить их освоение.


  1. NTP
    14.04.2016 14:16
    +11

    Соотвественно, для бизнеса этот язык тоже очень хорош — берешь всех подряд, грубо говоря, школьников и студентов, совсем чуть-чуть обучаешь, и вуаля, у тебя команда.

    И эта команда успешно разваливает твой бизнес…

    (занудным голосом) Программирование как таковое и язык, посредством которого оно выражается — две большие разницы. Человек, не понимающий алгоритмов, матана и дискретки (как минимум), но знающий язык — это кодер («мясо»), а не программист.


    1. Ad_Astra
      14.04.2016 15:45
      +5

      (даже вспомнила в очередной раз забытый пароль для этого комментария) Всё так. Когда языки становятся простыми — важно не КАК писать, а ЧТО писать. И вот тогда-то куда легче пожалеть о том, что прогуливал статистику и дискретную математику, нежели о том, что выбрал «не тот язык». Язык — это инструмент. Просто инструмент. Важен не инструмент per se, а то, что при его помощи производится. И «мясом» человека делает скорее нежелание производить нечто отличное от стандартной круглой «болванки» (на этом месте посмотрела на свою старую писанину и густо покраснела).


    1. igorch96
      14.04.2016 21:03
      +4

      Про мясо. А Вы не замечаете, что программистов (любого уровня) в компании называют ресурсами? Даже не персоналом, а обезличенным, математически сухим определением «ресурсы».


      1. eugzol
        14.04.2016 21:38
        +11

        Вам прямо как будто обидно от такого :) Мне кажется, в любой области, если владелец бизнеса как-то подчёркнуто по-человечески относится к наёмному работнику, то надо всерьёз задуматься, не экономит ли он тем самым на зарплате.


        1. igorch96
          14.04.2016 23:44

          Да есть подозрение, что, как раз, все наоборот…


      1. Alcpp
        15.04.2016 01:19

        А вы не замечаете, что им почему-то платят гораздо больше, чем тем кого называют простыми / работящими ( и т.п.) людьми.


  1. k12th
    14.04.2016 14:20
    +5

    Далеко не все люди, работающие програмистами, любят челлендж ради челленджа и не всех мотивирует сложность. Многие хотят в 18:00 выключить комп и выкинуть это все из головы. Многие просто не хотят брать работу домой, дома у них нежно лелеемый сервис/робот/игра, сделанные на любимом языке.


    1. lpre
      14.04.2016 21:57
      +2

      Это, конечно, правильно, но с другой стороны хочется, чтобы и работа была не просто хорошо оплачиваемая, но и интересная. А интересная работа в программировании (да и не только там), как правило, связана с челленджами разной степени сложности. Поэтому обычно не «челлендж ради челленджа», а челлендж ради саморазвития и морального удовлетворения. А если это еще и с целями фирмы совпадает (оптимальный вариант, при определенном опыте легко достигаемый), то и для повышения личного благосостояния :-)

      Хотя следует оговорить, что челленджи можно найти практически везде и с любым языком. Впрочем, избегать их можно тоже везде.


  1. evnuh
    14.04.2016 14:30
    +5

    Если работодатель набирает команду, то он обычно знает, в чём отличие программиста от человека, знающего язык программирования.


  1. rumkin
    14.04.2016 14:39
    +1

    Программирование не ради программирования затевалось. Суть программирования в автоматизации и как следствие, в экономии ресурсов. Не важно что это деньги, время или энергия. Программирование вещь прагматичная. А вы хотите какого-то соревнования на бензопилах.


  1. bentall
    14.04.2016 14:50
    +1

    Сравнение с PHP очевидное, чего уж. Язык без капли «элитарности» (впрочем и без некоторой врождённой косолапости, как у «языка персональных страничек»). Но реплика «Где архитектура, где головоломные паттерны, о которых можно поспорить с коллегами?» непонятна. Архитектура и паттерны — они где обычно и к языку особого отношения не имеют. Да, можно конечно вспомнить книжку Александреску и другие книжки, про то, как с помощью изящной крнструкции из костылей можно обойти архитектурные ограничения языка, но изящество архитектуры не в этом.

    Но я то тут мимо проходил, на Go не пишу, и, так уж вышло, стать у этого языка моим основным скорее всего шансов нет. Просто нету у меня интересов в соответствующей экологической нише.


  1. mutcher
    14.04.2016 14:50
    +5

    Как по мне хороший программист всегда сможет выделиться из толпы кодеров


    1. DeadKnight
      14.04.2016 15:41
      +1

      Только если ему позволят это сделать.


      1. rumkin
        14.04.2016 19:40
        +1

        А у кого позволение нужно спрашивать?


        1. DeadKnight
          14.04.2016 22:27
          +1

          Ни у кого. У человека работающего на конвеере никакой возможности «выделиться из толпы» не существует в принципе. Он просто не может работать лучше, хуже и т.д.

          Ту так же, программист может выделиться из толпы кодеров, поскольку существует спрос на его услуги, а его профессия позволяет ему это сделать в силу своей спицифики, например потому, что те же «сложные» C/C++ еще много где используются.

          К сожалению, в идеале, бизнесу не нужны 100000 программистов-инженеров, обладающих умением решать алгоритмические задачи, знающих несколько языков и т.д, нужны всего 1000 таких спецов + 990000 кодеров «на конвеере», которые будут писать то, что им скажут с минимальным количеством ошибок. (Все числа взяты с потолка, естественно).


          1. bromzh
            14.04.2016 23:26
            +1

            Удобно всё валить на систему, корпорации и бизнес. Вот только если у человека есть амбиции и навыки, он найдёт как выделиться, особенно в наше время. Самый банальный способ: завести проект на гитхабе.


          1. rumkin
            15.04.2016 00:07
            +1

            Сейчас время возможностей для программистов. Новые направления не успевают появляться. Руководители жалуются на нехватку грамотных кадров, а компании готовы платить. Вы о каком конвейере говорите?


            1. DeadKnight
              15.04.2016 00:28
              +1

              Сейчас время возможностей, с этим никто не спорит. Важно понимать, что здесь главное, это самое «сейчас». И очень хочется надеяться, что это сейчас продлиться как можно больше.

              Дело не в какой то системе или злом умысле. Цель любого бизнеса — получение прибыли. Иначе это не бизнес. А для увеличения прибыли нужно уменьшать издержки, увеличивать количество произведенной продукции, увеличивать цену. Поэтому то, что языки программирования развиваются в сторону упрощения, уменьшения порога вхождения, уменьшения возможностей сделать ошибку и стоимости ошибки — это вполне естественный, хотя и глубоко печальный факт.

              А по поводу нехватки грамотных кадров. Именно так, уже есть нехватка специалистов при избытке кодеров.


              1. bromzh
                15.04.2016 00:53

                это вполне естественный, хотя и глубоко печальный факт.

                Чем же он печален? Тем, что рутину теперь делают за тебя? Ну что же, инструменты развиваются в любой области. Раньше операции на глазах были практически невозможны, зато сейчас в любой клинике лазером могут подкорректировать зрение. Это тоже грустно?


                Вот есть заказ на проект, с заранее оговоренной суммой. Основное требование — надёжность, на скорость по большей части плевать.
                Вася пишет на скучной джаве, у него память сама подчищается, ошибки отлавливаются, а времени он тратит на всё это немного, так что успевает спать по ночам. Проект он сдаст через месяц, а потом поедет отдыхать.
                А вот Петя пишет на интересном C, у него насыщенная жизнь: нужно постоянно следить за ресурсами, освобождать память вручную, следить за указателями, чтобы за диапазон не вышли. Он вручную анализирует ошибки по их кодам, стектрейсы составляет сам и все ночи сидит в дебаггере. Через полгода он ещё возится, деньги уже кончаются (полгода ведь надо что-то есть и где-то жить).


              1. rumkin
                15.04.2016 12:19
                -2

                Причем тут избыток кодеров? Потребность отрасли в специалистах столь высока, что рынок не успевает их готовить.


                Суть программирования в повышении качества жизни. В создании новых благ для человечества. То что это выгодно бизнесу – лишь следствие этого процесса. И да, программировать должно быть легко, чтобы решать более сложные задачи, делать более умный функционал, расширяя возможности конечного потребителя. Так что ничего печального в этом не вижу.


                Я вас не понимаю, вы желаете решать сферические задачи в вакууме за килограммы денег!?


          1. terryP
            15.04.2016 00:19
            +1

            нужны всего 1000 таких спецов + 990000 кодеров «на конвеере»

            Возможно, проблема в том классных спецов нужна 1000, а их единицы. Крайне редко когда наоборот, заурядностей найти всегда легче, чем талантов, поэтому спецы-то без работы не останутся никогда.


            1. DeadKnight
              15.04.2016 00:36
              +1

              Никогда не сталкивались, что при собеседовании тебя спрашивают, работал ли ты с фрейворком Х, и если нет, то на этом собеседование заканчивается, при том, что ты работал с фремворками A, B, C, D и т.д. И изучение фреймворка X у тебя займет времени меньше, чем необходимо для вхождения в проект.

              Очень много компаний ищут либо уже готовых специалистов, либо кодеров. А развивать и тянуть человека до уровня специалиста могут позволить себе только единиицы.


              1. bromzh
                15.04.2016 01:22
                +1

                Фреймворк фреймворку рознь. Питоновский фласк изучить можно за день-два. Но без реального опыта разработки на нём, знания самого фреймворка мало что дадут.
                Ситуации тоже бывают разные. Например, уволился человек, который писал какую-то часть проекта или проект на фреймворке X. Нужно срочно найти замену. Никто не станет рисковать, и брать человека без опыта, лучше сразу найти знающего специалиста. Если же есть команда, но требуются лишние руки, то часто принимают людей даже без знания языка, лишь бы был обучаем. А в конце испытательного срока всё встанет на свои места.


  1. JekaMas
    14.04.2016 15:53
    +18

    Почему-то народ упорно не разделяет понятия «освоить синтаксис» и «изучить язык». Освоить синтаксис языка и его основы можно за одни выходные — это «да».
    Но освоить Golang — это не так просто. Очень и очень часто я вижу код Golang, по которому сразу видно, на чем писал автор раньше: Java, PHP, C#… Попытки впихнуть чужеродные конструкции или абсолютное отсутствие мыслей о работе GC со своим кодом. Как итог получается рабочий и читаемый код на Golang, который жутко противоестественен и чаще всего медленный или опасный. Тут, как правило, и запихивание всего и вся в горутины, и изобилие типа interface, и использование unsave, и конечно же пренебрежение пакетом sync и количеством создаваемых ссылочных типов.
    Нередко попадаются в руки «шедевры» на Golang, которые работают со скоростью PHP 5.6, если код переписать в лоб.

    Это конечно лично мой опыт, но программисты, которые не допускают классических «гошных» ошибок (отлично перечислены «50 частых ошибок») получаются где-то через полгода, через год получается хороший разработчик на Golang.
    На мой взгляд, легкость Golang обманчива. Он прост в основах, но не примитивен. Сделать на нем качественный продукт проще и быстрее, но с этим не справится «мясо».
    У Роба Пайка была интересная мысль, что Golang похож на игру Го — простые правила, но в итоге вариаций партий в порядке больше, чем в шахматах, где правила намного сложнее. В Golang простые основы, но без умения программировать, без хорошей алгоритмической базы это не поможет неумелому «программисту».
    У Golang хорошее будущее, поскольку он позволяем сместить акцент с освоение конкретного языка программирование, на изучение программирования в более общем смысле. Я не много времени трачу на сам кодинг, но продумывание api, архитектуры приложения и его алгоритмов — это тратит столько же времени, сколько и всегда. Программирование не становится примитивным от того, что язык программирования прост в своих основах.


    1. dmbreaker
      15.04.2016 12:05
      -5

      То же самое хотел сказать про простоту изучения.
      Добавлю еще, если кому-то кажется, что Go не хватает ООП и наследования — значит Вы просто еще не освоили этот язык.
      Если кажется, что основное нововведение Go — это горутины, то значит Вы еще не понимаете этого языка.
      Часто говорят, что Go простой и потому неинтересный. Я скажу иначе — это революционный язык, который смог доказать, что язык, воплощающий множество современных концепций, может быть простым. Где сложность не мельтешит перед глазами, хотя и присутствует внутри.


    1. sergey_k
      15.04.2016 12:20
      -2

      Поддержу. Даже более того, скажу что go в принципе пригоден для более интересных задач, нежели написание просто бизнес-логики.

      Проект, которым я занимаюсь, связан с обработкой видео на FPGA. И вы, возможно, удивитесь, но высокоуровневый софт в количестве 2-х утилит (для экспериментального образца устройства) изначально мы начали создавать на go. В набор функций софта в том числе входит веб-интерфейс, работа с памятью, работа с аппаратным кодеком, управление железом, передача данных, различные алгоритмы обработки видеоданных.

      Пока я еще ни разу не пожалел о том, что go был выбран для разработки. И причин тому несколько.
      Во-первых, он позволяет быстро прототипировать алгоритмы не отвлекаясь на синтаксические и прочие особенности непосредственно языка и библиотек.
      Во-вторых, у него достаточно возможностей и быстродействия для общения с нижележащим железом.
      В-третьих, имеются достаточно любопытные инструменты, позволяющие профилировать и оптимизировать софт.

      Так вот по поводу синтаксической простоты языка — это преимущество в основном в начале работы в проекте — как при старте проекта, так и при добавлении новых участников разработки.
      Далее куда более важно понимание архитектуры и логики проекта. И тут сам язык отступает на второй план. Без такого понимания неважно на каком языке вы пишите код — хоть на go, хоть на rust'е.

      Так что мой вывод для топикстартера — учите любые языки, но в первую очередь лучше учитесь проектировать проекты, а затем уже программировать программы )


  1. gena_glot
    14.04.2016 15:53
    -30

    Очень странная позиция, Антон. Начнем с того, что не «берем студентов и школьников и они пилят в проекте», а «берем студентов и школьников и учим их десять лет структурам данных и алгоритмам».

    Простота building blocks системы вовсе не равносильна простоте творения. Скажем, английский язык куда проще русского а писать на нем куда приятнее и выразительнее. С этим многие не согласятся, давайте съедем на программирование.

    Есть язык erlang. сложный. На нем ничего не написано.
    Есть язык C++. Не такой сложный, на нем многое написали. Все работает неправильно.
    Есть язык Java. Очень несложный. Все работает кое-как, написали много.
    Есть язык Python. Очень простой. Написали много не работает почти ничего.
    Есть язык PHP. Простой. Написали много. Что-то работает.
    Есть язык Delphi. Простой. В принципе работает. Но вышел из употребления.
    Есть язык С. На самом деле сложный. Систем написали сложных много. Но вышел из употребления.
    Есть языка Scala. Сложнее Java, проще C++. Написали в последние годы много. Не работает вообще ничего.
    Есть язык Lisp. Простой. Но не имеет аппаратной поддержки. Не написали вообще ничего.
    Есть язык Closure. Взяли Lisp, сделали в 100 раз сложнее и убожественнее и все равно ничего не написали.

    А язык go это замена С на рынке. Возможно, даже не go а его дальнейшие эволюции.

    Еще раз простота инструмента — не гарантия простоты целевой системы.

    А чтобы написать с челленджами и не быть мясом нужно:
    1. Иметь язык который стройно создан и имеет дизайн в своей структуре. И все как минимум базовые библиотеки в большинстве случаев работают.
    2. Знать алгоритмы и структуры данных. Программа — это алгоритмы и структуры данных.

    Такие дела, Антон. Такие дела.


    1. Ad_Astra
      14.04.2016 16:03
      +7

      > Есть язык Closure. Взяли Lisp, сделали в 100 раз сложнее и убожественнее и все равно ничего не написали.
      Во-первых, Clojure. Во-вторых, Apache Storm. Хорошее такое «ничего».

      Могу ещё практически по каждому из пунктов накидать аналогичного — но всё же, я бы поостереглась использовать столь категоричные кванторы.


    1. bromzh
      14.04.2016 16:20
      +11

      Есть язык erlang. сложный. На нем ничего не написано.

      «Эрланг учится за две недели, за год можно выучить до 26 эрлангов.»
      Написано на нём довольно много. Всё работает обычно 24/7, его для этих целей и создавали.


      Ну и так по каждому пункту. Если уж писать аналогии, то более честные.


    1. creker
      14.04.2016 17:49
      +2

      А язык go это замена С на рынке

      С чего вы это взяли? Go ничему не замена, он сам по себе. Дальше каждый сам решает, что он заменит. Google, вот, взял его на замену С++ в основном.


      1. akalend
        14.04.2016 19:25

        Го решает свои задачи, Си свои…
        Знаю несколько компаний, где демонов пишут на Го (и гордятся этим), но с таким же успехом их можно реализовать и на питоне, и на пхп. И очень многое зависит ИМХО от задачи, например: я обсчитываю стату и мне памяти на пхп не всегда хватает (думаю на питоне не хватит тоже). Реализую массивы на си и все в ажуре.

        Другая ситуация: в рекламной сети нужно опросить удаленные агенты (на это уходит более 10-13 мс), быстро обсчитать кучу данных, которые хранятся в оперативке, вычислить оптимальный баннер и успеть отдать и уложится в 20 мс (требование партнеров). Опять же, приходится писать демона на Си, который общается с WEB мордой на пхп.


        1. excentro
          15.04.2016 19:16

          Как вы думаете, Go смог бы обеспечить требуемую скорость запроса?


          1. nwalker
            18.04.2016 17:15

            Может быть и смог бы, но уж точно не силами «мяса» и с отказом от половины его фич.


          1. AterCattus
            19.04.2016 00:41

            Всякие RTB DSP как-то модно (и успешно?) стало на Go делать, уже пачку встречал.


        1. excentro
          19.04.2016 15:17

          Еще вопрос — а как Вы храните данные в оперативке? Какая-то база данных?


    1. dimitrimus
      15.04.2016 01:23

      Ээ, на erlange то не написали? А RabbitMQ?


      1. Xlab
        15.04.2016 01:29

        Классический пример, ещё Riak, да-да.


      1. IvaYan
        15.04.2016 11:11

        WhatsApp, Диалоги Facebook.


  1. pixelcube
    14.04.2016 18:52
    -1

    varanio Не бойся и просто начни писать на Go.


  1. deniskreshikhin
    14.04.2016 19:19
    +2

    Go не так прост как кажется.


    1. bo0rsh201
      14.04.2016 22:05
      +5

      вот я тоже читаю эти невероятные истории успеха осваивателей go за выходные и поражаюсь.
      да, синтаксис можно за выходные выучить без проблем,
      но с такими знаниями написать на языке что-то мало-мальски сложное вам не удастся.
      и вряд ли «мясо» прямо так прибежит и начнет писать развесистые сетевые приложения или сложную конкуретную логику.
      помимо какого-то мифического «знания языка», ИМХО, гораздо важнее опыт и базовые знания,
      которые слабо зависят от синтаксиса языка и его сложности.
      так вот, go как раз и позволяет делать достаточно сложные вещи с меньшим оверхедом на язык и его тонкости


      1. deniskreshikhin
        15.04.2016 13:11

        Именно, ну кстати, есть тому пример tj holowaychuk, он 2 года назад объявил что уходит на Go.
        Но свой успех, который он имел на Node.js, на Go он повторить не смог. Хотя и заделал несколько полезных либ.

        В Go легко влиться и начать говнокодить, но стать профи, понять философию языка и выдавать полезные либы намного-много сложнее чем в Node.js.


  1. malinichev
    14.04.2016 20:03
    -1

    Мне, например, кажется что Go это грубо говоря аналог Kotlin. Интересный, маленький порог вхождения, и красивый синтаксис… Неужели это не так?


    1. nwalker
      14.04.2016 20:12
      +7

      Нет. Kotlin на порядок выразительнее. Go это скорее такая Java 1 — ужасно топорная, но приносящая некоторые широко известные в узких кругах фичи широкой аудитории разработчиков.


    1. solver
      14.04.2016 22:50
      +8

      Вот вам простой пример красивого синтаксиса Go
      func FindRatesTo(rates []ExchangeRate, rateTo string) []ExchangeRate {
      result := Rates {}
      for _, r := range rates {
      if (r.To == rateTo) {
      result = append(result, r)
      }
      }
      return result
      }

      usdRates := FindRatesTo(rates, «USD»)

      И вот тоже самое на сложной Scala (Хотя на Котлине или Java8 тоже самое будет примерно):

      val usdRates = rates.filter(_.to == «USD»)


      1. Virviil
        14.04.2016 23:39
        +6

        Согласен полностью. Отсутствие generics превращает рутину в… рутину. Можно набрать в проект много мяса, и быстро начать разрабатывать, только вот похоже, что БЕЗ мяса на Го не очень то и попишешь…


      1. algebrain
        15.04.2016 11:43
        -5

        Многие зациклены на подобных примерах. И это понятно почему, обучение программированию начинается с алгоритмов и структур данных.

        Имея опыт в 20 лет программирования, я со всей ответственностью могу сказать, что приведенный Вами пример во многих областях, где применяется Go, большая редкость. Да что мои слова, достаточно почитать проекты на гитхабе.

        Хотя в принципе от хороших дженериков в Go не отказался бы. И Kotlin мне тоже очень нравится.


        1. solver
          15.04.2016 14:38
          +4

          Из ваших слов следует, что Go не применяется в проектах обработки данных…
          Да вообще в проектах где используются структуры данных.

          Може тогда пояснить, в каких проектах удобно использовать Go?


          1. algebrain
            15.04.2016 15:43
            -3

            Советую внимательно прочитать мой комментарий. Т.е. никак не следует.

            А чтобы понять в каких проектах удобно использовать Go можно воспользоваться вот таким поиском на гитхабе. И кстати, о данных. На том же гитхабе если воспользоваться поиском graph database и посмотреть на самый популярный проект, то это будет google/cayley. На чем написана? О сюрприз!


            1. solver
              15.04.2016 16:02
              +3

              >Советую внимательно прочитать мой комментарий. Т.е. никак не следует.

              Разве?

              >Имея опыт в 20 лет программирования, я со всей ответственностью могу сказать, что приведенный Вами пример во многих областях, где применяется Go, большая редкость.

              Я привел пример обычного фильра по коллекции. Это вообще банальный пример и применятся повсеместно. Т.е. из вашего камента следует, что на Go писать софт, где надо обрабатывать коллекции, не принято и это большая редкость.
              Вот мне и инетересно, что это за софт такой, где не применяется обработка данных.

              И да, поиск по гитхабу дает ответ на вопрос «на чем вообще пишут софт», но никак не отвечает на вопрос «где УДОБНО применять Go». Ибо даже написанный и рабочий проект не говорит о том, что выбранная технология именно удобна для этого. Зачастую понимание удобства приходит потом, но смысла переписывать уже особо нет. Или же выбранная технология не дает никаго удобства, она просто не хуже других.


              1. algebrain
                15.04.2016 16:06

                И опять неправильно понимаете. Да вы почитайте код. Даже и базу данных возьмите какую-нибудь. Там небольшое алгоритмическое ядро а к ней большой-большой обслуживающий код. Т.е. чисто по соотношению строк тупого кода — его всегда гораздо больше. По разным причинам. Поэтому фильтр на appende вам мозоль нигде не натрет, это точно.


                1. qw1
                  15.04.2016 17:01
                  +3

                  К хорошему привыкаешь. Попишешь на C# с его myList.Where(...).GroupBy(...).OrderBy(...) и когда приходится что-то пописать на Си или Дельфи, думаешь: какое наказание, писать это всё руками.

                  Не напрягает, если бы для чего-то важного, тут как раз руками оптимальнее. А вот когда для одноразовой задачки язык заставляет писать тупые циклы, это неприятно.


                  1. algebrain
                    15.04.2016 17:13

                    Ну, важно соотношение многих факторов. Я вот на haskell писал в 700 строк то, что на Go занимает 3000. Могу свой monad tutorial написать, т.к. знаю монады на уровне алгебры. И чего же это я от него отказался? А того отказался, что преимуществ больше — код легко читается, легко обслуживается, стандартная библиотека приятно удивляет, писать легко и приятно. Пусть и многословно.


                  1. algebrain
                    15.04.2016 17:43

                    Хотя противопоставлять C# я, конечно же, не стал бы: судя по тому, что я о нем слышал, очень хороший язык. Да и более зрелый, просто в силу возраста. Просто мне не доводилось на нем кодить. Думаю Go со временем нагонит, хотя Фицпатрик пугает консерватизмом в своих последних презенташках.


              1. algebrain
                15.04.2016 16:23

                А насчет «где удобно» — да везде на серверах. Проблемы будут если большая и сложная предметка, по ней бы код генерить конечно, а не руками писать. Но я и тут нашел свой ответ чемберлену.


                1. solver
                  15.04.2016 17:14
                  +3

                  Я понял ваш вариант.
                  «Везде на серверах, где не требуется работа с коллекциями»


    1. algebrain
      15.04.2016 12:57
      -1

      В целом согласен. Причем обычно именно опытные программисты соглашаются со мной что Go не топорный, а наоборот удивительно хорошо продуманный язык. Недаром его делают такие крутые старички как Керниган и Пайк, а также такие успешные в индустрии люди как Фицпатрик.

      А то, что вы программируете на простом для освоения языке, никак не может сделать вас «мясом». Если же человек — мясо, то никакая scala не сделает его крутым программистом.


      1. qw1
        15.04.2016 15:37

        Тут речь не о том, «мясо» человек или нет. Речь о том, как на это смотрят работодатели. Им сказали: если у вас есть проект, который можно и нужно «закидать мясом», ведите его на Go. Соответственно, вакансии будут под это строиться. И если вы хотите «умный» проект, но ваш основной язык Go, то придётся долго искать.


        1. algebrain
          15.04.2016 15:55

          Это есть, дурацкая мода смущает неокрепшие умы.

          У меня такой проект, и самые «умные» части написаны на С++. Вынужденно и исторически. Но кода в них гораздо меньше чем в go-шной обвязке. Причем даже там кое-что можно было бы переписать на Go.


  1. Arxitektor
    14.04.2016 21:03

    А что почитать для изучения с 0?
    На русском какие книги, форумы?
    Просто хочу попробовать простейшие програмки.
    И возможно ли делать простейшие exe с интерфейсом пользователя?


    1. varanio
      14.04.2016 21:29

      1. artem_kovardin
        15.04.2016 12:44

        Промазал



  1. Arxitektor
    14.04.2016 21:46
    -11

    Спасибо.
    У меня Win 10
    Ставлю Git в первый раз как правильно настроить при установке?
    А что выбирать при установке инсталятора?
    Git 2.8.1
    Путь C:\Program Files\Git
    На следующем пункте галки ставить все?
    далее директорию в пуск оставляю как есть
    На следующем этапе что выбрать?
    На следующем этапе стиль что выбрать?
    Конфигурация терминала Use Windows?
    Конфигурация экста опций галки оставлять?


    1. terryP
      14.04.2016 23:19

      del


    1. moldabekov
      15.04.2016 10:32
      +1

      Такие вопросы тут не спрашиваются, если Win 10 и вообще нет навыков, то сначала понять бы как вообще Git работает (https://try.github.io/levels/1/challenges/1).

      Установить Go (https://golang.org/doc/install), начать читать документацию, причём внимательно.

      А потом можно и cmder (http://cmder.net/) скачать, раз окружение тяжело настроить


  1. IvanPanfilov
    14.04.2016 22:00
    +2

    > Ну то есть выгода языка го для бизнеса понятна, а как насчет программиста? Какая мотивация на перспективу?

    Никчемные мешки мяса — хотят стать чем то большим, ищут смысл их предназначения, там где его нет.
    Просто писать продкашн код который полезен бизнесу — им не достаточно. Нужно обязательно кому то доказать свою псевдоэлитарность и креативность.


  1. QtRoS
    14.04.2016 22:11
    +1

    В чем-то я с автором согласен. Особенно это касается порога вхождения и большого количества специалистов. Пример: C# удобнее и прозрачнее Java'ы, эффективность среднего программиста выше => найти его легче => меньше ЗП. Это невыдуманная цепочка, я отталкиваюсь от ставок крупных контор-интеграторов — шарписты дешевее джавистов. И вполне возможно, что Go ждет то же самое…


    1. Xlab
      15.04.2016 01:26
      +1

      Не совсем ясно, почему вопрос поднимается о карьере, а все сомнения идут по поводу «средних» и «начинающих».
      Разве специалиста мотивирует не достижения топа?

      Иначе вопрос нужно ставить иначе, мол, какой из языков позволяет быть «средним» и получать побольше.
      Ну не знаю, Objective-C походу.


  1. Arxitektor
    14.04.2016 22:46
    -8

    пришлось немного повозиться
    1. Скачал go1.6.1.windows-amd64.msi
    2. Переменные среды
    GOROOT=C:\Go\
    GOPATH=C:\Users\Nikita
    создал пуль как в статье C:\Users\Nikita\Go\src\golang-book\chapter2
    запускаю cmd.exe
    пробую узнать версию go перехожу в папку
    cd C:\go\bin
    далее go version
    в ответ go version go1.6.1 windows/amd64
    Значит все ок
    пробую как в статье
    создал файл main.go в C:\GOPATH\Go\src\golang-book\chapter2
    и далее как в статье все наконец-то заработать через полтора часа. долго тупил с путём.


    1. guai
      14.04.2016 23:51
      +2

      GOPATH?
      обычно такие переменные с постфиксом _HOME делают
      интересно, чем их не устроило GO_HOME?.. :)


      1. anjensan
        15.04.2016 01:36

        Навскидку CLASSPATH, PYTHONPATH.


        1. bromzh
          15.04.2016 01:44

          1. anjensan
            15.04.2016 01:53

            Да, вот только JAVA_HOME — ровно одна директория, а GOPATH — список директорий (разделены двоеточием).
            Вот GOROOT еще можно было бы назвать GOHOME… Хотя на мой вкус GOROOT выглядит куда красивее и лучше отражает суть.


            1. bromzh
              15.04.2016 02:20

              Понятно. Тогда да, всё логично.


  1. Nikon_NLG
    14.04.2016 23:41
    -2

    Такое ощущение что большинству профессиональных программистов не хватает цели ради цели.
    Т.е. впихни в go функцию bf_eval() которая на вход будет принимать только brainfuck — все сразу язык полюбят, потому что можно выразить себя. А просто eval(2+2), это мы ещё на первом курсе проходили, так скучно. Почему не выбирать язык по задаче(если это аргументировано) — я не понимаю.
    Ну т.е. в моей работе админом тоже хватает неприятных обязанностей, но плевать ядом на какой-нибудь libssl даже в голову не придёт.


    1. terryP
      15.04.2016 00:24
      +5

      Странно, но никто не удивляется, что профессональному водителю хочется водить спортивные или комфортабельные машины, а не разбитую копейку, профессиональный фотограф вряд ли захочет снимать мыльнецей даже если ему за заплатят больше. И только желания программистов писать хороший и эффективный код на языке который им нравится — блаж и глупость.


      1. Nikon_NLG
        15.04.2016 00:37
        -2

        Конечно блажь и глупость.
        Если водителю платят деньги за то чтобы он водил именно копейку — будь добр води. Вне работы можешь хоть пачками всякие феррари об стены бить.
        Если фотографу платят деньги за то чтобы он снимал мыльницей (фетиш у заказчиков такой) — он будет снимать. Работа такая.
        Если мне заплатят за то чтобы я FoxPro на OS/2 поднял — ну, подниму. Хотя я полуось уже не помню когда видел.
        Так почему программисты воротят нос от того что им придётся писать на Go/VB/QBasic в рабочее время?

        Не нравится водить/фоткать/поднимать/писать — ну так не работай, за спиной палач не стоит.


        1. atc
          15.04.2016 01:14
          +4

          Большая часть программистов стала программистами не по причине любви к большим деньгам, а по причине интереса к данному роду деятельности, странно пытаться применять к ним метод работы «от забора до обеда».
          Между тем тот самый «челлендж» — это не более, чем обратная сторона тяги к программированию\исследованию и фактически является профессиональной чертой разработчика.


        1. terryP
          15.04.2016 01:31

          Не нравится водить/фоткать/поднимать/писать — ну так не работай, за спиной палач не стоит.

          Вы в курсе что, скажем, слесарь-сантехник может зарабатывать в раза два больше чем админ? Вот представьте к вам придут и скажут иди работать слесарем мы денег вдвое заплатим. Пойдете?


        1. terryP
          15.04.2016 01:38
          +1

          Если водителю платят деньги за то чтобы он водил именно копейку — будь добр води. Вне работы можешь хоть пачками всякие феррари об стены бить.

          Подойдите к гонщику Формулы 1 и предложите водить копейку даже за большие деньги или к чемпиоу мира по боксу и предложите поработать вышебалой. В обоих случая, вас в лучшем случае пошлют. Деньги это хорошо, но денеги это все-таки не все. Многие программисты могли бы пойти в 1С или САПР и получать зарабатывать возможно больше и легче (по крайне мере в первое время), но неужели вы считаете что деньги это вообще единственный критерий при выборе профессии?


        1. Vedomir
          15.04.2016 10:14
          +3

          Фотографу платят за результат. За фотографии соответствующего качества в соответствующий срок. Водителю тоже платят за результат — за то что бы доехать куда надо за нужное время и как вариант за нужное время и куда надо довезти пассажир или груз с нужным качеством поездки.

          Съемка мыльницей просто затруднит получение нужного результата или сделает его невозможным. И фотографы используют профессиональную технику именно поэтому. Водитель такси на разбитой копейке вряд ли привлечет клиентов и уж точно не выиграет гонку или не перевезет аналогичный грузовику груз.

          Человек, который демонстрирует процесс съемки мыльницей для удовлетворения фетишей заказчиков — это не фотограф, это в лучшем случае актер.

          Может и языки программирования стоит оценивать с точки зрения эффективности достижения результата (включая дальшейшую поддержку и развитие)? Ведь все эти хитрые шаблоны проектирования и синтаксический сахар изобретаются для решения практических проблем, а не просто так.

          Впрочем это в равной мере вопрос и вам и автору предыдущего комментария. Да и автору исходной статьи. Все-таки задача программиста — это создание программ решающих проблемы пользователей, а не абстрактная сложность или простота кода.


  1. Xlab
    15.04.2016 01:21
    -3

    Собственно, очень интересно знать мнение тех, кто постоянно пишет на го, поделитесь плиз, что вас мотивирует на будущее.

    Тем, что Go это единственный язык в индустрии, компилятор и синтаксис которого не мешают и никак не препятствуют решению задач, которые из года в год по мере роста опыта становятся всё труднее по своей природе. И позволяет строить архитектуры любой сложности, сложность которых также растёт вместе с опытом.

    Old programs read like quiet conversations between a well-spoken research worker and a well-studied mechanical colleague, not as a debate with a compiler. Who’d have guessed sophistication bought such noise?

    — Dick Gabriel


    1. dimykus
      15.04.2016 10:25
      +7

      >компилятор и синтаксис которого не мешают и никак не препятствуют решению задач

      Не мешают, но судя по всему и помогать особо не торопятся


  1. guai
    15.04.2016 02:24
    +3

    Не знаю, как следующее касается именно го, но язык программирования не должен быть примитивным. Мы с вами каждый день делаем работу один раз, чтобы потом другие люди могли не повторять рутину, а юзать написанный нами софт. Это же самое должно относиться и к языку программирования, один раз делается хорошо и сложно внутри, чтобы нам было просто им пользоваться каждый день и желательно без рутины, и желательно, чтобы к языку не приходилось потом сотни стайлгайдов прикладывать сверху, а то читаемость постадает. Больше нахождения ошибок еще даже до запуска программы, решение типовых проблем, типа модульности — вот это вот всё и сразу надо на начальном этапе, иначе потом из-за обратной совместимости пространства для маневра гораздо меньше, классический пример явы с ее NullPointerException и корявыми дженериками должен был чему-то научить.


    1. qw1
      15.04.2016 11:25
      +2

      И корявые дженерики плохо, и отсутствие дженериков в Go плохо.
      Нужны хорошие дженерики, как показано выше в комментариях


  1. sergey_k
    19.04.2016 00:13
    -3

    Теперь давайте поговорим о фильтрах. Если спросить у гугла, то выяснятся любопытные подробности:
    1) Роб Пайк год назад набросал (я так понимаю на коленке) простенькую библиотеку, которая реализует концепцию apply/filter/reduce.
    2) Комментарий самого Пайка в вольном переводе звучит так: «Я ЭТО не использую. И вам не советую».
    3) Тем кого напрягает отсутствие встроенного в язык кейворда, можно посоветовать заглянуть внутрь функций: там все сделано достаточно близко к потрохам самого Go и даже при добавлении в стандартную библиотеку или даже сам язык — вряд ли сильно изменится.
    4) Глядя на то, что имеем в итоге, становится ясно — проще цикла-фильтра пока ничего не придумали. Да и тот можно завернуть в красивую обертку при желании.

    Ссылка на саму библиотеку от Роба Пайка
    Ссылка на тестовый пример на Go Playground