Vitalii Tsybulnyk / Виталий Цыбульник

On Software Development / О софтверной разработке

About the author

    Vitalii Tsybulnyk
Vitalii Tsybulnyk is a Software Engineering Manager at Mictosoft Azure.
E-mail me Send mail

Activity

Recent comments

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008-2018

Почему производить ПО настолько сложно?

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

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

Что же случилось с появлением компьютеров и программ для них?
Человечество вошло в век ИНФОРМАЦИИ. Что это для нас изменило?

Изменение стало весьма существенным, появилась возможность делать две абсолютно новые вещи:

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

2. Не слепо следовать физическим, химическим и прочим законам своего мира, а создавать новые "виртуальные" объекты, аналогов которым нет в реальном мире, которые подчиняются собсвенным (нами же созданным) законам.

Второе как раз и стало тем "новым измерением" которое получило человечество в своё распоряжение и которое вновь приближает нас к теме поста.

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

Какое же место принадлежит во всём этом разработчику программ? Как ни пафосно это звучит, но ему принадлежит роль Творца миров и объектов в этих мирах. Забавно, но даже термин "объект" сохранён в науке программирования и имеет именно такой смысл, как мы только что интуитивно вывели.

Думаю дальше все постепенно становится на свои места. С одной стороны мы имеем реальный мир с реальными объектами и законами, которые изучались человечеством тысячелетиями и изучаются до сих пор, которые покорить безумно сложно, но покорив однажды, мы овладеваем этим знанием и умением навсегда. С другой стороны - "мир миров", причудливые, изменчивые и непредсказуемые творения человеческого гения, который только входит во вкус, открывая в себе всё новые, казавшиеся ранее невероятными, возможности.

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

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

Мы ведь только учимся. В добрый путь, господа Творцы!


Categories: Development
Posted by Vitalii Tsybulnyk on Friday, October 17, 2008 7:14 AM
Permalink | Comments (3) | Post RSSRSS comment feed

Comments (3) -

Подлипенский Павел Ukraine

Monday, November 17, 2008 7:07 PM

Замечательный пост. Единственное с чем не соглашусь, так это с фразой: "По сравнению с этими невероятными достижениями разработка ПО кажется детской забавой." Амбиции знаешь ли... ;) На самом деле "много сложных и очень сложных вещей" есть и в программировании. Если проводить аналогии, то получиться:
- выращивать животных и растения, выводить их новые породы и сорта;
- создавать новые проекты, основываясь на старых (или неких фреймоврках)
- строить себе дома гигантских размеров, способные выдержать даже серьёзные стихийные бедствия;
- создавать гигантских проекты, способные выдерживать DDos-атаки
- лечить большинство болезней, успешно осуществлять хирургическое вмешательство в организм;
- проводить рефакторинг и поддерживать старые проекты(VB6, Fortran, и тп) на плаву
- создавать и успешно использовать сложнейшие механизмы и электронные успройства;
- эту фразу можно оставить в оригинале
- химическим путём получать вещества и материалы с необходимыми нам свойствами;
- получать объекты с нужнымим нам свойствами с помощью наследования и полиморфизми
- выходить далеко за пределы своей планеты и даже её орбиты, заглядывать в дальние уголки вселенной;
- интегрировать внешние приложения в свой проект
- наблюдать и использовать поведение и энергию мельчайших частиц материи
- банально дебагать код

Все эти наблюдения имеют долю шутки, ровно как и долю неоспоримых аксиом...

Vitalii Tsybulnyk Canada

Tuesday, November 18, 2008 5:38 AM

Ты абсолютно прав, Паша.
Именно поэтому я написал "КАЖЕТСЯ детской забавой", но к сожалению таковой не является, поэтому и возникают подобные вопросы.
Собирался раскрыть это во второй части, спасибо что предоставил набор чудесных аналогий, которые я с твоего разрешения использую Wink

Vitalii Tsybulnyk United States

Monday, April 5, 2010 7:53 AM

Объединил две части заметки в один пост. Мне кажется, теперь она смотрится более "цельно" Smile.

Add comment




  Country flag

b i u quote
Loading