Выбираем язык программирования исходя из требований к проекту

Какой язык программирования выбрать исходя из требований к проекту?

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

Выбор языка, на котором вы пишете программы, невероятно важен – он поможет определить, будет ли проект успешным или нет. В этой статье мы рассмотрим общие требования к проектам и языкам, которые соответствуют этим проектам.

Планирование наперед

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

  • потраченное время на обучение,
  • неправильное проектирование,
  • увеличение форм-фактора,
  • постоянные правки,
  • повреждение деталей.

Но в этом всем есть точно одна проблема, которой не уделяется особое внимание на старте – какой язык программирования следует использовать. Ваш следующий проект может использовать компьютер и микроконтроллер, а вам обязательно потребуется что-то запрограммировать, так какой язык вы выберете?

Многие новички сразу бегут в поисковики и там набирают свои вопросы:

  • Какой самый хороший язык программирования?
  • Является ли C лучше, чем Java?
  • Какой язык мне лучше учить?
  • и т.д.

Эти вопросы довольно правильные, но они не обязательно дают правильные ответы, когда вы только начинаете. Почему? Ответ прост. Сравнение таких языков похоже на сравнение молота с настольной пилой. Один инструмент будет хорош для набивки гвоздей, в то время как другой хорош для резки дерева!

Итак, какой язык вы должны использовать для проекта? Ниже приведен метод оценки требований вашего проекта, чтобы определить, какой язык может быть лучше для вас.

Таблица сравнения языков

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

  • Шаг 1. Выпишите свои требования
  • Шаг 2. Оцените свои приоритетные требования по баллам в таблице
  • Шаг 3. Оцените свои требования с низким приоритетом по баллам в таблице
  • Шаг 4. Суммируйте свои баллы и сравните лучшие 2 языка

Первой задачей при выборе языка является перечисление основных требований проекта, за которым следуют второстепенные требования.

Затем, используя таблицу, оценивайте каждый язык в соответствии с требованиями проекта, а язык с наивысшим баллом, скорее всего, будет оптимальным.

Опытные программисты знают, как заставить язык работать под требования, но наше руководство предназначено для тех, кто еще мало в этом разбирается и хочет на старте выбрать правильное направление.

Оценка языка программирования

Скорость обработки: как быстро программа будет выполнена.

Читаемость: насколько сложно будет читать код.

Простота: насколько легко будет работать и использовать библиотеки.

GUI (графический интерфейс пользователя): как легко будет работать с приложением графического интерфейса пользователя.

Графика (2D): простота использования 2D-графики и ее скорости.

Графика (3D): простота использования 3D-графики и ее скорости.

Кросс-платформенность: как легко будет запускать программу на разных платформах (Windows, Mac).

Специальный процессор: насколько полезен язык для устройства, такого как микроконтроллер.

Суммируем полученные баллы

Самый простой метод использования таблицы включает в себя поиск ваших требований, а затем суммирование баллов, чтобы посмотреть, какой язык выходит на первое место.

Однако некоторые требования могут быть более важными, чем другие, поэтому вы также можете добавить вес к значениям оценки в зависимости от важности критериев.

Например, если скорость обработки в два раза важнее, чем читаемость, вы умножаете показатели скорости обработки на 2.

Примечание. Почему Python имеет низкий показатель удобочитаемости? Некоторым читателям может быть интересно, почему у Python довольно низкий балл читаемости в сравнении с другими языками. Для этого есть причина!

Многие языки программирования используют фигурные скобки для разделения кода и имеют четкие точки входа (например, main()). Однако Python этого не делает, и это может сделать код похожим на блоки текста, которые гораздо труднее прочитать. Скобки четко показывают код-блок, а точка с запятой в конце строк, указывают, что код на этой строке является инструкцией вместо описания. В то время как Python гордится своей читабельностью, читатели должны знать, что большие программы на Python могут стать сложными для чтения.

Одним из последних моментов на Python является использование «self». Если вы когда-либо программировали классы на любом другом языке вы поймете о чем речь.

Выбираем язык программирования исходя из требований к проекту

Исходя из анализа существующих моделей разработки, для разработки данного программного обеспечения, с учетом человеческих и материальных ресурсов следует использовать спиральную модель разработки.

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

Обзор существующих средств разработки

В качестве основных существующих средств разработки программного обеспечения следует выделять следующие:

Средства, предназначенные для проектирования ПО.

Фактически ими являются все существующие средства для описания моделей, которые являются результатом проектирования программного обеспечения. Модели могут быть описаны при помощи блок-схем, ER-диаграмм, UML диаграмм и прочих.

