Читаем Кодеры за работой. Размышления о ремесле программиста полностью

Наконец мы обнаружили кое-кого в Ericsson, кому нужен был новый язык программирования — или, скорее, им нужен был более лучший подход в программировании телефонии. Мы встречались с ними раз в неделю, так продолжалось полгода, может быть, месяцев девять. Общая идея была такова, что они узнают от нас о программировании, а мы от них — о телефонии, о том, что тут за проблема. Это было очень трудно, но при этом стимулировало нас. Язык изменился, поскольку перед нами были живые люди, которые пользовались им, проводили исследования. По результатам они говорили: «Хорошо, но слишком медленно», — и указывали, что все должно работать в 70 раз быстрее. Итак, мы взялись выполнить их требования, заставить язык работать в 70 раз быстрее за два года или около того.

У нас было несколько фальстартов, были и тяжелые моменты. И была одна крупная ошибка. Никогда не обещайте людям, что все будет работать с такой-то скоростью, не осуществив реализации. Но наконец мы поняли, как это сделать. Я написал компилятор на Прологе, Роб занимался библиотеками и разными программами. Примерно после двух лет работы я подумал, что смогу реализовать эту абстрактную машину на Си, — так мне впервые довелось писать на Си. Майк Уильяме, случившийся рядом, посмотрел мой Си-код и сказал: «Это самый плохой Си-код, который я видел в жизни. Никуда не годится». Не думаю, что было настолько плохо, но Майку не нравилось. Поэтому Майк создал виртуальную машину на Си, а я — компилятор на Прологе. Затем компилятор скомпилировал сам себя, произвел байт-код, мы вставили его в машину, поменяли грамматику и синтаксис, скомпилировали компилятор в нем самом и получили нечто такое, что могло самозагружаться. Дело пошло. Это был уже не Пролог, а новый язык.

Сейбел: Было что-нибудь, что оказалось трудно встроить в Erlang?

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

Сейбел: Если бы вы создавали большую программу для последовательной обработки изображений, то писали бы код для преобразования картинок на другом языке?

Армстронг: Да, на Си, или на ассемблере, или на чем-то еще. Или на диалекте Erlang с последующей кросс-компиляцией между Erlang и Си. Создать диалект — своего рода предметно-ориентированный язык[57]. Можно было бы также написать программы на Erlang, которые бы генерировали программы на Си, а не писать последние от руки. Но целевой язык — Си, или ассемблер, или что-то еще. Писать от руки или генерировать? Интересный вопрос. Я склоняюсь к генерированию — это проще.

Но я бы использовал структуру Erlang. У меня есть кое-что для создания семейного альбома и всего такого. Там я использую ImageMagik и несколько консольных скриптов, но управляю всем из Erlang. Я просто пишу обертки вокруг них, запускаю osxommand и потом команду в ImageMagik. Обертки — это удобно. Я бы не хотел обрабатывать картинки в Erlang, писать это на Erlang глупо. Си для этого подходит куда больше.

Сейбел: И, кроме того, уже написан ImageMagik.

Армстронг: Вот это меня совершенно не волнует. Если бы я писал это на OCaml, я бы взял и написал это, потому что в OCaml можно достичь эффективности такого рода, но Erlang делать этого не может. Будь я OCaml-программистом, что бы я сделал? Переписать ImageMagik? Поехали!

Сейбел: Просто потому, что написать свое увлекательнее?

Армстронг: Я люблю программировать, так почему бы и нет? Я всегда говорил, что Erlang не годится для обработки изображений, — я и не пробовал делать в нем это. Наверное, ничего не выйдет, хотя кто знает? Надо попробовать. Хм, занятно. Не искушайте меня.

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

Сейбел: Вы делали что-нибудь специально для улучшения своих программистских навыков?

Армстронг: Да нет. Я изучал незнакомые мне языки, но вовсе не с целью совершенствоваться в программировании. Может быть, с целью улучшить навыки проектирования языков.

Мне нравится разбираться в том, как все работает. Хороший способ проверки — реализовывать все самому. Для меня программирование — это не ввод кода в машину, это процесс понимания. Программирование есть понимание. Я люблю понимать, как все устроено. Почему бы мне не реализовать программу для JPEG, о которой мы говорили? Ведь мне нравится разбираться в вейвлет-преобразованиях. А программирование как раз позволяет в них разобраться. Зачем я создаю интерфейс для X Windows? Чтобы разобраться, как работает Х-протокол.

Перейти на страницу:

Похожие книги

Адмирал Советского Союза
Адмирал Советского Союза

Николай Герасимович Кузнецов – адмирал Флота Советского Союза, один из тех, кому мы обязаны победой в Великой Отечественной войне. В 1939 г., по личному указанию Сталина, 34-летний Кузнецов был назначен народным комиссаром ВМФ СССР. Во время войны он входил в Ставку Верховного Главнокомандования, оперативно и энергично руководил флотом. За свои выдающиеся заслуги Н.Г. Кузнецов получил высшее воинское звание на флоте и стал Героем Советского Союза.В своей книге Н.Г. Кузнецов рассказывает о своем боевом пути начиная от Гражданской войны в Испании до окончательного разгрома гитлеровской Германии и поражения милитаристской Японии. Оборона Ханко, Либавы, Таллина, Одессы, Севастополя, Москвы, Ленинграда, Сталинграда, крупнейшие операции флотов на Севере, Балтике и Черном море – все это есть в книге легендарного советского адмирала. Кроме того, он вспоминает о своих встречах с высшими государственными, партийными и военными руководителями СССР, рассказывает о методах и стиле работы И.В. Сталина, Г.К. Жукова и многих других известных деятелей своего времени.Воспоминания впервые выходят в полном виде, ранее они никогда не издавались под одной обложкой.

Николай Герасимович Кузнецов

Биографии и Мемуары
100 великих гениев
100 великих гениев

Существует много определений гениальности. Например, Ньютон полагал, что гениальность – это терпение мысли, сосредоточенной в известном направлении. Гёте считал, что отличительная черта гениальности – умение духа распознать, что ему на пользу. Кант говорил, что гениальность – это талант изобретения того, чему нельзя научиться. То есть гению дано открыть нечто неведомое. Автор книги Р.К. Баландин попытался дать свое определение гениальности и составить свой рассказ о наиболее прославленных гениях человечества.Принцип классификации в книге простой – персоналии располагаются по роду занятий (особо выделены универсальные гении). Автор рассматривает достижения великих созидателей, прежде всего, в сфере религии, философии, искусства, литературы и науки, то есть в тех областях духа, где наиболее полно проявились их творческие способности. Раздел «Неведомый гений» призван показать, как много замечательных творцов остаются безымянными и как мало нам известно о них.

Рудольф Константинович Баландин

Биографии и Мемуары
100 великих интриг
100 великих интриг

Нередко политические интриги становятся главными двигателями истории. Заговоры, покушения, провокации, аресты, казни, бунты и военные перевороты – все эти события могут составлять только часть одной, хитро спланированной, интриги, начинавшейся с короткой записки, вовремя произнесенной фразы или многозначительного молчания во время важной беседы царствующих особ и закончившейся грандиозным сломом целой эпохи.Суд над Сократом, заговор Катилины, Цезарь и Клеопатра, интриги Мессалины, мрачная слава Старца Горы, заговор Пацци, Варфоломеевская ночь, убийство Валленштейна, таинственная смерть Людвига Баварского, загадки Нюрнбергского процесса… Об этом и многом другом рассказывает очередная книга серии.

Виктор Николаевич Еремин

Биографии и Мемуары / История / Энциклопедии / Образование и наука / Словари и Энциклопедии