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

Ну кстати, вон, народ, вам пример, «модели управления» где Golang может быть выгоден.

Подгосушная распильно-откатная контора ergo. Вон в таких делах, да. Golang рулит и педалит.

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

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

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

Да и называть наркоманами людей, которые сделали много практических проектов, неразумно. Как минимум вы читаете этот текст на utf8, которые эти наркоманы сделали.

Go не предназначен для написания драйверов (как, к примеру та же java). Это application level язык. Сборка мусора быстрая за счёт структур и concurrency, а многое вообще на стеке находится.

Относительно компиляции. Большой го проект собирается со всеми зависимостями за секунды, там где в .net/java/c++ уходят десятки минут. Это достигается многими факторами, в один комментарий не уместить. Если коротко, то парадигма позволяет не открывать все файлы по несколько раз и не держать их в памяти. Не разворачивать сахар и шаблоны, не испонять макросы. И как в си не добавлять заголовки в каждый файл. Короче by design в других языках так не получится. Не во всех конечно (например паскаль собирается примерно так же быстро, там идеи сборки схожи). Повторюсь, что сам язык спроектирован больше инженерами, нежели академиками. Он приближен к платформе. Поэтому оптимизации компиляции идут с учётом реального железа.

Относительно abi. Вы путаете уровни. Си это не про ABI, а про способ писать программы структурно, с уклоном на целевую платформу а нет под виртуальное окружение.

Код на го поддерживать очень хорошо и удобно. Потому что язык простой, форматтер стандартный, сборка одной командой. Нет многослойности. А если бы идея concurrency была неудачной, то в другие языки не потащили бы async/await, co_async/co_await и т д. Это вопрос утилизации железа. Го рассчитан на реальное железо и системы.

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

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

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

интересно же, из-за чего конкретно так полыхает

Из-за неустойчивой психики @lovesan’а, который почувствовал, что скоро его сишарп окончательно выкинут в окно и он останется без работы.

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

Ну так и кем они были, эти умники 70-х?

Высокооплачиваемыми профессионалами, которые создали IT таким, каким мы его знали. Всё, что вы видите вокруг (включая ваш любимый Go) это либо они, либо на основе их идей.

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

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

Тут прямо вспоминается картинка https://www.meme-arsenal.com/en/create/meme/1013073

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

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

Сборка мусора быстрая за счёт структур и concurrency, а многое вообще на стеке находится.

Ну это видно, что вы вообще даже примерно не представляете как устроены современные GC, какие у них тонкие места и так далее. Рекомендую почитать хотя бы пару статеек про жабовские GC, про дотнет, про всякие mark-region алгоритмы и так далее. И сравнить с тем что в Go.

GC в Golang, кстати, я помню, обсуждал еще в 2014м году, на конференции по Go, и там же критиковал его как с позиций рантайма Erlang, так и с позиций JVM и .NET. Я недавно посмотрел - изменилось ли там что-либо внутри? В go? Не особо. При том, гошники, мне еще тогда доказывали какой дескать в голанге суперпупер GC и още быстрый и още его же НУ В ГУГЛЕ ЗДЕЛОЛИ, т.е. абсолютно не владели предметом, и обладали крайне низкой квалификацией в этой области. И этот момент, я вижу у гошников тоже не поменялся за 9 лет.

там где в .net/java/c++ уходят десятки минут.

Вот тут с вами все сразу стало понятно. Через слеш перечислять вещи, которые вообще-то имеют абсолютно разные порядки времени компиляции это ну такое. Hint: С++ действительно собирается крайне долго, и с этим огромная проблема. В отличие от JVM/.NET, в которых такой проблемы и близко нет.

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

Си это не про ABI

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

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

Как я уже сказал в оригинальном посте - вы задолбаетесь поддерживать код на Go просто из-за размера кодовой базы и наличия копипасты повсюду. Вот что уж а поддержка точно не является плюсом Go, и про это сами гошники регулярно пишут на /r/golang - буквально пишут, что даже 50 тысяч строк на Go это уже ад в поддержке, тогда как проекты на той же джаве - размером в полмиллиона строк - еще перевариваются более-менее.

Го рассчитан на реальное железо и системы.

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

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

Достаточно информации. Более того, есть и иноформации об использовании Golang на реальных проектах и так далее.

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

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

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