Средства реализации программного кода.

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

В целях реализации программного кода для начала, как правило, следует выбрать язык программирования, на котором будет осуществляться разработка, такой как C, C++, C# и другие. Фактически, язык, который будет использован, выбирается исходя из того, насколько просто и эффективно можно будет на нем добиться конечной цели разработки. Для каждого языка существуют отладчики, например Visual studio. Для того,чтобы управлять базами данных также предусмотрены специальные средства, таки как MySQL, Oracle и другие.

Выбрав язык разработки, выбирают среду, в которой собственно и будет происходить реализация программного кода, в качестве среды можно выбрать Qt creator, Microsoft Visual studio и прочие среды, которые следует выбирать опять же в зависимости от поставленных целей.

Средства для тестирования программного обеспечения

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

Выбор средств разработки

При выборе средства для реализации программного кода рассматривались два претендента:

Microsoft Visual studio.

В качестве средства для реализации программного кода, в рамках данного проекта был выбран QT creator. Такой выбор был сделан исходя из требований к разрабатываемому программному обеспечению, одним из которых являлась его кросcплатформенность, которую можно реализовать, используя библиотеки Qt, в отличие от Microsoft Visual studio, которая адаптирована исключительно под операционную систему Windows, к тому же программа должна обладать понятным и приятным пользовательским интерфейсом, для реализации которого в Qt creator предусмотрен встроенный редактор форм. Независимость от платформы необходима разрабатываемой программе в связи с тем, что современные пользователи персональных компьютеров предпочитают различные операционные системы и, безусловно, программа должна быть адаптирована к большинству из них, это сделает ее гораздо удобнее.

Выбор языка программирования.

Выбор модели программирования.

Язык, на котором будет реализован проект, следует выбирать исходя из поставленных задач, которые должна осуществлять программа и предъявляемым требованиям к ней. Одним из критериев выбора языка программирования является выбранная модель программирования, которые бывают следующих видов:

Императивная модель программирования.

К подходам, применимым для реализации императивной модели относят процедурное программирование, декларативной относят функциональное и логическое программирование, структурной- объектно-ориентированное программирование, модульное программирование, метапрограммирования- генерация кода, самомодифицирующийся код.

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

В функциональном программировании не предполагается явное хранение текущего состояния программы и его изменение, в основном, оно строится на вычислениях результатов функций. Функция в функциональном программировании понимается как математическая, в отличие от функций императивных.

Основой логического программирования является аппарат математической логики, автоматическое доказательство теорем, при котором используется механизм логического вывода, который в свою очередь, использует заданные факты и правила вывода.

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

При использовании объектно-ориентированного программирования описывают структуру и поведение программного обеспечения, тем самым определяя составляющие части системы в терминах объектов и классов. Объектно-ориентированное программирование удобно, когда проектируемая система должна работать с отдельными объектами, устройство которых описывается в классах, обладающими определенными характеристиками, способом представления и поведением.

Основными методами, при помощи которых реализуется генерация кода являются шаблоны и внешне-языковые средства.

Современные языки программирования зачастую являются мультипарадигмальными, то есть соответствуют нескольким моделям.

В качестве модели программирования данной системы выбирается структурная модель программирования, причем для ее реализации выбирается объектно- ориентированный подход, так как программу будет наиболее удобно реализовать в терминах объектов и классов.

Система работает с такими объектами как:

Элементы пользовательского интерфейса.

Каждый из этих объектов имеет собственное представление, обладает собственными характеристиками, которые входят в их устройство и описываются в соответствующих классах.

Исходя из выбранной модели и подхода к ее реализации, рассмотрим языки программирования, удовлетворяющие поставленным условиям.

Выбор языка для реализации программного кода

Выбранному подходу и парадигме программирования соответствуют следующие языки программирования:

Из вышеприведенных языков, с учетом того, что средой для реализации программного кода выбрана Qt creator с дополнительными библиотеками для C++, а также с учетом навыков и опыта написания программного обеспечения на каждом из них, языком, выбранным для реализации программного обеспечения является C++. C++, с дополнительными библиотеками Qt, является популярным и современным объектно-ориентированным языком программирования. Он предоставляет все возможности для создания системы, разрабатываемой в рамках данного дипломного проекта, позволяет работать с динамической памятью, использовать необходимые типы данных, такими как:

А также работать с объектами пользовательского интерфейса, созданными в Qt designer.

Выбор оптимального языка программирования

Введение

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

