Этот пост — второй из серии постов о моем мышлении новичка в качестве инженера-программиста. Первый пост — «Часть 1: Готовим бутерброды с марсианами». Прочитайте текст, выделенный жирным шрифтом, для 30-секундного резюме.

Конец шестой недели. Я уже замечаю, как перестраивается мой мозг. Каждую ночь, когда я возвращаюсь домой после 12-часового рабочего дня в Hack Reactor, я чувствую прилив энергии, как будто я чувствую, как новые кластеры информации проносятся через новообразованные нейронные связи в моем мозгу. Такого постоянного ощущения я не испытывал со времен языковых погружений в Бразилии и Перу. После 2 месяцев частичной подготовки к Hack Reactor и 5 80-часовых недель в Hack Reactor, что я заметил, что изменилось?

Меня больше не беспокоят ошибки в моем коде. Когда я впервые начал программировать, любая ошибка приводила меня в невероятное разочарование, потому что я не знал, что делать. Теперь я часто вхожу в методическое состояние ума, когда сталкиваюсь с ошибкой. Это меньше чувство «почему это не сработает?!?!?!?! Нееееет… падает на колени и трясет кулаками в небо», а также чувство «Хорошо, что я могу сделать, чтобы получить информацию, которая мне нужна, чтобы решить эту проблему?» Конечно, у меня еще бывают моменты, когда хочется выбросить свой компьютер в окно. Наши инструкторы говорят нам, что, к сожалению, эти чувства никогда не проходят. Тем не менее, мой теперь уже бесчисленный опыт обнаружения загадочной ошибки, о которой я буквально не мог даже попытаться догадаться, логически шагая по коду и находя ошибку, а потом моя программа работала, вселили в меня уверенность, что я выясню любую ошибку. в конце концов.

На самом деле, при отладке я почти так же рад найти новые ошибки, как и найти решение. Это потому, что новая ошибка означает, что я намного ближе к тому, чтобы добраться до корня проблемы. проблема и ее решение. Чтобы дать вам представление об эмоциях, которые вы испытываете во время этого процесса, скажем, что вы готовитесь к званому обеду и пытаетесь испечь торт, но ваш торт остается ужасным на вкус. Ты печешь 20 тортов, и каждый отстой. Наконец, вы понимаете, что добавляли столовые ложки соли вместо чайных ложек соли. Ваш следующий торт имеет потрясающий вкус. В этот момент вы понимаете, что ваша следующая «ошибка» в подготовке к вечеринке заключается в том, что ваша заправка для салата не очень вкусная. Но вы разгадали тайну торта и стали намного ближе к грандиозной вечеринке. У вас также есть этот настоящий торт, которым вы можете восхищаться и перекусывать, пока вы отлаживаете заправку для салата. Мысль о том, что я воодушевлюсь, обнаружив новую ошибку, просто ошеломительна, но теперь, когда я прошел через этот процесс много раз, она имеет смысл.

Кроме того, я действительно умею читать код. Я могу просматривать десятки строк кода Javascript в нескольких разных средах и не только понимать, что происходит, но и находить ошибки или логику, которые можно улучшить. Иногда я замечаю ошибки, не просматривая код построчно, что очень интересно, потому что это означает, что я развиваю способность делать то, что Малкольм Гладуэлл называет в своей книге Outliers «тонкими срезами». Тонкие срезы происходят, когда вы видели ситуацию достаточно часто, чтобы столкнуться с ней и сразу же разбить ее в уме на легко анализируемые компоненты или срезы.

Личная аналогия – научиться читать и писать на португальском языке. Сначала все слова представляли собой одну едва различимую массу на странице, но по мере того, как я узнавал больше слов и фраз, я начинал узнавать больше того, что я читал, пока не заметил опечатки в газетных статьях. Как и носители португальского языка, я научился тонко нарезать страницу на слова. В результате я совершенно по-другому взаимодействую с веб-приложениями и мобильными приложениями. Полезная аналогия для моего нового восприятия — серфинг. Когда вы впервые учитесь серфингу, вы смотрите на разбивающиеся волны и думаете: «Хорошо, эти волны выглядят прилично. Я думаю, я мог бы заниматься серфингом на них». После большего опыта вы бы смотрели на те же самые волны и думали: «Волны достигают высоты головы, около 5 минут между подходами и 5 волн в каждом подходе. Волны недостаточно напористы для шортборда, поэтому я возьму свой лонгборд. Есть небольшие белые шапки, и сейчас 10 утра, поэтому мне лучше выйти туда, пока ветер не усилился и вода не стала слишком неспокойной». Вы замечаете детали, о которых раньше даже не подозревали. Это увлекательно.

Когда я думаю о том, как я справлялся с ошибками, с которыми я столкнулся в последнее время в программном обеспечении других людей, я не думаю, что мой способ устранения неполадок отличается. Например, прошлой ночью мое приложение Facebook для iPhone внезапно закрывалось всякий раз, когда я открывал его. Я попытался открыть несколько других приложений, решил, что это просто проблема с приложением Facebook, удалил приложение и переустановил его. До того, как научиться программировать, я бы сделал то же самое. Разница в моем процессе и моем мышлении. Одним из конкретных примеров того, как изменился мой процесс, является то, что теперь я задаю себе «вопрос отладчика», которому нас учили в Hack Reactor: «какой компонент(ы) программы оправдывает мое неудовлетворенное ожидание, что текущая сломанная программа должна быть работа с фактами?»

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

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

Первоначально опубликовано на www.shanemkeller.com, апрель 2014 г.