Answers.Body: <p>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.</p>
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-08-31T21:57:35.583Z
Answers.LastActivityDate: 2022-08-31T21:57:35.583Z
Answers.UserDisplayName: Jacques Wainer
Answers.Body: <p>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 &quot;Principles&quot; course.</p>
  <p>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 &quot;interesting&quot;. Normally a compiler is built for a single language so it is a bit more specific than the &quot;languages&quot; or &quot;principles&quot; course.</p>
  <p>It is possible to do the compiler course first, but it would probably need to use a simpler &quot;source&quot; language than if the students had more breadth of experience.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-08-12T11:32:09.583Z
Answers.LastActivityDate: 2022-08-12T11:32:09.583Z
Answers.UserDisplayName: Buffy
Body: <p>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:</p>
  <p>First-class functions, Pattern Matching, Type Inference, Type classes, Monads, Continuations, Objects &amp; Inheritance, Modules, Generics, Memory Management, Concurrency.
  The course is primarily using Haskell and JavaScript to teach these concepts.</p>
  <p>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?</p>
  <p>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.</p>
  
Tags: <functional-programming><compiling><language-types>
Title: Should an undergraduate course on Programming Languages precede or succeed the course on Compiler Construction?
ThreadText: # Should an undergraduate course on Programming Languages precede or succeed the course on Compiler Construction?
  
  (Asked by: username_0 on 2022-08-12)
  
  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.
  
  **Tags:** functional-programming, compiling, language-types
  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_2 on 2022-08-12. Score: 4 | Accepted answer
  
  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.
  
  
  ---
  
  ### Answer by username_1 on 2022-08-31. Score: 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.
  
  
  ---
  
  