Hacker News new | ask | show | jobs
by closeparen 1595 days ago
Computer Science at my school had two branches, theory and systems. Discrete Math and Algorithms are just two classes out of ~17 in a major. They are the two theory classes everyone takes, but there's a whole world beyond that even in the theory track. It continues to be baffling that people on Hacker News think Algorithms == Computer Science.

Personally, when I chose electives I chose systems electives: Operating Systems, Databases, Networks, Programming Languages, Graphics, etc. In these classes the bulk of the work consisted of programming in C.

1 comments

programming languages is pretty theoretical. Or at least if taught from a logic and lamba calculus view point.

I suppose it could be systems if you are building a compiler or vm, but that to me is different that programming languages.

As with most CS stuff there's the standard split here: type theory, languages and grammars and pumping lemma on the theoretical side and recursive descent, lex/flex/yacc/bison, programming language exposure lisp, prolog, assembly, etc on the practical side. Dominance frontiers and register allocation algorithms were some of the places where they really started to intersect for me. I guess also regular languages, regular expressions and balanced parens is another place where they intersect.
So in my CS program, those were split into several separate courses.

You had an (mostly theoretical) Automata and Formal Languages course, which had regular/context free languages (including regexs), grammars, and pumping lemma. lex/flex/yacc/bison, recursive descent, and LL(1) LR(n), LALR were in a Compilers course. Programming Language exposure to a functional language (ML) and a logic language (Prolog) plus some other stuff was the Programming Language course.

Type Theory, lambda calculus, and so on is relegated to advanced graduate courses that are given when a faculty member feels like it.

You realize lisp is based on the lambda calculus and prolog is based on formal logic, right?

The theory and practical realms are very tightly intertwined in programming/computer science/whatever you want to call it as long as it isn't "information technology".

On the other hand, the portion of "math" that is applicable computer science/software development/whatever is pretty distinct from much of the "math" in math departments.

We wrote some programs in lambda calculus, but I mainly remember working on an ML interpreter. Type checking, exceptions, free variables, etc.
"Historically, ML was conceived to develop proof tactics in the LCF theorem prover (whose language, pplambda, a combination of the first-order predicate calculus and the simply-typed polymorphic lambda calculus, had ML as its metalanguage)."

-- https://en.wikipedia.org/wiki/ML_(programming_language)