Updated this post with 3B course thoughts, even though that was awhile ago!

This is a reflective post on my past 3.5 years in SoftEng, the pains, the stresses, and the rejoices.

Reference on my Class of 2015 course sequence is here. If you're a prospective student, you may be taking a different sequence of courses.

Note - I published this awhile ago but it somehow got saved as a draft.. So it's back up now.


I worked pretty hard during this school term. Straight out of high school, had a lot of keener in me. No expectations because I had no idea what university would be like, but still wanted to do well.

I entered SoftEng feeling very lowly compared to a handful of my classmates. There are geniuses in my class, seriously. But what can you expect? 145ish 85%+ average students in 1 classroom.

Overall recommendation: it's 1A. Get used to university, get used to the huge student:prof ratio, utilize TA/prof office hours; but don't over study and lose out on your first-year social experience.

Math 117, CS 137: Calculus, and CS. Both fairly easily. Use of online resources is recommended for these courses. Not doing well in 117 will lead to problems in future Calc courses. Not doing well in CS will lead to problems in future CS courses. Note that the faculty assumes you have some sort of CS experience coming into the program. If you don't, then you'll have a larger learning curve to deal with. If you don't want to deal with it, go into CS and take CS 115 ( a start from scratch course).

ECE 105: Will be your most difficult course. Pay attention! If you have Firas Mansour, you will be in luck. Great prof, teaches well. But midterm and final are usually killer. He likes to add extensions to past midterm and final problems, it's not just plug and chug, unfortunately. Mandatory quizzes really test your knowledge and are not too difficult, but are worth a very small fraction of your final mark.

ECE 140: Fairly standard course, it gets difficult towards the end when complex numbers are involved. But it'll be the highest degree you'll have to deal with complex numbers (at least for awhile), esp if you're in softeng. This is a newer course that came out of 'electrodeath' (More about this later).

Math 115: Standard Linear Algebra course. Midterm and final look similar to past midterms and finals. It's pretty abstract, but just pay attention in class. Assignments are usually difficult, but they aren't worth too much of your final mark.

SE 101: Should be a bird course. It's a 0.25 credit, meaning you don't attend much class or labs. You do a group project, pretty simple - programming a robot to maneuver around a maze. Although it's in a group of 6. Awkward division of tasks ftw. Apparently they have updated this course to entail a different sort of project, so don't take my work.


I started getting lazy in this term. More 830am classes, but slightly more free time.

Math 119, 135: Not much to say about 119, same comments as 117, really. Hopefully you get Eddie Dupont (great prof). Math 135 is taken by CS and Math students in Fall term. They originally had a really good textbook for the course, but they recently changed it (unfortunately). A few proofs here and there. They generally go easier on students who take this course because it often composes of CS/Math students who failed it in Fall term.

CS 138: Depends on prof teaching style. This course is actually a nice intro for CS 240 and CS 247. Unfortunately, bad TAs and bad profs lead to bad results on midterms and finals. It's not common to see past midterms posted for this course, although the content and assignments don't change very much. It can be an interesting course if taught well, and is pretty useful for your future co-op placements. Intro to BSTs, some algorithms, data structures - queues, heaps, etc. And object oriented. All in C++.

Ece 124: This course really depends on the prof. It introduces some useful concepts for ECE 222 and future logic courses, but can be very dry. Powerpoint type of lectures is the norm (study off of them). Textbook is not really needed, but still useful if you want to do reading on your own time. The mandatory labs are truly horrible. Coding in an outdated language (VHDL), doing things barely related to the course, disorganized lab instructors, etc. The optional assignments are pretty useful, make sure you do them even though they're not for marks, as they are great for applying things you learned in class.

Ece 106: Extension to 105, but it's all ElectroMag. This used to be part of Electrodeath. It is a pretty intense course, no more high school review as in 105 - mainly new concepts with added calculus. Mandatory quizzes as usual. MT + Final are fairly similar to past ones... although extensions to past midterms still happened to us. The labs are pretty straightforward - easy marks.

Note: Electrodeath was a combination of 106 and 140, for students in 2A to take. It was the course that weeded out a lot of students as it had so much content packed into 1. They solved this by splitting the course (originally Ece 126) into 2 courses.


