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

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

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

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

  1. выбор языка программирования очевиден
  2. выбор языка программирования не однозначен

Вы находитесь в первом сценарии, если один язык программирования преимущественно лучше, чем альтернативы для задач, которые он будет использовать. Упрощенный пример — это когда вы выбираете C++, если критична скорость.

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

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

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

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

  • Серверные веб-микросервисы, которые получают запросы от веб-интерфейса, обрабатывают запросы и сохраняют результаты в базе данных.
  • Получение данных из внешних API REST
  • Микросервисы для тестирования торговых стратегий без требований к скорости
  • Формирование отчетов
  • Нет особых нефункциональных требований к скорости
  • Интеграция с другими сервисами либо через REST API, либо через обмен сообщениями.

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

1. Python можно использовать в качестве основного внутреннего языка для всей компании.

Написание и поддержка нескольких сервисов на нескольких языках программирования — это здорово, но требует огромных затрат на переключение контекста. Некоторые высококвалифицированные разработчики могут сказать: «Ну, это решаемо», но для меня цена высока, поэтому цена высока.
Моя цель — максимизировать свою продуктивность, сгладив кривую обучения, когда дело доходит до языка программирования. Здесь я должен сказать, что я поклонник кривых обучения, но почему это должен быть язык программирования, а не что-то еще, что создает большую ценность.

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

  • DevOps
  • Машинное обучение
  • Быстрое прототипирование

В то же время Python предлагает набор инструментов для написания микросервисов.

2. Python более широко используется для статистического анализа, чем Java.

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

Кроме того, есть несколько библиотек, таких как Pandas и SciPy, которые дают Python конкурентное преимущество. Еще раз отметим, как уже указывалось выше, Java (и другие языки) также может выполнять эту работу, но встречается реже.

3. Подходит для корпоративных решений

Многие крупные технологические компании, такие как Uber, Facebook и Google, в значительной степени полагаются на Python в своих серверных службах. Если Python достаточно хорош для них, то Python достаточно хорош и для меня.

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

4. Скорость разработки на Python как минимум в два раза выше

Производительность — мой ведущий фактор при выборе между альтернативами, особенно когда речь идет о стартап-проекте. Сомневаюсь, что кто-то скажет: «Да, проект действительно удался, он занял половину времени, но он был сделан на языке X. Хорошие разработчики пишут его на языке Y». Это не имеет смысла для меня.

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

Хочу сказать, что под скоростью разработки я не подразумеваю объем написанного кода. Написание 5 вместо 10 строк кода оказывает меньшее влияние на скорость, чем принято считать, поскольку это следствие, а не причина. Причина в сложности библиотек и инструментов, используемых с Java. Это время исследований и изучения нового. Java часто дает вам больше контроля над объектами и классами, это дает вам больше безопасности из-за сложности кода. Однако это имеет свою цену. Вопрос в том, «В какой степени вам нужно больше контроля и готовы ли вы платить за это?». Как обычно, ответ: «Это зависит». В моем случае оно того не стоит.

Заключение

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