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.

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

Я в качестве примера привёл, чтобы далеко не лазать. ChatGPT заявил о существованиии 5 областей применения лисп-языков в Гугле, хотя Dart уже выглядит притянутым за уши среди них.

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

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

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

Это было нужно чтобы IBM 704 понимал что от него хотят в терминах списков.

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

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

Неубедительно. Объясни, почему в моих вариантах он бы не понял.

Из меня плохой объяснятор, я как раз и пытаюсь сказать что в Ваших вариантах он бы понял, как он понимал например, Fortran; просто так сложилось исторически.

У Lisp другая проблема, он изначально заточен был для создания машинных слов и работы с ними в виде списков т.к. на тот момент инженерам IBM казалось что так будет удобнее работать с 704кой. Язык создали под машину и изначально были только car, cdr и cons.

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

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

Я все время дико угораю с подобных аргументов, в общем виде звучащих как «в лиспе все делается одними символами и списками, и вообще он предназначен для устаревших машин, бла бла бла»

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

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

В лиспе ‘+’ делает только сложение чисел, в этом плане тут все еще круче чем в Golang, с такой то точки зрения

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

Шутка

«О чём молчит наука, а всё просто - хотели есть и съели Кука.».

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

Если используется язык - должен быть и стайлгайд.

Ну так вот я чето не видел Google MUMPS Style Guid или Google COBOL Style Guide, да

А конкретно, в Google есть style guide только для следующих языков:

AngularJS Style Guide
Common Lisp Style Guide
C++ Style Guide
C# Style Guide
Go Style Guide
HTML/CSS Style Guide
JavaScript Style Guide
Java Style Guide
Objective-C Style Guide
Python Style Guide
R Style Guide
Shell Style Guide
Swift Style Guide
TypeScript Style Guide
Vim script Style Guide

https://google.github.io/styleguide/

Вот Google чето не считает что Common Lisp это «устаревший никем не используемый язык» почему-то. Интересно почему.

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

IRL скобок в реальном продакшн коде на Java/C# тех же - больше чем на CL. Разве что фигурных, например. И на С++ тоже больше(но тут - треугольных, ггг)

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

Да, даже Кобол развивается.

COBOL? Да вот я был бы так не уверен.

Касательно того же CL - развитие идет в самих реализациях, либо же в библиотеках.

