Sunday, 5 April 2015

Last Impressions

This is the last CSC148 post I will write. This semester went by much quicker than I expected and a lot happened that I assume not a lot of people were ready for. I found the first couple weeks of this course quite challenging which put a damper on my enthusiasm for computer science in general.

I found the implementation of classes challenging specially since I had trouble understanding and communicating with my lab TA. Thankfully, for the week we went over recursion, our TA changed to a much more capable teacher. Unfortunately this only lasted one week because of the strike. The strike affected me more than I thought it would. It disabled me from understanding the material concisely. In my opinion, this really affected my test mark for term test 2; specially since linked lists were a big part of the test and that was a week we completely missed in lab.

Assignment 3 is when I finally saw the light at the end of the tunnel. I am very grateful that it did not get canceled because it obligated me to truly understand the ins and outs of recursion. Finishing it gave me a lot of confidence and put me back on track for this course.

I actually believe that I can make it in computer science. Hopefully I can prove that, when, I write the final exam (crossing my fingers).

Revisiting My Past Slogs

I decided to revisit my very first post: 'Why Geeks Should Write'. I believed that writing and keeping a log of what we learned in class is important for computer scientists, however, I was a bit more skeptical about the importance of blogs then I am now.

In my post, I talked about the importance of being able to communicate your ideas, leaving comments when writing code and keeping notes to track your thoughts. I still believe those things are important, although, I would have to add something. When I wrote this post I did not know a TA strike would take place and would have never expected it to affect my courses as much as it did and so would not have been able to predict the following. Slogs really helped me keep track of the material we learned in class when labs had to be cancelled. Reading others' opinions on class components, the work they were doing, and having to write about ADTs and recursion myself, forced me to revisit these topics when weekly quizzes, what usually kept me on track, were called off.

All in all, I found writing slogs much more difficult then I expected. The ability to communicate and keep track of my thoughts is one I am lacking. It is indeed an important skill to possess and hopefully I can convince myself to continue writing logs of my work. I realize that this will help me in the future.


Sunday, 1 March 2015

Week 7

Abstract Data Types

I am going to talk about ADTs in this post because I found ADTs the most difficult topic to grasp so far. The ADTs we have covered in this course are stacks, queues, trees and binary search trees.

Stacks are ADTs representing piles of items. Stacks have a top and a base. Items can only removed and added from the top of the stack. The last item to be added to the stack will always be the first item removed from the stack. Common functions used with stacks are pop, push and is_empty. Pop removes the first item at the top of the stack. Push adds an item at the top of the stack. Is_empty returns weather or not the stack contains any items. No items can be removed from empty stacks.

Queues are ADTs that are similar to stacks. However, when an item is removed (or popped) from a queue, it is removed from the beginning of the queue; the first item in is the first item out. When an item is added (or pushed) to a queue, it is added at the end of the queue; so the last item in is the last item out. A queue is therefore a sequence instead of a pile of items.

Trees are ADTs containing sets of nodes. Nodes, beginning with the root of the tree, are connected by edges. All nodes have parent nodes except for the root. Nodes can have children (other nodes rooted from that node). If a node has no children, it is named a leaf. Trees have specific heights. The height of the tree is the longest sequence of nodes.

Binary Search Trees (BSTs) are ADTs that differ only in one aspect to Trees. This difference is that in BSTs, nodes may only contain two children.

With recursion, information from any of these ADTs, is very easily accessed. Recursion is specially useful when dealing with trees and binary search trees because children nodes can be accessed through parent nodes. I find it simple to create running functions that obtain data form each of these ADTs. I still have trouble however, understanding how the computer reads these ADTs when running recursion functions.

Sunday, 8 February 2015

Recursion

When I was first introduced to recursion, I was worried that I was never going to understand it. The lab and the in class tracing exercise we did really helped me comprehend recursion. I really appreciated that the lab had different examples of functions that used recursion. This made me wish we were given such good examples for everything we did previously in class. I feel like I have a really good grasp on recursion now.

This week, after the first term test, I lost a bit of hope in computer science. The difficulty of the test was one I expected however, I found it very challenging to answer what was asked during the period of time we were given. Hopefully with practice, I can learn to manage my time better for the second term test.

Sunday, 1 February 2015

Week #4

I took CSC108 last semester. This was the only introduction I had ever had to computer science. I found the class very easy. I find that CSC148 on the other hand is quite a step up from CSC108. I think students are expected to know the basics of Python outside and out. I also find that much more freedom and responsibility is given to us in CSC148 compared to CSC108. I found this to be especially true on the first assignment. I do believe this is good and will help me in the future, but it is something I need to get used to in order to do well in the course and in computer science in general.

Sunday, 25 January 2015

Why Should Geeks Write?

Communication skills are some of the most useful skills someone can acquire in their lifetime. These skills cannot be obtained by simply reading a textbook. On the contrary, it takes years to master these skills through public speaking, writing, interviews, etc.

Why are these skills important?

Writing a program and coming up with exceptional ideas may be simple for some however this is worthless when one cannot speak of his/her program or explain its function to others. Big projects often require the aid of the public or the government. How can someone obtain financial support for a project without the ability to promote it? Winning over investors or convincing peers to collaborate on a project requires well formulated and convincing arguments.

Making progress when working on a project is also difficult if a person is incapable of sharing his/her ideas. Interchanging ideas between peers can truly advance a project and bring more depth to it.

Furthermore, writing skills are surprisingly important when using Python. As taught in class, when writing in the Python language, leaving comments to describe the steps that someone takes has a great deal of value. Without this, it may be difficult and more time consuming for others to read and understand a code. Leaving comments in a code, or leaving notes about ideas for a code may even be beneficial for future reference. If someone is working on a code for long periods of time and taking breaks, these notes can minimize the time spent on remembering what he/she was trying to do or what they meant to do when they wrote the code.

Losing these skills is much easier than one would think. 

I, a second year in Life Sciences hoping to get into Computer Science, find that after a year of taking merely science courses, courses that don't test one's writing skills or speaking skills, writing a simple slog or even being interviewed is much more intimidating and challenging than it should be. Practicing by writing every day is something I should invest in. Great writing and speaking skills could undoubtedly advance someone's career and relationships.