Содержание

10 способов научиться программировать самостоятельно | Статья

25 апреля 2015, 09:30

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

Читать далее

Выбранное направление в учёбе будет зависеть в большей степени от  того, почему именно вы хотите научиться программировать и сколько времени вы готовы уделять этому процессу. Если вы хотите стать программистом, первое что следует сделать — это записаться на профессиональные курсы (Google скомпилировал список навыков и курсов для тех, кто хочет стать инженерами-программистами). Если вы хотите создавать игры и веб-сайты для развлечения в свободное время, лучшим выбором являются интерактивные курсы. Bloc создал сравнительную таблицу курсов в зависимости от загрузки, стоимости и причины изучения программирования.

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

Язык, с которого стоит начать, зависит от причины изучения. (К примеру, если вы хотите создать приложение под iOS, вам лучше начать с изучения Swift). Если вы со всей серьёзностью отнеслись к намерению программировать, можно начать с языка C. Хотя выбрав Python, вам будет проще влиться в струю программирования. Приводим инфографику для сравнения нескольких популярных языков программирования.

Независимо от выбора языка или метода обучения, вам следует начать с самого начала. Когда Дэвид Сински (David Sinsky) научился программировать за восемь недель, он, к примеру, потратил одни выходные на изучение основ Python, а другие — на Django. Взяв учебник, он удалял написанный код и снова проходил обучающий материал с нуля. Начните с основ и будьте терпеливы к себе. Взяв первый проект в программировании, разделите его на несколько этапов. И если один из способов обучения вам не подходит, не опускайте руки — попробуйте другой.

Сейчас даже малыши учатся программированию. Несмотря на то, что многие программы для детского обучения весьма просты, некоторые из них (например, Scratch) подходят для любого возраста. Не имеет значения, сколько вам лет, даже детские анимационные приложения могут научить основам программирования (у edX есть новый курс обучения по Scratch).

Бесплатные онлайн тренинги и проекты (Codecademy, Hour of Code и др.) могут помочь вам в написании первой программы. Учебные пособия от Khan Academy, Codecademy, Code.org и других познакомят с основами программирования и всем необходимым для создания игры, сайта или другого проекта. Найдите нужный источник в зависимости от языка программирования, воспользовавшись Bento. Это хорошая отправная точка, однако дальнейшее обучение вам нужно взять на себя.

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

Если вы застряли на какой-то проблеме или вам нужно найти ответ на свой вопрос, не стоит забывать о справочниках. На GitHub можно найти огромную коллекцию из более чем 500 бесплатных книг по программированию. Также доступна коллекция электронных книг, охватывающая 24 языка программирования.

Иногда лучшим способом обучения являются игры. В то время, как многие учебники по программированию обучают вас программировать простые либо сложные игры, некоторые обучающие сайты сами являются играми: Code Combat и CodinGame — инструменты, используя которые вы можете весело провести время.

Сообщество программистов полно людей, готовых помочь следующему поколению программистов. Hack.pledge() — сайт, который поможет вам найти наставника. Либо вы сами можете стать наставником для кого-то другого. Преподавание изученного поможет вам лучше запомнить информацию.

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

dev.by

метод Франклина — статьи на Skillbox

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

В XXI веке обществу нужны работники информационных технологий (IT): инженеры, дизайнеры и программисты. Кто такой программист? Это профессионал, который всегда открыт новым знаниям и готов принять быстро меняющийся мир. Сегодня это самая перспективная профессия. С такой профессией вы всегда заработаете на хлеб с маслом в любой стране мира.

Языки программирования универсальны, так что работать вы сможете где угодно: или в родной России, или в теплой Калифорнии, куда уезжают самые талантливые ребята. Если вы не попали в топ мирового рейтинга — не беда. Рядовой программист может эмигрировать в Новую Зеландию, Германию, северные штаты вроде Иллинойса или Миннесоты. Выбирайте сами, в какую страну уехать жить и работать. Или остаться на родине. Кому-то больше нравится быть первым парнем на деревне, чем последним в городе (к тому же низкий социальный статус негативно отражается на состоянии иммунной системы). Когда у вас достаточно денег, то можно и здесь прилично жить.

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

Талант программиста можно заметить в человеке, который не написал ни строчки кода. Это человек, который любит головоломки. Он любит обдумывать задачки, словно это сладкое мороженое, от которого невозможно оторваться. Каждая флуктуация нелогичности в окружающем мире — новый вызов для него. Всё нужно упростить, упорядочить и алгоритмизировать. Какими качествами должен обладать математик, описано в первых главах книги «Прелюдия к математике» У.У. Сойера. Многое из этого нужно, чтобы стать программистом.

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

Путь самоучки — это «метод тыка», общение на форумах, поиск единомышленников, хождение по конференциям и тусовкам-митапам. Это такой путь самурая.

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

Но рынку нужны надежные работники в большом количестве. Не каждому подходит путь самурая. Поэтому для широких масс выпустили кучу самоучителей — тысячи книг «для чайников». Книги в обложках, похожих друг на друга как близнецы: «Python для чайников», «Java для идиотов», «C# с нуля» и так далее.

Самоучитель хорош тем, что быстро погружает в тему. Вы начнете кодить практически в тот день, когда открыли книжку. Только следуйте пошаговым инструкциям. Но, как говорит преподаватель и тренер по программированию Джеймс Коппел из Массачусетского технологического института, есть одна небольшая проблема: эти книги ничему не учат. Главное там — длинные листинги кода, которые читатель должен воспроизвести.

Как и в конспектах университетских лекций, «код переходит со страницы книги на экран читателя, минуя мозг». Обучение с помощью лекций попросту неэффективно: студенты, которые слушают обычные лекции, на 55% чаще проваливают экзамен, чем те, кто участвовал в обсуждении материала, пусть даже в минимальной форме. То же справедливо и для самоучителей, когда у вас нет возможности ни с кем обсудить материал. Информация зачастую просто минует мозг. Ничего не запоминается.

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

