Posted by: idm04 | 2014/12/23

Bachelor of Computer Science (BCS): Year 1 Term 1 Course Review

Technically I have third year standing though, so when people ask what year I’m in, I say third XD

Courses I took this term:

CPSC 110
CPSC 121
SCIE 300
MATH 307

List of all courses I’ve taken




SCIE 300: Communicating Science

Summary: There are a few neat opportunities in this course, but there is too much work. Furthermore, although I did learn a few things, the majority of the material was not useful nor interesting to me. As such, I found that SCIE 300 was not worthwhile for me to take.

Grading scheme:

In-class worksheets & activities: 3%
Short, individual presentation: 3%
Writing assignment quizzes (Connect): 10%
Blog posts & comments: 9%
Scientific Investigation (SI) project: 25%
Science Outreach (SO) project: 25%
Fusion project: 25%


We had writing skill modules throughout the course, and these were covered in the MWF tutorials:

1. Active vs. Passive Voice
2. Paragraph Structure, Topic Sentences, Transitions
3. Numbers, Units, Abbreviations, and Mechanics
4. Succinct Writing, Dealing with Jargon, and Peer Review
5. Quoting and Paraphrasing
6. Summarizing Journal Articles

These topics seemed fairly basic to me, which is why I did not find them particularly useful. That is not to say that I learned absolutely nothing, but the little that I did learn was not reason enough for me to justify taking the entire course, and the things I did learn were things I could have easily looked up on the internet.

In-class activities:

Although this class is scheduled for 3 hours of tutorial (MWF) + 1.5 hours of lecture (Tues) every week, the class didn’t regularly meet on Mondays. Instead, that time was reserved for one-time things like the library research tutorial, or group work for the projects.

Our tutorials were run by an instructor who would give us some worksheets to do on the modules (above) which had several activities. After each activity, we’d discuss the answers as a class.

For the 1.5 hours of lecture on Tuesday, all SCIE 300 sections would come together and one of the instructors would lecture about a particular topic, like plagiarism, giving presentations, making figures and graphs, or common misconceptions in statistics. There were also a few guest lectures: for example, Kathryn Gretsinger from CBC told us about strategies for telling science stories, as well as giving interviews. There was often a worksheet to do at the end of the lecture.

As mentioned previously, I didn’t find the tutorials particularly useful. The Tuesday lectures were worse because they were longer, and less engaging as it was mostly lecture-based rather than activity-based. Some of the Tuesday lectures were worthwhile to attend, such as Kathryn Gretsinger’s guest lecture, and some of the statistics-related lectures. Interestingly, according to one of the instructors, most people don’t retain anything from STAT 200 a year later…

As the in-class activities (worksheets) are only worth 3% of the final grade, it seemed that there were quite a number of people who did not attend the lectures.


There were way too many assignments in this course. Some of them were worthwhile, but most of them were not, and all of them seemed to be poorly designed.

1. Weekly quizzes

There were weekly quizzes on Connect for the writing skills modules (above). Some were much longer than they should be: if this material is going to be covered in class anyway, it doesn’t make sense to make the pre-class quiz really long. The purpose of the pre-class quiz should be to introduce the student to the topic, not to teach the topic in its entirety. There is also a post-class quiz, which is fairly useless: not only is the material extensively covered in the pre-class quiz, it’s also covered in detail during that week’s tutorial. So a post-class quiz really doesn’t do anything!

2. Blog posts

We had to write blog posts online, three posts in total. See Communicating Science 13w210 for an example. We could choose any topic for these blog posts in the realm of science communication or science-related news, but we had to meet certain criteria, like having relevant tags, linking to other articles and incorporating external pictures and video, etc. These exercises may have been useful for those new to blogging, and we did learn how to summarize science using a journalistic style (i.e. inverted pyramid).

3. Scientific Investigation (SI) project

I thought this project may be worthwhile for Science students in general, as many of us do not get a chance to work with and analyze real data, and then write a formal scientific report complete with abstract, introduction, methods, discussion, and conclusion. Even in my Microbiology lab courses (MICB 322, MICB 323), the lab reports we wrote were really unlike scientific papers: we generally didn’t cite any articles for the background research, for the methods we said “refer to the lab manual” and for the discussion we just answered a set of questions pre-determined by the prof.

In this project, we worked in assigned teams of three to four students over the course of approximately one month. First, we decided on a topic/question to investigate, then we collected data, analyzed it, and finally, we wrote a report. We could either use existing data for the project, or collect new data. Some theoretical examples of study questions:

