. А что если Хоффману, которому, кстати, уже за 60, пришлось бы теперь напутствовать новоиспеченного выпускника колледжа? Сказал бы он: «Попытай-ка счастья в программной индустрии» — или нет?

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

Стоит ли работать в программной индустрии?

Недавно мне довелось серьезно поговорить с друзьями и коллегами о том, сохранятся ли наши профессии в будущем и стоит ли нам советовать своим детям, племянникам и племянницам вступать на то поприще, которое мы избрали для себя. Моих собеседников беспокоили не столько нынешний экономический спад, лопнувший пузырь Internet-компаний и драма рынка телекоммуникаций. Ведь массовые увольнения работников и аутсорсинг — это явления, с которыми люди сталкиваются и в хорошие, и в плохие времена. В условиях, когда заказы передаются в офшоры и когда пробивают себе дорогу другие тенденции, например, промышленное производство базовых компонентов программной инфраструктуры, штатные программисты компаний все чаще обходятся без навыков по созданию новых приложений. Потребность в подобных навыках все еще испытывают поставщики и интеграторы, но для многих ИТ-компаний это нечто второстепенное. Многие профессионалы задаются вопросом: «Будет ли работа в индустрии программного обеспечения? И стоит ли заниматься такой работой?». На протяжении 90-х годов исследователи отмечали огромный спрос на специалистов в области ПО. Иногда сообщалось о том, что число вакансий в одних только Соединенных Штатах составляет свыше 1 млн [1]. Такая статистика вселяла уверенность в том, что работа всегда найдется, и заставляла работодателей трепетать при одной мысли о том, что после увольнения специалиста нужно будет искать ему замену. В качестве менеджера по набору персонала мне пришлось на собственном опыте убедиться в том, что в период бурного развития отрасли найти способного работника отнюдь не просто; некоторые вакансии так и не были заполнены.

Сегодня, спустя всего каких-то два года, без работы остались десятки, а то и сотни тысяч опытных разработчиков. В конце 90-х годов в воскресных номерах газеты New York Times под рекламные объявления о найме программистов выделялось по две полосы; сегодня же объявлений едва набирается на одну колонку. Итак, ситуация на рынке рабочей силы кардинально изменилась. Если раньше страдали работодатели, теперь под ударом оказались работники; в одночасье исчезло не менее полумиллиона рабочих мест (по данным [2], в 2001 году в сфере ИТ было ликвидировано 528496 рабочих мест). Из этого можно заключить, что многие из рабочих мест, рекламируемых в СМИ, просто не существовали в природе или каждое место рекламировалось многократно; а может быть, дело в том, что с истощением средств, выделяемых на НИОКР, рабочие места действительно ликвидировались. Впрочем, это еще не вся картина. В связи с успешным проведением кампании по исправлению «ошибки 2000 года» образовался избыток программистов, специализирующихся на обслуживании систем, а в период расцвета Internet-компаний в сферу ИТ были вовлечены тысячи новых работников; эти тенденции также способствовали обострению проблемы нехватки рабочих мест.

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

Эд Йордон предсказывал все это еще в 1992 году. В книге Decline and Fall of the American Programmer [3] он, проанализировав такие факторы, как рост производительности, новый инструментарий, качество продукции и перетекание рабочих мест в страны с не столь высокой оплатой труда (в первую очередь, в Индию), пришел к выводу, что индустрия программного обеспечения в США движется к закату. Время, прошедшее с тех пор, подтвердило правильность его предсказаний: и задачи по созданию новых приложений, и программные проекты, ориентированные на обслуживание систем, все чаще выполняются за границами США. Несколькими годами позже Йордон немного смягчил свою позицию, указав на появление новых парадигм, резкий взлет интереса к Internet, обслуживающие системы и встроенные системы, которые, на его взгляд, противодействуют увяданию индустрии ПО [4]. Любопытно, что после краха акций «доткомов» компании сократили масштабы своих безумных новых начинаний. Некоторые аналитики предсказывают, что уже к 2005 году 30% компаний из списка Global 2000 полностью перейдут на услуги офшорных подрядчиков [5]. Под влиянием всех этих факторов многие специалисты остаются без работы в течение нескольких месяцев кряду, а остальных будущее тревожит куда больше, чем в прошлые годы.