Этот метод очень прост на практике. Фактически, он сводится к трем действиям.

Читать книгу как обычно. Когда попадется образец кода, прочитать его.

Закрыть книгу.

Попробовать набрать код.

Повторить пункты 1−3.

Суть в том, чтобы усвоить мысленные образы — структуры данных, чувствительные к распространению. Хотя метод кажется совсем простым, но в этом случае мозг начинает работать по принципу автокодировщика в машинном обучении: «Автокодировщик представляет собой нейронную сеть, которая пытается воспроизвести на выходе такие же данные, какие были на входе, но с прохождением через промежуточный слой, который слишком мал, чтобы полностью представлять данные. В ходе этой процедуры ему приходится выучить более компактную репрезентацию данных. Здесь в качестве нейронной сети выступает скопление дендритов в вашей голове», — пишет Джеймс Коппел.

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

  1. Выучить английский язык (хотя можно найти немало курсов и на русском языке).
  2. Выбрать программу обучения по интересующему предмету (специальности). Определиться, какое направление программирования наиболее интересно.
  3. Найти учебные материалы по этому предмету.

   MIT OpenCourseWare: обучающие курсы, видеозаписи лекций и семинаров Массачусетского технологического института.

   KhanAcademy: бесплатные лекции, в том числе по математике и информатике.

   Coursera: курсы от ведущих западных университетов.

   Список бесплатных книг по программированию (англ. яз.)

   Сборник учебной литературы для программиста

   Бесплатные книги по программированию на русском и английском

   Подборка бесплатных книг

   Занимательное программирование. Самоучитель. Автор:М. Мозговой.

   C# для школьников. Учебное пособие. Автор:М. Драйер.

   Программирование на Java для детей, родителей, дедушек и бабушек. Автор:Я. Файн.

Главная проблема в самообучении — отсутствие системного подхода. Трудно понять, что учить в первую очередь, а что во вторую, в каком порядке.

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

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

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

Сколько надо учиться на программиста? Например, программа обучения «Профессия веб-разработчик» рассчитана на один год и включает в себя три глобальных курса:

Веб-разработчик

Практический годовой курс для тех, кто хочет стать профессиональным веб‑разработчиком, запустить свой интернет‑проект или веб‑сервис и получить первые заказы на разработку

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

Базовые навыки PHP

Курс, на котором вы познакомитесь с базовыми понятиями программирования и поймете главные принципы. Научитесь писать чистый, структурированный, а самое главное — работающий код. Уже после первого курса вы сможете сделать свой первый сайт на PHP. Вы самостоятельно сделаете то, что раньше казалось фантастикой!

Хотя система платная, но зато повышает шансы на успешный результат. А результат — это престижная, востребованная и высокооплачиваемая профессия с интересными проектами и большими перспективами развития.

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

Курс «Профессия Веб-разработчик»

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

  • 32 часа теории и 16 практических заданий
  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

skillbox.ru

не задумывайтесь / Alconost corporate blog / Habr


Программировать быстро — это легко! Так считает инженер-программист компании Google, который все публикации в своем блоге подписывает лаконичным «Макс». Макс также работает главным архитектором, комьюнити-менеджером и релиз-менеджером в Bugzilla Project. Мы в Alconost впечатлились и перевели его советы о том, можно ли как научиться программировать с космической скоростью.

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

Они, конечно, правы в том, что в условиях сжатых сроков разработчики, как правило, будут писать сложный код. Впрочем, дедлайны не должны приводить к сложности. Вместо фразы «Этот дедлайн помешал мне написать простой код» можно произнести равноценную: «Я недостаточно быстро программирую, чтобы писать просто». То есть чем быстрее вы как программист — тем меньше влияния на качество вашего кода имеют дедлайны.

Теперь давайте разберемся, как, собственно, стать быстрее? Может, это врожденное магическое умение? Надо ли быть «умнее» других, чтобы быть быстрым?

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

Всякий раз, когда замечаете, что топчетесь на месте в размышлениях, знайте: что-то пошло не так.

Это может звучать невероятно, но работает исключительно хорошо. Задумайтесь: когда вы сидите перед вашим редактором, но работа идет небыстро, потому ли это, что у вас низкая скорость набора? Я сомневаюсь: «слишком много набирать» — редкая проблема программистской производительности. Паузы, когда вы не набираете, — вот что все замедляет. А чем обычно заняты в таких паузах разработчики? Пытаются перестать думать — может быть, о проблеме, об инструментах, о сообщении в почте, да о чем угодно. Но всякий раз, когда такое случается, оно означает проблему. Размышления сами по себе — не проблема, но признак какой-то другой проблемы. Вероятно, вместо того, чтобы ходить по кругу в своих мыслях, вам стоит обратить внимание на что-то из этого:

Понимание


Самая распространенная причина непродуктивных размышлений разработчика — неполное понимание какого-то слова или символа.

Это произошло со мной буквально на днях. У меня ушли часы на написание того, что должно было стать действительно простым сервисом. Я очень старался прекратить думать об этом, пытаясь разобраться, как все должно работать. В итоге я осознал, что не понимал одну из входных переменных в основной функции. Я знал название ее типа, но так никогда и не поинтересовался его определением — то есть на самом деле не понимал, что эта переменная (слово или символ) означала. Как только просмотрел код и документацию по этому типу — пришло понимание, и я написал этот сервис как демон (каламбур отчасти неслучаен).

Таких вариантов — бесчисленное множество. Многие пользуются языком программирования, не разбираясь, что (, ), [, ], {, }, +, * и % означают в этом языке. Некоторые разработчики не понимают, как на самом деле работает компьютер. Помните мой «Единственный секрет программиста-рок-звезды»? Вот где суть! Ведь если ты по-настоящему понимаешь, тебе не надо прекращать ненужные размышления. Это также побудило меня написать книгу: понимание того, что есть незыблемые законы создания программного обеспечения, может избавить от многих эпизодов «борьбы с размышлениями».

