Кодеры за работой. Размышления о ремесле программиста - Питер Сейбел
Шрифт:
Интервал:
Закладка:
Гораздо эффективнее, когда две эти команды сидят вместе, и тестеров-щики помогают разработчикам улучшить программу, а не грызутся с ними. Это влияет на способ отчетности, и работа идет куда результативнее. Кроме того, разработчики участвуют в тестировании, так что нельзя сказать, что вы исключительно разработчик или тестировщик.
Но эффективнее всего, как я считаю, устроить тестирование у клиента. В начале карьеры программиста мне приходилось заниматься этим - бесценный опыт! Вы живете с клиентом целую неделю, помогаете ему установить новую систему и решать с ее помощью задачи.
Это дало мне возможность взглянуть изнутри на то, как используются наши программы, и понять, что можно сделать для облегчения их использования. Разработчики, не имевшие подобного опыта, всегда казались мне непростительно высокомерными. Поразительное неуважение к людям, которые пользуются нашим продуктом! А все потому, что они этих людей попросту не видели.
Сейбел: Кем вы себя считаете - ученым, инженером, художником, ремесленником или кем-нибудь еще?
Крокфорд: Скорее писателем. Иногда я пишу на английском, иногда на JavaScript.
В конце концов все сводится к коммуникациям и к структуре, призванной их облегчить. Естественные и компьютерные языки функционируют во многом по-разному, но в конечном счете я сужу о компьютерной программе по ее способности взаимодействовать с человеком, читающим эту программу. В этом смысле различий нет.
Сейбел: И если программа хорошо взаимодействует с человеком, то в части ее взаимодействия с компьютером проблемы почти отпадают?
Крокфорд: Можно надеяться. Компьютер капризен и не слишком умен, поэтому нужно приложить дополнительные усилия, чтобы он понял все правильно. Поскольку это так сложно, легко упустить из виду другую часть, не менее важную, с моей точки зрения.
Сейбел: У Дейкстры есть известная статья “On the cruelty of really teaching computing science” (О сложности практического обучения компьютерной науке), где утверждается, что программирование - ветвь прикладной математики. Вы согласны с этим?
Крокфорд: Математика важна для программиста, но это лишь одна из множества других важных вещей. Мне кажется, что преувеличение значения математики может привести к недооценке значения чего-то другого, возможно, более важного, например грамотности.
Как я уже говорил, мне хотелось, чтобы одним из требований при приеме на работу было знакомство с книгами Кнута, и я от него отказался, поскольку не мог найти достаточного количества людей, отвечающих этому требованию. Другое качество, которого я требовал от кандидатов, - нормальная грамотность в том языке, на котором они общаются с другими людьми. Я хотел, чтобы люди умели писать, ведь мы тратим очень много времени на переписку друг с другом: мы пишем электронные письма или документацию, планы, спецификации. Я хотел, чтобы все члены моей команды могли делать это, но оказалось, что это очень редкий навык. Поэтому сейчас я предпочитаю кандидатов с дипломом по английскому языку, а не по математике.
Сейбел: Кажется, у Дейкстры есть примерно такое утверждение: “Если не можешь писать на своем родном языке, лучше не берись за программирование”.
Крокфорд: Совершенно согласен.
Сейбел: Сейчас мы все чаще сталкиваемся вот с чем: программирование, освобождаясь от физических ограничений, становится все больше зависимым от исторических случайностей. Многие ваши предложения по выделению некоторого подмножества языка JavaScript и ваша версия HTML5 кажутся попытками исправить эти исторические случайности.
Крокфорд: Да, и в некотором роде это донкихотство. Я знаю, что многое из того, чего я хотел бы добиться, неосуществимо. Но время от времени что-то получается. Так, когда XML предложили в качестве формата обмена данными, моя первая реакция была: “Господи, это же безумно сложно! Все это не нужно для простой передачи данных туда и обратно”. Я предложил другой путь, по которому все и пошли. Теперь JSON - самое популярное средство передачи данных в Ajax-приложениях, он активно используется и во многих других приложениях. И он действительно очень прост. Такие случаи возвращают мне веру в человечество, в то, что в конце концов все будет сделано правильно.
Но нельзя, чтобы все разбредались и делали каждый что-то свое. Так не получится, от этого никому не станет лучше. Одни должны создавать продукт, остальные - высказываться “за” или “против”. JSON - тоже историческая случайность.
Сейбел: Как вы думаете, индустрия ПО - это система блестящих инноваций или омерзительная свалка?
Крокфорд: Пытаюсь подобрать к выражению “омерзительная свалка” синоним поизящнее. Мне кажется, в целом программное обеспечение становится лучше, хотя и не такими темпами, какими улучшается аппаратная часть, согласно закону Мура. По сравнению с “железом” у нас все происходит очень и очень медленно - чтобы вдвое увеличить эффективность разработки программного обеспечения, нам требуется двадцать лет. Но прогресс все же есть. В основном он связан с тем, что мы теперь не занимаемся подгонкой ПО к конкретному железу, мы больше не заботимся так о производительности. То есть теперь мы больше должны заботиться о качестве. Но увы, как раз этому мы не посвящаем достаточно времени.
Сейбел: Как ни выражайся, суть останется прежней: омерзительная свалка. Как с ней покончить?
Крокфорд: Вот как раз это я и пытаюсь выяснить. Думаю, во многом нынешняя ситуация связана с нашим подходом к созданию стандартов. Если сегодня все работает хорошо, то это потому, что Сеть работает хорошо. Все преимущества, которые принес Интернет, идут от возможности связать все воедино, причем сделать это достаточно надежным способом. Но стоит немного копнуть, как обнаружатся места, где все работает не так, как надо, и где можно было бы сделать лучше. Вопрос в том, как сделать это прямо на месте. Внесение любого изменения в стандарт - это акт насилия. Это ужасно. Это приведет к неработоспособности множества вещей и нанесет вред людям. Поэтому к изменению стандартов надо подходить очень осторожно, учитывая стоимость внесения изменений. Надо убедиться, что выгоды превосходят нанесенный ущерб. Сейчас, насколько я могу судить, об этом не задумываются. Стандарты меняют, обосновывая это тем, что “мы так хотим”, или “так будет понятнее”, или еще что-то, совсем необязательно связанное с желанием принести пользу людям. Я борюсь с этим - ведь таким образом мы ничего не улучшим.
Сейбел: Вы склоняетесь к тому, чтобы не создавать лишних спецификаций. Это, конечно, позволяет избежать чрезмерной спецификации и стандартизации того, о чем впоследствии пожалеете. Но чем меньше спецификаций в стандарте, тем больше люди создают самостоятельно, в результате чего появляются неформальные стандарты. Решит ли упрощение стандартов эту проблему или сложность появится с какой-то другой стороны?
(adsbygoogle = window.adsbygoogle || []).push({});