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 have been programming for 3-4 years now and feel I can no longer be called a beginner, but I read some questions on this site and think WTF are they talking about? I feel the same way when I pick up programming books nowadays.

I have read several beginning programming books, some on C/C++ and others on gaming. I have written some more complex things such as very basic AI, serial and TCP/IP interface.

I plan on becoming a game programmer, but I have recently become somewhat interested in embedded systems after having the chance to work on them (the serial interface).

I have found it very difficult to find materials to continue my learning after completing the introduction and beginner books as the are no intermediate C++ books I can find.

What advice would you give to grow and enhance my knowledge and skills? Specific resources would be greatly appreciated.

share|improve this question

migrated from stackoverflow.com May 13 '11 at 11:00

This question came from our site for professional and enthusiast programmers.

    
For C++ books see this question: stackoverflow.com/questions/388242/… –  Naveen May 13 '11 at 11:04
    
See also: programmers.stackexchange.com/questions/75173/… –  Paul R May 13 '11 at 11:20

4 Answers 4

If you're talking about C/C++, then you definitely could use some extra experience. The first hint I'll give you is that C and C++ are completely different languages. The best resource to learn C++ is StackOverflow- there are many people there who have vast quantities of experience and knowledge.

The next thing to do is to start a major project, like trying to write a 3D graphics engine in a low-level API like DirectX, and when your design miserably fails like all first projects do, then you'll learn something about how not to program.

You can check this link on StackOverflow for a large list of good books to learn C++.

share|improve this answer
2  
No, the best resource to learn C++ is a good book, or preferably books. –  nbt Jun 9 '11 at 17:47
    
+1 For starting a major project. I have learned more from struggling through a 3D graphics engine than anything I read in a book. It forces you to get into unfamiliar situations that require research to solve. It isn't pretty, it isn't efficient, but you will learn something. –  SC Ghost Jun 9 '11 at 20:40

First of all, increase your basic theoretical background in whatever you do not yet know. Study the theory and write a few short examples.

Example basic theoretical background includes:

  • Algorithms and Datastructures
  • Software design (UML, design patterns, OOP)
  • Operating Systems and Parallel Programming

Then, consider learning an additional language (for instance Java or C#). - Studying additional languages helps better under the pros and cons of what ever language you are using and helps you learn best practices that you may not aware of.

Next choose a new domain (web programming, computer graphics, image processing, computer vision, data access, ...). Study the theory and write a few short examples.

Next create a large example, that encapsulated a multi-layered application, handling data access, UI and a specific domain you have chosen. Put emphasis on the architecture of the application (make sure its parts are as loosely coupled as possible).

Hopefully, you will learn how to learn new approaches and technologies and integrate them with a good architecture.


Specifically for game programming I recommend choosing the following domains/technologies:

  • Image Processing basics
  • Any specific UI technology
  • Computer Graphics basics
  • Any specific graphics engine (e.g. DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Mechanical Physics basics
  • Any specific physics engine (e.g. PhysX, ... )
  • Any specific game engine (e.g. XNA, ...)
  • Multi-threaded programming
  • Distributed programming


Edit:

How to learn:

  • Read and run examples from CodeProject.
  • Browse through a few books in a book/ebook library or store until you find a couple of books that your like (that match your reading style + cover the topics you want to read about).
  • Read blogs.
  • Try things and ask on StackOverlow when you get stuck.
share|improve this answer
    
I do know direct x. second I have thought of this but cannot find any resources beyond the very basics, do you have any advice on HOW to learn the things ? –  Skeith May 13 '11 at 11:36
2  
By writing examples - trial and error is the best way. Also, see edit. –  Danny Varod May 13 '11 at 11:42

Using C++ (in combination with C) suppose that you'll have erally more to learn to understand WTF they are talking about. C++ is several languages, several layers of abstractions living in the same place and it takes a lot of time to explore it all once, then understand what you just seen.

I've been in your case and I'm still learning about those languages. I also learn a lot working on embedded systems.

Here is my advice :

  • Read those books : http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list -> Start with the introductory books, even if you feel you're not beginner, because you have to solifidy your basic knowledge a lot before going on. Then learn about template metaprogramming and embedded systems restrictions.
  • Practice a lot : the more you apply what you learn, the more you understand it. On this point, my way of doing is to test any corner of the languages and context in little test projects. I also have "big" home projects where I'm in control of everything and I practice new techniques and push them until they break.

Don't assume you already know a lot about programming. Most developpers get mature in programming only after more than 10 years of real world practice, with different context and kind of projects, platforms etc.

You're just beginning your journey.

share|improve this answer
3  
Not to mention that "mature", as you're using it, is far from "nothing left to learn". The more you learn, the more stuff that you know you don't know. –  David Thornley May 13 '11 at 13:37

Based on your interests in embedded programming and games, I would also recommend the following - you can peruse the booklists from the above posts to find good source material on all these subjects. One book I found essential was The C++ Standard Library: A Tutorial and Reference

  • If you aren't comfortable with the basics of OOP - learn those first. Understand the basics of inheritance and encapsulation. Know how the virtual, public/protected and private, and static keywords behave.

  • Be comfortable using pointers and references (and generally prefer references). Learn and use the smart_ptr<> construct to achieve "automagical" memory management.

  • Learn how to use C++ templates - initially just as container data types. You will continually discover new and more powerful techniques that C++ templates can perform via meta-programming.

  • Learn the STL: use string, iostream, exceptions, and the container classes, and prefer them over the lower-level char*, FILE*, and char[] datatypes whenever practical.

  • Start using parts of the Boost library - I would recommend you learn their asio and thread library first, given your interests. This is a very powerful, open-source, cross-platform C++ source base that will let you write high-quality code that is also portable. (Many additions to the core C++ standard have originated in Boost contributions)

  • Have fun! Seriously - pick some pet projects to code up. Maybe tinker with Arduino boards if you like embedded programming projects.

  • Get some breadth of experience - if you've only used Windows/Visual Studio C++, try writing some code for Linux/g++, or OS X/XCode (you can code C++ on the Mac, or you can really expand your horizons and go for Objective-C, to see how another branch of OOP languages tackle things!)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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