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.

Monday, September 17, 2007

Now I know what I don't know

The first day at a job is almost always overwhelming for the software developer joining a new team. Lots of new people to meet, learning the layout of the office (where the heck is the bathroom?!), figuring out the work environment, setting up email accounts, source code repository accounts, and Wiki accounts, getting the architectural overview, reading a stack of design documents and developer documentation.. oh and don't forget about all the forms and HR stuff that needs to be done too.

Well, that's all well and good but on top of all of that, I got a fairly detailed overview of a lot of the science behind the work that we're doing at OpGen. Wow! Do I really know nothing about biology!! My supervisor was going into these great descriptions of how DNA molecules are separated and prepared for imaging and I have to interrupt him and ask, "Err.. DNA is a single molecule? What's a molecule again?" Throughout it all, he was quite patient with me and did a pretty good job of dumbing it all down so that I could at least nod mutely when he asked if I understood.

The main thing that I learned today on my first day was that I could really use an intro course on microbiology .. one that doesn't require me to study, do homework, or exert myself too much, of course. Aside from that fact, using the shallow understanding that I was able to gain today, I am really impressed by what the guys at OpGen have been able to accomplish. I've heard people say that working with computers and software seems like magic ... well, I think that some of this biology and chemistry work is pretty freaking magical. I hope to learn a lot more about it and get more comfortable with it so that it doesn't seem quite so mystical.

I left the office today feeling like my brain was oozing out of my ears (Excuse me, I think you've got some on your shoe). I'm hoping a good night's sleep will bring me back to work tomorrow well-rested and ready to start all over again.

Sunday, September 16, 2007

A new adventure

Here, on the evening before my first day at work at my new job, I sit feeling a unique mix of emotions as I contemplate this new adventure that lies before me.

Excitement
I'm not the sort of person that will change jobs just because they can. I don't lightly leave behind a job where there are lots of people that I like and respect and where I have the tools and ability to work on a lot of various (and often interesting) projects. What draws me away from a secure and comfortable environment like that is the exciting possibility of really doing something meaningful. My new company is called OpGen, which is located here in Madison, WI where I live and I will be working full-time as a software developer. I don't want to shoot my mouth off about what I'll be working on until I know for sure that I'm not giving away any company secrets, so for now I'll just point you to this press release on the company website. It gives a pretty good synopsis of the technology we're dealing with and the type of market we're going for. I think this quote pretty much sums up what has me so excited about this company:
“There is a huge unmet need for systems to rapidly and accurately diagnose clinical infections...,” added Corey Mulloy of Highland. “We believe that OpGen’s technology is uniquely placed to meet this need and to transform clinical microbiology.”

Loss
As I mentioned, I'm leaving behind a group of people that I've worked with over the last three years with whom I've created very healthy and positive working relationships as well as friendships. I'm also leaving behind a position where I had the ability to work on a large variety of projects and tasks. I had the freedom to explore some of my own ideas and work on things that interested me. I can also say that I feel that everyone I worked with felt that I was doing something worthwhile and that I was a valuable part of the team. Walking away from a situation like that was the hardest part of making this change.

Optimism
As I've been explaining my new position to friends and family, I keep saying that I'm very optimistic about the opportunity .. hopeful that all if it's brilliant possibilities come to fruition. Truly, in my mind, there is no better situation for me to be in at this point in my life. I will be engaged in a brand new software development project, working to build a product that will provide genuine, revolutionary changes in a vitally important field like health care. I will be part of a small team, helping to shape the very foundation of the software architecture. And to boot, I will be invested in the company such that if, as everyone at OpGen expects, the company and it's product is wildly successful we all stand to benefit financially. I couldn't imagine a better starting point for a new job.

Fear
It's been frequently stated that programmers are optimists at heart, yet they have a keen sense for all of the minute things that could go wrong in any enterprise. The same is true here in this situation. As optimistic and excited as I am about the future, I know all too well what can happen with software projects. Late, over budget, failure to deliver what customers wanted, stress, burnout.... all this is possible and more. The optimist in me says that this company knows what it's doing .. I know what I'm doing, dangit!. I've never worked in a venture capital funded start-up company before. The rules and expectations are different than anything I've been a part of before. Will I be able to handle it? What if it turns out I'm just not as good a hire as they thought I'd be? What if it turns out I just downright suck?

Confidence
When it comes right down to it, I feel that this is the right position for me at this time in my life. I'm ready for something exciting .. something challenging .. something that just might keep me scared enough to make sure I work my butt off every day trying to really make a difference in the world. Sure, a part of me really is scared of the things I mentioned above, but I feel pretty confident that OpGen and I are a good fit. They did decide to hire me after all. They think that I have what it takes to help them meet their goals. I feel confident that I am the right person for the job and that we're going to do some pretty awesome stuff together.

It's a pretty wild mish-mash of thoughts and feelings I'm having, but at this moment I can't wait for the alarm clock to go off tomorrow morning. I'm ready to get started and see what happens. Let's go!

Moving forward

I created this blog back in March of 2007, intending it to be software development blog containing posts about various topics related to my field and my thoughts, in general. I chose "Moving forward" as the name of the blog to reflect what I think is a core tenet of my career/programming/personal ideology .. I always want to be taking the next steps, learning new things, exposing myself to new ideas, technologies, and environments.

Well, I wasn't very good about maintaining that iteration of this blog, but the title has taken on new meaning for me. Tomorrow is my first day at a new job! In many ways this new opportunity is just the latest way that I'm trying to move myself forward. My hope is that I can use this blog to chronicle and share the new things I am exposed to and the new ways of thinking and working that I learn as I move forward in my career.