The term after your first co-op. You may need some getting used to after a term of no school. Also your first term with an elective, and 6 courses at once. I have a post on Electives to take, but it's really up to you on whether you want a bird course or an actual course that interests you.

CS 241: Will be different from your previous CS courses. The course essentially leads up to you creating a basic compiler. The course is nicknamed as 'baby compilers'. There are usually good profs for this course, and note that CS students take it. Midterm and final were both pretty easy, assignments can be done in Java, C++, or Scheme. Great course overall, learned a lot of interesting things out of it. Nice relation to ECE 222. This is an important prereq for future CS courses.

Ece 222: Depends on the prof. My prof (H. Patel) taught the course very well, learned a lot from him. A very abstract course, introduces design concepts for computer hardware. Midterm and final content usually come out of the optional assignments and lecture notes. Lots of memorization. The labs are a little better than Ece 124 because they're actually related to the course. We used Coldfire, but I believe future classes will use something else. But expect to spend a lot of time completing them (perhaps 20 hours per lab). The labs are also cumulative, so if you didn't do Lab 2 correctly, you better fix it before you start Lab 4. Debugging is a pain.

Stat 206: Stats for Software Engineers. If taught by Riley, watch out. In general, not a bad course. It's like any typical stats course, although this one is a mix of Stat 230 + 231 (what Math/CS students need to take). This is only taken by SE students, so the grading and distribution depends on the prof.

Chem 102: The silly requirement for us to get an Engineering degree. Mandatory tutorials + assignment questions out of the textbook, although there is a soln manual that you can just copy from. MT + Final are both multiple choice, for us, the midterm was a little difficult. The final was very fair, however. The topics are straight out of high school, with a little more focus on Vapour Pressure (and some other things I cannot remember). Should be a bird course, though no one ever cares for the course because they are too busy with other, more important courses).

SE212/CS245: Logic and Computation. The course changes every term, as there are many topics that can be taught in relation to Logic. During our term, the profs weren't that great, and the TAs were doing all the work by reteaching all the concepts, holding many extra review sessions, etc. The assignments, final, and midterm were all pretty brutal, the textbook was pretty abstract and a terrible reference IMO. All tests were open-book, but even then, it was tough. The average was in the 50s (after the bellcurve lol), and so about half our class failed that course (it was a major factor for those who dropped out). So watch out!


Summer term. Another 6 course term. No ECE labs, but still a pretty tough term.