Ты опять на связь выходишь, мудила?

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

Hу что, маскируешься под маской крокодила?

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

Я сдаюсь :) Разрешаю вам и дальше поливать грязью всех и вся. Но от души хочу пожелать вам быть немного добрее. В мире и так говна достаточно. Зачем ещё?

Удивительно, как вы можете делать выводы о моей компетенции относительно GC и прочего. Как минимум я знаю очень хорошо GC в .net, поскольку многократно проводил собеседования по Рихтеру. Да и в код смотрел. Поверьте, я знаю C# на очень хорошем уровне. Точнее знал, поскольку уже давно переехал на Go. :) Как и многие мои коллеги джависты, шарписты и плюсовики. Назад не хотят.

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

Итак, с моей колокольни Гошника. Компании, в которых плотно есть Go:

  • Ozon
  • WB
  • Avito
  • Тинькофф
  • Точка банк
  • Сбер (частично)
  • Яндекс (частично)
  • Сбермаркет
  • Joom
  • Ростелеком
  • Норникель
  • Delivery club
  • МТС (частично)
  • другие (знаю около 50ти)

Это только те, где работают мои знакомые. И только Российские компании. Молчу про весь мир.

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

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

Рекомендую не заморачиваться на том, что вам не нравится, а сфокусироваться на том, что вам интересно. Если вы шарпист и опасаетесь снижения востребованности, то запасной аэродром для вас это, очевидно, Java. Она точно ближайшие лет 10 никуда не денется. Лучше сконцентрироваться на ней или чём-то ещё, чем тратить свои силы с пеной у рта доказывая что какой-то там го вас не достоин.

Скажу по секрету, я сам не очень люблю Java и C++. А питон считаю тормозным :D Но миру на мое мнение плевать с большой колокольни. Будь моя воля, я бы все переписал на Си и Vala! А все сетевое на Go! :D

Но как в песне: за деньги да! За деньги да! Поэтому могу и на Java и на Go и даже на плюсах немного. Работа это работа, а личные проекты можно на чем нравится.

Будьте добрее. И не забывайте голову тем, на что не можете повлиять :)

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

Удивительно, как вы можете делать выводы о моей компетенции относительно GC и прочего.

Потому что написали бред.

Точнее знал, поскольку уже давно переехал на Go.

Тогда было бы понимание недостатков GC в Go. Чем, например, плох наивный Mark-n-Sweep написанный как будто студентом для курсовухи с бодуна.

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

Конечно не только может, а и должен. Потому что от опытного профессионала ожидается принятие решений, а не вялые перетекания мыслей на тему «и то хорошо и это хорошо, давайте жить дружно и писать каждый кто на чем хочет».

Итак, с моей колокольни Гошника. Компании, в которых плотно есть Go:

Многие из них пожраны «эффективными менеджерами», к сожалению, да. И загнивают. До американского, да или куда там, до китайского айти, нам в этом плане срать да срать.

Рекомендую не заморачиваться на том, что вам не нравится, а сфокусироваться на том, что вам интересно. Если вы шарпист и опасаетесь снижения востребованности, то запасной аэродром для вас это, очевидно, Java. Она точно ближайшие лет 10 никуда не денется. Лучше сконцентрироваться на ней или чём-то ещё, чем тратить свои силы с пеной у рта доказывая что какой-то там го вас не достоин.

Если откровенно говорить, проблема тут не в C# или Java, а в политической коньюнктуре.

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

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

Смею вас расстроить, но технические решения в 99% случаев принимаете не вы. В своих проектах, несомненно, вы. В остальном просто ищете работу по своим умениям.

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

Опять же, если бы было моё личное предпочтение, то я бы всё делал на C + Vala, и на Go. Весь мир бы переписал !!! :D

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

У меня например нагрузка на работе до 100k rps (зарубежная площадка) достаточно мудрёной логики. Ну и какой выбор? Java умерла с потоками, нода тоже, на плюсах писать нет специалистов, да и долго и баги. Го просто пулей работает. И на изи тащит. И код отличный, и godoc понятный. И профайлинг есть и всё шо хошь. Кайф :)

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

Кстати я работаю как раз в китайской компании на Go. Прям с настоящими китайцами в команде :D тимлидю их.

