Courses I have taken in Waterloo as Computer Engineering major, and some comments.

I just wanted to comment on every single course I’ve taken so far in Computer Engineering. I’ve been asked by some people – a few in high school coming into ECE, and a few friends not in ECE, regarding how I feel about my university career.

Note that the ECE curriculum has drastically changed since 2010, so don’t expect the identical courses in this order. There were a lot of shuffling the order of the courses for the first two years, introduction of new courses in 1A 1B, and ECE 100 has been split into two.

Also note that for 1A-3B, unless I say a course is an elective, it’s a mandatory course for CE.

Some background information:

I went to high school in BC, hence my bitterness toward Ontario-centric curriculum.

All my co-op positions have been in software. I never had a single EE job.

I don’t plan on going to grad school, for now (because if I wanted to, I would have done the 6-year accelerated program at Waterloo).

1A (Fall 2007)

1A was an easy term if we’re talking about just courses here. I wasn’t sure how much I was supposed to study in university, so for my first set of midterms, I studied for weeks. It paid off, but I don’t think I ever put that much effort into midterms (or any other exams) ever again.

CHE 102, Chem for Engineers

This is the easiest course I’ve ever taken, ever. I learned most of the material in grade 11 chemistry (not even grade 12). Midterm and final were purely multiple choice, so that was quick and simple.

ECE 150, Fund. of Programming

The course should have been easy, but I didn’t put much time into the actual course material and relied on my prior knowledge for exams. The assignments were time-consuming (to 1st year standards) but doable. This course was taught with C#, which is not really common in uwaterloo – ECE and perhaps SE were the only departments that teach C# to first year students. I still believe that they should have taught us C in 1st year, because CE students will hardly ever use C# in their courses.  Although, many people listed C# on resume for the first couple years, and it was probably useful and enjoyable for few.

GENE 167, Intro. to Methods of ECE

This has nothing to do with methods of ECE, it’s a generic “introduction to professional engineering” course, a required course the sake of being accredited as a proper engineering program. It had heavy focus on information specific to P. Eng. in Ontario. The course was marked based on something like two “mock work term reports”, and multiple choice quizzes regarding what we read about engineering practice, such as ethics and law.  We also had some sessions to help us do resumes and interviews during the first term.

Side note: although I knew I was going into a co-op program, I was not aware that I have to do co-op in my second term. This means that during the third week of school, I had to apply for jobs, and do interviews right after. I assumed that co-op starts in second or third year like in many other Canadian universities, and I thought that not getting a co-op job means you just try again in later terms… oh boy I was wrong.

MATH 115,  Linear Algebra

I had a hard time with this course, while the majority of the class did not. I found out after midterms that linear algebra is taught in Ontario’s high school in grade 12.  In BC, it is not – not even basic matrix multiplication.  Although, only the basic material up to the midterm is prior knowledge for Ontario students, so after the midterm, it was hell for everyone.

MATH 117, Calculus 1

Repeat of grade 12 calculus with some proofs thrown in. I don’t remember much about this course, other than the moment during the midterm when I forgot some trig identity and failed to present a proof for some other trig identity.

PHYS 115, Mechanics

This course is notorious for Oktoberfest – the hardest midterm in 1A. The material taught in class is not too advanced when compared to high school physics (classical mechanics), but the midterm was like a physics competition. For example, here’s a wooden block on a surface with friction, attached to another block with some spring, hanging from a frictionless pulley, what is the velocity of the first block?… you get the idea.

Co-op 1 (Winter 2008)

I was at Quest Software in Toronto as a tester. They’ve been acquired by Dell in 2012.

1B (Spring 2008)

1A gave me a wrong impression of ECE’s difficulty. 1B corrected that.

ECE 100, Fundamentals of EE

Also known as HELL 100.  The course does not exist anymore – it has been split into a 1A course and 1B course. Back then, it was a double credit course in 1B.  The first half was physics on electricity and magnetism, and the second half on linear circuits. I did horribly on the first half – things like surface integrals were overwhelming. The second part, circuits, is also my weak area.  If you have “the knack” for EE stuff, you would not have problem with these type of things.  I did poorly on this course, and due to its double-credditedness, it still hurts my CGPA to this day ;_;

This was also my first real ECE Lab.

ECE 103. Discrete Math

