LINUX.ORG.RU

Почему Go это плохо, и он вам, на самом деле, не нужен.

 ,


7

15

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

Дело в том, что Go это, на самом деле, «решение» внутренних гугловских проблем. Но отнюдь не проблем горизонтального масштабирования серверного ПО, как многие почему-то думают. Он приспособлен специально для использования в гугле вот в каком контексте.

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

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

Из гугла же идет маразматическая система управления зависимостями Го, которая заточена на монорепы.

Тут возникает вопрос - а почему этому тимлиду не дать в руки кодогенератор, вместо всей этой accidental complexity, возникающей из-за огромного количества строк кода, и из-за затрат на коммуникацию?

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

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

Естественно, это все отражается на качестве продуктов, и это видно как по полному прекращению инноваций в гугле, так и по постоянно мелькающим и закрывающимся высерам этой компании - hangouts, duo, google plus, google wave, и прочее и прочее, можете еще вспомнить много чего.

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

Никакой мифической простоты в отладке и в понимании кода Go не приносит. Да и сложность программных систем растет совершенно не из-за понятности/непонятности какой-то отдельной взятой строчки кода или функции. Потому, что, во-первых, понятность это понятие субъективное, во-вторых потому, что, отдельно взятая фунцкия на 5 строк понятна любому опытному программисту, будь она написана хоть на Rust, хоть на Common Lisp.

Сложность программных систем возникает из-за их размера. И Go эту проблему значительно ухудшает. Человек не может удерживать в голове слишком много вещей, даже если каждая отдельная вещь - очень простая. Количество RAM в голове ограничено.

В случае если вы не хотите выкидывать кучу денег просто так, и скорее предпочли бы нанять немного, но более-менее опытных программистов, Go будет только вреден, потому что все вменяемые люди от него, на самом деле, плюются. Он реально отталкивает опытных людей, которые способны понять сложные требования и написать, и поддерживать, более-менее сложные системы уровнем хотя бы нескольких сервисов плюс БД и MQ.

★★

Мне думается, успех Гоу это очередное проявление явления… назовем его эффект «random hit». Ну вот сделал Гугл также и Dart, и где тот? А с гошкой случайно попали и случайно получился хит. По этой же причине бесполезно очередную вспышку анализировать и критиковать, остается только смириться с существованием и надеяться, что хайп спадет, и оно здохнет, но это не факт. Потому что все хиты обусловлены какими-то объективными предпосылками, обеспечивающими их правом на жизнь, в данном случае желанием кодеров жрать ограниченное дерьмо, хотя как-то уже стало мейнстримом разрабатывать новые ЯП с блекджеком и поэтессами изначально.

Virtuos86 ★★★★★
()

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

alysnix ★★★
()
Ответ на: комментарий от Virtuos86

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

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

lovesan ★★
() автор топика
Ответ на: комментарий от alysnix

Я там как раз написал, что нет, Go никак не упрощает процесс написания распределенных систем. В том числе, основанных на микросервисах. В этом плане тот же Erlang показывает себя куда лучше, просто на порядки.

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

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

Я там как раз написал, что нет, Go никак не упрощает процесс написания распределенных систем.

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

В этом плане тот же Erlang показывает себя куда лучше, просто на порядки.

не знаю кому и что показывает ерланг(я его вообще не знаю и не хочу), но голанг простой(видимо куда проще ерланга) и со встроенным распараллеливанием.

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от alysnix

не знаю кому и что показывает ерланг

Отлично показывает, на нем и видеостриминг делается, или вот я лично работал в Security As A Service провайдере, писал на нем - и там в условиях жестких требований по перформансу, массового параллелизма, и кстати микросервисной архитектуры, эрланг себя показывал очень хорошо.

я его вообще не знаю и не хочу

Прямо воинствующий луддизм.

и со встроенным распараллеливанием.

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

lovesan ★★
() автор топика

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

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

rupert ★★★★★
()
Ответ на: комментарий от lovesan

В огороде микросервис, в киеве распараллеливание.

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

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

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)

Сам как-то хотел вкатить в Голанг. Он мне встал поперек горла на второй день. Читал какую-то известную книгу по Го, и ощущение такое, что становишься не умнее от этого, а наоборот тупее.

rupert ★★★★★
()
Ответ на: комментарий от lovesan

Гугл много чего выбрасывает в массы и пиарит, но приживается всё равно только нужное этим массам. Остальное здохло. Возможно, новому поколению понадобился свой бейсик/«питон», но с поправкой на текущую моду на производительность даже в поделках для нубокодеров, поэтому компилируемый, а не интерпретируемый.

Virtuos86 ★★★★★
()
Ответ на: комментарий от lovesan

это по причине, хайпожорства - «ну, модно-молодежно и от гугла»

Проблема с такими аргументами, это то, что они не имеют предсказательной силы, почему-то не работают с тем же Dart)

goingUp ★★★★★
()
Ответ на: комментарий от Virtuos86

Мнение «масс» вообще обычно ничего не решает от слова совсем, если ты не успел заметить.

Массы хавают всегда то, что дают и что пиарят. 99% среднестатистических программистов не выбирают на чем им писать за деньги.

lovesan ★★
() автор топика
Ответ на: комментарий от alysnix

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

Каким местом понял? У тебя motd меняется на надпись «golang - для микросервисов», когда его ставишь в систему?

А я тебе скажу, каким местом ты «понял». В гугле прочитал.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

Мнение «масс» вообще обычно ничего не решает от слова совсем, если ты не успел заметить.

Ох и спорное утверждение. Но я с дивана спорить не буду 😀. Как же стартапы, которые сами выбирают инструменты и широко популяризуют их в случае успеха? Гитхаб по факту «убил» все VSC, поставив на Git, к примеру.

Virtuos86 ★★★★★
()
Ответ на: комментарий от lovesan

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

alysnix ★★★
()

Поэтому же Go на корню режет всю креативность, поэтому там нет практически никаких средств абстракции, и поэтому он не дает делать вообще ничего сложного.

Как будто это что-то плохое. Для «промышленной» разработки чем дубовее тем лучше, а конкретно go ещё и проектировали умные деды, которые поставленную задачу решили толково.

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

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Для «промышленной» разработки чем дубовее тем лучше

Естественно, нет. Перечитай еще раз.

o ещё и проектировали умные деды

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

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

Из промышленных вариантов платформ кроме Си и плюсов(которые для большинства приложений слишком низкоуровневые) существует как минимум JVM и .NET, я уж не говорю про CL и остальное всякое.

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

lovesan ★★
() автор топика
Ответ на: комментарий от Dark_SavanT

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

И ошибки в кодогенераторе править куда проще чем в реальном коде, особенно с такой горой копипасты как в типичном проекте на Go.

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

В Google это не делается специально. По причинам - политическим, скажем так, которые я описал.

lovesan ★★
() автор топика

Откровения конечно уровня «бог».

На самом деле все куда проще: был запрос в индустрии на инструмент для относительно новой концепции «микросервисов». Чтобы его закрыть и начали активно развивать этот язык (как и многие другие).

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

У Microsoft есть .NET, у Oracle - Java, у Apple - Swift, у Гугла теперь есть Golang. Все это используется примерно для одного и того же: всевозможной прикладной разработки.

Гугл нанимает большое количество тупых студентов,

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

alex0x08 ★★★
()

Есть критика, а где предложения ? Вот на простом примере, нужен ООП язык (хотя бы с куцым), исходники на котором должны собираться в бинарник, не в VM-ы, а бинарник (exe, elf), С-ABI совместимый. И самое главное, чтобы это не было монстром типа плюсов или выносящим мозг растом, надо решать проблемы бизнеса в условиях конкуренции здесь, сейчас и очень быстро, а не заниматься постоянным поиском решений или спецов, которые еще перегибают с запросами. А пока - Golang, хоть в нем отвратительно многое и от него порой шарахаешься, но он действительно может похвастаться быстрым решением «здесь и сейчас» бизнес задач… А еще не понравился код - выкинул, переписал.

fpastush
()
Ответ на: комментарий от alex0x08

На самом деле все куда проще: был запрос в индустрии на инструмент для относительно новой концепции «микросервисов».

Нет.

Чтобы его закрыть и начали активно развивать этот язык (как и многие другие).

Нет, конечно.

у Гугла

Вот цель «иметь свой язык» отчасти у них есть, да. Впрочем у них Python уже есть.

Ну попробуй попасть чтоли, если считаешь что так все просто.

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

lovesan ★★
() автор топика

Почему ты обратил свой взор на go? Джуны работу отнимают?

grem ★★★★★
()
Ответ на: комментарий от Virtuos86

Пора писать диссертацию на тему «популярность языков программирования с точки зрения массовых когнитивных искажений»

А Лавсан то оказывется умеет в разумные тексты когда не про лисп речь идет:-)

AntonI ★★★★
()
Ответ на: комментарий от AntonI

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

Virtuos86 ★★★★★
()
Ответ на: комментарий от fpastush

Есть критика, а где предложения ? Вот на простом примере, нужен ООП язык (хотя бы с куцым)… И самое главное, чтобы это не было монстром типа плюсов или выносящим мозг растом

казалось бы, откуда взялся Раст, если в требованиях указано наличие ООП, но нет – лишь бы пнуть ржавую собаку 🤣

Virtuos86 ★★★★★
()

Ура, я эту простыню даже прочитал. Ну по диагонали, по крайней мере.

А вот если зайти с другой стороны… На чём в 2023 году писать сложную серверную логику? Если откровенная скриптота (PHP, JS) не тянет, а в плюсах геморрой с памятью? На Java?

hobbit ★★★★★
()
Ответ на: комментарий от Virtuos86

Имеется ввиду ООП хоть какое-нибудь неполноценное, в Rust оно есть, да и сам язык очень даже, я ничего против не имею. Но пидалить на нем код, а потом быстро читать - как-то не зашло.

fpastush
()
Ответ на: комментарий от hobbit

На Java?

Java, C#, Swift, лисп. В зависимости от религии.

