Введение в технологию программирования
1. Немного терминологии
1.1. Программирование
На протяжении всего времени обучения на факультете мы изучаем программирование. Программирование (Computer science) - молодая, активно развивающаяся область.
Долгое время человечество волнует вопрос о том, к какому роду деятельности относится программирование. В 60-х - 70-х годах XX века данный вопрос активно обсуждался на научных конференциях. Существовало 2 популярных точки зрения: "программирование это искусство" и "программирование это наука". К единому мнению придти так и не удалось. В настоящий момент мы можем добавить к этим популярным трактовкам еще одну: "программирование это бизнес". Чтобы понять, что программирование это бизнес, достаточно посмотреть, какими числами выражаются доходы современных IT-компаний. Так, например, по данным http://www.microsoft.com доход корпорации Microsoft за 2005 финансовый год составил 39,70 млрд. $. Впечатлены? Вам нравится этот бизнес? Тогда приступим к изучению курса.
1.2. IT-проекты
Будем понимать под IT-проектами проекты в области информационных технологий. Будем далее рассматривать лишь те IT-проекты, целью которых является разработка программного обеспечения.
Зададимся следующими вопросами:
- Что такое программное обеспечение (ПО)?
- Чем ПО отличается от обычной программы?
- Вчера мы с другом написали "Калькулятор". Определенно, это программа. Является ли она ПО?
1.3. Программы и программное обеспечение (программные продукты)
Программное обеспечение (Software) - набор компьютерных программ, процедур и связанной с ними документации и данных (ISO/IEC 12207).
Таким образом, программное обеспечение - это не просто программа. Это еще и документация и руководство пользователя.
Вместо словосочетания "программное обеспечение" часто используют другое - "программный продукт". Будем далее считать, что это одно и то же. Одно из главных свойств программного продукта - продаваемость. Продаваемость - залог успеха бизнеса по разработке программного обеспечения. Если вы собираетесь что-то разработать, это должно быть востребовано на рынке. В противном случае вы потратите деньги на разработку (зарплата сотрудников, накладные расходы, налоги, аренда помещения...) и ничего не получите взамен. Вы можете написать замечательную программу. Реализовать там новый быстрый алгоритм. Она может великолепно работать, но если она никому не нужна, то вы (как компания) на пути банкротству. Допустим, в таких программах, как ваша, действительно есть потребность. Допустим, вы год упорно работали, и вот, казалось бы, настал ваш звездный час: все готово, все модули написаны, отлажены, собраны вместе и, как вам кажется, работают. Один "маленький" момент портит всю картину - если у вас нет хорошего (!) руководства пользователя (инструкции), желательно, в русскоязычном и англоязычном вариантах, то вашу программу никто не купит, особенно за границей. Если у вас все есть, но нет специалистов по рекламе, то про вашу программу никто не узнает. Если ...
Подытожим: программный продукт - это программа со всей сопутствующей документацией, программа, которую можно продать, либо извлечь из нею финансовую выгоду другим образом.
Вернитесь мысленно к пункту 1.2 и еще раз попробуйте ответить на поставленные вопросы. Получилось? Тогда перейдем к краткому обзору текущего состояния дел в отрасли разработки ПО в России и в мире.
2. Бизнес и IT-проекты. Рынок ПО в России и в мире. Немного статистики
Для того чтобы бизнес был успешным, необходимо (но не достаточно) выполнение многих условий:
- Продукт должен выходить на рынок
- надлежащего качества;
- вовремя;
- интересным потенциальным пользователям.
- Расходы должны соответствовать изначальному бюджету.
Рис. 1.1. Статистика успешности IT-проектов. По данным The Standish Group International, Extreme Chaos
К сожалению, ситуация такова, что многие проекты не удовлетворяют этим, казалось бы естественным, условиям. Рассмотрим некоторую статистику (рис. 1.1 )1Источник: The Standish Group International. Данные взяты с http://www.softwaremag.com/archive/2001feb/CollaborativeMgt.html, http://www-128.ibm.com/developerworks/rational/library/feb06/marasco/ .
Приведем расшифровку степени успешности проектов:
- Проваленные: закончились неудачей - цель вообще не была достигнута.
- Испытавшие большие проблемы: закончились созданием продукта, но превысили бюджет или (и) не уложились во время или (и) имеют лишь частичную функциональность.
- Успешные: закончились созданием продукта, уложились в бюджет и время. Вся планируемая функциональность реализована.
Как видите, доля успешных проектов неуклонно возрастает, оставаясь по-прежнему сенсационно малой. И это притом, что в 2004 году на разработку программных средств ушло около 3 700 000 000$.
Рассмотрим еще один любопытный график:
Данная диаграмма2Источник: The Standish Group International. Данные взяты с http://www.infoworld.com/infoworld/img/33FEmyth2_ch2.gif говорит о том, что с ростом размера проекта (бюджет характеризует в данном случае размер и сложность задачи) шансы на его успех катастрофически падают.
Поговорим о текущем положении отрасли в России. В конце 90-х годов, обсуждая этот вопрос, мы приводили следующие качественные характеристики:
- Хорошие программисты.
- Грамотные аналитики.
- Недостаток хороших управленцев.
- Проблемы с документированием и локализацией.
- Проблемы с рекламой и продвижением.
Прошло всего 5 лет, и ситуация существенно изменилась к лучшему. Объем экспорта программного обеспечения из России в 2005 г. превысил 1 млрд.$ (для сравнения экспорт в автомобильной отрасли составил 380 млн.$, в атомной энергетике - 850 млн.$). Объем IT-рынка в 2004 г. составил 9,2 млрд.$, в 2005 г. рост составил 22,1% (в то время как мире всего порядка 6%)! Конечно, доля нашего рынка в объемах мирового IT-рынка по-прежнему невелика (объем IT-рынка в мире в 2005 г. составил 900млрд.$), но тенденция выглядит обнадеживающе. При этом объем рынка разработки программного обеспечения в России в 2005г. составил 1,4млрд.$ ( от всего IT-рынка). В среднем этот показатель в России растет на 40-50% в год3Источник: Светлана Шляхтина, Компьютер Пресс, 27 января 2006г. Данные взяты с http://www.aplana.ru/news