Looking Back at My CS Education A Decade Later
When I taking computer science (and applied math) back in college over a decade ago, nearly all of the content was heavily theoretical and virtually impractical to me at the time.
The Computer Science department proceeded with the belief that the courses will not delve into any specific programming language or technology, which tend to become obsolete over time, but more on knowledge that will last forever.
My computer science studies actually seemed like a math class, with discussions of Turing machines, various "calculi", formal grammars and the like. Many concepts in CS can be described as the most minimalistic and essential representation of a machine, language or system--compact and convenient enough for formal analysis and proofs. As I entered the work force, though, it seems as if the knowledge was completely useless. Virtually every technical skills and languages that I needed for work, I learned on my own outside of college.
In my programming language, for example, there was, I believe, only two languages taught, both declarative, ML, a functional programming language, and Prolog, a logical programming language. They were both of a different paradigm altogether and neither of them are used regularly (or even rarely) in industry. In addition, much time was spent on lambda calculus (some minimalistic funky formalism, with perhaps three symbols, one of which is the sole operator) and predicate calculus, weaving it into the discussion of both languages and proving their equivalency to Turing machines. Our exercises in Prolog utilize lambda calculus in an assignment on denonation semantics, which was to parse and convert English sentences into semantic form in predicate calculus and then make queries against the it.
Other schools would have actually provided a comparative overview of different widely used languages and maybe bring up a discussions on garbage collection and by-name parameters. I had often wondered whether I missed out on my education.
With my current work in natural language and AI, the seemingly impractical theory has come back to haunt me in big way. Ideas like DFA, CFGs, O notation, lamda calculus, and resolution profoundly affect my development. Without the foundations established in my computer science education, I may never have been able to proceed in this direction of producing highly intelligent software.