DAT515 Advanced programming in Python lp2 HT21 (7.5 hp)
The course is offered by the department of Computer Science and Engineering.
This is a new course, to be given for the first time now. This web page is therefore not yet complete. But it will contain all essential information before the course starts on 2 November 2021.
- TimeEdit, schedule with times and locations
- course GitHub, containing most of the material such as labs, exercises, and lecture notes
- lecture notes, updated at GitHub as the course proceeds
- official Python tutorial, covering the most of the language and the main material for the beginning of the course, but something to go back to even later
- self test, a page with automatically corrected exercises designed for the introduction course - useful in particular if you are new in Python. Most of this should be doable after the first two lectures.
- examiner: Aarne Ranta
- supervisors: Arianna Masciolini, William Åkvist
The best way to contact the teachers is via our Slack channel (forthcoming)
The course is aimed for students who have completed an introductory course in programming. If that course is in Python (e.g. DAT455 or TIN214 at Chalmers), there will be some repetition at the beginning. The reason is that the course will also be accessible for students who have a different background, such as a Java course. The first two lectures will be a quick "crash course" giving a summary of Python to those who already know programming, just not the syntax of Python.
After that, the course will proceed to more advanced features of Python and, in particular, to more advanced applications. The ultimate goal is to cover all aspects of "full stack development", in the form of a series of labs that results in a web application with a front end, a back end, and a database.
The official schedule is in
which gives both times and locations. But we will also support remote participation by making recordings and other material available. The links will be given in Announcements, which limits the access to those who are registered.
The only compulsory participation in place is the exam in January - all other parts can be made via internet, for the most part via this Canvas page.
We will list here some recommended books and web documents, but there is no one official compulsory book.
The official documentation of Python
will be used as the standard reference. One of the very goals of this course is to give a clear view of everything in the Python language and its standard libraries and enable reading technical documentation on an advanced level.
The course consists of
- exercise classes
- individual supervision
- discussion forum (Slack)
- assignments ("labs") to be submitted and graded - individually by each student
Lecture and lab schedule
The following table gives a schedule of the main events of the course (note: preliminary)
|Date, time, location||Event||Notes|
|Tue 2/11, 10-12, HC2||Lecture 1: Python recap and tutorial I|
|Wed 3/11, 10-12, SB-L400||Exercise|
|Thu 4/11, 10-12, HA4||Lecture 2: Python recap and tutorial II|
|Tue 9/11, 10-12, HC2||Lecture 3: Information extraction methods||ready for Lab 1|
|Wed 10/11, 10-12||Exercise|
|Thu 11/11, 10-12, HB4||Lecture 4: Graph algorithms|
|Tue 16/11, 10-12, HC2||Lecture 5: Python Data Model, Object-oriented design I|
|Wed 17/11, 10-12||Exercise|
|Thu 18/11, 10-12, HA4||Lecture 6: Object-oriented design II||ready for Lab 2|
|Wed 24/11||Lab 1 deadline|
|week 22-26/11||lecture break||time to work on labs|
|Tue 30/11, 10-12, HC4||Lecture 7: Visualization|
|Wed 1/12, 10-12||Exercise|
|Thu 2/12, 10-12, HB4||Lecture 8: Web programming|
|Mon 6/12||Lab 2 deadline|
|Tue 7/12, 10-12, HC2||Lecture 9: Full-stack development||ready for Lab 3|
|Wed 8/12, 10-12||Exercise|
|Thu 9/12, 10-12, HB4||Lecture 10: Extra lab topics I|
|Tue 14/12, 10-12, HB4||Lecture 11: Extra lab topics II||ready for extra labs|
|Wed 15/12, 10-12||Exercise|
|Thu 16/12, 10-12, HB1||Lecture 12: Some real world Python examples|
|Wed 22/12||Lab 3 deadline|
|Wed 5/1/2022||Extra Labs Deadline|
|Mon 10/1, 14-18, Johanneberg||Exam|
|Wed 12/1||last deadline for lab resubmissions|
The lab consists of building a web application for route finding in a public transport network, exemplified by the tram system of Gothenburg; see picture below. The application allows queries about the network, such as asking for the shortest or the fastest route from one place to another. The final application will be demonstrated with the Gothenburg tram network, but the software behind it will be much more general and applicable not only to transport networks but to graphs of many kinds.
This lab is built in three parts, submitted separately each by its own deadline. The three lectures preceding the work on each lab will give the theoretical background and technical prerequisites of the work.
- Lab 1 (lectures 1-3): Information Extraction. Collect and combine data from different sources (files, web queries) and formats (pain text, Json). This is an exercise in finding and using relevant functions and libraries of Python. It will provide the database part of the full application.
- Lab 2 (lectures 4-6): Graph Classes and Algorithms. Implement a library of concepts applicable for graph analysis tasks - transport networks as focus but not the only application. This is at the same time a substantial exercise in object-oriented design (classes, methods, encapsulation, inheritance, modelling). It will provide the back end part of the full application.
- Lab 3 (lectures 7-9): Web Application. Build a web server and user interface, in which the user can find routes in transport networks. This requires learning about visualization libraries and web application frameworks. It will provide the front end part of the full application and put all the components togethe.
The Gothenburg Tram Network (picture by Bengt-Inge Larsson - Eget arbete, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=92652381)
These three labs are compulsory for everyone and sufficient for the accepted grade 3. For higher grades, extra labs can be submitted - basically, one lab for grade 4, two for grade 5. Possible topics for these labs will include:
- A graph colouring algorithm: colouring maps in a given number of colours.
- Call graphs for Python programs: finding dependences between functions and classes
- Reasoning about WikiData: finding and visualizing information from the graph database that underlies Wikipedia.
- Clustering: unsupervised machine learning techniques for finding distinguishable parts of a graph.
- Extra parts in the ordinary labs: doing certain things easier or using ready-made solutions, as indicated in each lab.
But we are also open to suggestions from course participants.
Learning objectives and syllabus
Knowledge and understanding:
- recognize all constructs of Python and the design choices behind them
- explain the design alternatives in modular and scalable programming
Skills and abilities:
- create well-organized software projects for complex tasks
- read and analyse code written by others
- contribute to collaborative projects
- use standard libraries for advanced tasks
- apply testing methods to guarantee the quality of code
- write code documentation on different levels of detail
Judgement and approach:
- reason about software design choices
- assess the complexity of programming tasks
Link to the syllabus on Studieportalen:
The most important part are the labs, will together form a project. This project has compulsory parts, sufficient for grade 3, and optional parts for those aiming at grades 4 and 5.
The exam will test the knowledge acquired by doing the labs. It will have dedicated questions for the levels 3, 4, and 5. The final grade requires that both the lab and the exam for that grade are accepted.
The labs can be done in pairs, whereas the exam is done individually. Copying from other groups (pairs or individuals) in the labs is forbidden.
The syllabus page shows a table-oriented view of course schedule and basics of course grading. You can add any other comments, notes or thoughts you have about the course structure, course policies or anything else.
To add some comments, click the 'Edit' link at the top.