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. В итоге, код переполнен различными остатками из разных языков. И все они могут даже быть сконцентрированы в одном выражении кода.