Найти в Дзене
ZDG

Как (не) научиться программировать

Оглавление

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

До сих пор я считал, что программированию может научиться каждый – для этого требуются только понятные объяснения. Мне представился шанс преподавать программирование школьникам, и вот какие проблемы я встретил.

1. Мотивация

Это покажется странным, но человек просто не хочет учиться. Он зачем-то заплатил денег и пришёл на курсы. Но он там не учится, а смотрит видосы в телефоне. Видосы ему интереснее, чем программирование.

Непонятно одно – а зачем он вообще пришёл? Ведь его никто не заставлял.

Отсюда вывод номер один:

Чтобы научиться программировать, программирование должно быть для вас интереснее прочих занятий. Если вы не уходите туда с головой, надеяться не на что.

2. Удержание контекста

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

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

Потом вы пошли в зоомагазин, купили собачий корм и пошли в другой магазин. Там вы положили пакет с кормом в камеру хранения и стали совершать другие покупки. Расплачиваясь на кассе, вы услышали, что в телефон пришло сообщение.

Таким образом, в данное время и в данном месте для вас существует информационный контекст, состоящий из разных сущностей: у вас есть покупки на руках, сообщение в телефоне, пакет в камере хранения и квитанция в почтовом ящике. Вы знаете, где что находится, и в какой последовательности это всё обрабатывать. Будете ли вы читать сообщение сейчас, или когда придёте домой? Как это сделать проще и удобней – суть вашего само-программирования.

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

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

Если не удерживать контекст, программа превращается в разрозненный набор заклинаний, которые работают непонятно как.

Вывод номер два:

Необходимо тренировать способность к удержанию контекста. Любые объяснения будут бессильны, если они не связываются в голове в одно целое.

3. Поток сознания

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

И это течение – его собственное сознание, которое безостановочно что-то генерирует.

Как с этим бороться, я не знаю, потому что не специалист. Но вероятно, здесь можно попробовать медитации для успокоения и концентрации. Речь даже не о программировании, так как эти проблемы мешают человеку и просто в быту. И значит, нужно решать сначала эти проблемы.

4. Порядок

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

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

Вывод номер три:

Чем быстрее вы начнёте писать аккуратный и структурированный код, тем легче вам будет.

Заключение

Если у вас есть мотивация – всё остальное не беда. Да, возможно у вас будут проблемы с пониманием, или с концентрацией, или ещё с чем-то. Возможно, вам покажется, что у вас ничего не выходит. Но фишка в том, что мозг – очень гибкая система. Пока вы заставляете его работать, он отращивает новые нейронные связи.

Поэтому вы можете что-то не понимать, и думать, что ситуация никогда не изменится. Но работа идёт, и в какой-то момент новые связи вырастут и в голове произойдёт "щелчок" и вдруг всё встанет на свои места. Это происходит именно так, внезапно. Главное – работать.