Как любой технический специалист тоже не люблю менеджмент. Но что-ж поделать. Альтернатива делать свой бизнес. Но и там проблем не меньше, ибо пробовал. Там клиенты мудаки :D а потом инвесторы мудаки.

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

Короче, подытожим. Быть радикально настроенным можно в своих личных проектах.

Реальный мир сложен и решения приходится принимать исходя из конкретных условий. С учётом ограничений.

Например менеджер мудак это пример ровно того самого ограничение. Как «дано» в задаче по физике.

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

А рассусоливать и ныть на несовершенство мира — ну такое себе. Кстати в других странах тоже всё не идеально. И руководство там тоже не идеальное.

Мир так устроен. Всрато? Ну, на мой взгляд однозначно да. И потому я стараюсь делать хорошо и максимально качественно. Чтобы уменьшить количество всратости с учётом всех факторов.

Чего и вам желаю. А время покажет, что останется в конечном итоге.

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

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

А вы подкинули неплохой повод собрать мысли в кучу. И совсем небольшую часть написать тут. Т.к с телефона, поэтому мои ответы тупые и безграмотные :) не судите строго, господа.

И пожалуйста, будьте добрее.

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

Короче, подытожим. Быть радикально настроенным можно в своих личных проектах.

Да нет, Лавсанчег прав про голанг. Это действительно крайне убогонький недоязычок, и в этом вся его фишка: можно взять 300 быдлокодеров с улицы и посадить их писать. Да, код будет написан копипастой, через жопу, и всё это будет неимоверно тормозить, но всем посрать.

Все компании, которые ты привёл выше, имеют одно общее свойство: ОНИ ЖЫРНЫЕ, и потому могут себе позволить заткнуть проблему деньгами. Это из серии, что если код тормозит, то они просто увеличат количество серверов. Там, где такой подход к разработке не работает, голанг обычно днём с огнём не сыщешь, если мы говорим о софте чуть сложнее хелловорлда или одноразовых утилит.

Тащемта, Роб Пайк об этом и говорил в одном из своих интервью.

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

Что-то Chat GPT даже не понял, что ⌿ — это replicate-first, а не оператор.

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

Он, может, и аргументированный, но какой-то наивный. Пристрастие к ООП откуда-то Лавсану приписано как причина неприятия Гошечки. Не, CLOS это ООП, но не уверен, что muzykantov имел в виду его, а что причина бугурта какая-то «парадигма», так скорее жизненная, а не программирования 😁

Virtuos86 ★★★★★
()

Вопрос только - что делать с достаточно качественным и очень нужным софтом уже написанным на Go: lazygit, micro, hugo и др.

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

Да полно мелких компаний используют го, хватит уже писать ерунду, что за выдумки. Зайдите на hh.ru и проверьте, 1600 вакансий мне нашло, нет столько крупных компаний в Москве.

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

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

Если пишут вам про жопы,
Про сишарп, говно и рот,
Я знаю скажу вам без сомненья,
Это пишет вам lovesan
cumvillain
()
Ответ на: комментарий от lovesan

То что за ним стоит MS это вообще плюс, а не минус.

Извините, а Вы случайно не троль ? Писать такое на ЛОРе и не троллить …

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

Оберон был развитием Модулы … Хотя по мне так Модула-2 была классная штука.

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

Так никто не ожидал, что игрушечный язычок, основным требованием к дизайну которого было «чтобы компилятор помещался в памяти калькулятора» вдруг так распростронится. Тут то же самое, что с JS, который точно так же не виноват, что на нём программировать пытаются, вместо того, чтобы рисовать анимированные снежинки на сайтах во время Нового Года и Рождества, для чего он изначально и предназначен.

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

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

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

Вполне готов поверить, что есть куча всяких задних (backend) программ под .Net. Есть же целая индустрия Cobol’истов в штатах, про которую мы ничего не знаем, потому что мы ей не интересуемся. Так что мы в своём пузыре, lovesan в своём. Дальше ещё хуже будет.

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

Я вот не совсем понял для чего НЕТ за пределами виндовс ? На чем VSCODE ? На чем Скайп после покупки его МС ?

Про направление asp.net я в курсе.

Кстати помню когда зарождалось НЕТ, МС кричала что это будет для любого языка а не только Шарпа.

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