Новичковые скитания по поиску идеального языка программирования

a59228eba3aa3d556eeea22ae91e6d37

Предыстория (отрицание)

Когда я только начал интересоваться программированием, передо мной встал выбор — учить C или Python. В итоге, я выбрал Python из-за простоты использования языка. Под «использованием» я имею в виду «я не знаю что такое память, пока что нет времени учить как она работает, мне нужно написать что-то быстренько».

Это отлично сработало и не сказать что мой выбор был плох. Сейчас, когда я уже определился со своим направлением в программировании на ближайший период, я начинаю жалеть, мол «почему ты не начал с языка %X%, так бы быстрее влился в нужную тебе сферу». Хотя, по правде, эти жалобы — абсолютно бесполезны и некомпетентны, ибо на тот момент я не знал чего я хочу.

Казалось бы: сиди себе, программируй на Python простые программки и в ус не дуй. Однако, такой подход со мной не сработал — не могу я писать циклы, не понимая что происходит «под капотом». В итоге все свелось к тому, что я начал учить старый добрый C. Нет, не C++/Rust/Haskell или др., более абстрагированные языки, а именно C — мне он казался менее отстраненным от реальности на тот момент.

«Плохому танцору и ноги, и пол мешают» (гнев)

Изучение языка C шло размеренными шагами и, как у большинства людей, сопровождалось вопросами «Черт побери, что такое указатель? На кой черт он мне нужен? Да кому сдался такой тяжелый язык?». Прошу заметить, что в моем вопросе о тяжести языка шла речь не о синтаксисе, а о семантике.

Учил я, учил… писал всякие программульки: очень много раз натыкался на злющее сообщение »segmentation fault (core dumped)» и «радовался» жизни.
После того как я написал пару совсем простых программ, я стал ненавидеть C. В тот момент, меня можно было понять: до этого я писал на Python, писал программы намного быстрее, еще и работали они сразу. «Как можно вообще полюбить этот ваш C?»

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

Абстрагируемся с первой космической скоростью (торг)

С момента неудачи прошло много времени: мне уже не так хотелось учить все эти низкоуровневые штуки, хотя и к высокоуровневым штукам я относился новичково-скептически. Все же, я принял решение попробовать Rust и был очень приятно удивлен. Язык, будучи довольно низкоуровневым, позволял практически не думать о тех вещах, над которыми тебя бы били палками в C.

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

Я каждый день сидел с таким удовольствием над программированием на ржавом, что не хватило бы слов чтобы передать эти эмоции. Я и сейчас пишу на Rust, но уже с менее довольной рожей. Таким темпом проходит год, может полтора — и все прекрасно: мир розовый, мир полон пони, пора покупать кофе в Starbucks. Я активный участник коммьюнити Rust и по сей день — там прекрасные люди, которые действительно заинтересованы в языке.

С этого момента, я начинаю углубляться в различные, как мне тогда казалось, «глубинки» программирования: матлогика, теория множеств, лямбда-исчисление, теория типов. Это было завораживающе скучно, но и крайне интересно. Я, довольный студент первого курса по направлению «системное программирование», при помощи своих знаний, сдаю за 3 месяца до первой сессии компьютерную логику, дискретную математику, базовое программирование и алгоритмику. Еще и своих однокурсников по материалу натаскиваю. Все ведь хорошо, правда?

Все и вправду было прекрасно, до поры до времени. В какой-то момент, я начал ощущать тяжесть абстракций (хоть и даже 20% существующих не испытал на практике), которые мне казались великолепными и изящными при первой встрече. В действительности, я не профессиональный разработчик — у меня практически не было опыта разработки на тот момент. Так что, следующие статьи, в совокупности с некоторыми другими, все же выбили меня из колеи:

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

Вышеупомянутые статьи все еще актуальны для современного Rust, не смотря на то, что одна из статей — 2019 года: очередная проблема Rust формата «ожидайте™».

«Чем больше шкаф, тем громче падает» (депрессия)

Сел я, значит, в один солнечный день, и думаю: «Шо ж делать-то, друзья мои?». Мне было абсолютно ясно, что, например, для бизнеса, было абсолютно неважно на чем ты решаешь его проблемы, да хоть на бумаге: главное, чтобы это работало, это было поддерживаемо и можно было бы найти разработчиков для увеличения штата сотрудников. Однако, с того момента, программирование для меня стало чем-то бОльшим, чем просто «работа». Я вливаюсь туда с душой, а получаю негативный «отпор», что-ли… я хочу совершенствовать существующее и создавать невозможное, но я, будто, ограничен то ли своими амбициями, то ли своей расстроенностью.

Тут я и начал свои скитания по разным языкам, в поисках различного интересного и идеального. Я успел опробовать: OCaml, Haskell, Java, NASM под x86-64 Linux, C#, Lua, Go, Zig, C++, Fortran, HLSL, Pascal, JS, Idris, APL и другие языки. Мне понравилось использовать функциональные языки, но они были довольно сложны, и меня это отталкивало. Не подумайте, что я не люблю сложности и сразу же все бросаю — нет. Я впрямь заинтересовался функциональной парадигмой: sum types, product types, dependent types — все это я изучаю и по сей день. Но, меня все еще беспокоит сложность языков — они действительно прекрасны своими элегантными решениями, но слишком сложны. Возможно, я устал от возможности делать что мне взбредет в голову, хоть и восхищаюсь этой возможностью. Не меньше меня беспокоила возможность «выполнить задачу %X% двадцатью разными способами на одном и том же языке».

Go довольно простой язык, но я ведь искал »идеальный» язык, а в эту категорию языки с GC не попадают, прошу простить.

Может, нужно что-то попроще, что-то элегантно простое?

Конец? (смирение)

Хоть и не полноценным, но достаточно адекватным решением в моей ситуации было следующее:

  1. Осознать очевидную вещь — »не бывает идеального языка программирования»;

  2. «Начать с чистого листа» — орудуем с самой основы используя язык C;

После того, как я поигрался с другими языками, вернувшись в C, я сразу же учуял запах старого деда. Однако, я бы не сказал, что это было плохо — это было… приятно? Хоть я и очень скучал по errors as values, удобному comp-time evaluation, гибкой системе типов, но я был сильно доволен простотой, понятностью и размеренностью языка C.

В этот момент я понял, что как бы другие языки не пытались трубить мол «я — самый лучший язык на планете», часто, это сводится к тому, что суть языка становится «перевернуть мир» и «показать всем как надо делать», а дальше занавес и пустота, затем — ничего. Будто им неинтересен результат крупной разработки.

Я действительно стал больше уважать C. У него есть минусы, есть плюсы — вы уже, наверное, и без меня это слышали, и еще услышите. Язык неидеален — это нормально, я это принял, но он достаточно прост, чтобы приблизиться к идеальности.

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

Итоги

«К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.»
Крылов И. А., 1815 год.

Знаете, а я даже рад, что в итоге прошел через эти 5 этапов. Может, я прошел их раньше остальных разработчиков/заинтересованных, а может и слишком поздно — кто знает. Главное, что я их уже прошел и нужно двигаться дальше.

Я пойму, если вы скажете, что эта статья — ни о чем. Кто-то посмеется, кто-то увидит себя в этом, кто-то не дочитает даже до этого момента — это нормально, я буду рад любому мнению.

Спасибо за внимание. Пойду на C попишу, что ли.
ООО «Безнадежная молодежь».

© Habrahabr.ru