11
votes
How can I explain the difference between CS and coding to a layperson?
I regularly have to explain what computer science is to parents, and I have lately settled into this explanation:
Technology keeps changing all the time. You get used to the menus in Microsoft Word, ...
8
votes
Accepted
Teaching Induction to Prove the Correctness of Algorithms
I think induction should be taught first, and then loop invariants, since you usually need induction to prove that the loop invariant is really an invariant, and also because you need induction for ...
7
votes
Single-dimensional array and simple looping activities of significance
The Dutch National Flag problem is linear in running time. Essentially sort an array with only 3 distinct values each of which may appear 0 or more times. (not length 3). You are allowed only one pass ...
7
votes
Single-dimensional array and simple looping activities of significance
A variant on the ENIGMA machine encryption works well in a single loop, and is sufficiently complex to give students a real challenge.
The core idea of the ENIGMA machine for this assignment is that (...
6
votes
JavaScript to teach Theoretical Computer Science
Maybe a bit of an orthogonal answer, but let me try to refocus your thinking. I don't think that teaching a lot of languages, especially if they are similar to one another in some way is a big ...
6
votes
Teaching loop invariant choice
Let's start with the term "Loop Invariance". It is a property of a loop that is true before and after each iteration, thus in-variant, non-changing. So then, what is the purpose of the loop invariance ...
6
votes
How can I explain the difference between CS and coding to a layperson?
I'll attempt a self-answer here, based on hindsight and a few previous experiences where I went in knowing I wanted to do this.
I've found that starting off with an analogy helps a lot of the time. ...
6
votes
Ideas for exercise in parsing and compilers?
Over my career I spend a lot of time with languages and compiler construction. My opinion is that languages should be LL(1), which optimizes human understanding of the constructs. I created quite a ...
5
votes
How can I explain the difference between CS and coding to a layperson?
I would explain it like this:
In reality, you have to solve problems on your daily basis. It may be a time problem, like "how do I get these five tasks done it just 1 hour?" or "how can I stack these ...
5
votes
Accepted
Database theory (normalization) for beginners (adult education, MS Access)
Based on the comments, the minimum for theory and technical is how the nomenclature of MS Access relates to Excel.
If they've been doing everything in Excel anyway, they've developed habits for, or ...
5
votes
Theory of Computing project topics
If you're looking for something much harder than my other answer, and your CT course has covered lambda calculus, you can have the students create an untyped lambda calculus REPL, with inputs/outputs ...
5
votes
Ideas for exercise in parsing and compilers?
Having the lecture after the lab is indeed a tricky wicket.
One way that I've approached similar problems is to make some self explanatory, exploratory portions of the lab. This is a different sort ...
4
votes
Teaching loop invariant choice
To give an explanation of this requires a problem in which to frame the discussion. I propose the Dutch National Flag problem, likely first proposed by Dijkstra, but I'm not positive.
I'll pose the ...
4
votes
Teaching Induction to Prove the Correctness of Algorithms
I have been teaching theoretical CS to math teachers (don't ask why...). I assumed that they were comfortable with numerical induction and therefore the transition to structural induction (on a ...
4
votes
How can I explain the difference between CS and coding to a layperson?
Dealing with (my) parents who are not particularly aware of computers or the difference between a server and a database, I believe I have a fairly simple answer for this question.
Computer science is ...
4
votes
Ideas for exercise in parsing and compilers?
I would highly recommend the book Crafting Interpreters. It covers many, but not all of the topics one might find in a compiler course. You may read the entire source on line for free. The authors ...
3
votes
Single-dimensional array and simple looping activities of significance
You could use introduce elementary (one-dimensional) cellular automata.
Basically, you represent a single row of cells as a simple array. Then you write a function that takes an array and applies the ...
3
votes
How can I explain the difference between CS and coding to a layperson?
Computer science is a discipline of problem solving. I use this phrase from CS50 often (mainly because I teach an adaption of it):
...
3
votes
Accepted
Unit Review for boolean algebra
I don't know if I have a solid answer to the main thrust of your question, but I do have some one-off suggestions that may or may not be helpful.
First, something you could try integrating into your ...
3
votes
Unit Review for boolean algebra
I've found a lot of success giving real world (often times very silly) examples of boolean algebra to give them a more intuitive understanding in addition to the pure algebraic laws. An example would ...
3
votes
Teaching Induction to Prove the Correctness of Algorithms
One big struggle is getting CS students to care about induction. Proving correctness doesn't really count as motivation, when "passing the tests" seems so much approachable and the extra benefits ...
3
votes
Teaching loop invariant choice
Firstly, I believe that if the thought process is clear to you, then going through that process with your students, out loud, clearly and slowly, can help them understand what it is that you are ...
3
votes
What is standard definition of Computer Science
What you seek doesn't really exist. "Computer Science" is an umbrella term that was coined in 1956. According to the Wikipedia article, there were a bunch of terms that were proposed for ...
3
votes
Any experience/resources on teaching computer science theory with a practical approach?
My course takes this approach. I have the students create a DFA and an NFA runner, and later, a TM runner as well. We skip PDAs - they turned out to be monstrously difficult for the students to deal ...
2
votes
Teaching loop invariant choice
A great resource for the instructor to learn the max about invariants is to go to the master.
David Gries, The Science of Programming
It isn't a book for novice learners, though. But understanding ...
2
votes
Teaching loop invariant choice
At the CS1 level that I teach, I focus a lot on the role and the precise meaning of variables and encourage comments at the point of declaration that attempt to make these clear, especially variables ...
2
votes
Unit Review for boolean algebra
A couple of ideas:
1st day
Start by getting everybody up and moving. Have people form sets - say, a set of colors, with everybody wearing a different color, or a set of ages - but remind them that ...
2
votes
How can I explain the difference between CS and coding to a layperson?
I don't know if this will help you, but I often find myself in the position of explaining the difference between CS and IT to students / prospective students / parents, and I use the experience of ...
2
votes
Single-dimensional array and simple looping activities of significance
I recommend to check out <algorithm>, <numeric>, and related C++ headers. There are literally tons of linear ...
2
votes
Single-dimensional array and simple looping activities of significance
Grades. Works especially well around final exam time.
You can find the average. Find the highest and lowest. Find the average with the lowest dropped. Find the most common grade. Count how many are ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
cs-theory × 21lesson-ideas × 4
algorithms × 2
complexity-theory × 2
turing-machines × 2
induction × 2
self-learning × 1
resource-request × 1
student-motivation × 1
programming × 1
best-practice × 1
textbook × 1
labs × 1
functional-programming × 1
data-structure × 1
language-choice × 1
databases × 1
computational-thinking × 1
mathematics × 1
javascript × 1
artificial-intelligence × 1
active-learning × 1
syntax × 1
looping × 1
arrays × 1