Разбираться в новой для себя области, конечно, интересно, но хочется в будущем и пользу с этого иметь. Поэтому, разбираясь сейчас с плюсами задался следующими вопросами:
1) Дополнительные технологии. Перелопатив несколько десятков вакансий, обнаружил, что востребованы знания STD (что, впрочем, не дополнительная технология) и Boost по части библиотек, плюс сетевое и многопоточное программирвоание по части технологий. В остальном же — прикладная область.
Есть ли ещё какие-либо must know вещи для c++ разработчика, которые не зависят от специализации (алгоритмы, ооп, архитектуры ос и прочие фундаментальные вещи — это к впросу не относится, т.к. понятия языконезависимые и их знать в любом случае нужно, а меня сейчас интересует конкретно C++)
2) OpenSource-проекты с низким порогом вхождения и качественным кодом, чтобы такой новичок в прикладном программировании (за плечами в основном веб) как я мог видеть, как это делают взрослые дяди, и писать код, который будут смотреть и оценивать другие программисты.
В общем суть такова, что я хочу стать через некоторое время востребованным c++ разработчиком. А для этого одного только знания языка недостаточно, как показывает моя практика.
p.s. Я смотрел и в сторону .net, и в сторону java, и в сторону мобильных платформ, но не приглянулись, поэтому советы по поводу выбора другой технологии будут излишни, я думаю.
Qt это другой мир, не std и не boost. Я думаю тех требований которые вы нашли в вакансиях очень даже достаточно. Надо практиковаться много — много. В c++ у вас развязаны руки и надо на практике набивать шишки, чтобы понять когда и насколько использовать все эти си плюс плюсные фишки.
Если вам хочется писать «труъ» программы, где главное логика, алгоритмы, скорость, то лучше больше смотреть на std, boost, если больше гуя, то более глубоко изучать Qt.
Проектов подсказать не смогу к сожалению. Хотя бы пока что посмотрите исходники, ну того же boost. Там все довольно сложно и дизайн «библиотечный», то есть все написано максимально абстрактно и обобщенно (в реальных проектах это скорее зло). Но что-то уже покажет и чему-то научит. Начните с простого (с библиотек, обеспечивающих кроссплатформенность): boost time, boost thread, потом можно boost asio (она сложнее намного).
Что точно должен понимать c++ программист из чисто технических вещей, не относящихся к мастерству — шаблоны. Попробуйте научиться делать вещи, работающие аналогично boost::enable_if, boost::any(+использование RTTI), boost::HAS_XXX (определяет объявлен ли тип XXX в такой-то структуре), потом можно научиться сортировать списки типов (есть в Александреску современной проектирование на С++), заодно в программировании на чистом функциональном языке потренироваться можно. После этого шаблоны — ваши :)
Да, тут зависит от компании, в которой работаете. Каковы задачи, какова квалификация программистов, как привыкли делать. Шаблоны — фишка С++, хорошее понимание шаблонов обязательно для хорошего с++ программиста.
Часто требуется опыт работы в команде, использования систем контроля версий и написания модульных тестов. Работа с каким-нибудь багтрекером не повредит. Дальше идут знание кроссплатформенных библиотек, WinAPI/Posix, разработка многопоточных/сетевых приложений и тп.
Хотя и полуофф, не смотрели в сторону языка D? Хотя по распространению и кол-ву разных либ он (примечание: с сишными совместим) и уступает C++, сам язык декларируется как современная замена C++, лишённая его исторических недостатков, удобная и практичная.
Я задавался таким же вопросом как и вы, и пришёл к выводу, что буду смотреть в первую очередь именно D (пока нахожусь в процессе освоения C).
Нет, не смотрел. Честно говоря, вообще краем уха слышал про этот язык, сейчас на вики про него почитал подробнее. В общем пока нет желания, т.к. долго думал насчёт своей специализации (несколько лет в веб-разработке, надоедает потихоньку) и в итоге остановился на прикладном софте, в частности вот на сабже.
По первому пункту — изучите шаблоны проектирования. Также будет совсем нелишним ознакомиться с замечательной книгой Фаулера "Рефакторинг". Примеры, приведённые в книге можно транслировать применительно и к другим языкам программирования.
Совет дельный, но я специально упомянул, что такие фундаментальные вещи можно не упоминать. У меня и Рефакторинг и ГоФ давно стоят на полке, хорошие книжки =)
В данный момент меня именно C++ специфика.
В общем случае достаточно знать, что есть в stl и примерно знать, что есть в boost. Это нужно для того, чтобы быстро сориентироваться где найти решение и не велосипедить.
Было бы неплохо почитать книги Майерса, Саттера и Александреску. Это поможет понять некоторые узкие места языка. Ну и писать собственно :) Опыт бесценен.
По поводу Qt: стоит почитать где-нибудь туториал по нему, чтобы понять что-к-чему(слоты\сигналы, метасистема и т.д) и потом уже кодить, опять же. Qt довольна простая библиотека(в плане освоения) с отличным потенциалом. Советую, также, сразу смотреть в QtQuick как перспективное GUI в Qt
QT меня интересует именно с точки зрения кроссплатформенного гуя, туториал бгло посмотрелЮ всё вроде просто. Интересно, как он в плане востребованности на рынке идёт. Потому что можно в него углубляться, а можно поверхностно просмотреть.
1) В реальных проектах весьма вероятно наличие легаси кода на чистом C, поэтому понимание pure C необходимо (учтите еще большое количество библиотек на Си беъ плюсов).
2) Посмотрите на исходники MongoDB, проект писался как раз на современном C++.