March 17, 2020
Плюсы и минусы языков программирования
Мы уже говорили с вами о том, какой язык учить в 2020-ом. Пришло время разобраться детальнее, какие плюсы и минусы у каждого из них. #itvdn_о_работе_в_IT
JavaScript
Плюсы:
- Быстрый для конечного пользователя: сценарий Java написан для клиентской стороны, для поддержки веб-сервера не требуется поддержка. Он также не нуждается в компиляции на стороне клиента, что дает ему определенные преимущества скорости. Поскольку сценарий выполняется на компьютере пользователя, в зависимости от задачи, результаты выполняются почти мгновенно. Например, вы можете проверить любой пользовательский ввод перед отправкой запроса на сервер. Это снижает нагрузку на сервер.
- Простота: JavaScript относительно прост в освоении и реализации. Он использует модель DOM, которая обеспечивает множество предустановленных функций для различных объектов на страницах, что делает его легким для разработки сценария для решения пользовательской цели.
- Универсальность: JavaScript отлично работает с другими языками и может использоваться в самых разных приложениях. В настоящее время существует множество способов использования JavaScript через серверы Node.js. Если вы загрузили node.js с помощью Express, используйте базу данных документов, такую как mongodb, и используйте JavaScript в интерфейсе для клиентов, вы можете создать приложение JavaScript полностью из одного окна вперед, используя только JavaScript.
Минусы:
- Безопасность: JavaScript явно добавлен к веб-страницам и клиентским браузерам, он может использовать систему пользователя, поэтому вредоносный код может быть запущен на клиентской машине.
- Поддержка браузера: JavaScript иногда интерпретируется по-разному разными браузерами. Различные механизмы компоновки могут отображать JavaScript по-разному, что приводит к несогласованности с точки зрения функциональности и интерфейса. Большая часть JavaScript зависит от манипуляции элементами DOM браузеров. И разные браузеры предоставляют разные типы доступа к объектам, в частности Internet Explorer.
- Все больше и больше конкурентов: JavaScript - это очень старый язык сценариев, работающий на машинах, и есть другие технологии, которые делают то же самое вместо него (например, JQuery) лучшим и легким способом.
- Отключить JavaScript: если вы отключите JavaScript в браузере, весь код JavaScript не запущен.
- Загрузка файла: файл JavaScript загружается на клиентской машине, чтобы каждый мог прочитать код и повторно использовать его.
Python
Плюсы:
- Низкий порог вхождения. Синтаксис Python более понятный для новичка.
- Логичный, лаконичный и понятный. В сравнении с многими другими языками Python имеет легкочитаемый синтаксис, разве что Visual Basic тоже легок.
- Кроссплатформенный: подходит для разных платформ: и Linux, и Windows.
- Есть реализация интерпретаторов для мобильных устройств и непопулярных систем.
- Широкое применение. Используется для разработки веб-приложений, игр, удобен для автоматизации, математических вычислений, машинного обучения, в области интернета вещей. Существует реализация под названием Micro Python, оптимизированная для запуска на микроконтроллерах (можно писать инструкции, логику взаимодействия устройств, организовывать связь, реализовывать умный дом).
- Сильное комьюнити и много конференций. К примеру, недавно в Одессе состоялся PyCon. На конференции в числе всех спикеров выступили 4 иностранных докладчика, которые затронули интересные темы. Лично мне было полезно услышать соавтора библиотек MindsDB, докладчика из Нью-Йорка (рассказывал про искусственный интеллект при разработке средств распознавания лиц на фото), спикера из британской компании Elastic (выступил с докладом на тему «инструменты мониторинга производительности вашего приложения»), спикера из Минска (девушка рассказывала про протокол MQTT для связи устройств интернета вещей).
- Мощная поддержка компаний-гигантов IT-индустрии. Такие компании, как Google, Facebook, Dropbox, Spotify, Quora, Netflix, на определенных этапах разработки использовали именно Python.
- Высокая востребованность на рынке труда.
- В мире Python много качественных библиотек, так что не нужно изобретать велосипед, если надо срочно решить какую-то коммерческую задачу. Для обучения есть много толковых книг, в первую очередь на английском языке, конечно, но и в переводе также издана достойная литература. Сегодня много обучающих материалов на Youtube: видео блоги, записи вебинаров и конференций. Думаю, что сейчас учиться легче, чем в то время, когда я начинал изучение.
- Python отличается строгим требованием к написанию кода (требует отступы), что является преимуществом, по моим наблюдениям. Изначально язык способствует писать код организованно и красиво.
Минусы:
- Низкая скорость выполнения программ, по сравнению с другими языками. Поначалу, программы на python выполнялись гораздо медленнее, чем аналогичные, написанные на Java или C++, однако эта проблема была решена созданием инструментов, которые переводят код с питона в байт-код (или код на C) и использованием виртуальных машин.
- Копирование кода. При копировании кода с другого ресурса, в некоторых случаях, он может скопироваться без сохранения отступов. Поэтому код будет невалидным, а Вам придется долго добавлять табуляцию в каждую строчку. Для решения этой проблемы нужно либо использовать специальные IDE, либо добавлять в Ваш редактор плагины для python.
- Конвертация программы на python в exe. Программы на python имеют расширение *py. Для использования без интерпретатора, например, на Windows, его нужно конвертировать в файл с расширением *exe (для этого можно использовать приложение py2exe). Допустим, у Вас была программа, которое вычисляет три числа и выводит график при помощи MatPlotLib. Это программа должна занимать около 30-40 Кб, однако после конвертации она может весить до 50 Мб. После удаления ненужных библиотек можно уменьшить эту цифру до 10-20 Мб, но результат будет хуже, чем у аналогичного проекта, сделанного, например на С++.
- Unicode и русские символы. Другие программисты когда-то шутили про питонщиков, что единственная их проблема - это Unicode. Действительно, была такая проблема - её решили в Python 2, а в Python 3 её почему-то вернули обратно. Поэтому, если Ваша программа должна работать с русскими буквами (например, выводить текст “Привет, мир!”), то лучше сначала почитайте об этом на ресурсах, посвященных этому замечательному языку, чтобы не видеть нечитаемых символов в выводе программы.
C#
Плюсы:
- Поддержка майкрософтом. В отличии от Java, которой не пошел на пользу переход в собственность Oracle, C# хорошо развивается благодаря усилиям Microsoft.
- В последнее время много совершенствуется. Так как C# был создан позже, чем Java и другие языки, то требовалось очень много доработать. Также это касается популяризации и бесплатности - было обещано открыть исходный код, а инструменты (Visual Studio, Xamarin) стали бесплатными для частных лиц и небольших компаний.
- Много синтаксического сахара. Синтаксический сахар - это такие конструкции, которые созданы для облегчения написания и понимания кода (особенно если это код другого программиста) и не играют роли при компиляции.
- Средний порог вхождения. Синтаксис похожий на C, С++ или Java облегчает переход для других программистов. Для новичков это также один из самых перспективных языков для изучения.
- Xamarin. Благодаря покупке Xamarin на C# теперь можно писать под Android и iOS. Это, несомненно, большой плюс, так как их собственная мобильная ОС (Windows Phone) не завоевала большой популярности.
- Добавлено функциональное программирование (F#).
- Большое сообщество программистов.
- Много вакансий на должность C# программиста в любом регионе.
Минусы:
- Ориентированность, в основном, только на .NET (на Windows платформу).
- Бесплатность только для небольших компании, учащихся и программистов-одиночек. Для больших команд покупка лицензий обойдется недешево. Поэтому если у вас есть своя фирма, то придется раскошелиться.
- Сохранили оператор go to.
Java
Плюсы:
- Объектно-ориентированное программирование.
- Java — язык высокого уровня с простым синтаксисом и плавной кривой обучения.
- Стандарт для корпоративных вычислительных систем.
- Безопасность.
- Независимость от платформы («Написать один раз и использовать везде»).
- Язык для распределенного программирования и комфортной удаленной совместной работы.
- Автоматическое управление память.
- Многопоточность.
- Стабильность и сообщество.
Минусы:
- Платное коммерческое использование.
- Низкая производительность.
- Отсутствие нативного дизайна.
- Многословный и сложный код.
C++
Плюсы:
- Довольно неплохая совместимость с Си.
- Высокая производительность (скорость работы программ, но не их написание).
- Кроссплатформенность (в основном, за счет Qt).
- Многопоточность (была в языке с самого начала, начиная с диссертации Страуструпа).
- Поддерживает разные парадигмы программирования (ООП, процедурное и.т.д).
- Доступность литературы, документации (книги Страуструпа, Герберта Шилдта, справочники и документация).
- Функциональное программирование (некоторые элементы ФП были добавлены ещё в C++11).
- Бесплатность (опенсорс).
- Универсальность.
Минусы:
- Низкоуровневость, которую ещё называют “тяжелое наследие Си”.
- При программировании могут встречаться свойства, характерные для низкоуровневого программирования, даже там, где они не нужны.
- Малопримением для работы с Web (хотя веб-сервера Apache и Nginx написаны на С++).
- Высокий порог вхождения.
- Запутанный и громоздкий синтаксис. В С++ изначально было большое количество обязательных строк, а позже это количество стало ещё больше.
- Для портируемости приложений нужно соблюдать требования стандарта, чтобы не возникло ошибок при работе с другим компилятором. Если программист пишет код небрежно ,то он может плохо работать на другой платформе (или не работать вообще).
- Сложность нахождения ошибок. Если, например, для C# есть такие инструменты как ReSharper, которые ищет ошибки за вас, то в С++ для этого придется попотеть.
- Не подходит для создания корпоративных приложений (для их разработки предпочитают Java или C#).
Ruby
Плюсы:
- Development. Занимает меньше времени, было подсчитано, что время на разработку на Ruby On Rails меньше на 40-50% по сравнению с другими языками программирования.
- Гибкость. Модульная конструкция Ruby On Rails и приложения приводит не только к более быстрому развитию, но и в гибкости этих решений. Они могут быть легко изменены, улучшены или расширены после выпуска.
- Наследственность. Ruby является понятием последовательности в структуре и методологии при написании кода с последующим разработчиками RoR, чтобы сделать взаимодействия между разработчиками проще.
- Эффективность затрат. На самом деле, все предыдущие 3 пункта приводят к окончательному снижению затрат и повышение рентабельности инвестиций (ROI).
Минусы:
- Комьюнити. Есть значительно больше специалистов на JAVA и PHP. Понятно, что количество не всегда означает качество. В каждом из этих областей есть настоящие профессионалы, а также те , кто только начинает учиться. Тем не менее специалистов тут меньше.
- PERFORMANCE. Давайте будем честными и признать , что RoR приложения не так быстры, как приложения , написанные на языках Java или C. Однако, правда заключается в том, что для большинства Ruby On Rails приложения достаточны быстры. Многие высокопоставленные компании доверили свой бизнес Rails и не жалеют об этом.
- Серверы. Как правило цена на серверы для начинающих, выше.
PHP
Плюсы:
- Разработка с помощью PHP дает много возможностей. При должном уровне владения, с помощью шаблонизатора можно создавать не только сценарии для веб-приложений, но и полноценные программы. Существуют решения, позволяющие создавать мобильные приложения на PHP.
- Изучение PHP не требует много времени. Это одновременно и плюс, и минус. Ведь основательное знание требует практики, но об этом позже.
- Кроссплатформенность. PHP может быть запущен в любой операционной системе, включая юниксоиды.
- Поддержка веб-серверов. Сложно найти тот, который бы не работал с PHP.
- Бесплатное распространение. Возможно, PHP не был так популярен для создания web-приложений, если бы не был бесплатным, как и большинство инструментов для работы с ним. Аналоги, которые, в основном, могут выполнить ту же работу, обычно стоят дороже.
- Имеет достаточную произвольность для web-разработки. Конечно, такие базовые языки, как C-семейство, работают быстрее, но для веба это не критично.
- Наличие учебных материалов. Все знают о «косяках» PHP лишь потому, что разработку, в основном, ведут с его помощью. Попробуйте найти в Google недостатки «Virtual Reality Modeling Language». Будет сложно, ведь его мало кто знает. Зато основу недостатков «препроцессорa» уже все выучили наизусть из-за широкой используемости языка. Именно потому, если у вас что-то не получается, всегда можно заглянуть в поисковик: с вашей проблемой, вероятнее всего, кто-то уже сталкивался.
- Непрерывное развитие. То, что сегодня о шаблонизаторе знают так много, означает лишь одно: с недостатками, рано или поздно, справятся.
Минусы:
- Узкопрофильность. Если вы выучили разработку с помощью PHP, то у вас одна дорога — в веб. И хотя возможности расширены различными реализациями, все же он «заточен» под программирование для Интернета.
- Безопасность. У PHP есть средства безопасности уровня системы и уровня web-приложения. Но, опять же, широкая используемость сыграла злую шутку: дыры в PHP находят быстрее, чем разработчики успевают их закрывать. В PHP 7 множество проблем решено, но злоумышленник всегда впереди. В силу того, что массы знают «препроцессор», трудно предугадать всё.
- Противоречия в коде. Когда шаблонизатор был только создан, все программное обеспечение разрабатывались с помощью С. Потому в языке было применено множество синтаксиса из него. В то же время, современная аудитория больше сконцентрирована на Java. В итоге, код переполнен различными остатками из разных языков. И все они могут даже быть сконцентрированы в одном выражении кода.