Джошуа Блох: Совесть платформы Java
«Язык программирования Java исчерпал свой бюджет сложности с изменениями, внесенными в версии 5.0». Это поразительная фраза, прежде всего из-за того, кто ее сказал. Джошуа Блох потратил годы в Sun Microsystems на проектирование соответствующих дополнений, и релиз JDK 5.0, в формировании которого он участвовал, стал самым амбициозным расширением, которое когда-либо было у этого языка. Затем он сказал миру, что с него хватит. Этот инстинкт — следить за системой, которую он лично расширил, и мыслить бюджетами, а не функциями — это весь он в одной строке.
Саутгемптон, Колумбия, Питтсбург
Блох родился 28 августа 1961 года в Саутгемптоне, штат Нью-Йорк. Он получил степень бакалавра компьютерных наук в Школе инженерии и прикладных наук Колумбийского университета, а затем поступил в Университет Карнеги — Меллона для получения докторской степени, которую завершил в 1990 году. Его диссертация «Практический подход к репликации абстрактных объектов данных» была номинирована на премию ACM за выдающуюся докторскую диссертацию.
Название стоит прочитать дважды. Даже будучи аспирантом, ключевым словом в работе Блоха было «практический». Он не атаковал репликацию как теоретическую проблему в распределенных системах; он искал версию, которую инженеры могли бы реально развернуть для абстрактных объектов данных. Остаток своей карьеры он провел в том же узком, немодном промежутке между тем, что доказуемо правильно, и тем, что работающий программист может уверенно использовать.
Sun и Collections Framework
После периода работы в Transarc в качестве старшего системного проектировщика Блох перешел в Sun Microsystems, где стал выдающимся инженером и возглавил проектирование и реализацию нескольких элементов, которые делают Java узнаваемой Java. Java Collections Framework — самый крупный из них: набор интерфейсов и реализаций — списков, множеств, карт и алгоритмов, работающих с ними, — на которых с тех пор строится каждая программа на Java. Он также руководил пакетом java.math и механизмом утверждений языка, а также способствовал значительным улучшениям в JDK 5.0.
Это своеобразный вид авторства. Библиотека коллекций — это не приложение; это словарь. Миллионы программистов, которые никогда не слышали имени Блоха, проводят свою рабочую жизнь внутри существительных и глаголов, которые он выбрал, и форма их мышления ограничена формой его интерфейсов. Если бы он ошибся, это привело бы не к плохой программе, а к плохому языку для написания программ, навсегда.
Двадцать вопросов, восемь минут на часах и процентиль, измеренный по всем, кто его проходил. Без регистрации.
Пройти тест IQ →Effective Java
В 2001 году он опубликовал Effective Java, и книга сделала то, что редко удается книгам о языках программирования: она стала моральным авторитетом для сообщества. Структурированная как пронумерованная серия независимых пунктов, каждый из которых формулирует правило, а затем аргументирует его на основе реальных режимов сбоев, она получила премию Jolt в 2001 году. Второе издание в 2008 году выросло с пятидесяти семи до семидесяти восьми пунктов, не став при этом сложнее для чтения; третье вышло в 2017 году.
Он написал еще две книги с соавторами. Java Puzzlers с Нилом Гафтером в 2005 году — это антология ловушек языка: кода, который ведет себя правильно согласно спецификации и безумно согласно интуиции, представленная как диагностическое упражнение. Java Concurrency in Practice в 2006 году была написана с пятью соавторами, включая Дага Ли, и стала стандартным справочником по самой сложной задаче, которую платформа ставит перед своими пользователями.
Google и проектирование API
Блох был главным Java-архитектором Google с июня 2004 по август 2012 года. Именно там его главная забота кристаллизовалась в публичный аргумент. Его доклад на конференции 2006 года «Как спроектировать хороший API и почему это важно» рассматривает проектирование интерфейсов как дисциплину, связанную с рисками, а не как вопрос вкуса, на том основании, что API — это контракт, который нельзя пересмотреть. Он конкретно описал разочарование: в Google он не мог предоставить альтернативные реализации для определенных классов, потому что они были объявлены как конкретные типы, а не как интерфейсы — решение, принятое много лет назад кем-то другим, что, как он выразился, является тем типом ограничений, которые «обычные разработчики чувствуют каждый день».
Его советы имеют постоянный привкус: смирение перед собственным суждением. Не повторяйтесь; обращайтесь к устоявшейся библиотеке, особенно для параллелизма, вместо того чтобы писать свою собственную. Не доверяйте ощущению, что общие предупреждения о преждевременной оптимизации не применимы к другим людям — «легко почувствовать, что общие предупреждения о преждевременной оптимизации не применимы к вам, потому что вы просто знаете, какой код критичен по времени». И читайте The Elements of Style, потому что «хорошее программирование и хорошее письмо — это и то, и другое о ясности и экономии выражения».
Почему Джошуа называют гением
Речь идет не о чистом изобретении, а о более редкой вещи: способности видеть программное обеспечение с позиции незнакомца, которому придется его использовать, и проектировать его с учетом вероятных ошибок этого незнакомца, а не собственной компетентности. API в понимании Блоха — это язык, навязанный людям, которые никогда не давали на это согласия и не могут его изменить, что делает проектирование упражнением по предвидению злоупотреблений в масштабе, на десятилетия вперед. Collections Framework — тому доказательство: словарь, используемый огромной долей всех работающих программистов, достаточно правильный, чтобы сохраниться в значительной степени неизменным. Вторая часть — кодификация: Effective Java взяла неявный опыт, который раньше жил только в головах нескольких инженеров платформы, и превратила его в переносимые, аргументируемые правила.
Контраргумент заслуживает упоминания. Блох не создал новую компьютерную науку. Его диссертация была номинирована на премию за выдающуюся диссертацию, но не получила ее; его самая известная работа — книга лучших практик, что является курированием и суждением, а не открытием. Зарегистрированные награды — это премия коммерческого издательства и список журнала, а не главные исследовательские награды в области, и ни один из проконсультированных здесь источников не фиксирует, чтобы кто-то называл его гением. Collections Framework был большой командной работой, которую он возглавлял, а не сольной композицией. Справедливый вердикт заключается в том, что Блох — выдающийся практик и учитель инженерного суждения — дисциплины, которая в программном обеспечении значит больше, чем новизна, и получает гораздо меньше признания.
Наследие
Он продолжал формировать язык после ухода из Sun, совместно предлагая блоки автоматического управления ресурсами и выражения краткого создания экземпляров в качестве подходов к замыканиям; блоки ARM попали в JDK 7. В декабре 2004 года Java Developer's Journal назвал его одним из сорока самых важных людей в мире программного обеспечения. С тех пор он вернулся в Университет Карнеги — Меллона, где является профессором практики на кафедре программных и социальных систем — титул, который читается как резюме его карьеры, поскольку практика всегда была главным.
Мера работы в том, что ее влияние не атрибутируется. Где-то сегодня программист, который никогда не читал ни строчки прозы Блоха, потянется к интерфейсу вместо конкретного класса или откажется вручную создавать примитив параллелизма, потому что коллега однажды сказал ему не делать этого, прочитав об этом в пронумерованном пункте книги.
