ToDo: Make ECE2524 Obsolete

Why would I want to eliminate the course that I’ve been teaching the past four semesters, that I have put so many hours into to update content, create new assignments, written (and re-written each semester… another topic altogether) a set of scripts to facilitate reviewing stacks of programming assignments and generally had a great time with?

Well, because I don’t think it should be a separate course to begin with. As many have noted, and I have agreed, ECE2524 in many respects is a kind of a “catch-all” course for all those really important topics and tools (version control, anyone?) that just don’t get covered anywhere else. It is also officially (but not rigorously enforced in the form of a prereq) to be an introduction to more advanced software engineering courses, so it has the general feel of a programming course.

I think programming (and *nix OS usage and philosophy) is too important to delegate off to a 2 credit course and treat separately from the rest of the engineering curriculum, an idea that was solidified after reading an excerpt from Mindstorms by Seymour Papert.

I began to see how children who had learned to program computers could use very concrete computer models to think about thinking and to learn about learning and in doing so, enhance their powers as psychologists and as epistemologists.

Papert is a strong advocate to introducing computer programming to children at an early age and using it as a tool to learn other disciplines

The metaphor of computer as mathematics-speaking entity puts the learner in a qualitatively new kind of relationship to an important domain of knowledge. Even the best of educational television is limited to offering quantitative improvements in the kinds of learning that existed without it… By contrast, when a child learns to program, the process of learning is transformed. It becomes more active and self-directed. In particular, the knowledge is acquired for a recognizable personal purpose.

It goes without saying that a solid understanding of math is crucial for any of the STEM fields, but computers and programming can also encourage engagement with other fields as well, though that is not the focus of this post.

Along with being a useful skill to have, programming teaches a systematic way of thinking about a problem, and crucially shifts the model of learning from one that embodies a “got it” and “got it wrong” binary state to one that encourages the question “how do I fix it?”. As Papert notes, and I can personally attest, when writing a program you never get it right the first time. Becoming a good programmer means becoming an expert at tracking down and fixing bugs.

If this way of looking at intellectual products were generalized to how the larger culture thinks about knowledge and its acquisition, we all might be less intimidated by our fears of “being wrong.”

Some strong arguments for the symbiosis of programming and learning valuable thinking skills at an early age. But the benefits don’t disappear at the college level, especially in a field such as engineering in which learning programming for the sake of programming is a valuable skill (there are several required classes on the subject, so you know it must be important. Slight sarcasm, but it’s true, regardless of how cynical we agree to be about the way classes are structured and the curriculum is built for us). If programming can help engage with learning mathematics, and as a side effect get us thinking about how we think, and shift our view of learning to a more constructive one, then can’t we get at least the same positive affects if we apply it to more advanced concepts and ideas? It doesn’t hurt that a good chunk of engineering is mathematics anyway.

The wheels really started turning after the first day of guest-lecturing for Signals & Systems. Here’s a course that is a lot of math, but critically foundational for learning how to learn about how the world works. That may seem a little embellished, especially for those not familiar with the field (Signals & Systems crash course: a system is anything that has an input signal and produces and output signal, e.g. a car (input is gas/break, output is speed), a heart beat (input is electrical signal transmitted along nerves, output is muscle contraction or blood flow), the planet (so many systems, but treating atmospheric concentrations of CO2 and other gases as an input and the average global temperature would be one example of a system we would be interested in studying)). Signals & Systems provides a set of tools for exploring the input/output relationships of… anything.

So why is it taught from a set of slides?

What better way to really engage with and understand the theory than USE it? Now most educational budgets wouldn’t be able to cover the costs if everyone wanted to learn the input/output behavior of their own personal communications satellite, but the beauty of Signals & Systems, and the mathematical representations that it embodies, is that everything can be simulated on a computer. From the velocity of a car, to blood flow caused by a beating heart, to the motion of the planets and beyond.

