16.09.2019

Как начать создание Open Source проекта в новом году. Участие во всемирно известных проектах. Сторонние проекты, связанные с развлечениями


С помощью open source проектов можно усовершенствовать свои навыки, исправляя чужие ошибки и создавая что-то новое. Можно найти проект, который будет полезен и для собственного бизнеса, например, в медицине или e-commerce. Кроме того, как практикующие программисты, один из лучших способов мотивировать себя на занятия программированием - это работа с open source проектами. Специально для читателей блога Geekbrains мы собрали список таких проектов из разных сфер деятельности:

Пакет программного обеспечения для работы с медицинскими изображениями. 3D Slicer доступен на нескольких платформах, в числе которых Windows, Linux и OS X.

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

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

Платформа для управления контентом, на которой работают миллионы веб-сайтов и приложений.

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

Свободная операционная система типа Unix.

Офисный пакет для совместной разработки с функционалом, как у Microsoft Office или OpenOffice.org.

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

ПО для создания и управления обучающим аудио и видео контентом.

Мультиплатформенная система управления корпоративным контентом написанная на Java. Работает с несколькими базами данных (в том числе MySQL, Oracle, PostgreSQL, SQLLite, и другие), а также поддерживает несколько методов аутентификации.

Софт для создания частных и общественных облаков.

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

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

Проект создан силами Open Source сообщества и предназначен для обеспечения лучших решений для предприятий с помощью бизнес аналитики.
Основные области применения:

  • создание отчетов
  • анализ
  • сбор Данных
  • платформа бизнес-аналитики

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

Модульная open source система управления цифровыми данными.

Бесплатный софт для e-commerce.

Библиотека для быстрого фильтрования и сортировки больших коллекций - до 100000 элементов в браузере.

Языки c open source

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

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

Где найти больше open source проектов?

Один из самых крупных веб-сервисов для совместной разработки IT-проектов. Абсолютно бесплатен для open source проектов. Девиз сервиса “Social coding” можно перевести, как “Кодим вместе”.

Предназначен популяризовать open source проекты. С помощью инструментов, которые там предоставлены, разработчики создали мощное программное обеспечение в более чем 430,000 проектах; на ресурсе более 3,7 млн зарегистрированных пользователей. Популярный каталог объединяет более 41,8 млн клиентов с проектами open source и обслуживает более 4800000 скачиваний в день.

Цель Fossdroid - продвигать open source приложения на Android с помощью проекта F-Droid. Fossdroid берет свои данные из F-Droid и организует приложения в порядке, похожем на Google Play, с возможностью просмотра их по популярности.

Как узнать является ли ПО open source и каковы правила его использования?

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

1 января 2018 в 01:14

Как начать создание Open Source проекта в новом году

  • Ruby ,
  • Программирование

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

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

Определите цели

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

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

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

Планирование

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

Выбор определенного таск менеджера вопрос вкуса. Я использую pivotal tracker, основное преимущество является наличие бесплатной версии для open source проектов, присутствует сортировка задач по типу (feature, bug, chore, release), задачи можно группировать в релизы и определять дедлайн.

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

Оформление

В каждом open source проекте должны присутствовать следующие вещи:
  • README
  • open source license
  • Contributing guidelines
Файл README не только объясняет как использовать ваш проект, но и какая цель вашего проекта, как начать его использовать. Если не знаете как правильно оформить README можете посмотреть другие известные open source проекты или воспользоваться шаблоном .

Лицензия гарантирует, что другие могут использовать, копировать и модифицировать исходный код проекта. Вам необходимо добавлять этот файл в каждый репозиторий с вашим open source проектом. MIT, Apache 2.0 GPLv3 самые популярные лицензии для open source проектов, если не уверены какую выбрать можете воспользоваться удобным сервисом .

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

Мои ошибки

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

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

Практика в open-source проектах поможет при составлении портфолио для трудоустройства. В статье приведены рекомендации по изучению этой тематики.

Прежде чем вы начнете…

3. Мгновенные ответы DuckDuckGo

