Какие технологии должны знать программисты на C++?
С++ был первым языком программирования, в который я действительно попал, но большая часть моей работы над ним была академической или для игрового программирования. Большинство заданий на программирование, где я живу, требуют программистов на Java или .NET, и я имею довольно хорошее представление о том, какие технологии они требуют, помимо основного языка. Например, Java-программисту может потребоваться знать EJB, Servlets, Hibernate, Spring и другие технологии, библиотеки и фреймворки.
Однако я не уверен в С++. В реальных жизненных ситуациях, для общего бизнес-программирования, что программисты на С++ должны знать за пределами языковых функций? Такие вещи, как Win32 API, некоторые библиотеки, фреймворки, технологии, инструменты и т.д.
Изменить: я тоже думал о стандартной библиотеке, когда я сказал базовый язык, извините, если это было неправильно или не понятно. Мне было интересно, есть ли какие-либо более специфические требования к домену, подобные всем технологиям Java или .NET-программистам, которые могут потребоваться, чтобы узнать, как это связано с тем, что программистам на С++ нужно знать в целом. Я согласен с тем, что стандартная библиотека и Boost имеют важное значение, но есть ли что-либо помимо этого или оно отличается для каждой компании/проекта/домена?
Ответы
Ответ 1
Что касается каждого языка, я считаю, что существует три взаимосвязанных уровня знаний:
- Освойте свой язык. Каждый программист должен (делать все, что требуется) для овладения синтаксисом. Хорошие ссылки для достижения этой цели:
- Знайте свои библиотеки широко.
- STL определенно является обязательным, поскольку он был включен в С++ Стандартная библиотека, поэтому, зная, что она очень близка к точке 1: вам нужно ее освоить.
- Знание boost может быть очень интересным, как многоплатформенная и универсальная библиотека.
- Знать библиотеки, с которыми вы должны работать, Win32 API, OCCI, XPCOM или UNO (здесь несколько примеров). Не нужно знать библиотеку базы данных, если вы разрабатываете чисто графические компоненты...
- Разработайте свои знания о шаблонах. Невозможно избежать Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения здесь...
Итак, мой ответ на ваш обновленный вопрос: знать свой язык, знать свою платформу, знать свой домен. Я думаю, что здесь достаточно работы, особенно на С++. Это постоянная работа, которую никогда не следует упускать из виду.
Ответ 2
Разработчик С++ должен grok std и boost библиотеки.
Список других технологий во многом зависит от типа проекта. Конечно, у вас будет некоторое взаимодействие с SO, поэтому вам нужно будет знать API своей среды.
Что касается доступа к данным и других материалов, то для разных решений есть тонны. С++ намного богаче, чем некоторые управляемые языки в этом смысле. 99% старых популярных систем имеют интерфейс C/С++.
После того, как вы немного уточнили свой вопрос в комментарии к моему ответу, я могу порекомендовать:
- Хороший браузер кода (SourceInsight или Understand для С++, например)
- Инструменты статического анализа (Link, KlockWork Inforce и т.д.)
- MySQL\SQLite (я столкнулся с этими БД в огромном количестве проектов на С++)
- Технологии пользовательского интерфейса (OpenGL\GLUT, DirectX, GDI, Qt и т.д.)
Ответ 3
технологии, которые вы должны знать как программист на С++ (и, следовательно, более технически знающие, чем менее программисты;)):
проблемы с производительностью - что мешает работе, как найти и исправить такие проблемы. Я также имею в виду такие вещи, как переключение контекста, линии кэша, оптимизированные поисковые запросы, использование памяти и ограничения, а также подобные вещи, которые не интересует ваш средний разработчик VB/С#.
проблемы с потоками - как получить максимальную отдачу от многопоточного приложения, как обнаружить и устранить злоупотребления тем же.
низкоуровневая связь - особенно возможность подключаться к темным системам, которые никто другой не написал инструментарий для (особенно радиокоммунктов), латентность и управление пропускной способностью.
В противном случае для определенных инструментов - это зависит от того, на что вы нацеливаетесь, Windows dev будет отличаться от Linux, отличается от встроенного.
Ответ 4
Библиотека стандартных шаблонов
http://en.wikipedia.org/wiki/Standard_Template_Library
Ответ 5
Это будет во многом зависеть от используемой платформы и других ограничений. Как правило, хороший (С++) программист должен (или должен) научиться API-интерфейсу платформы за очень короткое время. Для С++ гораздо важнее понимать различные цепочки инструментов (например, программист Windows должен также знать цепочку инструментов GCC) и различия в компиляторах. Программист должен также понимать ограничения и поведение платформы на основе платформы.
Что касается библиотек, программистам на C++ абсолютно необходимо знать STL и Boost. Нет обсуждения.
Ответ 6
Помимо всего перечисленного, имейте в виду, что программист на С++ имеет место на рынке встроенных систем (намного больше, чем большинство других языков высокого уровня). Так что знакомство со встроенными системами и разработками может открыть много дверей и возможностей для работы, вы не будете так сильно конкурировать с разработкой Java, например. Поэтому изучение кода компактного кода (компактный после компиляции) и использование методов низкой памяти - хорошая ставка.
Ответ 7
В конкретном порядке
- COM/ATL
- DirectX
- MFC и Win32
- STL
- GDI
- BOOST
Ответ 8
Если вы используете gcc, вы обязательно должны знать gdb. На самом деле, вы должны быть опытными с локальным отладчиком в зависимости от того, какой компилятор вы используете. Кроме того, существует такой широкий диапазон используемых библиотек, что возможность быстрого получения API более полезна, чем любая конкретная. Я бы посоветовал учиться doxygen.
Ответ 9
Если вы используете linux, Valgrind - очень полезный инструмент для проверки того, как ваша программа работает с доступом к памяти.
Ответ 10
Популярный способ использования С++ в мобильном пространстве предполагает изучение разработки Symbian OS.
http://developer.symbian.com