-Are people of a specific gender more likely to ask/answer questions in class?
-How busy is the Starbucks in the Student Union Building right before compared to right after class?
-Is certain weather associated with amounts or types traffic across the Burrard Street bridge?

I recommend using existing data: the last example given was a real example and was done using data from weather reports as well as City of Vancouver data about traffic on the bridge. Using existing data saves a lot of time. There’s a lot of data on sports that can be used, for example. Surveys are also a possibility, but they too, take more time than using existing data, and the data collected tends to be limited (ie. small sample size).

Here is the timeline of the project:

Group assignment: Sept 17th
Proposal project due: Sept 19th
Project outline (intro, methods, discussion, conclusion) due: Oct 3rd
Group presentation on project: Oct 8th, 10th
Project paper draft due: Oct 14th

As you can tell, there’s not a lot of time at all. We were only given a couple days between our groups being assigned and having to come up with a complete project proposal, which I find ridiculous. Then, there are about two weeks between the proposal being due and the project outline (ie. results and everything else) being due, which is also ridiculous when considering the fact that the proposal could very well be rejected if deemed unfeasible. This is all on top of the blog posts, fusion journal entries (see below), and weekly quizzes.

In summary for the SI project: it was too rushed. We were not given enough time both to work on the project, and to sit down with the instructor and discuss how to carry out the project and how to do proper data analysis. In theory however, I do like the idea of this project; some things just need to be adjusted.

4. Science Outreach (SO) project

Like the SI project, I thought this project was also pretty cool. In the SO project, we got to interview a researcher and produce both a short video and audio podcast (3-4 minutes each) based on the interview. I won’t go into the timeline, but it was similar to that of the SI project above in that it was too rushed. We had to give a group presentation in-class for the SO project, just like for the SI project. I bet production also took people many hours because generally speaking, none of us are particularly skilled with video editing. I went ahead and used Windows Movie Maker because I thought it’d be simple to use yet good enough for our purposes, but it was pretty awful, and the production took up a lot of my time. I kind of understand why we would be making a news video despite how long it took because that’s kind of cool and it’s a good way to show the interview, but the audio podcast on top of that was really unnecessary, as was the blog post that was supposed to accompany the video and audio podcast.

5. Fusion project

In lieu of a final exam, we were to do something called a Fusion project. This project consists of about ten journal entries to be submitted through Connect throughout the term, as well as a 1,500 – 2,000 word paper due sometime during the first week of exam season. I find it fortunate that we don’t have to do exams, but this project was probably the least worthwhile out of the three projects. The journal entries were reflections on things we had learned in the course, and the paper was basically an expansion on a few of those things, as well as talking about the differences between communicating in journalistic vs. formal scientific style. I felt the paper was a way for the instructors to say “Wow, look at all the things our students learned from SCIE 300! It must be a super useful class!” when in fact we’re only saying those things because we were instructed to answer the question “What did you learn in this class?” as one of the paper’s main topics. Not that we’re necessarily lying about what we learned; however, if we’re asked in an assignment to write about what we learned, we’re obviously going to write about what we learned, regardless or whether we did learn those things, and regardless of whether we found them useful/worthwhile.


There was no required textbook for this course.

Overall thoughts:

Too much work for this class in my opinion. Some projects seem interesting but not enough time to do a thorough job. If you’re in the Bachelor of Computer Science (BCS) program, consider ENGL 301 instead. However, I can’t say whether it’s better since I can’t take it, but I think there’s a very good chance that it’s more worthwhile in the sense that there’s less work, it’s more useful, or a combination of both. SCIE 300 may still cater to you if you’re interested in communicating science in a journalistic style, but it’s still a lot of work regardless.





CPSC 110: Systematic Program Design

Summary: I enjoyed this course and felt that I learned a great deal about basic systematic program design (i.e. following a recipe for writing programs). Despite it being a lot of work, it was fun and I will probably TA it at some point.

Note: I wish I had taken this course during my first degree, because I would have been able to take CPSC 210 in September upon entering the BCS program, and 221/213 in the subsequent term.

Grading scheme:

Updated information about the grading scheme is available on the CPSC 110 website.

TA-graded Problem Sets: 10%
Peer-graded Problem Sets: 10%
Labs: 10%
Clickers: 5%
Piazza Participation: 5%
Midterm 1: 15%
Midterm 2: 20%
Final: 25%


The following probably won’t make any sense to someone without prior exposure to programming (ie. a lot of people who take 110). This is here for those who do have exposure and want to know what is covered in 110.

