Вот и текст. Я не стал доводить его до красивого вида -- пусть будет таким, как я его вчера набросал. Даже перечитывать не стал из принципа.
Люблю:
1. Значительный шаг в сторону кроссплатформености, которую при программировании на Java значительно легче обеспечить, чем например, на C++.
2. J2EE.
3. Мне за платят за то, что я этим занимаюсь.
Ненавижу:
1. Агрессивным маркетингом были задавлены конкурирующие технологии, которые по техническим характеристикам превосходили Java. Так, в области создания applet'ов был плагин для Tcl, были разработки по использованию Forth. В области представления переносимого кода был задавлен Juice, идеи которого живут сейчас в хороших JIT'ах и даже с .NET.
2. Уродливость языка, полученного нелепым копированием C++ "чтобы программистам было" проще переучиваться. При этом наплевали на крайне полезные наработки других языков: контракты, документирование, пред- и постусловия, инварианты в Eiifel, шаблоны с C++ и Ada, множественная диспетчеризация a la CLOS или Sather, множественное наследования, которое сделано даже в надстройках над Java (Kiev, к примеру), полноценная раздельная компиляция (Ada, Modula-2,3), отсутствие которой, на мой взгляд, и объясняет многие уродства J2EE. За один уродский switch, тупо копирующий C, нужно зажарить авторов языка в тостере. При наличии "instanceof" нет аналога typecase из третьей модулы или оберона, который явно удобнее и безопаснее.
Отказ от концепции заымканий привел к уродливому использованию анонимных классов в гуях.
3. Отказ от препроцессора. Кто писал свой логгер или использовал log4j -- поймет.
4. Нет виртуальных конструкторов, наследования конструкторов. Наследование статических методов сделано столь антиинтуитивно, что тест, который я даю на собеседованиях, за три года прошел 1(один) человек. Не исключено, что он просто галочку случайно не в той графе поставил.
5. В языке нет итераторов -- хотя бы la foreach в PHP. Лучше -- в стиле всеми забытого CLU.
6. Понимаю, почему нет перечислимых типов. Но все равно тоскую по ним. К примеру, приватный перечислимый тип в final-классе абсолютно безопасен.
7. Если язык проектировали просто недалекие люди, то эпитет для первой версии системной библиотеки я даже найти не могу. Кошмарные стримы, коллекции, в каждой из которых идентичные по семантике методы имеют совершенно разные названия -- все это пришло заново переделать для J2SE.
8. Те же притензии к AWT, который при первой возможности был заменен на swing. Кроме того, неудачность и тормознутость гуев едва не поставила крест на самой концепции переносимого пользовательского софта.