This was a fun math course! I really enjoyed it, especially the graph theory part. Other than that, I don’t remember much.

MATH 119, Calc 2

I don’t remember anything about this course, other than that we had a sub-par instructor.

MSCI 261, Engineering Economics / Financial Mgmt

Don’t be fooled, this isn’t a typical Econ or Finance course.  It was mostly doing numerical calculations for things like interest rate, depreciation, etc. I did not write the midterm for personal reasons, which hurt my final mark at the end.

PHYS 125, more Physics

Random topics like statics, waves, quantum mechanics, etc. The instructor was not the greatest; people in my class went to the other section for some other prof (who happens to be very popular among students).

Co-op 2 (Fall 2008)

I was at SAP in Vancouver. I was a developer in test. I worked on Crystal Reports.

2A (Winter 2009)

This was an easy term, but not as easy as 1A. I probably only felt it was easier because 1B was so damn difficult.

ECE 209, Electronic & Electric Property of Materials

It’s a Materials course for ECE students. So instead of studying metal beams and wooden blocks, we study silicon. The course felt “out-of-place”, perhaps because we never had anything like it.  I found it a bit boring, and I’m not sure how useful it is. It’s useful to know what silicon is and how they behave when manufactured as chips, but I don’t think we needed a full credit course on it. It was probably “Engineering-Science component” content requirement for the program.

ECE 223, Digital Circuits and Systems

Introduction to digital logic. The labs were making simple things like flip-flops in VHDL on FPGA, but we never learned VHDL! People actually booed when the prof decided to teach us VHDL as bonus material on the last day of lectures. We learned VHDL by trial-and-error basis, which is not a good thing.

ECE 250, Algorithms, Data Structures

Using C++ with templates.  If the first year programming course taught us how to use a unmanaged (memory) language, people would not had issues programming in C++… but that didn’t happen, unfortunately. I remember implementing a hash table overnight trying to improve performance.  This is one of the courses that I did pretty well in.

MATH 211, Advanced Calc 1

ODE, Laplace, Fourier, partial differentials. Some math that EE courses heavily rely on, bread and butter for upper year courses. I don’t remember anything specific though.

MSCI 311, Organizational Design & Technology

My first CSE (non-ECE elective, 1/5).  Fantastic prof. The course was pretty good.

Co-op 3 (Spring 2009)

I went back to SAP, this time as a devleoper. I worked on BusinessObjects Enterprise.

2B (Fall 2009)

2B or not 2B is a lie. 2B is the hardest term if you are in 2B. It only gets harder from here. You just get used to it.

ECE 204, Numerical Methods

Another course that I actually enjoyed. It was a 8:30 class, so not many people showed up – around busy times, I counted less than a dozen people in class one day (for a class of 100). I didn’t like how the prof spent too much time teaching on MATLAB during lectures, though.  Those kind of things could have been saved for tutorials.

ECE 222, Digital Computers

Introductory Computer Architecture class. It’s definitely useful – it’s why I signed up for CE instead of SE or CS.. (although you can take Digital Hardware option if you are in CS).  We had thousands of slides and some useless textbook, which was difficult to learn from.

The lab was writing programs in Motorola 68k assembly, which I used again in ECE 354.

ECE 241, Circuit Analysis and Design

A follow-up for the circuit portion of ECE 100.. non-linear circuits, op-amps, transistors, etc. I did OK.

ECE 251, Programming Language & Translators

A course on programing languages, compiler design, and translators.  The project was only a translator that produces non-functional C, we used Lex and Yacc (or Flex and Bison).  Apparently people had hard time with the project, it was OK for me.

MSCI 211, Organizational Behaviour

Another CSE, 2/5.  Horrible instructor that did the following: copy some text from the textbook, make it into a slide show, read it word by word in lectures.  I was originally going to do MSCI option after taking MSCI 311, but this course made me re-think that (spoilers: I gave up).

Co-op 4 (Winter 2010)

I went back to same position at SAP in Vancouver.

3A (Spring 2010)

3A wasn’t that much more work than 2B, but this is when all the labs began.

ECE 316, Probability, Random process

Pre-req for Communications courses (to non-engineers; not THAT kind of communications, but things like AM, FM, CDMA, stuff like that.) The first half or so I learned in high school (probability and combinatorics). The latter part, super challenging. I did pretty well overall though.

