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.

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

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

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

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

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

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

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

Всё проверялось на одном CPU на desktop.

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

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

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

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

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

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

Я не осуждаю «макак», таким был когда-то как многие.
Когда есть работа с зарплатой то любой инструмент может нравиться.
Но работы нет на PHP например. Там rat racing давно.
Теперь нет нормальной работы в игровой индустрии.
Пoсле увольнений в Twitter/X с сокращением в разы, прошла волна увольнений по всем крупным компаниям.

Всё что пытается опровергать это - обычно survivorship bias(ошибочность выжившего), или в статье автора у которого в резюме FAANG и сама эта статья часть публичного резюме для HR.


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

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

Типа, на лиспе нельзя там всякую арифметику указателей? как видишь можно

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

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

Многие люди вообще нихера не понимают че такое лисп.

Я сто раз рассказывал, но намекну еще раз.

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

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

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

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

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

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

Мне лениво это выяснять

Так там же @den73 тупо перестал делиться подробностями. Мол, всё, на сегодня лимит настоящей, обжигающей, правды исчерпан, идите лесом, никому ничего больше не скажу.

Но вся история вызывает вопросы, скажем так, более высокого уровня. Что же было причиной переписывания с Python на Lisp?

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

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

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

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

Но здесь возникают вопрос: а что, никакого профайлинга и выяснения узких мест в старом решении на Python-е не проводилось? Т.е. люди не знали что именно тормозит на Python-е и просто свято верили в то, что уж на Lisp-то точно будет быстрее? Не проводя никаких предварительных замеров на приближенных к предметной области микробенчмарках на Lisp-е?

В общем, история прервалась на самом интересном месте :(

@den73 традиционно слился нагадив сам себе в шаровары.

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

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

А вот это что-то новенькое. Там же сейчас примерно всё бабло мира.

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

тупо перестал делиться подробностями

Не, он мне же потом отвечал еще, глянь повыше.

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

Латентная Импотенция Системных Программистов.

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

кстати поднимите руку, кто не считает шизой писать такое вместо

Ты пишешь вызов функции на одном языке вместо определения метода в другом языке.
Но может так проходит социализация там у вас.

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

Но здесь возникают вопрос: а что, никакого профайлинга и выяснения узких мест в старом решении на Python-е не проводилось?

А-то вы не знаете как такое бывает. Есть куча из исторических наслоений говнокода, есть чувство жгучего стыда от того, что с этим приходится как-то работать, хочется не выяснить где там самое узкое место, а сжечь свидетельство своего позора из реактивного огнемёта. Ребята и отожгли (и получили новый опыт и ощущения).

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

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

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

Мне-то это не надо рассказывать, я это знаю, но это не полностью заменяет пошаговую отладку. И не error вообще-то, а break, если уж ты пытаешься рассказать мне, как работать в CL.

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

или они работают через перекодировку в формат с фиксированным размером

ну честно сказать, если питон тоже перекодирует, то я в недумении. Мне казалось, что питон так и работает с сишными строчками, иначе какой же он клей? Но я сам не проверял. Согласно computer language benchmark, лисп делает питон в 30 раз, а в реальном приложении получилось в 3 раза медленее. Притом узкое место я нашёл путём профилирования. Возможно, что и сами регэкспы медленнее из-за того, что они с 32-разрядными символами работают, но тормоза были не там, а в другом месте.

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

я на нем в отличие от тебя в проде писал

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

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

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

Мне-то это не надо рассказывать, я это знаю, но это не полностью заменяет пошаговую отладку. И не error вообще-то, а break, если уж ты пытаешься рассказать мне, как работать в CL.

В error есть условие вызова дебаггера.

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

Даже если нет - можно сделать, вобщем-то

О, «можно сделать» (R).

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

А-то вы не знаете как такое бывает.

Нет, вообще-то.

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

Но в больших корпорациях не работал, это да. Может в этом все и дело.

А den73 молодец, что не постеснялся рассказать

Он ничего полезного не рассказал.

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

Прочитать UTF-8 можно, но внутреннее представление там - не UTF-8. Но если ты пришёл постебаться над лиспом, то можешь уже уходить, постебался, молодец, а по делу или нет - это уже второй вопрос.

Решил таки посмотреть, как играет тот, у кого мы проиграли.

https://stackoverflow.com/questions/1838170/what-is-internal-representation-of-string-in-python-3-x

Если я правильно понял, представление конкретной строки может быть разным, хотя не понял, от чего это зависит. Т.е. например, у нас основное количество строк на входе - это ascii. Будет ли он кодировать их в это случае в Ascii, который в этой ситуации совпадает с utf-8?

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

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

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

почему инструмент макаки - плохой, и сама она дура набитая.

«Может, и дура, но двадцатку в день имею.»

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

если ты пришёл постебаться над лиспом

Нет, но над его пропагандистами - немножечко да, мне за это стыдноватенько.

можешь уже уходить

Ни за что!

А в каком месте тормозило, если не в регекспах?

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

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

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

Так ведь вполне оправданную, заслуженную двадцатку, вот что главное.

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

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

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

То, что там есть, это пародия на настоящий отладчик.

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

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

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

Даже в трекер залез, чтобы освежить память. Но ничего понять не могу. Возможно, что эта проблема с FFI была лишь гипотезой, которая врезалась в память. В итоге мы, оказывается, догнали python или отставание было в десятки процентов (а изначально оно было в десятки раз, т.к. задачей было «чтоб работало» и куча логгирования была добавлена, и ещё всякие фичи).

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

Из плюсов - я по сей день занимаюсь этим же проектом, и он на Python. Соответственно, строчка в резюме, на которую есть спрос. В отличие от CL, который нафиг никому не нужен.

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

Возможно вы врёте мне, возможно себе, а может — вы редкостный счастливчик.

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

Доводилось видеть, как реанимировали C++ный проект, который был доведен до состояния нестояния (постоянные падения из-за ошибок в коде).

Доводилось видеть, как один проект на Java переписывали. Дважды. Из-за того, что архитектурные решения, заложенные в первой версии, уже исчерпали все запасы прочности, а нагрузки все росли и росли. Дважды потому, что команду, которая переписывала в первый раз, перекупили в полном составе и увели на сторону. А те, кто пришли им на смену, имели другое представление о том, что и как нужно делать.

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

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

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

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

Даже в трекер залез, чтобы освежить память. Но ничего понять не могу. Возможно, что эта проблема с FFI была лишь гипотезой, которая врезалась в память. В итоге мы, оказывается, догнали python или отставание было в десятки процентов (а изначально оно было в десятки раз, т.к. задачей было «чтоб работало» и куча логгирования была добавлена, и ещё всякие фичи).

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

Прям классика: «Все верно. Только не Рабинович, а Иванов. И не «Волгу», а сто рублей. И не в лотерею, а в карты. И не выиграл, а проиграл.» (c)

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

Сколько раз был в проектах на Common Lisp, всегда возникает одна и та же проблема. Обучение новых разработчиков при расширении команды. Новые ещё долго превращают лисп в то на чём они писали раньше. Обычно Python.

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

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

Хотя в принципе-то их можно и на самом Прологе создать, но я лисп всё же лучше знаю и в нём есть compile.

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

Туда же.

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

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