Когда я закончил колледж в 2008 году, я много времени уделял музыке. Сразу после того, как я получил свою первую работу, я купил Macbook Pro и MIDI-клавиатуру. Используя только эти две части оборудования и программу, я обнаружил, что могу издавать любой звук, какой захочу. Возможности были безграничны.

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

Примерно через год, привлеченный (в то время) новым программным обеспечением под названием Salesforce и продемонстрировав некоторые сильные стороны технических навыков, я смог устроиться на работу аналитиком. Работа стала лучше, но я все еще не наслаждался ею в полной мере. Я чувствовал себя зверем в клетке. Я начал мечтать об идеях, которые могли бы изменить мою жизнь. Выход.

Моя первая хорошая идея родилась из моих музыкальных интересов. Что если кто-то захочет научиться играть на фортепиано? Каковы были их возможности для обучения? Они могли нанять частного инструктора, но это было дорого. Они могли пройти курс обучения в колледже, тоже дорогой. В сети была Википедия, но я ненавидел ее внешний вид. Изображения были отстойными, было слишком много гиперссылок, и это не было сосредоточено на определенных темах или направлено на обучение — я чувствовал, что это просто куча или извергнутая информация.

Я придумал Renaissance, версию Википедии нового поколения, в которой можно было искать общие темы по всем образовательным дисциплинам — например, по игре на фортепиано, химии или фотографии — и отображать достойную учебную программу. Я хотел дополнить текстовую информацию целой кучей интерактивных материалов, таких как видео, аудиоклипы и пользовательский опыт, специфичный для каждой темы (например, встроенный виджет с пианино, на котором можно играть). Ренессанс будет похож на маленький мини-университет, бесплатный и веселый.

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

Выберите платформу.

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

Выберите платформу, которой вы увлечены. Это оказывает большое влияние на языки, с которых вы должны начать. Нет смысла сразу погружаться в Java, если вы хотите только создавать приложения для iPhone. Конечно, стоит пройти курсы Intro to Computer Science, которые обычно начинаются с Java, но в свободное время изучайте то, что вас интересует. Большая награда приходит от ощущения приближения к созданию того, что вы хотите. Если вы этого не сделаете, все будет выше вашей головы, и вы почувствуете, что никуда не двигаетесь.

Когда у меня появился первый iPhone, я влюбился в iOS. Приложения Apple предоставили чистый интерактивный опыт, о котором я всегда мечтал. Apple была похожа на Волшебника из страны Оз, а я на Дороти. Мне нужно было выяснить, что скрывается за занавеской.

Так что я надел свои рубиновые тапочки и начал изучать Objective-C.

Смотрите лекции онлайн.

Представь, что ты снова в школе. Когда я открыл для себя iTunes U, я был поражен. Я только что закончил очень дорогой частный университет, и вдруг Стэнфорд и Гарвард стали бесплатно предоставлять полные курсы! Конечно, вы не можете оценить опыт колледжа и образование, но я был потрясен. С невероятной ценностью, доступной мне благодаря этому одному приложению, я еще больше погрузился в фан-мальчишество Apple.

Я был одержим курсом iTunes U по разработке приложений для iOS, который вел Пол Хегарти в Стэнфордском университете. Я смотрел каждую лекцию до тех пор, пока не начинал вникать в суть, иногда по три-четыре раза. Параллельно я писал свой код на примерах из лекций.

Я был полон решимости. Моя девушка ложилась спать, а я не спал до рассвета, пытаясь заставить мой код работать. Спустя несколько месяцев я смог освоить основы, необходимые для создания моего первого облачного приложения. Используя бэкэнд Parse (которого тоже больше не существует), я сделал примитивную версию своей идеи второго большого приложения. Happen было приложением, которое позволяло вам подписываться на ваши любимые интересы — спорт, книги, фильмы и т. д. — и предоставляло вам одну ленту событий для всех них. Вы всегда будете в курсе, когда выйдет следующая большая игра или когда Джордж Р. Р. Мартин наконец объявит о выходе следующей книги GoT (а ее еще нет). Оно так и не попало в магазин приложений, но я все еще надеюсь, что однажды оно появится.

Понимание типов данных.

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

Булевы значения, строки, целые числа, числа с плавающей запятой, массивы и словари (или типы данных «ключ-значение») являются общими для всех языков программирования, и все они должны стать для вас второй натурой, иначе вы не продвинетесь далеко.

Хорошее упражнение — просто подумать о повседневных технологиях, которые мы используем, и о том, какими свойствами и типами данных они могут обладать. Нравится:

Понимать объектно-ориентированное программирование.

Как и типы данных, это один из строительных блоков программирования, но мне потребовалось больше времени, чтобы разобраться в этом.

Если вы понимаете, как работают объекты, как их инициализировать (создавать) и как одни объекты могут наследовать свойства и методы от других, это значительно облегчит вашу работу. Возьмите этот простой пример из игровой площадки Swift:

Как только подобные вещи станут иметь смысл, вы будете на пути к созданию замечательных классов, которые используют наследование и предотвращают дублирование кода.

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

Изучите базовый стиль программирования.

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

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

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

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

Изучите технологию баз данных.

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

Мне очень повезло с этим, потому что моя работа аналитика заставила меня изучить SQL. Поэтому, когда моя команда в Wiblits начала использовать SQLite и PostgreSQL, это не было для меня совершенно чуждым.

Будь то SQL, MySQL или какая-либо технология NoSQL, понимание того, как работают технологии баз данных, станет большим шагом в этом путешествии.

Стремитесь стать полноценным разработчиком.

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

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

Попробуйте найти наставника.

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

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

Я также должен поблагодарить хорошего друга Колина Тернера, еще одного программиста-самоучку, который дал мне возможность выполнить мою первую работу по программированию в его стартапе под названием Wiblits. Я думаю, что за последние два года я узнал больше, чем за свои первые 28 лет, с точки зрения реальной жизни и опыта работы, и во многом благодаря нашему опыту стартапа в Wiblits.

Будьте в курсе.

Чтобы быть программистом, нужно знать новейшие технологии. Не изучайте Objective-C только потому, что вы нашли несколько видеороликов по нему в Интернете. Если вы хотите создавать для устройств Apple, теперь все о Swift.

Если вы хотите заниматься разработкой приложений, рассмотрите возможность изучения React, библиотеки на основе JavaScript, которую теперь можно использовать для создания как веб-приложений, так и мобильных устройств.

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

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

Одна из моих самых любимых групп — Jethro Tull. Если вы с ними не знакомы, то они были одной из самых успешных групп двадцатого века. У солиста Иэна Андерсона было так много денег, что к 28 годам он купил огромное поместье на острове у побережья Шотландии. Я слушал альбомы Tull в течение нескольких лет, когда обнаружил, что Андерсон так и не научился читать ноты. Когда его спросили, жалел ли он когда-нибудь об этом, он ответил «нет», что на самом деле большую часть своего успеха он приписал своей неспособности. Он сказал, что, свободный от ограничений теоретического образования в музыке, он смог исследовать новые музыкальные горизонты в то время, когда сама рок-музыка расширяла свои границы, а публика жаждала услышать больше экспериментальной и прогрессивной музыки.

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

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

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