Брайан Керникан со студентами
За последние 25 лет Брайан Керникан принимал участие во многих интересных проектах, связанных с компьютерами и разработкой программ. Брайан — один из создателей Unix, а также языков программирования Си и awk. Он написал множество популярных книг, в частности «Язык программирования Си» (в соавторстве с Дэннисом Ричи), «Элементы стиля программирования» и «Программные инструментальные средства» (обе с П. Дж. Плоджером), «Практика программирования» (с Робом Пайком). Недавно с Керниканом встретился главный редактор журнала IEEE Software Стив Макконел.

Многие годы Вы работали над самыми захватывающими проектами. В чем формально состоят Ваши обязанности в Bell Labs сегодня?

Я работаю в Центре компьютерных исследований, который, как это ни выглядит удивительным, занимается именно компьютерными исследованиями. Это великолепный коллектив людей, которые за долгие годы оказали важное влияние на развитие компьютерных систем; здесь были созданы Unix, Си, Cи++ и множество инструментальных средств, которые сейчас используются вместе с Unix. У меня есть определенные административные обязанности, но главным образом создаю и сопровождаю программы, а время от времени пишу книги.

Нравится ли Вам работать в Bell Labs? Благодаря чему здесь ведутся столь передовые проекты?

Bell Labs — место фантастическое. Меня вполне удовлетворяет отношение к тому, что мне кажется важным, а люди меня окружают просто выдающиеся. Здесь очень доброжелательная атмосфера и в воздухе носится немало интересных идей (хотя бы потому, что лаборатория входит в состав Lucent, очень активно действующей на телекоммуникационном рынке), так что всегда есть возможность заняться решением увлекательных задач или созданием новых приложений.

Что Вас увлекает в программировании?

Приятно писать программы, которые делают что-то интересное, чтобы это ни было, поэтому наградой в таких случаях бывает то, что Фред Брукс называет «истинной радостью от работы». С другой стороны, и для меня это важнее всего, то, что моими программами будет пользоваться кто-то другой. По-моему это здорово, если кто-то скажет: «Посмотри, что я сделал с помощью твоей программы». Конечно, еще лучше, если он найдет в ней ошибку...

Обычные программисты приходят на работу к одиннадцати, а в час уже отправляются есть пиццу. Вы работаете по-другому?

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

Некоторые называют программирование «увлечением молодежи». Многие теряют к нему интерес к 30 годам. Вам по-прежнему нравится программировать, как и 20 лет назад?

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

Помимо чтения Ваших книг, каким еще образом программист может набраться знаний о практике программирования?

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

Что Вас интересует помимо компьютеров?

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

Как Вы отличаете хорошего программиста от плохого?

Хорошие программисты пишут хорошие программы; плохие их не пишут. Так что выяснить это можно, к примеру, прочитав их тексты. Еще один способ — сделать вывод о качестве программы самому на основе качества проектирования — что именно программа делает и как. Хороший программист создаст программу, которую удобно использовать, то есть ясную, элегантную, предсказуемую, компактную. Слишком многие программы такими качествами не обладают, поскольку или плохо написаны, или, возможно, на программистов, которые их создавали, оказывалось чересчур жесткое давление.

Ваша работа в основном сосредоточена на уровне написания программ. А какую роль, играет в успехе проектирование более высокого уровня?

Я почти всегда работал над программами, созданием которых руководили один или два человека и всегда это был исследовательский проект, так что такие вопросы, как соблюдение конкретных требований и управление проектом просто не поднимались. При разработке крупных программ, конечно, такого не бывает. В этом случае упреждающее планирование и управление разработкой просто обязательны. Большинство программных систем слишком сложно представить заранее и в этой ситуации требуется плотное взаимодействие между производителем и потребителем. Такого подхода необходимо строго придерживаться, но если это влияние слишком жесткое или ограничивающее, полученное в результате программное обеспечение, скорее всего, будет создано позже предполагаемого срока и, в любом случае, будет плохо решать задачи, для которых предназначено. Гарантия качества — хороший проект и его реализация, а также тщательное тестирование; это должно стать атрибутом любой программы, вне зависимости от того, действительно ли проект настолько крупный, что требует создания контролирующих механизмов.

Возможно, Вы наиболее известны как соавтор книги «Язык программирования Си». С какими языками вы работаете сейчас и почему?

