There are huge numbers of programmers, especially juniors, who need good assistance in becoming professional.

I've heard a lot of about "books every programmer should read", etc. I have two years of programming experience, feel good in C++, but currently have a strange feeling, that I do not know anything about programming.

I should read Algorithms by Cormen, Code Complete by McConnell etc., but I don't know the exact steps required to become a professional.

What should we do? What should we learn? Operating systems? Computer organization? Algorithms? C++ in depth? How much time do we have to spend to become what we want?


You don't become professional just by reading books, but by practicing.

  • Write code every day.

    Like you can't learn how to play a violin without playing, you have to code in order to become a developer. Like any other domain, development requires years and years of practice.

  • Read code of other people. Why are they writing something this way? Is it better than yours? If yours is better, how could you explain it?

    Anyone can come with a programming solution to most problems most developers have daily. The difference between a good and a less good developer is that a good one will solve the problem beautifully: just by looking at her code, you'll understand both the problem and how it is nicely solved. A less good developer will write lots of code which will be unclear, difficult to read, and while solving the problem, will do it in a confusing way.

  • Ask others to review your code: if there is no full code review in your company, ask your most experienced colleagues to review your code. Don't feel insulted when they make negative remarks about your code, but consider it as an opportunity to learn and to improve your work.

  • Actively participate to the meetings of your team.

    Code is not the only part of the job of a developer. You're not code monkey. You have to understand how the team is organized and lead, how the overall architecture of the project is done, etc.

  • Be curious about the other team members and the people you work with: what is the job of your database administrator? Why is there a dedicated system administrator? Why every project need a visual designer? What is the difference between your job and the job of the lead developer in your team?

    Not only you will be able to learn lots of things, but it will also help you to work with other people later. If you don't know anything about a job of a person who writes HTML/CSS and you work daily with this person, providing her with code behind part of the project, problems will arise soon or later.

  • Be curious about the projects themselves, aside the development. What happens inside the QA department of your company? How the project is pushed to production? Who writes bug reports?

    Understanding the context of the project helps you, as a developer, to have a broader look at the project and provide better code.

Remember that:

| improve this answer | |

The term "professional" actually means that you earn your living through programming. That's all you need to be a professional.

Quality of your work is a separate issue, and judging by the rest of your question, this is the thing you worry about. It's not clear whether you already have work experience or not - if you do, MainMa's answer provides good pointers.

However, if you don't - know that you'll learn a lot through day-to-day work. I believe it won't be an understatement - I have learned more during the first year of my work than I did over five years university, and I was a good student, if I can say so myself. Having to deal with actual problems instead of artificial textbook ones, having to do so with deadlines looming over and having to do so provided only with incomplete, lacking or outright contradictory specification is what I believe makes you a professional. Code Complete and other "pragmatic" books are certainly a good lecture by themselves, but their value really shows in context of real-world experiences.

| improve this answer | |

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