То что стандарт - от 1994 года, ну дак, тут надо сказать что большинства других языков стандарта вообще нет, а у тех которых есть они тоже, стандарты, всмысле застряли где-то там давно(стандарт C# например - он какого года то? 2005 кажется)

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

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

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

И при том то что IRL где вот пишут нечитаемое хер пойми что - так вот это вон в C++, PHP и JS, и это прямо на любом сайте типа govnokod.ru можно посмотреть

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

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

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

Вот Golang это как раз Easy. Херак-херак, чето там нахреначил и готово. В JavaScript то же самое - на изичах наговнякать чето - вообще проблем ноль.

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

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

Т.е. Вы до отрицаете то что у Lisp тяжелая родовая травма от IBM 704?

Это необучаемость.

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

В русском эта дихотомия непонятна

Вот уж большая беда найти нужные слова „простой“ и „лёгкий“ в словарях.

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

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

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

А когда помещик мог своих крестьянок трахать - это тоже традиции?

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Elidee
(loop :for i :below (length a-slice)
      :for v = (elt a-slice i)
      :do (an-action i v))

Это CL, правда. Честно говоря, выглядит куда более понятно, читаемо и близко к условному псевдо-английскому, чем golang

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

ну так не находят же, у них golang это «простой»

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

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

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

Полностью с Вами согласен.

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

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

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

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

Да, даже FORTRAN, который был зачат вместе с Lisp в одно и тоже время на одной и той же машине смог в работу над собой. Последняя обнова была в 15м или 18м году, что-то такое.

А Lisp - особенный ребенок, солнечный, под стать тем кто превозносит его над другими ЯП в 2023м году.

Obezyan
()

Казалось бы за пятьдесят лет индустрия многое могла бы понять, но увы ...
Объяснить почему всё так, не сложно.
Что для бизнеса важнее всего?

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

Что для бизнеса важнее всего?

Не допустить Лавсана к разработке коммерческого проекта на Lisp. Это, пожалуй, самое важное.

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

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

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

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

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

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

Э… это вот воспоминания «как мы не смогли свой говнокод протестировать» выдаются за примеры?

И при том то что IRL где вот пишут нечитаемое хер пойми что - так вот это вон в C++, PHP и JS, и это прямо на любом сайте типа govnokod.ru можно посмотреть

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

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

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

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

Почему на Java говнокода на таких сайтах меньше, чем на C++ и PHP? Потому что Java используется на порядок меньше них?

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

Э… это вот воспоминания «как мы не смогли свой говнокод протестировать» выдаются за примеры?

Что значит, протестировать? Я рассказывал конкретный пример, про отладку корки в релиз-версии, когда у тебя нет доступа на машины клиентов. То что C++ в этом случае абсолютно не отлаживаемый это факт.

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

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

Э… это вот воспоминания «как мы не смогли свой говнокод протестировать» выдаются за примеры?

аргумент „да вы просто лалки анскильные“, конечно, необорим.

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

Что значит, протестировать?

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

То что ты и некоторые «обезьяны» тут пишут про лисп

Я у вас уже просил однажды подтвердить свои утверждения цитатами, то тогда вы обосрались и слились. Хотите повторить? Ну, OK: если я тут что-то пишу про Lisp, значит это можно процитировать, сможете?

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

Потому что Java используется на порядок меньше них?

Просто на фоне обычного кода на Java говнокод сложно отличим. Это нужно что-то выдающееся сотворить.

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

Не ему одному, а то что он свой велосипед без сидения изобрел то это его личное дело.

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

аргумент „да вы просто лалки анскильные“, конечно, необорим.

Вы просто не представляете, сколько унылого кода на Си и C++ мне довелось увидеть. Причем его авторы вполне себе думали, что пишут на C++ нормально.

Например, что-то вот такое:

void f() {
  SomeClass * c = new SomeClass();
  ...
  if(some_condition) {
    ...
    if(some_another_condition) {
      ...
      if(yet_another_condition) {
        ...
      }
      else return;
    }
    ...
  }
  ...
  delete c;
}

это просто в порядке вещей. А когда говоришь, что можно написать просто:

SomeClass c;

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

Так что да, в связи со спецификой работы имею некоторые основания не доверять рассказам про «у нас отличные C++ разработчики и пишут на C++ они нормально»

eao197 ★★★★★
()

Плохой код можно написать на самом совершенном ЯП ...

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

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

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

На этом вашем Го нормальный шаблонизатор yaml’а не смогли сделать (я сейчас про helm, если что). А чего-нибудь более стоящее тем более обломаются.

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

Уж какой есть. Что-то получше смогли сделать только в 2015-ом, в виде Rust 1.0, спустя 30 лет после выхода в свет первого компилятора C++. И не сказать, что получилось однозначно лучше. И не сказать, что освоить Rust так же легко, как какой-нибудь Go.

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

это просто в порядке вещей. А когда говоришь, что можно написать просто:

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

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

аргументирую. лисп на голанге

https://github.com/SteelSeries/golisp

зы. это подумалось - неужели еще никто на голанге лиспа не написал… и погуглилось

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

Ты хочешь сказать, что все языки одинаково хороши?

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

Проблема не в 4 скобках, а в неравенстве 6>4

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

(perga
    (let a 1)
    (let b 2)
    !)

А то, что добавилась лишняя специальная форма со своими кудрявыми правилами вычисления аргументов (лишняя когнитивная нагрузка), и что слов let стало в два раза больше, тебя не смущает? %) Кстати, что произойдёт, если добавить один let после тела? Или внутрь другого let? Как там вложенные перги себя чувствуют?

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

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

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