В индустрии программного обеспечения очень часто возникают различные вариации одного и того же вопроса:
- Почему производить ПО настолько сложно?
Вопрос этот может звучать несколько по-другому:
- Почему нельзя точно спланировать разработку ПО?
- Почему нельзя найти и исправить все ошибки в программе?
- Почему разработчики так часто ошибаются?
- Почему больше половины проектов по производству ПО терпят провал?
- Почему с ростом сложности проекта затраты времени и ресурсов растут нелинейно?
и т.п., но думаю корни у всех этих вопросов одни и те же, и состоят они в следующем.
Человечество за всю свою историю научилось делать очень много сложных и очень сложных вещей:
- выращивать животных и растения, выводить их новые породы и сорта;
- строить себе дома гигантских размеров, способные выдержать даже серьёзные стихийные бедствия;
- лечить большинство болезней, успешно осуществлять хирургическое вмешательство в организм;
- создавать и успешно использовать сложнейшие механизмы и электронные успройства;
- химическим путём получать вещества и материалы с необходимыми нам свойствами;
- выходить далеко за пределы своей планеты и даже её орбиты, заглядывать в дальние уголки вселенной;
- наблюдать и использовать поведение и энергию мельчайших частиц материи
и многое-многое другое.
По сравнению с этими невероятными достижениями разработка ПО кажется детской забавой.
Однако у всех этих достижений есть некоторые общие черты:
- всему этому человечество училось постепенно, шаг за шагом, иногда веками;
- массовое использование нового знания или умения как правило не начиналось до полной уверенности в том что метод работает и работает хорошо;
как следствие - то, что использовалось массово, как правило было надёжно;
- каждое такое достижение имело явно выраженную материальную составляющую:
механизм, прибор, материал и т.п. являются объектами материального мира с определёнными физико-химическими свойствами,
а значит все они подчиняющиеся определённым законам физического мира.
Что же случилось с появлением компьютеров и программ для них?
Человечество вошло в век ИНФОРМАЦИИ. Что это для нас изменило?
Изменение стало весьма существенным, появилась возможность делать две абсолютно новые вещи:
1. Моделировать объекты реального мира, т.е. создавать сколь угодно много функциональных копий своего мира, что открыло новые невероятные возможности для его изучения и подчинения себе.
2. Не слепо следовать физическим, химическим и прочим законам своего мира, а создавать новые "виртуальные" объекты, аналогов которым нет в реальном мире, которые подчиняются собсвенным (нами же созданным) законам.
Второе как раз и стало тем "новым измерением" которое получило человечество в своё распоряжение и которое вновь приближает нас к теме поста.
Войдя в век инфрмации и придумав компьютер - универсальное средство создания, обработки и воспроизведения этой информации - человечество более не ограничивалось законами реального мира, мы создавали "миры" по мере нашей необходимости и совершенствовали эти миры под наши растущие потребности. В качестве примеров этих миров можно назвать:
- мир оффисных работников с документами, слайдами и самоподсчитывающими таблицами, размер, цвет, содержание и прочие параметры которых легко изменяются по первому желанию обитателя этого мира;
- мир игр с таким разнообразием подмиров и живущих в них существ, что порой диву даёшься фантазии создателей этих миров;
- мир музыки, которая не может быть воспроизведена ни на одном "реальном" музыкальном инструменте и т.п.
Какое же место принадлежит во всём этом разработчику программ? Как ни пафосно это звучит, но ему принадлежит роль Творца миров и объектов в этих мирах. Забавно, но даже термин "объект" сохранён в науке программирования и имеет именно такой смысл, как мы только что интуитивно вывели.
Думаю дальше все постепенно становится на свои места. С одной стороны мы имеем реальный мир с реальными объектами и законами, которые изучались человечеством тысячелетиями и изучаются до сих пор, которые покорить безумно сложно, но покорив однажды, мы овладеваем этим знанием и умением навсегда. С другой стороны - "мир миров", причудливые, изменчивые и непредсказуемые творения человеческого гения, который только входит во вкус, открывая в себе всё новые, казавшиеся ранее невероятными, возможности.
Думаю не нужно приводить много примеров тех конкретных трудностей и препятствий, которые встречает творец-разработчик на своём пути: это и непротиворечивость законов нового мира (операционной системы, фрейворка), и безошибочность соблюдения этих законов применительно ко всем объектам мира (программ, окон, контролов, файлов), и гибкость мира, творцом объектов в котором может стать кто угодно, и трудности создания новых объектов с абсолютно новыми свойствами, которые до появления объекта и описать-то толком никто не может, в мирах, которые существуют только пару лет (вместо сотен миллиардов) и которые, во-первых, неидеальны сами по себе, а во-вторых, всё время продолжают развиваться и изменяться, приобретая новые невероятные свойства...
Думаю, на этом можно остановиться, т.к. целью поста не является донести сложность и креативность нашей работы до людей неискушенных, думаю это дело мне не по зубам. Я лишь хотел объяснить нам самим, почему нам так трудно хорошо делать свою работу и почему мы почти никогда не справляемся со своей задачей на 100%.
Мы ведь только учимся. В добрый путь, господа Творцы!