Вопрос: Так что же? Мы не инженеры?

Original author: Geoff Moes
  • Translation
Недавняя статья Вы НЕ инженер-программист! успела порядком нашуметь, как в англоязычном так и в русскоязычном Интернете. Кем только программистов не называли: и садовниками, и учеными, и водителями и фермерами. Давайте обсудим все эти метафоры и то, верны ли они все вообще? Но, это под катом…


Думая метафорически о разработке программного обеспечения


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

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

Множество метафор, описывающих разработку ПО, смутит кого угодно. Дэвид Грайс утверждает, что написание ПО — это наука (Gries, 1981). Дональд Кнут считает это искусством (Knuth, 998). Уотте Хамфри говорит, что это процесс (Humphrey, 1989). Ф. Дж. Плоджер и Кент Бек утверждают, что разработка ПО похожа на управление автомобилем, однако приходят к почти противоположным выводам (Plauger, 1993, Beck, 2000). Алистер Кокберн сравнивает разработку ПО с игрой (Cockburn, 2002), Эрик Реймонд — с базаром (Raymond, 2000), Энди Хант (Andy Hunt) и Дэйв Томас (Dave Thomas) — с работой садовника, Пол Хекель — со съемкой фильма «Белоснежка и семь гномов» (Heckel, 1994). Фред Брукс упоминает фермерство, охоту на оборотней и динозавров, завязших в смоляной яме (Brooks, 1995). Какие метафоры самые лучшие?


В дополнение ко всему, Крис Ейтсон в своем посте под названием «Вы НЕ инженер-программист!», проводит аналогию с садоводством, делая также следующие заявление:
Вы просто не можете сажать те же саженцы, что и Facebook, Flickr и Twitter и ожидать, что они укоренятся, независимо от качества ваших садовников или климата организации.

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

Еще одна метафора появилась в недавнем посте Чипа Камдена «Почему программисты должны изучать искусство программирования»
Обсуждение теории вычислений, для среднестатистического программиста, сидящего в траншее, это все равно, что обсуждать химические свойства селитры в то время, как идет перестрелка: все может быть очень правильно и толково, но не относится непосредственно к проблеме, стоящей перед ним.

Я не хочу быть поучающим или особо остроумным, но мне кажется особо ироничным то, что для своей метафоры Чип выбрал именно селитру, которая входит в состав черного пороха, устаревшей формулы пороха, которая была заменена бездымным порохом. В конце 1800-х годов, понимание проблемы черного пороха, которая основана на химических свойствах селитры, в некоторых случаях решало исход боя. Черный порох образует густой белый дым, и в некоторых боях, имея бездымный порох, вы могли оставаться незамеченным, но используя черный порох, вы создавали большой заметный дымовой сигнал, который выдавал вашу позицию. Новая технология предоставляла преимущества, позволяющие сохранить вам жизнь. А дым от черного пороха создавал еще одну проблему, так как ведя огонь продолжительное время, накапливалось огромное количество дыма, через который стрелок уже не мог видеть цель. Этому явлению было дано имя «туман войны».



Я не знаю, насколько будет уместной эта химическая метафора, но все же прослеживаются интересные параллели. На заре становления химической промышленности для добычи серной кислоты использовались большие промышленные свинцовые камеры, которые были изобретены в середине 18-го века. Этот процес был не очень хорошо изучен и был неэффективным в том, что требовал дорогостоящих нитратов, привозимых из Чили, которые за время перевозки частично окислялись и испарялись. Только через 100 лет ученые нашли способ перерабатывать нитраты для увеличения эффективности производства. Только тогда, в конце 19-го века, химическая технология как дисциплина, была надежно закреплена в программах колледжей и была создана отдельная ассоциация.

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

Следующая параллель заключается в процессах многоразового использования, а именно в том, что когда вы строите новый завод по производству серной кислоты, вы не хотите придумывать его с нуля каждый раз. И в любой дисциплине есть факторы хаоса и неоднозначности, в том числе и в термодинамике и в информатике. С точки зрения социологии, сегодня программное обеспечение оказывает на нашу жизнь не меньшее влияние, чем химическая промышленность, ведь именно эта клавиатура, на которую я смотрю, и почти все, что я могу видеть – продукты химической промышленности. Но, какие негативные последствия могут повлечь за собой эти химические вещества, и могут ли быть эти проблемы химической промышленности родственными к проблемам разработки программного обеспечения?

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



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

