Java Преступно Недооценена

Точка зрения невежественного студента-информатика

JAVA преступно недооценена

Вы, наверное, прочитали заголовок этого поста и подумали: «Что курит этот парень? Ява повсюду!» Вы правы, Java по-прежнему доминирует в отрасли и запускает некоторые из крупнейших в мире критически важных приложений.

Но я говорю не о распространении Java, я говорю об ажиотаже вокруг нее.

Я провожу много времени с неопытными программистами.

Что любят делать неопытные программисты? Будьте воодушевлены и самоуверенны в отношении таких инструментов, как языки программирования.

Никто из студентов CS, с которыми я встречаюсь, не восхищается Java, и я не думаю, что так должно быть.

Молодые/наивные разработчики (включая меня) часто попадают в ловушку фетишизации новых языков и инструментов в ущерб производительности и здравомыслию.

До работы в Halp (теперь принадлежащей $TEAM) у меня были почти романтические отношения с серверным TypeScript. Я считал экосистему node.js самой крутой штукой: мне нравилась идея транспилируемого кода, отладки в реальном времени, огромной библиотеки пакетов и даже странных и фрагментированных систем сборки.

Когда я действительно использовал его в разработке и поговорил с более опытными инженерами, волшебство быстро исчезло.

У меня была иррациональная привязанность к экосистеме JS, потому что это была горячая новинка; это был хайп.

Реальность не оправдала моих ожиданий.

Сегодня я наслаждаюсь замечательными вещами, которые я ожидал от JavaScript, приобретая опыт работы с Java. Я чувствую себя обманутым из-за того, что шумиха не привела меня к Java раньше.

На языке Java интересно писать, он продуктивен и имеет несправедливую репутацию динозавра среди новых разработчиков.



Эргономика — это то, что делает Java отличным языком программирования.

Это нельзя недооценивать: писать на Java просто одно удовольствие.

Во многом это связано с мастерством, которое JetBrains вкладывает в IntelliJ IDEA. Все заполняется автоматически, переход к определению происходит быстро, использование find работает хорошо, а рефакторинг прост. Однако в чем Java действительно проявляется, так это в опыте разработчиков по работе со сторонними библиотеками.



Зависимость от тяжелых рабочих нагрузок и отраслевые тенденции

Мой опыт ограничен, но я чувствую, что ветер сместился в сторону либерального использования внешних зависимостей.

Придумано не здесь уже не в моде, в моде - Не там изобретено .

В частности, разработчики JavaScript, скорее всего, будут включать сторонние библиотеки даже для таких тривиальных операций.

например, заполнение числа слева .

Я не думаю, что нынешняя зависимость от сторонних зависимостей особенно вредна, но изменения исходного API могут нанести вред нетипизированным базам кода JS/Python. При использовании сторонних библиотек в Java вы всегда точно знаете, какие типы нужно передать методу.

Самое главное, неправильное использование этой функции приведет к появлению красных волнистых линий в вашем редакторе.

Учитывая, что библиотеки широко используются, я думаю, что Java должна интересовать больше людей.



Номинальный набор экономит время

Динамическая/неявная/слабая/любая типизация имеет ряд недостатков.

Когда зависимость изменяет метод API и ваше приложение выходит из строя во время выполнения, а не во время сборки, это проблема.

Когда разработчику приходится возвращаться к реализации метода, чтобы выяснить, какие типы передать, это пустая трата времени.

Подсказки типов TypeScript и Python в некоторой степени решают эту проблему, но у них нет возможности проверять переданные типы во время выполнения без дополнительного кода.

Защита типов — моя наименее любимая функция TypeScript. По сути, это неявная типизация, которую вы должны реализовать самостоятельно и верить, что она реализована правильно.

На мой взгляд, это худшее из обоих миров.

Учтите следующее:

   

