(Серия: Сельскому учителю в помощь)

ОГЛАВЛЕНИЕ

Вступление

  1. История учит не многих

  2. Годы goto-ненавистничества

  3. Религия ООП

  4. Религия try-catch

  5. Большое расследование Python

  6. ИИстерия

Литература

ВСТУПЛЕНИЕ

Август. Арбуз. Иванов Б.

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

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

«Обман» – это конструкция, от которой употребивший её получит неожиданный им результат, а сконструировавший – ожидаемый. Это всё что угодно: слово, предмет, жест, действие.

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

Цитируемые документы, включая код Python v0.9.1 в хранилище [1]. Иллюстрации: Борис Иванов [21] и Владимир Любаров [22] 2007-23 гг.

1. ИСТОРИЯ УЧИТ НЕ МНОГИХ

Периодами пресса нагнетает хорошо проплаченную истерию с затем вновь повторяющимся «крахом надежд миллионов». Но история учит не многих.

«Хайп» это агрессивный, интенсивный, искусственно раздутый шум вокруг чего-то. Хайп создаёт ажиотаж и всегда краткосрочен. Это hyperbole (гипербола, преувеличение) или hype (навязчивая реклама, одурачивание).

Миф о всеобщем интернет-бизнесе за 5 лет стал «пузыём доткомов». Пропажа из прессы одетых в кеды и майки Цукерберга и Брина похоронила эру «стартапов» от студентов «с горящими глазами».

Затем за 4 года пришли и ушли «бездонные рынки» самопальных криптовалют и «продаж «цифровых знаков»» (NFT). Отменился рост мировых экономик через «блокчейн», о чём 2 года с умными лицами вещали политики в телевизорах. («Блокчейн» – это обычный связный список в несколько строк кода на любом языке, где следующий элемент содержит хэш предыдущего).

2000-15 гг. прошли под знаком сотен «фреймворков» – кустарных библиотек, в спорах о которых их почитатели и ненавистники в клочья на форумах рвали друг друга, и о которых сейчас не вспомнит никто. Каждый «фреймворк» «улучшал HTML» и сулил безбедную и сытую жизнь своим адептам. [2]

2. ГОДЫ GOTO-НЕНАВИСТНИЧЕСТВА

Правые и левые. Любаров В.

Давайте поговорим о программистах. О, эта каста жрецов в мятых футболках, считающих себя венцом эволюции и повелителями чистой логики. Хотите увидеть, как эта «чистая логика» мгновенно превращается в средневековый карнавал с факелами и вилами? Им просто нужно дать одну ведьму. И они её нашли. Название этой ведьмы из четырёх букв – goto.

В 1990-2000 гг. в «сообществе» царит «goto-ненавистничество». Казалось бы: обычный оператор, не хочешь – не бери. Но толпы «высокообразованных» строчат тысячи статей, с признаниями в ненависти к goto. Может потому их не берут писать ядра OS? Несомненно, в этом есть что-то психическое.

Искра Дейкстры или Как всё началось

1968 г. Журнал «Communications of the ACM» публикует письма с интересными взглядами на жизнь. Например, «один из авторов выражает недовольство шестнадцатеричными цифрами. Дескать, если в числе нет символов A-F, неясно, десятичное это число или шестнадцатеричное, и предлагает свой набор цифр». [3] Туда Эдсгер Дейкстра направляет короткое туманное размышление: «О вреде оператора GOTO». [4]

Начало истерии

Есть категория граждан, не способная читать интересную математику, но способная быстро найти врага. И враг всего программирования найден: «Это Goto! Держи его!» Примитивная статья во второсортном журнале стала манифестом новой веры, быстро вышедшей за берега разума.

В университетах и корпорациях началась «охота на ведьм». Появились радикальные «чистильщики кода». Руководство ввело административное правило: если в коде находят хоть один goto, проект заворачивают. Студентам за goto ставят двойки и отчисляют с курсов. В моду вошли лозунги: «Каждый раз, когда ты пишешь goto, в мире умирает котенок». Симпатии к goto приравняли к симпатиям к коммунистам.

