Hacker News new | ask | show | jobs
by xiamx 2911 days ago
Precisely! I'd rather want to see the materials being presented with both theoretical and applied motivations.
1 comments

Right, so I have a mix of theoretical background and practice, including both toy examples, and not case studies, but brief discussions of real situations from experience.

Now my question is how to combine prepared notes (the HTML lectures), live sessions, and perhaps other techniques in class.

For something beyond mere toy examples, I would look into online language-specific playgrounds.

Those allow you to run code directly from browser - and if you include basic instrumentation (timing, step counters, item/memory use counters, ...) then it becomes really easy to show how a simple change makes things either better or worse.

To keep things language agnostic, you can cherrypick a different language for different purposes. That way you get to ensure that the lessons are not tied a particular language and the concepts have to apply universally.[1] For an interesting twist, maybe pick some historical examples too, to show how things have evolved in languages over time.

Then, when the basic concept of the lesson is [hopefully] understood, expand to a short case study to show why the dry theory matters in practice. For example, there's an old DoS attack against DNS servers, where a 56k modem could take down a root server due to unbounded O(n^2) worst-case complexity in the hash table implementations.[0]

0: https://www.usenix.org/legacy/publications/library/proceedin...

1: For extra points, you can pick examples where a particular language has chosen an implementation with amusing problems.

You've also surely got loads of anecdotes on how not to do it and tales from the coalface from your years in industry.

I'm sure you can sprinkle some of those into the classes to give a little light relief if the students are really finding things too dry. You don't have to go as far as recreating TheDailyWTF. Perhaps use some to provide worked examples of designing yourself into blind alleys and how to get out again, or just to provide awareness of a few real world issues that might come up with whatever topic is the day's lecture.

Examples aplenty of companies that have serious problems because they did not understand the impact of their early decisions due to insufficient cs knowledge.

Those are great cases to review, and then to work backwards to the root cause and to discuss possible fixes. That's both CS and practical knowledge in a way that it sticks, the best school I've found to be other people's mistakes.

Do you just give lectures, or can you also do laboratories? I've found having one session a week dedicated to practical exercises - using pre-prepared virtual machines where appropriate has been a very good teaching method - and popular with the students who can see themselves achieving the tasks.