Now that I’ve passed PDENG 15 for sure and handed in my work term report, I am officially done with software engineering. It was an interesting year and, ultimately, an interesting experiment, but in the end, it just wasn’t for me. There are a ton of reasons why I feel this way, so many, in fact, that I’ve wanted to write it down in the lengthy essay format that has embraced many of my recent (and few) posts.
The most important thing to realize is that the only reason I was even in software engineering was because, as always, I was lazy. My former classmates will know what I’m talking about when I say that. I’m well known among my softie friends for ‘doing enough’. I’d heard stories about people working themselves to death in university, but I made it a point not to do that, particularly in the case where five hours of hard, grueling work would net me some marks that I wouldn’t even see in my final grade. Nope, as long as I understood the material well enough, that was fine for me.
But I digress. I’d originally applied for software engineering at Waterloo and McMaster and computer engineering at U of T. In the end, I considered the U of T and Mac choices a mistake, because I knew that what I was interested in wasn’t engineering. Really, the reason I chose software engineering was because, at the time, it seemed like the perfect mix of computer science and engineering.
But something interesting happened in grade 12. Math was starting to make sense. It was starting to come together. It was starting to get interesting. I started poking around the undergraduate calendar while I was bored and stumbled upon some interesting options for mathematics degrees. The thing that caught my eye was the possibility of having two majors; in my world it would have combined computer science with a field in mathematics.
Something else happened about that time. I got accepted to software engineering at the University of Waterloo. In April. And really, that sealed the deal. There was to be no more waffling around; I’d decided to become a software engineer. The whole math thing seemed like a fad. That was not the case.
Yeah, math kind of faded into the sunset over summer. But first year was full of interesting mathie things. There are two courses that really showed me what math is like: MATH 135 and CS 245. These two courses sharply contrast in their abstractness and depth compared to engineering maths, like MATH 117 or MATH 115. Where the math maths focused on understanding, engineering maths tended to degenerate into festivals of memorization.
That’s not to say that 115 and 117 didn’t have anything I liked. I really enjoyed vector spaces and actually learning how to integrate. But, I don’t think I enjoyed it as much as I would have, delving into why these things work. Similarly, CS 133 was of no interest to me. I knew how to program already, it’s actually fairly simple and mechanical to simply spit out code. CS 134 was much more interesting, explaining the various data structures or analysing complexity of functions.
Ultimately, I came to the conclusion that I should have come to in grade 12: that I am far, far more interested by abstract ideas and knowledge and have almost no interest in the application of knowledge. In fact, my marks point this out quite clearly. I’ve been getting much better marks in maths than in CS courses. The only exception is really CS 245: Computation and Logic.
So far, that only explains the pure mathematics portion of my intended degree. Other than the fact that it’s impossible to take any other major or minor with software engineering, why did I switch in CS? Much of my decision to go into CS was influenced by my work term at Sybase.
One particular project that I had to work on was an SQL parser. For that project, my boss, who used to be a CS prof at Waterloo, basically gave me a lecture on how compilers worked before he left for two weeks. During those two weeks, while working on a lexer and parser, I also read some stuff on parsing and languages on Wikipedia. It introduced me to interesting things like formal languages and automata theory. It also introduced me to the various fields in computer science.
As it turns out, computer science has a lot of different areas of interest, such as things like artificial intelligence, computational mathematics, human-computer interaction, and other things. It also turns out that software engineering is a sub-field of computer science. This is a fairly large point in my decision.
Unlike science and engineering, computer science and software engineering are not completely divorced from each other. What I mean by that is the fact that the focus and intent of science and engineering are completely different. However, this is not the case with computer science and software engineering. Software engineering remains as a sub-field of software engineering and is not its own discipline, as it is with civil engineers and physicists.
Why is this? I’d say that it’s because of the nature of the things that we’re dealing with. Whether we’re computer scientists or software engineers, the things we manipulate are abstract. At the lowest level, they’re ones and zeroes. At the highest level, they’re still abstract objects. Other engineers deal with real objects and other scientists deal with theory, but both computer scientists and software engineers work with the same, abstract, theoretical things.
But after you realize that software engineering is only a sub-field in computer science, you also realize that there are other fields. And you will find that it is these other fields that are what you really want to be studying. For me, I’m fairly interested in languages. I mean, syntax is one of the things I love about Python and despise about Java. The SQL parser that I had to work on at Sybase was probably the most fun and exciting thing I’ve done with programming. I guess it’s why I’m on my little witch-hunt against people who don’t indent eight spaces.
Also, languages are abstract enough for me to enjoy, as opposed to more applicable things like graphics or databases. My interest in abstract, theoretical objects or structures is also what led me to pure mathematics.
So much of the decision was made by the fact that I’d realized what I really want to be studying. Of course, there is a bit more to the decision than my own fanciful dreams.
One big thing that is evident in software engineering is how engineering treats its students. Why I say that it’s particularly evident in software is because we have a program that is almost the same as ours that is without the influence of engineering. Unlike what the administration may have you believe, engineering is particularly unforgiving. If you screw up, you’re done for eight months. The rationale behind this is the cohort system: every engineering program has its classes together. That’s supposed to build up some camaraderie, because engineering needs more for some reason.
Engineering is also fairly inflexible. I hadn’t thought of it as a downside before, but university has really shown me how important flexibility is. In engineering, you get zero flexibility, in almost every aspect of your education. Sure, you may have spots for electives, but those are more concessions than trying to seriously add some supporting content to your education.
But one of the biggest things that I think that shows how engineering regards its students is PDEng. I’ve saved this for last, in fear that a PDEng rant might taint the entire post with a suspicion that I left because of PDEng. That is not the case. While I was pissed as hell at PDEng, if I thought software was for me, I would have stuck it out. But, I’d been meaning to write a scathing criticism of PDEng for a while. Ironically (OR CONVENIENTLY?), PDEng prevented that during the work term.
I really tried to give it a chance. PDEng lost that chance in one of the first modules, where it outlined how assignments should be completed. The first point was that there should be “no CRAP (creative rhetoric and posturing).” The first thought that came to my mind was, really, “bullshit“. They’re telling me not to BS on assignments and they have the balls to come up with a forced acronym to force the point? How is that not hypocrisy?
That is the biggest problem with PDEng. That is, PDEng is pure, unequivocal bullshit. I dare anyone who has read the course content to convince me that it is anything but.
The next problem is that the grading system in PDEng defaults to fail. An assignment is given the grade of the lowest grade of any one section on that assignment. So, given an assignment with ten criteria, and nine are excellent and one is weak, the entire assignment is weak. Apparently, this is supposed to be offset by the fact that markers are allegedly lenient and that you have the chance for resubmission.
This is of course defeated by the fact that there is no accountability in PDEng. The only form of contact with the PDEng course staff is e-mail. Apparently, the PDEng personnel realized that facing pissed off students wouldn’t be such a great idea, while deciding to make assignment criteria so vague that any interpretation of it can result in a fail.
Finally, the biggest problem I personally have with PDEng is that the entirety of the course personnel are arrogant. They are arrogant concerning the worth of this program. They are arrogant in their position as a course mentor. According to one alumni who participated in the “alumni mentor forums”, students are, apparently, not allowed to criticise PDEng because we don’t have the hindsight to realize how good it is for us.
That is bull. Please realize, students are intelligent creatures. After all, we are pursuing higher education. My English teacher used to say that his job was to make sure our bullshit detectors worked. Guess what? Students can tell what is bullshit and what is not. We don’t whine because we don’t realize that it’s important. I’d like to see you try and find people who whine about having to take arts electives. That’s right, there are none. PDEng, on the other hand, is a grand waste of time and money.
Before taking PDEng, I’d thought it wasn’t a very well implemented program and that it’d have the hope of getting better. I was wrong. I consider PDEng a shameful blot on the faculty and the school.
Basically, PDEng is a symptom of some very possible and disturbing problems in engineering. These problems are not worth the engineering licensing that I have a shot at, particularly when most of the jobs in this field do not require it. I have friends who try to convince me otherwise. I maintain that since programming is ultimately grounded in math and theory, computer scientists will still have a place in development.
Ultimately, the point of this post is to educate. Software engineering is not superior to computer science as is commonly thought. That thought may get softies through those times of pain and suffering, as it did for me. Unfortunately, that is nothing more than wishful thinking. Software may be a good fit if you’re interested in actual software or computer engineering (like formal methods or computer organization). Otherwise, you may find that there’s an area in computer science that may be more suited for you.