Hacker News new | ask | show | jobs
by gmadsen 1595 days ago
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.

2 comments

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)