1a. Beginning Student Language
1b. How to Design Functions
2. How to Design Data
3a. How to Design Worlds (ie. making games)
4a. Self Reference (ie. lists)
4b. Reference
5a. Naturals
5b. Helpers
6a. Binary Search Trees
6b. Mutual Reference
7a. Two One-Of
8. Abstraction
9a. Generative Recursion (e.g. making fractals)
9b. Search (e.g. solving Sudoku)
10. Accumulators
11. Graphs

In-class activities:

Before class, we were expected to have watched pre-class videos on Coursera (they’re switching to edX soon).

The format of the class was something like an inverted classroom, in that we spent a lot of class time working on problems rather than listening to the instructor lecture. CPSC 110 is probably the most engaging course I’ve been in of its size, and I think the format is really effective compared to the traditional lecture style. Most people worked on the problems in class on their laptops, but I opted to use pen and paper so that I could practice solving problems on paper, since exams were on paper too. It’s much easier to solve problems on the computer, and I didn’t want to get used to that.

There were some clicker questions as well, often at the beginning of lecture, to test whether we had watched the pre-lecture videos.

A lot of material is covered in class: I missed a class or two and regretted it greatly because of how far behind I fell. Don’t skip (this) class. Or at least go to another section if you miss yours.


1. Piazza Participation

Piazza is an online forum for the course where students can post questions that can be answered by both students and instructors. Everyone in the class can access the forums, and instructors also post relevant lecture files, announcements, and instructions for the homework.

Everyone starts off with about 3% out of the 5%. Those who ask good questions about the course material, or answer other students’ questions, slowly move up towards 5%. Those who ask bad questions, or don’t participate, move towards 0%. Bad questions include questions that are answered in the course videos or questions that have already been asked on Piazza (i.e. search before you post), or questions that violate the collaboration policy. It is astounding how many people still ask bad questions, even near the end of the course. There is no set amount of posts needed to get 5%. The way I see it, you just need to participate “once in a while” throughout the term.

I consider it rude when people edit the Student Answer when someone else is already editing it. It’s like as if you were to interrupt someone in class answering a question posed by the professor with your own answer before they’re done speaking…

You can receive e-mail notifications when people post in Piazza, which is helpful for when someone replies to a thread that you’ve asked a question or posted an answer in, or if your instructor makes an announcement. However, since there are approximately 700 students, it might be annoying to receive an e-mail for every new student post. You can get around this by using the following filter if you use Gmail:

