Wednesday, March 31, 2010

Spolsky: Duct Tape Programmer

Джоэль Спольски
Среда, 23 сентября 2009 года

Джемми Завински (Jamie Zawinski) – это тот, кого я бы называл «утилитарным программистом». (Duct Tape Programmer) И я скажу это с большой долей уважения. Он представляет собой разновидность программиста, который усердно трудится над построением будущего, и делает полезные вещи так, чтобы остальные люди могли заняться другими вещами. Он является тем парнем, которого вы хотите заполучить в свою команду по постройке картингов, потому что у него есть два любимых инструмента – изолента и WD-40. И он изящно орудует ими, даже если ваш картинг несется вниз по склону со скоростью одна миля в минуту. Это происходит в то время, когда другие программисты до сих пор находятся в начальной стадии спора о том, стоит ли использовать титан или некоторые виды композитных аэрокосмических материалов, которые Боинг применял для своей модели 787 Дримлайнер.
Когда вы закончите, у вас, возможно, будет грязный картинг, но я абсолютно уверен, что он полетит.
Я только что прочитал интервью с Джемми в книге «Программисты за работой», Питера Сибеля. Идите и купите её прямо сейчас. Это отличный набор интервью с рядом великих программистов, включая Питера Норвига, Гая Стила, и Дональда Кнута. Эта книга настолько интересна, что я потратил вчера 60 минут на беговой дорожке вместо обычных 30, потому что я не мог оторваться от чтения. Как я уже сказал, идите и купите её.

Идите! Я подожду.

Здесь написано, почему мне нравятся утилитарные программисты. Иногда, когда вы работаете в команде, и вы заняты набиванием кода, кто-то подходит к вашему столу, с кофейной чашкой в руке, и начинает нудить о том, что если вы будете использовать многопоточные компоненты COM, ваше приложение станет на 34% шустрее, и это совсем даже нетрудно, потому что он написал кучу шаблонов, и всё, что вам остаётся сделать – это отнаследоваться от его 17 шаблонов, примерно по 4 аргумента в каждом, и вам всего лишь надо будет написать тело функции.

Это просто огромный лист множественного наследования от разных классов, и эй, presto, многопоточный COM. И ваш взгляд затуманивается, и у вас нет ни одной чёртовой идеи, о чём этот чудак рассуждает, но он просто не хочет уходить, и, если даже он уйдёт, он просто вернётся в свой кабинет написать ещё больше своих классных классов, полностью собираемых из шаблонов множественным наследованием, без единого куска настоящего кода реализации, и это, похоже, будет виснуть по-черному, так что вы собираетесь записаться в ночную смену, чтобы прийти и попытаться разобраться с этим, потому что он будет на одном из чёртовых сборищ «Шаблонов проектирования».

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

Здесь то, что Завински сказал о Netscape – «Это было решение подобно отказу от использования C++ и не применять потоки, которое позволило нам поставить продукт вовремя».
Позже, он написал почтового клиента для Netscape, но команда, которая отвечала за правильный показ сообщения, так и не поставила свой компонент. «Это был просто большой пустой прямоугольник в центре окна, где мы могли бы просто показывать обыкновенный текст. Они были чрезвычайно академичного мнения о своём проекте. Они пытались достичь этого с помощью DOM\DTD… “О, ну, что нам нужно сделать, так это добавить ещё один уровень абстракции здесь, и иметь делегата для этого делегата того делегата. И в результате символы появятся на экране.»
Питер спросил Завински: «Чрезмерный инжиниринг, похоже, здорово раздражает вас?»
«Да», ответил тот, «В конце дня, сделайте эту чертову штуку! Было бы здорово переписать ваш код и сделать его яснее и с третьего раза он действительно станет классным. Но это не главное – вы здесь не для того, чтобы писать код; вы для того, чтобы поставлять продукт». Это мой герой.

Завински не делал много тестовых примеров. Они «звучат здорово в принципе. Если применять их при неспешном темпе разработки, так это точно то, что надо. Но, когда вы слышите: «Мы должны сделать это с нуля за шесть недель», то, я не могу сделать это, пока не от чего-либо не откажусь. И то, что я собираюсь выкинуть, так это то, что не является абсолютно критичным. Если там не будет тестовых примеров, заказчик не будет на это жаловаться» .
Перед тем, как вы пуститесь во все тяжкие, вспомните, что Завински работал в Netscape, когда они переворачивали мир. Они думали, что у них есть только несколько месяцев до того, как кто-то другой придет и отнимет их кусок хлеба. И масса важного кода написана подобным образом.
Утилитарные программисты – прагматики. Завински популяризировал рецепт Ричарда Габриэля – «Хуже – это лучше». На 50%-хорошее решение, , при помощи которого люди реально решают больше проблем и переживет 99-процентное решение, которое ни у кого нет, потому что оно до сих пор в вашей лаборатории, где вы ее бесконечно вылизываете.
Поставка – это опция . Действительно важная опция. Ваш продукт должен ее включать в себя.
Один принцип, которые утилитарные программисты хорошо понимают, это то, что любая разновидность техники кодирования, которая хоть чуть-чуть сложнее предыдущей, может оказаться роковой для вашего проекта. Утилитарные программисты стремятся избегать C++, шаблонов, множественного наследования, многопоточности, COM, CORBA, и кучу других технологий, которые очень даже резонны, когда вы думаете над ними долго и упорно, но они, честно говоря, просто слегка сложны для человеческого мозга.

Конечно, формально нет ничего плохого в том, чтобы пытаться написать многопоточный код на C++ под Windows с применением COM. Но это чревато таким катастрофическими багами, которые случаются только в очень специфических случаях, потому что наши мозги, честно говоря, не очень хороши для написания такого рода кода.

Обыкновенные программисты, откровенно говоря, отстаивают это, и не хотят признавать то, что они не способны написать этот суперсложный код, и они позволяют задирам из их команды отвлекать их каким-то Богом забытым архитектурным шаблоном на C++, а иначе, им бы пришлось признаться в том, что они просто не считают себя достаточно умными использовать то, что было бы превосходной техникой программирования ДЛЯ СПОКА (героя сериала «Звездный Путь»). Утилитарных программистов не заботит, что вы думаете о них. Они используют простые основные инструменты и напрягают мозги для того, чтобы эти инструменты позволили им писать более полезные вещи для их заказчиков.

Однако, одну вещь вы должны иметь в виду – то, что утилитарные программисты в программистском мире представляют собой эквивалент симпатичных парней…
таких фантастически красивых молодых людей, которые могут валяться на кровати, небритые, непричесанные, с нечищеными зубами, и входить в метро во вчерашних мятых брюках и выглядеть прекрасно, просто потому, что они такие.
Вы, мой друг, не можете выйти в люди непричесанным. Потому, что вы просто не так красивы. Утилитарные программисты должны обладать немалым талантом, чтобы отбросить эти ухищрения. Они должны быть достаточно хороши, чтобы поставлять код, и чтобы мы прощали им то, что они никогда не пишут тестовые примеры, или если они объединяют указатели «вперед» и «назад» в своем связанном списке в одно двойное слово, чтобы сэкономить 32 бита, потому что они достаточно хороши и умны, чтобы им это удавалось.
Вы еще не купили «Программисты за работой»? Идите! Это была всего лишь первая глава!


0 коммент.:

Post a Comment

Powered by Blogger.