Умопомешательство зашло так далеко, что авторы новых языков вырезают бедный оператор. В 1995 г. в Java слово goto зарезервировано и сделано нефункциональным. В Pure C отсутствие goto возведено в ранг высшего достижения цивилизации.

Серьёзно? Котёнок? Да если бы это было так, код Линукса убил бы всё семейство кошачьих на планете ещё в девяностых!

Ответный удар прагматиков

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

Первым против безумия выступил Дональд Кнут. В 1974 г. он опубликует ответ: «Структурное программирование с операторами Goto» [5], где с цифрами показывает случаи, где goto дает максимум лаконичности и скорости коду. Кнут издевается над «запретом» и бичует готоненавистников, сотни раз ставя goto в системе верстки TeX. Поскольку та стала эталоном стабильности, это был мощный щелчок по носу теоретиков.

Позже Линус Торвальдс пишет: «goto прекрасен и гораздо более читаем, чем безумные уровни вложенности отступов. Есть языки без описательных меток, но это проблема с мозгом (braindamage) их создателей, а не goto». [6]

Шаблон goto-cleanup – единственный способ писать чистый и безопасный код ядра в С.

Скрытый заговор системных программистов.

Разработчики компиляторов не просто похихикивали над нашими «гигантами ума». Они главные архитекторы и бенефициары этого скрытого заговора.

Пока студентам в университетах запрещали писать «грязное слово goto», компиляторы, проверяющие их лабораторные работы, на треть состояли из goto. Пока академики требовали вырезать «вредное слово» из учебников, системные программисты пишут Yacc, Bison, Lex и оптимизаторы, где генерация goto возведена в абсолют.

Неудобная «низкоуровневая» правда в том, что процессор выполняет только переходы goto. И как высокоуровнево функцию не назови, в ней цикл, if и switch – это goto.

Но главный цинизм в оптимизации. Компилятор смотрит на код как на граф и разворачивает структурные блоки в эффективную последовательность переходов. Флаг -O2 включает inlining. Тела функций вставляются в места их вызова. И «расово чистый код» превращается в гигантское полотно из локальных меток и операторов goto.

