В статье анализируется один из распространенных способов создания программного обеспечения (software) – закрытый способ (proprietary), также сделана попытка описания открытого способа программирования как возможности создания компьютерных программ высокого качества и конкурентоспособных на внутреннем рынке.
Традиционно наши программисты создают программы для нужд отдельных клиентов. Предположим, что некий программист создал информационную систему (information system) или же базу данных (database) для компании «Рыба». Он потратил на эту работу много энергии и времени. По этой причине исходный текст программы (source code), который является его продуктом, им скрывается (во многих случаях). Для оправдания этого действия программист приводит следующие доводы:
- при возникновении необходимости изменения программы обратятся именно к этому программисту;
- если программа прославится и появятся другие желающие её использовать (возможно с некоторыми изменениями), то они обратятся именно к этому программисту.
Нельзя назвать такое поведение ошибочным. Создание программы есть вид творчества. Программа есть продукт интеллектуального труда программиста, его собственность. Не будет преувеличением, если сказать, что она является даже частью самого программиста, так как программист потратил часть своей жизни на её создание. Признано, что программист имеет полное право над решением судьбы своей программы.
Проследим за возможной судьбой программы.
Если программа хорошо создана, то есть имеет красивый и удобный интерфейс, функции и расчеты выполняет правильно, имеет хорошую скорость, надежна, то ею будут пользоваться; но только в компании «Рыба». После некоторого времени может возникнуть необходимость в её модификации: для её адаптации к новым условиям, исправления обнаруженных ошибок, добавления новых возможностей. Как и хотел программист, компания «Рыба» пригласит именно его для изменения программы.
Каждый программист знает, что если не работал с кодом программы долгое время, то код забывается. И для того, чтобы его заново вспомнить (назначение переменных, функций, связей, использованных алгоритмов) уйдет много времени. Программист, чтобы вспомнить уже некогда выполненную работу, заново тратит время и энергию. Или же могут произойти более серьезные ситуации:
а) программист прославился, у него много коммерческих заказов. Он не имеет либо желания, либо времени заниматься этой программой;
б) программист не может справиться с новыми изменениями. Например, у него не хватает знаний или навыков;
в) программист более не программирует, все исходные коды удалены.
В любой из этих ситуаций а)-в) компания «Рыба» вынуждена находить другого программиста (обычно не столь известного, как и прежний программист), который будет тратить время и энергию сначала на освоение возможностей существующей программы, а потом на создание необходимой программы, с нуля!
С другой стороны, если подобная программа нужна компании «Небо», по причине неизвестности программиста, или же дороговизны его услуг, или же отсутствия у него времени, компания «Небо» нанимает другого программиста. В итоге, другой программист на решение давно решенной задачи снова тратит время и энергию.
Если же судьба программы изначально неудачна, то ею не будут пользоваться ни в компании «Рыба», ни в другом месте. Конечно, для программиста это может стать уроком и в других заказах он воспользуется приобретенным опытом. Но так как исходный код программы скрыт, другие программисты не знают о его результатах.
Недоступность кода программы другим программистам, лишает программиста двух условий развития: критики кода программы и конкуренции в использовании этого кода. Так как программист не намерен делать исходный код доступным для других, то другие программисты не могут ему помочь в нахождении и исправлении недостатков программы. Конкуренция в способах применения кода невозможна без доступности этого кода.
Начало конца программы и надежд и идей, с нею связанных, такова:
- программа не распространяется, потому что имеет дефекты;
- дефекты не исправляются, потому что код недоступен.
Возможно, программа принесла программисту большую прибыль, что вызывает сомнения, учитывая местный уровень цен и то, что программа создана на одного конкретного клиента. Но для сообщества программистов деятельность такого программиста бесполезна, потому что исходный код его программы, красивые приемы, которые он, возможно, использовал или даже изобрел в отдельных частях программы, недоступны другим.
Какая наша программа известна своей 6-й или 7-й версией? Кто знаменитый таджикский программист? Факт того, что на внутреннем рынке программного обеспечения программы местного производства практически отсутствуют, имеющиеся имеют небольшое количество пользователей, доказывает, что описанные выше абстрактные ситуации являются основными и правящими. То есть мы – программисты тратим много энергии и времени на повторное изобретение колеса, и никто не дошел до изобретения реактивного двигателя; если же дошел, то другим от этого никакой пользы.
Если мы – сегодняшние программисты не изменим своё сообщество, то завтрашние программисты – наши дети, наши внуки будут заниматься решением задач, которые решены нами. Конечно, решение классических задач для освоения профессии полезны, но речь не идет о методике преподавания. Состояние профессионального программирования, программирования для практики у нас плачевно.
Open Source Software как философия и технология создания компьютерных программ имеет место в мировой практике и дала хорошие результаты. Распространение и принятие Open Source как технологии создания программ станет инструментом создания высокой культуры программирования, воспитания сообщества высокопрофессиональных программистов. Появление на рынке высококачественного отечественного программного обеспечения и решение местных задач, связанных с современными технологиями, усилиями собственных специалистов – будут реальными результатами данного шага.
Основная идея Открытого Кода (Open Source) совершенно проста: когда программист может прочесть (видеть) исходный код программы, изменять его, распространять, то эта программа развивается. Исходный код (Source Code) это совокупность написанных команд или инструкций, которые определяют программу в её первоначальном виде. Когда код полностью доступен программистам, они могут его читать, изменять, копировать и таким образом совершенствовать исходную программу и приспосабливать её к новым условиям. Таким способом программа может развиваться с большой скоростью. Вдобавок к этому, доступность новоизобретенной программы другим программистам по всему миру, вынуждает программиста создавать хорошие программы, что также будет способствовать развитию конкуренции на отечественном рынке.
Одной из важнейших преимуществ Open Source является то, что она дает возможность программистам учиться. Так как программирование своего рода искусство, ознакомление с различными методами творчества в этой сфере и анализ программ других послужит развитию навыков и знаний программиста. Существуют много открытых программ, которые намного лучше закрытых аналогов, коды которых доступным лишь нескольким, а остальные должны использовать массу непонятных битов в слепую. Например, Mozilla FireFox и Thunderbird, Apache web-server, Joomla (Web Content Management System).
Open Source с конца 80-х годов XX века для технической культуры, сотворившей Интернет и World Wide Web, служит как движущаяся и развивающая сила. Open Source отрицает всякие ограничения прав людей в использовании и применении открытых программ со стороны человека или групп людей.
Статья написана в марте 2006 года.