Welcome to MSDN Blogs Sign in | Join | Help

The great programmer

On a private discussion forum that I frequent, someone asked for advice I would give to a 16 year old that they were mentoring that had an interest in programming. A healthy debate ensued about what constitured a real programmer. I asserted the following:  (Edited for brevity)

"On one hand, I think that you're not a "real programmer" unless you can write C/C++ (or similar) and have a good sense of the assembler that will be output by the compiler."

"However, I have to admit that modern languages like C# and Java are really compelling and incredibly powerful... I just feel that anyone who learns these higher level languages without understanding what's happening a little closer to the metal isn't really a programmer."

I went on to recommend a couple of great books:

  • Ivor Horton's Beginning C++ (a fantastic author with a great style for explaining stuff to beginners.)
  • Hackers Delight by Warren (A lot of fun)
  • CODE by Petzold (one of my favorite books and authors of all times-- great for someone who wants to get into programming.)
  • Once he gets a little deeper, if he wants to understand some of the underlying computer science type concepts, I can heartily recommend "The Art of Programming" which is a fantastic three-volume set by Knuth.

As can be predicted, a flame war ensued... I won't post the others' comments because I feel that they belong to them, and posting them would violate the letter and spirit of the terms of this private forum. However, my final response was as follows:

"...The smartest developers know how to best leverage the right tool for the job. Often times, that's a great integrated development environment (i.e. VisualStudio.NET) and often it's a higher level language (like C# or Java, or even Ruby or ColdFusion!) However, when building a complex application, there are often times situations where the right tool for the job is C or even Assembler, and the great developers know how to move down into that level when appropriate."

"Also, it is impossible to write great code at even the highest level of abstraction without knowing exactly what's hapening in the layers underneath you. To use a more concrete example, I'm not saying great programmers don't use C# and VisualStudio.NET-- I'm saying that when they do, they understand the IL (Intermediate Language) code that will be generated by the compiler, and the understand what Assembly will be generated when that IL is eventually compiled and run on a processor."

"Bottom line, it's not about what tools you choose to use-- it's about the degree to which you understand what those tools do, and how they work. It's about understanding the layers beneath you."

"Real programmer is probably not the best description. But there is definitely a line that separates people with a firm foundation in computer science and people who know how to write PHP (and only PHP.) A great developer can pick up a new language in a weekend-- he or she is not dependant on knowledge of a given platform." Of course, we've gone way off course from the question the original poster was asking. :)"

"Read books. Lots of books. If it sparks your interest, you may decide you want to go to school and study it... but you don't have to. Experement-- try things out. Learn. When "hello world" works for the first time, stand back and be proud of your achievement, but don't stop there... seek to understand WHY it works, and think critically about what is happening underneath the covers. It's a tough process, but it's rewarding... you may not see the light at the end of the tunnel when you first start out on the journey, but the way out is through. It can be incredibly rewarding."

I stand behind this, and think it's good advice for aspiring developers.

   --- JRJ

Published Saturday, March 18, 2006 2:01 PM by jrj

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# re: The great programmer

Why you stop at assembler level?

How about reading information about processor pin-out and that's going then assembler instructions executed?

As welll - person who mastered Assembler - can be really weak in C# design patterns.

The great developer is one that knows his abstraction level very well and can effectively interact with developers who know others abstraction levels better then him.
Saturday, March 18, 2006 6:41 PM by TAG

# re: The great programmer

I realize the above poster was being sarcastic, but with modern processors, I believe a little bit of knowledge of what is going on below the assembler level *is* important.  In the old days it was simpler - one CPU instruction took about as long to execute as any other - but now with multiple cores, L1/L2 cache, etc it's a little more complicated.  Otherwise well-crafted assembly code can perform sub-optimally because a loop requires one more byte than will fit in the cache.

With so many applications moving to Terminal Services and the Web, the old excuse of "we've got multi-gigaherz CPUs with gigs of RAM so we can spare the cycles" doesn't work as well as it used to.
Sunday, March 19, 2006 3:37 AM by Adelle

# re: The great programmer

Would you let them in on the dirty little secret of the industry?

That programmers probably spend just as much time interacting with other people (devs, tests, pms, users, etc) as they do with their computer. And that in order for them to be successful, they need to cultivate their people skills just as much as their technical skills.
Sunday, March 19, 2006 3:54 AM by Udi Dahan - The Software Simplist

# Link Listing - March 19, 2006

CAB Best Practices
[Via: ]
How to detect VS.NET DesignMode in server
controls [Via: Rumen Stankov...
Sunday, March 19, 2006 10:08 PM by Christopher Steen

# re: The great programmer

I beleve one should start with a higher level language, and after competency is reached there, eventually move on to assembly/machine code/system design -- but as a "philosphy of programmer" level and not necessarily to the point of actually being able to program at the level.   You'd be wasting far too much time and confusing people with obscure idiosyncacies of a particular CPU, if you went deep into assembly.

Also, this glosses over the single most important piece of advice to give a 16-year-old learn to program:   First, learn how to type!
Monday, March 20, 2006 1:40 PM by James Curran

# re: The great programmer

A great programmer ships.
Tuesday, March 21, 2006 10:13 AM by Jason Ayers

# jrjBlog The great programmer | Wood TV Stand

Sunday, May 31, 2009 8:51 PM by jrjBlog The great programmer | Wood TV Stand

# jrjBlog The great programmer | Indoor Grills

Monday, June 01, 2009 3:50 AM by jrjBlog The great programmer | Indoor Grills

# jrjBlog The great programmer | Weak Bladder

Sunday, June 07, 2009 9:29 PM by jrjBlog The great programmer | Weak Bladder

Leave a Comment

(required) 
required 
(required) 
 
Page view tracker