Написание Програмного Обеспечения

Мой талант лежит в области программного обеспечения, дипломного исследования были в области компьютерной инженерии (проектирование и построение цифровых вычислительных машин). Одно наблюдение меня всегда поражало: компьютерная инженерия казалось более простым, чем компьютерные науки (Разработка программного обеспечения). Есть набор инженерного проектирования следовать определенным правилам и инженерные проекты имеют гораздо больше шансов на работу, чем программных проектов. Да, есть несколько эффектных инженерных сбоев, но, эмпирически, надежное и полезное программное обеспечение-это сложнее провернуть. Чтобы проиллюстрировать мою точку зрения, рассмотреть удивительные космические зонды мы отправляем по всей Солнечной системе. Ка сами работают очень хорошо, часто живут долго мимо их дизайнерских воплощений. Их контроль программного обеспечения, с другой стороны, необходимо постоянно подправили и подлатали в полет, чтобы продолжить миссию вместе. Я не пытаюсь сказать, что инжиниринг-это легко; это не так. Моя цель-просто объяснить, почему программное обеспечение труднее, чем получить право физического строительных проектов в целом и почему «программная инженерия» — неуместный термин.

Журнал «Economist» (27 ноября 2004 р. 71) цитирует Стэндиш группы оценивает, что

«…30% всех программных проектов отменяются, почти половина находится в более бюджет, 60% считаются сбои организациями, которые инициировали их, и 9 из 10 приходят в конце. «

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

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

Инженерные компоненты не существуют в реальном мире

Физико-технический проекты легче визуализировать и, следовательно, легче построить; черт возьми, вы можете фактически коснуться компоненты и конечный продукт своими руками. Чем дальше вы отходите от Ньютоновского представления физического мира, которые мы испытываем в повседневной жизни, тем сложнее проект. Квантовая физика-это сложно, потому что частицы не ведут себя подобно скалам. Теория струн, наиболее перспективный метод моделирования квантовой физики, это в первую очередь трудно понять, потому что он занимается с шести или семи дополнительных измерений кроме привычных трех пространственных измерениях. Представьте, что вы пытаетесь спроектировать и построить дом на Калаби-Яу многообразие (изображение справа является 3-D проекции).

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

Инженерные компоненты взаимодействуют в более предсказуемым образом

Инжиниринг является менее рискованным, чем программное обеспечение, потому что инженерный опыт меньше составных компонент взаимодействий. Хотя незначительные изменения в одной части автомобиля структура может легко повлиять на краш надежность другого, это было бы необычно для дизайна изъян в купол света, чтобы вызывать периодические двигатель глохнет. В доме, проект строительства, вам придется сильно постараться, чтобы сделать унитаз каждый раз, когда кто-то позвонил в дверь.

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

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

Инжиниринг имеет меньше основных вносить промежуточные изменения дизайна

Последняя причина, что программное обеспечение является более трудным, чтобы получить права, чем инженерные проекты опасения вносить промежуточные изменения в дизайне. Физический мир не так податливы, как неважное мир программного обеспечения и, следовательно, клиенты просто имеют более низкие ожидания. Конгресс не идет НАСА на полпути через полет на Луну и попросить их отправиться на Марс вместо. Большинство инженерных проектов могут фактически использовать водопада метод проектирования: определение функциональных требований, проектирования, реализации, тестирования. Для большинства программных проектов, это рецепт для катастрофы.

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

Вы спросите, почему, если программное обеспечение настолько сложно, чтобы получить права, самолеты не падают с неба. Оказывается, они все-таки иногда и плохие программного обеспечения часто виновником; например, смотреть муха по проводам «Аэробус 320″ краш. Большую часть времени, однако, аппаратные средства контроля программного обеспечения для самолетов, автомобилей и медицинских приборов работает, как ожидалось. Причиной, повышенной надежности-тройная. Во-первых, на карту поставлены жизни людей и, скорее всего, более осторожным. Во-вторых, разработчики программного обеспечения не требуется изменять программное обеспечение при разработке принципиально. Например, винтовой самолет не превратился в реактивный самолет в середине развития. Инженерная команда бы начать все сначала, в то время как команды программного обеспечения обычно просят сделать радикальные изменения переправе. И, наконец, такого программного обеспечения занимается контролируя физические приборы и начинает набирать некоторые из преимуществ, предоставляемых физическим инженерных проектов.

Это программа развития науки?

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

«Принципы и процедуры для систематического стремления к знаниям, связанных с признанием и формулирование проблемы, сбор данных через наблюдение и эксперимент, а также формулировка и тестирование гипотез.»

Это описание попахивает отладки больше, чем акт написания программного обеспечения. Информатика идет о строительстве вещи, как инженерные, но без роскоши набор инструментов и компонентов, взятых из физического мира. Никто не выработала надежных и эффективных процедур для создания больших частей программного обеспечения, как инженеры сделали для физических проекта. Как Алан Кей не влияет на это, программное обеспечение является «инженерные рода…но просто сделать с помощью грубой силы». Разговор с Аланом Кей:

«Если вы посмотрите на программное обеспечение сегодня, через призму истории техники, это, конечно, инженерные рода—но это вроде Инженерная, что люди без понятия арку сделал. Большинство программ сегодня очень много, как Египетская пирамида с миллионами кирпичей сложено на верхней части друг друга, без структурной целостности, но просто сделано грубой силой и тысячами рабов.»

Написание программного обеспечения является больше искусством, чем Инженерная дисциплина

Написание программного обеспечения является наиболее похожие по написанию фантастических романов. Писать романы-это тоже акт творения в непренужденной и эфирной среды с несколько хорошо установленных строительных норм. Мы знаем хорошо писать, когда мы это видим, но трудно научить. Опыт написания и обратной связи с лучшими писателями (кодеры) — это наиболее надежный способ стать хорошим писателем (кодер). Без хорошо понимать процесс, программное обеспечение будет оставаться больше искусством, чем наукой. Термин «программная инженерия» — это скорее цель, чем как мы на самом деле писать программы.