There were several times this week I was happy to be taking Software Engineering. At the career fair, a dude from Bloomberg asked me a question about the stack versus the heap that I would not have been able to answer otherwise. Later that week, in an interview, I was asked about my familiarity with Agile Development or Extreme Programming, and responded gleefully that I was, coincidentally, reading a book on it. Then the interviewer asked, “what about it stands out?” I responded, “I never would have considered the fifteen unit tests and one thousand acceptance tests I wrote this week to be a crucial part of coding in the past, and yet now it seems obvious.”
The reason I love Computer Science so much is that many of the concepts that underly efficient and creative computing can be extrapolated or abstracted to real life. Reading about and understanding Extreme Programming has proved to be no exception. This weekend, while studying for Algorithms, I for once was able to put aside the notion of spending hours of my study time “preparing” to study (sorting my notes, arraying my highlighters, stapling my notes, drawing a PERT chart of notes, textbook problems, quizzes to tackle, etc) and skip straight to the meat of it–studying. It was a spike solution.
That said, I wish the magenta book was discussed more in class, or quizzed on more heavily. If we are going to read thirty-something chapters of a book, there should be more interaction with the material than quick quiz questions, and if there isn’t time to go over it then maybe there should be less assigned reading. I could do without the papers on errant cruise missiles and catastrophic hyphen omissions if their only purpose is to give us flashy examples of sloppy testing standards. Our own memories of debugging will suffice.
I just read a blog from a fellow classmate in which he said the recent lectures reviewing the concepts of exceptions, try/catch, assertions, typing, and mutability were unnecessary and redundant, and that they flew in the face of the idea of prereqs by refreshing us on information we have already been exposed to in CS307.
The thing is, we are exposed to so many abstract concepts in CS that it’s better for a teacher to err on the side of overlapping one course’s material with another, rather than trying to make college a continuum of new information. Rather than balking at the triviality of walking through basic assertions in three different languages, I think it’s better to just swallow my pride and pay attention. Sure, it’s not as riveting as learning about Dijkstra’s Algorithm for the first time, but when an interviewer asks me to write a code snippet for some simple IO, and I remember to include the try/catch block that makes me look more comprehensive and formal than all the previous applicants, I will be happy.
It’s funny how sometimes I hear complaints that UT focuses too much on theory and doesn’t teach us anything that will enhance our employability. In this class, I don’t hear that complaint, but I hear that some of the lectures are boring, obvious, or something we have seen before. Maybe this means our employability is being enhanced.
This week in Software Engineering we submitted our first project, Collatz. I ended up working down to the wire, but completed everything, with the exception of my Java algorithm calculating the cycle length for 999999 incorrectly. This was rather surprising, considering it wasn’t timing out, and all my other unit tests worked flawlessly. Additionally, my Python program was essentially a direct translation, with HashTables replaced by dictionaries, and it could process 999999. I felt genuinely more stumped than I have in perhaps any other programming class. At least with bugs in larger programs, the complexity obfuscates your program enough so that you don’t feel as stupid as I did debugging my 70 or so lines of Collatz code.
The numerous deliverables have already equipped me with a good deal of industry utility. I could almost feel the release deadlines breathing down my neck as I committed to my repository. I felt very much forced to have a handle on what my project did after writing unit tests, acceptance tests, two programs, and a wiki. I’ve been reading and enjoying Extreme Programming Installed, which is also strengthening my ability to see the project from a higher level view than just code.
The next project is about topological sorting, which is analogous to makefiles. It sounds more difficult than the first, but at least I will have a partner.
I’m excited to be in Professor Downing’s class. When I asked an ’07 alum who his favorite teacher at UT was, he said Downing. His teaching style certainly keeps me awake, which is not to say that the material is uninteresting. I’m excited to learn to use version control and the Google Code Project, and to get exposure to something similar to the collaborative software style outlined in “Extreme Programming”.
This week in class, the lecture I took the most away from was Monday’s, which dealt with code elegance within the 3n + 1 problem, “Collatz”. The code that was given to us was set up in a clean, unitized fashion, with the parameters well-reasoned as opposed to just thrown together, and the classes were packaged with a JUnit file. This gives us a very padded introduction to the concept of unit testing.
I enjoyed the first couple papers we read this week on collegiate happiness. I agree with pretty much all of it, particularly the parts about foreign language and C. The best part of Spanish was the diversity–in my Spanish class there were people in Business, Communications, Music, Football, Math, and others. As much as I enjoy my CS friends, there is a lot of value in diversifying your social circle.