Programming Fundamentals (Python)¶
The lab activities are new.. sorta, but I never used them formally in class before. These stem from my short experience tutoring ITS30705 Introduction to Algorithm in Taylor's College in the Aug 2022 semester, as well as being a teaching assistant for IT5001 Software Development Fundamentals in NUS. The latter of the two is more strenuous, and it feels more whole than the former which feels more suitable for secondary school students1. This inspired the name I gave to this set of lab exercises.
As mentioned, these lab activities were never used formally in class before. They may be derived from the material I got to use during classes2 (but not exactly - NUS has a clause for distributing class material externally). I will try my best to make them as digestable within the weeks they have been allotted into, and I hope these can complement learning for beginners or for those who don't feel ready to take on proper word problems like on LeetCode or Kattis.
If you would like to follow along in a semester syllabus structure, here's what I can suggest (and plan to follow; may change as I craft out the lab exercises):
| Week | Lesson | Lab |
|---|---|---|
| 01 | Introduction to Python Programming and Basic Syntax | Lab 01 |
| 02 | Selection Statements and Loop Structures | Lab 02 |
| 03 | Functions and Variable Scope | Lab 03 |
| 04 | Sequences Part 1: Lists and Tuples | Lab 04 |
| 05 | Sequences Part 2: Sets and Dictionaries | Lab 05 |
| 06 | File I/O | Lab 06 |
| 07 | Iteration and Recursion | Lab 07 |
| 08 | Multi-dimensional Arrays | Lab 08 |
| 09 | Searching and Sorting Algorithms | Lab 09 |
| 10 | Higher-Order Functions (HOF) | Lab 10 |
| 11 | Map, Filter and Reduce | Lab 11 |
| 12 | Principles of Object-Oriented Programming | Lab 12 |
| 13 | Exception Handling | Lab 13 |
| 14 | Modules | n/a (?) |
It is tempting to mirror the exact way how IT5001 is conducted, but I think it would be better to follow through an actually packed 14-week structure without leaving weeks empty to simulate the same structure (i.e., Week 8 would have been midterm week, and there are only 13 weeks of classes not counting the recess week in NUS's semester structure).
- The course instructor at the time of me typing this out likened IT5001 to a very tough Super Mario level made in Mario Maker 2 vs. the first level in any Super Mario Bros. game. Yep, I see it.
- I never spearheaded this course before, so what's here has not been trialed in class before! But the best part? - No need to keep it at the same intensity!
-
I have a rant about the state of the mods in Taylor's, but I think I'd keep it for a more appropriate time and place to voice such views.. not right here, though. ↩
-
ITS30705's problem sets were very elemental, and do not really do much other than prompt students to regurgitate what they could absorb during the 2-hour lecture prior. IT5001, however, conducts its 1-hour lab sessions in a tutorial-like structure, where students are greeted with yet another presentation that either reinforces taught concepts during lecture or working through worksheets. The aim of these lab exercises I created here are to be less focused on problem sets (like one would find in websites like Kattis or LeetCode), and something more akin to the Scientific Method (very present at research level, and no one really notices it until they get to a research project).
While it is often encouraged to have ample amounts of practice with problem-solving exercises when it comes to learning how to program, I will be approaching it from a more inquisitve approach; basically, my intention with the labs is to allow learners to explore their tools first and allow them to observe some simple implementations in deeper detail, all before they use them to solve problems. Some of the lab activities will entail creating a mini-program from scratch instead, producing something perhaps more tangible than with solutions for cold hard problems like one may find on Kattis or LeetCode. That being said, the intention is not to dismiss the importance of that way of learning programming - I just think there's more to that than merely solving word problems.
I do have code repositories where I contain my attempts (and of which I frequently fail) for Kattis and LeetCode exercises in GitHub repositories. Feel free to have a gander, or if you're looking for practice questions in that sort of style, you may want to look there instead. ↩