Если кто не знал, DuckDuckGo – поисковая система, не собирающая информацию о пользователях. Мгновенные ответы - фича, которая позволяет получать ответы без необходимости открывать сайт. Сотни людей успели принять участие в разработке этой фичи, много идей для разработки лежит на этой странице . Также DuckDuckGo предоставляет хорошую документацию и рекомендует новым пользователям создавать шпаргалки для сервиса. Чтобы посмотреть, как выглядят такие шпаргалки, достаточно вбить в поисковик фразу «wordpress cheat sheet» . Если у вас возникли трудности, есть канал в Slack и вики-страница в Github-репозитории .

4.

5. Проекты Mozilla

Вне сомнений, Mozilla – одна из лидирующих организаций по количеству open-source проектов. Делать свой вклад в развитие проектов Mozilla может показаться не очень простым на первый взгляд, поскольку сложно найти задачи, помеченные как «для новичков», из-за того, что в целом задач много. К счастью, был создан отдельный сайт , где можно фильтровать задачи в зависимости от своих интересов. Новичку стоит обратить внимание на фильтр simple bugs внизу в секции фильтров!

6. Pinax

Pinax – это открытая опенсорсная платформа, сделанная с использованием веб-фреймворка Django. Это экосистема для повторно используемых приложений на Django, тем, шаблонов для нового проекта. В их репозитории на Github в разделе Issues есть задачи для новичков, помеченные first-timers-only . Они аккуратно задокументированы, таким образом, чтобы вы знали, что вам следует делать.

Я хочу еще проектов, что делать?

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

На недавно прошедшей конференции Application Developer Days 2012 мне довелось прочитать коротенький доклад о том, как создаются Open Source проекты на примере OpenVZ Web Panel. К сожалению, у меня было 10 минут, вместо положенных 30-40 и в результате 80% подготовленного материала оказалось “за бортом”. Организаторы, почему-то в последний момент передумали и убрали даже 5-минутную секцию с вопросами, так что остался без фидбэка. Но не буду сильно наезжать на организаторов - они старались как могли и конференция явно удалась, за что им огромное спасибо. Также очень порадовало и качество большинства докладов.


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

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

Текста довольно много. Для особо нетерпеливых - можно просто полистать слайды.

Немного о подопытном кролике проекте

OpenVZ Web Panel - это довольно популярная бесплатная веб-панель управления виртуальными серверами на технологии OpenVZ. В подтверждение этого можно сказать, что версия 2.0 была установлена на более чем 17 000 серверов. Для серверного продукта вполне солидная цифра.

Что представляет собой OpenVZ? Это одна из технологий контейнерной виртуализации серверов. Кому-то нравится и подходит для решения задач, кому-то не очень, но сейчас не об этом. OpenVZ по сути является плацдармом для коммерческого продукта Parallels Virtuozzo Containers. Изначально для OpenVZ не было хорошей бесплатной веб-панели управления. Сам я активно пользуюсь OpenVZ. Существовавшие бесплатные панели меня не устраивали по тем или иным причинам. В результате родился проект OpenVZ Web Panel.

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

Идея вашего проекта

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

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

Мотиваторы-демотиваторы

Любой создаваемый вами проект должен иметь какую-то внятную мотивацию. Проекты из разряда “это прикольная штука и такой проект повысит мою карму” на практике очень быстро угасают. Примеры более весомой мотивации: вы собираетесь сами использовать свой проект или у вас есть конкретный заказчик. В случае OpenVZ Web Panel работал первый вариант, то есть необходимо было удовлетворить собственные нужды. Без сильной мотивации довести проект даже до первого релиза будет очень сложно.

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

Эффективная разработка

Старайтесь оставаться сфокусированным на нескольких самых важных для вашего проекта вещах. Сообщество будет толкать вас в сторону самых разнообразных изменений, уводить от основного курса. Например, для OpenVZ Web Panel если бы я соглашался и реализовывал все запросы пользователей, то давно бы уже делал очередной Webmin, а не систему управления контейнерами.

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

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

Довольно трудным вопросом в плане эффективности является вопрос автоматизации процессов. С одной стороны вы же программист и предпочитаете действовать по принципу “за час написать и за 5 минут долететь”. Это принцип работает очень часто в ущерб вашему времени. Автоматизировать надо только то, что действительно повторяется из раза в раз.

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

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

