В статье автор проводит исследование среди наиболее популярных языков программирования с целью определения наиболее функционального и поддерживаемого сообществом языка для разработки веб-приложений.
Ключевые слова: языки программирования, веб-приложения, информационные технологии.
На сегодняшний день существует огромное количество языков программирования и каждый из них создавался для решения определенной категории задач. Выбор языка программирования является важным этапом в проектировании и разработке информационной системы, от которого зависит много факторов, например, такие как:
– скорость создания программы;
– скорость тестирования;
– возможность переноса на другие платформы;
– возможность быстрого внесения изменений;
– большой выбор инструментов для разработки;
– производительность итогового продукта.
При этом стоит помнить, что идеального языка, который будет подходить под все требования сразу, не существует — все они имеют свои плюсы и минусы, анализ которых будет проведен далее в этой статье.
Правильный выбор языка программирования поможет создать компактное, простое в отладке, расширении, документировании и исправлении ошибок решение.
При выборе языка программирования, требуется учитывать следующие факторы:
– Целевая платформа;
– Гибкость языка;
– Производительность;
– Поддержка и сообщество.
Рассмотрим каждый фактор подробнее и сравним несколько популярных языков для разработки веб-сервисов.
Список рассматриваемых языков программирования указан в таблице 1.
Таблица 1
Используемые в исследовании языки программирования
№ |
Название |
TIOBE индекс |
1 |
C# |
5 |
2 |
Java |
1 |
3 |
PHP |
8 |
4 |
JavaScript |
7 |
5 |
Python |
3 |
Целевая платформа
Одним из факторов является платформа, на которой программа будет работать. От платформы зависят такие параметры как:
– Цена за аренду серверов. На Linux сервере намного дешевле;
– Производительность;
– Инструменты для разработки;
– Инструменты для профайлинга;
Язык программирования C# является кроссплатформенным языком, так как исполняющая среда для байт-кода cкомпилированного исходного кода CoreCLR является кроссплатформенной и поддерживается на трех операционных системах: Windows, Linux и MacOS.
Кроссплатформенность Java была достигнута за счёт создания виртуальной машины Java.
Java Virtual Machine или JVM — это программа, являющаяся прослойкой между операционной системой и Java программой. В среде виртуальной машины выполняются коды Java программ. Реализованы версии JVM для всех существующих операционных систем.
PHP-скрипты обычно обрабатываются интерпретатором в порядке, обеспечивающем кроссплатформенность разработанного приложения. Интерпретаторы для PHP доступны для всех существующих операционных систем.
Движок JavaScript — V8, лежит в основе программной платформы Node.js. Node.js — программная платформа, основанная на движке V8, которая транслирует JavaScript в машинный код. Node.js доступна для Windows, Linux и MacOS.
Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Есть реализация интерпретатора для JVM с возможностью компиляции, CLR, LLVM, другие независимые реализации. Таким образом, интерпретаторы Python имеются для всех существующих операционных систем.
Подводя итог можно сказать, что все рассматриваемые языки являются кроссплатформенными и могут работать с такими операционными системами как Windows, Linux и MacOS.
Гибкость языка
Гибкость языка определяется тем, насколько легко можно добавлять к существующей программе новые функциональные возможности. Гибкость идет в разрез с производительностью и безопасностью, поэтому, к способности языка быть гибким следует относится с осторожностью.
Например, нестрогая типизация языка является фактором, делающий язык гибким, так как программист, разрабатывая новый функционал, может не тратить время на указание конкретных типов в методах. Но в то же время, отсутствие строгой типизации является потенциальной ошибкой. Например, в метод, который должен принимать в качестве параметра целочисленный тип, может быть отправлен строковый тип — в этом случае возникнет ошибка и приложение перестанет работать. У языка со строгой типизацией такого не возникнет, так как в случае передаче методу строкового типа, ошибка возникает во время компиляции, а не во время работы программы. Это дает гарантию того, что у пользователя приложение будет работать корректно.
Возвращаясь к сравнению гибкости языка, были выбраны следующие факторы, по которым будут сравниваться языки:
– возможность использовать парадигму «обобщённое программирование»;
– возможность использования неявно типизированных локальных переменных;
– Лямбда-выражения.
Язык программирования C# начиная с версии 2.0 имеет возможность использовать обобщённые типы. Обобщенные типы используются в обобщенном программировании. Обобщенное программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
Начиная с версии 3.0, C# предоставляет возможность использовать неявно типизированные переменные с помощью ключевого слова var и возможность использовать лямбда-выражения.
Java так же имеет возможность использовать обобщённое программирование. Так же, начиная с версии Java 10, язык получил возможность использовать ключевое слово var для неявной типизации локальных переменных. А с версии 8 Java обзавелась лямбда-выражениями.
PHP обобщённых типов не имеет. Это связанно с тем, что обобщенный метод во время компиляции определяет, какие типы ему передаются в коде и компилятор генерирует на каждый тип свою версию метода, что дает гарантию того, что метод выполнится без ошибок. PHP является интерпретируемым языком, поэтому, данная возможность у него отсутствует. Но, например, с помощью не типизированных параметров в методах можно добиться похожего поведения. Только гарантию того, что метод выполнится без ошибок при передаче разных типов никто не даст. Что касается неявно типизированных переменных, то так как PHP не является строго типизированным языком, такая возможность ему не нужна. Лямбда-выражения также отсутствуют.
Так же, как и PHP, JavaScript имеет те же возможности.
Python так же является нестрого типизированным языком, поэтому обобщенных типов не имеет, как и ключевого слова для неявного типизированных переменных. Зато Python имеет лямбда-выражения.
В заключении можно сказать, что из 5 языков только 2 обладают строгой типизацией, обобщенными типами, ключевым словом для неявной типизированных переменных и лямбда-выражениями, что добавляет им преимущество при выборе.
Производительность
При разработке информационной системы, у которой будет много пользователей и функций, важно учитывать такой фактор, как производительность.
Производительность информационной системы, в первую очередь, зависит от языка и инфраструктуры, на которой она написана, поэтому на этот фактор стоит обратить большое внимание.
В целом, затрачиваемое компьютером количество времени на компиляцию или интерпретацию в сравниваемых языках программирования не является существенной для разрабатываемого личного кабинета студента, поэтому подробно рассматривать и выделять лучший языка программирования не требуется. Но важным фактором является платформа и фреймворк, на котором написан личный кабинет.
По результатам замерам производительности основных фреймворков, на основе которых разрабатываются веб-сайты на сравниваемых языках был выделен абсолютный лидер — ASP.NET Core 3.1.
Тест производительности заключался в том, что на запущенный на ОС Linux фреймворк отправляли большое количество HTTP-запросов, а если быть точнее, 7 миллионов. Фреймворк должен был принять этот запрос, обработать и вернуть ответ. ASP.Net Core 3.1 единственный из кандидатов, кто обработал все запросы за заданное время.
ASP.NET Core — кросс-платформенный фреймворк для создания веб-приложений с открытым исходным кодом. Поддерживает языки CLR, включая C#. Данная платформа разрабатывается компанией Майкрософт совместно с сообществом и имеет большую производительность. Имеет модульную структуру и совместима с такими операционными системами как Windows, Linux и macOS.
Поддержка и сообщество
Не мало важным является поддержка и сообщество, которое есть у языков программирования и их фреймворков. Чем это сообщество больше и свободнее, тем быстрее развивается технология.
Наиболее «старым» сообществом считается сообщество языка программирования Java. Исторически сложилось, что на Java написано большинство информационных Enterprise систем. Enterprise разработка — это разработка, направленная на решение проблем бизнеса. В связи с этим сообщество вынуждено развивать и поддерживать этот язык программирования. Благодаря большому сообществу, язык имеет огромное количество инструментов, гайдов, инструкций, библиотек и ответов на многие вопросы. Для изучения тонкостей языка написано большое количество книг и статей.
В целом, можно сказать, что Java имеет хорошее сообщество и поддержку.
Что касается языка программирования C#, то он так же, как и Java, имеет огромнейшую поддержку и сообщество. Огромное количество литературных трудов, библиотек, инструментов, примеров задач и их решений — это все труды огромного сообщества, которое вкладывает свои знаний в развитие этого языка программирования. Таким образом, сообщество и поддержка языка программирования C# является не худшим, чем сообщество Java.
Сообщество языка Python состоит в основном из молодых разработчиков: так как этот язык программирования очень прост в освоении, то он становится первым у начинающих разработчиков. Не смотря на молодость сообщества, этот язык программирования имеет большое количество инструментов и литературы для комфортной работы с ним. Но, если, количественно сообщество Python, возможно, больше, то по качеству, оно будет хуже, если сравнивать с сообществами Java и C#. Это связанно преимущественно с неопытностью большинства разработчиков Python.
Языки JavaScript и PHP, аналогично Python, имеют крупные, развитые, но молодые сообщества. Множество библиотек и литературы позволяют пользоваться этими языками максимально продуктивно.
Подводя итог сравнения сообществ, можно выделить только два наиболее развитых сообществ — это сообщества C# и Java.
Исходя из результатов исследования языков программирования, можно сделать вывод, что для решения в качестве языка программирования для разработки серверной части веб-приложения, хорошо подойдет язык программирования C#. Он обладает современным и развивающимся функционалом, а также имеет большое и опытное сообщество. Большая библиотека литературы и документации позволит быстро и качественно разработать серверную часть веб-приложения.
Литература:
- Хранилище документации Майкрософт [Электронный ресурс] — URL https://docs.microsoft.com (дата обращения 25.09.2021);
- C# 4.0 Полное руководство [Электронный ресурс] –URL https://www.libfox.ru/ (дата обращения 01.10.2021);
- Макконнелл С. «Совершенный код»: изд-во «Русская редакция», 2017;
- Кей С. Хорстманн, Гари Корнелл «Java. Библиотека профессионала», 2014 г.;
- Давид Скляр «Изучаем PHP 7. Руководство по созданию интерактивных веб-сайтов», 2017 г.;
- Бэрри Пол, «Изучаем программирование на Python», 2017 г.;
- Дэвид Флэнаган, «JavaScript. Подробное руководство», 2008 г.