====== be5b33prg -- Programming Essentials ======
The course focuses on understanding and mastering basic design principles of algorithms. It develops data abstraction coupled with the essential programming patterns. The emphasis is on creating readable and reusable programs in Python.
( [[courses:be5b33prg:labs:start|]] | [[courses:be5b33prg:tutorials:start|]] | [[resources]] | [[https://intranet.fel.cvut.cz/en/education/rozvrhy-ng.B241/public/html/predmety/43/55/p4355706.html|BE5B33PRG TIME SCHEDULE (EN)]])
===== News =====
//Information announced during the semester will be put here.//
* Final Exam Feb 12 - Oral part[[https://docs.google.com/spreadsheets/d/1YdvSge-6RF35c1OzsYovhJYvCksknrWyMnk0M180nDU/edit?usp=sharing
|schedule]].
* **Important Reminder**: In order to receive the points from bonus homework (except for the Vector class), you have to present your solution to the teaching assistant!
* The **final exam** dates for the PRG course have been officially announced and are available in the KOS system. Please mark your calendars with the following dates: January 16, January 22, January 30, February 5, and February 12. **Note:** These dates are definitive. No additional dates will be added. Each exam day will consist of two parts: Practical Part: 9:00 AM - 12:00 PM, Oral Part: 2:00 PM - 5:00 PM. It is important that you reserve these time windows and be present in person. **Important Requirements:** 1) //Registration:// You must sign up for the exam date through the KOS system. 2) //Assessment (Zápočet):// This is a prerequisite for taking the exam. Assessments will be distributed after the very last PC lab of the semester, but only to students who meet the necessary conditions (detailed below). Also please see below for details about the organization and format of the exam.
* End-term test on Dec 12th and Dec 13th during PC labs (personal presence required). The format is specified below. Note that no alternative/replacement dates will be arranged. Students are required to sign up for the end-of-term test using KOS.
* Mid-term test on Nov 8th during the lecture (personal presence required). The format is specified below. Note that no alternative/replacement dates will be arranged.
/*
* Final Exam Jan 16 - Oral part[[https://docs.google.com/spreadsheets/d/1Zz-RL0VDTRoD4FKX409kssCZ2taI4TLwr4ZAWrOVwec/edit?usp=sharing|schedule]].
* Exam February 2, 2024: {{ :courses:be5b33prg:exam_5_2023.txt | test}}. Oral part schedule (room KN:E-128): [[https://docs.google.com/spreadsheets/d/1stVh2bd5on_12p62FJZWNwHkBk54GEN6DGtiGZ0ZsXU/edit?usp=sharing|here]] (The exact times and order is subject to change.)
* Important Notice: The examination scheduled for February 2nd represents the final opportunity to complete the course successfully. If you have not yet taken the exam, it is strongly recommended that you register for this date, as no further examinations will be offered!
* Important Reminder: In order to receive the points from bonus homework (except for the Vector class), you have to present your solution to the teaching assistant!
* The **final exam** dates for the PRG course have been officially announced and are available in the KOS system. Please mark your calendars with the following dates: January 16, January 19, January 23, January 26, and February 2. **Note:** These dates are definitive. No additional dates will be added. Each exam day will consist of two parts: Practical Part: 9:00 AM - 12:00 PM, Oral Part: 2:00 PM - 5:00 PM. It is important that you reserve these time windows and be present in person. **Important Requirements:** 1) //Registration:// You must sign up for the exam date through the KOS system. 2) //Assessment (Zápočet):// This is a prerequisite for taking the exam. Assessments will be distributed on 12th January in the afternoon, but only to students who meet the necessary conditions (detailed below).
* End-term test on Dec 15th during the lecture (personal presence required). The format is specified below. Note that no alternative/replacement dates will be arranged.
* Mid-term test on Nov 3rd during the lecture (personal presence required). The format is specified below. Note that no alternative/replacement dates will be arranged.
*/
/*
* Exam January 16, 2024: {{ :courses:be5b33prg:exam_1_2023.txt | Test 1}}. Oral part schedule (room KN:E-128): [[https://docs.google.com/spreadsheets/d/1vcS3YzgejDeFNdLXpxU-cRWOqMstAD8me0pkWkVw81E/edit?usp=sharing|here]] (The exact times and order is subject to change.)
* The oral part of exam 8.2. will take place from 12:15 at KN:E-128. See the [[https://cmp.felk.cvut.cz/~jenicto2/export/be5b33prg/oral_2022.html|approximate timeline]].
* Exam 8.2. starts at 8:30, 30 minutes earlier than originally announced
* The oral part of exam 19.1. will take place from 11:45 at KN:E-128..
* The final exam dates announced (19.1. and 8.2.), see KOS for details.
*/
/*
* Room change for end-of-term, lecture 12 (10.12.) - KN:E-301 ([[https://fel.cvut.cz/cz/glance/rooms/E3.png|same building, between floors 2 and 3]])
* Room change for lecture 11 (3.12.) - KN:G-205 ([[https://cyber.felk.cvut.cz/department/contacts/#maps|building G]])
* The format of the end-of-term test announced, see below.
* The format of the midterm test announced, see below.
*/
====== Lectures ======
**Where and when:** KN:E-301 ([[https://cyber.felk.cvut.cz/department/contacts/#maps|Charles Square, building E]]), Friday 09:15-10:45
**Teaching:** [[milan.nemy@cvut.cz|Ing. Milan Nemy, Ph.D.]]
PDF slides and other lecture materials will be made available during the semester. The lectures, however, will also include blackboard sessions as well as live coding demonstrations. Active participation in lectures is strongly recommended based on our experience from previous years. A mid-term test will be written during the lectures (Mid-term test in the table below); attending this lecture is required.
^ week ^ date ^ topic ^ materials ^
| 1. | 27.09.2024 | Introduction. Variables, expressions. | {{ :courses:be5b33prg:lec01-intro-mn-2024_16_9.pdf | lecture 01}} |
| 2. | 04.10.2024 | Primitive data types, program flow | {{ :courses:be5b33prg:lec02-flow-mn-2024_16_9.pdf | lecture 02}} |
| 3. | 11.10.2024 | Program structure, functions | {{ :courses:be5b33prg:lec03-functions-mn-2024_16_9.pdf | lecture 03}} |
| 4. | 18.10.2024 | Sequence data types, traversals | {{ :courses:be5b33prg:lec04-compound-types-mn-2024_16_9.pdf | lecture 04}} |
| 5. | 25.10.2024 | Collections (sets, dictionaries), iterators | {{ :courses:be5b33prg:lec05-collections-mn-2024_16_9.pdf | lecture 05}} |
| 6. | 01.11.2024 | Modules, namespaces, conventions |{{ :courses:be5b33prg:lec06-modules-mn-2024_31_10.pdf | lecture 06}} |
| 7. | 08.11.2024 | Mid-term test | |
| 8. | 15.11.2024 | Filesystem, file reading and writing | {{ :courses:be5b33prg:lec07-files-mn-2024_16_9.pdf | lecture 07}} |
| 9. | 22.11.2024 | Debugging, code testing, exceptions | {{ :courses:be5b33prg:lec08-testing-exceptions-mn-2024_16_9.pdf | lecture 08}} |
| 10. | 29.11.2024 | Objects, classes I | {{ :courses:be5b33prg:lec09-classes-objects-mn-2024_16_9.pdf | lecture 09}} |
| 11. | 06.12.2024 | Objects, classes II | {{ :courses:be5b33prg:lec10-classes-objects-2-mn-2024_16_9.pdf | lecture 10}} |
| 12. | 13.12.2024 | Objects, classes III | {{ :courses:be5b33prg:lec11-classes-objects-3-mn-2024_16_9.pdf | lecture 11}} {{ :courses:be5b33prg:pd_intro.pdf | PD intro}} |
| 13. | 20.12.2024 | Advanced concepts | {{ :courses:be5b33prg:lec12-advanced-mn-2024_16_9.pdf | lecture 12}} |
| 14. | 10.01.2025 | Revision for the exam | {{ :courses:be5b33prg:lec13-examples-mn-2024_16_9.pdf | lecture 13}} |
===== Individual Consultations =====
After agreement. Specific problems will be discussed hence come with open problems you are struggling with. You may consider studying one of the recommended online [[resources]] first.
===== Exams and Tests =====
There will be two tests during the semester (mid-term and end-of-term) and a final exam during the exam period. The format of both the exam and the mid-term/end-of-term tests will be specified during the semester. It is recommended that you go through pages [[ courses:be5b33prg:test_preparation | Preparing Yourself for the Tests ]] and [[courses:be5b33prg:labs:start#plagiarism|Plagiarism]].
The content of the exam / test will be based on the content of:
- Lectures before the date of the exam / test (not limited but including the slides released after each lecture)
- Exercises and home-works practiced before the date of the exam / test
- Relevant chapters of the [[http://openbookproject.net/thinkcs/python/english3e/|Wentworth2012]] book
- Collection of Python multiple-choice question to practice for the exam http://www.sanfoundry.com/1000-python-questions-answers/ related to the content of the lectures
**Midterm**
The midterm test will be held during **the Week 7 lecture**.
The mid-term test for the Programming Essentials course will take place during the lecture, not the PC lab, and will be conducted in a pen-and-paper format. You will receive sheets with the questions, and you only need to bring your own pen. Only the question sheet and pens are permitted; no other items, such as phones, laptops, or any electronic devices, are allowed on the desks. The use of any electronic devices or any form of communication with others is strictly prohibited and will result in zero points for the mid-term test, along with potential disciplinary actions. The test will cover all topics discussed in both lectures and PC labs up to the date of the mid-term, and it will include both theoretical and programming-related questions. The test will feature multiple questions as well as some free-text questions. You are expected to have a solid understanding of the material, and there will be limited time to complete the test. Note that there will be only one opportunity to take the test.
/*
You need to **bring your laptop to the lecture**, or let me know that you need access to a school computer in advance. The test will be a programming assignment which you will complete on your computer. You are allowed to use any materials, internet, and IDE (PyCharm). It is **not allowed** to communicate with anyone (sending information or receiving), or to generate code automatically (e.g. via ChatGPT or GitHub Copilot). See the assignment from the last years -- {{ :courses:be5b33prg:midterm_2020.py | midterm_2020.py }}, {{ :courses:be5b33prg:midterm_2021.py | midterm_2021.py }}, {{ :courses:be5b33prg:midterm_2022.py | midterm_2022.py }}.
*/
**End-of-term**
The end-of-term test for the PRG programming course will take place during **Week 12 in the time of the PC labs**. To accommodate all students, each PC lab will be divided into two time slots, and students are required to **sign up** for one of the four available slots, regardless of their regular PC lab schedule. The test will be conducted on university computers in the designated PC lab classrooms. Students are only allowed to use these computers—personal laptops, phones, electronic devices, or any other materials are strictly prohibited. No form of communication is allowed during the test, and any violation will result in zero points and potential disciplinary actions.
The university computers will be configured to allow the use of PyCharm Community Edition for coding but without internet access, except for the Brute system and the PRG courseware website. The only materials permitted are the PRG course materials from lectures and PC labs. Note that the university computers run on a Linux operating system and use an English keyboard layout. Students are strongly advised to familiarize themselves with this environment during PC labs in the upcoming weeks to ensure smooth performance during the test. Past test examples are available here: {{ :courses:be5b33prg:endofterm_2020.py | endofterm_2020.py }}, {{ :courses:be5b33prg:endofterm_2021.py | endofterm_2021.py }}, {{ :courses:be5b33prg:endofterm_2022.py | endofterm_2022.py }}.
**Final exam**
Once you pass the semester (obtain "zapocet" after the semester ends), use the Faculty information system [[https://kos.cvut.cz|KOS]] to enroll. The dates and rooms for each exam date are visible in KOS. You may take the exam 2 times (retake the exam 1 time), but only within the dates in KOS -- no more exam dates will be announced.
The final exam will have two parts: programming part (2.5 hour in the morning, up to 25 points) and oral part (10-20 minutes in the afternoon, up to 5 points but an unlimited number of negative points); you can get maximum 30 points in total. The programming part will be similar to the end-of-term tests, with the same rules but with more complex assignments. That is, the test will be conducted on university computers in the designated PC lab classrooms. Students are only allowed to use these computers — personal laptops, phones, electronic devices, or any other materials are strictly prohibited. No form of communication is allowed during the test, and any violation will result in zero points and potential disciplinary actions. Note that the university computers will be configured to allow the use of PyCharm Community Edition for coding but without internet access, except for the Brute system and the PRG courseware website. The only materials permitted are the PRG course materials from lectures and PC labs. Also note that the university computers run on a Linux operating system and use an English keyboard layout. Students are strongly advised to familiarize themselves with this environment during PC labs to ensure smooth performance during the test.
During the oral part, you will be asked questions about your solution and topics related to the assignment, in order to 1. refine your exam grading and 2. verify that the uploaded solution is your own original work. Failing to explain your work will result in failing the exam and disciplinary actions. The oral part is mandatory and must be taken the same day as the written part. During the oral part, no materials are allowed. See the previous assignments -- {{ :courses:be5b33prg:exam_1_2020.txt | exam_1_2020.txt }}, {{ :courses:be5b33prg:exam_2_2020.txt | exam_2_2020.txt }}, {{ :courses:be5b33prg:exam_3_2020.txt | exam_3_2020.txt }}, and {{ :courses:be5b33prg:exam_1_2021.txt | exam_1_2021.txt }}, {{ :courses:be5b33prg:exam_2_2021.txt | exam_2_2021.txt }}, {{ :courses:be5b33prg:exam_3_2021.txt | exam_3_2021.txt }}, {{ :courses:be5b33prg:exam_1_2022.txt | exam_1_2022.txt }}, {{ :courses:be5b33prg:exam_2_2022.txt | exam_2_2022.txt }}.
===== Grading =====
Points: 50 homework (mostly coding), 20 tests during the term (2 tests, 10 points each), 30 final exam.
At least 30 points (out of 70) and regular lab attendance are needed before going to the final exam (in order to obtain "zapocet"). At least 10 points (out of 30) are needed to pass the final exam. To pass the course and get a grade, "zapocet" must be obtained, exam passed and at least 51 points gained in total (see the table below). It is possible to get additional up to 20 points for extra activity during the semester, such as completing a bonus homework.
^ A ^ B ^ C ^ D ^ E ^ F ^
| 100-91 | 90-81 | 80-71| 70-61 | 60-51 | 50-0 |
**F** means fail.