So I've finally got some free time and I really don't feel like studying for calculus so here I am writing what will likely be one of the last posts on this blog. I'd like to take this post to reflect on the subject this blog was suppose to focus on CSC148.
I started the course with practically no knowledge of Python and having spent about a year programming in Java. This made the first month or so rather crazy for me considering this was my first semester in University and all that jazz. That being said I'm glad I took 148 over 108 because this course has thought me more than it ever would have had I come in with previous knowledge of Python. For one 148 and the entire semester as a general has thought me the fine points of time management. I have never before had so much to do and so little time to do it in. I have a part-time job and commute to Toronto which meant that the entirety of my time was either taken up by class homework or work. That put me under a lot of stress and the demands made on me by that stress have made me grow as a person I think. So ya, wouldn't trade it even if I get bad marks.
Now onto the actual programming stuff. There are a couple of things I think this class did phenomenally and a couple of things that in hindsight don't make that much sense to me. First and foremost, recursion. I was introduced to recursion in high-school, my teacher mentioned it had us do a couple of exercises and then we never saw it again. This meant I had a vague understanding of the concept but wasn't particularly good at using it. When I realized how recursion heavy 148 was going to be I wasn't too happy at first but I've definitely warmed up to it now. You could say that 148 thought me how to recurse. I am now intimately familiar with recursive algorithms and their pros and cons, and sure there's always something new to learn but this has given me a much more solid base on which to sand with this particular problem solving strategy than anything else has.
On the other hand on thing that didn't make much sense to me is how little time we spent on OOP in 148. I mean sure we were introduced to it and we did some stuff with OOP but at the same time I feel like we could have put a little more emphasis on it. Then again maybe I'm biased but I feel like OOP is an incredibly useful tool to have in your programming belt (for reasons mentioned in an earlier post about the topic) and we could have spent a little more time developing it. Maybe 108 touched on OOP and that's why it wasn't as emphasized as recursion but at the same time I felt like when Danny introduced it he was doing so with the mind that we weren't meant to have this tool yet meaning 108 hadn't covered. Anyway I love me some OOP so maybe I'm just sour that it didn't get the attention I feel it deserves.
The other thing we spent an extensive amount of time on was Binary Trees. On this I feel like the course did a very good job at teaching us how to work with these trees, how they function their pros and cons and all that good stuff but one thing I think it missed were practical applications. And I understand that the pattern crops up everywhere in nature but it would have been nice to see examples of where binary trees could be used in actual programs. We had the example of regex's but I'm not sure that was particularly effective in conveying the utility of tree structures and where they're useful to have.
Which brings me to my last comment on the course and my learning. This one is intimately related to Python as a language. I found that in the course of learning how to work with Python and the various rules and conventions around it I also learned a lot about Java. There were concepts in Java like private vs public methods and classes and static vs non-static methods that even after a year of battling errors related to them I could not grasp, weather it was because of instruction or myself I'm not sure but they just didn't click. After having these constraints removed by Python I think I finally understand why the creators of Java added them to their language and the creators of Python didn't.
Python is meant to be this open ended language where you can kind of do what ever you want to do and you rely on your own skill to make stuff work. Java on the other hand is this lumbering giant of a language, they don't want to rely on a programs skill to make sure stuff doesn't break down for someone who's good at what they do. They want programmers to be able to protect their software from learners who're still fumbling in the dark and likely to knock over the expensive vase if you don't put it in glass casing so they give them things like public and private and static so they can protect their work and force young programmers to follow the rules not break them. 148 made me see this and made me understand how I might be able to make use of these public and private and static key words in Java which before I had mostly put in because otherwise the IDE would yell at me for it. So, thanks for that, can't wait to see if I can finally make some of my Java stuff work with this new knowledge.
That being said I've had lots of fun this semester and I'm glad I have this experience under my belt. Thank again for your time.
PS: I had a plan on doing a post on AI, I'll see what I can do about that, I might put something up tomorrow if not well Bye~