I envision a Signals & Systems course that is mostly programming. People will argue that the programming aspect of the material is just the “practical implementation”, and while that’s important, the theory is critical. Yes, the theory is what helps us develop a generalized insight into different ways of representing different types of systems and what allows us to do a good deal of design in a simulated environment with greatly reduced risks, especially when say, designing new flight controls for a commercial jet.

But I think the theory can be taught alongside the programming for a much richer experience than is obtained by following a set of slides. You want to understand how the Laplace transform works? What better way than to implement it on a computer. I guarantee you, if you have to write a program that calculates the Laplace transform for an arbitrary input signal, by the time you’re done with the debugging, you’re going to have a pretty good understanding of whats going on, not to mention a slew of other important experiences (how do you solve an integral on a computer anyway?).

Talking about the differences between continuous time systems and discrete time systems is taken to a whole new level when you start trying to simulate a continues-time system on a computer, very much a discrete-time system. How do you even do that? Is it sufficient to just use a really really small time step?

So yes, I think the best case scenario would be one in which ECE2524: Intro to Unix for Engineers is obsolete1. Not because the topics we cover are unimportant, quite the contrary, they are so important that they should be providing a framework for learning engineering.


1 I’ve focused primarily on the programming aspect of ECE2524 here, but those of you who know me and have taken the course with me know that the Unix philosophy is a big part of it as well. Integrating the programming aspects into other coursework would of course not address that. I’m sure, with a little thought we all can think up a clever way of introducing the *nix philosophy and generally the whole concept of thinking about a philosophy when thinking about engineering, and what that even means, with every other course. Because well, it should be an integral part of everything else we learn.

