Точка зрения невежественного студента-информатика
Вы, наверное, прочитали заголовок этого поста и подумали: «Что курит этот парень? Ява повсюду!» Вы правы, 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. По сути, это неявная типизация, которую вы должны реализовать самостоятельно и верить, что она реализована правильно.
На мой взгляд, это худшее из обоих миров.
Учтите следующее:
Есть что-то в объявлении типа И необходимости писать логику проверки для указанного типа, что меня действительно беспокоит. Приведенный выше код выглядит так , как будто кто-то использовал не тот инструмент. В отличие от определений TypeScript, системы номинальных типов Java разгружают мозг программиста, кристаллизуя определения типов и обеспечивая защиту типов по умолчанию.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(); }
Снятие ответственности за оптимизацию
Разработчики 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
-
Накопление И Поиск Информации
19 Oct, 24 -
Будущее Зависит От Тебя - 3
19 Oct, 24