Почему у вас не получается программировать

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


Имхо, есть два момента, о которые спотыкаются новички:

1) неумение разбираться с новыми инструментами на ходу.

2) неумение упрощать код, делать красиво и выстраивать архитектуру.


Хорошая новость: оба пункта про умения. Их реально развить, в разумные сроки. Плохая: развивать все-таки придется, и это работа.

Т.е. суть не в знании языков, фреймворков и прочих технологий. Суть в навыках. Когда они есть, инструменты ты освоишь. Зачастую курсы учат именно технологиям, а не навыкам, и поэтому не работают. Точнее, помогают тем, у кого и так получается кодить. И не работают для всех остальных.


А теперь подробнее по первому пункту. Текста получилось достаточно дофига, поэтому распишу только его. Если второй момент интересен, дайте знать.

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

А точнее, про способ их осваивания.


Сначала опишу, как многие привыкли учиться:

Сперва тебе рассказывают теорию. Потом всучат швейную машинку/станок/программу. Показывают пошагово, как этим пользоваться. Ты повторяешь. Дальше твоя задача год за годом совершенствоваться и становиться мастером, который с закрытыми глазами может фигачить на условной швейной машинке что угодно.

Да, я в курсе, что это еще хороший вариант. Где-то прочитали устаревшую теорию, 0 практики и лети птичка. Дело в том, что с программированием даже хороший вариант не работает. Вообще. Ты прилежно решаешь кучу упражнений, и все равно сыпешься на первой же реальной задаче.


Сначала - почему так, потом — что с этим делать.

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


Если снова поюзать пример со швеей: это как будто сегодня швея работает на промышленной швейной машинке, завтра на обычной, послезавтра - на раритете 1845 года, а потом еще использует веретено, и в пятницу надо совсем немного приземлить ту-204. Не, ну а че, добавили в проект 4 года назад, теперь поддерживаем.


Такой хаос может напугать. На некоторых курсах ничтоже сумняшеся обучают пятерке инструментов и выпускают в мир. Человек честно их учит, потом выходит на первую работу, а там из пяти известных ему швейных машинок есть одна. А рядом с ней еще пара десятков неизвестных. Включая ту-204. И приплыли.

В универах делают по другому. Там фундаментально пытаются залить в голову всю базу и все машинки. Серьезно, вообще ВСЕ. Но пока ты на парах их 4 года учишь, половина устареет, а треть обновится до неузнаваемости. Еще часть ты забудешь. И самое главное — все равно будет куча технологий, с которыми ты даже не сталкивался.


Окей, что с этим делать. В первую очередь: не пытаться все зазубрить и запомнить. Забить на попытки найти «фундаментальный талмуд всего», который тебе объяснит программирование целиком. Нет сейчас таких талмудов. Кто-то справедливо писал, что если в ит ты читаешь книгу, то она устарела на полгода. Если книга в бумаге — на пару лет. Основное наше чтиво — это статьи по самым разным сайтам.

Понять, что никто не будет кидаться в тебя тапками на (адекватной) работе, если ты скажешь «точно не помню, сейчас проверю». Мы все точно не помним, и переодически гуглим базовый синтаксис языка, на котором пишем лет 5. Инфы слишком много. Ее нереально запомнить, и не надо даже пытаться так насиловать свои мозги, это кощунство. Есть поисковики. Не стоит пытаться освоить все инструменты в совершенстве. Их дофига, тебя не хватит. К счастью, и не нужно.

Нет, это не раздолбайство. Да, опытные программисты тоже вечно гуглят и не помнят наизусть. Да, так можно и нужно. Опросите 10 штук нас и проверьте.


Второе, что стоит сделать: осознать, что прогеры сейчас работают в режиме машины по перевариванию информации. Тебе упала задача. Ты раскапываешь, какой инструмент тебе нужен для ее решения. Раскапываешь туториал к нему. Бегло осваиваешь. Решаешь задачу. И выбрасываешь это нафиг из головы, потому что завтра будет то же самое. Оперативную память нужно очищать.

То, что используется часто, запомнится само. Конечно, есть какие-то основные инструменты, которые лучше знать. Но опять же — ты их знаешь только потому что часто пользуешься. И только до тех пор, пока часто пользуешься)

(я везде пишу просто «инструменты», потому что это может быть что угодно. Фреймворки, библиотеки, бд, системы контроля версий, сервисы очередей и любая другая любимая дичь)


В общем, не нужно боятся этого хаоса, не нужно пытаться его систематизировать, а вот научиться ориентироваться в нем — нужно.

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


Хорошо, но если не пытаться учить фундаментальные талмуды, тогда что делать?

Прокачивать навык осваивания инструментов на лету. Это третье и главное.

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


Теперь совсем вкратце, порядок действий:

- пошел, бегло прогуглил непонятное слово. Прикинул, о чем речь. НЕ нужно на этом этапе читать документацию на 500 страниц на английском. Даже если на форуме тебе снобы скинули на нее ссылку :) НЕ нужно тем более ничего зубрить.

- нашел какой-нибудь туториал. В нем нашел небольшой пример кода. Желательно понимать в нем процентов 50-70. Если вообще не ничего понятно, ищи другой. Если понятно 50-70%, остальное пока игнорируем. Да, игнорируем.

- Сtrl+c, ctrl+v. Запускаешь. Скорее всего, оно крашнется. И поехали: смотришь, с какой ошибкой крашнулось. Гуглишь ошибку. Копируешь найденный код, вставляешь. Запускаешь. Крашнулось с новой ошибкой. Это прогресс. Радуешься, гуглишь новую ошибку. Сtrl+c, ctrl+v. Запускаешь. Выводишь значения переменных. Запускаешь - смотришь, че в них. И так, по одной строчке разбираешь код, пока он не заработает.


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

Конечно это в общих чертах. Надо бы расписать подробнее и на конкретном примере, но текста и так много. Постараюсь попозже нарожать разобранных примеров.


Что еще важно отметить: здесь написано только про первый пункт, про инструменты. Но есть еще минимум один — он про «писать код красиво и правильно». Если освоить только первый, получится говнокодер. Лучше, чем ничего, но все-таки.

Возможно, у некоторых программистов с 15ю годами стажа пригорит. Ведь не по-фэншую говорить новичку «игнорируй непонятное и гугли». Но ребят. Если вы изучили программирование сами, то скорее всего у вас все нужные навыки были из коробки. (у меня были) И вы можете себе позволить начать сразу с фэншуя и вдумчивого курения туториалов. Не у всех так прокатывает.


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


Если подвести итог. Мое однозначное имхо: при изучении программирования концентрироваться нужно не на языках или фреймворках. И даже не на алгоритмах и другой безусловно полезной фундаментальщине. Сначала необходимо вкачать базовые навыки, которые позволят курить языки, фреймворки и алгоритмы. И один из них — быстрое осваивание новых инструментов