Новичковые скитания по поиску идеального языка программирования
Предыстория (отрицание)
Когда я только начал интересоваться программированием, передо мной встал выбор — учить 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 не попадают, прошу простить.
Может, нужно что-то попроще, что-то элегантно простое?
Конец? (смирение)
Хоть и не полноценным, но достаточно адекватным решением в моей ситуации было следующее:
Осознать очевидную вещь — »не бывает идеального языка программирования»;
«Начать с чистого листа» — орудуем с самой основы используя язык
C
;
После того, как я поигрался с другими языками, вернувшись в C
, я сразу же учуял запах старого деда. Однако, я бы не сказал, что это было плохо — это было… приятно? Хоть я и очень скучал по errors as values, удобному comp-time evaluation, гибкой системе типов, но я был сильно доволен простотой, понятностью и размеренностью языка C
.
В этот момент я понял, что как бы другие языки не пытались трубить мол «я — самый лучший язык на планете», часто, это сводится к тому, что суть языка становится «перевернуть мир» и «показать всем как надо делать», а дальше занавес и пустота, затем — ничего. Будто им неинтересен результат крупной разработки.
Я действительно стал больше уважать C
. У него есть минусы, есть плюсы — вы уже, наверное, и без меня это слышали, и еще услышите. Язык неидеален — это нормально, я это принял, но он достаточно прост, чтобы приблизиться к идеальности.
«И начал он изучать C
, продолжил он падать на сегфолтах, страдать от макросов и невыразительности языка, но был он доволен как слон и ненасытен в познании нового как лев».
Итоги
«К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.»
Крылов И. А., 1815 год.
Знаете, а я даже рад, что в итоге прошел через эти 5 этапов. Может, я прошел их раньше остальных разработчиков/заинтересованных, а может и слишком поздно — кто знает. Главное, что я их уже прошел и нужно двигаться дальше.
Я пойму, если вы скажете, что эта статья — ни о чем. Кто-то посмеется, кто-то увидит себя в этом, кто-то не дочитает даже до этого момента — это нормально, я буду рад любому мнению.
Спасибо за внимание. Пойду на C
попишу, что ли.
ООО «Безнадежная молодежь».