Когда я присоединился к Neurobat в 2010 году, целью компании было разработать дополнительный компонент, который будет вычислять оптимальные уставки для вашей системы отопления. Такое устройство должно было быть небольшим, дешевым и работать достаточно быстро. Это исключило современные встроенные ПК, на которых сегодня можно с комфортом запускать Python; все приложение, включая «умную» библиотеку управления с прогнозированием моделей, должно было быть запрограммировано на языке, скомпилированном для собственных инструкций.

Большая часть этой библиотеки изначально была написана на C. Вскоре мы поняли, что дизайн может значительно выиграть от полной объектно-ориентированной ориентации. Поэтому, как только мы убедились, что наш набор инструментов поддерживает C++, мы начали портировать многие модули на этот язык. (Это был C++98, самая последняя версия C++, которую поддерживала наша цепочка инструментов.)

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

И тем не менее, я приложил согласованные усилия, чтобы сохранить свои навыки C++ на высоком уровне не только до того, как мы закрыли компанию, но и после этого. Я читал Эффективный современный C++, Современный дизайн C++ и слушаю каждый эпизод как CppCast, так и cpp.chat. Впервые я использовал C++ вместо Python для ежегодного конкурса Google Code Jam. Почему я это делаю? И что более важно, должны ли вы?

Если вы занимаетесь любым программированием, я считаю, что вам будет полезно знать C++, и вот почему.

  1. C++ существует уже 30 лет и, вероятно, останется актуальным еще много лет. Вероятно, это самый популярный язык, который компилируется в машинные инструкции, в отличие от «управляемых» языков, которые либо интерпретируются, либо компилируются в байт-код. И он явно доминирует в этой нише; Я не могу придумать никакой альтернативы, кроме D, Rust и, возможно, Go. C++, вероятно, самый выразительный язык, работающий на «голом железе», и одного этого было бы достаточно для его изучения.
  2. C++ остается лучшим вариантом для написания расширений для других языков или сред. Без C/C++ единственным способом расширения существующих систем является написание библиотек на том же языке, производительность которого не уступает языковой платформе. Например, в настоящее время я преимущественно работаю с R, и C++ — вполне естественный выбор при написании высокопроизводительных расширений для этой среды.
  3. Хорошо это или плохо, но C++ обладает почти всеми функциями языка программирования, известными человеку. Его называют мультипарадигматическим языком, и не без оснований. Он сочетает в себе аспекты процедурного, функционального, объектно-ориентированного и универсального программирования. И в настоящее время он переживает своего рода ренессанс, судя по скорости рассмотрения и выпуска новых функций. Если вы ищете какой-нибудь интеллектуальный вызов, сделайте своему мозгу одолжение и накормите его C++.

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

Первоначально опубликовано на davidlindelof.com 11 марта 2019 г.