One more week and we are done! In the past ten weeks we have covered these topics:
1. Abstract Data Types (i.e. general concepts of built-in functions, methods, graphs, queues, stalks.)
2. Classes and Subclasses (i.e. general concepts of OOP, inheritance, special methods)
3. Test Cases (i.e. doctests, unittests, assertions, raising errors)
4. Intro to Recursion (i.e tracing)
5. Intro to Tree class and methods (i.e. general concepts, BTNodes, implementing recursion)
6. Binary Search Trees (i.e general concepts, inorder/preorder/postorder)
7. BST Mutations (i.e insert and delete methods)
8. LinkedLists (i.e. general concepts, LTNodes, iteration, mutation)
9. Sort methods (i.e. bubble sort, selection sort, insertion sort, quick sort, merge sort)
10. Raising Errors (i.e. NotImplementedError, AssertionError)
Looking back I realize I know more conceptually than I do when I start implementing it in code (as seen through doing the labs) and this discrepancy has been consistent throughout the term (thus the quote above by Donald Knuth). In fact, I need more practice in a bulk of these topics strictly because of my overconfidence that I understand the concept. Every week I have been telling myself enough practice will help me improve - which it has - but without help on the labs it's been really hard to keep up. My answers differ from the one's in the lab solutions and, often times, from the answers taken up in class. The only advice I have for myself at this point is to continue doing as much as I can alone and then asking for help when I am really stuck.
Particularly, my biggest problem is still recursion. Between weeks 6 and 7 I thought I had finally nailed recursion after doing the labs and class exercises on my own but as the weeks went on and the BSTs and LinkLists got more complex I started to get stuck on recursion again. I did refresh my knowledge of recursion, trees, and general classes before our second midterm on week 9 - which I had some confidence going into (having made silly coding mistakes here and there) - but without our marks for that test and the last assignment I do not know where I am at. Some of the topics above have been covered in Intro to Programming last semester but this course is a big jump from that.
I've noticed - from reading other blogs - that I lot of other students have also had a hard time with the assignments as I have and have consequentially spent more time working on the assignments than on lab exercises. It has also been hard for the bulk of us to work without the help our TAs because of the strike, but I still do recognize that a lot of students work together outside of class to get work done. This is something I should consider doing because I've mostly been working alone this term and nevertheless I do see that I improve when I work with others.
On that note, I'll end off by saying that we are at the last stretch of the course and if there is any good time to make a change in personal work ethics it is right now. It's worrisome to think the course is pretty much over and this last assignment and exam is the my final chance to bring my marks up. Nevertheless, I'm sure we can all do it.
Cheers
"...I still do recognize that a lot of students work together outside of class to get work done. This is something I should consider doing because I've mostly been working alone this term and nevertheless I do see that I improve when I work with others."
ReplyDeleteI know exactly what you mean. I mistakenly worked alone at one point in CSC165 because I was "overconfident" about proofs, and I did a lot better when I formed a group with two other people. (I was beyond happy when I saw the mark I got when working with them.) I find that in CS courses, you can find friends through collaborating on assignments and meeting up outside of class, and in turn you'll do a lot better. Cooperation is a skill that computer scientists and others in related fields should have. (For example, say you write a docstring. You'll want to share that docstring with your colleague so they can have a look. Then they could give you feedback, and so on and so forth.)
Your post has motivated me to working with others a lot more to gain possible friendships and not be a quiet person, and perhaps get to know my current CS friends a bit better when I possibly encounter them in future classes (CSC207, CSC236, etc.).
That said, you will find good partnerships along the way, especially if you're planning to take future CS courses where you'll deal with more programs but in different programming languages. :)
Best of luck on A3 and the final exam! (As well, we can work/study together if you'd like.)
Thank you and I'm glad it was helpful!
DeleteYes, we should meet up to review together! I was thinking of going over the labs with others to see how they came up with solutions. :)
Oh dear, I shall start the labs soon! But yes, we can review together sometime. (And invite others if they wanna come too.)
Delete