Admission requirements
Having followed the courses Foundations of Computer Science, Logic and Programming Techniques is highly recommended. Basic programming ability (e.g. in a modern high-level programming language such as Python, C++, Java, etc.) is necessary in order to be able to follow the course.
Description
Computer programming is the activity of specifying what computers do, and programming languages are the main tool to achieve that. This course offers a kaleidoscopic view on the many concepts of programming languages, focusing on object-oriented programming and functional programming. Some concepts will be merely introduced, thereby providing an overview of directions for further study.
This course comprises both theoretical and practical aspects of programming languages. Theoretical topics include: language generators and string rewriting, semantics of programming languages (operational semantics, denotational semantics, axiomatic semantics), variable valuations and expression evaluation, control-structured programming and exceptional control flow, basic functional programming languages (lambda calculi), parameter passing mechanisms (call-by-value, call-by-name, and others), types and type systems, polymorphism, algebraic data types, higher-order functions, pattern matching, object-orientation and generics, structural and behavioral subtyping, concurrency, and theorem proving. Practical topics include: methods to describe language syntax, advanced imperative and object-oriented programming, and basic functional programming.
Course objectives
The main goal of the course is to provide insights into why there is a need for high-level programming languages, the (relationship between) concepts of programming languages, and practice with how some concepts are implemented. This enables the student to learn new programming languages (or related techniques employed in the programming context) faster, and make more informed decisions about what to use and when.
At the end of the course the student:
understands basic concepts in programming language theory
understands basic concepts of imperative programming (such as structured programming, exceptional control flow)
understands basic concepts of functional programming (such as algebraic data types, pattern matching, recursion)
understands basic concepts of programming language semantics and concurrent programming (needed for an advanced course in concurrency)
can apply in a practical context imperative and object-oriented programming features (such as designing class hierarchies and defining and using abstract data types)
is able to implementing the (simply typed) lambda calculus, type checking and type inference
Timetable
In MyTimetable, you can find all course and programme schedules, allowing you to create your personal timetable. Activities for which you have enrolled via MyStudyMap will automatically appear in your timetable.
Additionally, you can easily link MyTimetable to a calendar app on your phone, and schedule changes will be automatically updated in your calendar. You can also choose to receive email notifications about schedule changes. You can enable notifications in Settings after logging in.
Questions? Watch the video, read the instructions, or contact the ISSC helpdesk.
Note: Joint Degree students from Leiden/Delft need to combine information from both the Leiden and Delft MyTimetables to see a complete schedule. This video explains how to do it.
Mode of instruction
Lectures are digital and pre-recorded, 2 hours per week.
Exercise classes (theory), 2 hours per week.
Lab sessions (practice), 2 hours per week.
Both exercise classes and lab sessions are organized on location.
For exercise classes, students use pen and paper.
For lab sessions, students may be asked to bring their own device.
Self-study and group work is necessary to finish the assignments.
The labs are for getting started, collaboration, and requesting/obtaining feedback.
Assessment method
The final grade is calculated from the following:
Assignments during the semester (50%)
Final exam at the end of the semester (50%)
Assignments will be mixed individual work, and group work in groups of at most 2 students.
It is required to achieve at least 5.5 points on average for the assignments, and also for the final exam in order to pass the course.
The teacher will inform the students how the inspection of the graded assignments and final exam will take place.
Reading list
The lecturer provides students with relevant pointers to literature, some of which is open access.
A selection of snippets from closed access books and articles may be provided by the lecturer for a more detailed study of the programming concepts introduced.
A list of recommended (but optional) books is also provided.
Registration
As a student, you are responsible for enrolling on time through MyStudyMap.
In this short video, you can see step-by-step how to enrol for courses in MyStudyMap.
Extensive information about the operation of MyStudyMap can be found here.
There are two enrolment periods per year:
Enrolment for the fall opens in July
Enrolment for the spring opens in December
See this page for more information about deadlines and enrolling for courses and exams.
Note:
It is mandatory to enrol for all activities of a course that you are going to follow.
Your enrolment is only complete when you submit your course planning in the ‘Ready for enrolment’ tab by clicking ‘Send’.
Not being enrolled for an exam/resit means that you are not allowed to participate in the exam/resit.
Contact
Education coordinator LIACS bachelors
Remarks
Software
Starting from the 2024/2025 academic year, the Faculty of Science will use the software distribution platform Academic Software. Through this platform, you can access the software needed for specific courses in your studies. For some software, your laptop must meet certain system requirements, which will be specified with the software. It is important to install the software before the start of the course. More information about the laptop requirements can be found on the student website.