Так что, если вы оказались в мыслительном тупике, не пытайтесь решить проблему в своей голове — ищите то, чего не понимаете, вне себя. После чего возьмите и посмотрите на что-то, что поможет вашему пониманию. Это применимо даже к вопросам вроде «Прочтет ли когда-нибудь пользователь этот текст?» У вас может не быть Департамента исследований пользовательского опыта для настоящего ответа на этот вопрос, но вы можете хотя бы нарисовать что-нибудь, показать другим, выслушать их мнение. Не пытайтесь просто сидеть и думать — сделайте что-то. Только действие ведет к пониманию.

Рисование


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

Начинание


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

Часто фрагмент кода, с которого проще всего начать, — это «ядро» приложения. Например, если бы я взялся писать приложение YouTube, я бы начал с видеоплеера. Воспринимайте это как упражнение по непрерывной поставке: пишите код, который действительно сначала создает продукт — неважно, каким дурацким или незначительным он может получаться. Видеоплеер без пользовательского интерфейса — уже продукт, выполняющий полезную задачу (воспроизведение видео), даже если еще не полноценен.

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

Пропуск шагов


Еще одна специфическая проблема понимания — пропуск какого-то шага в правильной последовательности разработки. Например, наш объект Велосипед зависит от объектов Колеса, Педали и Рама. Если вы попытаетесь написать весь объект Велосипед без написания объектов Колеса, Педали и Рама, вам придется много обдумывать эти несуществующие классы. С другой стороны, если вы напишете класс Колеса, пока вообще не существует класс Велосипед, вам предстоит много размышлений о том, как класс Колеса будет использоваться классом Велосипед.

Правильное решение тут — реализовать достаточную часть класса Велосипед, чтобы дойти до шага, где вам понадобятся Колеса. Потом написать достаточную часть класса Колеса, чтобы удовлетворить актуальную потребность в классе Велосипед. После чего вернуться к классу Велосипед и работать над ним до следующей нужды в каком-то из основных элементов. Так же, как и в пункте «Начинание»: найдите часть проблемы, которую можете решить без размышлений, и решите ее сразу.

Не перепрыгивайте шаги при разработке своей системы — и это позволит вам быть продуктивным.

Физические проблемы


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

Отвлекающие факторы


Когда разработчик отвлекается на что-то внешнее, например, шум, ему может понадобиться некоторое время подумать, чтобы вспомнить, над чем он работал в своем решении. Ответ тут относительно прост: перед тем, как садитесь за разработку, убедитесь в том, что ваше окружение не побеспокоит вас или отвлекающие факторы не будут вас прерывать. Одним нужно закрыть дверь в свой офис, другим — надеть наушники, кому-то — поставить статус «Не беспокоить»: сделайте так, как вам нужно. Возможно, вам понадобится помощь вашего менеджера или сотрудников, чтобы создать действительно благоприятную для разработки среду.

Неуверенность в себе


Иногда разработчик сидит и размышляет потому, что ощущает неуверенность в себе и своих решениях. Выход тут аналогичен описанному в пункте «Понимание»: если вы не уверены в чем-то, узнавайте об этом больше до тех пор, пока не появится уверенность, достаточная, чтобы писать код. Если вы не уверены в себе как в программисте вообще, возможно, вам нужно изучить еще многое — вроде основ, изложенных в «Почему программисты отстой». Разбирайтесь с каждым вопросом, пока не добьетесь настоящего понимания, после чего переходите к следующему, и так далее. Программирование всегда подразумевает обучение в процессе, но по мере увеличения багажа знаний вы будете становиться все быстрее и быстрее, а задумываться придется все меньше и меньше.

Ложные представления


Многим говорили, что думать — удел умных людей, и они не задумываются, чтобы принимать разумные решения. Но это неправда. Если бы размышления сами по себе могли сделать вас гением, вокруг были бы одни Эйнштейны. По-настоящему умные люди учатся, наблюдают, принимают решения и действуют. Они приобретают знания и потом используют их для решения возникающих проблем. Если хотите быть действительно умным, используйте свой интеллект для деятельности в физическом мире — не замыкайтесь с ним для великих дум в своей голове.

Бездействие


Все перечисленное выше — ключ к тому, как быть быстрым программистом, когда вы сидите и пишете код. Если же вы весь день читаете почту и ходите по встречам, а программировать вам некогда — это другая проблема. Некоторые ее аспекты схожи (это как если бы организации пришлось «не задумываться»), но это не то же самое.

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

Как вам такой подход?

О переводчике
Перевод статьи выполнен в Alconost.

Alconost занимается локализацией приложений, игр и сайтов на 60 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее: alconost.com

habr.com

Как я сам научился программировать за 8 недель / Habr

Для многих, кто никогда не программировал, обучение программированию кажется невероятно сложной задачей. Как бы то ни было, спасибо тому огромному количеству ресурсов, которые недавно стали доступны в Интернет и являются бесплатными — самообучение программированию никогда еще не было таким простым.

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

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

Получение начального понимания языка программирования Python и общих методов программирования (2 выходных дня):

  • Learn Python the Hard Way. Несмотря на название, это довольно простой способ, он делает изучение основных понятий очень легким, и большинство уроков займет менее 10 минут. Тем не менее, я обнаружил, что данный способ не работает для некоторых, более сложных тем, так что я рекомендую остановиться после урока 42 и двигаться дальше.
  • Google’s python class. Читайте заметки и / или смотрите видео и делайте все упражнения, пока вы не будете выполнять их правильно — не подсматривая в ответы. Борясь с упражнениями, которые я постоянно делал неправильно было очень полезным для меня в качестве полученного опыта, и я узнал бы гораздо меньше, если бы я просто посмотрел на ответы и пытался убедить себя, что я понял упражнение.

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

