Professional Development

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:

  1. the relational model and modern DBMSs
  2. user interface design and usability
  3. techniques for coding on large teams
  4. software design and writing functional specifications
  5. debugging
  6. Windows and COM programming
  7. sockets programming and common Internet protocols
  8. database-backed web site development
  9. writing! Because great programmers are great communicators."

So how do I stack up against this list?

  1. 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.
  2. 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.
  3. I haven't done coding on large programming teams; I watched form the sidelines.
  4. I've written functional specifications and I've designed and implemented small programs.
  5. I'm familiar with the basics of debugging through examining log files, placing inline trace statements, and using interactive debuggers.
  6. I'm a complete newbie at Windows and COM programming.
  7. I'm a complete newbie at using sockets; I can tell you some basic things about common Internet protocols.
  8. 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.
  9. I'm a good writer.