Как (и зачем) начинать создавать настоящие и полезные программы, не имея опыта

0
1383
views

Перевод статьи «How (and why) to start building useful, real-world software with no experience».

Как создать проект, не имея опыта

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

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

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

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

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

Или, если вы более оптимистично смотрите на вещи, ваши мысли могут быть примерно следующими:

«Пожалуй, я еще не готов. Наверное, нужно продолжить учиться, и тогда со временем я смогу создавать «настоящие программы». А пока мне стоит просто взяться за более продвинутый курс…»

Но чего стоят все ваши знания, если вы не можете применять их на практике?

Вы должны это знать: дело не в вас! Правда!

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

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

Проблема нашего подхода

Так почему же мы сомневаемся в своих силах и боимся начинать собственные проекты?

Виновны ли в этом многочисленные открытые курсы (МООК, массовые открытые онлайн-курсы) со всеми их тщательно подобранными проектами, обучающими видео и форумами? Возможно, они делают учебу уж слишком комфортной?

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

Так что да, эти курсы прекрасны.

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

План примерно такой:

  1. Пройти курс.
  2. Начать проект, чтобы закрепить полученные знания.
  3. Посмотреть, знаешь ли достаточно, чтобы закончить проект. Если нет — возвращаешься к шагу № 1.

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

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

Похоже на прокрастинацию. Правда?

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

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

Обычный подход не пооможет создать проект

Два элемента, необходимых для перехода от теории к практике

Умение самостоятельно находить ответы на вопросы

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

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

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

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

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

Высокая цель

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

Некоторое время назад я решил познакомиться с машинным и глубоким обучением. Я нашел целый комплект из пяти курсов знаменитого преподавателя Эндрю Нг. Проходить эти курсы было очень интересно, а в конце я получил сертификаты. Фактически, я прошел весь комплект курсов всего за 20 дней. И на этом — всё!

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

Ладно, а какова альтернатива?

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

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

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

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

Альтернативный подход к учебе

1. Выберите идею, которая кажется вам интересной.

Это важно, так что уделите этому достаточно времени. Обратите внимание на собственные взаимодействия с технологиями. Возможно, вы изо дня в день повторяете какие-то действия, а их можно было бы автоматизировать. Присмотритесь к окружающим. Может, вы могли бы создать программу, которая помогла бы им в чем-нибудь? Выберите то, насчет чего подумаете: «О! Было бы круто, если бы кто-нибудь сделал инструмент для этого!». Вы и станете этим «кем-то».

2. Выясните, какие знания скорее всего нужны для реализации этой идеи.

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

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

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

4. Изучите тему, которая затормозила вашу работу, и возвращайтесь к шагу № 3.

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

5. Получите фидбэк по вашему проекту, узнайте, как можно его улучшить, и переходите к шагу № 2.

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

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

Почему это сработает

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

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

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

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

Работа над собственным проектом

Пример

Я недавно читал одну статью на Indie Hackers — «I needed a tool for myself so I’ve learned to code». Автор сделал точно то, что сказано в заголовке: он научился программировать, чтобы создать мобильное приложение, которое решало бы реальную проблему, с которой он столкнулся. Он выпустил бета-версию и тестировщики посоветовали ему создать приложение для браузера, расширяющее функциональность приложения. Он подучился еще немного и сделал расширение тоже!

Это был настоящий переход от «Ах, как было бы хорошо, если бы был инструмент, решающий мою проблему» к «Я столкнулся с проблемой, поэтому создал специальное приложение для ее решения». Только представьте, насколько потрясающим был этот учебный путь!

Это именно то, что я советую здесь. Применение такого подхода…

  1. Обеспечит вам постоянную мотивацию учиться.
  2. Будет способствовать глубокому погружению в учебный материал.
  3. Станет бесперебойным источником энергии и уверенности. Потому что есть довольно мало вещей, настолько же потрясающих, как создание своими руками чего-либо, необходимого вам или желанного для вас.
  4. Поможет выбрать, что учить. Потому что «что учить» часто более важный вопрос, чем «где этому научиться».

Сам я применял этот метод при создании маленького расширения браузера. Создавая его, я изучил Javascript/JQuery. Это был очень хороший опыт, так что я подумал, что такой подход может быть интересен и другим людям тоже. (Кстати, я по-прежнему работаю над этим расширением браузера, хотя и очень медленно. Если вам интересно принять участие, то добро пожаловать).

Итоги

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

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

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here