В рамках работы над OpenVZ Web Panel ко мне не раз обращались с просьбой собрать продукт в виде пакета под «любимую ОС». Причем под любимой ОС порой фигурировал и ArchLinux и Gentoo. Я ничего не имею против этих дистрибутивов, но сообщество их пользователей настолько мало по сравнению с тем же CentOS или Debian, что я потрачу кучу времени на очень сомнительную в плане пользы задачу. У панели есть замечательный Shell-инсталлятор. Я знаю, что он менее предпочтителен по сравнению с пакетами. Однако я также очень хорошо знаю, что поддержка пакетов на должном уровне для, скажем, пяти дистрибутивов Linux - это очень затратная задача в плане времени. Пока Shell-инсталлятор экономит мне уйму времени на разработку. Самое забавное, что если любителя Debian (который уже пятый по счету обещает прислать пакет, но ни один так нормальный пакет и не прислал), я еще попрошу попробовать собрать пакет под CentOS, то… ну вы меня поняли.

Качество продукта

Довольно часто пользователи Open Source продуктов недовольны их качеством. Если вы хотите сломать этот стереотип, не забываете о качестве продукта.

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

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

А вот скриншот WordPress. Можно любить или не любить этот продукт, но признать то, что люди явно работают над качеством продукта - стоит.

Нередко в Open Source проектах можно увидеть графический интерфейс, где в изобилии хаотично разбросаны элементы управления, а логика работы понятна только автору. Не забывайте о пользователях, пробуйте проводить ревью того, что вы делаете представляя себя в роли типичного пользователя. Если что-то работает не очевидным образом, будьте уверены - большая часть пользователей обязательно запутается и совершит ошибку. Характерный признак такой проблемы - в issue tracker’е уже 20-ый тикет на одну и ту же тему - где находится элемент управления. В этой ситуации люди часто ограничиваются просто добавлением информации в FAQ или Knowledge Base. На самом деле FAQ и Knowledge Base надо регулярно просматривать на предмет решения проблем в продукте и уменьшения списка часто задаваемых вопросов.

Не нужно забывать и о таком моменте, что качество кода на самом деле ваших пользователей интересует в последнюю очередь. А вот удобство использования, отсутствие как run-time так и логических ошибок очень сильно влияет на впечатление о продукте. Зачастую авторы стремятся к гармонии в плане кода и забывают об удобстве продукта. Понятно, что качество кода коррелирует с качеством продукта, но акцент желательно все-таки делать именно на втором моменте. В конце концов, многие успешные Open Source проекты имеют довольно унылый по качеству код. Хороший повод призадуматься (но не подумайте, что я агитирую вас писать говнокод).

Технологии

Open Source проекты предоставляют отличную возможность для обкатки новых технологий и проведения экспериментов. Обязательно пользуйтесь этим моментом. В корпоративных приложениях можно годами ждать перехода на использование какой-то модной и крайне удобной технологии. Здесь же вы сами себе CEO и CTO и все технические, архитектурные и стратегические решения можете принимать единолично.

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

В Open Source разработке вы менее ограничены в применении сторонних библиотек и фреймворков. Например, в OpenVZ Web Panel для UI используется известная библиотека ExtJS. Если вы захотите использовать эти библиотеку в своем коммерческом продукте, то нужно будет раскошелиться на весьма недешевую лицензию. С другой стороны работая с библиотекой ExtJS в рамках Open Source проекта вы можете получить ценный опыт ее практического использования и далее этот опыт применить в коммерческом проекте.

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

Инструменты

Существует довольно много удобных инструментов, помогающих в разработке Open Source проекта. Многие из них вы знаете и, наверняка, пользовались. Однако по настоящему их начинаешь ценить, когда работаешь над коммерческим проектом, где по тем или иным причинам эти инструменты не доступны. Вспоминаешь корпоративный Exchange и SharePoint и начинаешь грустить по Gmail и MediaWiki.

Не стоит также забывать о том, что ряд компаний стимулируют разработку Open Source проектов, раздавая таким проектам бесплатные лицензии на собственные коммерческие проекты. Например Atlassian может дать вам бесплатную лицензию на Jira или Confluence. Для разработки OpenVZ Web Panel некоторое время я использовал IDE RubyMine, бесплатную лицензию на который любезно предоставляли товарищи из JetBrains (пользуясь случаем передаю им привет и требую продления лицензии:)). В рамках интеграции с биллингом WHMCS, также понадобилась лицензия на продукт. Официально они не предоставляют бесплатных лицензий, но интерес был взаимный, поэтому лицензия была оперативно предоставлена. Поэтому, если вас интересует какой-то коммерческий продукт, который бы помогал в разработке проекта, обращайтесь к производителям этого продукта. Скорее всего вы сможете получить бесплатную лицензию, внятно объяснив зачем вам нужен именно их продукт.

