In response to the question, "What do you think are the important things students need to learn if they are to become good C++ programmers?", Joel Spolsky writes, "Off of the top of my head, some of these topics are:
- the relational model and modern DBMSs
- user interface design and usability
- techniques for coding on large teams
- software design and writing functional specifications
- debugging
- Windows and COM programming
- sockets programming and common Internet protocols
- database-backed web site development
- writing! Because great programmers are great communicators."
So how do I stack up against this list?
- I have a fairly good grasp of relational databases. I can't recite the Nth Normal Forms from memory, but I can look them up and I can recognize a badly designed database scheme when I see one.
- I've been devouring books and articles on UI design since the late '80s. I know good and bad design when I see it. I've corrected bad UI designs during the design phase.
- I haven't done coding on large programming teams; I watched form the sidelines.
- I've written functional specifications and I've designed and implemented small programs.
- I'm familiar with the basics of debugging through examining log files, placing inline trace statements, and using interactive debuggers.
- I'm a complete newbie at Windows and COM programming.
- I'm a complete newbie at using sockets; I can tell you some basic things about common Internet protocols.
- I have done database-backed web site development. I wrote a proof-of-concept for a searchable video download web site that was demonstrated at CES in 2005. I wrote a system that lets people rate and comment photographs. I've looked at the code for Drupal and thought of ways to make it generate pages faster.
- I'm a good writer.