Wednesday, September 26, 2007

Flow

The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.

-Frederick P. Brooks, "No Silver Bullet"

I love that quote. Brooks is an outstanding writer and a great source of a lot of good quotes about programmers and software development and they're just as true today as when he wrote them. Despite all of the unbelievable changes in hardware, the proliferation of programming languages and software frameworks, and decades of evolving and adapting our approaches to making software we are still find a lot in common with programmers of 40 years ago.

".. slightly removed from pure thought-stuff" ... Dealing with such a delicate and fleeting substance requires a good deal of concentration, persistence, and awareness. When building these castles of air you often find yourself juggling bricks and mortar, moving pieces and materials around until they fit just right. Suffering any interruptions during this process can cause you to drop what you're doing and struggle to pick it back up again. Worse yet you can drop things into a configuration where it seems that everything is stable yet, hidden from view, a flaw is left waiting for the day when it brings things crashing down.

Most programmers know about the idea of flow. If they don't know it by that name, their eyes will light up with recognition as you go into explaining that state of mind where you become so in tune with the task at hand that your thoughts speed up and become perfectly clear, code flies from your fingers and, when you finally come out of it, you realize that time has passed at a seemingly impossible rate.

This was something that, for the past year, at my old job I very rarely experienced. Most days I was dealing with a number of little projects or small tasks or bug fixes simultaneously. There were interruptions as customer sites would experience problems or there was a meeting to attend or another developer wanted to ask a question. I pretty much stopped entering into the flow state altogether.

But for the last two days I've been spending a lot of time flowing as I gather understanding about this project I'm working on and come up with ideas of what is needed and how to implement it. I have people to go to when I need clarification or help fleshing out an idea, but I have a free reign to write the code and pretty much no distractions to keep me from it. It's an amazing feeling and I can honestly say I haven't had this much fun at work in some time. I know it can't possibly last forever, but I'm so pleased to be back in a position where I can write code and create some of my own castles in the air again.

Monday, September 24, 2007

Can't turn the brain off

After lying in bed and trying to go to sleep for a while I realized that my mind is just full of thoughts and that perhaps a blog post might be the best sleep pill I can take right now. Chances are that I have some sort of personality disorder that causes me to be thinking about work while I'm trying to go to sleep ... or perhaps it's just that I'm pretty excited about actually getting in and starting to really contribute to my new team. As mentioned in previous entries, I spent a good chunk of last week trying to learn a bunch of new stuff without appearing to be a complete dullard. But today I got to actually start showing people that I can actually do some things and, I'm happy to say, I got some pretty positive feedback.

I think I'm really excited because I'm beginning to see where I can really start making a difference in the way that software is created at OpGen. Most of the codebase that they have is pretty much considered to be a working protoype, with just about everything written in Perl/Tk. Perl/Tk is NOT what I would choose to implement a large-scale product that you're hoping to ship to a customers site. There are one or two projects lying around that are written in Java, but it's hardly the Java that I recognize. Clearly it was prototype code, written by somebody that grew up programming in something other than an object-oriented programming language.

Dealing with these sub-optimal (in my mind) software codebases isn't incredibly fun, but it's not really all that hard either. However the really fun part is that I am getting to start on a fresh, new Java project with the intent that I will be building up a Java framework that will eventually replace all (or most of) the existing prototype code that has been written to date. That will be a long haul, for certain, but I'm excited about getting started at pretty much ground zero and making technology, framework, and design choices. I've pretty much been told that I am going to be "The Java Guy" and that I can (within reason) run things the way I want. That is pretty exciting to me!

I'm really pleased to see how some of things that I've learned from my previous job can really be used at OpGen to make a real positive impact in productivity and ease-of-development. I have to laugh a little when I say this, but first just using an IDE. I'm not entirely sure how the Java code that exists got developed, but rumor has it that it was created only using vi and ant. To me, that's kind of like building a doghouse using only 19th century tools. Sure you can do it, and there's some amount of geek credibility to be earned there, but wouldn't you rather use a cordless drill and a chop saw? Beyond just simple stuff like that, I'm very excited about the possibilities of using Hibernate (these guys have never heard of an ORM tool) for simplifying their database access routines and JavaSpaces for some robust, distributed processing. It's pretty exciting seeing that you've actually learned some neat tricks that you can apply in other situations.