Синтаксический анализатор компилятора или «парсер», транслирует исходный текст в AST. Это конечный автомат с таблицей состояний вроде: «если в состоянии «чтение класса» встретил символ {, перейти в состояние «чтение тела класса»». Таблицы переходов автомата – массив goto.

Итог: Куда ушла истерия?

Массовый психоз слегка поутих, когда индустрия ценой потерь, «пота и крови» поняла: плох не инструмент (оператор goto), а неумение им пользоваться [26]. В языки C#, Go, Rust прямо и под видом более «благозвучных» слов вернули goto (инструкции break/continue label, блоки defer).

Если вдуматься throw-catch это goto, прыгающий на метку через десятки кадров стека. [27] Ирония судьбы: люди, презиравшие goto, с упоением писали throw, творящий куда более страшные вещи с кодом и процессором.

Продолжение истории

История на этом не заканчивается: патриотам нужны враги. В 2022-26 г. врагом и предметом травли назначены языки С/С++ – фундамент кодовой базы свободного программного обеспечения (opensource).

Белый дом и силовики США (CISA, NSA, FBI), Англии, Канады и Австралии объявляют C/C++ «угрозой национальной безопасности». Бизнес законодательно и финансово принуждают переходить на «безопасные языки» Go, Java, Python, Rust. За ошибку в программе на C/C++ будут крупные судебные иски, за код на Rust нельзя судить. [7] [8]

Есть мнение, что истинная цель государственной войны с языком программирования – opensource. Ведь, если C «запрещённый язык», то и программы на нём попадают под запрет.

3. РЕЛИГИЯ ООП

Клан. Иванов Б.

1990 гг. десятилетие истерии вокруг объектно-ориентированного программирования ООП. «Полиморфизм, инкапсуляция, наследование» – объявлены «новыми принципами веры». Их бездумно тиражируют в миллиарды строк кода, а «отрицателей» предают социальному бойкоту (остракизму).

Рассмотрим «инкапсуляцию». Контейнер struct в С группирует и хранит поля. Здоровый ум говорит: чем больше открытых полей, тем лучше – код краток, нагляден, в него сложно добавить лишнее. Но догма религии требует «прятать всё». Код нашпиговывают функциями, чья суть исключительно читать и писать поля!

  
+-------------------------------+-----------------------------------------------+
| Было                          | Стало (суть кода не поменялась)               |
|-------------------------------+-----------------------------------------------|
| struct vec3 { double x,y,z; } | class vec3                                    |
|                               | {                                             |
|                               | private:  /* Прячем поля */                   |
|                               |     double x;                                 |
|                               |     double y;                                 |
|                               |     double z;                                 |
|                               |                                               |
|                               | public:   /* Читаем поля */                   |
|                               |     /* Геттеры (Чтение полей) */              |
|                               |     double getX() const { return x; }         |
|                               |     double getY() const { return y; }         |
|                               |     double getZ() const { return z; }         |
|                               |                                               |
|                               |     /* Сеттеры (Запись полей) */              |
|                               |     void setX(double px) { x = px; }          |
|                               |     void setY(double py) { y = py; }          |
|                               |     void setZ(double pz) { z = pz; }          |
|                               | };                                            |
+-------------------------------+-----------------------------------------------+
  

Дико? Смешно? Если да, загляните в код на Java!

4. РЕЛИГИЯ TRY-CATCH

В С функции возвращают статус выполнения, а switch(some_function()) строит ясное и лаконичное дерево логики. Такой код называют «сопоставление с образцом» или «pattern matching».

Исключения try-throw-catch – это механизм неявного (без исходного кода), движения вверх по графу вызовов до блока catch, способного обслужить «исключение».

Глядя на функцию, вы не знаете, какая именно строка даст из неё выход, а глядя на вызов исключения – где его обработают. Не соответствующий стандарту RAII код даст утечку или заблокирует ресурс при раскрутке стека. Таблицы раскрутки это дополнительно 15-30% кода, ломающего кэш и предсказатель переходов процессора.

1990 гг. десятилетие агрессивного насаждения «ада исключений». В Java в исключения оборачивают всё: от чтения файлов и сети до конвертации типов. В итоге на 3 строки полезного кода идёт 20 строк catch для исключений. [9]

В Комитете по стандартизации C++ сидят корпорации AT&T, Microsoft, Sun Microsystems и другие. Они стандартизуют библиотеку STL так, что вместо точки с запятой там ставят throw.

В итоге: игровая индустрия (Electronic Arts, Epic Games, Ubisoft) выпускает ESTL аналог STL без исключений, в Google C++ Style Guide первая же строка для исключений гласит «We do not use C++ exceptions». [10] В языках Rust, Go, Zig исключений нет вовсе.

5. БОЛЬШОЕ РАССЛЕДОВАНИЕ PYTHON

Грибной человек. Иванов Б.

Чтобы дойти до реальных и важных деталей, казалось бы «хорошо известных» вещей, необходимо тщательное исследование (то есть расследование) предмета. Пора привыкнуть к такому ведению дел.

АВС провальный «обучающий язык для непрограммистов»

АВС провальный «обучающий язык для непрограммистов» от министерства образования Нидерландов, более известный как Python.

«Пытаясь обучить программированию художников, группа государственного Центра математики и информатики Нидерландов обнаружила, что многое в программировании просто для учёных и инженеров, но не очевидно другим. Три с половиной года Гвидо ван Россум работал над ABC с амбициозной целью: создать простой, лёгкий в освоении язык для не программистов, таких как художники. Проект в итоге закрыт руководством». [11]

Гвидо вспоминает [12]: «Я начал работать над АВС младшим программистом. «Уничтожьте Basic!» – был девиз руководителя нашей группы. После 4-5 лет разработки, ABC не сработал. Целевая группа не смогла работать с ним на микрокомпьютерах, а для пользователей Unix он был лишним»».

4-5 лет разработки учебного языка?! Очевидно, с этим языком «не заладилось что-то» сразу.

  
СРАВНЕНИЕ СРОКОВ РАЗРАБОТКИ ЯЗЫКОВ
+-----------------------+-------------------------+-----------------------------+
| Язык                  | Срок разработки         | Авторы                      |
+-----------------------+-------------------------+-----------------------------+
| C (Bell Labs)         | Менее 1 года (1971-72)  | Деннис Ритчи                |
|-----------------------|-------------------------|-----------------------------|
| Pascal (ETH Zurich)   | Около 2 лет (1968-70)   | Никлас Вирт                 |
|-----------------------|-------------------------|-----------------------------|
| Scheme (MIT)          | 1-2 недели (осень 1975) | Джеральд Сассмен, Гай Стил  |
|-----------------------|-------------------------|-----------------------------|
| JavaScript (Netscape) | 10 дней (май 1995)      | Брендан Эйх                 |
|-----------------------|-------------------------|-----------------------------|
| ABC (CWI)             | 4-5 лет (1982-87),      | Ламберт Меертенс, Лео Гертс,|
|                       | провал                  | Гвидо ван Россум и др.      |
+-----------------------+-------------------------+-----------------------------+
  

Рождение Python

Легенда гласит, что «на зимних каникулах» 1989 г. Гвидо пишет интерпретатор АВС, в 1991 г. добавляет к нему «своё видение мира» и, назвав это в честь цирка «Монти Пайтон», выкладывает в хакерскую сеть Usenet.

«Этот проект, созданный без финансирования, напоминал типичный Skunkworks – экспериментальную разработку энтузиастов» – восторженно перескажет корпоративная пресса байку о «стартапе» из «гаража» «гика».[13]

Но исторический первый python-0.9.1 [14] это 670 КБ (20.000 строк) чистейшего, сделанного по науке С кода, с подписью «Copyright 1991 by Stichting Mathematisch Centrum, Amsterdam», и 200 КБ Python скриптов.

Такая разработка по силам лишь группе высококлассных специалистов. Как те, с кем Гвидо работал в 1987-91 гг., попав в группу операционной системы Amoeba Эндрю Таненнбаума. Автора ОС Minix.

Может пресса что-то привирает, а Гвидо что-то недоговаривает?

Что есть Python?

Python это среда выполнения кода со специализацией «системное администрирование». Изначально создана для замены «скритпов» командной строки Unix (bash, sh) – несложной логики в несколько строк кода в «наивном» стиле. Ими автоматизируют администрирование ОС: «дергают» утилиты, «парсят логи».

Python постоянно адаптируют под появляющийся софт и потребности, поэтому среда вбирает в себя «всё отовсюду»: работу с файлами, сетью, процессами, а позже – с библиотеками математики на С. Разработчики не гарантируют, что те же скрипты будут выполняться по мере модификации среды, и выпуски обновлений периодически ломают систему.

«Python постоянно менялся. Мы никогда не были одним из тех языков, которые говорят: если вы напишете код на этой версии Python, он будет работать вечно с любой новой версией языка». (разработчик ядра, Бретт Кэннон) [15].

Ниша Python – это «одноразовый код» (disposable code), кодирование под конкретную сиюминутную задачу с расчетом на то, что код быстро удалят или перезапишут. Disposable code популярен у системных администраторов, в малом/среднем (обывательском) бизнесе, в стартапах, где условия меняются каждый день, и в кустарной математике («написал, выполнил, выбросил»). В таких условиях «на века» не пишут.

У Python нет стабильного домена. Это не С для машин архитектуры фон Неймана (один к одному транслируется в ассемблер), не SQL для таблиц, ни Erlang для высоко нагруженных телекоммуникаций, ни PHP для компоновки текстового HTML и данных (PHP тоже не язык, а среда выполнения (engine), настраиваемая и управляемая С-подобными скриптами).

В среду Python добавляют возможность работы в разных доменах в синтаксисе языка неудачного педагогического эксперимента 1980 гг.

Пример 1. Символьные математические вычисления в SymPy

***
  
from sympy import symbols, diff, sin, integration

# Объявить математические символы
x, y = symbols('x y')

# Объявить символьную формулу
expression = sin(x)**2 + x*y

# Символьно вычислить производную по x
derivative = diff(expression, x)

print(derivative) #Выведет символы: 2*sin(x)*cos(x) + y
  

Пример 2. Работа с SQL в пакете SQLAlchemy

***

# SQL-запрос на доменном языке

# SELECT * FROM users WHERE status = 'active' ORDER BY id DESC;

# SQL запрос в синтаксисте Python

from sqlalchemy import select
from sqlalchemy.orm import Session

stmt = (
    select(User)
    .where(User.status == "active")
    .order_by(User.id.desc())
)

session.execute(stmt) # Выполнить SQL запрос

Хорош ли Python для обучения?

Сельская жизнь такая, какая она есть на самом деле. Любаров В.

Сам создатель среды не рекомендует её для обучения компьютерным наукам.

«Python стал популярен из-за простоты использования. Ван Россум считает, что его не следует преподавать всем, и что усилия по обучению программированию оправданы: «Вероятно, мы даем слишком многим людям поверхностную подготовку. Шестинедельный или шестимесячный интенсив, возможно, сделает вас приемлемым веб-разработчиком начального уровня, но в конечном итоге у вас не так много перспектив. Это как копать канавы. Рано или поздно кто-нибудь разработает бульдозер для этой области»». [16]

Отношение Гвидо к Python как к инструменту для «одноразового кода» не пренебрежение, а трезвый взгляд честного программиста. Может прав был в 1970 гг. Дейкстра? «Программирование – это дисциплина доказательства корректности. Языки, скрывающие структуру данных и обучающие синтаксису вместо математической логики, калечат мышление студентов, лишая их понимания, как на самом деле работает машина».

Секрет популярности

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

В 1996 г. аспиранты Пейдж и Брин пишут на Python часть поисковой машины. В 2000 гг. корпорация Google издаёт внутренний приказ: «Python – везде, где сможем», нанимает Гвидо, и пропагандирует заманчивый для кустарей тезис: «Код Python в 3-5 раз короче С/Java, и пишется в разы быстрей».

И хоть реальная работа с Python это «производственный ад», пресса рождает очередную религию для масс.

Python в больших приложениях

Кто бы мог подумать, но Python не для самолётов, ракет и теплоходов. Может, он хорош в «большом бизнесе»?

Джос Виссер «ветеран» корпоративных или «enterprise» систем. В 1998 г начал системным программистом в банке (кластера IBM, Sun, HP), с 2006 г. 10 лет работал в Google (YouTube, Maps SRE, Cloud), затем техническим руководителем команд в Amazon и Facebook (Meta).

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

Python для большого приложения – это как строительство ядерного реактора из кубиков Lego: там яркие цвета, и начать было очень просто. Но реактор уже работает, повсюду утечки радиации, и никто не смеет ничего трогать. Вместо этого люди приклеивают новые кубики повсюду, чтобы поддерживать его работу. Единственное, что можно в этом случае сделать, это залить реактор бетоном, дать ему остыть и построить новый из подходящих строительных материалов.

Главная причина, по которой люди хотят использовать Python, – это его «простота в использовании». Это не только неправда, но и полное непонимание расчёта стоимости владения кодовой базой (Total Cost of Ownership, TCO). Кому какое дело, что первые 20% разработки были вдвое быстрее, если остальные 80% – это ад отладки и поиска проблем, которые обнаружит любой компилятор 1960 гг.?

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

Python доставил мне массу проблем. Он медленный, как патока, и совершенно непригоден для программ более чем в 100 строк кода.

Я перевёл всё своё нетребовательное программирование на Go. Писать на нём так же легко, как на Python, он типобезопасен, быстро собирает и оптимизирует бинарные файлы. Go не идеален (идеальных языков нет), но он гораздо лучше Python, и даёт надёжный, быстрый код, который, по крайней мере, можно отлаживать и улучшать.

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

Python ужасен. Но у него есть одно положительное качество: его изобрел голландец ! :-)». [17]

