How Do I Become a Great Programmer?


Everyone I’ve talked to has taken a different path. Programming is different from other engineering disciplines; if you want to become an electrical engineer you go to school, graduate, work for an engineering firm, and one day take a test and get licensed. Programming is different because people do it as a hobby; no one designs electrical subsystems for fun. This creates more possibilities for learning how to code.
Here are the elements I think are critical:

Learn, Learn, Learn

 You must have an insatiable appetite for knowledge. This usually means reading a programming book every few weeks in the early days, and moving on to more conceptual books like The Pragmatic Programmer, Code Complete, and Facts and Fallacies after 6-12 months of full-time coding. I can’t stress enough the value of reading, or the value of immersing yourself in code early in the process.
Transition into Concepts
 Learning how to be a good programmer begins with learning logic concepts and language syntax; they are much easier to understand when taken together. But good developers quickly desire knowledge that transcends language syntax. Perl, PHP, Java, ColdFusion, ASP…all languages I used in my first 18 months as a professional programmer. What made me a good programmer was not my knowledge of each language, but my desire to understand and refine concepts like D.R.Y., the broken window theory, and code re-use (all gleaned from one of the best books for becoming a good developer – The Pragmatic Programmer).

Hang Out With Programmers Who Are Better Than You

 As a guitar player, the most I ever learned about the craft of songwriting was when hanging out with people who were much better than I. The same goes for writing software.
And due to this new-fangled internet thingy you don’t even have to be physically present to be a part of the community: read programming blogs from the heavy hitters (Scott Guthrie, Rocky Lhotka, Dino Esposito, Scott Mitchell, etc…), check out programming forums, and look at other peoples’ code.
Reading source code can be a pain, but the more you see the more you will be able to identify code that’s easy to understand, and code that takes a PhD to figure out how they output “Hello World” to the screen.

I would tell someone wants to be a programmer that the world has enough “programmers”. What we need, and what you want to be, is an “engineer.” I run into lots of “programmers”, folks who have read “Learn C# (or whatever) in 21 Days” and think they can program on 100k LOC systems. If I were guiding a young person looking to get into software, I would teach programming, yes, but only as a facet of software engineering:

  • Learn how to gather requirements. 
  • Learn how to design a system based on the requirements, and look for design patterns, such as n-tier, MVC, etc…
  • Write your code so that it is testable and maintainable. 
  • Learn to WRITE TESTS!!
  • Learn to refactor. Honestly, programming should be about half of what an engineer does.

Comments

Popular Posts