ECE 324, Microprocessor Systems and Interfacing

This was one of the most challenging courses in CE. Many, many people fail this course and end up repeating it. No textbook, just slides, and the slides are difficult to learn from purely due to the amount of description that come attached with huge diagrams (waveforms, circuits). The material itself is very practical, you’ll understand how micro-controllers work and how you could design them. I did not do that great at the end.

The labs were fun though – the last project was reading a WAV file from SD card and playing it back with various settings, like 2x speed, 0.5 speed, rewind.

ECE 342 – Signals and Systems

Topics: Laplace, Fourier, Z-transforms… I did pretty bad, I should have tried harder. Boring lab. No lab, apparently

ECE 354 – Real-Time Operating Systems

The hardest, and the biggest project course I’ve ever encountered up to that point. You implement a real-time operating system on Motorola 68k board.  I’ve heard that they’re using a new board now, but I liked M68k.. when I bring it up during interviews, interviewers become nostalgic (“they *still* use that?”).  Lab instructions were unclear and ambiguous, and the lecture material didn’t help much regarding the labs. Many, many sleepless nights were spent in the OS lab, but it’s a good experience to have.  I would say that this was the most useful course I’ve ever taken in terms of getting co-op jobs.

PSYCH 256, Intro to Cognitive Sci, Distance Ed.

This is for my TBE, 1/2. (TBE: non-CE course elective). It’s an odd one, because TBEs are usually EE or Mech Eng courses.. which is precisely why I took it.

Distance Ed => very little work. Two essays, one midterm (which is basically writing two essays at home), and a written final. I spent maybe a total of 7 full days on this course… ended up with a low mark too, but oh well.

Co-op 5 (Fall 2010)

I was at Google as a developer. I worked on YouTube.

3B (Winter 2011)

I didn’t have any interviews in 3B, because 4A comes right after. Courses in 3B probably had the most challenging course material.

Every single ECE course this term had a lab component, and they were not trivial labs either. I hated this due to the lack of “CS” courses.

ECE 318, Analog/Digital Communications

Math behind how things like AM, FM, PCM work. We were allowed to bring cheat sheets to exams, but they didn’t help much. Pretty damn hard course, if you ask me.

The lab was a typical ECE lab… 3 hour in lab one week, lab report every other week, repeat until finals.

ECE 327, Digital Hardware Systems

The prof was a bit clumsy but he was very, very enthusiastic. I’ve never seen a prof more enthusiastic than he was. He also became mysteriously “ill” and cancelled his 8:30 lecture following St. Patrick’s Day, which was quite memorable. It was one of those courses with no textbook and 100% slides… I think we had 700 slides… a lot of material to learn.

Lab/Project: Implementing stuff in VHDL on FPGA. The last project was an edge detector – given a bitmap file over serial port, output another bitmap with edges highlighted. My group spent nights optimizing the circuit, but some group had some ridiculous performance.. which means we don’t get 100% unless we beat them. We couldn’t.

ECE 355, Software Engineering

Typical topics on SE – UML, object-oriented design (yes, OOP only, nothing else), SE processes, project management, testing.

I found it boring. The project was uninteresting (programming for the sake of programming)… it was writing a “Home Automation System”, where you have a UI and some servers that control appliances in your house, except your appliances are emulated, and you write the emulators yourself.  We’re fscking Computer Engineering majors, why didn’t they just make us control actual microcontrollers from a UI? It would have been much cooler to demo a project with a web UI that controls Arduino hooked up to a security camera.

The prof was pretty bad too, and the class seemed to agree on it, as evidenced by attendance rate. This course discouraged me from doing the SE option (which I could get if I just take ECE 451/2/3 in 4th year)… I decided to take more programming courses in 4th year instead.

ECE 380, Analog Control Systems

This was our first control theory course. It was pretty interesting, but it’s a narrow topic.

This was also on a bi-weekly lab schedule like ECE 318. Fun.

STV 302, IT and Society

CSE, 3/5.  This is the worst course I’ve ever taken in uwaterloo. Seriously. Why?

1. 30% of the grade was on participation – raising your hand and discussing with the class on some topic. A typical lecture (one 3-hour lecture per week) was composed of the prof talking (30%) and students talking (70%)… so you hardly learn anything. Additionally, when you force people to participate for marks, people talk about stuff for the sake of getting marks, not actually trying to have a discussion.

