Статьи

Разработка программного обеспечения? Мы делаем это неправильно.

«Вы тратите огромную сумму денег на написание кода, который уже существует»

Джоэл Спольски, Fogcreek, StackOverflow

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

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

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

Как бы нам ни хотелось думать, наша отрасль еще не зрелая.

Разработка на заказ должна быть последним средством

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

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

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

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

Будущее отрасли — компонентное развитие

Введите открытый исходный код

Открытый исходный код — одно из величайших нововведений, которые наша индустрия испытала за то короткое время, что была вокруг. Открытый исходный код предлагает стандартные решения с исходным кодом для решения многих распространенных проблем и произвел революцию в отрасли благодаря таким продуктам, как Linux, MySQL, Apache и другим.

Бесплатные библиотеки с открытым исходным кодом и платформы существуют практически для всех основных языков программирования и платформ. Количество доступного кода огромно и приносит пользу программному обеспечению на многих уровнях: помимо значительного сокращения времени, необходимого для создания многих продуктов, разработчики в основном делятся своим опытом и знаниями благодаря доступности своего кода. Стать программистом сегодня стало намного проще из-за открытого исходного кода.

Все еще огромный разрыв между открытым исходным кодом и коммерческим программным обеспечением

Итак, почему не все общие потребности удовлетворяются доступным решением с открытым исходным кодом?

Для этого есть несколько причин:

  • Большинство проектов с открытым исходным кодом создаются на основе свободного времени и доброй воли разработчиков — разработчиков, у которых есть дневная работа или внештатный работник, чтобы зарабатывать на жизнь. Если они не получают значительную поддержку, они остаются побочными проектами, от которых часто отказываются постепенно, пока их не поддерживают на практике. Только 7% проектов с открытым исходным кодом активно поддерживаются .
  • Любой может опубликовать проект с открытым исходным кодом — нет гарантии качества или гарантии того, что он будет соответствовать определенным стандартам. Многие любители-разработчики начинают с публикации проектов с открытым исходным кодом, прежде чем они смогут разработать решение, которое может стать отраслевым стандартом.
  • Обнаружение является проблемой — из-за длинного хвоста заброшенных проектов и различного качества, если проект не является видимым и хорошо известным, многие разработчики предпочтут разработать решение самостоятельно.
  • Несмотря на широкое распространение, открытый исходный код все еще покрывает относительно небольшую долю общих потребностей в разработке программного обеспечения. Потребностей гораздо больше, чем решений, поэтому разработка на заказ зачастую является единственным вариантом.

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

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

Развитая модель — Коммерческий с открытым исходным кодом

Так, где мы видим индустрию, чтобы прорваться и стать более стандартизированной и оптимизированной? Ответ, на мой взгляд, дают такие продукты, как MySQL, RedHat и Magento, которые используют бизнес-модель, которую мы любим называть коммерческим открытым исходным кодом .

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

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

  • Проекты с открытым исходным кодом будут гораздо активнее поддерживаться. Если вы можете поддержать себя, поддерживая свои собственные личные проекты вместо того, чтобы выполнять работу по контракту с клиентом или работать наемным работником в компании, я думаю, это не сложно.
  • Гораздо больше кода будет выпущено на рынок. Это очень важный момент — на мой взгляд, количество доступных, готовых к использованию решений вырастет в 10 раз. Таким образом, хотя отдельные решения будут стоить дороже, общее снижение затрат на программные проекты — по сравнению к стоимости, которая будет потрачена на разработку этих решений на заказ — будет огромной.
  • Когда вы превращаете поддержку open source в бизнес, ожидания также возрастают. Я ожидаю повышения общего качества, а также услуг по курированию, которые помогут определить, какие проекты имеют качественную кодовую базу в качестве справочной информации для разработчиков.

Происходит эволюция, нравится вам это или нет

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

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

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

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

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

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

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