Last weekend was my graduation ceremony. I now have a Bachelors of Science degree in Computer Science. I think it’s pretty cool, but now I have some serious thinking to do about my career.
I should have worked to complete my degree immediately after high school, but I wasn’t really interested in it at the time. I attended community college for a couple years, but never finished. The funny part of my not completing my time at community college is that I was originally majoring in whatever their computer programming degree was at the time. I took a class on systems analysis where the professor told us all that with our education we would all end out with IT jobs working for one of the major insurance companies or banks that have big offices here in Columbus, Ohio. Knowing that there was absolutely no way I wanted to spend my life working at that type of company, I changed my major and within a short period of time had given up on finishing even an associate’s degree. So today, 15 or so years, I find myself completing graduating as an adult, with a degree in Computer Science, and having worked for about eight years in IT for one of the banks I wanted to avoid so much, and now hoping a computer related degree will get me out of the same job I once feared it would lead me to.
Last week I had an initial interview with a really small company that seems to have a good idea for a suite of products that should fill a need in a fairly large niche market. This week I have a second interview, this time with the president of the company. This seems to be the kind of opportunity I have been hoping for; a company small enough that I can feel like my contribution is significant to their success, and with a business plan that seems to be well thought out and likely to succeed. There are a lot of details that attract me to this company, and if I was younger I would definitely be ready to jump at the chance to be an early part of a growing technology company like this. But when I was younger I also didn’t have a wife and son who relied on me. I’m leaning towards accepting if they make a good offer, but I have a lot more to consider now than I did a few years ago.
Tonight I finished the last assignments for the fall trimester at school. Of my 3 classes I know I got an A in one, expect to get an A in a second, and am pretty sure I will get a D in the third. Windows Administration and Business Communication were both a lot of work, but not difficult. Calculus was bad. I actually feel like I learned a lot while getting the worst grade of my college career. In any case, it should not hurt my GPA too much, and should be acceptable to let me graduate in two more trimesters without retaking it, so I’m just glad it’s over. After Christmas I start two more classes, Statistics and Web Design and Implementation. Hopefully they won’t be too bad.
I just came across an O’Reilly article about the reasons people switch to Linux, and how most people who switched did not do it out of hatred of Microsoft.
I’ve used Linux off and on since around 1996 or 1997, and am currently in one of the rare periods where there is no Linux box anywhere in my house. I think in a lot of ways it comes down to choosing the best tool for the job. In 1998 I built a dual-homed Redhat box to act as my firewall for my home network. At the time you could not just buy a Linksys router for $30 and Linux was a cheaper and better solution that Windows. When I decided I wanted to learn PHP and mySQL, the obvious solution was to stick a Linux box in the closet. When KDE became stable enough to actually use, and quit leaving core dump files all over the system, I started using Linux for my primary desktop. There was a couple year period where I hardly touched a Windows machine outside of work. As a computer science student, most of my labs have to be compiled to run on the schools Solaris machines, and being able to develop on Linux (using KDevelop, by the way) greatly increased my productivity compared to students who used Windows to edit files and had to copy them to the remote Sun box just to try to compile and debug. Right now I’m back to using Windows XP on my primary machine. I’m past most of the coding classes now, and the coding classes I have left are focusing on VB.Net. I’m also taking my communications classes that include assignments requiring specific features in Microsoft Office like tracking changes and embedding charts creating in Excel in Word docs. Right now Windows is the best tool for what I need to do. I still use Thunderbird as my mail client, and was even able to transfer my old messages and settings from my last Linux box to Windows.
So, after next summer I’ll be done with my degree and won’t have that to weigh on my OS decision. What will I choose? I just don’t know. If I’m still playing with c# in my spare time I might stick with Windows XP, or move to Vista. Then again I might just buy a Mac.
A while back I posted about Paul Graham’s Startup School. Basically he helps groups of CS students start a company by giving them business advice and just enough money for them to rent a cheap office, buy bandwidth and some computer equipment, and buy a few months supply of Ramen Noodles and mac and cheese. The kids then spend a few months focusing on building a product and hopefully end up with a commercially viable company when they are done. I just came across a blog entry from a guy named Chris Sacca who attended one of the Startup School sessions at Harvard’s Science Center. Check it out here.
The concepts in my Calculus class seem cool enough, but I’m just barely passing. Each week we get problems assigned and I do ok on them, but on the first exam I just blanked out. There is a big difference in reviewing a section in the textbook and solving several problems using a particular technique and getting a list of problems where you have to figure out what techniques are appropriate. The real bummer of the whole deal is that if I exclude the math classes I’d have a 4.0 GPA instead of my 3.7 or whatever it is.
Oddly, the paper from my last post received a perfect score while the class average was only 88%. Now if I could be that lucky in my calculus class…
This is a paper I just finished for my technical communications class. I argue that software development should be considered as a creative art like other forms of writing. It’s not especially well written as it was one of those “write a paper by next week in your spare time between work and other classes” type assignments and I had to throw it together in a few hours, but the main point is still valid. Maybe another argument for coding being creative is the fact I’m better at it than I am writing papers.
I think that the process of creating software applications should be considered as a creative act with many similarities to other forms of writing. Some people believe that software code is simply a technical specification to tell a computer what to do, but there are several similarities between creating a software program and other forms of writing. A person writing a novel uses the rules of their language to arrange words in the correct order to express their story in the same way a computer programmer uses the rules of a programming language to provide instructions for their computer. Changes in software development methodologies have removed some of the creative aspects in an effort to improve productivity, but even some of the changes which remove creativity have direct counterparts in the methods literary writers use.
This is an issue that was addressed as a part of a lawsuit a few years ago about a software program called DeCSS which allowed users to decrypt DVD movies. The software could be used to extract a movie from a DVD for the purpose of piracy, but it could also be used for legal purposes such as allowing DVD movies to be viewed on operating systems that could not otherwise play them. Most of the issues argued in the lawsuit dealt with whether the decryption method was a trade secret of the movie industry and if viewing movies on equipment not specifically sanctioned by the movie industry was considered to be a use consumers are allowed, but the issue of whether the actual source code was a form of literature protected by the first amendment was also argued. The lawyers for the movie industry argued that the source code is a functional specification outlining their intellectual property, while the defendants argued it was a creative work. The movie industry won their lawsuit, but many factors not related to the creativity of code were considered.
A part of current software development methodology is the use of design patterns. A design pattern is a common way of solving a reoccurring problem, and they are used by all developers. If a developer figures out a way to solve a problem once and later reuses the solution to solve a similar problem he has used the concept of a design pattern even if he didn’t realize it. The current trend is to formalize this process into commonly known patterns to solve common problems, and modern developers can piece together the known solutions into a general framework for their project and concentrate on tying it all together.
Many fiction writers also use common plot structures and plot devices to build their stories, which is another application of the concept of a design pattern. The author can then focus their efforts on creating the unique parts of their story to tie the pieces together. Anyone who read a few of the Hardy Boys mystery books when they were growing up knows the story line of nearly every book. The brothers go on an adventure to try to figure how a crime and how it was committed and by whom. Their adventure doesn’t really help to understand what they are investigating, but somehow, towards the end of the story, the boys would find the hideout of the criminals and would be captured. One of the criminals would then see no harm in telling the boys the entire story of how they committed their crime, presumably since the boys were going to be killed or the criminals were going to flee the country and escape. In the end the police would show up and save the boys. By using a common pattern for the plot the author was able to spend less time developing the plot, or structure, of the books and focus on actually writing. Software developers use design patters in the same way, as a way to reduce the time needed to figure out the structure of a program and focus on actually creating the code.
Both the software developer who organizes his program as a set of design patterns and the author who uses a proven plot structure achieve the same goal. And both face the same drawbacks. They can better predict the amount of time it will take to complete their project, and will produce an end product that follows a proven formula. Neither is likely to be as creative as if they had written their entire project from scratch.
Another reason software development needs to be considered as a creative act is that if identical program specifications are given to multiple developers, each will create unique code to implement their solution. This can be illustrated by the fact that Computer Science students in a programming class create unique solutions to their lab assignments, just as students in an English class will create unique papers when all assigned to research the same topic. If programming was simply the act of translating the specifications into a language the computer can understand, each student would produce an identical solution.
The process for developing software and other forms of writing are similar, and personal style and experience are evident in the final product. This ability for software developers to express their personal style in their work indicates that the process is a creative one.