Последние два года больше всего я программировал на Tcl/Tk, поскольку занимался разработкой пользовательских интерфейсов для различных систем и в первую очередь для беспроводных устройств. Я также экспериментировал с Java и Visual Basic. Я использовал awk при написании простых сценариев, для чего раньше, скорее всего, воспользовался бы sh. А что касается общецелевого программирования, которое предусматривает работу с реальными структурами данных или требует высокой производительности, я скорее всего, выберу Си и Cи++. До сих пор Си — мой самый любимый язык. По-моему, он представляет собой прекрасную комбинацию выразительности и эффективности.

Что вы думаете о Java? Оправдывает ли он поднятую вокруг него шумиху или это не более, чем кратковременное увлечение?

Я считаю, что Java достаточно удобен, хотя у меня довольно скромный опыт работы с ним. Возможно, такое ощущение у меня сложилось потому, что по синтаксису он очень похож на Си и C++. Сборка мусора — действительно вещь замечательная, поскольку позволяет избавиться от целого класса ошибок. Библиотеки Java становятся все больше и многочисленнее. У меня есть книга по Java в тысячу страниц. И в этой книге ничего не содержится, кроме названий функций, которые программист может вызвать. Что-то в этом неправильно. Кроме того, я думаю, что вынести окончательный вердикт пока нельзя. Некоторые программисты, чье мнение я уважаю, восхищаются Java, а другие, не менее квалифицированные, ругают его. Мои первые опыты работы с ним при создании пользовательских интерфейсов потерпели неудачу из-за несовместимости реализаций даже в одной операционной системе, но эти «трудности роста» со временем будут ликвидированы.

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

Написать книгу — дело очень непростое, так что разумнее (и производительнее) разделить это бремя с кем-нибудь еще. Кроме того, соавтор ищет ошибки и редактирует текст. Все мои соавторы были замечательными людьми, так что эта работа оказалась намного приятнее, чем если бы мне пришлось все делать в одиночку.

В большинстве случаев, каждый из авторов пишет определенные главы, по крайней мере, в первом варианте. После чего все переделывается и меняется столько раз, что первоначальное авторство восстановить просто невозможно, а стиль становится примерно одинаков. Есть одно важное исключение: справочный материал, из которого состоят приложения в книге по Си, полностью составлен Дэннисом Ричи. Он пишет такие материалы просто здорово, с тем, что Билл Плоджер однажды назвал «музыкальной точностью» и было бы глупо их править.

Такое впечатление, что Windows NT завоевывает компьютерный мир. Пользователи Unix, похоже, особенно критически относятся к продуктам Microsoft. Как, по-Вашему, соотносятся Unix и Windows NT?

Я никогда не работал с NT, хотя и использовал Windows 95 для доступа к приложениям ПК. Обе операционные системы, по-моему, слишком сложны для тех функций, которые выполняют. Такое ощущение, что уроки прошлого не нашли своего отражения в этих системах в той степени, в какой это могло бы быть сделано.

Что Вы думаете о Linux и о свободно распространяемом ПО?

Мой опыт работы с Linux, хоть и не очень большой, оказался весьма положительным. Я использовал Linux для организации Web-сервера в рамках курса, который я читал несколько лет назад. Сервер проработал два месяца без малейшего сбоя. И, возможно, работал бы всю мою оставшуюся жизнь, если бы мне не пришлось перевозить компьютер из Массачусетса в Нью-Джерси. Информацию о Linux легко найти и в основном это та же ОС Unix, которая мне давно известен. Система эффективна. И огромное сообщество знающих специалистов, которые ею занимаются, способно сделать Linux еще лучше. Возможность доступа к исходным текстам программ — в любом случае позволяет вам застраховаться от неприятностей: вы можете внести изменения, если что-то работает неверно. Открытые исходные тексты подходят не всем и не всегда, но это прекрасная идея — доверить реализацию базовых компонентов, таких как операционная системы, компьютеры и инструментальные средства, всем первоклассным специалистам. Они создают эталон для сравнения (коммерческие реализации должны представлять собой нечто большее, чтобы им сопутствовал успех) и ценную альтернативу для тех, кто не хочет быть привязан к конкретному поставщику. Я с полным одобрением отношусь к Linux и свободно распространяемым программам.

За многие годы Вы приняли участие в реализации самых известных проектов, в том числе в создании Си и Unix. Что, по-Вашему, окажется самым значительным Вашим вкладом в программирование?

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