Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@rauschma
Last active May 3, 2019 17:23
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rauschma/230143e2c4cd668be33d9f3fd4e91819 to your computer and use it in GitHub Desktop.
Save rauschma/230143e2c4cd668be33d9f3fd4e91819 to your computer and use it in GitHub Desktop.

Teaching the practically useful parts of computer science

I think the practically useful parts of computer science could easily be taught via a book (or similar).

General considerations:

  • I think I only every really learned abstract concepts when I could play with them via a programming language. For example:
    • Logic via Prolog
    • Rewrite rules via Maude

Topics I find useful:

  • Grammars and recursive-descent parsing. N. Wirth teaches this in a tiny book that’s relatively easy to understand.
  • Graph theory (graphs, trees, transitive closures, etc.)
  • A little bit of logic. Especially the difference between syntax and semantics is practically relevant. How Prolog handles logic and search (backtracking) is interesting, too.
  • Tuple calculus. Helps with understanding relational databases.
  • Rewrite rules. They expand your horizon and your implementation tool belt.
  • Finite automata. Really useful as a visualization if you want to make sure you have handled all important cases.

Topics I personally don’t find useful:

  • Graphics-related math. This is a huge topic and relevant for many people. It just doesn’t personally interest me. Alas, here, you need quite a bit of math. Even more so if you are doing animations.
  • Turing machines are theoretically interesting, but didn’t personally give me much useful insight for programming.
  • Similarly: lambda calculus. There is some clever stuff here (church numerals etc.), but it never helped me with programming.

Additional topics:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment