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.

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

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

Т.к. показать где я критикую Lisp, вы не можете? Если если бы я его критиковал, то цитату привести было бы не сложно.

Пока все правильно?

Так написали такие макаки как ты, во времена популярности C++

Вы забываете маленький фактик: не просто написали, но и продолжают развивать. По большей части на C++.

Так что обосновать непопулярность C++ или Java в настоящее время вам нужно очень сильно постараться. Попробуете?

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

Пока все правильно?

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

Вы забываете маленький фактик: не просто написали, но и продолжают развивать.

Это не потому что C++ такой прекрасный и написаны эти вещи прекрасно, а потому что там огромная ебаная тонна говнокода, которую рады бы выбросить, да только на переписывание этого нужно слишком много денег. Читай по буквам: L-E-G-A-C-Y

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

У меня есть подозрение

Так у вас есть подозрение, что 95% окружающих вас идиоты. Даже и не подозрение, а уверенность.

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

Это не удивительно.

Да вобщем-то, и комментаторы там тоже думают по-другому.

Потому что это ваши друзья.

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

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

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

С точки зрения логики если популярное Х имеет свойство А и непопулярное Y обладает тем же свойством, то данное свойство не влияет на популярность. Только и всего.

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

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

Правильно только то, что ты идиот

Ок, я идиот, вы нет. Ну так покажите идиоту цитату, в которой идиот критикует Lisp.

Сможете?

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

Интересно, почему идиоту приходится объяснять lovesan-у, что речь идет не о том, что говно, а что нет. Речь о популярности и востребованности. Вот C++ все еще популярен и востребован. Это несложно заметить, если вспомнить на чем написан браузер из которого вы пишете на LOR.

В отличии от CL.

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

CL востребован, а то что он не так популярен как разная ебанина типа C++ или JavaScript, говорит только о том что 95% населения - идиоты.

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

С точки зрения логики если популярное Х имеет свойство А и непопулярное Y обладает тем же свойством, то данное свойство не влияет на популярность.

Или же на популярность влияет размер свойства A и тяжесть его последствий.

Далее, претензия эта сама-по-себе бессмысленная.

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

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

В случае лиспа это будет какой-нибудь eDSL, а в случае C++ — иерархия классов. В обеих ситуациях новичку, чтобы начать приносить пользу делу, придётся разобраться со структурой проекта. И ещё вопрос где ему сложнее будет.

До олигофренов этот аргумент не доходит вообще от слова совсем, я уже лет 10 про это говорю, и не я один.

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

Т.е. цитаты так и не будет.

OK, lovesan в очередной раз обосрался.

CL востребован, а то что он не так популярен

означает, что lovesan в очередной раз обосрался попытавшись пошутить про популярность C++ и Java.

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

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

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

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

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

... говорит только о том что 95% населения - идиоты.

Всё же это суждение слишком категорично.
Так можно сказать, что Ньютон - профи, а остальные - идиоты.

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

ньютон тоже идиот, он не смог в общую теорию относительности.

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

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

Кстати говоря, такая критика в адрес C++ регулярно раздается. Особенно когда дело доходит до трех-четырех- и более этажных шаблонов.

Да и аналогичная критика касательно Scala на глаза попадалось.

Так что тут вы, скорее всего, правы. У C++ есть аналогичные проблемы.

А вот подобного про Java или Go читать особо не приходилось.

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

Речь не про доказательство. Речь про то, чтобы собственные слова подтвердить.

Заикнулись про нежелание читать критику Lisp-а от людей, которые Lisp-а не видели. Ну так подтвердите, что эти люди Lisp критикуют.

А то получается заявление «вы все трахаете маленьких мальчиков по ночам и не требуйте с меня доказательств»

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

видимо отсюда и вытекают ваши тезисы, что человечество движимо пороками,

Внезапно.

склонностью к общему заговору против лучшего(вот лиспа например),

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

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

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

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

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

человечество движимо пороками

Lovesan вам буквально библейские истины простым языком пересказывает. А вы не каетесь слушаете.

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

CL востребован, а то что он не так популярен как разная ебанина типа C++ или JavaScript, говорит только о том что 95% населения - идиоты.

Скорее 95% процентов программистов не интересуют вопросы создания новых технологий, ...

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

ну так все сразу стало ясным!

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

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

А вот подобного про Java или Go читать особо не приходилось.

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

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

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

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

До олигофренов этот аргумент не доходит вообще от слова совсем

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

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

Для Go стандартный сценарий будет чуть другой.

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

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

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

Но в случае с C++ или Scala мы в дополнение к этому еще и получаем дополнительные проблемы, если умельцы накропали на C++/Scala какой-то DSL, для понимания деталей работы которого нужно знать C++ чуть лучше, чем Герб Саттер и Брьярн Страуструп.

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

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

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

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

если умельцы накропали на C++/Scala какой-то DSL,

Наверное эти языки плохо подходят для создания DSL, поверю вам на слово.

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

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

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

вот 3 строчки на лиспе делают тоже самое

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

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

Сойдёт в качестве аргумента, что на лиспе создать свою объектную систему можно легко и непринуждённо, а в императивном мире, если создатели языка ООП не предусмотрели, то и программисты как-нибудь обойдутся?

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

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

