by sindoc on 8/24/11, 4:49 PM with 29 comments
by elehack on 8/24/11, 6:45 PM
Implementing intepreters is cool. But the key value of studying compilers is that it provides you with the tools to build robust, extensible input processing (and, to a slightly lesser extent, data processing and output) code. If programmers are confident with using regular expressions and context-free grammars as appropriate, even if it's just coding up recursive descent parsers, I think they can produce much better input processing in their software.
And a large quantity of software needs to parse input, and possibly turn it in to different output, at some point in its execution.
by pmiller2 on 8/24/11, 6:23 PM
Of course, I may lack perspective, having been a math major (or due to some other deficiency in my background), but I consider myself pretty comfortable with about half the list and somewhat familiar with about half the remainder. How much of it did I learn as an undergrad, though? Not very damn much, and I don't think I would have even been exposed to it all even if I had done CS instead of math.
by sindoc on 8/24/11, 7:07 PM
- Lambda Calculus - Reflective and Meta-programming - Meta-object Protocol - Closures - Continuations - Monads - Arrows - First-class Everything - Stack and Register-based Programming - XML - Linear Algebra - Fractal and Wavelet Image Compression - Regular Expressions - Clojure - LaTeX
NB. The concepts to which the above keywords refer, may or may not have been covered by the article. The keywords themselves are however absent.
Additional reading suggestions:
- Jon Bentley's Programming Pearls - Tom Mitchell's Machine Learning - Douglas Hofstadter's Gödel, Escher, Bach - Brian Kernighan and Rob Pike's Unix Programming Environment
by silentbicycle on 8/24/11, 6:55 PM
OCaml may work as an alternative to SML.
You could also mention Information Retrieval, alongside Machine Learning.
Compilers/parsing/interpreters/etc. could really be its own top level item.
Learning to use profilers / performance optimization. _The Practice of Programming_ covers this (and many other things!) quite well.
All in all, a great list. Probably also useful to suggest starting points for people (like myself) who are self-taught.
by Siah_twitter on 8/24/11, 5:48 PM
by tef___ on 8/24/11, 5:13 PM
so i'd add Jim Gray's 'Why Do Computers Stop and What can be done about it' http://www.hpl.hp.com/techreports/tandem/TR-85.7.pdf
Also, 'Reflections on Trusting Trust' is a good one to add under security. I'd also recommend 'What's your threat model?' http://iang.org/ssl/wytm.html
by tbekolay on 8/24/11, 5:24 PM
by sindoc on 8/25/11, 2:25 AM
------------------------------
+ Disjoint Sets and Union-Find
+ In-Memory Sorting:
- O(n * log n) (e.g. Quicksort)
- O(n) (e.g. Bucket Sort)
+ External Sorting (e.g. Polyphase Sort)+ B-Trees
+ AVL Trees
+ Graph/Tree Search/Traversal:
- Depth-First
- Breath-First
Reading:http://en.wikipedia.org/wiki/Introduction_to_Algorithms
Discrete Mathematics
--------------------
+ Equivalence Relations
+ Recurrence Relations
Formal Logic
-------------
+ Propositional
+ First-order
+ Second-order
+ Common Fallacies
Also
----
+ EWDs: Dijkstra's Systematic Manuscripts:
- http://www.cs.utexas.edu/users/EWD/
by Mavrik on 8/24/11, 6:01 PM
It is awfully sad how many of self-called "hackers" are unable to reconfigure an IP address on worlds most-popular desktop OS.
I have trouble trusting such "engineers" with ability to design great software when they couldn't even educate themselves on both major world perspectives on OS design.
by petey on 8/26/11, 7:51 PM
by gameweld on 8/24/11, 5:15 PM
You mention probability in the beginning, but make no mention of machine learning.
by fpgeek on 8/25/11, 2:22 AM
by scc4fun on 8/24/11, 11:49 PM