Wow, 12 weeks do past by really quickly. I know that I'm a bit late on this SLOG, but I wanted to make sure that I had a comprehensive understanding of what we learned exactly this semester. I was also rushing to finish the third and final assignment, and I definitely planned to have that finished by writing this. So all in all, even when I read this a few years down the road, here goes my final SLOG, covering the topics of:
1) The 3 assignments
2) The lecture materials
3) The term tests
4) Anything else
--------------------------------------
1) Assignments
To start off, the assignments definitely became much easier as the semester progressed. That is to say, in terms of hardest > easiest, it was undoubtedly A1>A2>A3 (the third assignment being the easiest). When I initially saw the first assignment, I was bewildered: I wasn't exactly the most confident in classes, and the multi-class, multi-method, multi-method aspect of creating the game confused me greatly. After much struggle and forum-stalking, and constantly using smaller examples, I finally had something that functioned. It was a mess between the gameview, gamestate, and strategy. I understood the desired implementations that the profs wanted from generic states, but I felt like my approach and style were counter intuitive from what was expected of us. Lo and behold, I received a decent mark for my approach. My biggest struggles, and accomplishments likewise, were the implementations of parent (generic) -> child (specific game state) classes.
The second assignment was mildly easier, as in the starter code, or the prof's "official" solutions were given to us, for us to plug in our new Tippy game to. I had much fun implementing the actual logic behind the Tippy game, and creating the algorithm to detect the Tippies themselves. The solution actually game to me from a quick jaunt to the shower... However, there was one really tough approach, which was Minimax, the 'unbeatable', logically objective strategy for the computer. Looking back now, I realized that my largest setback was being unable to break away from the simple list comprehension base case type of recursion. Luckily for me, professor Heap gave us essentially the solution to the code via pseudocode in a course-wide email... but even that was unhelpful. The office hours were blessed, and I think I nailed the solution. All in all, the assignment was a nice challenge that tested my knowledge of the course.
The third assignment, however, was very easy. The given option A, which was to optimize our own minimax algorithms was risky for 2 reasons: 1) we didn't receive feedback on our own minimax which made it hard to improve on because we don't even know if it was implemented properly, and 2) we needed to start from scratch 3 separate files for our code. On the other hand, the sparkling golden option B required none of that as it operated only on gamestates. All the functions had been defined beforehand as well, with adequate docstrings and documentation. This was an easy decision; plus I had nailed the "hard" part of the assignment for function grown within an hour, which easily meant that this option was my chosen one. Because of this, option B became easy, and almost trivial as the minimax implementation really helped my recursion programming.
--------------------------------------
2) Lecture materials
At first, I really missed the PCRS spoon-feeding system of hands-on teaching. I thought that code on a projector wouldn't be as useful, but as time passed, Prof Heap proved me wrong. His clarity and concise-ness along with the plentiful amounts of help on the forums were really useful. However, the most helpful resource were the code snippets, lab solutions and annotated slides posted on the website. Being able to freely review all lecture materials at will and play around with all code presented in the course were really, really helpful.
--------------------------------------
3) The term tests
Ah, the great outdoors, or in other words, the room known as EX100. I was nervous for both tests for similar reasons I talked about for the assignments. The first term test, which was about recursion-tracing and parent-child class relations seemed a daunting a topic, especially after receiving 1/2 on the quiz by pure guessing. The given cheat sheet was very useful and I managed to match one of my answers to an example I had noted previously. Similarly, the daunting 2nd term test was blessed by my cheat sheet that seemed to solve the hardest problem, letting me nail an A+ and a high A on the tests, respectively.
--------------------------------------
4) Concluding thoughts
Contrary to my initial fears from the course, CSC148 only helped my love for programming and logic, and I can't wait to attempt things next year! See you all later, and let this be a chapter in my personal testament to becoming a better programmer~
Take care,
Andrew L.
Winter 2015, CSC148