class: center, middle ### COMP26020 Programming Languages and Paradigms *** # Unit Introduction &
Part 1 Logistics --- class: inverse, middle, center # Whole Unit Introduction --- # Unit Overview - **Year-long unit** that aims to cover the **principles of different programming language paradigms** - Compare and contrast the advantages and disadvantages of the imperative, object-oriented, and functional programming paradigms - Describe the key principles of compilation - Highlight the impact of modern trends on programming languages -- .center[Why do we need so many programming languages?] --- # Unit Content - Part 1 (5 weeks): **Imperative Programming with C** - Pierre Olivier -- - Part 2 (3 weeks): **Object-Oriented Programming with C++** - Pavlos Petoumenos -- - Part 3 (5 weeks): **Functional Programming with Haskell** - Joe Razavi -- - Part 4 (5 weeks): **Compilation, Program Translation** - Rizos Sakellariou -- - Part 5 (3 weeks): **Advanced Topics, Concurrency** - Joe Razavi, Pavlos Petoumenos Each part is self-contained and independent, and managed by its own instructor --- # Unit Organisation - **Blended approach**: a mix of live sessions and asynchronous material (videos, exercises, etc.) - Live session once a week - Support sessions ("lab"): in essence office hours, drop-in for questions, feedback, etc. -- - **Assessment**: - 70% final exam at the end of Semester 2 in May/June - 30% summative laboratory exercises - Five exercises in total: each one carries a different weight - No lab session per se, to be done in your free time -- - **Please engage with the unit:** come in person to the lecture/support sessions, don't fall behind on the sync/async materials - Your final mark and enjoyment of the unit will be proportional to your engagement --- class: inverse, middle, center # Part 1: C Programming --- # Part 1/C Organisation **Blended approach**: live sessions + asynchronous videos & exercises
--- # Part 1/C Organisation Overview 1. **Lecture materials**: - Live lecture every Monday 12pm-1pm, in *Nancy Rothwell Building Lecture Theatre A* - A set of videos to watch every week **after the lecture** -- 2. **Formative assessment** (not graded), every week: - 1 quiz + a set of autocorrected programming exercises - To do every week **after covering the lecture materials** -- 3. **Summative assessment** (marked): 1 lab exercise, to be done in your free time at home and/or on the Department's machines -- 4. **Support sessions** - Come if you have any questions about the lecture materials and formative/summative exercises - Every other week, starting the week of 05/10, Monday 3pm-5pm in Kilburn Collab. 1 + 2 --- # Unit Canvas Page .center[https://canvas.manchester.ac.uk/courses/89000] - **Everything regarding part 1/C can be accessed from there:** - Schedule (what to do each week, **bookmark this page**) - Videos/live session recordings, links to lecture notes and slides - Links to summative and formative exercise instructions - Formative quizzes, discussion board, reading list
--- # Why Learn C Today? .leftcol[ - Old but still extremely popular - Number 1 language for low-level systems software - Today almost everything that has a CPU/MCU runs some C - Knowing C will help you **understand how computers work!** - "Missing link" between your computer architecture units, and high level software engineering units ] .rightcol[
] --- # How Do I Become Fluent in C? How can you engage properly and maximise your chances of success in this part of the course unit? -- 1. **Study the Core Concepts.** Each week: - Come to the lecture in person - Watch the video content right after the lecture - Take the quiz afterwards to validate your understanding (and also prepare for the exam) -- 2. **Practise.** You need to code! Each week: - Complete the formative exercises (very important!) - Complete the steps of the summative exercise indicated in the schedule --- class: inverse, middle, center # Core Concepts: Lecture Materials --- # Lecture Materials: Code Snippets - Live session and video slides are available online and include lots of code - Access the slides for code examples you can run locally/in your browser: https://olivierpierre.github.io/comp26020 -- - Using the bottom-right links, you can: - Download the file: click on the blue path - Get instructions on how to load and run it in a container by clicking on the GitHub logo
- Run it in Compiler Explorer: ▶️ ```c #include
int main() { printf("hello, world!\n"); return 0; } ``` .codelink[
`00-logistics/sample-code.c`
] --- # Lecture Notes & Quizzes - **Lecture notes:** https://olivierpierre.github.io/comp26020/ - Cover the same content as the videos, but in written form - No need to read if you fully understand the lecture materials covered in the live session and videos - Useful if things are not 100% clear - Should also be useful for revision before the exam -- - **Quizzes:** - 1/week, a few MCQ-like questions to complete after having seen all the lecture materials - On Canvas - Formative (unmarked) - Same type of questions as you will get in the exam --- # Lectures: Feedback Forms - Each slide deck ends with a link to a small feedback form - It's fully optional and anonymous: feel free to use it to tell me what you think about the lecture in question - Your feedback will help to make the course better!
--- class: inverse, middle, center # Practical Work: Formative & Summative Exercises --- # The Practice: Formative Programming Exercises - A few exercises per week, e.g., https://olivierpierre.github.io/comp26020/exercise-set-2.html -- - Divided into **essential** (must do) and **additional** (should do) exercises -- - Autocorrected with a tool called `check50` - Instructions on how to install and use `check50` in a proper development environment are given with the exercises - You need a Linux x86-64 environment; I won't provide support for native Windows/Mac (virtualised solutions are available for these) -- .center[**⚠️ Get your setup up and running this week ⚠️**] --- # The Practice: Summative Assignment (marked) - Topic: writing device drivers in the Linux kernel - Challenging task - AI *mostly* authorised - Brief already accessible, link on Canvas -- - Weight: 6.5% of the final COMP26020 mark - **50/50 coursework/exam weight split for the C part** -- - Needs to be done in a specific development environment (Docker container) - Different environment from the formative exercises -- .center[**⚠️ Get your setup up and running this week ⚠️**] --- # The Practice: Generative AI Usage Rules - **Formative exercises**: use of AI overall **not recommended** - Need to write code by yourself to learn - OK to use AI to get hints/help - Or as a last resort to get a solution if you struggle for too long with an exercise -- - **Summative exercise**: use of AI is **mostly authorised** - See the lab brief for further details - Study the code you generate and submit for this exercise: the exam will expect you to know that code very well -- - **The different parts of COMP26020 have different AI usage policies!** - Check Canvas/exercise briefs/instructor --- # How to Get Help? The following applies to all parts of COMP26020: - Any questions? Do not hesitate to raise your hand during the lecture - Outside of the lecture, in increasing order of urgency: - Step 1: come to the next support session - Step 2: discussion forum on Canvas - Search for existing answers before posting a question - **Do not post answers there!** - Step 3: [pierre.olivier@manchester.ac.uk](mailto:pierre.olivier@manchester.ac.uk) - Think before emailing me: there are 350+ of you, so email is only for critical/urgent matters