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.

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

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

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

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

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

Вообще-то нет.

Было:

{port 8080 {reuse-port}}

стало:

{port 8080 {reuse-port {failure-timeout 5s}}}

{reuse-port} как был в своих скобках на своей строке, так и остался.

Если потом выяснилось, что временно failure-timeout нужно убрать, то оно заключается в комментарии:

{port 8080 {reuse-port |#{failure-timeout 5s}#|}}

Подобная штука очень удобна когда мы подготовили новую версию софтины с поддержкой failure-timeout, подправили под нее конфиг, запустили и… Что-то не помогло.

Захотели вернуться на предыдущую версию, просто закоментировали в конфиге {failure-timeout} и попробовали.

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

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

Вы тут, на просторах LOR-а, много рассуждали о том же C++. Этого достаточно.

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

Ты сам вообще кто такой? Расскажи о своём опыте, о великих своих победах.

А что, нужно быть шеф-поваром ресторана с 3-мя звездами Мишлен, чтобы понять, что устрицы протухли?

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

Аналогии ни к чему не обязывают и из них не следует, что я заявляю своё понимание в военном деле. В C++ я понимаю достаточно, и на моей стороне такая уважаемая во всём мире организация, как АНБ США. Просто они сказали об этом же самом чуть позже. Я успешно сделал на работе одну программку на Qt, экранов на 5-7, кроме того, были ещё изменения в расчётной программе, к-рая занималась физ.химией или хим.физикой, кто их там разберёт. Как сейчас помню, шаблонный класс с 4 параметрами внедрил в одну расчётную программу, или разрулил проблемы ООП, которые возникли от того, что кто-то придумал этот класс, а надо было массив из таких классов (с разными параметрами) составить ну и чтобы он работал. Был один реактор (шаблонный класс с 4 параметрами), а надо было из них цепочку составить. Не rocket sciense (не совсем rocket sciense), но я как-то справился. Однако, не надо быть шеф-поваром, чтобы понять, что устрицы протухли.

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

А что, нужно быть шеф-поваром ресторана с 3-мя звездами Мишлен, чтобы понять, что устрицы протухли?

Это официальное приглашение критиковать C++ всем подряд?

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

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

Я так понимаю, что когда вы пишете что-то в таком духе:

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

то это просто звиздешь в чистом виде и он может отправляться в /dev/null сразу же, поскольку «аналогии ни к чему не обязывают» и вы не заявляли о своем понимании в военном деле. Так выходит?

В C++ я понимаю достаточно

Достаточно для чего?

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

Ну и как бы с C++ ясно - народ ногами уже проголосовал. Ни ядро Linux, ни Postgres, ни QEMU не написаны на C++. Это навскидку. Тоже не повара, видимо, управляют этими проектами. Хотя в наше время повара и в военных действиях иной раз разбираются. Но здесь у нас тема про лисп и голанг, а свои идеи о том, в чём я разбираюсь, а в чём нет, оставь лучше при себе. Или покажи, какой ты повар.

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

Это официальное приглашение критиковать C++ всем подряд?

Вы так говорите, как будто:

a) желающие сделать это ждут приглашения, а без оного их природная скромность мешает им это сделать, и

b) я где-то утверждал, что C++ – просто венец творенья и недостатков у него нет вАААпще.

:)

Проблема не в том, что C++ не следует критиковать. Проблема в том, что для тех ниш, в которых C++ все еще уместен, нечего предложить взамен кроме Ada и Rust. Ну не чистый же Си, в самом деле.

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

Так выходит?

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

Достаточно для чего?

Расскажи о своих успехах.

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

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

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

Ответственность и означает то, что я написал, а не перебор всех вариантов решения.

Давайте я вам напомню, что вы не только это написали, но еще и добавили вот это:

На войне любое решение командира является правильным, если оно выполняется.

Зачем?

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

Если так, то вопрос: а вообще то, что вы написали про «любое решение командира», как-то соотносится с реальностью?

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

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

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