from:(CPSC 110 on Piazza <>) to:( CPSC 110 -{[Instr Note]} -{“posted a new followup.”} -{“posted a response to the followup”}


1. Go to Gmail
2. Copy and paste the above text into the search box in Gmail, at the top.
3. Replace with the e-mail address Piazza is sending e-mails to. This may either be your Gmail address OR your address. You can check by either looking at where the Piazza e-mails are sent, or check your e-mail settings on Piazza.
4. Hit search. You should get a list of Piazza e-mails (assuming the course has started and people are posting already). The ones shown should be the ones you don’t want to see. Any instructor notes or follow-ups to your post should not appear.
5. Click the small drop down (small, black,  downward-pointing triangle/arrow) button on the right of the search box. A window should drop down. Click ‘Create filter with this search’.
6. Make sure the ‘Delete it’ box is ticked and no other boxes are ticked. Then click ‘Create filter’.

This should allow you to receive only CPSC 110 Piazza e-mails about new threads by an instructor, or new posts in threads you’ve posted in or are following. Everything else goes into the Trash.

Disclaimer: I take no responsibility if this Gmail filter fails in any way; it’s possible that some details changed and you might need to tweak the filter to get it to work properly. Also, if it works but you stop receiving e-mails later in the course, you may need to contact Piazza support because your e-mail address may have been automatically added to the ‘do not send’ list due to a bounced e-mail (this is not related to the filter but you might think it is).

2. Problem Sets

Some of the problem sets can be pretty long or difficult. I probably spent four hours per problem set on average (with a huge range though, from maybe one hour to eight hours). I recommend starting them as far in advance as possible. You can work with a partner on the TA-graded problem sets. If you do, make sure that both of you put your CS ID (the four character one) at the top of the assignment so the TAs know who to give the marks to.

It is not necessary to do the TA-graded problem sets with others, and I myself was a lone wolf for the entirety of the course.

The problem sets are due at irregular times/dates, so make sure you keep track of them. They can be due any day of the week, at any time of day. I kept track using the app Wunderlist (you could also use something else like RememberTheMilk or Google Calendar).

After submitting your problem set, make sure to go back and retrieve it from the server and make sure everything is there. You would not believe how often people accidentally submit blank files (I’m not even sure how).

3. Labs

Unfortunately, we were not allowed to do labs at home. I don’t really see the point of this restriction. For the most part, labs are not too difficult and the TAs are very helpful, but for some labs (like the Snake labs), you can expect to take up the entire lab period (three hours).


There is no required textbook for this class.

How to do well on Problem Sets & Exams:

1. Follow the recipe.

For exams, problem sets, etc., we were usually given part marks for following the recipe even if the function wasn’t properly implemented. Follow the goddamn recipe. Also, you’ll get to the correct answer much more easily by following the recipe than doing anything else.

2. Read the instructions.

(For problem sets/exams.) Seems like something that’s unnecessary to say, but many people do end up answering the wrong question or solving a problem they weren’t asked to solve. And then they don’t get marks for it.

3. Go to class, get help, and don’t slack.

New material is covered every class, so you seriously don’t want to miss it. And if you slack off, you’ll have to play catch-up, which is not fun at all. And not getting help for things you don’t understand has the same consequences as slacking off. There are TA office hours practically everyday, sometimes even on weekends, so you can easily get help right away. Professors hold office hours every week too, and we were allowed to go to any of them.

Tips for studying:

See How to Study on the CPSC 110 page.

1. How I studied for exams

Some methods don’t work for everyone. I admit I did slack off from time to time, especially after the midterms, but I worked hard to make up for it, and ended up with 100% in the course. This course was a lot of work, so slacking will probably harm the average student taking 110…

In order to study for the exams, I went back to every relevant module on Coursera and made sure I was able to solve every problem. I usually started doing this a few days to a week before the exam, but the earlier the better. This didn’t necessarily mean doing all the problems, and in fact I skipped many problems because I was lazy. However, I did enough problems such that I was comfortable with that module’s material. For some modules, it meant doing all the problems, but for most modules, it meant only doing a few of the problems, including one or two of the harder ones. If I couldn’t do the practice problems, I would refer back to the videos for help.

While going through the modules tested on the particular midterm/final exam, I would also monitor Piazza for questions and try to answer as many questions as possible. This essentially allowed me to test my knowledge: if there were questions I couldn’t answer, it meant I hadn’t studied that module sufficiently, and so I would go back to review the module (the videos and problems) so that I could answer that student’s question. Other than practicing/doing, one of the best ways to learn is to teach someone else. I ended up with several hundred posts on Piazza by the end of the term.

After reviewing modules, I printed out practice exams to do. I recommend doing these under exam conditions: using a timer, and without any materials other than the recipe sheet they give you for the midterms.

After each practice exam, I would look at the questions I did poorly on, and go back to the online videos/problems and review that module. Then I would go on to the next practice exam, and repeat.

I didn’t ever go back to the problem sets when reviewing for exams, because I felt the module practice problems were sufficient. However, it’s not a bad idea if you want extra practice.

2. (Later) modules that people found particularly difficult…

-Abstraction (especially writing the signature for an abstract fold function produced directly from a template)
-Generative Recursion (make sure to provide a termination argument…)
-Search (make sure you know the blended template and how to use it)

Overall thoughts:

This course is a lot of work, and may seem daunting at times, but anybody can do well in this course if they put in the effort and follow the instructions properly (like following the recipe). I thought I learned a great deal from this course and hopefully will be able to apply it in future courses/work. Not sure why we used DrRacket, but at this point it’s too early for me to say whether it’s a ‘good’ language to learn or not…





CPSC 121: Models of Computation

Summary: I found this course relatively straightforward, and even a bit dull. However, that may be due to my previous coursework (PHIL 220A, MATH 220).

Grading scheme:

Updated information about the grading scheme is available on the CPSC 121 website (navigate to Grading under Course Info).

Assignments (5): 14%
Labs (9): 14%
Pre-class quizzes (12): 5%
Clicker: 3%
Midterm 1: 12%
Midterm 2: 12%
Final: 40%


-Propositional Logic
-Representing Numbers (binary, decimal, etc.)
-Propositional Logic Proofs
-Predicate Logic
-Proof Techniques
-Sequential Circuits
-Induction (weak and strong)

When I took the course, we skipped Sets and Functions because one of the last classes of the term was canceled.


Every week or so, there were pre-class reading quizzes based off assigned textbook readings. The textbook we used was Discrete Mathematics with Applications, 4th ed by Susanna Epp. There are equivalent readings for other textbooks and older versions on the course website (navigate to References under Miscellaneous). I found that my background allowed me to skip most of the readings.

NOTE: I am selling the textbook:
Discrete Mathematics with Applications 4/E by Epp
Excellent condition
$120 (price negotiable)

We were given unlimited tries for the quizzes, and they took our best attempt. After my first attempt for each quiz, I implemented a binary search algorithm (LOL) in my following attempts in order to find which questions I did wrong.

In-class activities:

Traditional lecture style. Much of the class is spent going over material that was already covered in the readings, even the most basic parts, which felt like a waste of time to me. If I didn’t have class in the same room right before 121, I may have been absent quite a bit more often…

The most important lectures to attend, if any, are the ones on sequential circuits, induction, and DFAs. I’m not sure about sets and functions since those units were essentially omitted for us. However, I found anything to do with circuits particularly difficult (although that may be due to my effort put forth in labs), and there’s bound to be at least one circuit question on the second midterm and one on the final.


There are about five assignments spread throughout the term, and they are meant to be done with a partner. For most of the assignments, I ended up splitting the work between my partner and I (e.g. I would do questions 1a, 2a, 3, my partner would do 1b, 2b, 4). Ideally, we would exchange answers and make corrections on each others’ work. We only met up to sign the cover sheet for the assignment and hand it in.

For the most part, the assignments are straightforward; however, they are kind of long.


Information about labs can be found on the CPSC 121 website.

The first few labs involve the Magic Box, which is a circuit board. The rest of the labs mainly involve Logisim, a software program for simulating digital logic circuits. I regret not paying attention as much as I should have in lab, because the labs do build on previous labs, and the exams can have questions about circuits. However, for the most part the lab material is not closely related to the lecture material. As such, I didn’t find them very enjoyable.


In tutorial, we were given practice questions to do, and the TA would let us do them for a while, and then explain the answers. I think this is the type of stuff we should be doing in class…

Anyway, most people don’t go to tutorials, presumably because they’re not for marks. You could probably go to whichever tutorial section you wanted to.

Tips for studying:

Do the practice exams. They are available on the course website under Practice Material.

However, you can also check out previous offerings of the course and see if they have extra practice questions. For example, if I’m in the 2014W session, I can go back and look at the 2013W1, 2013W2, 2013S, 2012W1, and 2012W2 versions of the course website to see if there are more practice exams. Most likely, they’ll all be more or less the same, but sometimes you might find extra practice exams.

If you need extra practice on top of this, you can go back to the assignment problems and tutorial problems. Additionally, for some sections like induction, it is pretty easy to find practice problems online.

The following two logical statement are not equivalent:
1) a ∨ b → c
2) a ∨ (b → c)

