Posts Tagged ‘School’

Professional development, moar like ulcer development mirite?

Saturday, December 8th, 2007

So I mentioned before that I was worried about the inclusion of PDEng in my reasoning towards my departure from engineering. Why was this? I felt that PDEng, while a horrid abortion of a program, was not the main consideration in my decision. In fact, it had very little to do with the decision. I know that a few people have seized it and have believed to have figured me out, but I assure you, being rid of PDEng was a side benefit. So in an attempt to repair the legitimacy of my last post, I’m going to attempt to reason out my thinking behind PDEng.

And that’s why I was worried. PDEng represented a different aspect of the program than what I was considering. My decision was largely motivated by my own interests in the field of computer science and mathematics and the fact that software engineering was not where they lay. Another part of my concern was the manner in which engineering has set itself up and the way that it is contrasted to the math way of doing things, which I much prefer.

PDEng was simply brought up as an example of the engineering way. That’s all. Devoting such a large portion of my post to PDEng was probably a mistake in this sense, and I should have separated the problems of PDEng into its own post like this one.

Of course, this is not even considering the sheer stupidity one would have to be steeped in to leave software engineering because of PDEng. Let’s look at this carefully now. Essentially, if someone leaves software engineering to go to computer science because of PDEng, they are an enormous retard.

I wasn’t a stranger to many things about first year engineering at Waterloo. I knew about the murderous PHYS 115 midterm. And I knew about PDEng. I was completely expecting the thing to be awful and it shattered my expectations and was absolutely 10/10 A+++ horrid. But seriously, if you’re hard set on becoming an engineer, PDEng should not deter you from doing so. If I really wanted to become a software engineer, I’d just suck it up and bitch about it like everyone else is doing. It really isn’t worth leaving over.

And it really isn’t worth leaving over when the brain surgeons over at CECS decide to spawn more of their hellish program over the rest of the coop program. Yes, I knew about WatPD too. I don’t just jump from program to program all willy-nilly. I do my goddamn research and know what the hell I’m getting myself into. So, I’d have to be an illiterate monkey if I were switching to CS over PDEng, because I’d be right back where the hell I started: having to take another retarded professionalism course over coop.

In conclusion, no, I did not leave engineering because of PDEng. As I’ve mentioned, I’d have to be a gigantic retard to have done so. Does this mean PDEng isn’t bad? Oh hells no. PDEng is still a gigantic pile of fecal matter and it appears that it’s not going to change very quickly. And now we have five more piles to deal with.

What is a 2A?

Sunday, November 18th, 2007

So I’ve noticed that I’ve neglected my posting duties on my blog. I’ve also noticed that I’ve omitted and missed many things I would have liked to talk about, but unfortunately, I haven’t had the time for it. Now then, technically, midterms are over for me now, so that means another installment of WTF do I think of my classes and profs! Elation!

Of course, things are much different this term than in my first year. This has to do with my decision to leave the world of software engineering and fly under the flag of computer science and pure mathematics. Thus far, my classes are indicating that I made a very good decision.

MATH 237 — Calculus 3 for Honours Mathematics: Wolczuk

The interesting thing about switching from engineering to math is the fact that many of the courses you need to continue on taking are in fact courses that cover material you’ve already covered, except they are rife with theorems and proofs that you’ve skimmed over or handwaved over. Such is the case in calculus.

The two course sequence for most ECEs (this includes SE, Nano, and Syde; you’re all in ECE), MATH 117 and 119 covers up to and includes multivariable calculus (partial differentiation, multiple integrals, etc). This same two course sequence is stretched out to three courses in math (MATH 137, 138, 237).

The prof for this course, Wolczuk is the happiest man on earth. No, really. No one can be that happy at 8:30 in the morning — except him. He starts off every class with a little puzzle-y thing and throws in random jokes that you groan at, but is fairly hilarious. He’s a great prof and I’m glad that I decided to not go to my assigned section and that I even took this course this term, dropping CS 251 for it.

MATH 239 — Introduction to Combinatorics: Jao

As far as I understand, combinatorics is very, very relevant to computer science. I expected the course to be fairly interesting and one of the easier courses. Of course, since I’m basically doing easier courses than I expected, this course seems to be surfacing near the top of the difficulty pile. Still, not too bad. I also enjoy this talk about graphs and stuff quite a bit too.

Our prof, Jao, is fairy mediocre. He can speak English and without an accent, which is excellent. But he seems to like explaining how he teaches more than actual teaching. He’s not horrible, but he’s not the best prof in the world either.

MATH 235 — Linear Algebra 2 for Honours Mathematics: Celmins

Linear algebra was one of the things I hoped I’d never have to take again. It seemed fairly dull, and all it was was manipulating blocks of matrices. Of course, it’s slightly more interesting in the math context, what with having to understand various theorems rather than blindly row reduce everything as in engineering. Still, not my favourite class even thought it is ridiculously easy.

Celmins is a fairly interesting prof. He likes to go on tangents and tell us interesting things that he forgets he told us. His way of teaching is very fluid and can be hard to follow at times. Still, I prefer him to mechanical, static profs, since I can extract some interesting bits once in a while.

