Ты не хочешь думать как программист
От переводчика:
Я технический руководитель Букмейта. Самое важное для меня — собрать таких парней, с которыми мне не придется выступать постоянными переводчиком с бизнеса на программистский. Жизнь слишком коротка для этого.
Эту статью скинул мне Леша Гусев — человек, у которого я многому научился и продолжаю учится каждый рабочий день. Спасибо тебе, Леша!
Он скинул ссылку в скайп со словами «ого, чувак написал мой манифест».
И я с ним совершенно согласен.
———————
Научить вас думать как программиста — часто вводные книги и курсы по программированию так обозначают свою цель. Конечно, это лучше, чем чересчур узкое «научить Java». Не стоит понимать это буквально. Более честной и точной формулировкой было бы «научить аналитически декомпозировать задачи». Но пусть эта начальная, кривая последовательность слов — «думать как программист» — послужит нам предостережением и напоминанием.
Ведь на самом деле вы не хотите думать как программист.
Всё начинается с малого, когда вы учитесь первым good coding practices. Никогда не используй глобальные переменные — упаковывай все данные в объекты. Пиши геттеры и сеттеры для того, чтобы скрыть внутреннее представление данных. Используй const, где это только возможно. Только одно объявление класса на файл, пожалуйста. Форматируй исходный текст так, чтобы его было удобно читать и понимать другим. Удели время на расстановку знаков равенства так, чтобы получились красивыe, аккуратные столбцы.
Со временем это перерастает в мышление в паттернах программирования и цитировании «Совершенного кода». Все эти ничего не понимающие люди хотят, чтобы вы добавили фичи, которые трудно впилить в вашу прекрасную архитектуру. Они что, не понимают, что сложность — это враг? Вы приходите к осознанию, что каждый раз, когда полезная программа написана на Перле или PHP — это позор для всей computer science. Лисп — вот правильный путь, и его стоит использовать, даже если у вас нет доступа к большинству библиотек, делающих Питон таким необходимым инструментом. Однажды вы начинаете доказывать, что статическая типизация лучше динамической, и проповедовать TDD, — вот тогда все пропало.
Всё это не так уж плохо само по себе, но всё вместе это захватывает ваш разум. Вы должны быть без ума от предметной области, в которой работаете — как сделать игру без этих скучный тьюториалов, какой самый выразительный набор инструментов для фотоприложения, — а не от этих бесконечных «программистских» мыслей.
Я часто вижу, как люди пытаются научиться делать что-то (сайты, компьютерные игры или, например, писать песни), просто успешно завершая проект за проектом каждый день/неделю/месяц. Я обожаю этот способ! Он абсолютно прямой, захватывающий и вдохновляющий. Это прекрасный путь обучения! Первые проекты — они все про получение чего-то (чего угодно) рабочего. Далее следует переработка знакомых вещей. Написать змейку, например. Или тетрис.
Если вы уже отправились в подобное путешествие, то лучшим первым шагом будет исследование своих собственных идей. Не копируйте то, что было скопировано вашими предшественниками с тех, кто были до них. Экспериментируйте. Делайте безумные вещи. Реализуя лишь то, что было придумано раньше, вы делаете себя реализатором, инженером чужих идей, программистом. Используйте возможность заработать репутацию создателя нового.
И неожиданно вы поймете, как кодить.
P.S. Перевод под редакцией Владимира Харитонова