What do you need to know?

The Microsoft Job Blog recently has a two part interview study guide set of posts. In the second (Microsoft interview study guide: Part II of II) there was a long list of Knowledge Questions. It starts with a list of basic computer science concepts. Interestingly enough it seems to map very well with topics from the Advanced Placement Computer Science curriculum with a heavy dose of data structures. This shouldn’t surprise anyone really. These are after all basic computer science concepts. But they are the tools that professional developers use every day.

A problem develops when students learn things “for the test” and then assume they can forget it. I used to remind students that anything that had been covered previously in the course (and often times previous courses) was fair game for any test/quiz at any time. I wanted to emphasize that in programming and computer science there were building blocks – basic thinks that you could not move forward to unless you retained knowledge of previous topics. Concepts depend on each other and you cannot just forget them.

The other knowledge question part I liked was about comparisons:

Comparisons
*C++ vs. Java
*C++ vs. C
*Arrays vs. Linked Lists
*Hash Tables vs. Binary Search Trees
*Stack Memory vs. Dynamic Memory vs. Static Memory

Personally I believe that a good computer science education, not just even in high school but especially in high school, should expose students to multiple programming languages. Not all problems are nail and requiring hammers if you know what I mean. Plus students should be able to think about and explain differences. Opinions are great things but you need to have them based on knowledge and defendable positions. Real development jobs want people who have a depth of knowledge and who can explain the options and why one is better than another. As they used to say at IBM THINK.