Куда податься C++ разработчику
Текст касается тех, кто работает с С++ и хочет продолжить работать с ним дальше, но не знает куда сейчас свои усилия для получения максимальной выгоды в будущем. Я плюсовик, а потому нижеизложенное касается меня лично — это часть мыслей вслух.
Сейчас большинство С++ разработчиков вытесняется из сферы разработки desktop приложений, при этом такие перспективы прослеживаются как для индивидуальных разработчиков, так и для фирм, которые предлагают услуги аутсорсинга. (Тут больше личный опыт и отзывы коллег из разных фирм в этой же отрасли).
В таблице я привёл наиболее существенные плюсы и минусы языка С++ с его ближайшими конкурентами для десктопных приложений. Т.к. сейчас на десктопных приложениях начинает массово использоваться Веб, то пришлось отразить и этот минус.
С++ | Java | C# | |
---|---|---|---|
скорость работы при том же функционале | + | — | - |
управление памятью | — | + | + |
скорость написания приложения | — | + | + |
веб-технологии | — | + | + |
Плюсы не-С++ языков я не собираюсь рассматривать, а сосредоточусь на пунктах, которые касаются С++.
1. Эффективность
Можно привести ссылку на «Совершенный Код» МакКоннела[1], а можно просто здраво подумать о том, что в случае конкурентов кроме самого приложения работает ещё «виртуальная машина», хотя, принимая во внимание текущие мощности десктопных компьютеров, этот плюс перестаёт быть настолько важным.
2. Управление памятью
Тут у С++ минус совмещён с плюсом: полный контроль, управление неудобное и ошибиться очень легко. В принципе, эти минусы снимаются грядущим стандартом C++0x[2]: 1) с помощью шаблона shared_ptr, который позволяет минимизировать ошибки при работе с памятью, 2) ограничения языка, которые препятствовали введению в него «сборщика мусора» устраняются. И если
3. Скорость написания приложений
Написать десктопное приложение на Java или C# просто проще из-за того что структуры языка изначально предусматривали предоставление этого удобства, тогда как в С++ это настраивается с помощью сторонних библиотек таких как MFC, Qt, WxWdgets, WindowsAPI. В большинстве своём они либо неудобны, либо содержат привязку к ОС. Грядущий Qt от Nokia, который является бесплатным и предоставляет кроссплатформенность, должен будет решить эту проблему. Но опять же, грядущий... (Да, я знаю, что бета уже доступна, но между бетой и релизом довольно большой шаг).
4. Веб-технологии
Казалось бы, расширение возможностей С++ с помощью «managed C» позволит применять все доступные современные технологии из MS Windows .Net framework (примером такой технологии может быть — AJAX), но ситуация с WPF, когда использование его в managed C++ было довольно кривым и требовало большого «шаманства» — в результате Майкрософтовские академии даже не рассматривали этот язык, как язык, в котором можно работать с WPF[3]. Принимая во внимание вышесказанное а также сказанное на PDC2008 в презентации "TL13:10 is new 6"[4], что managed C++ устраивает в текущем варианте, и внесение изменений не планируется, можно сделать вывод, что поддержка новых веб-ориентированых технологий в С++ ограничится скорее всего самописными граблями.
В такой ситуации (снижение роли эффективности на десктопах, неувязки с использованием новых технологий) С++ разработчику вполне реально можно рассматривать варианты своего развития в сферах, где его язык будет давать существенные преференции. С моей точки зрения это embedded приложения.
Именно в embedded приложениях С++ сейчас будет проявлять себя с лучшей стороны: изначально предусмотренная в языке возможность работать с аппаратной частью напрямую и эффективность будут давать значительные преференции для С++, если вообще пустят Java или C# в эту область. В связи со своей нацеленностью на независимость от аппаратной части эти языки не содержат методов для работы с ней(для примера таких ограничений можно посмотреть статью Саттера "volatile vs. volatile«[5]). А ограниченность машинных ресурсов позволит эффективности языка играть существенную роль. Один из важных людей в С++ С.Майерс считает приблизительно так же[6].
Так что, если вы не фрилансер (передача реальной аппаратуры
Статья по теме:
Перспективы для украинского аутсорса в embedded решениях с советами для разработчика решившего заняться embedded программированием.
www.developers.org.ua/.../12/embedded-outsourcing
Ссылки:
- ^ «Совершенный Код» МакКоннела глава 25
- ^ C++0x стандарт www.open-std.org/...ocs/papers/2008/n2798.pdf
- ^ Личное общение с тренерами из киевской академии Майкрософта.
- ^ channel9.msdn.com/pdc2008/TL13
- ^ Саттер «volatile vs. volatile» www.ddj.com/...mance-computing/212701484
- ^ Scott Meyers: A Unique Perspective on C++ www.youtube.com/watch?v=Ja5zJ_eAu-w
169 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.