Courses I took this summer:
CPSC 221: Basic Algorithms and Data Structures
One of the most important courses for CS interviews because data structures. You’ll also have to learn C++ on your own.
I have a feeling that the summer offering of the course is a lot easier — material might be left out, and there weren’t many assignments.
– Linked lists, stacks, queues
– Big-O, Big-Omega, Big-Theta, time and space complexity, algorithm analysis
– Induction and recursion, loop invariants
– Trees, tree traversal, binary search trees (BST), tree rotation, B-trees
– Priority queues, heaps
– Counting (probability)
In other words, check out the course website.
Nothing new here. Aside from actual lecturing, there were some worksheets given to us near the end of class sometimes that we would do in class. Unfortunately, since we worked on it at the end of class, we did not go over the questions as a class.
Lab was done alone or in partners, and was due the following lab. Some people just did the lab at home, went to lab, got it marked as soon as possible, then left. I found the first few labs were somewhat difficult, perhaps because I wasn’t used to C++.
For labs and assignments, I either used Visual Studio 2013 or I connected to the Linux ugrad.cs.ubc.ca servers. I should note that I run Windows. I recommend the latter for assignments, because that’s how the markers will test your code.
There were only four assignments — two theory assignments and two programming assignments. The theory assignments were straightforward. The programming assignments could be done as a pair, and were somewhat challenging.
Readings were assigned from two textbooks:
Objects, Abstraction, Data Structures and Design Using C++, Elliott B. Koffman and Paul A.T. Wolfgang, Wiley and Sons, 2006.
Discrete Mathematics with Applications (Fourth Edition), Susanna S. Epp, Brooks/Cole, 2011.
Some people found these textbooks online. According to our course website, we were expected to read Chapters P and 1 of the Koffman book before our first lab, but I doubt anyone did, because that encompassed 100 pages. After reading about 10 pages, I gave up and didn’t read any textbooks for the remainder of the course.
You have to learn C++ on your own, and there are a plethora of online guides to help you do that, just search online. Some resources I’ve found:
http://www.programmr.com/practice/ – scroll down and you’ll see a link to an interactive C++ course. You’ll have to create an account.
http://www.horstmann.com/ccj2/ccjapp3.html – ‘Moving from Java to C++’
http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/ – ‘C++ for Java Programmers’
http://www.learncpp.com/ – what a lot of people use
If you’re reading my post to get a head’s start, either read Chapters P and 1 of the Koffman book before your first lab, or start going through one of the above resources.
Don’t understand pointers? Binky Pointer Fun Video may help. Or just search for ‘pointer tutorial c++’.
Assignments — as usual, start early, for reasons that should be obvious by now. And please run your code regularly so you can debug it in small steps. I still see people write functions after functions and then run their program at the end, resulting in hundreds of error messages, many of which are dependent on another, and is essentially a huge mess and a pain to fix.
This class is notorious for being difficult, but it was quite easy in the summer with Kurt as our instructor. I have a feeling some details were taken out, and that the exams would have been more difficult if taken with a different instructor or during the Winter Session. Our class average was 84%…
CPSC 304: Introduction to Relational Databases
Summary: Relational databases + SQL. I heard this course was useful for co-op so I took it instead of the usual CPSC 310 that most BCS students take in the summer.
– Relational Model (Entity/Relationship diagrams)
– Functional Dependencies and Normal Forms
– Formal Relational Languages (Relational Algebra)
– Structured Query Language (SQL)
– Data Warehousing & OLAP
– Datalog & Deductive Databases
– Semi-structured data and XML
In other words, check out the course website.
We had Hassan Khosravi as our instructor, who gave us a lot of in-class problems and clicker questions to work on.
In tutorial, we were given exercises to do either alone or in a pair. They were to be handed in for completion marks either at the end of the one-hour tutorial or by the end of the day if it was a longer exercise. The exercises were based on material we had covered in lecture.
In teams of four, we were required to choose an application that could use a database, and then build the database application, complete with GUI. We didn’t have to form a team with people in the same tutorial, but it was recommended. Unfortunately, all of my team members were in the other tutorial, which made communication a bit more difficult on my end.
There were several milestones or stages in the project at which we were to hand something in. For example, the first milestone was the project proposal, which was simply a description of what application we chose (e.g. bank, school, some kind of business), and was due a few weeks into the course.
As for working on the actual project, our team divided the work into GUI, populating the database (writing the SQL script), and doing backend to connect the database to the application and GUI. The SQL script is by far the easiest and would only take a couple of hours.
We probably started writing actual code for the project a little over a week before the project was due, which was stressful but ended up working out in the end. People could either do the project in Java (JDBC), PHP, or something else. We chose Java because we thought it’d be the easiest since we were most familiar with it.
The required textbook was Ramakrishnan and Gehrke. Database Management Systems, 3rd Edition, McGraw-Hill, 2003.
I did not find it necessary to read.
For the midterms, we had an individual exam and a group exam. The group exam consisted of the same questions from the individual one but we worked in groups of four and were given less time. The group exam immediately followed the individual exam.
For the exams, it was sufficient to simply redo the in-class problems/clicker questions we were given. The exam questions were analogous to these problems. In terms of lecture material, I found the material on Data warehousing and Datalog & deductive databases the most difficult. Unfortunately, I had co-op interviews when those sections were covered, and I found the lecture notes difficult to understand. The notes for the other lectures however, were fairly straightforward to understand, even for those that I missed for co-op interviews.
For the group project, I recommend choosing people in your tutorial, or at least people with whom you can easily meet schedule-wise. The Java/JDBC backend stuff (connecting to Oracle, connecting the database to the application) seemed pretty overwhelming to me at first (I had only done CPSC 210 previously), so I kept putting it off which was obviously a bad idea. Once I started following through the tutorials on the course webpage, it really wasn’t too bad.
Many previous students use Github to store their project, so if you were to search for CPSC 304 or CS 304 you’d probably find many projects if you’re looking for sample code.
We really only needed a few full days to start and finish the project, but as usual, my recommendation is to start early…
CPSC 213: Introduction to Computer Systems
I don’t remember what I learned because I’m writing this review a year later… looking back at my notes, it seems like we mostly learned things about translating C to assembly (machine instructions) and vice versa in order to get a better sense of how the computer executes a program. Also, we learned about multithreading and virtual memory.
|In class exercises||5%|
Sometimes we would do worksheets or Socrative (sort of like iClicker) questions. Otherwise it was just regular lectures.
There was a PDF called ‘Lecture Notes Companion’ written by Mike Feeley that was given to us.
Readings were assigned from both the companion as well as the following textbook:
Computer Systems: A Programmer’s Perspective. Randal E. Bryant and David R. O’Hallaron, Second Edition.
I did not do any readings during the course, but looking back maybe I should have to get a better understanding of some material that wasn’t explained well in class.
I thought (at the time) the assignments were of moderate difficulty and I had to ask the TAs for help for some of them. But for the most part it wasn’t too bad. Assignments were done in pairs. We could have done them alone but it wasn’t recommended.