I’m teaching beginning programming using C# to university business students (CIS) in the upcoming Fall semester.
It’ll be doubly fun, as I’ve never used C# until about a month ago. Sure, I’ve used plenty of other languages, but for some reason, never anything from .NET. (Partly it’s because I’ve used a Mac as my primary machine for nearly six years.) But hey, it’s a great way to follow the advice from Pragmatic Programmer to learn a new language every year. (Next year, I want to pick up Seven Languages in Seven Weeks, and work through that.)
I’ve looked at some of the curriculum previous instructors are using, and while I plan to borrow large chunks of it, there are parts of it that I think emphasize the minuscule details of doing that anyone can pick up instead of the broader theme of how to think like a programmer.
So, for the past couple of months, every time I bump into a programmer I ask, “What’s the most important thing to teach new programmers?” The answers are both varied and consistent. Here’s a partial list of topics I’m considering:
- Data structures (linked lists, queues, trees (and, in passing, tries), and dictionaries/hashtables)
- The difference between the stack and the heap (somewhat less important in a garbage-collected environment like .NET, but important to understand, I think)
- Sorting, especially quicksort, but including bubble sort and a merge-split sort.
- Big-O (which goes nicely with a discussion on sorting)
- Some design patterns; at the very least, observer and MVC
- I’d like to touch on formal grammars, and maybe Regex
- Resource analysis (memory/disk/processor usage)
- Some thoughts on user-interface design (e.g., Fitt’s law, using color)
I’d like to emphasize some concepts by showing them in other languages, just to show how the structure remains the same. I hope I can do this without being too confusing. (Of course, what I’d really like to do is cram an entire undergraduate CS degree into a one-semester course, but that isn’t going to happen.)
Please email me or leave suggestions about what I should (or should not) add.
Post Script: While you’re sending me your ideas, I’m open to suggestions on what book I should use. I’ve spent hours already combing through C# books, and while there are some excellent reference books out there, I’ve not been impressed with most of the teaching books. l’m currently leaning toward Head First C# (2nd ed.) because I’m impressed with the Head First series, although I’m just now going through this book in depth.