Кофе-брейк #131. Роль Java в разработке в веб- и мобильных приложений. Функциональное программирование — за и против

Статья из группы Random

Роль Java в разработке в веб- и мобильных приложений

Источник: DZone Java — один из наиболее используемых языков программирования. Он активно применяется в разработке корпоративных, веб- и мобильных приложений. Java имеет применение в ведущих технических отраслях, от Data Science до AR/VR. Несмотря на то, что корпоративная разработка на Java, — наиболее популярный вариант использования этого языка, веб- и мобильные приложения также считаются одной из сфер применения Java. Кофе-брейк #131. Роль Java в разработке в веб- и мобильных приложений. Функциональное программирование — за и против - 1Давайте посмотрим, почему за последние два десятилетия разработка на Java получила такое распространение в вебе и на мобильных устройствах. Одна из основных причин использовать Java для веба и мобильных устройств состоит в том, что это высокопроизводительный язык программирования. Он гарантирует, что ваши приложения смогут работать быстро и без каких-либо ошибок обработки. Существуют также и другие причины:

1. Открытый исходный код

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

2. Кроссплатформенность

Еще одним преимуществом программирования на Java является то, что это кроссплатформенный язык. Разработчики могут писать код в Windows и запускать его в macOS и Linux. Здесь действует принцип “написал один раз, запускай везде”. Это упрощает работу для разработчиков, работающих на разных системах, и упрощает процесс тестирования на разных машинах. Например, разработчики могут проверить, будет ли программа правильно работать на разных размерах экрана и операционных системах.

3. Удобство для мобильных устройств

Java — популярная технология для мобильных приложений. Разработчики приложений для Android в основном используют язык Java, потому что его легко реализовать, он имеет функции безопасности и кроссплатформенные возможности. Для Android требуется мощный язык для масштабирования приложения, а Java предлагает потрясающие возможности масштабирования. Он также упрощает процесс тестирования приложений для Android. Все это говорит о том, что это надежный и динамичный язык программирования для создания мобильных приложений.

4. Инструменты и библиотеки

Одним из самых значительных преимуществ Java является его совместимость с различными инструментами. Такие фреймворки, как Spring, Hibernate, Struts, Spark и другие значительно упрощают процесс разработки. Все эти инструменты предлагают различные функции для создания интерактивных и динамических приложений. Такие библиотеки, как Apache Commons, стандартные библиотеки Java, Maven, Jackson и т. д. позволяют разработчикам добавлять функциональные возможности без написания кода с нуля.

5. Активное сообщество

В мире насчитывается более 7,6 миллионов Java-разработчиков. Они постоянно обновляют язык программирования и добавляют в него новые функции. Поскольку Java обновляется каждые 6 месяцев, у разработчиков есть возможность быстро учиться и создавать более качественные продукты. Вы также можете использовать Java-сообщество для поиска ответов на различные вопросы.

Рост Java в разработке веб-приложений

С момента своего создания в 1995 году компанией Sun Microsystems язык Java стал одним из приоритетов в индустрии программирования. Сегодня компании со всего мира используют этот язык программирования для создания веб-приложений. Google, Netflix, Spotify и Pinterest — вот лишь несколько компаний, которые используют язык Java в своем стеке технологий. Эксперты подсчитали, что более 60% компаний, работающих в IT, в той или иной форме используют Java. Более того, он остается популярным языком программирования из-за его внедрения в другие области веб-разработки, а именно в облачные вычисления, социальные сети, корпоративную разработку, AR, VR и многое другое. Это отличный и мощный язык программирования для использования на предприятиях, которым сейчас нужна облачная архитектура. В сочетании с JavaScript Java позволяет создавать высокопроизводительные веб-приложения, которые можно запускать на любой платформе.

Рост Java в современных сценариях использования

Помимо веб-разработки и мобильной разработки, Java оставил свой след в современном технологическом мире. Сегодня Java — крайне полезный язык программирования для научных приложений. Он предлагает безопасную, быструю и портативную среду для научных расчетов. MATLAB — одна из самых популярных библиотек для научных приложений на основе Java.
  • Java также полезен при разработке внешнего и внутреннего интерфейса научных приложений. Вы можете использовать Struts и Java Server Pages для разработки внешнего интерфейса и ядро ​​Java для внутреннего интерфейса научных приложений.

  • Java полезен и для анализа данных. Он позволяет разработчикам создавать решения для анализа данных, используя различные библиотеки и инструменты. Сегодня Java нашел применение в сегменте Интернета вещей. Это ключевая технология во встроенных системах, таких как смарт-карты и датчики. Поэтому компании используют этот язык программирования в индустрии домашней автоматизации. Кроме того, он активно применяется в при разработке технологий потоковых устройств и Smart TV.

  • Платформа больших данных Hadoop написана на Java. Поскольку этот язык с открытым исходным кодом и объектно-ориентированный, он является краеугольным камнем для приложений Big Data. Такие языки программирования, как Scala, могут легко работать на виртуальной машине Java и упрощать анализ больших данных.

  • Игры — это развивающаяся и быстрорастущая отрасль, в которой Java широко используется для различных игровых приложений. Например, он предлагает поддержку jMonkeyEngine, крупнейшего движка для разработки трехмерных игр с открытым исходным кодом. Кроме того, виртуальная машина Dalvik (DVM) в основном поддерживается Java и используется для создания интерактивных игр для Android.

