понедельник, 7 января 2008 г.

«Об оружии»

Эта заметка навеяна очередным флеймом на программистском форуме по поводу языков программирования. Основной тезис одной из сторон следующий

  • Язык должен быть прост, понятен новичкам и защищен «от дурака». Или, как принято говорить, "не давать прострелить себе ногу". Тогда есть возможность набрать большую толпу программистов и создать «фабрику по разработке ПО». Тогда как использование «экзотических» языков разработки приводит к большим рискам – квалифицированных специалистов мало, если они уйдут – непонятно, что делать. Да и вообще – «кто проверит, что они там навертели». Короче, если уж сотрудникам приходится выдавать пистолеты, то пусть уж они будут «безопасными» и могут стрелять только туда, куда приказано.

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

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

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

Со стороны программиста:

  • Примерно лет через 5 плотной работы в программировании у разработчиков происходит изменение в способе думать в момент написания кода. В чем-то это изменение похоже на качественный переход во владении иностранным языком. Вначале человек мысленно переводит фразы с родного языка на иностранный, перед тем как их высказать (и обратно). Но потом в какой-то момент он начинает думать сразу на новом языке, как на родном. Аналогичная ситуация и с языками программирования (только "время погружения" требуется существенно больше).
  • После некоторого порога все решение задачи осмысливается в терминах основного используемого языка программирования. И этот факт так же, как и с естественным языком, накладывает отпечаток на принимаемые решения (в частности — архитектурные) и отчасти даже на "жизнь вне офиса" (а что вы хотели — думая определенным способом 8 часов в день, не так-то просто сразу переключиться).
  • На мой взгляд, использование строго ограниченного, многословного, и принудительно-безопасного языка программирования может быть полезно для начинающих, но с какого-то момента становится "вредно для здоровья". И особенно для развития, загоняя мышление в достаточно узкие рамки. (В качестве примера можно привести знакомые всем учившимся в школе профессиональные деформации педагогов.) Не всегда программисты это понимают сознательно, но очень многие постепенно начинают чувствовать некоторое «недовольство» или даже «раздражение» по отношению к своей работе (а порою и к фирме, где все это происходит). Такое состояние чем-то напоминает чувство «давления», «связанности» или «стесненности», а на уровне сознания – осознается как «скука»… и это приводит нас ко второй стороне монеты.

Со стороны работодателя:

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

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

  1. «Программистская фабрика». Большая фирма, ориентированная на массовые «безопасные» инструменты. Низкая квалификация работников. Большая текучесть кадров. И (как следствие) ориентация на достаточно типовые задачи с малыми рисками.
  2. «Команда». Малая фирма, ориентирующаяся на «экзотику» (часто еще совсем новую). С высокой квалификацией работников, низкой текучестью кадров и нетиповыми (порою рискованными) задачами.
  3. «Орда». Большая фирма с нежесткой структурой, состоящей из отдельных (слабо связанных) частей. Некоторые из таких частей могут быть «командами» (использующими различные технологии), а некоторые – «фабриками». Имеет «внутреннюю текучесть кадров», и конкуренцию за кадры между частями фирмы (при этом внешняя текучесть может быть низкой). Квалификация работников – неоднородна.
  4. «Падальщики». Малые фирмы, ориентированные на массовые «безопасные» инструменты. Низкая квалификация работников. Большая текучесть кадров. Подбирают те мелкие (или не слишком выгодные) типовые заказы, которые не интересны фирмам остальных типов.

То есть этим я хотел бы обратить внимание на возникающие «эффекты обратной связи». И если прямые следствия достаточно очевидны (для типа фирмы и рынка выбираем инструмент), то обратные эффекты (выбранный инструмент корректирует развитие фирмы и ее место на рынке) не столь очевидны, но не менее сильны.

06.01.08

1 комментарий:

Анонимный комментирует...
Этот комментарий был удален администратором блога.