Check out the order of precedence for logical connectives before the first midterm. From what I can remember, we didn’t cover this at all in class, but it’s important to know.

Overall thoughts: 

I felt that the course gave me a good review of symbolic logic and proofs, but I wish the classes were more engaging rather than just being traditional lectures. We didn’t work on any real problems by ourselves in class. The labs are not closely related to the lecture material, which led to my not enjoying the labs very much. I did learn some new material however: DFAs, regular expressions, strong induction, number representation, and circuits, most of which will definitely be required knowledge in future CS courses.





MATH 307: Linear Algebra Applications

Summary: I heard this course might be useful, which is why I took it. I may also use it for my Bridging Module for the BCS.

Grading scheme:

H = score on written homework
W = score on WebWork
M = score on midterm
E = score on final exam

Final grade = 0.1 * H + 0.1 * W + 0.35 * max(M, E) + (0.55 – 0.1 * W) * E


I.1. Solving Linear Equations (review), and norms
I.2. Single Value Decomposition (SVD)
I.3. Interpolation (Lagrange interpolation, cubic splines)
I.4. Finite Difference Approximations
II.1. Subspaces, basis, and dimension
II.2. Four fundamental subspaces for a matrix
II.3. Graphs and Networks
III.1. Projections
III.2. Complex vector spaces and Inner Products
III.3. Orthonormal bases, Orthogonal Matrices and Unitary Matrices


There was no required textbook in this  course. However, there were online notes posted on Connect.

In-class activities:

Traditional lectures, but sometimes we were given time to do practice problems.


There was homework due (almost) every Friday. There were only two Webworks that covered review material at the beginning of the course. There was an assignment later in the course that was worth “two Webworks”.

Overall thoughts: 

I found this course challenging, given that I last saw matrices over four years ago. However, I did find the material interesting and kind of fun sometimes. The workload in this class is okay for a Math class, and the material isn’t that hard if you put in the time and effort to understand the concepts. The online notes in particular are written in a way that is pretty simple to understand, making it easy to learn/review the course material.







Leave a comment. Bloggers like them ;)

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: