1

I am an undergraduate CS student half way through my degree. I have started taking an online(Youtube) course on Programming Languages. The course contents include the following topics:

First-class functions, Pattern Matching, Type Inference, Type classes, Monads, Continuations, Objects & Inheritance, Modules, Generics, Memory Management, Concurrency. The course is primarily using Haskell and JavaScript to teach these concepts.

Now, I am not entirely sure whether a course on Compiler Construction is a prerequisite to this course or not. What other courses should be a prerequisite to this course?

Note: I have not had a course on Compiler Construction (CC) yet (I am currently in 5th semester of my degree and CC course is offered in the 7th), although I have a little bit of experience of programming in functional languages.

Taimoor Zaeem
  • 163
  • 1
  • 7

2 Answers2

4

Typically a CS curriculum will have Programming Languages (or Programming Language Principles) either prior to Compiler Construction or concurrent with it. The course you describe is more like a "Principles" course.

Having the compiler course after the principles course has the advantage that it is reasonable to make the source language in the compiler course more "interesting". Normally a compiler is built for a single language so it is a bit more specific than the "languages" or "principles" course.

It is possible to do the compiler course first, but it would probably need to use a simpler "source" language than if the students had more breadth of experience.

Buffy
  • 35,808
  • 10
  • 62
  • 115
3

I teach a Programming Language Principles before a Compiler course. I do have to talk a little about compilers, about 1 hour, just to discuss the compiled/interpreted distinction.

It is useful to teach this course after a Data Structure course (taught in C) so one can discuss complexity of some recursive code (naive reversing a list for example if the list is a linked list...) and give some intuition to the students on how some data types are implemented.