А зачем вообще работать? 

Итак, вопрос остается открытым: зачем работать в программной индустрии? Давайте в поисках ответа на него начнем с более фундаментального вопроса: а зачем вообще работать?

Те из нас, кому не удалось продать свои акции компании Amazon по цене 400 долл. за штуку или получить состояние в виде выигрыша в другой лотерее, просто вынуждены работать. Мы работаем, чтобы платить по счетам. Но философы, социальные мыслители, теологи, психологи и другие теоретики часто спрашивают: «Что есть работа и почему люди занимаются ей?» Краткий обзор некоторых просвещенных мнений на сей счет, возможно, окажется полезным для дальнейшего изложения. Работа, как всем нам известно, обеспечивает потребности (выживание) отдельных людей и социальных групп. Работу можно рассматривать «как воплощение инициативы, смелое предприятие, как сферу приложения энергии, форму жизненной силы; с другой стороны, это сила, скрепляющая общество, воплощение сотрудничества и товарищества» [6]. Почти все специалисты в области теории личности видят в работе прежде всего способ приложения энергии людей, способ наполнения нашей жизни. Юджин Минковски видел в производительном труде путь к достижению бессмертия, а Зигмунд Фрейд полагал, что работа — это не более чем особым образом канализированные импульсы либидо [7].

Работа — камертон нашей жизни, поэтому изучая работу, мы узнаем нечто новое о том, как мы живем. Поэтому если работа есть средство для достижения цели, нам следует знать, во имя какой цели мы работаем. Если мы добиваемся прогресса через напряженный рационализированный труд, где та идея, которая направляет наше движение вперед? [9] Иначе говоря, если работа есть связующая сила цивилизации и сфера выражения индивидуальности, работа по созданию программных средств может укреплять глобальную цивилизацию и обеспечивать широкие возможности для проявления творческих потенций. Такой взгляд поможет нам внимательнее присмотреться к работе по созданию программного обеспечения и к тому, в какую сторону она эволюционирует.

Программное обеспечение как средство самовыражения

Если мы принимаем, что работа должна обеспечивать самовыражение человека, резонно поставить вопрос: насколько полно реализует это качество труд по созданию программных средств? Достаточна ли присущая этому виду деятельности возможность самовыражения для того, чтобы привлекать к нему людей, и если да, то в чем причина? Что заставляет людей выбирать профессию программиста, отвергая другие профессии? Один из возможных подходов к решению этого вопроса состоит в том, чтобы взглянуть на него с другой стороны: что заставляет людей отказываться от выбора того или иного вида трудовой деятельности? Неплохой отправной точкой в этом случае может служить классический вопрос об отчуждении работника [9]:

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

В первые десятилетия бюрократической индустриализации этот вопрос вызвал к жизни идеи, которые легли в основу социализма. Индустриальные организации, существовавшие сотню лет назад, полностью лишали трудовую деятельность рабочих какого-либо смысла. Все было подчинено принципам управления, основанным на идее рационализации. В те годы, когда такие порядки получили всеобщее распространение, многие призывали рабочих придать смысл своему труду, ибо иначе они не смогут реализовать себя духовно, но в это время уже исчезала всякая возможность для воплощения таких призывов в жизнь [10]. В ходе индустриализации повышалась производительность труда, и одно из последствий этого процесса состояло в том, что рабочие повсеместно теряли не нужную на рабочих местах квалификацию; искать выход своей творческой энергии они были вынуждены в сфере досуга [8]. В основу новых методов управления, получивших название научного управления и обеспечивавших повышение эффективности труда, легли идеи, выдвинутые Фредериком Уинслоу Тейлором. Метод Тейлора базировался на измерении времени, необходимого для выполнения движений, из которых состоит трудовой процесс. При этом главный акцент делался на профессионализм управления. А профессионализм опирался на «беcстрастную рациональность измерений, из которых выводятся задания и нормы» [11].

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

В наши дни работники, как правило, требуют, чтобы в их работе был какой-то смысл, какая-то возможность самореализации, хотя мало кто стремится полностью реализовать себя на рабочем месте — для того, чтобы жить полной жизнью, нам требуется спорт, искусство и другие любимые занятия [10]. Так вот, в профессии разработчика программного обеспечения есть какой-то изначально ей присущий неотъемлемый элемент творчества, а это именно то, что делает труд человечным. Конкретнее говоря, инстинкт мастера своего дела есть свобода выполнять работу в собственной неповторимой манере. Обычные рабочие потеряли эту свободу еще в доинформационную эру, но она остается неотъемлемой частью труда программиста, даже если ему приходится действовать в структурированной среде [8, 12].

Этьен Борн и Франсуа Анри описывают три широкие категории человеческой деятельности, которые они позаимствовали из трудов классических мыслителей Греции [10]:

  • теоретизирование (знание);
  • поэтика или ремесло (творческая работа);
  • практическая деятельность (выполнение обычных работ).

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

Рис. 1. Жизненный цикл программного продукта и деятельность человека
Создание компьютерных программ как сила, скрепляющая общество

Вне всякого сомнения компьютерные программы революционизировали индустриальный мир; именно они «одушевляют» сеть машин, с помощью которых мы управляем цивилизацией. Со Всемирной паутиной и с Internet связана лишь какая-то часть всех компьютеров и программ, имеющихся в мире. Наверное, придет такой день, когда к Глобальной сети будет подключено большинство машин, и вполне вероятно, что все машины будут связаны с локальными вычислительными сетями. Но все же есть основания полагать, что все машины никогда не будут напрямую связаны друг с другом, хотя бы по соображениям безопасности. Ведь существуют же частные сети, предназначенные для нужд военных, для проведения финансовых транзакций, для исследовательских целей. И вот во всех этих сетях, а также в автономных компьютерах выполняются программы, а многие из них обмениваются файлами или пакетами данных. Возможность для осуществления таких глобальных обменов в столь широких масштабах возникла сравнительно недавно, и она является ярким свидетельством способности программных средств поддерживать единство цивилизации; но ведь за прикладными программами, реализующими эту глобальную взаимозависимость, стоят профессионалы программной индустрии [8]:

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

Революционеры нашей эпохи — не инженеры-механики, а инженеры-программисты. Если 100 лет назад доминирующее положение на производстве занимали профессионалы от физических дисциплин, то сегодня тон задают инженеры мысли, инженеры знания, архитекторы абстракций. Разумеется, химик, создающий лекарства, которые спасают жизни людей, по праву получит признание за оказание человечеству большой услуги, но среди всех созидателей, меняющих лицо материального мира, лишь инженер-программист способен в одночасье превращать чистые абстракции в оперативные средства управления. Стюарт Чейз в 1929 году писал об инженере, огромная фантастическая и одинокая фигура которого неколебимо стоит по ту сторону управляющих живыми организмами законов, сжимая рукой рукоять рубильника [13]. Сегодня на жизнь общества влияют профессионалы программной индустрии, которые контролируют обновление Web-сайтов, — влияют тем, что обеспечивают публикацию в Web нового контента, поддерживают работу сайтов с финансовой информацией и узлов, где осуществляются коммерческие транзакции.

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

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

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

Будущее профессии создателя компьютерных программ

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

