Как выбрать сторонний проект

Перевод статьи «How to choose a side project».

Как выбрать сторонний проект

Если вы начинающий программист, вам часто будут советовать работать над сторонними проектами, помимо тех, которыми вы занимаетесь по работе или в университете. Но ведь есть так много вещей, которые вы могли бы сделать! Но как же выбрать, над чем стоит работать? Как выбрать сторонний проект, который, собственно, сможете довести до конца? И как быть уверенным, что в ходе работы над этим проектом вы чему-то научитесь?

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

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

Давным-давно, в далеком-далеком Интернете

В 2000 году мой друг Глиф начал работу над маленьким проектом под названием Twisted Reality. Это должен был быть игровой движок. Создавался он с целью реализации одной сложной и замысловатой игры.

Поскольку в этой игре был чат, веб-сервер и другие формы коммуникации, в игре появился сетевой движок. Глиф и его друзья зависали в одном чате, в канале, посвященном Python. Каждый раз, когда кто-нибудь задавал вопрос по сетям, они говорили ему: «Используй Twisted Reality!». Со временем оказалось, что все большее количество людей нуждается в маленькой фиче, добавленной к сетевому движку, поэтому был добавлен соответствующий патч. Так я стал контрибутором Twisted Reality.

В конечном итоге сетевой движок так подрос, что Twisted Reality разделился на два проекта: сетевой фреймворк Twisted и игровой движок Reality. Сегодня Twisted используется такими компаниями как Apple, Cisco и Yelp, и все еще прекрасно себя чувствует. Игровой движок переписывался много раз, но игра, для которой он писался, так и не была создана.

Подход №1: решение проблемы

Решение проблемы

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

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

  1. «Можно построить лучшее в мире приложение для тайм-трекинга». Тут нет ни ограничений, ни специфичности, к тому же это не та проблема, которую вам нужно решить.
  2. «Я хочу отслеживать, сколько времени провожу над домашними заданиями, а сколько уходит на прокрастинацию». Это уже лучше, но все равно не слишком основывается на реальной проблеме.
  3. Хорошая постановка задачи будет такой: «Я хочу не дать себе посещать Facebook и другие (определенные) сайты, пока работаю над домашними заданиями». Вот здесь у вас есть четкое понимание того, какая программа вам нужна.

Почему проблема должна быть специфичной и ограниченной?

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

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

Подход №2: искусственные ограничения

Ограничения времени

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

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

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

Программа сама по себе не имеет значения

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

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

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

Прокрутить вверх