CPSC 311

Definition of Programming Languages

Course Description

Comparative study of advanced programming language features. Statement types, data types, variable binding, parameter passing mechanisms. Methods for syntactic and semantic description of programming languages.

Average difficulty
4.5 / 5
Average quality
4.5 / 5
Scroll to see reviews

Add a Review for this course

Please ensure that your review is respectful and constructive. Read about UBC's aim for creating a safe and inclusive learning environment here. These reviews may take several days to process and will be scanned for inappropriate or malicious content.

Please enter a name/username.
Enter a valid url including the 'https://' prefix. (https://www.example.com)
Please enter your course review. [minimum length: 50 characters]
3
3

Course was taught by professor Ron Garcia.

The course is pretty difficult at first. I failed the first midterm, and the midterm average was about 40%. However, I think the material just takes some time to digest. After the first midterm, things started to click, and I think this was true for the rest of the class too since the second midterm average was closer to 80%.

The assignments can take a few hours each. The first two assignments are significantly longer than the last three. Also, we were allowed to work in pairs.

The course material itself is not too useful imo. It’s been two years since I’ve taken the course, and I’ve never revisited the material since then.

Overall, I’d say decent course if you’re just looking for CPSC 3xx credits. Otherwise, I’d suggest taking other courses.

Difficulty:4.5
Quality:4
Steven, Dec 7 2023, course taken 2021W1
I think on a personal level, Ron was great. However, 311 is a really challenging course (probably one of the hardest CPSC courses I’ve taken at UBC, and the only course where I’ve failed a midterm and I’m a fifth year student), something I did not take into account when I signed up for the course.
Difficulty:4.5
Quality:5
sewchicco12, Nov 18 2023, course taken 2023W1
I personally would really recommend 311 and 312. While they don’t teach you the most directly applicable skills, they really develop critical thinking skills and give you many tools for thinking outside of the box with regards to programming. While I don’t tend to write interperters (311) or use pure functional or logic paradigms (312) I find I often find ways of incorporating concepts I learned in those classes when tackling hard problems that don’t have a de facto standard solution. For instance at my day job I’ve been working on developing visual scripting tools for use by non programmer game designers. To do so we had to design and model a basic programming logic model that was domain specific to our project’s given domain. The model we have come up with has to treat state very explicitly to solve networked multiplayer, so I used a ton of the concepts from 312 with regards to stateless programming paradigms. 311 also gives some rudimentary experience with regards to parsing data as logic, which came in handy for designing the data format and tools used for creating the visual scripts.
/u/Aruzan, Mar 5 2014
311 with Steve Wolfman. It was very intellectually engaging. It managed to be both very abstract and very technical. Easily one of my favourite courses of 3rd year. I think you’d be doing yourself a disservice as someone in CS if you don’t understand how interpreted languages get well… interpreted. The techniques you learn are very interesting. You’ll be able to take 411, which will let you know how compilers work. It forces you think about programming languages in ways you never really considered. All very fascinating stuff.
/u/creamenator, Mar 5 2014
When I took it, it was an easy course with Prof. Joshua Dunfied. He is no longer at UBC. The course is taught by Dr. Wolfman now (iirc) and I would say it is the same level of difficulty as his 320 classes.
/u/vaastav05, May 23 2019
Awesome course that teaches you about programming languages, with a emphasis on language semantics. Despite being a third year course, CPSC 311 directly uses quite a lot of the concepts from CPSC 110. Some notable things include the PLAI (Racket) language and templates. Finally, for recent offerings taught by Prof. Ron Garcia (2020, 2021), all exams are coding exams done on the computer.
eqfy, Jan 21 2022

Historical grade information

Grades information from UBC Grades Database