Чуть более 8 месяцев назад я начал путь к тому, чтобы стать инженером-программистом, записавшись на курс Full Stack Web Development в Lambda School. С тех пор я пишу код почти каждый день. Я изучил несколько языков программирования и научился создавать все элементы веб-приложения. Но здесь я хочу описать все остальное, что я узнал — об обучении, программировании, разработке программного обеспечения и моем личном развитии — таким образом, который, я надеюсь, будет полезен всем, кто рассматривает подобный путь, и всем, кто уже находится на этом пути.
Создание программного обеспечения часто похоже на использование программного обеспечения (Do Re Mi)
Если вы никогда не писали никакого кода, это может быть пугающим для начала. Во-первых, код выглядит как бессвязные символы, слова и цифры. Затем вы научитесь понимать его как операторы, переменные и «предложения», организованные в разделы со знаками препинания. Вы можете ПРОЧИТАТЬ код! Затем вы пишете свой собственный код, и он работает — он что-то делает!
Отсюда еще многому предстоит научиться, и впереди еще много испытаний. Но вот ключ: прежде чем вы это узнаете, у вас будут строительные блоки, которые вы сможете повторно использовать и соединять вместе. Сначала какие-то функции и блоки кода, потом файлы, библиотеки и API. Когда вы изучите эти строительные блоки, вам не нужно каждый раз писать весь код. Вам нужно только подобрать нужные детали и сшить их вместе.
По словам Марии фон Трапп (Джули Эндрюс) в «Звуках музыки»:

Важно знать, какие инструменты у вас есть, какие другие инструменты доступны и как их комбинировать.
Предыдущее инженерное образование помогло, но не так, как я себе представлял.
Я знал, что моя степень в области машиностроения поможет мне, но это не помогло мне так, как я себе представлял. Я прошел курс по Matlab и немного использовал Java для некоторых проектов, что определенно придало мне уверенности в самых базовых концепциях. Я также думал, что математика и тяжелая математическая инженерия, которую я изучил, помогут с конкретными проблемами кодирования. И так оно и было в некоторых случаях. Но это образование помогло гораздо больше, так как оно сформировало мой общий подход к кодированию.
При обучении кодированию и созданию программного обеспечения важно свести новые концепции к ключевым принципам, которые можно обобщить для разных приложений. Когда я изучал машиностроение, я понял, что существует слишком много вариантов любой задачи, чтобы изучать и практиковать каждый из них. Ключ в том, чтобы найти базовые принципы, на которые вы всегда можете опереться, и знать, когда их применить. Примерами этого в машиностроении являются 3 закона движения Ньютона, 3 закона термодинамики и уравнение Бернулли для потока жидкости.
В разработке программного обеспечения, как и в любой другой области, требуется время, чтобы глубоко усвоить и понять основные принципы и то, как они применяются в различных контекстах. Вы не «поймёте» после первого увиденного примера. И важно не зацикливаться на конкретной концепции, потому что вы не уверены на 100%, что понимаете ее. Просто помните, что обычно есть какой-то основополагающий принцип или, по крайней мере, какая-то модель, которую вы можете изучить и на которую можно положиться позже.
Чтобы научиться программировать, вам не нужно инженерное или техническое образование
Да, предыдущее инженерное образование может быть преимуществом, но оно не является однозначно особым преимуществом (кроме КС, которое, при прочих равных, безусловно преимущество). Некоторые гораздо более важные характеристики:
- Понимание прочитанного
- Вдумчивый и организованный подход к обучению
- Трудолюбие и внимание к деталям
- Стремление неустанно искать области, в которых вам нужно совершенствоваться, при этом чувствуя себя комфортно с несовершенством.
Если вы хороший писатель, вы можете стать хорошим программистом. Если вы умеете слушать и задавать хорошие вопросы, вы можете стать хорошим программистом. Если вы умеете следовать указаниям, вы можете стать хорошим программистом. Если вы можете одновременно удерживать в уме несколько идей и соединять их вместе, вы можете стать хорошим программистом.
Повторения, повторения и еще раз повторения
Вы должны потратить время и действительно построить что-то, чтобы понять, как это работает. Как только вы это сделаете, вы можете смыть и повторить, с каждым разом становясь лучше. Очень скоро то, что когда-то казалось геркулесовой задачей, станет похоже на завязывание шнурков. Это связано с моими предыдущими замечаниями о том, как создание программного обеспечения похоже на использование программного обеспечения после того, как вы установили строительные блоки, и о важности понимания основных принципов. По мере практики создание программного обеспечения будет больше похоже на использование программного обеспечения, и основные принципы станут более ясными.
Планирование, подготовка и приоритеты
Если вы хотите учиться и развиваться быстро, как в Лямбда-школе, предвзятость к действию и настойчивость имеют решающее значение, но вы не можете жертвовать планированием, подготовкой или расстановкой приоритетов (т. е. стратегическим распределением времени и энергии).
Задача, конечно, состоит в том, чтобы сбалансировать все эти цели. Не существует «одного способа», применимого к каждому человеку и к любой обстановке, но я могу предложить несколько советов по обучению программированию в таких условиях, как Lambda School.
Если у вас есть задания перед лекцией, сделайте их. Учебная программа существует не просто так. Какая-то часть подготовительной работы будет более ценной, какая-то менее ценной. Иногда у вас будет много времени и энергии, чтобы посвятить этому, а иногда у вас будет очень мало. Просто убедитесь, что вы делаете это как можно лучше, потому что вы можете не знать, пока не станет слишком поздно, как все сочетается друг с другом.
Следите за призом и не заходите слишком далеко в кроличьи норы. Если вы когда-нибудь начнете задумываться, не провалитесь ли вы в кроличью нору, скорее всего, так оно и есть. Иногда это полезно, и вы узнаете ценные концепции, которые можно применить позже. Чаще всего вы тратите время впустую, когда должны были бы перенаправить его к более важной цели. Полезно регулярно спрашивать себя: «Какова цель, ради которой я работаю, и помогает ли это мне в ее достижении?»