Что не так с Java?

Меня долгое время мучил вопрос, почему приложения на Java такие тормозные? Если верить синтетическим тестам на The Computer Language Benchmarks Game, то в среднем приложения на Java работают всего-то в 2 раза медленнее при использовании памяти в 10 раз больше по отношению к C++ приложениям. В принципе, это не такой уж и большой разрыв. Хотя в этих тестах нет приложений на Objective-C, я думаю что результат для был-бы приблизительно тем же, ну может памяти тратилось бы не в 10, а в 5 раз больше, а ведь c приложениями на Objective-C можно нормально работать. Так в чем же дело?

Ответ пришел нежданно-негаданно. Заинтересовавшись Andoid, а как всем известно, приложения для него пишутся именно на Java, я похоже наткнулся на ответ. Как это ни печально, дело в программистах. Разработчики Java живут в мире неограниченных ресурсов – бесконечной памяти, бесконечного дискового пространства и бесконечной производительности процессора. И в результате мы имеем очень сильное усложнение ПО с потерей производительности в угоду читабельности и простоты разработки. И если такая стратегия работает для корпоративного ПО, где пользователь будет работать с тем что ему дали (как бы то г-но что ему дали не работало), а мощность серверов действительно высока, то десктопное ПО, и уж тем более мобильно ПО начинает сталкиваться с серьезными проблемами.

Изучая примеры Open Source приложений под Android просто диву даешься, насколько безграмотно они написаны с точки зрения ограничения используемых ресурсов. Куча бесполезных абстракций, нагромождение паттернов (привет не понимаю зачем была создана GoF) и совершенно бездумное использование памяти. Достаточно показательный момент – основные советы разработчикам под Android сводятся к тому, что надо плодить меньше сущностей, больше думать о сложности используемых алгоритмов и менее фанатично относиться к ООП. Создается ощущение что появление GC, упрощение разработки и отдаление от проблем среды исполнения вызвало сильнейшую деградацию разработчиков.

Одно радует, теперь понятно почему на десктопах количество приложений написанных на C# или Java ничтожно мало

5 Comments Что не так с Java?

  1. Azzx

    Ну про GoF давно известно, что его придумали чтобы было чем пользоваться индийскому программисту, когда своих мозгов не хватает.
    Меня вот всегда вгоняют в недоумение люди, которые, когда их спрашиваешь за каким … тут столько всего напихано – начинают нести пургу про умные указатели, Александерску, или ещё чего они там где напихали. Такое ощущение, что у них в голове небольшой комп с цитатами из книг, а своих мозгов совсем нету.

    Reply
  2. Alexander Stavonin

    Честно сказать, меня такой подход тоже крайне удивляет. Такое ощущение, что код в который впихнули как можно больше паттернов по умолчанию будет работать лучше чем код вез них. Особенно ярко это конечно в Java и C# проявляется, плюсы сия напасть обошла стороной

    Reply
  3. henson

    Какие именно абстракции вы считаете бесполезными? Все эти советы относительно мобильной Java существуют еще со времен J2ME и мобильная Java как раз более менее работает на куче девайсов.
    Кроме того существует огромное множество десктопного софта написанного C# (windows) и Java (linux/windows).

    Reply
  4. Alexander Stavonin

    Я считаю бесполезной увлечениями абстракциями ради абстракций. Этим очень сильно грешат Java и C# разработчики.
    Про много десктопного софта эт сильно. Ну, я полагаю что это как с неуловимым Джо, все о нем слышали, но никто не видел

    Reply
  5. seacat

    Хочется побольше конкретных примеров. Ну хотя бы несколько наиболее характерных примеров бесполезных абстракций и бездумного использования памяти. Просто я допустим в серьезных проектах на C++ не участвовал, поэтому с ходу не сразу могу понять, что сишники считают бездумным.

    Reply

Leave a Reply