Получение начального понимания веб-фреймворка Django (1 выходной):

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

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

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

Получение более глубокого понимания Python / общих концепций программирования (4-8 выходных дня):

Опять же, я хотел бы рекомендовал попробовать каждый из них и посмотреть, какой вам понравится больше. Я делаю оба, но это, наверное, перебор.

Практика построения простых веб-приложений (2 выходных дня):

  • Выполняйте упражнения из Django в примерах. Эти упражнения не так строго ведут ученика, как учебник Django, но они предлагают хороший способ, чтобы начать разрабатывать свои собственные простые веб-приложения.
Создайте свой прототип (2 выходных дня):

Вот и все. 8 недель (или меньше) и вы ушли от ничего не зная о разработке программного обеспечения до рабочего прототипа. Не так уж и сложно, так ведь?

Следующие шаги:

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

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

Оригинал: How I Taught Myself to Code in 8 Weeks

habr.com

Как выучить программирование с нуля

Как учить программирование с нуля

1. Самостоятельно

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

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

Платформа с бесплатными курсами по веб-разработке freeCodeCamp

Запомните, что у вас ничего не получится без практики. Учитесь по проектно-ориентированным курсам и пытайтесь сами писать разобранные в них программы и сайты. Ищите лекции на YouTube с разбором проектов, которые вы бы хотели разрабатывать. Сначала копируйте работу других людей и анализируйте её. Затем пробуйте отходить от оригинала, экспериментируйте, изменяйте отдельные элементы, пока не сможете создавать что-то уникальное.

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

Обязательно поставьте перед собой цель создать свой проект и постоянно работайте над ним.

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

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

Сервис вопросов и ответов на технологические темы «Тостер»

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

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

13 советов тем, кто изучает программирование самостоятельно →

2. С помощью ментора

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

Узнайте, есть ли среди ваших знакомых разработчики. Возможно, кто-нибудь из них захочет вам помогать. Если таких людей вы не знаете, можете поискать их в сообществах программистов. К примеру, на том же «Тостере». Только услуги менторства стоят недёшево, а за просто так тратить много времени на незнакомых людей никто не желает.

3. У преподавателей «живых» курсов

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

Популярные русскоязычные онлайн-площадки, которые занимаются системной подготовкой программистов: «Нетология», GeekBrains и Loftschool.

Если предпочитаете заниматься очно, можете поискать образовательные центры, которые обучают программированию в вашем населённом пункте. К сожалению, такие заведения чаще всего присутствуют только в больших городах. В качестве примера можно привести компьютерную академию «ШАГ», у которой есть филиалы в нескольких странах.

4. В университете

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

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

Как выбрать направление и язык

В ИТ-индустрии можно выделить несколько направлений, в каждом из которых используют свой набор языков. Перечислим основные направления в порядке возрастания сложности:

  1. Веб-разработка. Популярные языки: JavaScript, PHP, Python, Ruby.
  2. Мобильная разработка. Популярные языки: Java, Swift.
  3. Разработка игр и программ для настольных компьютеров. Популярные языки: C++, C#, C.
  4. Big Data, машинное обучение. Популярные языки: Python, R, Scala.

На что обратить внимание при выборе

Чтобы сделать правильный выбор направления и, в частности, языка, учитывайте следующие факторы: сложность освоения и количество обучающих материалов в Сети, ваши личные предпочтения (что именно хотите разрабатывать) и востребованность языка на рынке труда.

График востребованности языков на международном рынке труда / research.hackerrank.com

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

ИНФОГРАФИКА: Какой язык программирования учить первым →

Если не можете определиться

Если вы в замешательстве, присмотритесь к JavaScript — языку, на котором написан почти весь веб. Многие организации и программисты советуют новичкам выбирать именно этот язык в качестве первого.

Например, основатель образовательного ресурса freeCodeCamp Квинси Ларсон рекомендует JavaScript всем начинающим. Ларсон приводит очень простые аргументы:

  1. JavaScript относительно легко освоить. А чтобы написать что-то и запустить на этом языке, достаточно иметь редактор кода и браузер.
  2. JavaScript — самый востребованный язык на международном рынке труда и у него большие перспективы. В экосистему JavaScript инвестируют крупные компании вроде Google, Microsoft и Facebook.
  3. У JavaScript очень широкая сфера применения: от сайтов и браузерных игр до мобильных приложений.

Кроме того, вокруг этого языка сформировалось крупное сообщество разработчиков. Высокий интерес к JavaScript обеспечивает огромное количество курсов, книг и другого образовательного контента.

Что ещё должен знать программист: математика и английский?

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

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

Как выучить английский язык: всё самое интересное и полезное →

Как получить первый опыт и первую работу

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

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

  1. Выполните несколько заказов на биржах фриланса. Это могут быть «Фрилансим» или Upwork. Предлагайте свои услуги бесплатно, тогда к вам придут первые заказчики.
  2. Найдите единомышленников и создайте с ними общий проект. Люди объединяются для таких целей почти на каждой образовательной площадке, где есть курсы по программированию.
  3. Выберите курсы, организатор которых помогает с трудоустройством. Например, в GeekBrains после обучения открывается доступ к стажировкам от разных компаний, в том числе — оплачиваемым. GeekUniversity и «ШАГ» гарантируют трудоустройство своим выпускникам.

Перед собеседованием не забудьте поискать в Сети списки задач и вопросов, которые часто задают соискателям.

lifehacker.ru

Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать


(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)

Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.

Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?

На ум сразу пришел бомж-программист, но после успеха с его приложением он предпочёл остаться «дзен-монахом». Есть ли еще примеры? Вдохновляющий пример, что научиться кодить может каждый — слепой программист. Когда я прочитал статью на Хабре «Смотря на код с закрытыми глазами», то понял, что нет преград, кроме собственных отмазок.

