- Foundations of Computer Science: https://www.teach.cs.toronto.edu/~csc110y/fall/notes/
- Basic Python: https://ebookcentral.proquest.com/lib/th-deggendorf/reader.action?docID=6797218 (also in the md folder in this Repo)
- Python
- Rust
- Algorithms and Data Structures: https://ebookcentral.proquest.com/lib/th-deggendorf/detail.action?docID=4946360&query=algorithms (I will refer to this while discussing solutions to exercises)
- 60-90min | Review and joint development of selected Homework Exercises
- 20-30min | Brief theoretical input on computational thinking with Algorithms and Data Structures.
- 60-90min | Practical Exercises and Coding Examples with Python
Each session below comes with a set of exercises. We will do the first batch of exercises for Session 1 together. From Session 2 onwards you are encouraged to prepare all exercises associated to a certain session. I will provide feedback and guidance on the side. For each session, I will pick some difficult or important exercises and discuss solutions with the class. The exercises are plenty and you will hardly be able to complete all of them. Make sure to definitely work on all Exercises from Session 1 and 2.
The Exam will be written and online. It will ask about theory and require you to work on several coding exercise.
-
What would you like to automate?
-
What do you think about DAOs?
The ideal of a decentralized autonomous organization is easy to describe: it is an entity that lives on the internet and exists autonomously, but also heavily relies on hiring individuals to perform certain tasks that the automaton itself cannot do.
- Vitalik Buterin, Ethereum Foundation
- https://subpixel.space/entries/the-desire-for-full-automation/
- https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/
- From REPL commands to simple scripts | Chapter 1, p.1-36
Theory: What are the layers of abstraction by creating different Versions of Hello World in Assembler, C, Python | Chapter 1, p. 1-28, Chapter 2, p.29-38
- Assembly (NASM): https://github.com/netwide-assembler/nasm (Example: https://en.wikipedia.org/wiki/Assembly_language#:~:text=A%20program%20written%20in%20assembly,ops)%2C%20comments%20and%20data.)
- C Compiler: https://github.com/mortdeus/legacy-cc
- CPython: https://github.com/python/cpython
- https://archive.org/details/programsforelect00wilk/mode/2up
- https://www.nand2tetris.org/course
- https://github.com/Schweigi/assembler-simulator (https://www.mschweighauser.com/make-your-own-assembler-simulator-in-javascript-part1/)
- https://www.youtube.com/watch?v=tpIctyqH29Q&list=PL8dPuuaLjXtNlUrzyH5r6jN9ulIgZBpdo (Videos 1-10 explain really neatly all the abstraction levels between logic gates and programs)
Python Built-in Data Types | Chapter 2, pp. 37-82
Theory: Algorithm and Data Structure | Chapter 3, pp. 53-81
Understand your Algorithms: https://www.bigocheatsheet.com/
Practice: Conditionals and Iteration | Chapter 3, pp. 83-114
- Problem-solving with Data Structures and Algorithms
- Choosing the right data structure is key
- Solve problems iteratively:
- Understand the Problem at Hand (Read Excercise Description carefully)
- Build a model (Paraphrase in your own words, Visualize, Translate into "Python")
- Validate the model (Look at test cases, especially at input and output data types)
- Get a quick win (Solve the problem as concrete as possible or only partially first, e.g. by copying test case)
- Test, Fail, and Repeat towards higher abstraction (Try to find more abstract approaches (variables, conditions, iterations) for parts of your code)
- Clean your code (Once all tests pass, challenge the current state of your Code and avoid repetitive patterns (DRY Principle))
- Celebrate!
Theory: Programming Paradigms | Chapter 3, pp.38-51
Practice: Functions, the Building Blocks of Code Chapter 4, pp. 115-156
Practice: Comprehensions and Generators | Chapter 5, pp. 157-194
- Theory: Functions, data, classes and objects - Chapter 2, pp.56-103
- Practice: OOP, Decorators, and Classes - Chapter 6, pp.195-238
Additional Material:
- OOP from scratch: https://www.youtube.com/watch?v=8moWQ1561FY&t=3666s
- OOP Development Kit: https://www.youtube.com/watch?v=HTLu2DFOdTg
- What is self anyways?! https://martinheinz.dev/blog/81
-
Theory: Operating Systems (1/2) | Chapter 4, pp.81-130
-
Practice: Exceptions and Context Managers | Chapter 7, pp. 239-256
Theory: Operating System (2/2) | Chapter 4, pp.81-131
Practice: Files and Data Persistence | Chapter 8, pp. 257-294
Theory: Software Development Lifecycle | Chapter A, 241-247
Practice: Testing | Chapter 10, pp.315-342
Theory: Software Engineering Practices | Chapter B, pp. 249-267
Practice: Debugging and Profiling | Chapter 11, pp. 343-364
- https://martinheinz.dev/blog/64
- https://jakevdp.github.io/PythonDataScienceHandbook/01.07-timing-and-profiling.html
- https://stackoverflow.com/questions/17579357/time-time-vs-timeit-timeit
Theory: Computer Networks | Chapter 6
- Python requests and requests-cache: https://realpython.com/caching-external-api-requests/
- httpx for async requests
Practice: GUIs and Scripting | Chapter 12, pp. 365-392
Theory: Computer Security | Chapter 6, pp.165-194
Practice: Cryptography and Tokes | Chapter 9, pp. 295-314
Theory: Cloud Computing Chapter 7, 195-240
- https://realpython.com/api-integration-in-python
- https://betterprogramming.pub/asynchronous-programming-in-python-for-making-more-api-calls-faster-419a1d2ee058
Advanced Python: https://ebookcentral.proquest.com/lib/th-deggendorf/reader.action?docID=5353672 Computational Thinking, Data Structures, and Algorithms: https://link.springer.com/book/10.1007/978-1-4842-7077-6