
Ask HN: About your CS teaching experience - jventura
A little bit of context: I have former teaching experience by teaching CS basics to teenagers (K-12). But after some time working in the industry, I&#x27;m currently teaching BSc and MSc CS topics to adult students in a local technical university.<p>However, I am currently not quite satisfied with the current &quot;universal&quot; method of lecturing theoretical concepts with the ocasional laboratory assignment. I feel that I lose too much time preparing theoretical lecture slides which the students won&#x27;t fully understand since they lack the field experience I have.<p>My problem is mostly with the MSc students as I&#x27;m teaching more advanced concepts to them (Distributed systems). For instance, explaining things such as how transactions may succeed or have to roll-back if they fail, is just a detail that they will forget eventually after the exam.<p>So I&#x27;m starting this thread in the hope that I can read your experiences teaching adults on CS or other subjects, and hoping to get some literature, books or articles about things that you think that it may work!
======
sethammons
I've not taught CS, however I used to teach math to adolescents. Some basics:
scaffold concepts, spiral back to previous concepts, and allow exploration and
self discovery. All quizzes and exams should have earlier content in them. I
believe I heard that six repetitions over time were needed for most students.
For distributed systems, don't just present the two generals problem. State
the scenario, and give them 8 minutes to think through a solution in small
groups. Maybe go as far as to have them illustrate the problem on poster paper
with markers. Have a one or two summarize what they discussed to the class.
Ask probing questions. Then give the reveal (a brief lecture on why it
unsolvable) and show the results of the giants upon whose shoulders they
should stand. Employ other active learning strategies. Google "active learning
strategies." Yeah, lots of facts will be forgotten after the exam. However,
the more they understand principles, the more they can recall and recreate
long term.

Hopefully the above advice helps with the lecture portion. As for labs, my
experience says that practical exercises are great and my experience says that
lab exercises are too contrived to be even slightly useful. To explain: I took
an online distributed systems course to balance out my self learning and work
experience. Their code work / labs were terrible. All the scaffolding was in
place and it boiled down to "translate these algorithms to scala." I gave me
no insight or feeling or deeper understanding of best effort broadcast or
anything else. Mostly, I wrestled with trying to grok scala. However,
previously implementing toy (read mostly broken) versions of Paxos and Raft
(which I had done prior to taking the class) gave me a solid understanding and
appreciation for the nature of the problems they attempt to solve. Reading the
papers and attempting to code up what was presented worked better for me.

Cheers and good luck.

~~~
jventura
Thanks for your comment, I am already searching for relevant information on
active learning strategies.

About your experience with the online course, I can understand the difficulty
on trying to make a lab assignment for people without the necessary knowledge
to complete the assignment. My current strategy is to provide some base code
and then asking for the students to keep changing the code (giving enough
hints) so that in the end they have a working solution.

Edit: Found some interesting papers, for instance [0] and [1].

[0]
[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.59....](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.59.7176&rep=rep1&type=pdf)

[1]
[http://www.cs.duke.edu/forbes/papers/fie2002.pdf](http://www.cs.duke.edu/forbes/papers/fie2002.pdf)

~~~
al2o3cr
I've done some guest lecturing in more beginner-focused environments, but
those papers seem to match with my experiences there. I'd reiterate a key
point from them for emphasis - students shouldn't "change the code" until it
works without understanding WHY the changes they make have an effect.