interface Dog { bark: () => void; } /* The developer has to manually implement a heuristic check for interface adherence! When they update the interface, they have to update the type guards too! */ function isDog(pet: object): pet is Dog { return (pet as Dog).

bark !== undefined; } const dog: any = {bark: () => console.log('woof')}; if (isDog(dog)) { // TS now knows that objects within this if statement are always type Dog // This is because the type guard isDog narrowed down the type to Dog dog.bark(); }

Есть что-то в объявлении типа И необходимости писать логику проверки для указанного типа, что меня действительно беспокоит. Приведенный выше код выглядит так , как будто кто-то использовал не тот инструмент. В отличие от определений TypeScript, системы номинальных типов Java разгружают мозг программиста, кристаллизуя определения типов и обеспечивая защиту типов по умолчанию.



Снятие ответственности за оптимизацию

Разработчики Java могут с уверенностью доверять JVM в создании лучших приложений.

Независимо от того, реализуют ли они многопоточное приложение или хранят большой объем данных в куче, они могут быть уверены, что не нанесут себе урон из-за управления памятью или гонок за данными.

Это преимущество прежде всего по сравнению с C++, который содержит множество пеших орудий.

Это часть эргономического опыта Java. Когда разработчику нужно меньше беспокоиться о технических деталях, он может больше сосредоточиться на решаемой проблеме.



Святой Грааль продуктивности

Сколько языков вы можете придумать, удовлетворяющих следующим условиям? Качественный менеджер пакетов и система сборки (Maven) Номинальный набор Отличное сообщество Автоматическая оптимизация Я думаю, что единственный подходящий инструмент — это Java, но дайте мне знать, если есть другие! редактировать: Как отметил Джвости Конкурент Java, Microsoft C#, обладает всеми этими характеристиками и дополнительными/новыми возможностями языка.

Я никогда не использовал C# вне игрового движка Unity, но собираюсь изучить его.



Удивительное отсутствие в университетской программе

В настоящее время я учусь в Университете Колорадо в Боулдере; это отличная школа, но она не совсем известна CS. Однако большая часть нашей школьной программы по информатике бессовестно украдена из CMU или Стэнфорда.

Во время учебы в CU я использовал следующие языки программирования: С++.

Этот язык был выбран для всех необходимых основных курсов: компьютерные системы, операционные системы, структуры данных и т. д. Этот язык — разумный выбор, поскольку он обеспечивает прямое управление памятью, создание модулей ядра и открывает множество задач и возможностей для обучения.

Питон и Джулия.

Как и следовало ожидать, эти языки были фаворитами профессоров исчисления и дискретной математики.

Скала.

Этот язык использовался в «Принципах языков программирования», в первую очередь из-за его функций функционального программирования и сопоставления шаблонов.

Хотя Scala использует JVM и взаимодействует с Java, ее опыт разработки сильно отличается от Java. Веб-языки (HTML/CSS/JS).

Они использовались только в одном курсе под названием «Техники и инструменты разработки программного обеспечения», посвященном тенденциям отрасли.

Я заканчиваю этот семестр, а Java ни разу не появился; Я думаю, это позор.



Заключение

Не существует единственно верного способа создания приложений, но я думаю, что Java не получает достаточного внимания, особенно среди стартапов и сообщества новичков в программировании.

Нетипизированные языки — полезные инструменты, но я не думаю, что они должны быть выбором по умолчанию для создания больших приложений.

Если вы являетесь полнофункциональным разработчиком и никогда широко не использовали Java, я думаю, вы будете приятно удивлены, если опробуете его в своем следующем проекте.

Java и JVM были очень популярны в 90-х и начале 2000-х, но я не думаю, что они когда-либо должны были исчезнуть! Мой опыт разработки с IntelliJ и Java достоин восхищения.

Мне любопытно, почему Java вообще потеряла свою популярность.

История программистской культуры плохо документирована, и если у вас есть понимание, Напиши мне или оставьте комментарий (к Реддит / Хакерские новости ).

Теги: #программирование #Образовательный процесс в IT #java

Вместе с данным постом часто просматривают: