Методологии
Вы все еще не бросили читать эту книгу, несмотря на всю ту картину, что я перед вами развернул? Чудесно. Обещаю, этот раздел последний. Честно-честно.
В то время как некоторые команды разработчиков программного обеспечения просто пишут код как Бог на душу положит, другие используют какую-нибудь методологию. Ну или, по крайней мере, делают вид, что используют.
(К слову: не ожидайте, что какая-либо команда действительно будет следовать методологии разработки ПО, которая у них используется де-юре. Я не хочу показаться циником или тыкать в кого-то пальцем. Я просто реалист и знаю, что есть масса людей, которые говорят, что используют методологии разработки ПО, например Scrum, исходя из того, что у них ежедневно проводятся собрания.)
Поэтому очень важно, чтобы вы были знакомы хотя бы с некоторыми из основных идей, лежащих в основе наиболее распространенных методологий разработки ПО. На сегодня таковыми являются «Водопад» и Agile.
Большинство команд утверждает, что использует Agile (читается как «Аджайл»). Надо сказать, что саму по себе концепцию Agile можно трактовать довольно широко, однако существуют некоторые выработанные на практике приемы использования этой методологии и даже, осмелюсь сказать, ритуалы, о которых следует знать, если вы хотите, так сказать, вписаться в команду «гибких» разработчиков.
Чуть позже мы еще вернемся к этому вопросу. А пока
Ошеломлены? Спокойствие, только спокойствие
Понимаю, что вы увидели весьма внушительный список того, что нужно знать, чтобы стать разработчиком. А ведь мы только начали. Я более чем уверен, что из всего вышенаписанного вы поняли далеко не все, да и вообще пока слабо представляете, с чего следует начинать изучение всех этих штук.
Не переживайте, все так и должно быть. Вам не нужно знать все это прямо сейчас (если, конечно, вы уже не работаете программистом). Ну а если вы и правда являетесь действующим разработчиком и при этом понятия не имеете обо всем вышесказанном, то фу такими быть! Я, конечно, шучу, но не знать такое и правда стыдно.
В любом случае, я собираюсь охватить большинство из этих тем более подробно в части «Что нужно знать о разработке ПО». Поэтому можете пока расслабиться.
Далее мы поговорим о том, как получать технические навыки в целом. Поэтому, когда вы дойдете до главы, посвященной этим самым навыкам, этот материал не застанет вас врасплох.
Вопрос Джону!
Слушай, да в этой книге просто гора ссылок! А еще ты рекламируешь кучу своих и чужих продуктов. Что за фигня, чувак?
О, я даже рад, что вы об этом спросили. Давайте сначала поговорим о ссылках. Да, в этой книге их полным-полно, но вы не обязаны переходить по каждой из них. Открывайте лишь те, что интересны лично вам. Эти ссылки ведут на дополнительную информацию по той или иной теме. Я указываю их только потому, чтобы вы могли сильнее погрузиться в заинтересовавшую вас тему.
Честно говоря, большинство ссылок ведут на мои посты в блоге или видео на сайте YouTube, где я обычно раскрываю какую-либо тему гораздо шире. Ну или просто потому, что я посчитал их чертовски интересными.
(Кстати, если вы откроете ссылку https://simpleprogrammer.com/products/careerguide/links/, то попадете на страницу со списком ВСЕХ ссылок в книге, сгруппированных по главам.)
А что касается ссылок на другие мои проекты Да, вы правы, это действительно реклама. Вы имеете полное право назвать меня меркантильным, но я предпочитаю называть это иначе «быть умным».
Книги стоят не так уж и дорого. Так что написание собственной книги вряд ли можно считать рецептом обогащения. Скажу больше, если вы пишете книгу, у вас обязательно должна быть еще какая-нибудь мотивация для этого занятия, кроме заработка денег. Одной из причин, по которой я написал эту книгу, является продвижение других моих продуктов, которые, по моему мнению, могут принести вам пользу.
Я не считаю, что ссылок слишком много. И уж тем более я не принуждаю вас покупать хоть что-то по этим ссылкам. В этой книге больше 600 страниц и, по-моему, она ценна уже сама по себе.
Глава 4. Как развить технические навыки
Теперь, когда вы ознакомились со всем этим длинным списком необходимых технических навыков, вам, наверное, интересно, как вообще следует их развивать и сколько времени это займет. Но пусть вас не беспокоит вопрос времени. На всем протяжении карьеры разработчика вы будете постоянно заниматься совершенствованием своих навыков. Воспринимайте этот перечень как увлекательное путешествие, а не как конечную точку.
Вам всегда будет куда расти, если захотите. Надо сказать, что лично я потратил немало времени в попытках развить свои технические навыки, идя не в том направлении.
Однако, создав в течение трех лет более пятидесяти узкоспециализированных учебных курсов для программистов, я научился молниеносно развивать технические навыки, попутно обучая им других людей.
Раньше я думал, что лучший способ освоить то или иное техническое умение это взять большой справочник и прочитать его от корки до корки. О, я прочел просто невообразимое количество книг, в каждой из которых было минимум 800 страниц. Надо сказать, это занятие не принесло мне хоть сколько-нибудь значимой пользы. Разве что мои руки, возможно, подкачались от их веса. Я не хочу, чтобы вы допускали те же ошибки, которые в свое время сделал я. Наоборот, я хочу показать вам гораздо более эффективный способ освоения новых умений.
Как научиться быстро учиться?
Перед тем как мы перейдем к изучению технических навыков, давайте немного отвлечемся и поговорим о том, какие бывают способы быстрого обучения чему-либо и о самообучении в целом. В следующей главе этого раздела мы рассмотрим тему самообучения более подробно, а пока я хочу остановиться на основах и поговорить о методологии, которую использую для быстрого изучения чего-либо.
Я уже говорил, что потратил немало часов своей жизни на изучение и преподавание различных технологий. Бывало даже так, что я за несколько недель полностью изучал какой-то язык программирования, после чего делал поворот на 180 градусов и шел его преподавать. В процессе я разработал довольно надежную систему освоения любого необходимого навыка, причем это было не столько сознательное усилие, сколько естественное следствие моих действий. Я пытался учиться так быстро, что мне приходилось придумывать эффективные способы добиваться этого и, естественно, развивать модели обучения, которые помогали мне все быстрее и быстрее осваивать новые умения.
В этой части книги я сделаю лишь краткий обзор основ быстрого обучения, а если вас интересуют подробности, то в главе «Мой десятишаговый процесс» (а также в некоторых других главах) моей книги «Путь программиста. Человек эпохи IT» вас ожидает целый курс, посвященный этой теме.
Основы
Суть моей идеи довольно проста. Прежде всего вы должны получить представление о том, что вы изучаете, а также оценить масштаб темы. Соберите достаточно информации об интересующем вас объекте, чтобы понять общую картину. Далее вам нужно сузить вопрос до такой области, которую вы легко сможете освоить за адекватный период.
Далее вам необходимо определиться с целью. Здесь я имею в виду, что вы должны понимать, зачем вы учите что-либо, а затем определиться с метриками, по которым будет понятно, выучили вы тему или нет. Многие люди хотят чему-то научиться, но совершенно не понимают, как проверить, что они действительно научились этому.
Найдя отправную точку, приступайте к сбору ресурсов для обучения. Я рекомендую не просто открыть какую-то одну книгу и методично ее штудировать, а собрать несколько источников: другие издания, блоги, подкасты, журналы, видеокурсы и учебные пособия, мнения экспертов и так далее.
После того как у вас наберется несколько подобных ресурсов, создайте с их помощью личный учебный план. Я вижу его как некую систематическую последовательность шагов, которые должны привести вас к определенной заданной цели. Например, вы можете использовать оглавление одной из выбранных вами для чтения книг, чтобы понять, в каком порядке лучше всего изучать вопрос и какие вещи являются наиболее важными. Как только вы определите порядок, в соответствии с которым будете учиться, можете смело считать, что половина работы уже сделана.
Далее приступайте к погружению в тему. Сверяясь с планом, изучите в каждом модуле достаточное количество информации, чтобы запустить процесс обучения, а потом попробуйте «сыграть» самостоятельно. После чего отдельно поработайте с вопросами, которые были непонятны в процессе «игры». Так вы сможете обучаться на практике.
Главное на данном этапе не поглощать сразу слишком много информации. Играя соло, будьте естественно любопытны, чтобы стимулировать обучение. Затем вернитесь к тексту и прочитайте его или воспользуйтесь материалом по интересующей вас теме, держа в голове вопросы и опираясь на полученный вами опыт, который поможет вам понять, какие вещи действительно важны.
Одной из самых больших проблем, с которой люди сталкиваются в процессе изучения объемной темы, является непонимание того, что важно, а что нет. «Покрутив» материал и сформировав собственные вопросы, вы поймете, как решить эту проблему. После этого материал будет усваиваться куда легче, поскольку вам уже будет понятно, на что нужно обращать внимание прежде всего.
На следующем этапе попробуйте научить кого-то тому, чему вы научились сами.
Пока не особо важно, кем будет ваш ученик и в каком формате будет проходить обучение. Вы можете «обучать» хоть свою собаку или белочек в парке, суть сейчас не в этом. Здесь важно то, что в процессе рассказа вам приходится упорядочивать свои мысли таким образом, чтобы их можно было внятно выразить.
Именно на этом этапе изучение переходит в понимание.
В общем, все вышесказанное и есть та самая формула быстрого обучения. Если вы хотите увидеть более обстоятельный пример в компании с учебным пособием и видеороликами, его можно найти на моем сайте. А теперь давайте перейдем к более подробному рассмотрению процесса изучения и развития технических навыков.
Обучение на практике
Я придерживаюсь мнения, что лучший способ обучения это обучение на практике. Когда речь заходит о технических навыках, это утверждение становится не просто моим мнением, а фактически аксиомой. Большинство технических навыков невозможно освоить, лишь прочитав книгу или посмотрев видео.
Да, книга или видеоролик позволят вам получить представление о том, что возможно сделать с использованием конкретной технологии, языка программирования или инструмента. Однако пока вы не пощупаете эти технологии руками или не попробуете решить какую-либо проблему, используя новые знания, ваше понимание изучаемого предмета будет оставаться поверхностным. Практически все навыки, о которых я говорил в предыдущей главе, требуют большего, чем просто книжные знания. Только так вы сможете стать по-настоящему компетентными в выбранной вами области.
Приведу довольно очевидный пример: как вы считаете, можно научиться программированию, читая про синтаксис языка?
Если вы никогда ошибочно не сохраняли файл в неправильную ветку, не работали не с той версией исходного кода и не использовали историю версий, чтобы выяснить, на каком этапе появилась ошибка, то вы не будете знать, как пользоваться системой контроля версий вам просто будет казаться, что вы разбираетесь в вопросе.
(Если упомянутые термины вам незнакомы, не переживайте, сейчас речь не о них.)
Напомните-ка мне, я случайно не обещал вам рассказать «где-то дальше в книге» про технические навыки? Все же вы читаете эту книгу для того, чтобы чему-то научиться, верно?
Правильный ответ на оба эти вопроса «да». Однако обучение на этом не заканчивается.
Прочитав все вышесказанное, вы получите общее представление об обсуждаемой нами теме, но рано или поздно вам придется отложить книгу и сделать что-то самостоятельно, чтобы освоить то, о чем вы прочитали (я имею в виду упомянутые мной технические навыки).
Как обучаться на практике?
Сильно рискуя получить почетное звание Капитана Очевидности, я все же решил поговорить с вами о том, как правильно обучаться на практике. Отнеситесь ко всему, что будет далее сказано, как к полезной напоминалке.
Всякий раз, приступая к освоению какого-либо технического навыка, определите для себя, для чего он вам нужен. Если умение не требуется вам «здесь и сейчас», подумайте, а нужен ли вам вообще этот навык? Мы тратим огромное количество времени на изучение технических умений, которые нам никогда не пригодятся. Поверьте, лично я делал это столько раз, что это даже не смешно.
Научиться чему-то гораздо проще, если вы будете испытывать в этом навыке срочную необходимость. Гарантирую, что если вам понадобится освоить прыжки с парашютом, то быстрее всего вы научитесь это делать в самолете, из которого нужно как можно быстрее эвакуироваться.
Но как быть, если прямо сейчас у вас нет острой необходимости в выбранном вами навыке? Что делать, если вы изучаете что-то просто потому, что хотите получить работу, где вам, скорее всего, придется использовать это умение? Ответ прост найдите причину использовать выбранный вами навык здесь и сейчас. Создайте себе цель.
Пример обучения на практике
Давайте разберем вопрос на примерах. Представьте, что вы очень сильно хотите разобраться в реляционных базах данных. Для этого вы можете прочесть книгу, посвященную данной теме, поупражняться в искусстве конструирования SQL-запросов и в результате чему-нибудь научиться.
А теперь представьте, что ваша цель заключается в создании базы данных всех фильмов, имеющихся в вашей коллекции. А также представьте, что вы хотите уметь делать запросы к этой базе, добавлять в нее новые фильмы, удалять старые, обновлять названия и т. д. А если вы захотите создать приложение, чтобы с его помощью упростить работу с базой данных?
Представили? Поздравляю, у вас появилась цель! Так, и что дальше? Как подойти к изучению темы реляционных баз данных? А вот теперь вы можете смело открывать книгу по теме или просмотреть соответствующие видеоуроки, чтобы найти информацию, необходимую для реализации вашей идеи. И вот теперь вы будете заняты созданием реального продукта, а не просто выполнением какого-то абстрактного тестового задания.
Только представьте, как много вы всего сможете узнать, руководствуясь подобным подходом. Ведь это куда веселее, чем выполнение всяких непонятных лабораторок?
Как я обучаю техническим навыкам
Как я уже говорил, я помог с освоением технических навыков довольно большому количеству людей. Возможно, если вы узнаете, как я это делаю, то сможете и сами научиться этому. Как думаете, я прав?
Когда я обучаю людей чему-то, я хочу, чтобы затраченные ими средства окупились в полной мере. Я не хочу загружать их вещами, которые им вряд ли пригодятся, или задачами, которые они вполне могут решить сами, если столкнутся с ними.
Я стараюсь фокусироваться на том, чтобы дать людям информацию, которая будет полезна здесь и сейчас, а не «через сто лет» и «на всякий случай». Моя программа обучения техническим навыкам основывается на трех столпах.
Как ученики могут использовать эту технологию?