I'm very happy about the way this week is starting off and I'm hoping to demo some software tomorrow and get going on my database access framework and start working on getting some stuff really cooking. I don't know if this is going to help me sleep or if I'm just more amped up now than when I started.

Fixed my first bug

Hey, I fixed my first bug today! Man, it feels soooo good to be playing around with code again... tracing through the lines and finding that little missing bit of logic that's causing a problem. I even sat down and wrote a unit test around the stuff that I thought was misbehaving, which really helped point me in the direction of where the bug really was. It's like a surge of adrenaline, I'm actually doing something useful at work now! Hooray!

PS - I don't expect to post like this every time I do something. It's just that this is such a welcome change from last week.

Saturday, September 22, 2007

House of business cards


When I left my old job I had a big stack of business cards and I wasn't sure what to do with them. We decided that they would be pretty good for making a house of cards out of. While I didn't have enough to make the house I wanted, it turned out pretty well nonetheless. I have to thank my father for teaching me how to make houses out of cards. I had a fun time doing this.

Friday, September 21, 2007

That delightful aroma

Ahhh, the smell of something to actually start working on!

This week has been full of ups and downs, strongly correlated with how much I feel like I'm understanding the things that I'm learning. There are peaks of a near euphoria as a couple of neurons fire simultaneously and a flash of insight occurs. It's like sifting through a box of puzzle pieces and just happening to stumble across two pieces that fit together. Then there are the low valleys where it seems that I will never, ever understand what the heck is going on. This has been extremely frustrating .. like sifting through those puzzle pieces and realizing that there's actually no picture on either side. The good news is that I'm making steady progress and some of that is behind me now and I feel somewhat confident with some of the terms and concepts that get used here in daily conversation.

And that shaky level of confidence now means that I'm actually ready to contemplate contributing something useful to this company, which is exciting and daunting all at once. It looks like I'm going to be looking into creating a software workflow tool to automate what is now an intensive manual process of messing around with files on the file system. The good news is that there are a couple of existing applications that I will just be modifying, which keeps the scope of the work down and allows me to get familiar with code that's already written. But I will also be starting some new modules that will hopefully be the start of a new software framework, written in Java, that is used all over the place. I've written up the design document and will hopefully get started cutting some code on

Wednesday, September 19, 2007

The code monkey and the computer scientist

Guess which one I am? One of my co-workers, named Thomas, is a bona fide Computer Scientist. Yes, I have a degree (a bachelor's) in Computer Science from Carleton College (did I mention it was a Bachelor of Arts?) but Thomas is the real deal with a PhD from Carnegie Mellon. He is seriously into computational analysis and algorithm development and, at IBM, was part of the team that built Deep Blue! The man has is own Wikipedia entry. Nuff said!

I'm excited to learn what I can from Thomas .. he has an incredible mind and I'm really excited to be working with him.

Second wind


Well the first day was pretty overwhelming for me, I have to say. But yesterday, with a fresh start and about 4 espressos (thanks to the espresso machine in the next cube), I felt a resurgence of my faculties and my ability to actually learn something new. I think my brain had just reached its saturation point and I needed a night to digest what I'd learned so that I could start over again.

One of my colleagues, whose background is in Computer Science but who has been in the molecular biology field for some time, lent me this book that looks to be a very good introduction to the field in which I'll be working. It's especially nice for me because, well, there's a monkey on the cover and lots of goofy little cartoons in the book along with chemical compounds and all sorts of other notation that is new to me. I read about 5 chapters last night and what's really funny is that I actually remember a lot of this stuff as I am reading it. It's been buried deep in the sediment of my brain and is getting dusted off a bit.

Additionally, I actually got to start looking at code yesterday and will be doing so more today. I'm excited to actually start looking at what we have right now and what we're going to need to build/re-build. I'm excited because it sounds like my first project may be building some common database access routines in Java and using those to take some prepared data from the file system, parse it, and put it in the database. Talk about something familiar!

So, I'm feeling quite good today (1 espresso already). I have to find out if anyone cares if I reinstall this computer I'm on ... it's got quite a bit of crap on it from the guy that was here previously and I like to start with a clean slate. So, in comparison to my old job, here there's a +1 for not having to construct my own desk but a -1 for not having a tip-top-of-the-line machine cleanly installed for my use. That's okay, I love reinstalling systems.