I don't think it matters that much, there's really not too much overlap. Graph theory and algorithms (Prim's, Kruskal, Dijkstra, DFS, BFS, etc.) will probably the most that you will need from macm 201. Combinations might be useful when you get into dynamic programming, but as long as you know what they are, it's not a problem. That said, I recommend taking it next term anyway since Valentine is teaching it. It won't be a breeze but the guy is good at teaching.
I don't think it really matters either. I took 307 in my third year and would generally recommend that as the best time to take it (or early 4th I suppose). Some people leave it until there last semester and by then it is usually hard to care about courses too much and if there is one time you don't want to fail a course (and people do fail 307) it is in what you though was your last semester.
Well, I'm signed up for cmpt 307 next term as of now, but I'm trying to make my schedule a little easier. So, I was thinking of dropping either cmpt 307 or another course (maybe cmpt 300). It seems like cmpt 300 is prereq for a lot so cmpt 307 makes more sense to drop. If there isn't too much overlap I think I'll just do 307 later on.
@ryan On the topic of cmpt 300, would you recommend taking it with arvindh shriraman or steven pearce? Shriraman's class seems like a hell of a lot of work, but I'm scared I won't actually learn a single thing from steven pearce (from what I've heard).
I took it with arrvindh. It was hard, but I felt like I really learned a lot.
The two courses are quite different in structure. Arrvindh's class revolves around the assignments. His midterm and final are both only worth 10%, and if I remember correctly are both open book. The assignments on the other hand are worth 15% each. If you aren't a fan of tests and are a good programmer you will likely get a higher mark in this class. On the other hand though the assignments are difficult, and because of the weighting failing to finish them or doing poorly on a few of them will submarine your mark. If you are not already familiar with linux and C you will be by the end of the course. You can view his Spring 2013 version of the course here http://www.cs.sfu.ca/~ashriram/courses/2013/CS300/includes/schedule.html . It looks the same as when I took it in spring 2012 (except we didn't get videos) so it will likely be more or less the same this semester.
I have never taken a course with pearce, so I cannot say anything about him personally. I was under the impression his assignments in 300 used to be mainly written, by which I mean questions out of a textbook. More recently though I have noticed that there have been programming assignments, some similar to in arrvindh's course (a shell) and some different. The homework assignments in pearces class only account for 20% of the total grade. Then the midterm is 30%, final is 50%. So here it is the tests that are important.
In the end I think you will learn the same theory from both courses. I think the experience you would gain from arrvindhs class would be more valuable long term though. Reading and writing about locks, threads, schedulers, and memory is one thing. Actually writing programs that use them is another.
@ryan Thanks for the detailed reply! I would definitely prefer doing more programming over exams. I actually want to get more out of the course and I don't think I'll learn much with steven pearce. One more thing, were the assignments group-based or individual (or our choice)? I have a bad experience with group projects :/ lol
Yeah it is individual or in some cases optional pairs. Since it is mainly assignment based it is kinda one of those courses that are mainly busy around the due dates. So you will work really hard leading up to handing an assignment in, then not do much work in the course for a few weeks. Personally I prefer this to say a math course that has something medium sized due every week. I think you could do 300 and 307 at the same time, but if it ends up looking like you will be too busy I would drop 307.
Comments
Thanks!