Thursday, January 24, 2008

On Computer Science Degrees

I graduated in 1996 from a fairly prestigious computer science program. It took me 5 and a half years to get the degree, which only put me about nine months behind the average CS student (and that was having a wife and two kids by the time I graduated). Through most of my degree, I was also punishing myself extra by working full time (to support said wife and kids). There were days that I wanted to call professor:sleep(infinity). on my professors, not the least of which because I knew I'd never be using this stuff in real life. Now, nearly 12 years later, I can honestly say that I was SO wrong.

It is now interesting to look around at the debate that seems to be raging about whether Computer Science degrees are useful, whether a more vocational approach should be favored, and whether anything learned in academia is valuable to those of us who build software instead of write papers for a living. To get a feel for the argument, you can see What Good is a CS Degree, No Disrespect, and The Perils of Java Schools. The choice of blogs here is intentional. I admit to my bias: Computer Science degrees are essential, and, furthermore, as Joel says, they have to be hard. Unless your desire is to be a technician.

Now, the caveat in there is that if all you have is a CS degree, with nothing else on your resume, you better have one-heck of an interesting project that you worked on in school. I've been involved in hiring through most of my 14 years of real-world experience and I've found two things to be generally true of people with a good CS degree:

People with a Good CS Degree Can Solve Problems

Computer science is about abstraction, in many ways. In fact, if you look at any given running system, you will see many layers of abstraction: From the bottom up, the OS abstracts the hardware and the run-time abstracts the OS. Coming from the other end, you generally have requirements that abstract a business need and a DSL (or an API...same thing) that abstracts pieces of those requirements. Sitting in the middle is the application: the domain of the programmer. And one thing that computer science programs are good at doing is teaching people to think abstractly.

Unfortunately, this is not the end of the discussion. If it were, there would be no debate. That leads us into my second finding:

People with a Good CS Degrees Cannot Always Code

I remember interviewing a recent graduate from a reasonable computer science program. He had recently been awarded his Master's degree. He was a good thinker, but it became increasingly clear in the interview that all he could do was think. He didn't have a shred of code in him.

Coming out of a computer science program expecting to have all of the bases covered is not realistic. The CS degree gives a very solid foundation, but it is still only a foundation. Unfortunately, because of experiences like mine above, I won't take a CS degree as evidence alone that you will be able to learn to develop software. I want to see that you have really coded, either in a part-time job or internship, in a real project at school, or a personal or open source project. I'm not looking for perfect code (I still haven't found my own perfect code); I'm just looking for proof that the rubber has met the road somewhere.

My final observation about this:

Sometime, Somewhere, You Will Need It

I can't count how many times I said, "I'll never use this." Like I'm ever going to write a compiler. Sure, I'm going to write an operating system. The only people who will use probabilities are the people teaching them. Whine, whine, whine. I freely admit it. I also regret it.

You see, I did write that compiler - it was a DSL for doing SQL-like queries against a content management system.

Oh, and I did write that operating system - it was a scheduler for a game.

And, yeah, about that probability class - I'm now learning all about searching and relevance ranking.

Sure, I never had to go "all the way", but the classes didn't teach that anyway. The classes laid a foundation. They showed me the toolkit I have available. And, to date, while the interfaces to the tools may have changed somewhat (rubber instead of plastic handles), the toolkit hasn't really evolved that much in that last 10 years. I'm not seeing anything to indicate that it will be changing much in the next ten.

Fortunately, so far, I'm doing OK (I think) even given the things I never thought I'd use. With hindsight now, I wonder how much better off I'd be if I had embraced it and said, "I wonder how I'll be able to use this," instead of complaining that I never would. Remember, programming is an abstraction. Among all the other abstractions above, it is also an abstraction between what needs to be done and the best way to get it done, and that is what the Computer Science degree is all about.

Wednesday, January 23, 2008

My Twitter Experiment

The world has been raving about Twitter for some time now. I like to give fads a chance to settle in to see whether I can find value in them or not.

Twitter has reached its settle-point in my continuum. I'm now going to try it out for a while. Feel free to follow me: I am "SoftwareMaven".

My experiment here is to determine if I can find a deeper layer of the web, below the standard search tier, of interesting information, especially in fast-changing arenas. If, however, it turns out to be another method of providing up-to-the-minute gossip, then I will probably tune out.

If you are working on interesting things throughout your day, let me know. I'm interested in finding interesting people to follow myself.

Saturday, January 5, 2008

A new year. Always a good time to take a look around and see what needs updating. It was painfully obvious that my blog needed a face lift. So, I officially announce my newly refaced blog.

Aside from the template change, I've changed the name and URL of my blog as well. Originally, I had an idea for where I wanted to take my blog that made sense under the 'cmssphere' name; but, as I've looked at where my blog has really gone, I realized the name just didn't fit.

The Software Maven

Wikipedia defines a Maven as
...a trusted expert in a particular field, who seeks to pass his or her knowledge on to others.

Of course, only time will tell if I can gain your trust, but in the mean time, I'm certainly up for trying to pass on my knowledge to others on the one field I actually know something about: software.

As the name implies, software will continue to be the primary focus of this blog: how do we get from an idea to dollars in pocket.

Innerbrane.com

First, no, I didn't spell it wrong.

Innerbrane might be a pre-fledgling, not-quite-conceived, perhaps soon-going-to-be company. As my newly tooled "About the Software Maven" states, I've become engaged in developing a massively multiplayer online game. Innerbrane might, just might, become the vehicle for that. If not, it might become the vehicle for something else.

In String Theory, brane provide an anchor point for certain kinds of strings to connect to. Lots of facinating things come out of the math from them, but the one I like the best is that the entire universe is a holographic view of strings connected to a brane that surrounds the universe (please remember, I am the software maven, not the physics maven; my pseudo-understanding comes from popular science reading :). I'm hoping that I can find some connate relationship in the gaming world.

Even more beautiful is that I can change the name and URL of the blog without affecting you at all. I hope you enjoy the new look!