Вот уже некоторое время при разработке ПО я всегда отдаю предпочтение либо С, либо C#/Python, сознательно обходя стороной С++. Почему?

Представьте, что вам нужно забить гвоздь. Но вместо обычного молотка вы используете супер-молоток Х-1000, который разрабатывается на протяжении 30 лет путем консенсуса 100500 забивателей гвоздей со всего мира, большая часть из которых является учеными-математиками и забивала гвозди только в теории, а остальные явно имеют философские наклонности. В итоге, вы в течение трёх суток генерируете на основе супер-молотка 13 специализированных молотков для забивания конкретно вашего гвоздя, но часть из них разваливается при попытке удара, а часть получилась с дыркой в центре. Через пять суток, после того, как вами подробно был описан гвоздь, молоток, фактура стены, были созданы абстракции-связки между всеми этими объектами вы обнаруживаете на супер-молотке Х-1000 кнопку работы в режиме обычного молотка и просто забиваете гвоздь.

Серьёзно, я даже не сильно утрирую.

Потому, что С++ перегружен. Нет, не так. ОЧЕНЬ, МАТЬ ЕГО, ПЕРЕГРУЖЕН. Он настолько перегружен функционалом, что при желании его можно даже отнести к эзотерическим языкам. На нём даже можно писать парсеры прямо в БНФ. Им можно описать абстракцию любой сложности, но, конце-концов, она станет разваливаться из-за сохраняющейся близости С++ к железу. И уж тем более станет чуть менее, чем полностью непонятна всем, кроме непосредственного создателя. Ранее я публиковал задачу, вся сложность и неоднозначность который базируется исключительно на выкрутасах этого языка. То есть грамматика С++ способна сама по себе порождать сложности и задачи, совершенно оторванные от практического применения, что характерно для эзотерических языков.

С++ пытается мочь всё, но при этом это всё получается у него плохо. Он перегружен настолько, что это просто сбивает с толку. Вместо концентрации на решении практической задачи, программист, используя чудовищные STL или Boost, вынужден бороться с их ненужными абстракциями и совершенно излишним проектированием. А после всего этого разработчик упирается в близость С++ к железу и все те проблемы, что это несёт, после чего абстракции на кофейной гуще становятся втройне бессмысленными. В С++ до сих пор даже не реализована система модулей, несмотря на регулярные и очень вдумчивые встречи по разработке стандарта!

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

P.S. Не нужен.

comments powered by HyperComments