After four months of stress, lack of sleep and whatnot, I’m finally done one of the hardest terms in ECE! With all those labs, extra curricular activities, and coop interviews, and lectures, things can get pretty tough to manage, especially when you have to work around a timetable like this. Now that the term is over, I thought that it would be nice to talk about some course specific things, as well as some of my experiences this term.
(Also remember that this is the term where you submit your Soul Transfer Form to the ECE department 🙂 ).
Advanced Calculus I for ECE (ECE 205)
This is essentially your differential equations course. This is also the last calculus class Computer Engineering students will need to take; Electrical Engineering students still have ECE 206 (Advanced Calculus II – it’s just vector calculus) in 2B. Up to this point in the program, your calculus courses (specifically, MATH 117 and MATH 119) was (in general) all about taking a function that you know already, and performing operations on it such as integration or differentiation (and also finding the Taylor Series for it and whatnot), and over a single variable or multivariable. ECE 205 is all about solving for an equation given the derivative(s) of the solution. You’ve probably done a lot of this in ECE 106, where you split the differentiation operator and then integrate. At this point you might think that this is straight forward, and why we need an entire course on something trivial. What if the prof gives you the following and ask you to solve this:
Or something like this:
(This equation is called the heat equation in one dimension).
Not so obvious now, is it?
The first equation is called a second order ordinary differential equation, which you will learn how to solve in this course. You will also learn how to solve first order differential equations (you might be able to intuitively guess what the equation contains). The second equation is called a partial differential equation, which you will also learn how to solve. You will also learn other things like the laplace transform, transfer function, and then the fourier series (you can represent any function as a sum of sine and/or cosine functions) and the fourier transform. Differential equations and the other topics in this course are actually very important in engineering in general, as you will see very soon in this post. One of the faculty members in ECE said that “If, as an engineer, you don’t know how to solve differential equations, then you are in the wrong profession.”
Digital Computers (ECE 222)
ECE 222 is all about everything inside a computer, and how the digital circuits you learnt in ECE 124 are used. You start off by learning the basics of assembly, which is a low level language (compared to C# and Java which you have done in the past, which are high level languages), stacks and subroutines (analogous to a function in C#/Java). You then go on and learn more about the various functions in a computer such as accessing I/O devices, buses and interrupts for I/O devices, control signals within the processor, pipelining, memory, and computer arithmetic (addition, subtraction, multiplication). It’s a lot of memorization, but also very interesting!
You’ve probably saw this board around in your ECE 124 labs. This is the Keil MCB 1760 board that you will be using to complete your ECE 222 labs. It uses the ARM Cortex-M3 processor, and you will be coding using the ARM assembly language (specifically, the THUMB instruction set). Assembly languages in general is very different than C#/Java; specifically speaking: there are no loops and if/switch case statements, and retrieving and storing data in registers require multiple instructions. There are ways to work around this such as using branch statements and stuff, but you will learn more about this in your labs.
Electronic Circuits I (ECE 240)
Before I go into detail about the course, I want to stress the importance about really knowing your material from ECE 140. If you don’t remember your stuff from ECE 140, I highly suggest you review them before going into ECE 240. Trust me, that stuff is pretty important if you want to pass and do well in this course.
So, continuing on where you left off in ECE 140 about linear circuits, you will get a brief review about operational amplifiers, and the various amplifier circuits (inverting, non inverting, difference, summing), as well as the instrumentation amplifier, which you’ve probably never heard about in ECE 140. You then go on and learn about RL, RC, and RLC circuits, and the analysis of amplifiers in the frequency domain, and drawing bode plots. When doing circuit analysis for RL and RC circuits, you will always end up with a first order differential equation, and for a RLC circuit, a second order differential equations. Oh snap, you’re learning how to solve those in ECE 205! This is one of many applications of differential equations, and there’s probably more in the upper years.
At this point you’ve completed the full analysis of linear circuit elements (which is roughly 1/3 of the course). The remaining 2/3 of the course is on non-linear circuit elements. The first element you will learn about is a diode, which essentially controls the flow of currents. There are many applications of diodes, one of which is its ability to convert AC voltage into DC voltage through various cascaded circuits. The second element (and the last element for this course) is the transistor, both MOSFET and BJT transistors, and using them in circuit analysis in DC and AC amplifiers.
The picture above is one of the circuits we analyzed in the ECE 240 labs (I think this was the MOSFET lab, not sure). You will use the same equipment from ECE 140 to complete your labs. You will also begin to use a software called MultiSim, which you will be using in your prelabs and postlabs to simulate the circuit(s) you will be analyzing in the labs. Also note that in ECE 140, you were given a circuit kit with all sorts of cool stuff. Remember to bring that for 2A! You will need the stuff from that kit to complete your labs.
Algorithms and Data Structures (ECE 250)
This course is probably by far the most important course for students looking for software-related jobs for co-op. This is also your first computer science related course in ECE. For the labs, you will be expected to complete them in C++, however you will not be taught the language in detail (but it’s very similar to C# and Java in terms of syntax). You will learn how to analyze algorithms mathematically using the landau symbols to determine the runtime and memory usage of algorithms. Eventually, you will branch into various data structures such as stacks, queues, and trees. You’ve probably heard of trees from a mathematical perspective in ECE 103, but now you will learn how trees store data and you will implement them in C++ as one of your projects. Remember the sorting algorithms you learnt in ECE 150? In ECE 250, you will learn a couple more (specifically: insertion, bubble, heap, merge, quick, bucket, and radix sort). You will then continue on with hash tables, graph theory (remember the graph theory stuff from ECE 103!!) and creating graph data structures. You then conclude the course with various algorithm design techniques and a quick introduction to NP-Completeness. You will be implementing various data structures in your projects, with the very first one being a linked list. So be familiar with linked lists from ECE 150!
Engineering Profession, Ethics, and Law (ECE 290)
This was, believe it or not, one of my favorite courses simply because the prof was a good one. I actually thought that this was going to be a very dull course, but it was not bad at all! From what the course title implies, you will essentially be learning about those three things. By now you should know a fair amount about the engineering profession and PEO through the seminar courses (ECE 100A and ECE 100B) which you will see again in ECE 290. Besides that you will also learn about whether decisions made are considered ethical or not through the stakeholders that will be affected by this decision. The law portion of the course mainly introduces contracts and whether or not contracts are enforceable or not, and the tort law. The bulk of this course revolves around various engineering case studies, some of which you will see on the PEng exam if you wish to earn your PEng license after convocation. A common misconception about this course is that it is a pass-fail course, and is not counted to your overall/term average. That is incorrect! It is a numerically graded course and it does count towards your average.
Linear Algebra for Engineering (MATH 215)
You might have seen some of your friends from other engineering disciplines take linear algebra in first year. I believe its essentially the same course, but only ECE takes it in second year because some of the current first year courses was used to be a second year course, hence linear algebra was brought up to second year. Anyways, linear algebra for the first half of the course was essentially all about complex numbers, vectors and solving systems of equations through matrices and Gaussian elimination. If you’ve done vectors in high school then this part should be a breeze. You will also learn about eigenvalues and eigenvectors and how they relate to solving differential equations (ehem…characteristic equations in ECE 205). The second half of the course is essentially more abstract concepts such as abstract vector spaces such as basis, subspaces, inner products, diagonalization and its applications to solving systems of differential equations. There’s actually a lot more topics for post midterm then the ones listed, but these are the ones that stood out in my mind.
(It’s been almost two weeks since I completed the final exam, and its the work term right now. Gotta focus on other important things!)
Numerical Methods I (ECE 204A)
This course was used to be a part of a lab component for ECE 205 and MATH 215. This year was the last term (Winter 2015) that they decided to do the lab components and starting next school year (Fall 2015) they will take those two lab components and put it under a new course name. So the following experiences was based off my ECE 205/MATH 215 labs. But anyways, in ECE 204A you will learn how to program using MATLAB, and using the language to learn about other methods of solving differential equations and other techniques related to linear algebra. There is a lab final exam for each course: one for ECE 205 and MATH 215, but you will most probably only receive one exam for ECE 204A. They may also change the overall structure of the course, and note that they only schedule a lab session for this course, and there are no lecture component to this course. Computer Engineering students only need to take ECE 204A in 2A, and Electrical Engineering students must also take ECE 204B (Numerical Methods II) in 2B.
Experience and Conclusions
And there you have it: 2A ECE summarized! This might seem like it is a lot of material that needs to be covered. The material taught is rather straightforward, however it is the amount if work and the level of difficulty of the work (I never did well on the Calculus assignments) is what makes 2A challenging. Think about it: you are learning an additional course on top of how it was like in first year. Out of the six main courses, five of them have labs, so that’s a lot in itself already.
What made 2A bearable for me was that all the friends that shared the same classes with you. For those of you new to this, Waterloo Engineering sets up the classes so that you would be placed into cohorts (starting in first year) in which you will take the same core courses with the same people until convocation. You become really good friends with people in your cohort, and you help and support each other along the way. For those who know me in person, you might remember me complaining a lot about 2A in terms of the workload (especially for Calculus! Those assignments are hard!). Now that I look back, it as all worth it because:
- ECE 250 got me into my first Software Engineering position for my third co-op work term
- ECE 222 got me even more excited about embedded systems development in assembly, and eventually C in ECE 224/ECE 254 (whichever course that does it). I even got the Arduino Uno and the Intel Edison which I am excited to play around with, on top of my Parallax Basic Stamp experience acquired through high school.
- I feel that I’ve gotten better in terms of time management, prioritizing tasks that is most important. It should be pretty obvious that this is important in the real world…getting things that is more important done first, then dealing with the rest later. Remember that you are doing an additional course this term, and a lot more labs compared to 1A and 1B, so there is a huge jump.
Again, as much as I complained about 2A (even in past terms, there was always something that I complained about), by now I have gotten used to all the stress the ECE department puts on its students. I remember at one of my co-op interviews, the manager mentioned that he was also a UWaterloo graduate from ECE, and that 2A was also very difficult for his year as well. He also went on telling me that although he was pretty much “beaten to crap” (yes, he said that) from ECE, as a professional engineer in the workplace, he was already used to all the stress when he started his first job in the R&D field after graduation, whereas some of his other colleagues was never under such pressure in their undergrads. He stayed at that company for 15 years until recently where he switched to work for a startup.
So for those who just completed 2A with me, WE MADE IT! 😀 I will see you all in 2B! For the students going into 2A, I wish you all of the best. And lastly, for future students who have yet to start 2A (e.g. if you are currently in high school, 1A and 1B students in ECE), don’t be scared about the 2A term: although things may be difficult, 2A isn’t made to fail everybody; there are a lot of people that passed the term! So…