2. We had two papers (rest of the final grade), but written in a group of 3-4. Seriously? I can only think that it’s because the instructor wanted to mark fewer papers, not encourage students to discuss things on their own and come up with conclusions.

3. The topic of the course is “information technology and its effect on society”.  These days, everyone’ is an expert on social networking and privacy on the Internet.  As a techy person, arguing with “non-techy” people on a technical subject is not a pleasant experience when they are motivated not to “lose” (remember, it’s for marks).

ECE 391, Design Project part 1/3

You form a group for the 4th year ECE design project, pick a topic, find a consultant professor. Submit some paperwork, but nothing major. The hardest part is coming up with a topic.

4A (Spring 2011)

In 4A and 4B, I finally have a choice to select courses, so all the ECE courses below are taken by my choice.

ECE 309, Thermodynamics, Heat Transfer

TBE, 2/2. Personally, the course is completely useless. I’m sure that knowledge in basic thermodynamics is critical for any other engineering students, except those who focus on software. The course itself is not too bad; like any natural sciences course, you just need to spend time understanding the material.

ECE 454, Distributed and Network Computing

This is the most “modern” course I’ve ever taken! All the materials are up-to-date, and the prof’s examples are based on current technology.  The first project is a simplified BitTorrent-like p2p file sharing program, and the second project is a distributed file system (think DropBox, but completely p2p, no central server). The projects are open-ended too, so other than the outer-most interface provided as a requirement, everything else is up to you – technology stack, design, protocol, algorithm, whatever. I’m enjoying it. Courses like this make me glad I’m in ECE.

My partner and I had the brilliant idea to use C. Two weeks into coding, we figured doing multi-threading and sockets is not the easiest things to do in C; we switched to Java. We gained huge boost to development speed. Of course, our performance was negatively impacted, but we weren’t being marked on that.

ECE 457A, Cooperative and Adaptive Algorithms

ECE 457 (AI) split into two, first half. Topics: decision trees in game playing, Tabu Search, Simulated Annealing, Genetic Algorithms, Ant Colony Optimization, Particle Swarm Optimization. Lectures are a bit too verbose – “does he really have to read the list of all edges in a traveling salesman problem?…” – but if you do all (mandatory) assignments, you can learn the entire lecture material from programming.

I enjoyed the course; the projects sparked my interest in dynamic programming and solving hard problems with meta-heuristic techniques.

ECE 486, Robot Dynamics and Control

I made a mistake. I should have dropped out and taken 455 (Embedded Systems), but I didn’t. This course is really, really hard, at least for me. A lot of linear algebra, and very little control theory involved – I should have done more research. I thought the labs would be fun too, but most of the effort went into doing mathematical proofs for writing reports.

The final exam was very difficult. I assume that the entire class was given a huge boost to the final mark, because there’s no way that I passed that final…

ECE 492A, Design Project part 2/3

More documentation, and prototype implementation of the project. You get graded for passing requirements with the prototype you built at the end. And more documentation.

Update, 2012-09-21:

I’ve long graduated, but this post is getting steady views from search engines, so here’s a brief update:

Co-op 6 (Fall 2011)

I was at Microsoft as a developer on the kernel team. I accepted a full-time position with the same team.

4B (Winter 2012)

ECE 456, Database Systems

If you’re in the new curriculum (class of 2014+), you probably had a DB course in 2nd year, so this is probably of not much use for you, unless you want to dwelve into details. My group’s project is open source!

ECE 457B, Computational Intelligence

Intro to actual AI. Neural networks and such. My group worked on a program that takes in pictures of people’s faces and determine what emotion (happy, sad…) they’re expressing. And it’s also open source!

And no, this course is not about doing simple calculations for Bayesian learning! Neural networks are a different beast.

ECE 459, Programming for Performance

Learn the details of parallelism, concurrency, lock granularity, transactions, GPU programming, etc. Immensely useful for programming in the modern era.

ECE 459B, Design Symposium

You should look into what ECE symposium is.

ECON 102, Macroeconomics

.. with the famous Larry Smith. It was enjoyable.

PSYCH 101, Intro Psych

… it’s intro Psych. With 700 other nose-picking first years in Hagey Hall.

Advertisements