This is a long overdue review for a bunch of 3rd year CPSC courses that I took in 2013W1. Better late than never, right? As it's been a lengthy 2 years since I've taken these courses, I'll probably keep these reviews a little bit shorter than some of my other reviews.
In a nutshell:
Language: relational algebra, SQL, Datalog
Toolset: exposure to Oracle, SQL*Plus
Prereqs: CPSC 221
Textbook: Database Management Systems, 3rd ed., by Ramakrishnan and Gehrke
CPSC 304 is UBC's introductory course to relational databases (which I'll henceforth abbreviate to RDBMS); you're not expected to have had anyexposure to RDBMSs prior to taking this course. You'll learn about a fairly wide breadth of material; this includes database design (Entity-Relationship models), the relational model, formal relational query languages (relational algebra), writing actual queries (using SQL and datalog), normalization and normal forms (3NF, BCNF), and a few miscellaneous topics near the end of the course like XML. In 2013W1, CPSC 304 also covered topics that have apparently since been moved to CPSC 404 now (as of 2015), including logging, crash recovery, and concurrency control. I'm not entirely sure I understand the rationale; yes, the topics that were moved are more pertinent to CPSC 404 because they cover database internals, which isn't the focus of 304, but I felt that the pacing of 304 was pretty good already to begin with. Anyways, I digress...
In essence, you'll spend about half, maybe a bit more than half, of the course learning about how stuff in databases are modelled, and how to express queries using relational algebra, SQL, and datalog. The other half was more about the nitty gritty details about how databases are implemented (but again, this part of the course is supposed to be covered in 404 now).
Grades were assigned from 2 midterms (20% each), clickers (2%), the term project (18%), and a final worth 40%. The exams were quite straightforward, nothing much to write about there. The term project is probably the thing that'll eat up the biggest chunk of the time you spend on CPSC 304; as with all other typical CPSC term projects you'll encounter, the key is to pace yourself and not leave everything to the last minute. The project itself is just to create an application that uses a database (the department Oracle database was recommended); you start from scratch and have a lot of leeway in terms of what you want to do, and what technologies you want to use (there just has to be some SQL involved somewhere). You'll work in a group of 4 and will have multiple deadlines during the term, although the first few deadlines are for planning and design purposes.
I definitely enjoyed taking CPSC 304; Dr. Rachel Pottinger is an awesome professor who is energetic and enthusiastic about the material she teaches, and her enthusiasm is quite infectious (which makes it hard to fall asleep in her class; sleeping in class is a chronic problem I seem to have). Her lecture slides are also quite good, and for me they were more than sufficient for the purpose of studying for exams (the textbook was more or less a dead weight for me for both 304 and 404, actually).
In a nutshell:
Toolset: Eclipse, GWT (desired toolkit is up to you for the project)
Prereqs: CPSC 210
Website/resources: CPSC 310, Piazza
CPSC 310, also known as "Introduction to Software Engineering", is the sequel/successor of CPSC 210 and is another course in the software engineering stream. You'll start off by covering software processes and methodologies (this is where you'll start learning about terms like "waterfall", "agile", "extreme programming", "user stories", etc.). The next 2 months, give or take, will be about design patterns, design patterns, and some more design patterns; there won't be any overlap with CPSC 210 here. You'll then wrap up the course with some topics on testing and a brief lecture or two on security.
To be brutally honest here, I thought this was the least useful and least interesting course amongst the CPSC courses I took in 3rd year. Most of the lectures were devoted to covering different design patterns, all of which you can learn about merely by spending half a hour or so reading up on Wikipedia. The remaining topics are things you'll pick up quickly while you're out on a co-op/internship term, or are barely touched upon. The only noteworthy thing left to mention is the term group project, which is where the vast majority of the workload for this course will come from, so basically CPSC 310 boils down to a project course (that is required if you want to graduate as a CPSC major, unlike CPSC 319). And I'm saying all of this as someone who enjoyed CPSC 210 and found it useful.
You'll be given a lot of leeway on the group project (done in groups of 3-5), with a few constraints. The goal is to build some kind of web application by adopting the agile methodology; you'll also have to use an approved source of data to feed into your web application; the only ones you could use without manual instructor approval were Data BC or Data Vancouver. The technical requirements are quite straightforward; quoting directly from the 310 project page:
- Import and clean data - access data on a remote server, parse it, and translate it into a format useful for manipulation.
- Storage - the data should persist once uploaded. I assume that you will load your data once, or every so often on a specified interval. Once it's loaded, it should be persisted as part of your own application.
- Data display - display the imported data in a tabular and a geographic format.
- Social network integration - integrate with at least one social network (e.g. Facebook, Twitter, LinkedIn, etc.).
- Access - Users need to login with a password and have some user-specific account data (profile, preferences, media, etc...)
During the term I took CPSC 310, Google Web Toolkit was highly recommended to us by the instructor to use for the project. You could use other web frameworks, but without any help from the instructor or TAs if you found yourself having trouble with your chosen toolkit.
The marking scheme used in CPSC 310 boils down to: participating in in-lecture group activities (5%), 1 midterm (20%), the term project (35%), and a final (40%). The course was taught by Dr. Eric Wohlstadter in my term, and I found him to be a fairly clear instructor who is decent at conveying information. It's probably worthwhile to note that I don't think I would've enjoyed this class regardless of who was teaching it, however.