А у меня для вас есть три истории из моей жизни. Просто три истории.

История первая — ламер

Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.

Так вот как-то один из «богов» подозвал меня к монитору и спросил: «Так сможешь?». И показал прогу, которая ждала, когда пользователь введёт в командной строке любой символ, а потом поворачивала его на 90 градусов. Я был ошеломлен.

Наверное, меня это так зацепило, что я решил — во что бы то не стало, выучить все что можно, и стать самым крутым программистом. Заряда хватило на годы. Этот случай я позабыл, прошло несколько лет, и, вспомнив о нем, я написал не больше десятка строк на basic`e минут за 20. Программа работала идеально.

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

История вторая — первый шифр

Идея пришла внезапно. Пришла так, что не смог заснуть и сел кодить. Из шифров тогда я знал только про пляшущих человечков из Шерлока Холмса (а это класс 8 или 9, занимался программированием полгода-год). Мне захотелось написать шифр, чтобы нельзя было так просто его вскрыть простым анализом.

Задумка была следующая: каждой букве русского алфавита мы приписываем массив из 5 символов в виде букв русского и английского языка, спецсимволы. При шифровании мы рандомно выбираем один из них. Получалась «расширенная» простая замена. Это сейчас мне понятно как его ломать, но тогда для меня была запредельная высота. Через 3-4 года я поступлю на компьютерную безопасность.

Вывод. Решать интересные задачи — это круто. Но гораздо круче придумывать и находить задачи самому.

История третья — триумф BASIC`а

Я уже 2 года «занимался» программированием. И тут в школе появилась… информатика. Меня почему-то отправили в слабую группу. Как узнал позже, моё лицо не понравилось преподавательнице и она посчитала, что я тупой. Мои друзья ворвались в кабинет к директору и сказали, что я занял призовое место на краевой олимпиаде по программированию. Начались, разборки, но мне было так пофиг, что я остался в слабой группе, где учили вводить цифры в Exсel. За первую неделю я сдал всю программу и спокойно ходил играть в Diablo 2 в компьютерный клуб.

А на олимпиаде был забавный случай. Разрешённые языки — C, Pascal, а я то был прожжённым бейсичником. Выкрутился. Задачу принимали в виде exe’шника, а я подсуетился и нашёл бейсик, который кует exe’шники. Программы проходили тесты, а сами тесты принимались на серваке. Одна задача была сугубо вычислительная. Давались координаты центров и радиусы двух окружностей. Требовалось выдать взаимное расположение окружностей в текстовом виде: пересекаются, касаются, одна в другой, совпадают, и прочие.

С формулами было возиться лень, и недавно я как раз разбирался с графикой. Задачу решил графически, рисовал окружность одним цветом, а потом «сканировал» попиксельно по второй окружности, втыкаюсь ли я в уже окрашенный пиксель. Был большой страх, что прога не сможет работать на серваке без монитора, но все обошлось — 10 тестов из 10. На разборе задач был звездный час. Полсотни человек решили задачу один в один как автор, какого же было их удивление, когда я рассказал свой способ.

Вывод. Школа — зло. Результат — круто. Нестандартное мышление — прикольно. Обходной путь есть всегда.

Зачем взрослым учиться программировать

У меня есть три ответа на этот вопрос. Они зависят от горизонта планирования:

— Цель на 1 неделю или месяц — это вызов. Это как пробежать марафон или забраться на Эльбрус, проверить не засохли ли мозги, выйти из зоны комфорта.

— Цель на год-два — это бабло. За это время можно научиться создавать ценность и работать удаленно. Или учить других. Очень многие хотят научиться программировать.

пруф

сам поискал 8 сентября:

на русском в 1000 раз меньше:


— Цель на 5-10 лет — развитие в целом. Во-первых, вы улучшите своё мышление. Во-вторых, вы сделаете неоценимый подарок детям. Они получат несколько лет форы в изучении программирования и у вас появится много чудных моментов совместного написания программ. Для полного счастья останется научиться играть в компьютерные игры, но это вы скорее всего уже умеете.
Как научиться программировать

Есть заезженная картинка на этот счёт:

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

Если готовы приступить по-взрослому, то есть множество ресурсов для самообучения. От Coursera (раз, два) до всяких %имя%academy (codeacademy, htmlacademy и пр)

Если намерения совсем серьёзные, могу посоветовать курс «Врубиться в Ruby».

Во-первых, есть живой преподаватель с хорошим бэкграундом в разработке. Виталий Куреннов, 6 лет пишет на Ruby и больше года обучает всех желающих этому навыку, работал над Ruby проектами для Nokia и Avaya.
Во-вторых, есть группа единомышленников, работая бок о бок с которыми, у вас многократно повысятся шансы дойти до победного конца и освоить программирование до того уровня, когда оно начнет приносить прибыль.

— Никита, почему именно Ruby?
— Все просто, мы нашли очень хорошего преподавателя.

Про Ruby
Попробовать сделать первые шаги можно прямо сейчас, займет всего 5-10 минут.


Нашел шикарный ресурс с геймификацией и сразу из браузера tryruby.org
За 5 минут выполняем несколько заданий, получаем ачивку и переходим на следующий уровень.


А зомбяк не хотите ли? railsforZOMBIES.org

Про Lisp

«Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.» Пол Грэм, «Побеждая посредственность»

