Java's Cover
Эссе Пола Грэма (апрель 2001 года) — это не критика самого Java, а разбор того, как работает «радар хакера»: чутьё опытных программистов на хорошие и плохие технологии. Грэм признаётся, что никогда не писал на Java и судит лишь «по обложке», и приводит двенадцать признаков, которые вызывают у него подозрение: язык слишком агрессивно раскручивают, он «нацелен низко» (Gosling по его словам проектировал Java как ещё один C++ для не самых сильных программистов), у него есть скрытый мотив — план Sun подорвать Microsoft, его никто не любит, людей заставляют им пользоваться, его делает комитет, он бюрократичен и рассчитан на крупные организации. Грэм проводит контраст между языками «для других» (Cobol, PL/I, Pascal, Ada, C++) и языками «для своих создателей» (C, Perl, Smalltalk, Lisp), и замечает, что Java нравится «не тем» людям — пиджакам, программистам больших компаний и студентам. Он также указывает на проблемы Sun (дешёвые серверы Intel на FreeBSD против Solaris) и на симпатию Министерства обороны к Java как на самый тревожный признак — последним языком, который полюбило DoD, был Ada. В заключение он подчёркивает, что отбрасывает технологии «по запаху», как раньше отмахнулся от Cobol, Ada, Visual Basic, CORBA и других, и допускает, хоть и считает это крайне маловероятным, что в случае Java может ошибаться.
Апрель 2001
Это эссе выросло из разговоров, которые у меня были с несколькими другими программистами о том, почему Java кажется подозрительным. Это не критика Java! Это разбор конкретного случая работы хакерского радара.
Со временем у хакеров вырабатывается нюх на хорошие (и плохие) технологии. Мне показалось интересным попробовать записать, что именно заставило меня заподозрить неладное в Java.
Некоторые из тех, кто это прочитал, считают, что это интересная попытка написать о том, о чём раньше не писали. Другие говорят, что я нарвусь на неприятности, потому что буду выглядеть так, будто пишу о вещах, которых не понимаю. Так что, на всякий случай, если это хоть как-то поможет, позвольте мне прояснить: я пишу здесь не о Java (которым я никогда не пользовался), а о хакерском радаре (о котором я много думал).
Поговорка «о книге не судят по обложке» возникла в те времена, когда книги продавались в простых картонных обложках, чтобы каждый покупатель переплёл их по своему вкусу. В те дни о книге действительно нельзя было судить по обложке. Но издательское дело с тех пор продвинулось: современные издатели усердно работают над тем, чтобы обложка стала именно тем, по чему о книге судить можно.
Я провожу много времени в книжных магазинах и чувствую, что к этому моменту научился понимать всё, что издатели хотят сообщить мне о книге, а может, и немного больше. То время, что я провёл не в книжных магазинах, я провёл в основном перед компьютерами, и чувствую, что в какой-то мере научился судить и о технологиях по обложке. Может, это просто везение, но я уберёг себя от нескольких технологий, которые оказались настоящей дрянью.
Пока что Java кажется мне дрянью. Я никогда не писал программ на Java, никогда не делал больше, чем бегло проглядывал справочники по нему, но у меня есть подозрение, что он не станет очень успешным языком. Может оказаться, что я ошибаюсь; делать предсказания о технологиях — занятие опасное. Но, как бы там ни было, в качестве своего рода капсулы времени, вот почему мне не нравится, как Java выглядит:
1. Его так энергично раскручивали. Настоящим стандартам не нужно продвижение. Никому не приходилось продвигать C, или Unix, или HTML. Настоящий стандарт обычно уже устоялся к тому моменту, когда о нём узнаёт большинство людей. На экране хакерского радара Perl такой же большой, как Java, или даже больше — исключительно за счёт собственных достоинств.
2. Он нацелен низко. В оригинальном white paper по Java Gosling прямо говорит, что Java был спроектирован так, чтобы не быть слишком трудным для программистов, привыкших к C. Он задумывался как ещё один C++: C плюс несколько идей, взятых из более продвинутых языков. Подобно создателям ситкомов, или фастфуда, или пакетных туров, проектировщики Java сознательно создавали продукт для людей не таких умных, как они сами. Исторически языки, спроектированные для использования другими людьми, оказывались плохими: Cobol, PL/I, Pascal, Ada, C++. Хорошими же были те языки, которые проектировались для самих их создателей: C, Perl, Smalltalk, Lisp.
3. У него есть скрытые мотивы. Кто-то однажды сказал, что мир стал бы лучше, если бы люди писали книги только потому, что им есть что сказать, а не потому, что им хочется написать книгу. Точно так же причина, по которой мы постоянно слышим о Java, не в том, что ему есть что сказать о языках программирования. Мы слышим о Java как о части плана Sun по подрыву Microsoft.
4. Его никто не любит. Программисты на C, Perl, Python, Smalltalk и Lisp любят свои языки. Я никогда не слышал, чтобы кто-то сказал, что любит Java.
5. Людей заставляют им пользоваться. Многие знакомые мне люди, использующие Java, используют его потому, что чувствуют себя обязанными. Либо это то, что они посчитали необходимым сделать, чтобы получить финансирование, либо то, чего, по их мнению, хотели бы клиенты, либо то, что им велело делать руководство. Это умные люди; если бы технология была хороша, они бы пользовались ею добровольно.
6. У него слишком много поваров. Лучшие языки программирования разрабатывались небольшими группами. Java, похоже, управляется комитетом. Если он окажется хорошим языком, это будет первый раз в истории, когда комитет спроектировал хороший язык.
7. Он бюрократичен. Из того немногого, что я знаю о Java, кажется, что там существует масса протоколов для выполнения тех или иных вещей. По-настоящему хорошие языки устроены не так. Они позволяют тебе делать то, что ты хочешь, и не путаются под ногами.
8. Он псевдомодный. Sun теперь делает вид, будто Java — это низовая, open-source инициатива по созданию языка, как Perl или Python. Только вот этот язык случайно оказался под контролем гигантской компании. Так что у него, скорее всего, будет та же серая неуклюжесть, что и у всего остального, что выходит из большой компании.
9. Он спроектирован для крупных организаций. У крупных организаций цели иные, чем у хакеров. Им нужны языки, которые (как считается) подходят для использования большими командами посредственных программистов — языки со свойствами, которые, подобно ограничителям скорости в грузовиках U-Haul, не дают глупцам нанести слишком много ущерба. Хакеры не любят язык, который разговаривает с ними свысока. Хакерам нужна просто мощь. Исторически языки, спроектированные для крупных организаций (PL/I, Ada), проигрывали, а хакерские языки (C, Perl) побеждали. Причина: сегодняшний хакер-подросток — это завтрашний CTO.
10. Он нравится не тем людям. Программисты, которыми я восхищаюсь больше всего, в целом не очарованы Java. А кому Java нравится? Пиджакам, которые не отличают один язык от другого, но знают, что постоянно слышат о Java в прессе; программистам в больших компаниях, которые поражены, обнаружив, что есть что-то даже лучше, чем C++; и студентам-зубрилам, готовым полюбить всё, что может помочь им найти работу (а это будет на экзамене?). Мнения этих людей меняются с каждым дуновением ветра.
11. Его папочка в затруднительном положении. Бизнес-модель Sun подрывается с двух сторон. Дешёвые процессоры Intel, того же типа, что используются в настольных машинах, теперь более чем достаточно быстры для серверов. А FreeBSD, похоже, как минимум не хуже подходит в качестве серверной ОС, чем Solaris. Реклама Sun намекает, что для приложений промышленного масштаба нужны серверы Sun. Если бы это было правдой, Yahoo стояла бы первой в очереди за серверами Sun; но когда я там работал, все серверы были коробками на Intel под FreeBSD. Это не сулит Sun ничего хорошего. Если у Sun начнутся проблемы, они могут утянуть Java за собой.
12. Его любит Министерство обороны. Министерство обороны поощряет разработчиков использовать Java. Это кажется мне самым изобличающим признаком из всех. Министерство обороны прекрасно (хотя и дорого) справляется с защитой страны, но оно обожает планы, процедуры и протоколы. Их культура — противоположность хакерской культуре; в вопросах программного обеспечения они склонны делать неправильные ставки. В последний раз, когда Министерству обороны действительно понравился язык программирования, это был Ada.
Имейте в виду: это не критика Java, а критика его обложки. Я знаю Java недостаточно хорошо, чтобы любить его или не любить. Это лишь объяснение того, почему я не чувствую особого желания его изучать.
Может показаться легкомысленным отбрасывать язык, даже не попробовав написать на нём программы. Но это то, что приходится делать всем программистам. Технологий вокруг слишком много, чтобы изучить их все. Приходится учиться судить по внешним признакам, что из этого будет стоить твоего времени. Точно так же легкомысленно я отмахнулся от Cobol, Ada, Visual Basic, IBM AS400, VRML, ISO 9000, протокола SET, VMS, Novell Netware и CORBA, среди прочих. От них просто пахло не так.
Может оказаться, что в случае с Java я ошибаюсь. Может оказаться, что язык, продвигаемый одной большой компанией ради подрыва другой, спроектированный комитетом для «массовой» аудитории, раскрученный до небес и обожаемый Министерством обороны, тем не менее окажется чистым, красивым, мощным языком, на котором я обожал бы программировать. Может быть, но это кажется крайне маловероятным.