В первой части данной книги мы рассмотрим азы начала карьеры разработчика программного обеспечения. Мы поговорим о том, как составить план развития карьеры, как стать программистом, какие технические навыки необходимы, чтобы добиться успеха в мире IT, и как улучшить эти самые навыки.
Вы также узнаете, какой язык программирования следует выбрать в качестве первого и как лучше всего его изучать: через самостоятельное обучение, посещение курсов по программированию или же путем получения высшего образования.
Дочитав эту главу до конца, вы будете знать достаточно, чтобы приступить к работе и сформулировать реальный план, как и когда это сделать.
Если вы уже являетесь разработчиком ПО, то вы все равно сможете найти в этой части кое-что полезное для себя, например внести коррективы в план развития своей карьеры и решить, как вы будете совершенствоваться в области разработки ПО. (А еще вы можете воспользоваться рекомендациями из этой книги, чтобы помочь своим знакомым, которые хотят стать программистами.)
Я могу дать вам все возможные советы, открыть все существующие секреты мира разработки ПО и подробно описать, какой путь следует выбрать, но от всего этого обилия информации не будет никакого толку, пока вы не соберетесь и самостоятельно не сделаете первый шаг. Как я люблю говорить, нужно «довериться процессу».
Итак, давайте приступим.
Глава 2. С чего начать
Когда я только начинал работать программистом, я не имел ни малейшего понятия о том, чем я занимаюсь. Мне было непонятно абсолютно все, и в голове крутилась единственная мысль: «У меня ничего не получится». Зачем я все это вам рассказываю? Мне кажется, что раз вы взяли в руки эту книгу, вы вполне можете испытывать точно такое же чувство. Не переживайте, это нормально. И даже естественно.
Позвольте мне подчеркнуть еще один момент. Чтобы стать хорошим программистом, вам не нужно быть гением и обладать интеллектом выше среднего.
Если вы решили создавать программы и при этом вас не сковывает чувство страха и вы не чувствуете, что тонете в обрушившейся на вас информации, скорее всего, вы что-то делаете не так. Ну или, может быть, вы – андроид. Или то, и другое одновременно.
Во всех остальных случаях вы будете постоянно испытывать трудности и раз за разом понимать, что вы в очередной раз запутались. Но я вам обещаю, что со временем это пройдет.
Как начинал я?
Рискуя прослыть в ваших глазах старым занудой, я все же скажу, что, когда я начинал программировать, у меня не было тех ресурсов, которые доступны вам сегодня. У меня не было вообще никаких ресурсов.
Я скачал исходный код крайне популярной игры в жанре МПМ. (Многопользовательский мир. Это что-то типа World of Warcraft, только без графики. Только текст. Да-да, это было в те далекие времена, когда мы дозванивались до «бибиэсок» с помощью модема). Когда я открыл файлы с кодом, то ужаснулся. Я всего лишь хотел создать свою собственную МПМ-игру и добавить в нее кое-какие свои идеи, но чтобы это сделать, нужно было нырнуть в эти дебри непонятных символов. В общем, именно это я и сделал. Я менял значения всех подряд переменных. Я искал код, отвечающий за вероятность нанести критический урон. После того, как я нашел его и изменил, я перекомпилировал игру и посмотрел, что получилось.
Иногда я получал, что хотел. А иногда мое творение даже не компилировалось. Я просто смотрел что работает, а что – нет. Вот так и выглядела моя «учеба»! Несмотря на то что я толком не понимал, что делаю, уже через неделю таких экспериментов мне удалось слепить собственную МПМ с уникальными «фичами».
Конечно, до настоящего программиста мне было еще далеко, но начало было положено. Столь необходимое каждому из нас.
Знаете, зачем я рассказал вам эту историю? Потому что все проделанные мной действия лучше, чем любая книжка, курс или университет. По сути, это единственный правильный способ.
Все, что вам нужно, – это просто поковыряться тут и там, понажимать кнопочки. И даже «сломать» что-нибудь в процессе. Кстати, советую иногда отвлекаться от этого увлекательного занятия и периодически заглядывать в главу «Учимся учиться: как обучать себя» в книге «Путь программиста. Человек эпохи IT»).
Обратите внимание, что «научиться программировать» и «узнать, как попасть в мир разработки ПО» – две абсолютно разные вещи. Безусловно, чтобы стать разработчиком, необходимо учиться писать код, однако есть кое-что еще. Эта глава как раз об этом.
Каков он, мир разработчиков?
Я хочу рассказать вам кое-что о разработке ПО. Она одновременно сложнее и легче, чем кажется. Я посвятил этому вопросу целый раздел, но сейчас давайте просто немного оглядимся.
Разработка ПО – это не «просто программирование». Конечно, программирование – бо?льшая часть разработки, но на одном коде далеко не уедешь. Особенно если в ваши планы входит построение успешной карьеры. Суть разработки ПО заключается в том, чтобы придумать способ автоматизировать ручной труд или делать что-то, что вручную дается непросто.
Рассмотрим в качестве примера текстовый редактор. Я пишу эту книгу в приложении «Документы Google». Без него мне пришлось бы достать с чердака печатную машинку или взять шариковую ручку и лист бумаги. Если бы я захотел отформатировать документ по мере ввода, мне пришлось бы вручную настраивать машинку. А для исправления ошибок мне пришлось бы открыть флакончик с корректирующей жидкостью (и, наверное, бутылочку виски).
Конечно, одних только «Документов Google» будет недостаточно, чтобы напечатать книгу. Мне нужен компьютер, который состоит из кучи микросхем и программ, принтер и все в таком духе. Но я думаю, что вы уже поняли, к чему я веду.
Чтобы стать хорошим разработчиком, нужно знать одну простую, но очень важную истину:
Прежде чем что-то автоматизировать, нужно научиться делать это «что-то» вручную.
Понимание проблемы
Нередко бывает так, что начинающие разработчики (а подчас этим грешат даже профи) пытаются создавать программу, не до конца понимая, что же она, собственно, должна делать. Иногда люди просто хотят писать код (что, в общем-то, вполне приемлемо, если вашей целью является программирование для себя, а не разработка ПО на коммерческой основе). Но если вы, дорогие читатели, решились открыть эту книгу, то, скорее всего, ваш уровень притязаний находится уже выше простого «клепания кода».
Процесс разработки ПО всегда начинается с констатирования проблемы, которую будет решать ваша будущая программа. Задайте себе вопрос: «А что я, собственно говоря, автоматизирую?»
Различные методологии разработки предлагают разные подходы к решению этой задачи, однако сейчас речь не о них. Мысль, которую я хочу донести, состоит в том, что прежде чем приступать к решению проблемы, необходимо сформулировать ряд требований к будущей программе и понять, в чем конкретно состоит проблема, которую вы будете решать.
В зависимости от ситуации, может быть достаточно поговорить с потенциальным заказчиком и узнать, чего он хочет и как, по его мнению, должно работать ПО. В других случаях вам понадобится формализовать процесс и написать спецификацию в виде документов.
Проектирование
После того как вы придете к пониманию сути проблемы, накидайте примерный вариант ее решения в виде кода. И да, все это нужно сделать до того, как вы приступите к набору программных инструкций. Отнеситесь к этому шагу как к созданию чертежа при строительстве здания. Опять же, различные методологии разработки предлагают разные подходы к созданию подобных вещей, но перед тем, как погружаться в написание кода, нужно иметь хотя бы примерный план.
Такой подход применим при решении проблем как маленького масштаба, так и большого. Некоторые адепты методологии Agile (о ней мы поговорим в следующих главах) считают, что можно обойтись и без плана, главное – начать писать код. Несмотря на то что Agile не требует слишком тщательного предварительного проектирования, полная импровизация – все еще не лучший выбор. Вы не сможете построить дом, если будете наобум забивать гвозди в бревна.
Собственно, само программирование
Разобравшись с ви?дением работы будущей программы, вы можете либо написать несколько тестов, которые позволяют понять, что будет делать приложение (такой подход также известен как TDD, или «разработка через тестирование»), либо приступить непосредственно к программированию. В следующих главах мы вернемся к обсуждению TDD.
Написание кода – это отдельная дисциплина, поэтому я не буду здесь вдаваться в подробности этого процесса, но порекомендую к обязательному прочтению две отличные книги, посвященные написанию хорошего кода.
Первая книга называется «Совершенный код. Практическое руководство по разработке программного обеспечения»[5 - Издавалась на русском языке. Русская редакция, 2019 г. – Прим. ред.], ее автором является Стив Макконнелл. Это классический труд, который должен прочитать каждый разработчик.
Вторая – «Чистый код. Создание, анализ и рефакторинг»[6 - Издавалась на русском языке. Питер, 2018 г. – Прим. ред.] за авторством Роберта Мартина. Это тоже классика, которая научит вас писать более качественный код.
Эти книги рассказывают о том, как структурировать и писать код, который будет легко понять и поддерживать другим программистам. Материал этих изданий оказал глубокое влияние на мои навыки программирования, особенно в том, что касается ясности кода и проектирования ПО.
Тестирование и развертывание
Итак, код готов. Значит ли это, что программа готова к выпуску?
Нет! Сначала код нужно протестировать. Повторюсь, различные методологии разработки предлагают разные подходы. А в общем, просто помните, что перед передачей программы заказчику ее надо проверить.
Например, использование методологии «Водопад» (Waterfall) предполагает тестирование в конце проекта. А при использовании методики Agile тестирование происходит в конце каждой итерации создания ПО, которая обычно длится пару недель.
После того как тестировщики дают «добро» на выпуск кода, наступает этап развертывания, который представляет собой отдельный процесс.
Вы, наверное, уже обратили внимание на то, что я лишь вскользь упомянул о данном этапе создания ПО, – потому что этой теме в книге посвящена целая глава. Развертывание – это процесс установки готового ПО на сервер, загрузки в магазин приложений (типа App Store или Google Play) или предоставления доступа к программе конечным пользователям любым другим способом. (Этот процесс может быть довольно сложным.) Попутно код
следует отправлять в репозиторий исходного кода, где сохраняются различные версии и изменения вашего ПО.
Если вы разрабатываете сложную программу обработки данных внушительного объема, то, скорее всего, эта программа будет использовать какую-нибудь базу данных. Последняя обычно хранит пользовательские данные или конфигурационную информацию приложения, и может обновляться в процессе правок исходного кода.
Многие команды разработчиков используют ту или иную форму непрерывной интеграции, чтобы код собирался автоматически, когда разработчики «присылают» свои части программы.
Разработка – это не просто набор кода