Начитавшись Грэма, осваиваю Lisp.
;; Welcome to L(λ)THW!
(let ((llthw '(learn lisp the hard way)))
  (format t "~{~@(~A~)~^ ~}, because ~{~A~^ ~} is easier!" llthw (cddr llthw)))

;; Common Lisp: Powerful, Expressive, Programmable, General Purpose, Multi-Paradigm.


Нашёл для себя удобную браузерную обучалку Learn Lisp The Hard Way

«За те годы, что я проработал в Viaweb, я прочитал множество объявлений о найме на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я делал после того, как проверял, доступна ли онлайновая демонстрация работы их программы, — смотрел список их вакансий. Через пару лет я научился отличать опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от описания требуемых кандидатур, тем менее опасна была компания. Самыми безопасными были те, кому требовались специалисты по Oracle. О таких не стоило беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или Java.

Если требовались программисты на Perl или Python, это уже было слегка пугающе — это значило, что компанией или, по крайней мере, ее технической частью заправляли настоящие хакеры. Если бы я когда-нибудь увидел объявление о найме на работу Lisp-хакеров, я бы обеспокоился не на шутку.» Пол Грэм, «Побеждая посредственность»

Ещё пара советов

  • Читайте Хабр. Например, вот это статья может очень помочь тем кто уже начал свой путь — «Почему научиться программировать так чертовски тяжело?» Или история успеха — «Как я сам научился программировать за 8 недель»
  • Читайте Пола Грэма. Он вдохновит заняться программированием кого угодно. Даже меня. Даже на Lisp.
  • Найдите единомышленников
  • Найдите вдохновляющую задачу
    напримерОбщие упражнения:
    Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование на любом языке.
    Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
    Rosalind — это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
    Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
    codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
    Ruby Quiz — серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.

    Задачи из олимпиад по программированию:
    UVa Online Judge — коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
    TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
    CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
    Timus — то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
    SPOJ — похож на UVA, с огромным числом языков программирования на выбор.
    USACO содержит несколько задач на алгоритмы с руководством по их решению.

    Под определённые языки:
    Для Prolog, Lisp и подобных языков посетите P-99 и L-99, наборы из 99 задач для повышения вашей эффективности в данных языках.
    Python Challenge — объединяет загадки и головоломки, которые помогут вам серьёзно прокачаться в Python.
    4Clojure — набор упражнений по программированию, специально разработанных под Clojure, Lisp-подобный язык.

  • Соревнуйтесь
  • Играйте в Игры для программистов
  • Пишите код каждый день
  • Пишите о своих успехах и находках на Хабр

P.S.
Ещё интересные статьи с Хабра на тему быть/не быть программистом и как делать шаги на пути мастерства

P.P.S.
Алан Кэй делится яркой идеей об идеях. Архитектура, математика, обучение, программирование и много ещё интересного.

habr.com

Почему научиться программировать так чертовски тяжело? / Hexlet corporate blog / Habr

Привет, Хабр!

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

  • С чего начать обучение программированию?
  • У вас есть курс по Java для новичков, но я слышал, что нужно изучать Python, правда ли это?
  • На других сайтах все просто и понятно, а у вас какие-то компиляции и тесты!
  • Непонятно зачем нужен этот ваш курс по алгоритмам, в реальной жизни все алгоритмы уже реализованы в стандартных библиотеках

Но сложнее всего объяснить новичку, грубо говоря, во что он ввязывается. Благодаря очень простым, игровым образовательным проектам многие считают, что программирование это очень легко, а наши виртуальные машины, где нужно запускать тесты и компилировать код – это надуманная сложность. Давно хотелось найти такой материал, который бы подготовил новичка к длинному и сложному пути к карьере программиста. И недавно наши коллеги из Viking Code School такой материал написали! А мы его перевели для вас.

Квинси Ларсон был просто “офисным парнем в костюме”. Он решил научиться программировать. Начал спрашивать людей вокруг. Изучил немного Руби, потом быстренько посмотрел на другие языки вроде Scala, Clojure и Go. Он изучил Emacs, а потом Vim, а потом раскладку Dvorak. Он втыкал в Линукс, копался с Лиспом и кодил на Питоне, и жил при этом в командной строке больше полутора лет.

Его швыряло туда-сюда как листочек в торнадо. Каждый совет, который он слышал, тащил его то в одну, то в другую сторону, до тех пор пока он не прошел “каждый онлайн-курс по программированию во вселенной”. В конце концов, не смотря на то, что он получил работу разработчика ПО, Квинси:

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

Ох. Звучит знакомо?

Фаза 1: Медовый месяц

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

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

С другой стороны, движение «Learn to Code” проделало фантастическую работу по удалению барьеров, и показало что кодить на самом деле довольно просто. Инструменты вроде Codecademy, Treehouse и Code School так мягко и за ручку подводят тебя к коду, что можно быть уверенным – я не просто смогу научиться программировать, я смогу стать полноценным разработчиком!

Внезапно, проблема не в страхе, а в избыточных надеждах и высоких ожиданиях.

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

Проблема в том, что вы находитесь в фазе “медового месяца”. Может казаться, что конец близок, но в реальности вы прошли лишь крохотный отрезок пути. Это только начало…

Рисуем маршрут

Перед тем как перейти к Фазе 2, давайте взглянем взглянем на весь путь.

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

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

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

Мы рассмотрим уникальные испытания, которые ждут нас в следующих трех фазах, но для начала вкратце рассмотрим каждую фазу:

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

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

3. Пустыня отчаяния это долгий и одинокий путь через бездорожье, где каждое новое направление кажется верным, но часто вы просто ходите кругами и голодаете по ресурсам, которые могли бы помочь. Остерегайтесь “миражей мании” как сирен пустыни! Они уведут вас в никуда.

4. Подъем благоговения это та часть, где вы наконец находите путь через пустыню и начинаете понимать как создавать приложения. Ваш код все еще дырявый и хрупкий как карточный домик. Вера в себя растет потому что ваши сайты вроде как работают, вы изучили несколько важных паттернов, ваши друзья считают ваши интерфейсы крутыми, но вам страшно заглянуть под капот, и вы не знаете как делать production-ready код. Как отсюда построить мост к состоянию “готов к реальной работе”?

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

Давайте вернемся к фазе 2…

Фаза 2: Скала смятения

Итак, вы находитесь в фазе 1 – „Медовый месяц“. Вы заполняете пробелы и завершаете задачи, связанные с кодом в то время как ваша уверенность и возможности растут. Это не так уж плохо… К чему суета? Вы поднялись на «Гору иррационального изобилия»…

Будьте осторожны! Вы собираетесь переступить пропасть, которая ломает многих сильных учеников, вытесняя их в лагерь под названием „кодинг — это слишком тяжело“. Точный момент этого скачка происходит тогда, когда вы садитесь за клавиатуру, открываете свой текстовый редактор и пытаетесь в первый раз создать проект с нуля без каких-либо встроенных в браузер редакторов, костылей кода или полезных советов.

Блин…

Вы можете немного оттянуть этот момент, продолжая следовать учебникам, но никто ещё не достиг неба, не оторвавшись от земли, и настанет момент, когда вы будете творить волшебство в пустом текстовом файле. Вы только что вошли во вторую фазу обучения, где уверенность падает вниз на землю. Добро пожаловать на «Скалу смятения»:

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

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

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

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

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

Два ключевых фактора

Так в чем же на самом деле разница между первой и второй фазой? Почему фаза 2 («Скала смятения») так ужасна по сравнению с фазой 1 («Медовый месяц»)? Понимание этого поможет вам понять, что вашей вины абсолютно нет в том что, ваше путешествие выглядит так, как мы только что описали.

Есть два основных момента во время прохождения каждой фазы: плотность ресурсов и объем знаний. Давайте посмотрим, что это такое, прежде чем изучать, как они выведут вас к фазе 3.

Фактор 1: плотность ресурсов

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

Введите в поисковике «Уроки программирования», и на вас обрушится стена из нужных и полезных инструментов, таких как статьи, видеоролики и учебники. И, честно говоря, это здорово! Никогда раньше не было так много способов, чтобы начать учиться программированию.

К сожалению, на более поздних этапах плотность ресурсов быстро падает. Любой, кто прошёл от стадии новичка до среднего уровня, может подтвердить, что существует БОЛЬШАЯ разница между количеством имеющихся ресурсов в самом начале и тогда, когда вы впервые ищете помощь самостоятельно, без посторонней поддержки.

Эта проблема усугубляется при переходе к третьей фазе, когда количество знаний быстро возрастает, и есть одна причина, по которой мы называем эту фазу „Пустыней отчаяния“. Как только вы пройдете её и начнете точно чувствовать, что именно вам нужно искать, то ресурсы вернутся, и вы сможете использовать в работе большее количество технических средств, таких как блоги и видеоролики. Отчасти это просто умение задать правильные вопросы.

Вот как выглядит плотность ресурсов в каждой фазе (большая концентрация линий указывает на большую плотность ресурсов):

Фактор 2: объем знаний

Теперь давайте поговорим о втором вопросе, об объеме знаний. Он представляет собой общую широту новых тем, которые вы осваиваете в каждой фазе. Вот как это выглядит:

Когда вы только начали обучение, набор вещей, которые вам нужно понимать, ещё достаточно узкий. Каждому человеку, независимо от целей обучение, языка и предпосылок, необходимо изучить, что такое цикл «for», как построить логику условного оператора и познакомиться с основными структурами синтаксиса программирования. А зачастую даже и не приходится сталкиваться с некоторым из вышеприведенных базовых понятий, поэтому объем знаний на этом этапе является очень узким.

Как только вы отходите от основ, вы замечаете быстрое расширение базы знаний, так как начинаете сталкиваться с более сложными вопросами, такими как понимание разновидностей ошибок, или, когда именно использовать код, который вы знаете и как вообще его использовать. А это две разные вещи, потому что нет „правильного“ ответа на точный вопрос… Пока всё очень размыто.

По мере продвижения к третьему этапу объем знаний станет расти. Теперь вы должны понимать, какие инструменты использовать, какие языки изучать, как писать модулярный код, знать основы CS и объектно-ориентированного программирования, обладать грамотным стилем кода и уметь искать ответы на вопросы (хотя бы в нескольких источниках). Каждый заход в Google или на сайт Hacker News погружает вас в огромное множество кроличьих нор и ошеломляет вас такими вещами, которых вы не знаете, но чувствуете, что должны их знать.

Вы не знаете, чего именно вы не знаете.

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

Фаза 3: Пустыня отчаяния

С пониманием ключевых факторов, можно увидеть, что «Скала смятения» является критической точкой. Мучения, вызванные совокупностью быстро растущего объема знаний и упадка плотности ресурсов привели к фазе, которую я называю „Пустыня отчаяния“.

В сущности, это пустыня, где вы знаете, что где-то есть конец, но не знаете, как до него добраться:

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

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

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

Существует НАМНОГО больше вещей, которые предстоит узнать, чем вы, возможно, ожидали. Даже если вы в состоянии заставить работать некоторые приложения, то очень трудно не чувствовать себя слабым звеном в огромной цепочке становления настоящим профессионалом. Трудно измерить ваш прогресс. Как вы узнаете, что вам изучать, если изучаете только необходимые вещи?

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

Безусловно, до этого момента было трудно, но, возможно, вся эта история с веб-программированием и не такая сложная, в конце концов… Everything’s coming up Milhouse!

Фаза 4: Подъем благоговения

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

Это и есть «Подъем благоговения»:

Снаружи всё может выглядеть хорошо, но в глубине души вы знаете, что вы ещё не достигли цели.

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

Это фаза состоит из двух полюсов: вы чувствуете, что одна ваша половина — это пуленепробиваемый разработчик, а вторая — тонкая фанера с дикими глазами новичка, который утонул в своём пути. Чем дальше вы продвигаетесь, тем больше растет терзающее чувство неопределенности, как будто кто-то собирается «разоблачить» вас, как обманщика.

Вы чувствуете, что уже должны стать разработчиком, но дистанция между кодом, который вы пишете и «профессиональной» рабочей средой не сокращается…

В конце концов, однако, это произойдёт. Столько сил не могут быть потрачены даром! «Пустыня отчаяния» позади, а «Скала смятения» превратилась в далекое воспоминание. Вы, наконец, по-настоящему, на подъеме. Вы обучаетесь быстрей и разумней, чем когда-либо прежде, вы получили достаточное количество нужной практики, и ваши обрывочные знания превращаются в набор навыков профессионального уровня.

«Подъем благоговения» всегда занимает больше времени, чем вы ожидаете, и кажется бесконечным, потому что вы так близко… Но вы всё же достигнете его. Если вы настойчиво идёте в правильном направлении (тема следующего поста), то сможете убедить кого-то платить вам и спокойно продолжать учиться дальше. Работа ваша.

На что всё это похоже

Итак, теперь вы увидели, какая дорога ждёт впереди и почему она может быть трудной. Если рассмотреть все четыре фазы и выделить факторы, которые их разделяют, получится следующая картина:

Одно дело — знать путь, а другое дело — идти по нему. Давайте поможем вам начать.

Как дойти до конца живым

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

В этом разделе я представлю основные тактики, которые можно использовать, чтобы держаться в правильном направлении.

I: Как Выжить в «Медовом месяце»

Разнообразие доступных ресурсов в «Медовом месяце» доставляет много веселья. Они делают большую работу, чтобы сформировать вам нужный тип логического мышления, который вы должны будете развивать в течение последующих фаз. Это прекрасное время, чтобы начать учиться коду. Итак, пробуйте, наслаждайтесь, но не забывайте держать в голове эти два совета:
  1. Начните пробовать разные ресурсы, чтобы найти те, которые лучше вам помогают в обучении, ищите наиболее интересные для вас проекты. Это могут быть быстрые решения от KhanAcademy, упражнения в браузере от Codecademy, книга Learn to Program Криса Пайна или школа кода Try Ruby. В начале будьте открытыми для всего и игнорируйте наставления в стиле «вы должны учить только это». На данном этапе весь код одинаковый.
  2. Далее выберите один подходящий для вас ресурс и старайтесь придерживаться только его. Пройдите курс от начала до конца, чтобы получить все основные знания, которые вам помогут написать базовые скрипты и приложения. А в дальнейшем приготовьтесь начать создавать свои собственные проекты.
II: Выживание на «Скале смятения»

Почти каждый из вас пройдёт через «Скалу смятения», поскольку единственный способ стать разработчиком — это разрабатывать. Вы можете претендовать на эту профессию, подписавшись на статьи (или на туториалы, которые выдают за «полные» курсы), но этим вы будете только откладывать неизбежное. Учебники — это хороший способ решить начальные задачи, но в некоторой момент вы должны будете отучить себя от соски и столкнуться с реальным миром.

Вот три совета, которые помогут самостоятельно перейти к компилированию:

  1. Работайте с кем-то в паре, даже если он такой же новичок как и вы. Вы будете удивлены, насколько легче отладить кажущуюся неисправимой ошибку, если подключить ещё две пары глаз.
  2. Читайте больше чужого кода, чтобы познакомиться с хорошими паттернами. Постарайтесь понять, почему автор сделал именно так, а не иначе. Вы ведь не сможете стать писателем, не читая чужих книг, не правда ли? Мы подробно рассмотрим это в следующем посте, а сейчас, заострите своё внимание на мелких проектах и задачах, для которых другие люди уже написали решения.
  3. Начните с малого и программируйте постоянно. Вы должны думать о будущих крупных и интересных проектах, но для этого ваша отладка должна стать гладкой, а поиск ресурсов не должен составлять труда. Опыт вы ничем не замените.
III: Выживание в «Пустыне отчаяния»

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

Итак, вот ключи к выходу из «Пустыни отчаяния»:

  1. Поставьте перед собой определенную цель, которую вы хотите достичь, потому что в противном случае вы закончите тем, что устанете гоняться за своим хвостом, изучая различные виды интересных, но по большому счёту ненужных вещей. Но если у вас есть свободное время, то можете опустить этот совет…
  2. Найдите верный путь, который ведет прямо к поставленной цели и убедитесь, что он действительно направляет вас к ней. Вам нужно копать глубже и не искать ответ среди рекламных лозунгов, суперобложек и улыбающиеся лиц на веб-сайтах различных курсов на вопрос „поможет ли мне это достичь поставленной цели или нет?“
  3. Сконцентрируйте всё своё внимание и не отвлекайтесь, потому что, если вы относитесь к тем людям, которым интересно изучать код, вы также заинтересуетесь изучением других интересных вещей. В те моменты, когда программирование даётся тяжело, вы должны особенно сильно продвигаться вперед, а не браться осваивать другие модные занятия.

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

IV: Выживание на «Высоком подъеме»

Подъем благоговения является одним из самых сложных переходов. Вы умеете разрабатывать приложения, но хотите стать настоящим веб-разработчиком. Подходя к этой фазе и к работе, вы должны делать три вещи:
  1. Найдите лучшую практику по программированию и следуйте её рекомендациям. Вы должны видеть разницу между решением и лучшим решением. Лучшие практики покажут большое различие между вашим вымученным кодом и профессиональным кодом высокого качества, написанным на рабочем месте.
  2. Сдерживайте свои амбиции. Наверняка, у вас есть такие пробелы в знаниях, о которых вы даже не подозреваете. Вы должны найти и восполнить их.
  3. Не пренебрегайте рутинной работой, она редко кому-то нравится, но она очень важна для перехода к профессиональному уровню. В неё входят такие вещи, как тестирование, модели данных, архитектура и деплой. Всё это очень легко забывается, но имеет основополагающее значение для правильного развития.

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

Итак… Возможно ли это вообще?

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

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

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

Удачи!

habr.com