CS 247: Another SE-only course. It used to be just CS 246 (what CS students take), but the fact that SE students already had CS 138, it was pointless to add in redundant content. This course is all about Object Oriented and Design patterns. There is a project done in pairs (looking back to the past and comparing to now, it's always been a C++ card game with a GUI) along with a few assignments. Yes, C++ GUI. Not fun. The course is pretty interesting actually. The tests are based quite a bit on course lectures (pay attention and take your own notes on the side!) and past tests (practice them!). You also learn MVC, a very important design pattern that you will use (and maybe already have used) at work.

CS 240: Woot, 2 CS courses in 1 term. This is probably my favourite course so far in undergrad. Such an interesting course - purely algorithms and data structures. Although, it is very challenging and demanding. Assignments can screw you over pretty hard, and overall, there are just SO many topics covered (hard to know them all w/o spending a lot of time to study - time that you probably don't have). You do end up learning a lot of useful concepts from this course for your work terms, though.

Math 213: Advanced calc. So after a year of no calc, they expect you to remember everything, oh and just when you have no more ECE courses, they put a bunch of applications from them to this course. Lulz. Well it's actually not too bad, because if it's David Wang, he'll tell you what's on the tests if you pay attention in class, and do the past tests he posts. He's a pretty funny guy, but makes a lot of mistakes in class. Oh, and he goes through the material REALLY fast, so pay attention. It's a very bad idea to miss this class. Although, as usual, calculus is universal. Khan Academy is useful. Textbook also useful.

MSCI 261: Another random engineering requirement. This course is fairly easy, and all of the content can potentially be learned last minute before tests (I don't recommend it though). Each prof has their own grading system (independent of other sections). The course is prett dry, and it's another powerpoint type of course.

Math 239: Graph theory and combinatorics. Both tough topics. Graph theory tends to be very interesting, though. Lots of proofs, about 10 times more difficult than Math 135. Watch out. The assignments are weekly, and pretty tough. I didn't do too hot on this course but I'll have to admit I didn't try very hard either. Pulled an all nighter for the final, was worth it.


This is known as the toughest term as a SoftEng student. You will be faced with tough assignments week after week (it just never ends), although surprisingly my average went up 4 percent from 2B. But here's the thing, I NEVER had to pull an all-nighter for this term, despite all the upper years telling me that it would happen. My tip is to make sure you have found a group of students in your class to work together on assignments and labs. It is tough doing assignments on your own during this school term.

SE 350: Every CS or SE grad needs to have their Operating Systems intake. A very useful and interesting course if taught by the right prof (be happy if you have Fischmeister). A very tedious lab project done in groups of 4, that should really be done in groups of 2 or 3 because it can be very difficult to split the work. Apparently the CS equivalent of this course has a much easier lab project since they don't have to deal with low level crap as much as we do. This course is a pre-req for a ton of upper year courses, so make sure you do decent.

CS 349: By far my favourite undergrad course. Be happy if you have Edward Lank, the most lenient prof ever. You learn fun facts about User Interfaces in class and work on cool assignments. Now, these assignments can be tedious, but they are truly satisfying on completion. And the awesome thing is that you tend to get high marks on the assignments.

SE 380: Oh, the horror. This is a continuation to Math 213. It brings a ton of new concepts, along with Matlab. The labs are alright (they are the typical "use this instrument to empirically prove that this law or relation is correct", as in the ECE 105/106 courses.) The main problem with this course is that there is just way to much content that you need to keep up with. Study off of the weekly assignments and past MTs/Finals and you should be fine. Ride that bell curve if anything.

CS 341: A continuation of CS 240 and Math 239. The first half of this course is SO useful for technical interviews. You learn some common methods to problem solving. The 2nd half of this course is more theoretical and looks deep into NP-Completeness (problems that are hard to solve in a reasonable amount of time). It's not a pleasant topic if you're not into theoretical stuff, but I guess it's pretty cool to know. The Midterm was fairly easy but the Final was tough. The assignments are also pretty tough. Oh, and you will hopefully understand all of the funny references to this upon completion.

Surprisingly a very relaxed term. I didn’t exactly take the most challenging electives, either. A good amount of my courses required little assignment work, leaving me a 3 week break at one point without assignments to do.
SE 390: The first of 3 design project courses. This is a course to get you thinking about what you want to do for FYDP (fourth year design project), and find a “customer", which is a person who helps you make decisions for your project, whether they are there for guidance or you are literally making the product for them. A very birdy course. Almost everyone got a mark in the range of 90-100. My first 100 for undergrad.
SE 463: Requirements. I am surprised I haven’t heard about this through upper years. It is by far the most useless required course I have ever taken. We had the pleasure of being taught by Dan Berry, who is a great and enthusiastic guy. Unfortunately, it is very difficult to understand him and that makes the course even less of a desire to care about. There is no midterm, but multiple easy assignments, and one final group report at the end. It is your typical bullshit report course, with a ridiculous final exam at the end (which clearly gets bell curved all the time).
CS 343: Concurrency. Probably the most useful course I took in 3B. It’s extremely applicable to real life jobs. It follows up on Operating Systems, introducing more concurrent concepts. The assignments will directly help you learn the concepts, and they can be tough. It’s great if taken with Peter Buhr. This is surprisingly not a required course for CS degrees, and I feel like it should be.
CS 348: DB. A fairly dry and boring course overall. You do end up learning some SQL if you’ve never dealt with it during your co-op terms. If taken with Weddell, you will get a bunch of ridiculous theoretical questions on both exams. Final marks tend to be high for this course.
CS 458: Security. My first technical elective. Very informational. The first assignment is tough, but the rest are fairly reasonable in comparison. Interesting concepts, but I wouldn’t count it as a challenging course at all.
SCI 238: Astro. Took it online and because there is no midterm, I crammed most of the material at the very end. It’s fairly birdy throughout, though. There are assignments every 2 weeks, each with 3-5 problem solving questions. The material itself is very interesting and the lectures are actually great. There’s just a lot of material to get through if you haven’t been keeping up week to week.

Coming Soon