Полная версия
Карьера в IT. Как найти работу, прокачать навыки и стать крутым разработчиком
Обучение на практике
Я придерживаюсь мнения, что лучший способ обучения – это обучение на практике. Когда речь заходит о технических навыках, это утверждение становится не просто моим мнением, а фактически аксиомой. Большинство технических навыков невозможно освоить, лишь прочитав книгу или посмотрев видео.
Да, книга или видеоролик позволят вам получить представление о том, что возможно сделать с использованием конкретной технологии, языка программирования или инструмента. Однако пока вы не пощупаете эти технологии руками или не попробуете решить какую-либо проблему, используя новые знания, ваше понимание изучаемого предмета будет оставаться поверхностным. Практически все навыки, о которых я говорил в предыдущей главе, требуют большего, чем просто книжные знания. Только так вы сможете стать по-настоящему компетентными в выбранной вами области.
Приведу довольно очевидный пример: как вы считаете, можно научиться программированию, читая про синтаксис языка?
Если вы никогда ошибочно не сохраняли файл в неправильную ветку, не работали не с той версией исходного кода и не использовали историю версий, чтобы выяснить, на каком этапе появилась ошибка, то вы не будете знать, как пользоваться системой контроля версий – вам просто будет казаться, что вы разбираетесь в вопросе.
(Если упомянутые термины вам незнакомы, не переживайте, сейчас речь не о них.)
Напомните-ка мне, я случайно не обещал вам рассказать «где-то дальше в книге» про технические навыки? Все же вы читаете эту книгу для того, чтобы чему-то научиться, верно?
Правильный ответ на оба эти вопроса – «да». Однако обучение на этом не заканчивается.
Прочитав все вышесказанное, вы получите общее представление об обсуждаемой нами теме, но рано или поздно вам придется отложить книгу и сделать что-то самостоятельно, чтобы освоить то, о чем вы прочитали (я имею в виду упомянутые мной технические навыки).
Как обучаться на практике?
Сильно рискуя получить почетное звание Капитана Очевидности, я все же решил поговорить с вами о том, как правильно обучаться на практике. Отнеситесь ко всему, что будет далее сказано, как к полезной напоминалке.
Всякий раз, приступая к освоению какого-либо технического навыка, определите для себя, для чего он вам нужен. Если умение не требуется вам «здесь и сейчас», подумайте, а нужен ли вам вообще этот навык? Мы тратим огромное количество времени на изучение технических умений, которые нам никогда не пригодятся. Поверьте, лично я делал это столько раз, что это даже не смешно.
Научиться чему-то гораздо проще, если вы будете испытывать в этом навыке срочную необходимость. Гарантирую, что если вам понадобится освоить прыжки с парашютом, то быстрее всего вы научитесь это делать в самолете, из которого нужно как можно быстрее эвакуироваться.
Но как быть, если прямо сейчас у вас нет острой необходимости в выбранном вами навыке? Что делать, если вы изучаете что-то просто потому, что хотите получить работу, где вам, скорее всего, придется использовать это умение? Ответ прост – найдите причину использовать выбранный вами навык здесь и сейчас. Создайте себе цель.
Пример обучения на практике
Давайте разберем вопрос на примерах. Представьте, что вы очень сильно хотите разобраться в реляционных базах данных. Для этого вы можете прочесть книгу, посвященную данной теме, поупражняться в искусстве конструирования SQL-запросов и в результате чему-нибудь научиться.
А теперь представьте, что ваша цель заключается в создании базы данных всех фильмов, имеющихся в вашей коллекции. А также представьте, что вы хотите уметь делать запросы к этой базе, добавлять в нее новые фильмы, удалять старые, обновлять названия и т. д. А если вы захотите создать приложение, чтобы с его помощью упростить работу с базой данных?
Представили? Поздравляю, у вас появилась цель! Так, и что дальше? Как подойти к изучению темы реляционных баз данных? А вот теперь вы можете смело открывать книгу по теме или просмотреть соответствующие видеоуроки, чтобы найти информацию, необходимую для реализации вашей идеи. И вот теперь вы будете заняты созданием реального продукта, а не просто выполнением какого-то абстрактного тестового задания.
Только представьте, как много вы всего сможете узнать, руководствуясь подобным подходом. Ведь это куда веселее, чем выполнение всяких непонятных лабораторок?
Как я обучаю техническим навыкам
Как я уже говорил, я помог с освоением технических навыков довольно большому количеству людей. Возможно, если вы узнаете, как я это делаю, то сможете и сами научиться этому. Как думаете, я прав?
Когда я обучаю людей чему-то, я хочу, чтобы затраченные ими средства окупились в полной мере. Я не хочу загружать их вещами, которые им вряд ли пригодятся, или задачами, которые они вполне могут решить сами, если столкнутся с ними.
Я стараюсь фокусироваться на том, чтобы дать людям информацию, которая будет полезна здесь и сейчас, а не «через сто лет» и «на всякий случай». Моя программа обучения техническим навыкам основывается на трех столпах.
• Как ученики могут использовать эту технологию?
• С чего начать?
• 20 % информации, знания которой достаточно, чтобы добиться максимальной эффективности.
Разберем каждый из этих пунктов подробнее.
Как можно использовать технологию?
Я считаю, что Google может дать ответ на любой вопрос. Но получить ответ не удастся, если вы не знаете, что спрашивать. Поэтому обучение я начинаю с рассказа о конкретной технологии и описания ее возможностей.
Разумеется, это всего лишь обзор. Я не пытаюсь показать сразу все способы использования новых знаний, а просто рассказываю о наиболее интересных моментах изучаемой темы.
Когда заходит речь о языках программирования, я всегда начинаю с истории языка и описания типичных областей его применения. Затем я перехожу к описанию всех конструкций языка (делая акцент на уникальных). Следующий этап – знакомство с библиотеками как стандартной части языка и описание способов их использования.
Целью такого подхода является поверхностное описание темы, без углубления в детали. Если вас заинтересует что-то конкретное, вы можете узнать об этом самостоятельно. На этом этапе я пытаюсь сделать неизвестное известным касаемо общих понятий. Я хочу, чтобы ученики поняли, что именно они не понимают и могли закрыть этот пробел самостоятельно, если в этом будет нужда.
Я стараюсь изложить тему так, чтобы после обучения вы говорили не «Я не знаю, может ли технология Х решить эту проблему», а «Я знаю, что технология Х может решить эту проблему, но пока слабо представляю как. Если мне понадобится узнать ответ на этот вопрос, я смогу его найти».
Представьте, что вы пытаетесь изучить деревообработку, не зная, что существует такая вещь, как дремель или фрезерный станок. Вы не обязаны знать, как пользоваться этими штуками, но если вы даже не подозреваете об их существовании, то вы ощутимо ограничиваете себя в возможностях.
Как начать?
На следующем этапе я пытаюсь научить своих студентов умению приступать к изучению чего-либо. Зачастую эта часть освоения технологии является наиболее сложной – она предшествует «действию», поэтому я стараюсь сделать данный процесс как можно более безболезненным. Моя задача состоит в том, чтобы показать студентам, как загрузить и установить все необходимое для работы, а затем создать проект и скомпилировать свой первый код.
Как только человек преодолевает это препятствие, он может приступать к экспериментам, пытаясь создать что-то конкретное в процессе работы с технологией. Если входной порог оказывается слишком высоким, некоторые люди так и остаются на уровне чтения книг о технологии и просмотра обучающих видео, не решаясь «запачкать руки».
Что бы вы ни изучали, держите в уме эту информацию. Сосредоточьтесь на способах того, как начать работу с определенным техническим навыком на ранних этапах процесса обучения. Поищите соответствующие учебные пособия или руководства, которые рассказывают о том, как начать работу и сдвинуться с мертвой точки.
20 % информации для максимальной эффективности
Напоследок я пытаюсь научить студентов тем 20 % информации, которые они будут использовать 80 % времени. Практически все в нашей жизни подчиняется так называемому принципу Парето. Он звучит следующим образом:
«20 % усилий дают 80 % результата, а остальные 80 % усилий – лишь 20 % результата».
Освоение технического навыка напрямую зависит от понимания, что именно входит в эти 20 %, которые вы будете использовать 80 % времени.
На этом этапе практика играет более значимую роль, чем теория. Большинство книг и учебных пособий имеют формат справочников, которые не делают акцент на 20 % наиболее важных технологий. Когда вы активно работаете с технологией, то быстро понимаете, какая ее часть используется чаще всего, поскольку нехватка знаний в этой области ощутимо скажется на вашей работе.
Предлагаю вернуться к примеру с реляционными базами данных. Написание запросов для выбора данных из таблиц совершенно точно входит в 20 % наиболее востребованных в данной технологии умений. Если вы прочитаете книгу, посвященную языку SQL, то увидите, что темам получения данных, их добавления, обновления, удаления, а также индексации уделяется одинаковое количество внимания. Но если вы попытаетесь создать собственную базу данных, то наверняка заметите огромное количество запросов, связанных с выбором данных. Помимо прочего, вы очень быстро встретитесь с необходимостью объединения таблиц.
Вместо того чтобы тратить время на изучение всех тонкостей теории реляционных баз данных, гораздо эффективнее сосредоточиться на том, чтобы научиться писать операторы выбора, объединять таблицы и выполнять другие операции общего характера, составляющие заветные 20 % наиболее востребованных умений.
Вот почему практика столь важна.
Бывает полезно понаблюдать за работой эксперта в интересующей вас области, или даже предложить ему посотрудничать с вами в качестве ученика. Видя, как мастер применяет те навыки, которым вы хотите научиться, вы сможете понять его 20 % и ускорить процесс своего роста в профессии. Обучение в процессе работы – чрезвычайно эффективный способ развития себя как специалиста.
Читайте, что пишут эксперты
Напоследок я хочу дать вам еще один совет по развитию технических навыков. Уделяйте побольше внимания чтению экспертов, которые уже обладают нужными вам техническими навыками. Когда я изучал свое ремесло, я тратил около 30 минут в день на чтение разных блогов, связанных с интересующими меня темами. Когда мне потребовалось вникнуть в суть тонкостей языка C++, я глотал книги Скотта Майерса по эффективному программированию на C++. Зачастую мнение эксперта помогает разобраться в каком-либо вопросе, до ответа на который додуматься самостоятельно было бы невозможно.
Одно дело понять синтаксис языка программирования или принципы использования фреймворка; и совсем другое – овладеть ими на первоклассном уровне. Присмотритесь к тому, как эксперты применяют на практике те навыки, которые вы только пытаетесь приобрести. Почитайте, о каких проблемах и тонкостях упоминают признанные профи в данной области. Подобная информация способствует более качественному освоению темы.
Практика, практика и еще раз практика
Надеюсь, мои советы окажутся полезными и помогут вам получать и развивать необходимые умения. По-моему, польза обучения на практике очевидна, особенно в области технических навыков.
Я также надеюсь, что вы осознаете необходимость наличия плана обучения и его четкой цели.
Скажу напоследок лишь одно: практикуйтесь.
Оттачивание любых технических навыков требует времени. Чтобы в чем-то преуспеть, придется много тренироваться. Не расстраивайтесь, если вам кажется, что обучение займет обескураживающе большое количество времени, особенно в ситуациях, когда вы застопорились. Навыки придут, если у вас есть план и четкая цель. Продолжайте в том же духе и просто доверьтесь процессу.
Глава 5. Как выбрать язык программирования
Самый популярный вопрос, который задают мне совсем-совсем новички: «Какой язык программирования выбрать?» Для некоторых это становится камнем преткновения, который им так и не удается преодолеть.
В своей преподавательской практике я встречал множество разработчиков, которые были не уверены в себе и постоянно меняли свой выбор, прыгая от одного языка программирования к другому из-за боязни принять неправильное решение. Если вы узнали в этом описании себя, то эта глава для вас.
В ней я сначала развею часть ваших сомнений, а затем поделюсь парой идей по выбору первого языка программирования, основанных на практике.
Выбор языка практически ни на что не влияет
Да-да, вы все правильно прочитали. Как ни странно, но не имеет особого значения, какой язык программирования вы выберете. Есть несколько причин, почему я так считаю, и одна из них – многие языки программирования по своей сути очень похожи. Да, синтаксис может разниться. Да, языки программирования могут выглядеть по-разному. У них даже могут быть совершенно разные наборы конструктивных особенностей. Но фактически у всех языков программирования между собой куда больше общего, чем вы могли бы подумать.
Практически в каждом из них присутствуют конструкции ветвления, циклы, возможность создания методов или процедур, а также способы организации кода на высоком уровне абстракции. Существует огромное количество языков программирования, которые настолько похожи, что если вы знаете один их них, то почти знаете и другой. Примерами такого рода являются C# и Java. JavaScript схож с каждым из них.
Самое сложное – выучить первый язык программирования. Как только вы это сделаете, освоить другой язык будет гораздо проще. После изучения двух или более языков программирования каждый последующий будет даваться вам все проще и проще. Если сейчас вы не знаете ни одного языка, мое утверждение может показаться вам легковесным, однако доверьтесь моему опыту. Как я уже говорил, многие языки программирования похожи, и поэтому вам будет не очень сложно переключаться между ними. То есть даже если вы выучите язык программирования, а затем решите, что это не то, что вам нужно, или получите работу, на которой требуется использовать другой язык программирования, это не будет иметь большого значения. Самое трудное – тяжелая работа по изучению первого языка – уже позади.
Если вы посмотрите на вакансии таких крупных компаний, как Microsoft или Google, то увидите, что большинство из них не содержит требований к языку программирования. У меня была масса собеседований, на которых меня просили решить задачу по программированию на любом удобном мне языке. Никаких ограничений, никакого конкретного языка программирования, который я должен был бы знать.
Что следует учесть при выборе языка программирования?
Как уже было сказано выше, я не думаю, что это принципиально важно. Однако если вы все равно ощущаете неуверенность, вот вам несколько советов.
Карьерные перспективы
Скажу так – для большинства из вас наиболее важным аспектом является то, какую работу вам поможет получить тот или иной язык программирования и каковы его перспективы. На данный момент по каждому из популярных языков программирования можно найти массу вакансий. Рейтинг того или иного языка может со временем измениться в любую сторону, но, если вас беспокоит наличие вакансий, рекомендую сделать выбор в пользу наиболее популярных языков программирования. На момент написания данной книги такими технологиями являются следующие:
• C#
• Java
• Python
• Ruby
• JavaScript
• C++
• PHP
Вакансии для разработчиков на этих языках есть всегда.
Однако, выбирая язык, следует учитывать особенности рынка труда той страны, где вы живете, особенно если вы не планируете переезжать.
Например, если вы живете в небольшом городке в Арканзасе, в котором есть только одна технологическая компания, делающая все на Java, я бы посоветовал вам начать учить именно этот язык. Конечно, далеко не каждый из вас столкнется с подобной ситуацией. Но если кто-то из моих читателей все-таки в ней окажется, то выбор будет невелик.
Если же вы планируете переезжать или работать на фрилансе, можете попробовать освоить более эксцентричный и менее популярный язык. Так у вас будет больше шансов стать экспертом в области, где не так много профи. Но для начала я все же порекомендовал бы вам обратиться к чему-то более популярному.
Наряду с популярностью языка следует учитывать и его перспективы.
На момент написания этой книги язык Objective-C вряд ли можно назвать подходящим вариантом, так как сейчас большинство разработчиков под iOS переходят на язык Swift. Кроме того, сама Apple вкладывает большие средства в развитие этого языка.
Но если вы уже выучили Objective-C и теперь не знаете, как быть дальше, спешу вас успокоить. Рабочих мест, связанных с данным языком, довольно много. Существует множество приложений, написанных на нем, которые нуждаются в поддержке.
Тем не менее никто из нас не является провидцем и не может знать наверняка, какие языки будут популярны, а какие – нет.
Например, некоторое время назад я предсказывал смерть JavaScript. Однако он жив и поныне.
Недавно я посетил одну конференцию, где одним из докладчиков был соавтор языка Objective-C. Этот язык появился в начале 1980-х годов.
О чем это я? Ах да, о выступавшем. Так вот, данный человек по имени Том Лав является автором книги, в которой написано, что язык JavaScript мертв и никогда и нигде использоваться не будет. Однако на момент написания этой книги JavaScript входит в пятерку (а по некоторым данным, и в тройку) самых популярных языков программирования в мире.
Суть в том, что знать наверняка невозможно. Языку программирования Ruby понадобились годы, чтобы стать популярным.
Возможно, JavaScript – это один из худших языков программирования, который можно было придумать и который поначалу использовался лишь для создания небольших всплывающих окон на веб-страницах. А сегодня на нем пишут все подряд.
Мой вам совет – не гадайте. Если, конечно, у вас нет магического шара. Но если он у вас есть, то зачем вам вообще программирование? Отправляйтесь прямиком на Уолл-стрит, там вас ожидает головокружительная карьера!
Вопрос Джону!
За что ты не любишь JavaScript? Крутой же язык!
Каюсь, иногда мое мнение о JavaScript выглядит так, как будто у меня на него большой зуб или он нанес мне глубокую психологическую травму в детстве.
Позвольте рассказать вам небольшую историю о том, как появилась эта технология. В мае 1995 года Брендан Эйк, который в то время работал в компании Netscape, создал за 10 дней некую штуку под названием JavaScript, стремясь получить простой «связующий язык», который был бы легок для освоения web-дизайнерами и программистами, работающими неполный рабочий день. (Цитата из «Википедии».) В общем, я хочу сказать, что JavaScript, будучи созданным всего за 10 дней, изначально не мог быть хорошо продуман. Это факт. Знаю, что никто не любит гонцов с плохими вестями, но давайте обойдемся без насилия. Хочу подчеркнуть, что я НЕ НЕНАВИЖУ JavaScript. Просто для меня этот язык не является верхом элегантности, и поэтому я предпочитаю его не использовать. Вот и все.
Справедливости ради следует отметить, что в 2015 году появился новый стандарт этого языка (известный как ECMAScript). При создании этой версии языка ее авторы учли многие недостатки JavaScript.
Стыдно сказать, но эта версия мне даже нравится… Но лишь слегка!
Тем не менее мое мнение здесь мало что значит, ведь JavaScript сейчас – один из наиболее популярных языков программирования. Хотите верьте, хотите нет, но я смирился с этим фактом, однако оставил за собой право прохаживаться при случае по нелюбимому мною предмету.
Ну а если вы все еще сомневаетесь в моей правоте, подумайте, почему одна из самых продаваемых книг, посвященных этому языку, называется «JavaScript: сильные стороны»[9]?
Технологии, которые вам интересны
Выбирая язык программирования, важно учитывать свои предпочтения в технологиях. Если вы начнете поиск, отталкиваясь от этого фактора, то сможете гораздо быстрее определиться с выбором. Я знаком с большим количеством Android-разработчиков, которые занимаются этим только из любви к Android. Для многих из них оптимальным выбором будет Java, потому что именно на этом языке разрабатывается большинство приложений для данной ОС. (Однако вы можете создавать Android-приложения и на других языках, например C#, Ruby и даже JavaScript.)
В общем, слушайте свое сердце, это упростит вам изучение вашего первого языка программирования. Чем больше вас привлекает изучаемая технология и чем больше вы ею увлечены, тем легче вам будет преодолевать виражи учебного процесса. Например, я очень хотел заниматься разработкой под iOS, потому что у меня появился мой первый iPhone, и я был в восторге от этой технологии. Эта воодушевленность значительно облегчила мне изучение Objective-C и создание моего первого приложения под iOS.
Будь я равнодушен к этой технологии, вряд ли я продвинулся бы в ней достаточно далеко.
Уровень сложности
Еще одним важным моментом, который следует учитывать при выборе языка программирования, является уровень сложности.
Некоторые языки программирования более сложны в освоении, чем другие. Я не рекомендую начинать изучение программирования с C++, потому что по сравнению с другими языками программирования он довольно сложен для понимания. В этом случае вы будете иметь дело с управлением памятью и указателями, а также с некоторыми другими неприятными конструкциями, которые могут вызвать у новичка настоящий ступор.
C++ это великий язык – один из моих любимых, но его изучение тот еще квест. Гораздо проще будет начать знакомство с программированием с таких языков, как C#, Lua, Python, Ruby или PHP. Более того, для начинающих программистов существуют даже специальные языки, такие как Scratch или Basic.
Я не хочу отговаривать вас от изучения более сложного языка, такого как C++, если вы действительно этого хотите. Однако следует заранее представлять, во что вы ввязываетесь, и принять осознанное решение, насколько легким для изучения должен быть ваш первый язык.
Доступные ресурсы
Оцените ресурсы, которые вам пригодятся при изучении выбранного языка программирования. Например, в случае некоторых малоизвестных языков вы можете столкнуться с недостатком учебных материалов по ним – книг, онлайн-видео или любых других ресурсов – все это может существенно осложнить процесс освоения языка.
Популярные языки программирования хороши тем, что вам будет доступна масса онлайн-руководств, учебных курсов, книг и других материалов, поэтому перед началом обучения обязательно изучите этот вопрос. Несмотря на то, что сейчас существует огромное количество разнообразных ресурсов для начинающих, стоит заранее учесть степень доступности обучающих руководств.
Также рекомендую оценить, какими ресурсами располагаете конкретно вы, например компьютером или программным обеспечением. Даже более сложный язык программирования будет проще изучить, если у вас под рукой есть много интерактивных онлайн-учебников.
Изучать JavaScript можно онлайн через браузер, без установки чего-либо на компьютер. В свою очередь такой язык, как C ++, потребует для своей работы определенных инструментов и программного обеспечения, получить которые может быть непросто.
Наконец, подумайте о людях, которых вы знаете. Есть ли среди них те, к кому вы могли бы обратиться за советом в случае трудностей?
Не зацикливайтесь на вопросе ресурсов, но и забывать о них тоже не стоит.
Адаптивность
Напоследок давайте поговорим о такой вещи, как адаптивность. Языки программирования по-разному адаптируются к исходным условиям. Например, на момент написания этой книги язык программирования C# можно с уверенностью назвать одним из наиболее адаптируемых благодаря таким компаниям, как Microsoft и Xamarin (теперь входит в состав Microsoft).
Изучая C#, вы вовсе не будете ограничены лишь разработкой под Windows или web-программированием. Этот язык может использоваться для создания приложений под любую из доступных платформ.
С помощью C# можно создавать приложения для Linux и Mac, и даже для Android и iOS. Многие другие языки программирования обладают сходной гибкостью.