08.10.2008...15:56

Уровень Абстракции Разработки

Перейти к комментариям

Автор: Joel Spolsky
Перевод: Слава Буштрук

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

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

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

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

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

И он садится кодить.

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

Поощренный отзывами сверстников, он устремляется в бизнес и готовится принимать заказы.

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

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

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

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

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

Почему он потерпел неудачу? Он в значительной степени уверен, что знает. «Маркетинг», – он говорит. Как большинство молодых техников, он склонен говорить вещи вроде: «У Microsoft худшие продукты, но лучший маркетинг».

Когда изъясняется разработчик, термин «маркетинг» просто помогает для всего, что касается бизнеса. В рассуждениях термин «маркетинг» в действительности используется везде, где речь идет о бизнесе: просто они не полностью понимают процесс создания программного обеспечения и его продажи.

Это в действительности не то, что означает «маркетинг». На самом деле у Microsoft ужасный маркетинг. Вы можете вообразить те объявления-динозавры, которые реально заставляют кого-то покупать Microsoft Office?

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

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

Уровень, на котором работает программист (скажем, Emacs), слишком абстрактен, чтобы поддерживать бизнес. Разработчики, работающие на уровне абстракции разработчика, нуждаются в уровне осуществления – организации, которая берет их код и превращает его в продукты. Алла Пугачева, работающая на уровне «поющий хорошую песню», также нуждается в высоком уровне осуществления: сделать записи и заказать концертные залы, взять билеты, установить звуковую аппаратуру, рекламировать записи, собрать авторские гонорары.

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

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

Ваша первая необходимость как менеджера программной группы – это строить уровень абстракции разработки.

Большинство новоиспеченных программных менеджеров пропускают этот пункт. Они продолжают думать в традиционной модели управления «Command-and-Conquer» (командуй-и-завоёвывай), о которой они узнали из Голливудских кинофильмов.

Согласно «Command-and-Conquer» менеджеры-лидеры выясняют, куда направляется бизнес, и затем отдают соответствующие распоряжения их лейтенантам двигать бизнес в этом направлении. Их лейтенанты, в свою очередь, делят задачи на меньшие куски и приказывают осуществить их. Это продолжается вниз по структуре организации, пока, в конце концов, кто-то в основании действительно не выполнит работу. В этой модели программист – винтик в машине: машинистка, которая выполняет один кусок управленческих приказов.

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

Достаточно.

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

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

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

Думайте о вашем уровне абстракции разработки, как о большой красивой яхте с безумно мощными двигателями. Это точь-в-точь то же самое. Пища гурмана подана минута в минуту. Каюты обслуживаются дважды в день. Навигационные карты всегда свежие. GPS и радар всегда работают, но если они ломаются, под палубой есть резервные. Стоя на мостике, вы видите программистов, которые действительно думают только о скорости, направлении, и съесть ли тунец или лосось на ланч. Тем временем большая группа профессионалов в накрахмаленных белых униформах тихо, на цыпочках ходят вокруг нижней палубы, сохраняя все в рабочем состоянии, заполняя бензобаки, соскабливая моллюсков, гладя салфетки к завтраку. Штат поддержки знает, что делать, но они ловят намеки упрямого пердуна, который слегка кивает в определенных направлениях, координируя всю симфонию, чтобы программисты могли абстрагироваться от всего, что связано с яхтой, кроме скорости, направления, и своих пожеланий на обед.

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

Программисты нуждаются в репозитории версий. Установка репозитория означает, что Вы нуждаетесь в сети и сервере, который должен быть куплен, установлен, скопирован и обеспечен непрерывным питанием, и этот сервер вырабатывает теплоту, что значит – он должен стоять в комнате с дополнительным кондиционером, и он должен иметь доступ к внешней стороне дома, что означает установку 80-фунтового модуля на внешней стене, раздражающего владельцев здания; таким образом, они должны привести инженера, провести переговоры о том, куда повесить модуль кондиционера (решение: на внешней стене, здесь на 18-ом этаже, в самом неудобном месте из всех возможных); строительство вовлекает адвокатов, потому что мы собираемся отказаться в пользу первого, чтобы получить разрешение; затем парни монтеры обнаруживают, что механизм крепления был бы неуместен в месте для игры в Барби, что раздражает нашего бригадира, и он не позволяет им подниматься выше окна 18-ого этажа в ремне безопасности Mattel, сделанном из 1/2 дюймового розового пластика; я клянусь Богом – это мог быть ремень Disco Barbie, и кто-то должен вызвать представителя строительства снова и увидеть какого черта они внезапно поняли, спустя 12 недель после начала проекта, что для этого проклятого кондиционера должна быть другая договорная поправка, что они знали об этом перед Рождеством, но только что поняли это; если ваши программисты даже минуту потратят, думая об этом, то эта минута – это слишком много.

Это все не должно касаться вашей группы разработчиков, как печатание “svn” в командной строке.

Именно поэтому у Вас есть управление.

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

Вы получили обычную компанию запущенную бывшими продавцами программ, где всё – это Продажи Продажи Продажи, а все мы существуем, чтобы управлять большим количеством продаж. Эти компании можно распознать в природе, потому что они строят версию 1.0 (как-нибудь) и затем полностью теряют интерес к разработке нового программного обеспечения. Их группа разработчиков зависает или перестает существовать, потому как никогда не случалось, чтобы кто-то делал версию 2.0 … все, что знает управление, это как сделать больше продаж.

В другой крайности у Вас – типичные софтверные компании, построенные бывшими разработчиками. Эти компании тяжелее найти, потому что в большинстве случаев они держатся тихо, полируя код где-нибудь в каморке, которую никто никогда не найдет, и таким образом они спокойно растворяются в забвении сразу после Great Ruby Rewrite – их изменяющий землю рефакторинг как-то недооценен Людьми.

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

Программисты наиболее производительны в тихом личном офисе с отличным компьютером; неограниченными напитками; окружающей температурой между 20(68) и 22(72) градусами по Цельсию (F); отсутствием  бликов на экране; стулом, настолько удобным, что Вы не чувствуете его; администратором, который приносит им почту, заказывает руководства и книги; системным администратором, который делает Интернет столь же доступным, как кислород; тестером, находящим ошибки, которые они не могут видеть; графическим дизайнером, делающим их экраны красивыми; группой маркетологов, заставляющих массы хотеть их продукты; группой продавцов, удостоверяющихся, что массы получили эти продукты; терпеливой техподдержкой святош, которые помогают клиентам получать работающий продукт и помогают программистам понимать, какие проблемы возникают в результате звонков в поддержку; и еще дюжиной других поддержек и административных функций, которые в типичной компании составляют приблизительно 80% платежной ведомости. Не совпадение, что римская армия имела соотношение четыре служащих на одного солдата. Это не было упадком. В современных армиях вероятно 7:1. (Вот кое-что из того, что сегодня преподал мне Pradeep Singh: если только 20% вашего штата – программисты, и Вы можете сэкономить 50% на зарплате аутсорсинговых программистов из Индии, хорошо, какую часть конкурентоспособного преимущества Вы действительно собираетесь выбросить из тех 10%-ых сбережений?)

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

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

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

Комментарии (2)

  • Евгений

    И статья и перевод – полезные!
    Слишком подробно, но дает правильный ответ на главный вопрос – почему молодые и талантливые программисты не доводят свои творения до Людей?
    Спасибо автору и переводчику!

  • voXnedorgeCor

    Зачетный пост, спасибо!


Ответить