Язык.
Мое мнение таково, что особые свойства самого языка Java приводят нас к мощным возможностям IDE и инструментов. Эти возможности особенно полезны, когда вам приходится иметь дело с очень большой кодовой базой.
Если я попытаюсь перечислить эти свойства, это будет:
- конечно сильная статическая типизация
- грамматика языка - это грамматика LALR (1) - так что создать синтаксический анализатор легко
- полные имена (пакеты)
То, что у нас есть в IDE, например Eclipse:
- большие возможности изучения очень больших баз кода. Вы можете однозначно найти все ссылки, иерархию вызовов, использование классов или открытых и защищенных членов - это очень ценно, когда вы изучаете код проекта или собираетесь что-то изменить.
- очень полезный редактор кода. Я заметил, что когда я пишу код в java-редакторе Eclipse, я на самом деле печатаю вручную только имена calsses или методов, а затем я нажимаю Ctrl + 1, и редактор генерирует много вещей для меня. И особенно хорошо, что Eclipse побуждает вас сначала писать код и даже до того, как код будет полностью написан. Таким образом, вы делаете вызов метода перед созданием метода, а затем редактор генерирует заглушку метода для вас. Или вы добавляете дополнительные аргументы в метод или конструктор в том месте, где вы его вызываете, - и редактор меняет подпись для вас. И еще более сложные вещи - вы передаете некоторый объект методу, который принимает некоторый интерфейс - и если класс объекта не реализует этот интерфейс - редактор может сделать это за вас ... и так далее. Там много интересных вещей.
Существует множество инструментов для Java. В качестве примера одного замечательного инструмента я хочу упомянуть Maven. На самом деле, я считаю, что повторное использование кода действительно возможно только тогда, когда у нас есть такой инструмент, как Maven. Инфраструктура, построенная вокруг нее, и интеграция с IDE делают возможным очень интересное решение. Пример: у меня установлен плагин m2eclipse. У меня есть новый пустой проект в Eclipse. Я знаю, что есть класс, который мне нужно использовать (фактически использовать) где-то в репозиториях, например, скажем, StringUtils. Я пишу в своем коде «StringUtils», редактор Eclipse говорит мне, что в проекте такого класса нет, и подчеркивает его красным. Я нажимаю Ctrl + 1 и вижу, что есть возможность искать этот класс в общедоступном хранилище (фактически в индексе, а не в самом хранилище). Были найдены некоторые библиотеки, я выбираю одну из них в определенной версии, и инструмент загружает флягу, настраивает путь моего проекта, и я уже получил все, что мне нужно.
Так что все дело в производительности программиста.
JVM.
Мое мнение таково, что JVM (особенно HotSpot от Sun) в настоящее время является одним из самых интересных компонентов программного обеспечения. Конечно, ключевым моментом здесь является производительность. Но текущая реализация HotSpot JVM исследует самые передовые способы достижения такой действительно высокой производительности. Он исследует все возможные преимущества своевременной компиляции по сравнению со статическим, собирает статистику использования кода перед JIT-компиляцией, оптимизирует, когда это возможно, виртуальные вызовы, может включать в себя намного больше вещей, чем статический компилятор, и так далее. И самое замечательное в том, что все это в JVM, но не в самом языке (как, например, в C #). На самом деле, если вы только изучаете язык Java, я настоятельно рекомендую вам изучить детали современных реализаций JVM, чтобы вы знали, что действительно сказывается на производительности, а что нет, и не вносите ненужных оптимизаций в код Java. и не бойтесь использовать все возможности языка.
Итак ...
на самом деле все дело в IDE и инструментах, но по какой-то причине они у нас есть для Java, а не для какого-либо другого языка или платформы (конечно, .NET - отличный конкурент в мире Windows).