monk ★★★★★
()
Ответ на: комментарий от fpastush

Что такое виртуальная машина в твоем понимании, и чем она тебе не угодила? У тебя под капотом программы на практически любом языке «виртуальная машина» сишечки работает - называется ОС.

lovesan ★★
() автор топика
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от lovesan

без компиляций в байт код и его хранении, а потом его исполнение в какой-то среде: JVM, CL, их там оверх дохера сейчас. ОС в этом контексте - не виртуальная машина! Основное условие - это нативный код, машинный код! Открою секрет, очень много софта еще выполняется на стороне клиента не в браузерах!

fpastush
()
Ответ на: комментарий от lovesan

На самом деле все куда проще: был запрос в индустрии на инструмент для относительно новой концепции «микросервисов».

Нет.

Чтобы его закрыть и начали активно развивать этот язык (как и многие другие).

Нет, конечно.

Какая суровая экспертиза, глава R&D департамента наверное лично тебе о своих планах отчитывается.

Вот цель «иметь свой язык» отчасти у них есть, да. Впрочем у них Python уже есть.

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

Для ниши вебсервисов это не очень.

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

Все по секретным документам разумеется?

alex0x08 ★★★
()
Ответ на: комментарий от lovesan

У тебя под капотом программы на практически любом языке «виртуальная машина» сишечки работает - называется ОС.

ОС работает и под капотом виртуальной машины, потому ОС - вычеркиваем.

alysnix ★★★
()
Ответ на: комментарий от fpastush

CL

Большинство реализаций Common Lisp, включая ведущие реализации, ни в какой байткод не компилируют. Напрямую в машинные коды.

JVM JIT-ит большую часть байткода перед выполнением, и по производительности недалеко от C++.

.NET хранит байткод для переносимости, но не интерпретирует его, компилирует в машкод при запуске процесса. Хотя есть вариант AOT, с компиляцией сразу в машкоды.

ОС в этом контексте - не виртуальная машина

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

Открою секрет, очень много софта еще выполняется на стороне клиента не в браузерах!

И что?

lovesan ★★
() автор топика
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от alysnix

Я сказал в контексте того, что у сишечки тоже есть «виртуальная машина».

Лисп-системы, кстати, необязательно на этой сишной VM запускать.

Можно и на голом железе: https://github.com/froggey/Mezzano

С жабкой аналогично. Для дотнета были и есть ресерч-проекты вроде Singularity.

lovesan ★★
() автор топика
Ответ на: комментарий от monk

Заявлено требование отсутствия геморроя с памятью.

Звучит как первый пункт контракта с Сатаной.

alex0x08 ★★★
()
Ответ на: комментарий от lovesan

Уххх…а ничего, что линейность виртуальной памяти больше в самом процу реализовано и оркестрировано в ядре ? да и утверждение про Си тоже в корне не верно! там хоть на brainfuck будет написана stdlib, главное, чтоб с конвенцией вызовов договорились, которая исторически Си-шной оказалась! И не нужны монстры на JVM на десктопе, вот в этом вопрос ! Критикуешь Go ? дай алтернативу !

fpastush
()
Ответ на: комментарий от lovesan

Можно и на голом железе: С жабкой аналогично. Для дотнета были и есть ресерч-проекты вроде Singularity.

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

alex0x08 ★★★
()
Ответ на: комментарий от fpastush

Golang это вообще не альтернатива ничему, это бредовая хреновина, нужная исключительно внутри гугла.

Прямая альтернатива десктопному софту на C и C++ это например .NET, который на оффтопике вытеснил почти все что было на C++. Но даже на жабке пишутся крупные десктопные вещи(типа продуктов JetBrains и так далее), которые нормально работают.

lovesan ★★
() автор топика
Ответ на: комментарий от alex0x08

Не взлетают они по одной просто причине - по которой линукс так долго не взлетал на десктопе, и до сих пор так и не взлетел.

Потому что под новую ОС компаниям влом писать драйвера, а это главное для чего вообще ОС нужна.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

Я выше уже говорил, почему не подходят плюсы, .NET с обшарпаным - это жесткий биндинг еще к одной корпорации зла! (Mono - действительно не зашел как-то). Golang - да плох, но он действительно помогает решать задачи очень быстро! при этом собирая все в бинарник. Для понимания, у нас десктоп gtk4- приложение полностью на Go, серверная часть Go\Py. Альтернатив без мозговынесения и лишних затрат и телодвижений просто не нашли! Вот поэтому и спрашиваю, может ты знаешь ?

fpastush
()
Ответ на: комментарий от lovesan

Потому что под новую ОС компаниям влом писать драйвера, а это главное для чего вообще ОС нужна.

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

При этом оживляют труп Соляриса и используют в storage-решениях а OS/2 до сих пор живет в банкоматах. Вот такой вот киберпанк.

alex0x08 ★★★
()
Ответ на: комментарий от fpastush

Да у вас должно хватить своей травы, если вы ГТК приложение на гошечке написали.

Virtuos86 ★★★★★
()
Ограничение на отправку комментариев: