# Fall 2012 Semester in Review

My third semester in the PhD program is over, and it has unquestionably been my hardest yet. I bit off way more than I could chew, this semester was extremely unpleasant and, for the first time since going back to school, I was glad for the semester to end.

I took two 7000-level PhD courses at once (previously I had only done one in a semester) which was part of the problem. Originally I was planning on doing three, but quickly decided that was insane and dropped one of the classes, which I’ll now be taking in the Spring. One of these two remaining classes was material I had never been exposed to at all, and it also happened to be structured in a way that would have made it exceptionally difficult even if I had, while the other was material to which I had minimal exposure. I also took two courses on Coursera during this period of time, both of which I took quite seriously, as though they were credit courses. And if all of that wasn’t crazy enough, I managed to once again get roped into grading.

# A Stroll Through the Complexity Zoo

This Fall, I took a course on Computational Complexity. I’ve been exposed to complexity in Computer Science before, but as an undergrad it rarely went beyond discussing P, NP, and NP-Complete. While I enjoyed the class a great deal, I was slightly disappointed that we mostly studied some of the space complexity classes like PSPACE as well as went much, much deeper in depth on P, NP, and NP-Complete, without covering many of the other complexity classes, of which there are lots.

For a final paper, we had to pick a topic of our own choosing in Complexity Theory and research it on our own. For my topic, I choose to explore a bunch of the other important classes in complexity theory. I had never had any exposure to any of these classes before, so I really enjoyed this project, though I was unable to cover as many classes as I’d have liked, and none of them in as much depth as I was hoping.

Complexity Classes, from Math ∩ Programming

Nonetheless, I’m pretty happy with my paper, which provides an undergraduate-level explanation of 26 other complexity classes, based off The Complexity Zoo, kept by MIT professor Scott Aaronson. I tried to boil these classes down to the bare essentials and explain them with examples in plain english as much as I could. The goal of the paper is to expose those new to Complexity Theory or early in their Computer Science careers to a handful of interesting classes and explain how they relate to each other, the more common classes, and of course the $P =? NP$ question.

# Contents

In December, I posted about my early thoughts on Scala after using it for a short time. Initially, I thought that using Scala didn’t buy very much – the functional style could be adopted in in Java, and the syntax and libraries could be ugly.

Since that time, I’ve been using Scala almost exclusively, and I wish to revise my view: Scala is awesome.

While some of my initial thoughts still stand, particularly that Scala APIs often overuse operator overloading, much of my perception has shifted otherwise. Scala not only allows, but encourages solid functional programming principles that are difficult or impossible in Java.

# Book Review: The Career Programmer

I recently read a book called The Career Programmer by Christopher Duncan. I typically don’t post book reviews unless I really love a book and want to spread the word, but in this case I felt compelled to post in order to spread the warning. I can’t remember a book I’ve hated more.

“The Career Programmer” is meant to be a dispensation of wisdom from a sage, a book that gives younger programmers keen insights from someone who has been in the industry for a long, long time. I tend to really enjoy books like this, so I picked up a copy. Unfortunately, it comes across as an anachronism, like the book time-traveled out of the mid-90′s. While reading it, I felt compelled to double-check the publication year, and was absolutely astonished that it was printed in 2006. The “wisdom” of the book is so hopelessly out of date with the current state of software development that I cannot recommend it to absolutely anyone.

# Getting “Real Work” Done

There are a lot of things that annoy me in my industry: lack of commitment to writing quality code, no discipline regarding tests, and many, many more. These things irritate me, and I see them all the time, but there is one irritation I encounter that is so common that it dwarfs all others, at least in frequency.

How common is it? It’s so common that this post has been in my Drafts for about five years. What I mean is, I wrote it in reaction to someone irritating me at work, but decided not to post it because I was worried they would see it and know I was talking about them. And it’s been in Drafts since that day because I encounter it so often that any day I post it, it will be seen as a response to something that actually happened at work. There hasn’t been a break in the last five years where I could post it without at least one person thinking it was a reference to them. That’s how common it is.

In fact, I know posting even now, it’s going to look like it’s related to an occurrence this week. STFU co-workers, I wrote this shit ages ago.

Anyway, what I’m talking about is developers refusing to do things or complaining about doing things because they distract them from what they call “Real Work.”