Привет, Хабр! Меня зовут Кирилл Кошаев, я Java-разработчик в «Газпром информ» и преподаватель профессии Java-разработчик PRO на образовательной платформе Skillbox. Сегодня хотел бы поговорить о такой интересной теме, как pet-проекты. Здесь, на Хабре, они есть у многих, у меня, кстати, тоже. И я хотел бы обсудить важность pet-проектов для представителей IT-отрасли.
Что это — способ убить время, отвлечься от реальности или путь к профессиональному совершенству? Говорить на эту тему я могу долго и обстоятельно, поскольку у меня есть множество собственных pet-проектов. Некоторые из них завершены, другие — благополучно забыты, третьи — находятся на пути к завершению. Сегодня предлагаю подискутировать на тему важности pet-проектов в жизни профессионала. Если интересно — то давайте продолжим под катом.
Личный кейс
Сперва расскажу о собственном опыте ведения pet-проектов. Как и говорилось выше, у меня их много. Но я не веду все их одновременно: большинство идет в «долгий ящик», какие-то забрасываются и забываются, а некоторые становятся серьезными проектами, которые не стыдно и в портфолио показать.
После долгих месяцев работы над проектами “в стол”: приложения для подсчета фруктов в корзине, вывода фигур в консоль при помощи ASCII и кучи тестовых стендов для понимания работы библиотек выбранного мной языка, ко мне пришло осознание определенного застоя на одном месте.
Размышления на эту тему привели меня к следующему решению: необходимо собрать все, что я изучил в одну большую кучу и запилить уже что-то более серьезное, что-то, что будет не просто очередным tutorial example, а самодостаточным приложением, которое воплотит в себе конкретный функционал и будет решать определенные задачи. Появилась амбиция разработать что-то полезное, что можно было бы скачать/загрузить/установить и использовать на своем устройстве всем, кто того пожелает. Осталась сущая малость — придумать идею.
Генерация идеи — камень, на который находит коса всякого начинающего программиста, приступающего к своему первому pet-проекту. В первую очередь, я столкнулся с тем, что куда бы я ни посмотрел и что бы ни придумал, в 90% случаев аналогичное приложение уже существовало на рынке и даже не в единственном воплощении, а оставшиеся 10% занимали идеи, на реализацию которых уже требовалась команда и, соответственно, все необходимые для командной разработки инструменты и технологии, а ведь я только-только разделался с ядром выбранного мной языка программирования.
Как раз здесь обычно и наступает переломный момент, поскольку нечто вроде «Hello, World» и простых задачек писать уже не хочется, а для хорошего pet-проекта нет достойной идеи. У новичков здесь обычно звучит фраза в стиле: “Ну… я не знаю, что делать дальше, все дико сложно и я не очень понимаю, что еще можно написать на этом языке X, кроме всех тех helloworld-ов, которые я уже написал”. Далее программирование либо оказывается заброшенным вообще, либо проходит смену изучаемого языка/технологии/библиотеки/фреймворка (нужное подчеркнуть), и все начинается с самого начала, пока человек снова не придет к этой переломной точке.
Выходом из этой ситуации для меня стало решение воплотить в первом pet-проекте игру. Мне показалось это идеальным форматом по соотношению трудоемкости, интереса и сложности применяемых технологий. Я немедленно приступил к делу и начал раскапывать различную информацию о том, как, с помощью каких технологий и в рамках изучаемого мной языка, я смогу разработать и выкатить в одиночку небольшую инди-игру, пройдя все сопутствующие этапы самостоятельно.
Почему именно игра:
- Во-первых, я хорошо представлял себе, что такое компьютерная игра и из чего она состоит, так как еще с малых лет сам играю.
- Во-вторых, технологически эта затея достаточно плотно концентрировалась вокруг тех вещей, которые я уже знал, а дополнительные навыки я смог освоить уже в процессе реализации.
- В-третьих, написание игр здорово визуализирует то, что вы описываете кодом, а визуальная информация лучше всего оседает в памяти и упрощает понимание сложных и абстрактных вещей.
В результате мой первый pet-проект реализовался в двух небольших играх и минималистичном приложении для создания заметок с функцией шифрования при помощи классических алгоритмов. Все три приложения доступны для скачивания в Google Play. Вы можете лично протестировать их, пройдя по этой ссылке. Кроме того, на сегодняшний день у меня есть совместный pet-проект с моим коллегой и другом из Skillbox Олегом Садовниковым, посвященный исследованию и визуализации данных API Wikipedia, который мы с переменным успехом развиваем в свободное время.
Сколько их будет, pet-проектов?
Я уверен, что pet-проекты были, есть и будут время от времени возникать в практике практически любого программиста. Почему? Я считаю, что, когда заканчивается эра Hello World программ, начинается эра pet-проектов. Иными словами, когда вы, как начинающий программист, упираетесь в потолок практической ценности от написания простейших программ типа “вывод в консоль звездочками елочек”, “greetings app”, и тому подобных, для дальнейшего роста вам придется переходить к написанию более сложных программ, то есть pet-проектов.
В работе над pet-проектом вы по-прежнему будете писать код, но теперь вам потребуется некая комплексная идея. Еще недавно вы ликовали, запуская MySimpleWhishListApp у себя на localhost, и тут внезапно оказывается, что это только предгорья, а новые вершины лишь слегка видны за скрывающим их туманом технологий, библиотек и инструментов, которые понадобится освоить, чтобы туда добраться.
И так будет происходить еще не раз до тех пор, пока вы не достигните Олимпа всей этой ИТ-тусовки и не станете senior-архитектором в уважаемой корпорации, владельцем собственного стартапа или осядете где-то на подступах, предпочтя расти по горизонтали, а не вертикали.
А времени сколько на это уходит?
Моя личная практика, показывает, что время, уделяемое pet-проекту, не является константой. Я не подчиняю работу над pet-проектом фиксированному графику, а работаю в свое удовольствие и в меру возможностей.
Вы должны понимать, что это именно pet-проект, и изначально в большинстве случаев он представляет ценность исключительно для вас, если только выбранная идея не окажется настолько удачной, что pet-проект перерастет уже в production-grade. На начальных этапах, пока вы полны энтузиазма и еще не столкнулись с первыми сложными проблемами реализации, pet-проекту может уделяться довольно много времени, вплоть до полного рабочего дня.
Еще один важный нюанс — судьба таких проектов. На мой взгляд, предопределить ее нельзя. Внезапно вас может озарить, кажущаяся на первый взгляд совершенно гениальной идея. Вы на голом энтузиазме напишете пару тысяч строк кода, а потом внезапно поймете, что запал прошел и изначальная идея уже не кажется такой гениальной, как раньше. В другой раз вы проведете за развитием очередного pet-проекта пару месяцев, доведете дело до версии 1.0, выполните релиз, но дальше версии 1.0 уже не пойдете, предпочитая переключиться на что-то другое. И конечно, есть все шансы, что вы попадете в яблочко, и ваш pet-проект начнет стремительный взлет к высотам production-grade проектов.
Польза pet-проекта для начинающего программиста
Новичку работа над pet-проектами позволяет перейти от экспериментов с возможностями изучаемого языка к реальными командным проектам, за работу над которыми платят деньги. Для продвинутых программистов работа над pet-проектами — возможность исследовать и пробовать в деле различные технологии, например с помощью pet-проекта подробно изучить процесс создания REST-сервисов. Наконец, pet-проекты можно создавать и ради фана. Например, я иногда люблю воспроизводить в различных вариациях game of life, чтобы в качестве разрядки отвлечься от работы и предотвратить выгорание.
Начинать свой первый pet-проект следует в интересной для себя области. Моим первым языком программирования был VisualBasic, но хоть сколько-нибудь значимые программы я начал писать только после 1.5 лет программирования на Java. В этом языке, на мой взгляд, есть в целом два больших направления: enterprise и мобильная разработка. И поскольку к enterprise-разработке я впервые подошел только спустя еще год, на момент создания первого pet-проекта мой выбор был очевиден. Именно поэтому первый мой проект — небольшая 2D игра для смартфона. C тем же успехом это могло бы быть все, что угодно, например, какие-нибудь Arduino/RaspberryPI проекты в том случае, если бы я увлекался электротехникой. Или, скажем, какая-нибудь новая js-библиотека, если бы моим основным языком был JavaScript, а не Java.
В качестве вывода
Pet-проект — нечто среднее между простейшими программами, на которых вы учитесь работать с выбранным языком, и production-grade проектами, на которых вы зарабатываете деньги. Зачем они нужны? Pet-проекты, в первую очередь, учат разработке. Не простейших программ, а именно проектов, из которых позднее и при благоприятном стечении обстоятельств могут вырасти production-grade проекты.
Pet-проекты — это личный гараж-мастерская, где программист или даже небольшая команда разработчиков, комбинируя различные технологии, идеи и подходы к их реализации, может в итоге получить то, что называется MVP — минимально жизнеспособный продукт. Вместе с тем, pet-проекты позволяют вам не только экспериментировать и весело проводить время. Как было сказано выше, они учат создавать целостные проекты, ориентироваться в огромном мире библиотек, фреймворков и прочих инструментов. Pet-проекты заставляют нас двигаться дальше, осваивать новые технологии, расширять свой инструментарий, работать в команде, выйти за пределы HelloWorld и MyFirstGreetingsApp программ.
todoman
Какой длинный комментарий, полный очевидных вещей и зачем-то оформленный в пост.
Я думал, будут примеры, методики, систематизация, принципы отбора из кучи идей, я не знаю... Хоть какие-то интересные и меткие наблюдения, советы, где можно подсмотреть потребности в небольших, но востребованных программах (ну, там, например, «сходите на сайт Минобразования, посмотрите, что там творится в разделе “Учебные пособия" и сделайте лучше»). Да хоть бы принципы коллективной работы над пет-проектами накидали (где эти коллективы искать?), польза бы тем, кто не умеет взаимодействовать в группе, а только начал в одного свои ”Hello world".
Что-то совсем гуманитарно получилось.
P.S. Какое это отношение имеет к «Карьере в IT"? К «Разработке игр»?