Welcome to CSC 253!

The objective of this course is to teach you how dynamic languages such as Python, JavaScript, and Ruby work “under the hood,” with an emphasis on how they differ from popular static languages such as C++ and Java.

When you finish this course, you will understand the main language concepts and implementation principles that underlie Python, a popular dynamic language used in domains such as research, data science, Web programming, gaming, and education. This knowledge will both be intellectually interesting to you as a computer scientist, and also practical in allowing you to quickly learn new kinds of languages on-demand in the future.

CSC 253 is a systems-oriented course that complements what you learn in more theoretical sorts of programming languages and compilers courses.

  • In the first half of the course, you will study the Python language alongside the internals of the Python interpreter, which is implemented in C.

  • In the second half, you will implement an open-ended software development project related to code analysis, debugging, or profiling tools for Python.

Course philosophy

CSC 253 is a small studio-style course where everyone can fit around a table. Thus, we will spend a lot of time engaging in active discussions about code rather than presenting standard PowerPoint-style lectures.

Also, this course is unique in that most of the graded work is in the form of student-written technical blog posts. Why this format? Because having students communicate their knowledge via clear, compelling, and concise writing is one of the best ways for them to demonstrate mastery of the course material. And getting opportunities to improve one's technical writing skills via in-class peer critiques is broadly useful regardless of one's future career direction.