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.

★★

Почему в рунете последнее время так много желчи?

Как будто командная работа и приучение к ней это что-то плохое. Больше людей трудоустроены - в определенном смысле лучше.

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

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

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

Какие к середине 90х? К началу 2000х только разве что.

И я еще помню когда еще даже под конец нулевых много кто ныл что лисп-рантаймы жирные дохера.

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

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

Плюс из-за AI Winter лиспы потеряли поддержку крупных корпораций, многие из которых либо приказали долго жить (Symbolics, Lisp Machines Inc., итд), либо окуклились на своих платных реализация(Franz, Harlequin->LispWorks) либо отказались от лиспов (Apple, Texas Instruments, Xerox, университеты, итд) по причинам охлаждения коммерческого интереса к AI(многое в экосистеме лиспов было связанно именно с AI), а также развития веба с его пыхоплеядой и бесплатными говноподелиями типа линукса, развития персоналок, своих говноподелий(Sun, MS итд) итд итп.

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

Больше людей трудоустроены - в определенном смысле лучше.

За ними подтирать потом и плеваться.

Такие вещи как Go катят индустрию в задницу.

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

За ними подтирать потом и плеваться.

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

Но, допустим, полюбил ходить в кинотеатр в новом городе, потому что там есть ЛЮДИ. Да, это платно, фильмы довольно странные, с субтитрами не показывают, но прихожу и вижу персонал. Плачу им деньги в каком-то смысле, или безделушки в магазинчиках покупаю.

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

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

Да, ATL.

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

Ныне (если честно) COM использую лишь из-за того, чтобы расширить функциональность 1С.
Разрабатываемое API ничего не знает о 1С.
В 1С используются лишь биндинги (и это правильно).

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

С утра нужно что-то сказать - «в последние десятилетия».

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

просто функциональщина противна императивному человеческому сознанию.

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

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

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

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

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

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

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

пишешь на си и всех делов(рекурсия тоже есть, остальное не надо).

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

Рекурсия, замыкания, персистентность… Ты про лисп только на ЛОРе читал, понятно.

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

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

А что, можно в 2023 году продолжать считать лишп функциональным ЯП? Очень интересно 😊

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

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

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

CL например это метаязык, в этом главная фишка - макросы, CLOS MOP, итд

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

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

ну интерактивная разработка да, это нигде нормально нет кроме лиспа, смоллтолка и деривативов

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

Это разве что недоучки типа тебя лепят

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

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

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

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

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

ЕМНИП, для любителей функционального подхода от мира лишпа сделали Схему, а борщелишп ничем не примечателен в этом плане

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

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

поэтому там всякие упоризмы встречаются, и функциональность во все поля, и call/cc и гигиенические макросы, и прочее

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

не знаю, там такой зоопарк, что неясно, что ты ковырял, но в целом, насколько я из срачиков на ЛОР понял, они достаточно сильно отличаются и в подходах к разработке, и в силе/слабостях. где-то есть одно, нет другого, и наоборот. надо @monk спросить, он разложит по полочкам. это будет очень уместно в чатике про ненужность голанга 😊

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

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

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

ну ты в принципе не понимаешь что такое лисп, и зачем он нужен

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

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

тогда нужен хештег - лисп_это_другое!

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

не знаю, там такой зоопарк, что неясно, что ты ковырял

на /r/Lisp люди давно говорят, что заколебали каждое левое поделие лиспом называть. Ну типа, лиспы действительно содержат в своем названии слово «лисп». А всякая побочная хрень, типа clojure, scheme, racket и так далее - это не лиспы нихрена, это отдельные языки, со своими глюками, которые в целом от лиспа разве что какие-то элементы взяли

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

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

Короче иди ради интереса что-нибудь прочитай про лисп, прежде чем еще что-то писать про то что не знаешь

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

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

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

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

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

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

Синтаксис Лисп стыдливо смотрит на C++.
Он перещеголял Лисп уменением, как простую задачу решить сложно.

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

забить гвоздь в доску … в функциональном виде?

Забивание гвоздя в доску — это функция из множества кортежей (доска, гвоздь, позиция) в множество досок.

(defn забить-гвоздь-в-доску
  "Возвращает доску с гвоздём, забитым в указанной позиции (в
  сантиметрах от левого верхнего угла)."
  [доска гвоздь позиция]
  (assoc доска позиция гвоздь))

Доска с забитым в неё гвоздём — это тоже функция, из множества позиций в множество гвоздей.

(забить-гвоздь-в-доску {:нумер 1} :гвоздь-сотка [1 4])
;; => {:нумер 1, [1 4] :гвоздь-сотка}

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

Что тут сложного — всё чётко, прозрачно, понятно даже ёжику робату. В отличие от «приставить к нужному месту».

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

Шутка

«Забить» имеет разную функциональность в зависимости от контекста (забить шайбу, ...).
Можно ли в Лисп «обобщить»?

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

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

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

Так что функциональщина — это не для избыточно мозговитых, а совсем наоборот %)

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

«Забить» имеет разную функциональность в зависимости от контекста (забить шайбу, …). Можно ли в Лисп «обобщить»?

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

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

Шутка

«Забить» имеет разную функциональность в зависимости от контекста (забить шайбу, …).

Можно ли в Лисп «обобщить»?

Это будет обычный генерик.

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

У меня в API, использующем метаданные возможна разработка обобщенных алгоритмов.
Не скажу, что пригодно для всех задач, но удобно однозначно.
Алгоритм может работать с объектами о которых компилятор
ничего не знает (так как API «дружит» с run-time).

Например возможна работа (к примеру) с Excel, хотя компилятор ничего о нём не знает.
Каким образом?
Так известны метаданные формата этого файла.

"По телевизору показывают жуликов.
Ну чем я хуже?"
Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 8)
Ответ на: комментарий от lovesan

Миллионы мух не могут ошибаться, как же

Илитка как она есть: нас не миллионы (да), мы не ошибаемся (нет).

Страшно, небось, снять розовые очки?

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