5 thoughts on “ToDo: Make ECE2524 Obsolete

  1. Sometimes I feel really lost here at Virginia Tech. About a year ago, this progressed to the point that I tried to transfer somewhere else.

    I look at the course catalogs for ECE, CS, Philosophy, Math, and Physics and I don’t see a single course title or description that sounds boring. I buy textbooks and read them for fun, even when I’m not in the classes. I take online courses related to the subject matter. I do side projects that involve course material. Each of these things has only ever increased my intellectual appetites.

    And yet, somehow nearly all of my professors manage to douse them. Honestly, I believe that most professors don’t care about even *what* they teach, let alone *how* they teach. Signals and Systems is a really good example of this.

    I just want to express to you that your class was easily in the top three I’ve taken here, and it wasn’t because I came in as a Linux user. It was because of how thoughtfully everything was laid out, and how much sense the curriculum made. I think I may not have given you this impression (and, thinking back, I may have given the opposite impression), but I believe that many students (and, certainly, I) really appreciate the amount of effort that you put into teaching this class. If universities were populated by Darren clones, I would feel much more confident that my degree will retain its value fifty years from now.

  2. I agree with you in that programming should be applied in the learning process of our classes more. Analyzing and dissecting a problem to answer it in code is quite honestly the best way to learn. I didn’t see the beauty of Newton’s law of gravitation until I could see it’s effects in an orbiting body simulator that I wrote. Beyond all this however, it should go without saying that a very solid background in programming is necessary for all computer engineers here. The difference between a single file C++ project from ECE 1574 and a thousand file project across multiple languages from the real world is enormous. It is quite drastic and overwhelming. Adjusting to it in the three years time from taking ECE 1574 to graduating isn’t exactly an easy process. I feel that basic concepts of programming should be taught to us earlier. Even those who won’t follow a career in computers can use programming to benefit their learning of other concepts.

  3. My main gripe with ECE is the lack of structure, specifically with the CPE degree. It’s not just this class, it’s the entire curriculum. It bounces between EE and CS, only really coming to a focal point when it hits Embedded (ECE 4534), but even then that’s only one class (capstone or no capstone). I like what I’m learning, but the amount of work I’m given that I just don’t care about cuts into my time in doing things relevant to what I want be doing later in life. I want to do programming and digital design work, not EE and Economics (two classes that have eaten up disproportionate amounts of my time), but they’re required classes that I have to take. I’m not really interested in them, and beyond them, once I hit the actually ECE classes, it’s just a mess. It goes from making circuits to programming Qt to Digital Design. I know CPE is a broad field, but a little more focus would be nice. I don’t want to be stuck doing a bunch of things I hate just so I can get to the small (and I mean small) subsets of classes I want to take. Maybe the ECE department could have different tracks, kind of like what the CS department does? It’d give a bit more order to the CPE degree, and make it so things that we learn actually get reinforced, instead of beings shoved in to make room for something that can be and most likely is completely different. That way, we can work in what’s in this class, into every class. Put it at the forthought of people’s minds when they’re learning it, instead of having it as an afterthought class that the department threw in just because. Think we should start some form of formal request to the ECE department (and how would we go about doing such a thing)?

    On side note, examining the action of signals sounds interesting to me, but I never really had enough time to devote to actually doing any of that, and in all honesty, I’m more interested in cryptographic algorithms, parallel processing, and security than signals (no offense to any signals people reading this). Hopefully this summer I’ll have time to get through all of it.

  4. The feedback has been great, thanks everyone!

    Ben: Thank you, that means a lot, and to be honest I wasn’t really sure how you liked the course. I know it’s always been a bit disorganized and unstructured, there are some aspects of that that I like (it’s easier to spend more time on things that need more time when there isn’t a strict schedule looking over your shoulder, but on the other hand it can feel kind of all over the place at times. I like to think each semester it is evolving to something closer to something that works well for everyone.

    Zack: That’s an excellent point and perhaps in my enthusiastic frenzy of restructuring the curriculum I didn’t give enough though to where some of the formal programming concepts will come in. I like to think that many could be introduced in the context of exploring other material by writing programs, but there very well be a need for a strong need for a dedicated programming fundamentals course or series of courses. Even then, I think those could make use of other engineering material for motivating examples.

    James: That’s a really great observation, and reading that I think gives some insight as to why ECE2524 itself feels kind of all over the place at times. There is just too many topics that we’re told we “need” to understand before getting that degree. It’s worth noting that the graduate program is a bit different: for one we get to pick and choose which classes we take (though there are some “strongly recommended” courses which vary depending on who your adviser is) and there are several subareas to help focus the that process:
    Electrical Engineering

    Signals, Systems, and Control

    Computer Engineering

    Computer Systems
    Software and Machine Intelligence
    VLSI and Design Automation

    I forget the exact numbers, but there are some guidelines like “x credits from within your sub-area” and then it’s mostly “a certain portion of the rest should come from ECE, a smaller number may come from different departments” but even then the rules aren’t always strict, usually it’s just a matter of getting your committee to approve, so if you find a great course in some other department you can usually get it to count towards your graduation credits with just a few signatures.
    The number of people going through the undergraduate curriculum is of course much higher, so maybe it’s not feasible to demand that exact same system, but it seems like there should at least be a way to have several different paths laid out for each of the sub areas. It would be interesting to find out how much of the current structure is due to ABET accrediting rules and how much is due to just “this it’s how it’s always been done, dammit”. I wonder who is actually deciding what an EE or CpE should “know” after getting their degree?

    I definitely think we should investigate how we might open up a conversation with the department, I’ll ask around about any formal procedure for this kind of thing, and you do as well! If there isn’t one, a nice “open letter to the dean” might be a good place to start.

    • dkm: For first point, I was mainly referring to the undergrad program here. I don’t know how the graduate level is handled, but I’m kind of disappointed in the undergrad level. It’s just too scattered. I agree a lot more weight should be given to things in this class, but ultimately, the ECE department hasn’t. Maybe if we get some actual people in industry to talk to them about it they’ll be quicker to change their minds.

      I remember the guy who showed up at the mentor meeting saying that this class was important (anybody else remember him? I forget his name). Maybe we could get him on our side (for a start) and convince them that this stuff is really important (because it’s more important given how prevalent computers are, and they offer valuable skills no matter what field you’re in).

Comments are closed.