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

Я написал схему для MySQL, сначала главного устройства, а потом для устройства отслеживания файлов. И меня осенило: «Черт! Да эту роль может выполнять протокол HTTP! Это же совсем не сложно».

Помню, как пришел на работу, всю ночь обдумывая это. У нас в здании была общая комната для совещаний — большая и мрачная. «Итак, ребята, прекращаем работу. Все идем вниз и будем рисовать». Я говорил это каждый раз, когда нам предстояло заняться проектированием, и мы просто находили доску, на которой можно было бы рисовать.

Я объяснил схему, и кто с кем должен общаться, и кто что будет делать с запросом. Потом мы поднялись наверх, и я первым делом заказал все оборудование, потому что на его доставку уходило недели две. Потом мы занялись кодированием, надеясь завершить его до получения оборудования. Нам всегда что-то угрожало. Что-нибудь постоянно ломалось, так что нам все время приходилось создавать новые компоненты инфраструктуры.

Сейбел: Если бы кто-нибудь в самом начале сказал: «Вам нужно знать А, Б и В», — упростило бы это вашу жизнь?

Фицпатрик: Всегда легче сделать что-то как надо с первого раза, а не переносить с уже работающего сервиса. Это всегда большой геморрой. Все, о чем я говорил, вы можете сделать на одном компьютере. Проектируете систему таким образом, чтобы было с чего начать. И не делаете предположений о возможности объединений вот этих пользовательских данных с этими и так далее. Предположим, вам нужно загрузить 20 объектов, и ваша реализация может загрузить их из одной таблицы, но код более высокого уровня, которому нужны эти 20 объектов, может собирать их с нескольких машин. Если бы я делал так с самого начала, куда меньше было бы головной боли с переносом.

Сейбел: Итак, урок в основном таков: «Имейте план на тот день, когда ваши данные перестанут влезать в одну базу».

Фицпатрик: Думаю, сегодня это уже общеизвестный факт в сообществе веб-разработчиков. Сейчас многие перегибают палку, считая что их сайт разрастется до неимоверных размеров. Но в то время все считали, что Apache и MySQL достаточно.

Сейбел: Думаю, вы разрабатывали все эти штуки не только по необходимости, но вам было интересно делать все это.

Фицпатрик: Конечно. Я определенно пытался найти повод применить или изучить что-то новое. Никогда не изучишь что-либо, не написав для этого программу и не начав жить и дышать этим. Одно дело выучить язык ради удовольствия, но нельзя говорить о том, что знаешь его, пока не напишешь на нем большую сложную систему.

Сейбел: Итак, какие языки вы можете назвать своими, какими языками вы жили и дышали?

Фицпатрик: Perl. Си. Когда-то Бейсик, но не уверен, что его стоит учитывать. Еще я много писал на Лого. В школе у нас были уроки по Лого. Ребята что-то рисовали, а я сумел выйти из графического режима — это можно сделать, когда знаешь, как, — и писал функции. Учитель подошел и сказал: «Что ты делаешь? Ты должен рисовать домики». — «Нет, я пишу на Лого. Посмотрите». — «Ты все делаешь не так». В конце урока у меня уже была библиотека, позволяющая рисовать буквы алфавита любого размера и повернутые под любым углом. Я мог выводить целые сообщения на волнистых баннерах, которые отдалялись, приближались и все такое, и все стали спрашивать: «Какого черта?» Не знаю, считать этот язык или нет.

Но я много писал на Perl и на Си, потом в колледже много писал на C++ по работе и для Windows. Потом я забыл C++, за ненадобностью, но за последний год, работая в Google, я много писал на C++, Python и Java. Я много писал на Java, когда этот язык только появился, но потом он мне осточертел. Сейчас я опять много пишу на Java, и он меня уже снова достал.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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