В данной статье не приводится подробное сравнение процедурных, объектно-ориентированных или функциональных языков. В ней на практических примерах и сценариях показывается, как выбрать для разработки проекта максимально эффективный и простой язык. Она поможет исследовать ряд факторов, которые следует учитывать при выборе языка программирования, независимо от того, будет ли это маленький проект для личного использования или большой корпоративный проект.

Факторы выбора

При выборе языка программирования нужно учитывать множество факторов. Например, если при разработке динамической Web-страницы вы в качестве наилучшего варианта выберите JavaServer Pages (JSP)/сервлеты, другие могут предпочесть PHP или аналогичный язык сценариев. Не существует какого-то одного языка, который является наилучшим выбором. Можно отдать предпочтение определенным факторам, таким как производительность и безопасность корпоративных приложений, по сравнению с другими факторами, такими как количество строк кода. Любое решение сопряжено с какими-то компромиссами.

После получения проекта или задания нужно выполнить подготовительную работу до решения поставленной задачи. Зачастую выбор языка не рассматривается как часть этой подготовительной работы.

При выборе языка для персонального проекта можно положиться на свои личные предпочтения. Здесь может оказаться важным количество строк кода; очевидным выбором будет язык, позволяющий выполнить задачу при помощи 10 строк кода вместо 20. Сначала хочется получить решение, а потом позаботиться об удобочитаемости или производительности.

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

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

  • Целевая платформа.
  • Гибкость языка.
  • Время исполнения проекта.
  • Производительность.
  • Поддержка и сообщество.

Целевая платформа

Самым важным фактором является платформа, на которой программа будет работать. Рассмотрим для примера Java™ и C. Если программа написана на C и должна работать на машинах с Windows® и Linux®, потребуются компиляторы для платформ и два разных исполняемых файла. В случае с Java сгенерированного байт-кода будет достаточно для выполнения программы на любом компьютере, на котором установлена виртуальная Java-машина.

Аналогичный аргумент применим и для Web-сайтов. Они должны выглядеть и работать одинаково во всех браузерах. Использование тегов CSS3 и HTML5 без проверки совместимости с браузерами приведет к разному отображению и поведению сайта в разных браузерах.

Гибкость

Гибкость языка определяется тем, насколько легко можно добавлять к существующей программе новые функциональные возможности. Это может быть добавление нового набора функций или использование существующей библиотеки для добавления новой функциональности. Рассмотрите следующие вопросы, связанные с гибкостью:

  • Можно ли использовать новую функциональность без подключения новой библиотеки?
  • Если нет, доступна ли эта функциональность в библиотеке языка?
  • Если эта функциональность не встроена в язык и не доступна в библиотеке, какие усилия нужно приложить для ее создания с нуля?

До принятия решения необходимо знать, как спроектирована программа, и какие функциональные возможности оставлены на потом.

Хотя сравнение этих языков технически некорректно, рассмотрим Perl и Python. Perl имеет встроенную поддержку регулярных выражений. В Python необходимо импортировать модуль re из стандартной библиотеки.

Время исполнения проекта

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

Время исполнения проекта очень зависит от размера кода. Теоретически, чем легче изучить язык и чем меньше объем кода, тем меньше это время.

Например, сайт управления контентом на PHP-сценариях можно разработать за несколько дней, в то время как создание кода сервлетов может занять несколько месяцев, при условии, что вы начали изучать оба языка с нуля.

Производительность

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

Рассмотрим два варианта Web-приложения, написанных на Java и на Python. На основании данных тестирования можно прийти к заключению, что в одинаковой среде приложение, написанное на Java, должно работать быстрее, чем приложение, написанное на Python. А как насчет самой среды? Если средой является одноядерная x86 Ubuntu Intel Q6600, это справедливо, поскольку вычислительная мощность ограничена. А если взять Web-приложение, работающее в облачной среде на Google App Engine? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время. Теперь основным фактором выбора будет количество строк кода и удобство обслуживания.

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

Поддержка и сообщество

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

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

Хороший пример значения сообщества дает язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включенных в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели.

Сценарии

Сценарии проектов, приведенные в данном разделе, иллюстрируют различные факторы, влияющие на принятие решения относительно выбора языка программирования.

  • REST-сервис для операции сложения.
  • Простая программа чтения фидов.
  • Корпоративные приложения.
  • Исследовательские проекты.

REST-сервис для операции сложения

В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http:// ?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках. В нашем примере используются JSP (см. листинг 1) и PHP (см. листинг 2). JSP-программа написана в Eclipse IDE.