Сообщество

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

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

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

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

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

Деньги?!

Я уже говорил о том, что если собрались заработать на проекте, то скорее всего этот проект не стоит начинать как Open Source. Отказаться от такой схемы в будущем будет очень сложно. С другой стороны как-то мотивировать разработку в финансовом плане все равно нужно. Даже на элементарную поддержку проекта вы можете нести расходы, например на хостинг, железо и прочее.

Ряд моих знакомых, почему-то продолжают свято верить, в что подобные проекты вполне могут жить на пожертвования. Не могут. На вскидку сейчас не могу вспомнить ни одного проекта, где видел более-менее внятную собранную сумму рядом с кнопкой Donate (тут важно не путать спонсорство и пожертвования). Если вы не создатель Википедии и на сайте проекта не висит личной фотографии с грусными глазами, то пожертвований вам едва ли хватит даже на хостинг сайта проекта. Не буду говорить о собственном проекте, т.к. для него статистика не публична. Но недавно заглядывал на сайт проекта Gitlab. Довольно интересное начинание, много заинтересованных. Внизу «градусник» с прогресом сбора суммы в 1000 долларов. Заглядывал туда 3 недели назад и сегодня. Собранная сумма изменилась меньше чем на 150 долларов. Причем это даже очень неплохо по сравнению со другими.

Более реальные способы заработка - это продажа альтернативных лицензии (подходит для встраиваемых в другие системы продуктов) и коммерческая поддержка (подходит для сложных в освоении продуктов). Для меня же лично, наиболее симпатичным выглядит вариант наличия спонсора-клиента или спонсоров, заинтересованного в развитии вашего проекта.

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

Выводы, куда ж без них

Старайтесь, чтобы в проект был в первую очередь интересен вам самим и решал какую-то вашу проблему. Большинство успешных Open Source проектов, которые приходят сейчас в голову, шли именно по такому пути. Это и Rails и Nginx и многие другие.

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

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

И последнее, создавайте законченный продукт, которым можно будет гордиться. Не останавливайтесь на «супер технологичной», но альфа-версии. Самое трудное и в коммерческой и в Open Source разработке - это довести продукт до релиза. Потом сможете ездить по конференциям и рассказывать всем о вашем успешном начинании (как, например, это делает автор Sphinx’а:)).

P.S. Все вышенаписанное - исключительно личное мнение. Я, как и многие другие, склонен ошибаться, учиться на своих ошибках и делать многие вещи неправильно, но при этом пытаться учить других:)

Тэш Постоловски «40 Side Project Ideas for Software Engineers».

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

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

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

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

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