Вопрос здесь в том, можем ли мы создать дисциплину, изучающую разработку программного обеспечения, и не уступающую по эффективности другим дисциплинам? Если использовать метафору химического производства, то где мы находимся сейчас на пути понимания самой науки и ее внедрения в процесс? Исходя из такого сравнения, возможно, мы находимся где-то в начале или в конце 19 века, но я очень сомневаюсь, что шкала времени тут имеет линейный характер и скорее всего эта шкала развития будет больше похожа на экспоненту. А возможно, разработка программного обеспечения – это отдельная сущность, и наши метафоры сдерживают наше мышление и препятствуют объективно взглянуть на реальность?

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

Ответ: Мы – Разработчики!



Dmitry_Zhariy says:
Прочитайте этот текст на английском!
Попробуйте прочитать текст этой статьи на английском языке ради улучшения ваших навыков и добра.
Следующая ссылка ведет на параллельный (билингвистический; смешанный, английский и русский) вариант этой статьи. Читайте текст на английском и пользуйтесь русским переводом снизу, если вдруг вы потеряете смысл англоязычного текста.

[ EN/RU ] Q:Are we not engineers?

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 20

    +9
    Зачем вообще с чем-то сравнивать? Развели тут батл метафор)
    А статья — да, интересная.
      +2
      Одна из основных целей употребления метафор — это помочь неосведомленному человеку в доступной форме объяснить о чем-либо. Например, сопоставить процесс разработки ПО с другим более привычным для обывателя процессом (строительство, садоводство и т.д.). И поэтому конкретные метафоры нужно подыскивать под конкретного человека. Ведь объяснить химику, что такое разработка программ будет легче всего, если дать отсылки на «родную» ему область знаний и интересов. Также и для режиссера привычней сравнение с кинопроизводством, а для садовника приятнее аналогия с сельским хозяйством.

      В общем эффективность любой метафоры весьма относительна и зависит от контекста.

        –1
        Не факт. Тот же МакКоннел, достаточно верно на мой взгляд, замечает, что метафоры не менее важны в контексте восприятия своей работы самим програмистом.
        +3
        Любая индустрия, когда выходит из лабораторий энтузиастов и становиться достоянием широких масс, преобразуется. Химику в лаборатории не надо сильно беспокоится о доступности компонент, а технологу надо. Фишка разработки ПО в том что ограничения, которые будут определять форму и содержание индустрии уникальны и прежде всего зависят от людей а не от обьективных ресурсов. Так что сравнивать с чем-то уже сформировавшимся достаточно бессмысленно.
          +2
          Дональд Кнут считает это искусством (Knuth, 998).

          Так и знал, что профессор был, есть, будет!
            +4
            Да елки-палки. Люди мы! Люди, которые занимаются любимым делом.
            Шокирует? ;)
              +2
              Вы просто не можете сажать те же саженцы, что и Facebook, Flickr и Twitter и ожидать, что они укоренятся
              Google и Yandex, Facebook и vkontakte — наши компании сажают те же саженцы :)
                0
                Дело в том, что сейчас программирование уже не является однородным, поэтому можно придумывать множество метафор и они будут как-то описывать некий класс задач. Ключевое слово — как-то, т.к. любая метафора — это всего лишь метафора, т.е. некая проекция на реальную суть вещей, причем не всегда однозначная и корректная. Если взять программирование, то здесь есть целый класс задач:
                1. Веб-программирование: необходимо уметь работать с HTML, верстка, javascript, php, базы данных. Часто процесс понятен и отлажен.
                2. Высокопроизводительные сервера: что-нибудь типа C/C++, причем часто без исключений, шаблонов и других плюшек.
                3. Большое количество автоматизации, например облака: часто пишут на скриптовых языках, типа питона.
                4. Можно еще писать навороченные web приложения: используют что-то типа java, C#.

                Это просто некий список, чтобы стало понятно, что решается различный класс задач. Есть еще один класс, называется: реализация идеи, типа прототипирования. Здесь нужны совсем другие навыки, больше исследовательские. Каждый тип задач требует разных знаний, разных языков и разных подходов. Нет одного универсального языка или подхода, который бы решал все задачи. Я еще не упомянул разработку в НАСА, там совершенно иной мир разработки.

                К чему я все это? Что программирование настолько широкая область, что можно применить множество метафор, и они в той или иной области будут верны.
                  –1
                  Рекомендую по теме почитать:
                  Стив Макконнелл Профессиональная разработка программного обеспечения (Professional Software Development)
                  Там всё написано…
                    +1
                    Вот ламеры...., зачем писать на хабре комменты, если твоими советами ПО ТЕМЕ никто не пользуется…
                      0
                      Я всё же отмечу, что я прочел эту книгу и мне высказывания Geoff Moes кажутся колупанием в носу, баяном и т.п…
                      0
                      По-моему, программирование больше похоже на электронику, только виртуальную.
                      Некоторым покажется, что это одно и то же, но многие программисты до сих пор собирают все на проводках или берут готовую плату и напаивают на нее своих проводков, вместо того, что расширять плату или перепроектировать ее. В программировании IoC container напоминает плату в электронике — отвечает за связь разрозненных, хорошо тестируемых, элементов.
                        +3
                        Для меня программирование это секс, ты либо получаешь удовольствие от него либо нет. И получившееся детище во многом зависит от тебя. Каждый раз перед началом процесса замираешь от предвкушения, потом время летит не заметно, а в конце — оргазм и удовлетворение когда все получается!
                          +1
                          Вот немного статистики:
                          Секс, Java, C#, PHP в большом городе
                          +5
                          Инженер — это человек, который получил профильное высшее образование, умеет применять знания, методики и стандарты, которые ему преподали в университете. В программировании нет никаких стандартов и методик, половина так называемых программистов либо не заканчивала ВУЗы, либо непрофильно, многие непонимают зачем нужны всевозможные дискретные математики и теории оптимизаций, многие плюются при виде Кнута и алгоритмов, мол, зачем всё это.
                          Нечего тут сранивать, потому как действительно большая часть далеко не инженеры. Вся эта часть именно Джамшуты, которые научились кто плитку класть, кто полы стелить, а кто и обои клеить, так и живут, так и зарабатывают на кусок хлеба.
                          И примеров тому масса, вокруг себя да и в себе можно найти. Тот же хабр можно применить как зеркало, в котором каждый день появляются статьи таких вот Джамшутов, которые хотят менторским тоном рассказать что-то про инженерию, а сами дальше третьей главы второй книги на заглядывали.
                            0
                            Вот-вот. У меня, лично, да и у всех моих прошлых и нынешних работодателей, не возникает вопроса: «кто я»? Потому что в дипломе, полученном честным путём во времена СССР, чёрным по белому написано: специальность: Инженер-системотехник (Вычислительные машины, комплексы, системы и сети). Собственно этим инженером я двадцать лет и работаю. И если кому-то кажется, что он садовник, то может быть он неверно выбрал специальность. А хабр-такой хабр, здесь таких садовников как г… за баней, это точно.
                              0
                              Вы так говорите, как будто в этом есть что то плохое
                                0
                                Нет, быть Джамшутом это не «плохо», но нельзя называть это «инженером». А «плохое» — это до сих пор использовать заезженные мемы, даже если это сарказм ;) (да-да, как будто в этом что-то плохое).
                            • UFO just landed and posted this here
                                +1
                                По-моему происходит подмена понятий. Здесь, имхо, программирование приравняли к фундаментальным наукам, а ведь это только прикладуха к химии, физике, математике и тд. Программиста не окончившего технический вуз я бы не назвал инженером. Неоспоримо, что и определенный талант быть должен.
                                P.S. Инженер в переводе на русский — изобретатель

                                Only users with full accounts can post comments. Log in, please.