Спецификации многих систем, предназначенных для США, разрабатываются здесь же, в Америке, а разработка систем осуществляется в глобальной среде, включающей в себя несколько стран. В составе одной из крупных американских телекоммуникационных фирм, где мне доводилось работать, имеется глобальный центр НИОКР. В его проектах могут участвовать инженеры и менеджеры из Ирландии и Франции, Испании и Англии, из Индии, Китая и США. В каждом отделении центра работают группы специалистов в различных областях, и они подключаются к реализации проектов там и тогда, где и когда в этом возникает необходимость. Бывает, что роли распределяются по чисто техническим основаниям: одни специалисты, к примеру, работают над базами данных, а другие создают сетевые протоколы. В иных ситуациях кто-то работает с клиентами, а кто-то реализует прикладную программу. Разумеется, всегда будет сохраняться и определенная специализация или некоторый уклон по регионам: скажем, ПО для оборонной отрасли обычно создается в Вашингтоне, а в Кремниевой долине реализуются самые передовые проекты [14]. Но как бы то ни было, элементы триады «знание — творчество — практика» часто разъединяются; такое положение сохранится и в будущем. Работающие в США специалисты в области ПО имеют сейчас и будут иметь в дальнейшем широкие возможности «знать» и «действовать», но не всегда — «творить». Под влиянием меняющихся требований к кадрам руководители профильных учебных заведений будут готовить квалифицированных специалистов в области ПО, способных выполнять определенные задачи в соответствии с востребованными на данный момент элементами триады.

Организация этих глобальных бригад будет по-прежнему определяться множеством обстоятельств. Я бы выделил следующие подходы к созданию программ:

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

По-видимому, в предстоящие годы указанные подходы к разработке не претерпят кардинальных изменений. (Конечно же, сказанное не относится к конкретным методам внутри этих подходов.) Так, в последнее время стали часто использоваться методы «шустрой разработки» (agile). Этот новый модный термин, обозначающий разработку силами небольших групп специалистов-ремесленников, предполагает использование десятков проверенных методов, которые часто вызывают в памяти книги таких авторов, как Фред Брукс и Том Демарко, Грэди Буч и Кент Бек [12]. Как правило, речь идет о ничем не примечательных подходах к проектам, которые не всегда находят широкое применение. Вполне возможно, что в предстоящие годы организация проектов по разработке программного обеспечения будет сводиться к простому применению опыта первых поколений разработчиков с поправками на местные обычаи и обстоятельства.

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

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

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

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

Литература

  1. H. Rubin, "Global Software Engineering and Information Technology Competitiveness of the United States". US Dept. of Commerce Presentation, 1997, 17 Mar.
  2. J. Moad, "Why IT Pros Can't Get Jobs". eWeek, 2002 13 May , www.eweek.com/article2/0,3959,1997,00.asp.
  3. E. Yourdon, Decline & Fall of the American Programmer, Yourdon Press, 1992.
  4. E. Yourdon, Rise & Resurrection of the American Programmer, Yourdon Press, 1996.
  5. L. Vaas, "Fair Trade on Jobs". eWeek, 13 May 2002; www.eweek.com/article2/0,3959,9019,00.asp.
  6. C.D. Burns, The Philosophy of Labor, Oxford Univ. Press, 1925.
  7. H. London, Dimensions of Personality, John Wiley & Sons, 1978.
  8. N. Anderson, Dimensions of Work: The Sociology of a Work Culture, David McKay Co., 1964.
  9. T. Masaryk, "The Ideals of Humanity and How to Work". Lectures Delivered in 1898 at the University of Prague, Books for Libraries Press, 1969.
  10. E. Borne, F. Henry, A Philosophy of Work, Sheed and Ward, 1938.
  11. W.G. Bennis, Changing Organizations: Essays on the Development and Evolution of Human Organizations, McGraw-Hill, 1966.
  12. A. Cockburn, Agile Software Development, Addison-Wesley, 2001.
  13. S. Chase, Men and Machines, MacMillan, 1929.
  14. K. Eischen, "Software Development: An Outsider's View". Computer, vol. 35, no. 5, 2002 May.
  15. J. Cusick, "Software Engineering: Future or Oxymoron". Software Quality Professional, Am. Soc. for Quality, vol.3, no. 4, 2001 Sept.

Джеймс Кьюсик (j.cusick@computer.org старший менеджер проектов компании Bluecurrent. В круге его научных интересов такие области, как подготовка инженеров-программистов и надежное программирование.


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

James Cusick, How the Work of Software Professionals Changes Everything. IEEE Software, May/June 2003. IEEE Computer Society, 2003, All rights reserved. Reprinted with permission.


 

Поделитесь материалом с коллегами и друзьями