Листинг 1. REST-сервис, использующий JSP

В листинге 2 приведена та же программа, написанная на PHP.

Листинг 2. REST-сервис, использующий PHP

Между этими примерами нет особых различий. Программа сама по себе не использует все возможности обоих языков. Она показывает, что когда дело касается основ, оба языка равноценны.

Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений.

Еще одной важной функциональной возможностью JSP, которая делает его более подходящим выбором для предприятия, является его многопоточность. PHP не имеет встроенной поддержки многопоточности.

Простая программа чтения фидов

Цель этого сценария заключается в предоставлении программе ссылки на фид. Программа должна получить фид и вывести все его заголовки. Чтобы сделать программу более интересной, мы подпишемся на фид в JSON-формате, а не в RSS.

Фрагмент кода, приведенный в листинге 3, взят из O’Reilly и написан на Java.

Листинг 3. Программа чтения фидов, использующая Java

В листинге 4 приведена программа, написанная на Python.

Листинг 4. Программа чтения фидов, использующая Python

Python-программу можно сократить еще больше – всего до трех строк. Оставьте в листинге 4 первые две строки и замените остальной код строкой из листинга 5.

Листинг 5. Сокращенная третья строка

Пример приложения продемонстрировал гибкость этих языков. Ни один из них не имеет встроенной поддержки всех необходимых библиотек, поэтому необходимо импортировать нужные пакеты. В Python это даже проще, поскольку можно манипулировать JSON по умолчанию. В Java-коде это труднее, потому что для создания работающей программы необходимо получить JSON-библиотеки и их зависимости.

Корпоративные приложения

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

Важную роль играет также среда, в которой программа будет использоваться. Корпоративные программы никогда не работают автономно. Каждая программа становится частью более крупной задачи, поэтому важным фактором становится способность к взаимодействию.

Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.

Исследовательские проекты

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

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

В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот.

Заключение

В данной статье были рассмотрены некоторые факторы, влияющие на выбор языка программирования. Однако этот список неполон. Например, если опытный программист предложит вам язык, который вы не рассматривали, возможно, вам следует оценить и его.

Мы надеемся, что теперь вам будет легче выбрать язык программирования для вашего следующего проекта. Языков становится все больше, поэтому возможность выбора есть всегда.

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи: Selecting the optimal programming language (EN).
  • На сайте Computer Language Benchmarks Game приведены данные о производительности программ, написанных примерно на 24 различных языках программирования для десятка простых задач.
  • Информация о Google App Engine, позволяющем запускать Web-приложения в инфраструктуре Google.
  • В одном из первых результатов тестирования производительности, Computer Language Shootout Scorecard от 2003 года, подведены итоги измерений производительности ряда языков программирования.
  • В статье Миф о немасштабируемости PHP утверждается, что PHP масштабируем (EN).
  • Дополнительная информация о Comprehensive Perl Archive Network (CPAN).
  • Stack Overflow: обсуждения скорости PHP, ASP, JSP, CGI и т.д.
  • Дополнительная информация о среде MATLAB фирмы MathWorks.
  • Как анализировать JSON в Java – фрагмент кода для листинга 3 из ответов O’Reilly.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

System Development

system development and more.

Как выбрать язык программирования для нового проекта

На данный момент я кажется окончательно вывел для себя правила по выбору языка для той или иной задачи. До этого многие годы писал на C++, C, Python, Java и Objective-C. Перепробовал кучу экзотических языков, таких как OCaml, Erlang, Scala, Lisp, Clojure. Так как я не занимаюсь разработкой UI, Web-сайтов или мобильных приложений, все мои соображения актуальны исключительно для разработки системных приложений, сетевых приложений и бизнес логики. Кроме того, все что я пишу в этой заметке относится к командной разработке приложений в рамках относительно крупной компании, и будет не актуально для команд из 1-2 разработчиков или “домашних” проектов.

Само же правило по выбору оказалось предельно простым: если в силу объективных причин задачу нельзя решить на Python, то необходимо оценить возможность использования Java, но если по объективным причинам не подходит и Java, то необходимо брать C++. Да, именно эти языки и именно в такой последовательности. И да, никакой экзотики типа OCaml, Erlang, Scala, Lisp или даже Rust.

Экзотика

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

Нельзя не отметить теорию о том, что ряд экзотических языков сильно ускоряет разработку, поэтому использование экзотики для прототипирования может оказаться хорошей идеей. К сожалению это не так. Основная масса удачных прототипов крайне быстро меняет свой статус на продуктовый и отправляется к конечным пользователям. Ну а после этого мы опять сталкиваемся с проблемой развития и поддержки, как если бы сразу выбрали экзотику для разработки продукта.

С учетом совокупности перечисленных факторов, я бы не стал брать никаких не мэйнстрим языков в продакшн среднестатистической компании без какой-то крайне сильной необходимости.

Python

Очень простой язык программирования с отличной стандартной библиотекой и внушительной коллекцией сторонних библиотек на все случае жизни. По большому счету, на Python можно написать все что угодно до тех пор, пока нет жестких требований по памяти, скорости или ограничений на поставки кода в составе продукта. Особенно стоит отметить любовь научного сообщества к этому языку, что привело к появлению SciPy, NumPy, Pandas, NLTK и т.п. библиотек, сопоставимых аналогов которым с большой вероятностью не окажется во многих других языках программирования. При всем богатстве библиотек, управление ими посредству pip очень просто и интуитивно понятно.

Основная реализация языка не позволяет писать многопоточные приложений, что и плюс и минус одновременно, т.к. в любом случае, как правильно писать многопоточные приложения подавляющее большинство программистов не представляет. А тут, нет возможности – нет проблемы, а асинхронные приложения на Python писать совсем не сложно при использовании asyncore и Twisted.

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

Java обладает большинством достоинств Python и при этом лишена части его недостатков, само собой, все это не бесплатно, о чем и пойдет речь ниже. Язык просто великолепно подходит для тех случаев, когда не устроила скорость работы приложений написанных на Python или приложение поставляется конечному пользователю, а передача исходных кодов не допустима.

Java имеет не менее обширную стандартную библиотеку и огромное количество открытых библиотек на все случаи жизни, хотя достойного открытого аналога NumPy и Pandas в Java, к сожалению, не наблюдается. Но надо честно признать что сопоставимые или даже лучшие решения можно найти только в R.

Входной порог в Java ощутимо выше чем в случае с Python и дело не только и не столько в самом языке, сколько в разнообразии и запутанности сборочных систем, сборки и конфигурирования. Хотя язык в любом случае несравненно проще C++ и позволяет куда быстрее получить работоспособное приложение, если, конечно, нет серьезных ограничений по памяти и производительности.

Надо признать, что в случае с Java вопрос памяти и производительности довольно философский. С одной стороны на синтетических тестах скорость между тестами на Java и C++ будет различаться в 1.5-2 раза, в реальном приложении разрыв с большой вероятностью будет существенно выше. Но тут сразу стоит вспомнить шутки со стеками вызовов Java со вложенностью в сотню функций и любовью Java разработчиков к абстракциям, фабрикам и моделям. Те же прошивки для принтеров написанные на Java с активным использованием Spring отлично работают на слабых MIPS-ах с 500Мб памяти “на всё”.

Что удивительно, язык программирования кормящий меня уже почти 15 лет я поставил в самый конец списка. К сожалению, на это есть достаточно веские причины, такие как крайне высокие требования к разработчиком, отсутствие систем управления библиотеками аналогичным pip, Maven, высокий порог вхождения новичков и т.п. Безусловно, пункт про требования к разработчиком довольно спорен, но с учетом всеобщего акцента на управляемые среды количество разработчиков понимающих принципы работы с памятью, устройство процессора и другие низкоуровневые вещи стремительно сокращается.

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

По количеству доступных открытых библиотек под нормальными лицензиями C++ однозначно проигрывает как Java, так и Python. Данный проигрыш отчасти сглаживается тем, что все что доступно в Python и Java можно достаточно просто интегрировать в C++, но тогда необходимость использования C++ вызовет еще больше вопросов.

Честно говоря, в голову практически не приходят причины почему нужно начинать решать новую задачу на C++ за исключением достаточно редких случаев когда миллисекунды или +-100 мегабайт памяти имеют значение. Во всех же остальных случаях лучше взять что-то (Java, Python) более простое в разработке и поддержке.

Маленькие команды и собственные проекты

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

А вот для меленькой компании или тем более для собственного любимого детища уже смело можно брать куда как более экзотические вещи, например заменить Java на Scala или Clojure, активно использовать C++ или даже Rust да и вообще ни в чем себе не отказывать.

Источники:

http://studbooks.net/805637/geografiya/vybor_modeli_razrabotki

http://www.ibm.com/developerworks/ru/library/wa-optimal/

http://sysdev.me/how-to-select-programming-language/

http://drongeek.ru/obzory/walkera/qr-x350-pro

Ссылка на основную публикацию