HIST 278 — The USSR and World War II: The Great Patriotic War: Statiev

This is a class that I chose purely out of interest. It was a huge gamble, since I had no idea how the term was going to turn out or how anything worked in the History department. In the end, it paid off. Here, I got a really interesting class about an influential moment in history that I was actually interested in (no, really, Canadian history is really not the most exciting thing in the world) and one with very little work (midterm, term paper, final) and a very good prof.

Statiev is Russian. This means he has a noticeable accent, but this also means that he knows his crap. He’s pretty interesting and understandable and throws out a few bits of hilarity. He really knows his stuff about Eastern European and military history. I wouldn’t mind taking another one of his classes.

CS 241 — Foundations of Sequential Programs: Becker

CS 241 is a pretty interesting class, especially following the work that I did over the work term. Ultimately, CS 241 is a course about how programs work on the computer. We start off with hardware level programming, with machine and assembly code. We work our way up into introductions to formal languages and language theory and through basic scanning and parsing, and by the end of the course, we write our own mini compiler.

Becker is a really good prof. He teaches really well. I think that’s about it.

CS 251 — Computer Organization and Design: Madavvat

This is a course that I really wish I didn’t have to take, especially after SE 141. Unfortunately, I still have to. I was enrolled at the beginning of the term. That changed when I realized that the prof was not very good and was not relevant to the assignments. I also realized that now that I’m in math, I can take courses in what order I want, when I want. Score.

Madavvat is slow. And has a heavy accent. No, really, ridiculously slow. Slow.

Course Sequencing!

Saturday, October 6th, 2007

So I’ve decided to stop being lazy and have a look at how I’d sequence my courses, since I noticed that PMATH courses have some crazy offering schedules, like ONLY OFFERED IN FALL OF EVEN YEARS. It didn’t seem smart to leave it up to chance. And it wasn’t. It took me a bit to figure out the right sequence, and some anger, in that some courses that I really wanted to take (Set Theory and Model Theory, Non-Commutative Algebra) were offered whenever I was on coop. But I think I’ve got this thing figured out.

2B (Spring 2008)

CS 240 – Data Structures and Data Management
CS 246 – Software Abstraction and Specification
STAT 230 – Probability
PMATH 345 – Polynomials, Rings, and Fields
CS 251 – Computer Organization and Design

3A (Winter 2009)

CS 341 – Algorithms
CS 360 – Theory of Computation
CS 350 – Operating Systems
PMATH 340 – Elementary Number Theory
PMATH 346 – Group Theory

3B (Fall 2009)

CS 462 – Formal Languages and Parsing
PMATH 352 – Complex Analysis
PMATH 432 – First order Logic and Computability
PMATH 442 – Fields and Galois Theory
STAT 231 – Statistics

4A (Spring 2010)

CS 466 – Algorithm Design and Analysis
CS 486 – Introduction to Artificial Intelligence
PMATH 351 – Real Analysis
PMATH 360 – Geometry

4B (Winter 2011)

CS 444 – Compiler Construction
CS 442 – Principles of Programming Languages
PMATH 467 – Topology
PMATH 440 – Analytic Number Theory

So long and thanks for all the lulz

Monday, September 17th, 2007

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.

Software and Social Justice Revisited

Sunday, July 22nd, 2007

Several months ago, I posted something about Eben Moglen’s talk on free software and social justice. In it, he goes through how software will control the 21st century and how free software will enable us, the people, to achieve social justice and freedom without the need for violent upheaval.

The guest speaker at CCF was talking about social justice, and it was a very good talk. One of the questions that was asked of him was, what do we do? His answer: right now, we can’t do anything, except to work hard through school and get into a position where you can do something.

Something I’ve always tried to do is to connect everything I do back to my faith. Whether it’s design, math, or programming, there will always be some way to connect what we do with God. And why not? After all, he did make it so that ??¬? can never be true and that ?f?df(x)dx=f(x).

And so I’m always trying to find out what God would have me do with the skills and interests he’s placed in me. How does typography further the kingdom? How do web standards advance the kingdom? How do recursive descent parsers expand the kingdom?

So the obvious thing is to use your gifts at church. And obviously, that’s too easy. It’s great for discovering and developing your gifts, but Jesus called us to the ends of the earth. The extent of our talents should not be the church.

So what other ways are there to excercise your skills? Christ called us to go out and serve the weak, the needy, the broken, and in doing so, show them the love of Christ. The problem is that there’s so much to do. The hungry, the sick, the oppressed, it’s impossible to serve all of them especially with our finite skillsets.

I am studying software engineering. Presumably, I’m going to go on to become a software developer and come up with some hot algorithms to parse some hot language. But how does software accomplish the Great Commission? And that’s when I read and listened to Eben Moglen’s “Software and Community in the Early 21st Century”. Afterwards, what I had to do was made much clearer.

Below, is the transcript from the talk; thanks to Geof Glass who transcribed it.

(more…)