На других языках такое было бы практически невозможно (разве что через внешние кодогенераторы, кучу говноконфигов в XML/JSON и написание их интерпретаторов, плюс обильное использование рефлекшна и соответственно, тормоза, нереальные сложности в отладке и все остальное отсюда).

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

что на лиспе создать свою объектную систему можно легко и непринуждённо

И это будет покруче, чем по 3-4-5 собственных реализаций строк в одном большом Си-шном проекте :)

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

Как захотите, так и будет. В CLOS, например, сделано так:

; Declare the common argument structure prototype.
(defgeneric f (x y))

; Define an implementation for (f integer t), where t matches all types.
(defmethod f ((x integer) y)
  1)

(f 1 2.0) => 1

; Define an implementation for (f integer real).
(defmethod f ((x integer) (y real))
  2)

(f 1 2.0) => 2  ;Dispatch changed at runtime.
ugoday ★★★★★
()
Ответ на: комментарий от eao197

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

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

это плохая запись. возможно ли писать в виде X . Y, ну или вроде того?

то есть обьект является префиксом к методу.

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

Это хорошая запись, т.к. методы диспетчеризуются по всем аргументам, а не только по первому, как в случае X.Y. Однако:

а) так можно сделать. См, также проекты по добавлению в лиспы инфиксной записи 2 + 2 вместо + 2 2 или замены скобок на пробелы.

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

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

Теперь очередь противной стороны рассказать как, например, в Go мне множественную диспетчеризацию добавить.

Так ведь здесь есть и другая сторона вопроса. Вот вы как-то добавили в Go свою множественную диспетчеризацию. А Вася Пупкин из соседнего отдела – свою. Через некоторое время вам потребовалось слить воедино код, написанный вашими отделами. И тут выясняется, что ваши реализации не то, чтобы дружат друг с другом.

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

Нет.

Суждение было скорее о том, что проблема не в том, что 95% людей идиоты.
Многим всё - «по барабану».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от eao197

Давайте не спорить обо всех вопросах сразу. Мы и так-то вряд ли куда придём, а тут тем более завязнем. Сейчас разбирается один простой изолированный вопрос: „чего такого может лисп, чего не умеют более простые и примитивные языки“.

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

Сейчас разбирается один простой изолированный вопрос: „чего такого может лисп, чего не умеют более простые и примитивные языки“.

OK.

Надеюсь, затем обсуждение дойдет и до «Ну и нафига сейчас все эти прибамбасы?»

Схожу еще за попкорном, тема-то не умерла пока :)

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

Более того, любое API это по сути язык, eDSL, только криво и косо слепленный в терминах нижележащего языка(например C++ или Haskell или Java), который(нижележащий язык) там на самом деле только мешается, и не дает нормально мыслить и выражать мысли в терминах предметной области. Ну и конфиги то же самое, это вообще очевидно.

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

Почитал бы хотя бы кто такой Столлман, где он работал, и что делал, и чем знаменит был в ранние годы, умник.

Чувак очень много написал софта вначале, уж точно сильно больше, ем ты. В том числе на лишпе.

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

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

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

Чувак очень много написал софта вначале, уж точно сильно больше, ем ты. В том числе на лишпе.

Так вот ты понятия не имеешь о том, что он писал, как и на какие деньги.

Ты же в курсе, сколько оракел и межделмаш вложили денег в линукс

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

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

Это хорошая запись, т.к. методы диспетчеризуются по всем аргументам, а не только по первому, как в случае X.Y. Однако:

в классическом императивном ООП, если компилируется выражение вида

obj.method()

компилятор находит obj, и берет его тип. в СКОПЕ ДАННОГО ТИПА он ищет метод method, и генерит код вызова этого метода с подстановкой адреса obj.

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

нетути тут ооп. несите другое

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

в классическом императивном ООП, если компилируется выражение вида

Это не классическое императивное ООП, это убогое симуловское ООП из 60х, с одиночной диспетчеризацией, которое популярность набрало благодаря популярности C++ в свое время, и благодаря простоте реализации.

В CLOS ООП точно так же императивное, точнее это вообще ортогонально императивности/функциональщине.

то есть методы не навалены в общем скопе,

В CLOS они не «навалены в общем скопе», методы группируются в обобщенные функции, а не привязаны к классам. Потому что это удобнее, и прямо абстрагирует взаимодействие между объектами, решая сразу пачку проблем симуловского ООП, в стиле «какому классу метод должен принадлежать», а также проблемы с расширяемостью и прочее, и делая ненужными кучу бойлерплета в виде тех же паттернов GoF, которые как я уже говорил, прямо слизаны с базовых конструкций CLOS.

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

компилятор находит obj, и берет его тип. в СКОПЕ ДАННОГО ТИПА он ищет метод method, и генерит код вызова этого метода с подстановкой адреса obj.

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

глобальные функции выбор которой делается по списку параметров.

Выбор по списку параметров мощнее выбора по одному параметру. Всё, что можно в случае С++ подобного ООП — можно сделать и на обобщённых функциях. Обратное же неверно.

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

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

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

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

у вас вообще методы не ассоциированы с классом, а есть лишь результат решения о совместимости интерфейса некоей функции с каким-то конкретным вызовом нечта с данным именем и неким списком параметров. фу!

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