Time flies when you’re having fun! Genuinely, I think that I’m enjoying this degree more and more as we go on. The courses get more in-depth and interesting, your relationships with people deepen, and you truly learn how to succeed in this program. Let’s dive into the courses.
ECE 109 is a half credit course. My understanding is that we primarily take it because of engineering accredidation requirements that require us to cover the natural sciences. Our lecture attendance was very low (~5-10%), but I was always there! My typical strategy is to attend every lecture I can for almost all courses. In my opinion, this helps you to keep up with the course and never fall behind, even if the course is relatively low on the priority list.
The content in the course is not difficult, but can get weird. You’ll brush through all of your high school chemistry knowledge in 1 or 2 lectures, but the majority of the course won’t rely on it too much, so don’t worry if you’ve forgotten most of your grade 12 chemistry content. Most of the course centres around ideal and non-ideal materials structures (including lots of funky geometry), diffusion, and the electrical properties of materials. The last unit on electrical properties is the most relevant to ECE and discusses band theory (which explains electrical conduction), and semiconductor basics.
Our assessments for the course just looked like 4 online assignments, 2 online quizzes, and a must-pass in-person final. Many people found the final to be pretty difficult because they crammed most of the course in the 1 or 2 days before. It’s honestly a fair strategy given the course’s weight — but not one that would ever work for me. We also were allowed unlimited physical materials for the exam, meaning everyone just printed out all the slides and such. Overall then, my advice for this one is simple: much like ECE 192, just try not to leave understanding the material to the day before the exam :).
As the saying goes among ECE students: DW, it only gets Harder. For real though, this course was nowhere near as difficult as ECE 150, and this was explicitly stated by Harder as intended. We were the cohort in Fall 2023 that got, in our opinion, the insanely difficult 150 final that resulted in tons of reddit memes and mass panic, but this course went much more smoothly!
The course focuses on different techniques for approximating things (systems of equations, DEs, root-finding problems, optimization problems). I enjoyed Harder’s approach to the course in which he first introduces 7 tools that are then applied throughout the rest of the course to build up the techniques that are used to solve problems. Harder’s lectures are always very entertaining no matter what the topic is. He’ll always find a way to keep you engaged through random stories that do, at least most of the time, seem to tie into the lecture’s topic. Much like 150, all of the course contents are available online here, and there are videos that many choose to watch instead of going to lectures. But I definitely recommend going to the lectures, as usual.
The midterm was very fair, similar to provided past examples, and the denominator of the exam grade was reduced by a good chunk to ensure a decent average (72). The final was also decent, with a slightly lower average. Harder made it clear that this course is not intended to be tremendously difficult, and he delivered on that promise, but make sure you do try to understand the content, as some exam questions will often test your true knowledge of the why rather than just the how.
Most of this course is about solving Ordinary Differential Equations. Many techniques to do that are introduced, including Laplace Transforms, which we unknowingly have been using in phasor domain analysis since 140! It also touches on Fourier Series, Fourier Transforms, and solving basic Partial Differential Equations (DEs involving partial derivatives). I tend to like math, so I enjoyed this course. DEs are absolutely everywhere and knowing how to solve them is a very important foundation for ECE students to have (you’ll be doing it in 240 for RLC circuits and it’s very helpful to actually understand the derivations you see). However, portions of it seem without direction and very “Trust Me Bro.” Like when you’re told that we do something for “Historical Reasons” and just have to trust the process. However, I’ve heard this is a common complaint for courses in DEs, as it is hard to impart the intuition behind some techniques. And even when Harris tried to do so, we would sometimes get lost in the sauce of a bunch of MATH 115 you’ve forgotten from 1A coming back to derive a method or prove some crazy sequence of mathematical facts that aren’t really needed to just apply the method.
Harris himself is always an entertaining lecturer who comes prepared with memes. Unfortunately, he’s moving on from UW, so I’ll keep my comments brief. Harris was a great 108 prof and I know he’s been running 208 for years as well, so it’s a tough loss for the department. I’m sure he’ll succeed elsewhere!
Our midterm and final were definitely both a bit harder than Harris intended, but I’m writing this before grades are out, so we’ll see what happens! A big challenge we had was that post-midterm content lacked good practice in the Trench textbook we were using. So, I recommend seeking out practice problems early on and staying up to date with the course. If not, things will really build up quickly.
I really liked this course! If you’re expecting a follow-up to 124, you’re not going to get quite what you’re looking for, but this course is full of new, very relevant content you should care about. The first half focuses a lot on learning about RISC-V assembly language and how computers process instructions in a very general sense. The course was very recently converted from ARM assembly, so we were lacking in practice problems at times, but Morton did a great job in converting past exams over to RISC-V and posting a decent amount of problem sets.
Learning assembly language, while obviously not strictly necessary to be a programmer, was pretty fun. It’s just cool to have to think at the same level as the processor itself and see how C code might actually have to be translated to individual instructions. The labs were run fairly well and are very manageable. I found the lab manual and project scope to be better designed than 124, and pretty practical. The labs are very similar to 124 in that each lab session is just a presentation and demo session and you and your partner have to actually complete the project on your own time. Still, I think the later labs definitely took less time than the 124 ones did.
The second half of the course shifts gears to discuss processor design, pipelining, memory, caches, and a few other topics. It’s very cool to learn about, and you’ll go over a simple processor design that is actually capable of executing core RISC-V instructions. Some of your 124 knowledge comes back here as this comes down to designing digital circuits, and we had some questions about deriving boolean expressions and such.
In my opinion both the midterm and final were very fair and Morton is an excellent teacher who really seems to care about the success and learning of his students. This course is highly relevant for anyone who cares about the inner workings of a computer (which, if you chose ECE, is presumably everyone).
240 is typically said to be the course of the term. However, given that we didn’t have Levine, I think we were spared from being cooked too badly. From my point of view, the course was very enjoyable. The content is also very relevant to the inner workings of electronic devices, and it feels much more practical than 140. Most of your 140 knowledge about mesh analysis or nodal analysis goes out the window here, as it isn’t really necessary to solve the circuits we were presented with. Instead, new skills that focus on the non-linear components you’ll be introduced to will be the focus, and you will use a lot of the phasor-domain skills you developed near the end of 140.
The main new things you’ll see are Diodes, RLC circuits, MOSFETs (transistors), and CMOS logic (how we can make logic gates). You’ll also spend a good chunk of time on the Frequency Response of circuits and the non-ideal behaviour of the Op-Amp that you always got to assume was ideal in 140. The key to success in this course is to practice consistently. And I mean VERY consistently. Don’t let a week go by without completing assigned problems, or you’ll be completely behind.
I thought Nairn was a great prof. His lectures go fast, but he is extremely knowledgeable, engaging, and has a great dry sense of humour. Nairn doesn’t post notes or solutions to his problem sets (just the numerical answers), but his lectures on the whiteboard are very high quality most of the time, so I wouldn’t want him to sacrifice this for anything. Thankfully his problem sets were very comprehensive, and extremely similar to the problems given on the midterm and final. Unlike some other profs, his practice problems were truly representative of exam-level questions. The only problem (ok, not really a problem) is that he had so many! Almost every lecture had an associated 3 – 4-page problem set, which can make it difficult to keep up. So that circles back to my main piece of advice: don’t stop practicing, and when you don’t understand something, seek help!
Also, the labs for this course are similar to 140 in structure, except that they have quizzes and can be a bit more chaotic, as seen below 🙂 (And, funnily enough, this circuit worked first try!)
The leetcode course! Well, not really, but that’s the stereotype when it comes to DSA. This course puts a lot of focus on the idea that, when faced with a problem, one should never just jump to code and try to figure it out along the way. Instead, you should develop an algorithm independently and then translate it to code. The tools to develop these algorithms are what are taught in this course, along with their associated data structures. The course goes over runtime analysis, linked lists, trees/BSTs, priority queues, hashing, many sorting algorithms, and graphs along with some classic algorithms (Dijkstra’s included, of course).
I thought Patrick was a fairly good lecturer and was relatively engaging. Mike Cooper-Stachowsky was our lab instructor, and the labs were probably the most notable thing about this course. This term, the teaching team decided to do something new. They built a set of 5 projects that all tied into each other. That is, the code for the first project was reused for the second project, and each project kept on building on your previous designs. By the time you got to the final project, you had a pretty substantial set of inter-dependent classes and data structures that analyzed data from the World Bank. I found this to be a good idea in theory and makes a lot of sense. It requires you to make good design choices at each stage and is a much more practical assessment of engineering design principles. However, given how difficult some of the projects turned out to be (#3 in particular, which I spent many hours working on over reading week), this was a challenging concept in practice. Making good design decisions when you’re just trying to scrape by and get the project done really is not possible. That means – start the projects early and test often!
The search this time was relatively smooth. I’m going back to my employer from last term, but just switching teams. But that wasn’t necessarily the plan to begin with, so I still have some fun stats for you:
The current employment rate of my cohort for the summer is very bad – 57.6%. Let’s hope that picks up over the next couple weeks as people submit AOJ forms and such.