Функциональное программирование — за и против

Источник: Dev.to Несмотря на мое традиционно скептическое отношение к незнакомым технологиям, я признаю преимущество функционального программирования. Ниже приведен примерный список из плюсов, которые описывают эту парадигму программирования. Кофе-брейк #131. Роль Java в разработке в веб- и мобильных приложений. Функциональное программирование — за и против - 2

Безопасный параллелизм

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

for( String item : items ) {
   process(item);
}
А теперь он становится:

items.parallelStream().forEach( item -> process(item) );

Быстрый ввод/вывод

Функциональное программирование поддерживает подход, отличный от многопоточности. Это означает, что у нас больше нет отдельных потоков, ожидающих ответов на ввод-вывод, таких как вызовы базы данных. То есть мы максимизируем использование процессора и пропускной способности. Для высокопроизводительных приложений это явное преимущество. Это реализуется с идеей, что вызов функции может вернуть Future, которое не является фактическим результатом вызова, а скорее обещанием вернуть результат в какой-то момент в будущем. В какой-то момент в будущем получается возвращаемое значение, которое запускает функцию. Это означает, что потоки процессора не ждут завершения вызовов баз данных или REST и могут заниматься чем-то другим.

Краткость выражения

Разработчики программного обеспечения хотят иметь возможность изящно выражать сложные идеи. Функциональное программирование позволяет делать это лаконично. Например, общие конструкции, такие как циклы for, могут быть заменены потоками, которые абстрагируют общие операции for, для которых используются циклы. Нет никаких сомнений в том, что добавление функций Lambda и потоков в Java расширило возможности для выражения идей, которые ранее были невозможны.

Почему бы не стать функциональным?

Просто повторю вышеизложенное: у функционального кодирования есть много преимуществ, поэтому в этой статье мы не пытаемся обобщить все в один случай и сказать, что вам обязательно нужно заниматься функциональным программированием или наоборот. Такое решение нужно принимать с четким пониманием причин перехода и потенциальных проблем.

Интуитивно понимать всегда трудно

При написании кода вы пытаетесь общаться с компьютером? Если вам так важно общение с компьютером, почему бы не писать машинным кодом? Разумеется, это очень сложно, поэтому для облегчения придумали компьютерные языки. Они также позволяют программистам создавать выражения, понятные другим программистам. Поскольку программное обеспечение становится больше и сложнее, нам нужны стратегии для управления сложностью. Мы достигаем этого за счет абстракций и сокрытия информации. Класс, который вы используете в Java для отправки электронной почты, довольно сложен, но интерфейс этого класса прост. Он скрывает детальную реализацию, открывая нам только внешнюю сторону управления. Особенности языка, такие как фигурные скобки и квадратные скобки, сообщают нам структуру, такую ​​как условные операторы и циклы. Только теперь мы перемещаем циклы, или, вернее, рекурсию, и условия в функции:

for( String item : items ) {
    System.out.println(item);
}
Выходит:

items.foreach( item -> System.out.println(item) );
Потоковый и лямбда-подход, безусловно, короче. Вы можете выразить ту же функциональность с меньшим количеством кода. Проблема в том, что теперь мы скрываем фактическое поведение внутри методов, которые мы должны знать. Циклы в Java используют ключевые слова. С другой стороны, лямбда-функции могут реализовывать различные формы рекурсии, и только имя здесь указывает на то, что оно делает. Например:

boo.fooble( item -> System.out.println(item) );
Вы больше не можете просто читать код, чтобы понять структуру. Это затрудняет отслеживание потока выполнения. Другая особенность — цепочка функций, когда результат одной функции является вводом следующей без назначения промежуточной переменной.

boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Для автора этого кода это может иметь смысл, потому что он вроде бы написал каждую функцию и знает, что она делает. Однако для тех, кто плохо знаком с кодом, это мало что говорит о параметрах, процессах или возвращаемых значениях каждой функции. Но если вы напишете то же самое в чем-то, что присваивает типы, вы получите:

Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Возможно, это не идеальная аналогия, поскольку параметры и анонимные функции — это не одно и то же, но смысл здесь в том, что длинное предложение с неизвестными результатами и параметрами трудно читать без более глубокого понимания того, что делают функции, описанные ниже. И поэтому возможно, что функциональное программирование одновременно очень выразительно в удивительно коротких сегментах кода, но не поддается пониманию для людей, плохо знакомых с программным обеспечением. Смысл классов и интерфейсов связан с сокрытием данных, с созданием повторно используемых фрагментов кода, которые не требуют от разработчика понимания или, возможно, даже просмотра реализации. Они существуют для того, чтобы разработчики могли работать с большими сложными системами без головной боли. Это удобный способ организации кода, связанного с конкретными сущностями. Тем не менее, я плохо понимаю, как функциональное программирование помогает структурировать большие сложные проекты. Вероятно, этому есть субъективные причины.

Чтобы произвести впечатление на других своими навыками

Некоторые разработчики программного обеспечения настолько не уверены в своих навыках, что пытаются произвести впечатление через написание излишне сложного кода. Будучи senior-разработчиком, я не особо восхищаюсь другими разработчиками ПО, которые пытаются писать “умный” код. Конечно, это относится не только к функциональному программированию; то же самое может произойти в любом стиле кодирования. Но я заметил определенное интеллектуальное тщеславие сторонников функционального программирования. Суть в том, что разработчики программного обеспечения не работают в вакууме. Этот “умный” код нужно будет поддерживать, и если его трудно понять, то потом его будет трудно читать и изменять, трудно отлаживать. При управлении командами у нас есть люди на всех уровнях, поэтому разумнее всего писать код так, чтобы он был понятен всем причасным. Вот почему у нас понятные длинные имена переменных, поэтому мы ограничиваем длину методов. “Умный” код заберет лишнее время, поэтому писать его не слишком разумно. Я считаю, что функциональное программирование использует те же аргументы относительно кратких и мощных выражений, что и Perl много лет назад. Сторонники Perl гордились его выразительностью, тем, как они могли писать программы, которые были бы очень мощными всего и при этом занимали всего несколько строк кода. Это было правдой. Проблема состояла в том, что понять их было трудно. Возможно, функциональное программирование попало в ту ​​же ловушку.

Потому что это новая мода

Всегда есть “горячая” новая технология или парадигма. Постоянно появляются новые технологии, языки и подходы. Мы должны постоянно бросать себе вызов и изучать новое. Быть разработчиком программного обеспечения значит продвигать технологии. Но как разработчики софта мы должны сами оценивать, какие технологии нам необходимы для создания продукта. Изучение новой популярной технологии только потому, что она популярная, не является разумным использованием времени. Это не означает, что вы не должны изучать функциональное программирование, скорее вы должны оценить плюсы и минусы этой парадигмы для того приложения, которое вы пишете.

Потому что это единственный верный способ

Много раз до этого я видел, как разработчики продвигают тот или иной подход как единственно верный. Но как мне сказал один друг, для разных работ нужны разные инструменты. Например, лично я использую Python и PyTorch для искусственного интеллекта, хотя есть множество других инструментов и технологий, каждый из которых имеет свои преимущества и недостатки. Существуют веские причины рассматривать функциональное программирование как вариант для сервисов, которые нуждаются в значительной масштабируемости. Это связано с безопасностью параллелизма, предлагаемой этим подходом. Но вы также должны знать о затратах и ​​потенциальных рисках. Несколько лет назад у меня был похожий опыт с внедрением зависимостей и тем, что Spring считался лучшим для этой работы. Когда я спросил сторонников Spring о том, какую пользу он приносит, четких ответов мне не дали. Сейчас я наблюдаю нечто подобное у некоторых приверженцев функционального программирования, которые, похоже, участвуют в какой-то религиозной кампании, а не в беспристрастной оценке технологии. Кстати, внедрение зависимостей было отличной идеей, и теперь я могу четко определить его преимущества. Точно так же я думаю, что мои опасения по поводу функционального программирования связаны с тем, как оно используется, а не с тем, является ли это полезным и действительным подходом.

Заключение

Смысл этой статьи — не дать четкий ответ на вопрос о том, следует ли вам заниматься функциональным программированием. Суть в том, как вы сами оцениваете любую новую технологию или подход. Главное: не позволяйте своему эго закрывать от вас объективную оценку. Разработка программного обеспечения — это не доказательство ваших интеллектуальных способностей или ваших личных качеств. Речь идет о создании ценности в реальном мире. Если вам помогает функциональное программирование, то используйте его.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