Немного иронии

Как вам «язык», где случайное добавление одного пробела – не видного глазу символа, меняет логику программы? Возможно, такой язык «незаменим» в банках (где деньги лежат) и в управлении реакторами и самолётом?

Знаки __ «магических» функций, обязательно первый параметр self в функциях класса, ключевые слова global и nonlocal для областей видимости, несомненно, полезны при «дизайне языков». Как антипример, конечно.

Из-за «скорости» выполнения без Python не обойдётся ни один расчет и «искусственный интеллект». Ведь, как пишет пресса, это «язык математики и нейросетей», не так ли?

Гудбай, Питон!

Python выполнил историческую миссию. Он был «костылем» для сисадминов 1990 гг., дешёвым disposable-кодом в стартапах 2000 гг. и временной связкой для C в первой волне хайпа нейросетей.

Сегодня код пишет и оптимизирует искусственный интеллект, и «простой императивный синтаксис для дилетантов» ему не нужен. Стоимость нового компилятора и доменного языка DSL упала до нуля. Нейросеть пишет под задачу математически строгий DSL с идеальным машинным кодом для GPU/TPU. Здесь нет места универсальному императивному «клею».

6. ИИСТЕРИЯ

Мой друг мажор. Иванов Б.

Тема хайпа 2024-26 гг. вокруг искусственного интеллекта раскрыта в статье [19] и её авторском переводе «Помешательство вокруг ИИ парализовало принятие решений» [20]. рекомендую к чтению оба варианта.