Сторонние проекты, связанные с информатикой

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

  1. FTP клиент (предлагаемая реализация: web, CLI или десктопное приложение). Постройте простой FTP-клиент. В качестве дополнительной задачи сделайте поддержку безопасной передачи файлов (secure file transfer).
  2. HTTP-сервер (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Для глубокого понимания HTTP постройте HTTP-сервер. Есть много доступных руководств , которые могут помочь вам в этом процессе.
  3. Постройте простую операционную систему (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Это технически сложный проект, который поможет углубить ваше понимание работы компьютера и операционных систем. Возможно, вы захотите начать с бесплатной книги с интересным названием: «Operating Systems: From 0 to 1 ».
  4. Постройте веб-скрапер (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Создайте инструмент, принимающий URL в качестве input и возвращающий контент в виде HTML или XML.
  5. Bandwidth monitor (предлагаемая реализация: инструмент обновления CLI в реальном времени). Создайте инструмент для отслеживания количества скачиваемых и загружаемых в интернет данных. Пускай ежемесячно присылает вам отчет на email. Для дополнительной нагрузки – прогноз пикового времени использования.
  6. Осуществление шифрования (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать). Создайте инструмент, принимающий текстовую строку в качестве input и зашифровывающий ее, например, с помощью шифра Цезаря .
  7. Создайте downtime-сигнализатор (предлагаемая реализация: приложение, подключенное к Twilio API для отправки текстовых сообщений). Создайте приложение, принимающее URL как input и отсылающее вам текстовое сообщение, когда запрос к URL возвращает другой код ответа, чем 200 (OK).

Сторонние проекты, связанные с личными финансами

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

  1. Калькулятор прибыли и трекер (предлагаемая реализация: CLI, веб или мобильное приложение). Создайте калькулятор, который сможете использовать для отслеживания ежемесячного роста и снижения своих доходов. Вы можете руководствоваться чем-то вроде net worth worksheet от Чральза Шваба. Возможное расширение: пусть он отсылает вам отчет за предыдущие 12 месяцев 01 января каждого года.
  2. П рогноз налогов (предлагаемая реализация: веб-приложение). Это будет особенно полезно, если вы занимаетесь программной инженерией на фрилансе. Создайте инструмент, принимающий в качестве входных данных ваши заработки и выдающий ожидаемую сумму налогов, которую нужно будет уплатить в конце финансового года. Сделайте его достаточно умным, чтобы он мог учитывать периоды большего или меньшего спроса на ваши услуги.
  3. Поиск сделок (предлагаемая реализация: веб-приложение с мобильными уведомлениями). Создайте простое веб-приложение, уведомляющее, когда желанный для вас товар будет выставлен на продажу по хорошей цене. Вы можете использовать веб-скрапер для извлечения страницы продукта и уведомления вас об изменении цены.
  4. Отслеживание расходов (предлагаемая реализация: веб- или мобильное приложение). Создайте простой интерфейс, который вы сможете использовать для добавления и разбивки своих расходов по категориям. Генерируйте ежемесячный отчет, основанный на входящих данных, и напишите пользовательские уведомления вроде «тратишь слишком много на кофе… как всегда».
  5. Калькулятор финансовой независимости (предлагаемая реализация: веб-приложение). По существу, финансовая независимость это как можно большее сохранение и вкладывание доходов (инвестиции), что позволяет не нуждаться в работе для получения денег. Хотя многие финансово независимые люди продолжают работать, они могут позволить себе работать над тем, чем им нравится заниматься, а не тем, за что больше платят. Постройте инструмент для подсчета того, насколько вы далеки от финансовой независимости, основанного на ваших текущих сбережениях, инвестициях, доходах, пенсионных счетах и расходах. Примеры: FIREcalc , cFIREsim .
  6. «Разбиватель» счетов (предлагаемая реализация: мобильное приложение). Постройте простой инструмент, который поможет вам и вашим друзьям делить счет, когда вы вместе обедаете.

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

  1. Генератор случайных имен (предлагаемая реализация: CLI, веб- или мобильное приложение). Постройте генератор случайных имен (пример), создающий уникальные названия на лету, основываясь на алгоритме. Используйте приемы машинного обучения чтобы помочь натренировать программу с примерным набором данных из имен, похожих на те, что вы хотите генерировать. Или создайте собственные лексические правила генерации имен. Например, алгоритм генерации имен, вдохновением для которого послужил «Рассказ служанки », может иметь условие, что имена Служанок должны начинаться с «Оф», а оканчиваться на случайное мужское имя, например, Офпитер.
  2. И гра «Жизнь» (Conway’s Game of Life) (предлагаемая реализация: любая платформа, способная на графический рендеринг в реальном времени). Игра «Жизнь» симулирует жизнь простых клеток, которые подчиняются алгоритмическим законам. Это видео поясняет, как работает игра, и включает пример возможного результата:
  3. Процедурно генерируемый создатель карт (предлагаемая реализация: приложение на основе браузера). Создайте браузерное приложение, позволяющее процедурную генерацию карты местности на основе случайного начального числа. Карта может быть такой простой или сложной, как вы хотите. Этот проект – хорошая возможность изучить процедурную генерацию .
  4. Генератор персонажей (предлагаемая реализация: браузерное, мобильное приложение, CLI). Создайте инструмент, позволяющий случайно генерировать подходящие персонажи для вашей любимой ролевой игры, как настольной (вроде Pathfinder), так и видео-игры (вроде «Divinity: Original Sin»).
  5. Interactive fiction (предлагаемая реализация: CLI). Интересный способ войти в разработку игр без необходимости волноваться о графических ресурсах. Interactive fiction создает мир для игрока с помощью текстовых описаний. Dreamhold – хороший пример Interactive fiction с полезной командой «help».

Сторонние проекты, связанные с искусственным интеллектом

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

  1. Идеальный движок для игры в крестики-нолики (предлагаемая реализация: программа CLI). В качестве прекрасного первого ИИ-проекта попробуйте написать движок, который нельзя победить в игре в крестики-нолики. Вы можете достичь такого результата, реализовав эту стратегию , которая делает ничью худшим исходом игры.
  2. Шахматный движок (предлагаемая реализация: ). Попробуйте написать движок, способный играть в шахматы с человеком, используя GUI, совместимый с Universal Chess Interface , например, Xboard. В качестве примера посмотрите Stockfish . Чтобы упростить задачу вы можете сфокусироваться на поведении только какой-то части, например, коней.
  3. Чат-бот (предлагаемая реализация: веб-приложение). Часть лучших умов человечества сейчас заняты реалистично отвечающими чат-ботами. Это ужасно сложная задача, но если сузить рамки для вашего чат-бота, у вас будет сторонний проект на вечера и выходные. Создайте чат-бот, выдающий реалистично звучащие ответы по теме, которой вы увлекаетесь: ваша любимая музыкальная группа, видеоигра, спортивная команда, ТВ-шоу. Используйте уже существующую библиотеку, такую как ChatterBot .
  4. Определитель спама (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Постройте инструмент для определения, является ли письмо спамом, основываясь только на содержимом. Вы можете воспользоваться этим публичным набором данных из исследования Enron для тестирования вашего определителя спама.

Сторонние проекты, связанные с развлечениями

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

  1. Поиск времени показа фильмов (предлагаемая реализация: веб- или мобильное приложение с смс-уведомлениями или отправкой е-мэйлов). Постройте программу, которая будет уведомлять вас с помощью смс или email о времени показа потенциально интересных для вас фильмов в вашем любимом кинотеатре. Представление об «интересном фильме» может быть получено с помощью машинного обучения (если вы смотрите достаточно фильмов для получения хороших тренировочных данных) или написанного вручную алгоритма. Например, для построения программы, которая будет уведомлять вас о фильмах в жанре научной фантастики с рейтингом IMDB 7.0 и выше, или фильмах с Эми Адамс, фильмах со средним рейтингом 8.0 или выше, можно использовать Open Movie Database API вместе с HTML-парсером вроде BeautifulSoup .
  2. Б локировщик спойлеров (предлагаемая реализация: расширение браузера). В современном мире спойлеры ваших любимых фильмов, особенно таких популярных, как «Игра престолов», могут настигнуть вас повсюду (в социальных сетях/интернете/бачках с питьевой водой). Создайте расширение браузера, удаляющее все упоминания о вашем любимом шоу с загружаемых страниц или заменяющее их картинками с котятами.

З абавные сторонние проекты

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

  1. Pixel art генератор (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Постройте инструмент, принимающий изображение в качестве входящих данных и преобразует его в pixel art на выходе. Если хотите улучшить свои навыки, касающиеся фронтенда, генерируйте конечный pixel art используя CSS.
  2. Инструмент, предлагающий музыку (предлагаемая реализация: постройте враппер для Spotify API). Создайте инструмент, отслеживающий музыку, которую вы слушаете, и генерирующий плейлист сходного качества, но из песен, которые вы прежде не слышали. Spotify API предоставляет все инструменты, необходимые для извлечения данных о прослушанных композициях и для создания плейлиста, а движок рекомендаций – за вами!
  3. Регистратор температуры (предлагаемая реализация: Raspberry Pi, датчик температуры, веб-приложение). Подключите ваш Raspberry Pi к датчику температуры и отсылайте температурные данные из вашего дома на веб-приложение, которое сохранит их в базе данных или обновит CSV-файл. Для получения бонусных очков сделайте еженедельный отчет по температуре, присылаемый вам на email. Другие проекты Raspberry Pi: домашняя автоматизация , домашняя безопасность .
  4. Приложение для «микрообучения» (предлагаемая реализация: мобильное или веб-приложение). Постройте приложение, высылающее вам ежедневно одну страницу по теме, которую вы хотите изучить. Это может быть случайная страница из Википедии, из документации по React, о букве кандзи или страница из CIA World Factbook .
  5. Slack-бот (предлагаемая реализация: Slack API). Если вы или ваша команда используете популярное чат-приложение Slack, постройте бот, облегчающий какие-то аспекты вашей жизни. Идеи: бот заказа кофе, бот, ежедневно докладывающий о числе коммитов, сделанных в репозиториях вашей команды, или напоминалка по какой-то теме.
  6. Обои рабочего стола (предлагаемая реализация: Unsplash API , язык сценариев для вашей ОС). Постройте приложение, которое будет ежедневно обновлять обои вашего рабстола.

З адачи на написание кода

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

  1. Advent of Code (предлагаемая реализация: любой язык программирования, над которым вы хотите поработать ). Задания в Advent of Code появляются ежегодно в преддверии Рождества. Они включают множество занимательных задач, которые могут помочь вам подтянуть язык программирования, который вы изучаете или с которым хотите поработать. Задачи за 2015, 2016 и 2017 год все еще доступны.
  2. Kaggle’s Titanic Challenge (предлагаемая реализация: Python или R). Kaggle предлагает захватывающее задание, знакомящее вас с основами машинного обучения с помощью Python или R: использовать настоящий набор данных о регистрации пассажиров «Титаника» для предположений, кто из пассажиров скорее всего пережил катастрофу.
  3. Project Euler (предлагаемая реализация: любой язык программирования, в котором вы хотите попрактиковаться ). Задания в Project Euler посвящены изучению союза математики и программирования. Используйте инструменты программирования для решения разнообразных математических задач.

Сторонние проекты, связанные с обыденностью

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

  1. Выбор обеда (предлагаемая реализация: CLI, мобильное или веб-приложение). Если вы работающий программный инженер, вы, должно быть, сталкивались с самым сложным вопросом в разработке программ… «куда пойти поесть?». Ваш инструмент для выбора обеда призван дать ответ на этот вопрос. Он может быть супер-простым и делать случайный выбор из известного вам списка опций или более сложным – извлекать данные из Google Reviews и учитывать расположение, цены и тип кухни.
  2. Планировщи к свиданий (предлагаемая реализация: мобильное приложение). Самое сложное в том, что касается свиданий и длительных отношений, это решение, куда пойти на свидание. Постройте инструмент, просматривающий обзоры ресторанов, календари событий и собирающий другие данные для выдвижения идей.
  3. Инструмент для упрощения вашей электронной переписки (предлагаемая реализация: скрипты, подключенные к почтовому серверу). Если мы с вами похожи, вы еженедельно получаете слишком много писем и они накапливаются в вашем почтовом ящике. Вместо того чтобы отписываться от них от всех в припадке гнева, постройте инструмент, который будет компилировать их в одно письмо и отправлять вам его раз в неделю.
  4. Напоминалка «Возьми зонтик» (предлагаемая реализация: мобильное приложение). Постройте простое мобильное приложение, которое по утрам будет присылать вам на телефон уведомление о том, что нужно взять с собой на работу зонтик (например, если в вашей местности ожидается дождь).
  5. Отслеживатель коллекций (предлагаемая реализация: мобильное или веб-приложение). Постройте инструмент для отслеживания чего-то, что вы собираете. Вы можете следить за ценой предмета, годом изготовления, состоянием, местоположением.

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

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

  1. Создайте и автоматически обновляйте набор данных (предлагаемая реализация: веб-скраппер на входе и CSV на выходе). Постройте инструмент, автоматически создающий и обновляющий набор данных, касающихся чего-то, что вас интересует. Рекомендуемые наборы данных: статистика по вашей любимой спортивной команде, полеты в направлении, куда и вам бы хотелось отправиться, метеорологические данные региона, где вы живете. Самое главное, что этот набор данных должен нуждаться в регулярном обновлении по мере генерации новых данных, и это должно осуществляться автоматически. Например, когда результаты вашей спортивной команды публикуются на сайте, данные должны автоматически скрапиться и добавляться к вашему набору данных.
  2. Вступите в соревнование по науке о данных (предлагаемая реализация: R или Python). На Kaggle есть много соревнований по науке о данных, оперирующих наборами данных из реального мира и имеющих огромные денежные призы. Перед вами будут стоять реальные проблемы вроде того, как определить отравляющие онлайн-комментарии, предсказать посетителей в ресторане или распознавать объекты из космоса.

Поделитесь своим сторонним проектом

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