Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I switched to C++ a few months ago, learning its syntax, the main features of the STL and what you can usually find in a "learn C++" manual.

Now I would like to go further. What would be your recommendations? I would like to know what to learn next (not only about the language, but also debugging, frameworks etc. etc.) I know probably the answer depends on the specific needs of each user, so here is a list of mine:

  • Cross Platform development
  • Developing GUI for my programs
  • Develop extendible software, allowing the use of plugins
  • Use of scientific libraries
  • Interact with databases (mainly MySQL)
  • Having server/client functionalities (I'd like users of my programs to interact through internet.. as you might have guessed I am not a programmer by training so I might have used the wrong terms.. if so I apologize for that).

Of course I know it takes time, but I would like to have a good list of references and resources to start (both books and websites are ok).

Thanks a lot for your help!

share|improve this question

closed as off topic by gnat, BЈовић, Thomas Owens Sep 11 '12 at 11:39

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

3  
From your list I think you should take a look at the Qt framework (qt.nokia.com/products) and what that offers, it may be a big step on your path to extensible, cross-platform GUI projects with networking functionality. –  Joris Timmermans Sep 11 '12 at 7:32
    
As mentioned in the FAQ, questions about what to learn next are explicitly off-topic. Also, questions that generate lists are not considered to be good subjective questions. –  Thomas Owens Sep 11 '12 at 11:40
    
Sorry for being OT. I moved the question on stack exchange.. –  lucacerone Sep 11 '12 at 12:40

2 Answers 2

If there's one thing I could recommend, it'd definitely be Boost C++ Libraries. In fact, Boost is not a single library. It's a collection of them, and they're high-quality, portable, open source and well praised by people ranging from students to the C++ standards committee.

Since Boost does not include GUI or anything else which is platform-dependent, there's also Qt, the cross-platform UI framework. Qt supports almost every single computing platform around nowadays, Linux, Windows, Mac, as well as Symbian and Windows Phone platforms. Since the recent acquisition of Qt by Digia, there are plans to introduce Qt on iOS and Android platforms too. So Qt is most definitely what you want to get familiar with, when it comes to cross-platform UI development.

A further word about C++ itself; as you most probably know, C++11 is the current C++ standard. C++11 almost makes it feel as if it was a new language altogether. Getting familiar with it's new features will take time, so I would also consider focusing on learning some of the new things here and there. Especially some the new standard library additions such as smart pointers are something you might really get used to. Not that they're hard, not at all. Just that they're so important for the sake of safety.

Although this isn't exactly what you asked for, C++ is a vast language. Hard to master, yet it's mastery is very crucial in order to produce effective, safe, obvious and most importantly easy to understand code. Frankly, I'd start by reading Scott Meyers' Effective C++ and More Effective C++ if you haven't already. Sure, neither covers C++11(the fourth edition of Effective C++ will do that, but probably in 2014 or so), but they are extremely valuable to any uprising C++ programmers. Read them. Also C++ Coding Standards by Herb Sutter and Andrei Alexandrescu might come in handy.

share|improve this answer
    
Do you know if Qt is moving to C++11? Will this affect the way in which we code in Qt? –  Giorgio Sep 11 '12 at 8:29
    
Good answer. I'd add Herb Sutter's "Exceptional C++" books to the required list as well, and/or the Guru of the Week posts by Herb (herbsutter.com/gotw). –  Joris Timmermans Sep 11 '12 at 8:33
    
@Giorgio I wouldn't assume big API changes at all, perhaps some new constructs here and there but the transition to C++11 will take years. Probably sometime next year we'll have a compiler which conforms to most of the major C++11 features, so don't expect C++03 to be "gone" any time soon. "Investing" on C++11 is "investing" to the future, it won't be widely adopted on old code bases for years to come. Transitions like these take time, sometimes decades(See C89/C90 vs. C99 as an example, "everyone" writes "ANSI C"(C89), and Microsoft doesn't even support C99 in their compiler, and it's 2012..) –  zxcdw Sep 11 '12 at 8:34
    
@MadKeithV Definitely. Exceptional C++ books are awesome, and perhaps just as significant as Meyers' Effective C++ books. Andrei Alexandrescu's Modern C++ Design is also a must-read. I'm wondering how many people C++ has scared off because one "has to" read "all these dozens of books!", many newbies would just rather code than read books. :) –  zxcdw Sep 11 '12 at 8:39

Besides boost and Qt (which is a good suggestion), you could also learn a new programming language. Currently, the most popular cross-platform languages matching your list are Java, Perl, Python and Ruby (though the 3 latter ones are not so strong supported with tools on the GUI development side).

Learning a new language will also give you insides about the strengths and weaknesses of C++, so you don't become a "one trick pony".

share|improve this answer
    
Strongly agree with another programming language. I would however probably skip Java as being mostly subset of C++ and on the other hand add some languages that are more different. Like Haskell (though it's GUI framework support is more experimental), F#, Clojure, Scala, Go, possibly Smalltalk. Learning language with different paradigms makes one a better programmer even though they are not going to use it much in production. –  Jan Hudec Sep 11 '12 at 10:02
3  
@JanHudec: "Java mostly a subset of C++"? Are you aware that such statements often start a holy war ;-) ? –  Doc Brown Sep 11 '12 at 10:52
    
@DocBrown In the same way like suggesting someone who has just learned C++ to make a take on Java ;-) –  Christian Rau Sep 11 '12 at 13:34
    
@ChristianRau: some "true C++ believers" may take that as an offense, of course. But actually I did not mean "learn Java because it's better or worse than C++", but "learn a new language to get a different viewpoint and make your own opinion". –  Doc Brown Sep 11 '12 at 13:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.