Если мы попытаемся определить нишу для С++ в 2023-м и в 2003-м году, то увидим, что эта ниша существенно так ужалась. И то, что 20 лет назад выглядело неоспоримым доменом С++ ныне пишется на жабе, го, жабоскрипте и питоне. Не вижу отчего бы эта тенденция прекратилась.

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

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

например было

(some_value 100)

пропустить выражение - если парсер s-выражения видит правило skip: ,он безусловно пропускает все выражение как будто его нет.

(skip: some_value 100)

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

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

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

А я вижу и говорю об этом уже N лет (где N значительно больше 5) :)))

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

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

Однако, процесс не стоит на месте. PC-шки 1990-го кардинально уступали PC-шкам 2000-го. За счет этого условная Java перестала тормозить.

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

Нормальный процесс. Так что, имхо, сегодняшняя востребованность C++ более нормальна, чем таковая в середине 1990-х.

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

Вообще-то нет.

Было:

{port 8080 {reuse-port}}

стало:

{port 8080 {reuse-port {failure-timeout 5s}}}

{reuse-port}как был в своих скобках на своей строке, так и остался.

Если потом выяснилось, что временноfailure-timeoutнужно убрать, то оно заключается в комментарии:

{port 8080 {reuse-port |#{failure-timeout 5s}#|}}

Подобная штука очень удобна когда мы подготовили новую версию софтины с поддержкойfailure-timeout, подправили под нее конфиг, запустили и… Что-то не помогло.

Захотели вернуться на предыдущую версию, просто закоментировали в конфиге{failure-timeout}и попробовали.

Што?

Блин, чувак, ты тут какие-то чудовищные костыли изобретаешь. Знаешь, как нормальные посоны делают это в YAML? Копируют строчку (две кнопки в виме), оригинал комментируют, новую меняют по своему усмотрению. Изобретать язык конфигов со специальной поддержкой этого – чудовищный оверкилл.

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

Мы ничего не мудрили. Был такой ЯП на рубеже 2000-х, Curl назывался. С корнями из Lisp-а, но без Lisp-ового бреда с записью арифметических выражений в форме (- a 1). Его синтаксис и был в свое время взят за основу.

Так что у нас были не чистой воды s-expressions.

Добавлять что-то вроде (skip:, когда уже есть комментарии, имхо, это какой-то особый стиль извраще наслаждения :)

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

Знаешь, как нормальные посоны делают это в YAML?

Ну хорошо хоть не в XML.

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

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

Знаешь, как нормальные посоны делают это в YAML? Копируют строчку (две кнопки в виме), оригинал комментируют, новую меняют

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

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

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

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

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

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

Достаточно для чего?

Расскажи о своих успехах.

Вы сказали, что понимаете в C++ достаточно. Вы сказали, что вы понимаете. В достаточной степени.

Я у вас спрашиваю: «Достаточно для чего?»

Вместо ответа вы требуете рассказать о моих успехах.

В чем логика?

Если вы понимаете в C++ достаточно для того, чтобы сказать, что устрицы протухли, то OK.

Если вы понимаете в C++ достаточно для того, чтобы кому-то давать рекомендации о том, для чего C++ подходит и на чем следует писать российскую ОС, то… Тут есть вопросики.

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

Логика в том, что ты позволил себе ложные критические высказывания в мой адрес. Если ты супер крутой программист с большими успехами, то это одно. Вдруг я действительно где-то рассуждаю о чём-то, чего не понял. А если ты просто какое-то никто, то что с тобой разговаривать? Это нужно выяснить, перед тем, как ты сможешь дальше у меня требовать ответа на что бы то ни было. Ну или можешь взять свои слова назад.

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

Знаешь, как нормальные посоны делают это в YAML? Копируют строчку (две кнопки в виме), оригинал комментируют, новую меняют

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

Отступы редактор сохраняет без проблем. Ей богу, вот с чем, а с отступами в yaml у меня проблем никогда не было. С Норвегией были, но не с отступами.

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

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

Делай раз:

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

Делай два:

Я не знаю, соотносится ли это с реальностью

Ссылочки на исходные сообщения, надеюсь, проставлять не заставите? Вроде бы и цитат в качество доказательств должно хватить.

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

Возьмётесь определить?

Тут лучше бы адресовать к Страуструпу и его «Дизайн и эволюция языка C++». Он там подробно на этом останавливается.

Я это обычно формулирую так: «где имеется и сложная задача и высокие требования к производительности/ресурсоемкости/предсказуемости».

Т.е., и то (сложность) и другое (эффективность).

Сюда же еще как-то можно добавить необходимость в тесной интеграции с ОС (а местами и доступ к железу). Но это, зачастую, само по себе вылазит либо в «сложности», либо в «эффективности».

В конце 1980-х и 1990-х из-за слабости тогдашней техники высокие требования к эффективности были чуть ли не повсеместными. А не очень высокий уровень тогдашнего софтостроения (многие методы и подходы – это последние 25-30 лет) делал многие задачи сложными (хотя, наверное, сейчас они такими бы не являлись).

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

Это херня, а не доказательство. Ты сначала сделал один плохой поступок, т.е. наклеветал. Потом ты попытался прицепиться к риторической фразе, чтобы обосновать свою клевету. И при этом ты не объясняешь, кто ты. Да мало ли какое никакое никто на меня наклеветало, не буду же я всю жизнь тратить на то, чтобы со всеми спорить. Пусть твоя клевета остаётся на твоей совести. Просто твои слова теперь умножаются на ноль, и всё.

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

Ты сначала сделал один плохой поступок, т.е. наклеветал.

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

Цитаты все приведены. Объяснения почему я так сделал даны. Кто захочет составит свое мнение.

И при этом ты не объясняешь, кто ты.

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

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

Я это обычно формулирую так: «где имеется и сложная задача и высокие требования к производительности/ресурсоемкости/предсказуемости».

QEMU, ядро линукса, Postgres - подходят. Где же здесь Страуструп? Одно дело, пытаться продать слона, а другое - реально его продать. Пытаться быть языком для какой-то ниши, и реально им быть - это разное. Рассуждаешь с умным видом о вещах, в которых не понимаешь.

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

что ты - никакое никто

А LOR таки торт! Уже привычный набор ярлыков пошел.

Еще я делаю образцовое нинужно.

И программировать не умею (многократно доказано Царем).

И не программист (так же доказано Царем, а в этой теме и lovesan-ом, который говорит, что бывших менеджеров не бывает).

И за плечами у меня всего два курса провинциального ПТУ в болотах Полесья.

Узбагойтесь уже, не ровня я вам, не ровня.

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

Ты первый начал, я просто упрощённо сформулировал.

И программировать не умею

О. Отлично. Теперь и я могу прицепиться к этой риторически вставленной фразе и долго «доказывать», что раз ты сам сказал, то значит ты реально это и имел в виду. Будет на том же уровне, что и твоё «доказательство».

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

QEMU,

Про этот проект не знаю вообще ничего.

ядро линукса,

Если не ошибаюсь, на тот момент, когда Линус начал писать Linux, под i386 еще не было 32-х битовых компиляторов C++.

Сам C++ тогда еще был весьма сырым, поддержка шаблонов и пространств имен в компиляторах для больших машин (уже не помню, для Sun или HP-шек) появилась где-то в 1992-1993-ем.

Для PC эта поддержка первой появилась в Borland C++ 4, вроде бы в 1994-ом. И борландовская четверка первых версий, емнип, только 16-битовый код генерировала. Поддержка 32-х битов там появилась либо в конце 1994-го, либо в начале 1995-го.

Не помню, насколько продвинутым был в то время Watcom, он вроде бы 32-х битовый код генерировал. Но уровень поддержки C++ не помню. Нормальная поддержка у Watcom где-то к версии 11 появилась, опять же емнип.

Postgres - подходят.

Postgres стартовал в 1985-ом, тогда про C++ знали не только лишь все.

Ну и, как бы, примеров ОС и СУБД на C++ есть.

А, главное: то, что C++ подходит для задачи X, не означает автоматически, что C++ будет выбран для задачи X. Хотя бы потому, что всегда есть конкуренты.

У вас еще и с логикой нелады. Или вы бухонький здесь распинаетесь?

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

Modeling with Mutable Data

Это поможет в Clojure?

Не очень, в Clojure на mutable data смотрят косо. Но вообще полезно для общего понимания (в том числе почему именно в Clojure на mutable data смотрят косо).

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

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

SICP таки да лучше читать после хотя бы небольшой практики. Чтобы понимать, о чём они там вообще.

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

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

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

Есть некий язык Б++, являющийся почти полностью расширением языка Б, и вроде бы более удобный. Т.е. и язык улучшенный, и перейти несложно. Но почему-то многие «архитекторы», повара, командиры, возглавляющие успешные проекты, на него не перешли. А может быть он не так уж и хорош, как кажется? Т.е. я понимаю, что вы со Страуструпом можете считать, что C++ подходит под эту нишу. А другие люди сочли иначе. И поскольку ты так и не написал, какие задачи ты успешно решил, то твоё мнение учитываются с весом ноль, а мнения Торвальдса, Белларда и не знаю, кто там за постгрес отвечает, учитываются с положительным весом. А мнение Страуструпа тоже надо учитывать с осторожностью, потому что любая курица кудахчет над своим самым любимым яйцом.

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

Не понял, что тут с тобой случилось и почему ты не можешь отвечать, но:

  • в схеме нет духа лиспа, каковым является его динамичность, но зато есть call/cc, которое может тебя совратить
  • SICP написан слишком давно и там могут подаваться в качестве преимущества те вещи, которые уже давно утащили из лиспа в другие языки, например, замыкания. Сам я SICP не читал.

Но кстати в системной интеграции или не знаю, как назвать то, чем ты занимаешься, я слышал, что в России кто-то именно Схему применял. Она относительно компактная и в этом оправдание. Из схем вроде бы как самая фичастая - это Racket. Там есть IDE и даже прекрасная статья про создание DSL-ей где-то было (лучшее из виденного мной про лисп семейства, лучше, чем в CL, а кложу и другое я не трогал).

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

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

Дяденька, глазки продерите: «то, что C++ подходит для задачи X, не означает автоматически, что C++ будет выбран для задачи X. Хотя бы потому, что всегда есть конкуренты»

Т.е. и язык улучшенный, и перейти несложно.

И сразу обосрались. Перейти сложно.

а мнения Торвальдса

Мнение Торвальдса сам Торвальдс послал вдоль когда выбрал C++ чтобы написать себе GUI программулину Subsurface.

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

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

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

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

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

По крайней мере, у меня первая попытка читать SICP именно этим и закончилась %)

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

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

Нет противоречия.

Перейти сложно.

Я не такой уж специалист по отличиям Си от Си++, но по моим ощущениям и воспоминаниям это должно быть просто. Что именно сложного? Я, естественно, говорю об эволюционном переходе, когда капитан решает «всё, переходим на С++». Следующий этап - это переименование *.c в *.cpp. А потом нужно подправить несовместимости.

И только потом начинаем внедрять постепенно фишки С++, поэтапно, аккуратно, не ломая программу. Речь не идёт о том, чтобы сразу заменять все char * на std::string или как оно там у вас называется, а все функции запихиваем в классы обязательно на следующий день. В больших проектах происходит всегда постепенное внедрение, при написании нового функционала или планово по кусочкам. По идее, если С++ был бы существенно лучше С, то на это стоило бы пойти в любом проекте. Что мы теряем-то? Риска никакого почти.

Что там такого «сложного» именно на первом этапе, когда мы меняем язык?

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

Ты тоже не программист как ТС или все же причастен?

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

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