11 апреля 2006
В город приезжает молодой человек. Он хорошо выглядит и имеет немного денег в кармане, ему легко найти общий язык с женщинами.
Он мало говорит о своем прошлом, но очевидно, что он провел много времени в бездушной большой компании.
Он разумеется дружелюбный и общительный, спокойный и уверенный в себе, не заносчив. Поэтому легко может взять небольшую работу с доски объявлений в местном Кафе для программистов. Но быстро теряет интерес к проектам баз данных страхования, веб-страницам для домохозяек и движкам для финансовых расчетов.
Спустя год он подсчитал, что накопил достаточно денег для того, чтобы оплатить свои скромные расходы за год. Поэтому, посоветовавшись со своей верной немецкой овчаркой, он ставит компьютер в залитой солнцем комнате, арендованной квартиры и устанавливает тщательно подобранные инструменты для работы.
И он садится писать код.
И какой это код. Безупречный, художественный, элегантный, без багов. Пользовательский интерфейс настолько хорошо имитирует мыслительный процесс человека, что люди, которым он показывает код в Кафе для программистов, едва ли замечают пользовательский интерфейс. Это блестящая работа.
Воодушевленный отзывами своих коллег, он начинает заниматься бизнесом и готовится принимать заказы. Его скромность исключает любые претензии и через месяц ситуация на его банковском счете выглядит не такой обнадеживающей. До сих пор было принято всего три заказа: один от матери, один от анонимного благодетеля в Кафе Программистов, и один, поданный им на тестирование системы коммерции.
Во второй месяц заказы больше не поступают.
Это удивляет и расстраивает его. В крупной компании новые продукты создавались на регулярной основе, и даже если они были грубыми и невзрачными, они все равно продавались в разумных количествах. Один продукт, над которым он работал там, стал большим хитом.
По прошествии нескольких месяцев его финансовое положение начинает выглядеть немного шатким. Собака смотрит на него грустно. Не совсем понимая в чем дело, но видя, что его лицо выглядит хуже, чем обычно и он, кажется не в состоянии набраться сил, чтобы выйти на улицу с друзьями, или пойти за покупками, чтобы пополнить запасы, или даже искупаться.
Однажды утром местный продавец отказался продлить ему долг, а его банкир уже давно не брал трубку.
Большая компания не мстительна. Они признают талантливого сотрудника и рады нанять его обратно, с более высокой зарплатой. Вскоре он выглядит лучше, у него есть новая одежда, и он вернул свою старую уверенность в себе. Но чего-то не хватает. Искра в его глазах. Надежда, что он может стать хозяином своей судьбы, пропала.
Почему у него не получилось? Он уверен, что знает. «Маркетинг», — говорит он. Как и многие молодые технические специалисты, он склонен говорить такие вещи, как: «У Microsoft есть продукты и похуже, но лучший маркетинг».
Термин «маркетинг», произносимый разработчиком программного обеспечения, просто обозначает все эти заморочки бизнеса: все то, чего они на самом деле не понимают в создании программного обеспечения и его продаже.
На самом деле, это не совсем то, что означает «маркетинг». У Microsoft довольно ужасный маркетинг. Можете ли вы представить, что после этой рекламы динозавров кто-то на самом деле хочет купить Microsoft Office?
Программное обеспечение — это разговор между разработчиком программного обеспечения и пользователем. Но для того, чтобы этот разговор состоялся, требуется много работы, выходящей за рамки разработки программного обеспечения. Для этого требуется не только маркетинг, но и продажи, и связи с общественностью, и офис, и сеть, и инфраструктура, и кондиционирование воздуха в офисе, и обслуживание клиентов, и бухгалтерский учет, и куча других задач по поддержке.
Но что делают разработчики программного обеспечения? Они проектируют и пишут код, они макетируют экраны, они отлаживают, они интегрируют, и они проверяют вещи в репозитории управления исходным кодом.
Уровень, на котором работает программист (скажем, Emacs), слишком абстрактен, чтобы поддерживать бизнес. Разработчикам, работающим на уровне абстракции, нужен уровень реализации (implementation layer) — организация, которая берет их код и превращает его в продукты. Долли Партон (Dolly Parton), работая на уровне «пения хорошей песни», тоже нуждается в огромном реализационном слое, чтобы делать записи и бронировать концертные залы, брать билеты и устанавливать аудио оборудование, а также продвигать записи и собирать гонорары.
Любая успешная компания-производитель программного обеспечения будет состоять из тонкого слоя разработчиков, создающих программное обеспечение, распределенной по верхней части большой абстрактной административной структуры.
Абстракция существует исключительно для того, чтобы создать иллюзию того, что повседневная деятельность программиста (проектирование и написание кода, проверка кода, отладка и т.д.) — это все, что требуется для создания программных продуктов и вывода их на рынок. Что подводит меня к самому важному моменту этого эссе:
Вашим первым делом, как менеджера команды разработчиков программного обеспечения — является построение абстрактного слоя разработки.
Большинство новых менеджеров программного обеспечения пропускают этот момент. Они продолжают думать о традиционной, командно-завоевательной модели управления, которой они научились в голливудских фильмах.
По данным Command-and-Conquer (генштаб), менеджеры-руководители выясняют, куда пойдет бизнес, а затем отдают соответствующие приказы своим лейтенантам, чтобы они двигали бизнес в этом направлении. Их лейтенанты, в свою очередь, делят задачи на более мелкие кусочки и отдают приказы по их выполнению. Это продолжается вниз по орг-схеме до тех пор, пока, в конце концов, кто-то внизу не выполнит какую-то работу. В этой модели программист — это зубец в машине: машинист, выполняющий одну часть приказов руководства.
Некоторые предприятия на самом деле идут этим путем. Вы всегда можете узнать, когда имеете дело с таким бизнесом, потому что человек, с которым вы разговариваете, делает что-то бессмысленное и он это знает, он может даже беспокоиться об этом, но они ничего не могут с этим поделать. Это авиакомпания, которая теряет миллион миль клиента навсегда, потому что они отказываются менять его безвозвратный билет, потому что он не смог улететь по семейным обстоятельствам. Это интернет-провайдер, чей сервис работает хуже и хуже, а когда ты отменяешь свой аккаунт, они продолжают выставлять тебе счета, когда ты звонишь, чтобы пожаловаться, ты должен позвонить на платный номер и подождать час, а потом они все равно отказываются возвращать тебе деньги, пока ты не заведешь блог о том, насколько они отстойные. Это детройтский автопроизводитель, который давно забыл, как создавать машины, которые люди, возможно, захотят купить, и вместо этого перешёл от рыночной стратегии к рекламной стратегии, как будто единственная причина, по которой мы не покупаем их дрянные машины, это потому, что скидка не достаточно велика.
Достаточно
Забудь об этом. Командно-иерархическая система управления была опробована, и она работала некоторое время в 1920-х годах, конкурируя с толкающими телеги разносчиками, но она не достаточно хороша для 21-го века. Для производителей программного обеспечения необходимо использовать другую модель.
В компании, занимающейся разработкой программного обеспечения, первым приоритетом руководства должно быть создание этой абстракции для программистов.
Если где-то программист беспокоится о сломанном стуле или ожидает ответа от Dell, чтобы заказать новый компьютер, то абстракция дала течь.
Подумайте об абстрактном слое вашей разработки, как о большой, красивой яхте с безумно мощными моторами. Она безупречно поддерживается. Блюда для гурманов всегда подаются, как часовой механизм. В каютах дважды в день работают горничные. Навигационные карты всегда актуальны. GPS и радар всегда работают, и если они ломаются, под палубой есть запасной. Стоя на мостике, у вас есть программисты, которые действительно думают только о скорости, направлении и о том, что будет на обед: тунец или лосось? Тем временем большая команда профессионалов в накрахмаленной белой униформе на цыпочках кружится под палубой, поддерживая все в рабочем состоянии, заправляя газовые баллоны, соскабливая ракушки, разглаживая салфетки на стол. Вспомогательный персонал знает, что делать, но они берут свои сигналы от своего просоленного старикана, который слегка кивает в определенные стороны, чтобы скоординировать всю симфонию так, чтобы программисты могли абстрагироваться от всего, что касается яхты, кроме скорости, направления и того, что они хотят на обед.
Руководство компании, занимающейся разработкой программного обеспечения, в первую очередь отвечает за создание абстракций для программистов. Мы строим яхту, мы обслуживаем яхту, мы и есть яхта, но мы не управляем яхтой. Все, что мы делаем, сводится к тому, чтобы предоставить абстракцию программистам, чтобы они могли создавать отличный код, и чтобы этот код мог попасть в руки клиентов, которым он приносит пользу.
Программистам нужен репозиторий Subversion. Получение репозитория Subversion означает, что вам нужна сеть и сервер, который должен быть куплен, установлен, зарезервирован и обеспечен бесперебойным питанием, и что сервер вырабатывает много тепла и он должен находиться в комнате с дополнительным кондиционером, и что кондиционер должен иметь доступ к внешней стороне здания, что означает установку 80-фунтового вентиляторного блока на стене снаружи здания, что заставляет владельцев здания нервничать, поэтому им нужно привести своего строителя, чтобы договориться о том, куда установят блок кондиционера (решение): (на внешней стене, здесь, на 18 этаже, в самом неудобном месте), и собственники зовут своего адвоката, потому что нам придется расписаться, чтобы им разрешили это сделать, а потом появляются ребята-монтажники кондиционера с такелажем, который не удобен, что заставляет нервничать прораба, и он не позволяет им вылезти из окна 18 этажа в ремне Mattel, сделанной из 1/2? розового пластика, Клянусь Богом, это может быть пояс Диско Барби, и кто-то должен снова позвонить строительному агенту и узнать, какого черта они вдруг поняли после 12 недель в строительном проекте, что понадобится еще одна поправка к контракту на этот чертов кондиционер, о котором они знали до Рождества, и они только догадались, и если ваши программисты потратят хоть одну минуту, думая об этом, то это уже слишком много.
Для разработчиков программного обеспечения в вашей команде, это все должно быть абстрагировано, как ввод svn commit в командной строке.
Вот почему у тебя должен быть менеджмент.
Это для тех вещей, которых ни одна компания не может избежать, но если у вас есть программисты, которые беспокоятся об этом, управление потерпело неудачу, так же, как и 100-футовую яхту ждет провал, если владелец-миллионер должен спуститься в машинное отделение и починить двигатель.
Вашу типичную компанию основали бывшие продавцы программного обеспечения, где все — это продажи, а мы все существуем для того, чтобы увеличить продажи. Эти компании не могут взять управление в свои руки, потому что они собирают версию 1.0 программного обеспечения (так или иначе), а затем полностью теряют интерес к разработке нового программного обеспечения. Их команда разработчиков голодает или не существует, потому что никому не приходило в голову собирать версию 2.0… все, что умеет делать менеджмент — это увеличивать продажи.
С другой стороны, у вас есть компании, созданные бывшими программистами. Эти компании труднее найти, потому что в большинстве случаев они тихо ведут себя, пишут код где-нибудь в подвале, который никто никогда не находит, и поэтому они тихо угасают в небытие сразу после Great Ruby Rewrite.
Оба этих примера, могут быть легко уничтожены компанией, которая управляется программистами и организована для того, чтобы поставить программистов на место водителя, но которая имеет отличную абстракцию, делая всю тяжелую работу по преобразованию кода в продукты.
Программист наиболее продуктивен с тихим личным кабинетом, отличным компьютером, неограниченным количеством напитков, температурой окружающей среды от 20 до 23 градусов Цельсия, отсутствием бликов на экране, стулом, который настолько удобен, что вы его не чувствуете, администратором, который приносит почту и заказывает руководства и книги, системным администратором, который делает интернет таким же доступным, как кислород, тестировщиком, чтобы найти ошибки, которые они просто не могут видеть, графическим дизайнером, чтобы сделать их экраны красивыми, командой маркетологов, чтобы массы хотели получить свою продукцию, командой продавцов, чтобы убедиться, что массы могут получить эти продукты, техподдержкой, которая помогают клиентам заставить продукт работать и помогают программистам понять, какие проблемы порождают звонки в техподдержку, и около дюжины других функций поддержки и администрирования, которые в типичной компании, складываются примерно на 80% от заработной платы. Не случайно римская армия имела соотношение четырех слуг на каждого солдата. Это не было декадансом. Современные армии, вероятно, работают в соотношении 7:1. (Вот чему Прадип Сингх научил меня сегодня: если только 20% твоего персонала — программисты, ты можешь сэкономить 50% на зарплате, отправив их на аутсорсинг в Индию, то сколько конкурентного преимущества ты на самом деле получишь от этой 10%-ной экономии?).
Главная обязанность руководства — создать иллюзию, что компанию, которая занимается программным обеспечением, можно запустить, написав код, потому что именно этим и занимаются программисты. И хотя было бы здорово иметь программистов, которые также отлично разбираются в продажах, графическом дизайне, системном администрировании и кулинарии — это нереально. Как и учить свинью петь, это тратит ваше время и раздражает свинью.
Microsoft делает настолько хорошую работу по созданию этой абстракции, что выпускникам Microsoft, как известно, трудно создавать компании. Они просто не могут поверить в то, как много прошло без их ведома, и они понятия не имеют, как это воссоздать.
Никто не ожидает, что Долли Партон знает, как подключить микрофон. За ней стоит невероятная сеть менеджеров, музыкантов, звукозаписывающих техников, звукозаписывающих компаний, выездных мастеров, парикмахеров и публицистов, которые существуют для того, чтобы создать абстракцию, которая, когда она поет, — это все, что нужно миллионам людей, чтобы услышать ее песню. Весь вспомогательный персонал и руководство, которые делают возможным творчество Долли Партон, могут делать свою работу наилучшим образом, обеспечивая самую совершенную абстракцию: самую совершенную иллюзию того, что Долли поет для нас. Это ее песня. Когда вы слушаете ее на iPod, есть огромная инфраструктура, которая делает это возможным, но самое лучшее, что инфраструктура может сделать — это полностью исчезнуть. Обеспечьте абстракцию, которую использует Долли Партон, лично для нас.
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:
- Курс «Профессия Data Scientist» (24 месяца)
- Курс «Профессия Data Analyst» (18 месяцев)
- Курс «Python для веб-разработки» (9 месяцев)
samizdam
О, разделение труда повышает эффективность.
Почему интересно приходится чаще наблюдать лоббирование идей про вовлечённость разработчиков в бизнес и перекладывание экспертизы о продукте в разработку, чем высокую компетентность в предметной области среди тех же маркетологов и проч. Естественный отбор не работает что ли?
PS: на редкость читабельный перевод для Хабра, спасибо.
vladkorotnev
Хорошая шутка про читабельность, один "Great Ruby Rewrite", оставленный без перевода, чего стоит.
orthanner
Это называется «лень». Сколько раз я видел заказчиков (с точки зрения программиста; понятно, что инициаторами работ не всегда были они), которые не хотят даже думать о том, что им нужно. «Ты ж программист — ты и разбирайся, а я хочу красиво, не знаю как». Я, конечно, не согласен со Спольски в той части, где он пытается поставить программистов во главу угла, но общий посыл у статьи верный: каждый должен заниматься своим делом и иметь возможность не задумываться о том, что выходит за рамки его компетенций. Как–то так.