Польза goto в C++

TL;DR: Дейскстра учился писать код с goto, научился, раскритиковал применение goto, учебные программы усложнили т.к. “так сказал великий Дейкстра”, учить детей программированию стало сложнее.

Польза goto в C++

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

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

Goto – это оператор в программировании, который позволяет передать управление программы на другую строку кода. Одним из самых известных критиков goto был Эдсгер Дейкстра, который в 1968 году написал знаменитую статью "Goto statement considered harmful", в которой он утверждал, что использование goto делает программы запутанными и трудными для понимания.

Многие гении, включая Дейкстра, научились программировать, когда оператор goto был основой программирования и для написания любых программ достаточно было понять как работает всего три ключевых слова (объявление переменной, if и goto). Это настолько просто, что начинающие изучение программирования мгновенно получали возможность писать любые программы.

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

Меня очень расстраивает мир, в котором С++ считается сложным языком и детей учат не программировать, а таскать кубики в scratch, мне нравится мир, где новые программисты разрабатывают игры на C++ с лёгкостью и интуитивным пониманием логики своих программ. Сейчас на создание одной игры уходят месяцы, что может быть связано с излишней сложностью и наслоенностью современных подходов к программированию.

В моем блоге на DTF опубликовано много листингов игр и простых программ на С++. Например, вот пост, в котором более детально рассмотрено то, как писать игры на С++, зная всего 3 ключевых слова: https://dtf.ru/u/541204-huldra/1641083-dlya-sozdaniya-igr-na-c-dostatochno-znat-vsego-3-klyuchevyh-slova-i-dvoetochie

FAQ:

Q: goto - квинтэссенция зла, это самая вредное ключевое слово, Дейкстра так написал!
A: если бы goto был настолько вредным, как утверждалось, Дейкстра и другие программисты золотой эры не смогли бы достичь таких высоких результатов в своей профессии.

Q: почему не изучить полезные while, do-while, for, break, continue, else и switch сразу вместо вредного goto?
A: компьютеры работают на основе передачи управления между различными участками памяти. Использование goto позволяет понять этот процесс на интуитивном уровне, что дает начинающим программистам представление о внутреннем устройстве компьютеров. Изучить и понять if и goto можно за пару минут, после чего можно развивать алгоритмическое мышление, делать игры и получать удовольствие. Именно получение удовольствия в процессе обучения способствует глубокому пониманию и любви к предмету.

Q: зачем учить плохому?
A: не нужно рассуждать в терминах “goto - плохо”, сейчас детей учат программировать на по-настоящему плохих языках, которые работают в сотни раз медленнее C++, не пригодны для создания серьезных программ, вот это - действительно плохо, если уж так хочется вешать ярлыки. Изучать сразу С++ намного лучше, потому что постепенно изучая его можно научиться писать вообще что угодно, от игр и операционных систем до компиляторов и баз данных.

Q: а вот я научился/научилась писать сразу без goto и достиг небывалых высот, ясно?
A: это говорит о том, что ты действительно очень крутой, потому что большинство людей все еще не умеет программировать, потому что современный подход к обучению без goto усложняет обучение. Использование goto делает короткий код проще и понятнее для начинающих, чем использование сложных конструкций циклов. Это особенно важно в обучении, где необходимо донести базовые концепции программирования максимально легко и доступно.

Q: вот вы научите плохим практикам, разве это не станет вредной привычкой из-за которой везде будет макаронный код?
A: как было отмечено выше, многие программисты, включая Дейкстра, начинали с goto и впоследствии прекрасно адаптировались к программированию без его использования. На самом деле, в процессе обучения программированию проблемы, вызванные применением goto, становятся очевидны обучаемому.

1212
286 комментариев

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

10
Автор

Это ты вообще о чем?

2

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

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

Когда-то давно я научился делать так, а значит до конца жизни буду делать так.Ты бы лучше почитал текст, прежде чем позориться.
Вот, раз тебе сложно осилить столько текста:
программисты, включая Дейкстра, начинали с goto и впоследствии прекрасно адаптировались к программированию без его использования.Как только программа начинает усложняться, ученик сам увидит, что с goto ему уже не по пути.

А как ты выходишь из вложенных циклов?

Когда goto применялся, то приложения были простые. Сейчас ты даже калькулятор не напишешь без десяти слоёв абстракций и MVC. Я вообще не понимаю, почему это в 2024 году надо серьёзно обсуждать, это какой-то первоапрельский рофл.

5