ЛИТЕРАТУРА

***

[1] https://github.com/myfoundation/EvolutionaryEngineering/tree/main/articles_sources/article-02-it-madness
[2] https://github.com/mraible/history-of-web-frameworks-timeline
[3] https://habr.com/ru/articles/720486/
[4] https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
[5] https://prog.school.ioffe.ru/2022-2023/Structured_Programming_With_goto_Statements.pdf
[6] https://lkml.org/lkml/2003/1/12/128
[7] https://media.defense.gov/2022/Nov/10/2003112742/-1/-1/0/CSI_SOFTWARE_MEMORY_SAFETY.PDF
[8] https://www.cisa.gov/sites/default/files/2023-12/The-Case-for-Memory-Safe-Roadmaps-508c.pdf
[9] https://medium.com/javarevisited/the-checked-exception-mistake-that-haunts-java-30-years-later-eb4b4f4d1514
[10] https://google.github.io/styleguide/cppguide.html#Exceptions
[11] https://ospo.gwu.edu/python-wasnt-built-day-origin-story-worth-knowing
[12] https://www.cwi.nl/en/stories/interview-guido-van-rossum-201cid-rather-write-code-than-papers201d/
[13] https://www.gazprombank.tech/blog/1249/
[14] https://github.com/smontanaro/python-0.9.1
[15] The Story of Python and how it took over the world, Python: The Documentary, https://www.youtube.com/watch?v=GfH4QL4VqJ0
[16] https://www.forbes.com/sites/oracle/2018/11/20/by-welcoming-women-pythons-founder-overcomes-closed-minds-in-open-source/
[17] https://josvisser.substack.com/p/why-python-is-terrible
[18] https://ru.wikipedia.org/wiki/AngularJS
[19] https://hermit-tech.com/blog/ai-mania-is-eviscerating-global-decisionmaking
[20] https://habr.com/ru/articles/1068470/
[21] https://nbahob.ru
[22] http://lubarov.ru
[23] https://www.hindustantimes.com/trending/us/exgoogle-contractor-says-indians-hire-indians-in-silicon-valley-there-s-a-network-101778646125511.html
[24] https://www.newyorker.com/news/q-and-a/googles-caste-bias-problem
[25] https://habr.com/ru/companies/compo/articles/977736/
[26] О вреде GOTO-фобии https://habr.com/ru/articles/720486/
[27] Throw – это новый goto. https://habr.com/ru/articles/933454/

Комментарии (1)


  1. pastop
    19.08.2026 17:03

    Простите меня пожалуйста, но если сельский учитель в таком же духе будет преподавать своим ученикам, мне кажется что это плохо закончится. Программирование это не конь в вакууме, любая программа, даже 'Привет, мир' имеет какую-то цель, решает какую то задачу, после прочтения этой конкретной статьи я почему то сделал вывод что я не нужен, я пишу какую то ересь на неправильном языке. И всем кому я помогал, кого мотивировал пытаться писать код я оказал медвежью услугу... Может в статье не хватает какой то отметки ИМХО?