I'm always looking for ways to improve myself as a programmer.  It usually involves something fun, but after reading this post, I think my new area of improvement is to stop increasing my technical debt.

From a related post from Steve McConnell:

Other debt accumulates from taking hundreds or thousands of small shortcuts--generic variable names, sparse comments, creating one class in a case where you should create two, not following coding conventions, and so on. This kind of debt is like credit card debt.

I was doing a review of some relatively mature (3 years) code today with the rest of my team and I found more instances of this kind of technical debt than I would like to admit.

There are other kinds of technical debt, and it's easy to hate them and the reasons for incurring them, but this small stuff is totally under my control.  And it has to stop.

Today was the last day of work for one of my co-workers.  It's weird to call him that, he was a friend for a long time before he was a co-worker, but it's the co-working part of our relationship that's coming to an end.

We've worked together for more than three and a half years, and in that time, we were able to build some really cool stuff.  We worked together so well that at one point, when we were the only two developers, we were routinely referred to as "Navid," a portmanteau of our first names.

I will miss him for many reasons, but one sticks out in my mind.  It took me nearly all of the four weeks notice he gave us to finally realize that I'll miss him because of how much he challenged me.  He was always learning.  And, everything he learned about was relevant to our development in a significant way.  He'd routinely start sentences like "So I read this book over the weekend on data warehousing..." or "Do you know what's so cool about python decorators?"  When he did, I knew that for the next hour or two of my life, I would be treated to a session of mind expanding dialog.  I know I am not the same person today that I would have been if it weren't for the last few years, working with him.

So, I'm going to miss him.

I am happy beyond words for the changes he and his family are able to undertake, but I'll miss him.

Thanks for the time, Dave.  We'll work together again sometime.

28th Jan, 2009

On People Pleasing

A great quote from one of DHH's latest posts:

There's absolutely no pleasing everyone. You can't and shouldn't try to make everyone love you. The best you can do is make sure that they're hating you for the right reasons.

Being a people pleaser by nature, learning the above has been tough for me.  Especially lately.

Well, I didn't get much of a chance to blog about the NDWall milestone 2 before it flew past this last Saturday.  Dave and I agreed a few weeks ago that milestone 2 would include the following features:

  • Add a configuration/settings area for the application.  The keys are: Display Name, Username, Password, URL
  • Move the downloading of new messages into a thread so that it happens in thebackground.

We set the deadline for this milestone to be last Saturday, the 17th of January.  I guess the first few weeks of the year got away from me, because by the time I woke up Saturday morning, I'd only done the first half of the
assignment.  Add that to the fact that I was out of network range this past weekend (due to a wonderful trip to see Sara's Grandma), and it's time for me to add a virtual $20 to the jar.

I'll post again when I finish up this milestone and we figure out what milestone 3 holds.

19th Jan, 2009

Electronics Nerdery

I've been meaning to blog about this for about two months, so here's a bit of background.

Back in October, a friend (and coworker) of mine and I decided to start playing around with simple electronics in our spare time.  We both bought the Arduino starter kit from Adafruit and during our first meeting, quickly worked through the first few tutorial lessons at ladyada.net.  It didn't take long before we decided to meet every Tuesday for lunch and hack on our new hobby.

In the 4 or 5 meetings we've had so far, we breadboarded an APC (video), scavenged spare parts off a CD-ROM drive and he started putting together a motor shield, among other things.

Sara got me a soldering iron for Christmas and I've been accumulating the necessary tools over the past few weeks, and this past weekend I finally felt ready to do something serious.

When we go up to visit Sara's Grandma, they usually go out thrift store shopping and leave me at home to entertain myself.  I usually read or watch TV, but this time, I set up a small work area and proceeded to go through some of the ladyada.net tutorials.  I first learned how to use my multimeter.  I hadn't ever used one, so I tested continuity, resistance and voltage on nearly everything I had.

Next, I used my soldering iron for the first time.  I joined a couple of jumper wires together with a hook in each and then soldered them together.  It was a little shaky at first, but I eventually made it stick.

With my new found skills, I proceeded to put my Arduino protoshield together. It took me almost two hours, but by the end I had made more than 70 connections and tested them all for continuity.

Here are a couple pictures of the finished shield first next to, then on top of my Arduino:

Arduino and ProtoShield separateArduino and ProtoShield together

After I finished the shield (and ate a bit of lunch), I cleaned up my work area and pursued other activities until Sara returned from her shopping.  I learned in Junkbots, Bugbots, and Bots on Wheels that walkmans and discmans were good candidates for scavenging parts, so Sara picked up a few used ones while she was out.  I spent a good bit of time in the evening disassembling them and I was pleasantly surprised to see all the good parts these little devices offer.  I was also surprised at how different each of the three were internally.

All in all, it was a good day of electronics nerdery.

A friend let me borrow his GH3 for Wii and two guitars.

This game is so much fun, it's emberrassing.

Just after 1:30PM today, I finished up my implementation of the first milestone of the NDWall project.  The best part was trying to figure out to construct the request to post new messages.  Here are a few screen shots of the app:

startentering messagemessage posted

It really doesn't do much other than the two required features.  I haven't profiled it to make sure there are no memory leaks, but I'll do that soon.  The manual memory management of the iPhone is definitely odd for someone like me who's done mostly garbage collected languages in his career.

To learn what I had to for this phase, I relied heavily on reading the sample applications from Apple and through several of the detailed guides that come with the SDK.  The Objective C primer was invaluable, as was the documentation on NSMutableURLRequest.  The documentation browser and search functionality in XCode is pretty good.

Anyway, I feel like I've learned a lot in the past few weeks, and I already have several ideas for milestone 2.  I'll post again when we start that phase.

The best way to learn a new programming language/environment is to make something practical with it.

To that end, Dave and I started a little side project called (at this point) NDWall.  It's an implementation of a "wall" where new messages can be posted and the 10 most recent can be viewed.  The server-side api is very simple.  Just two methods (GET and POST) on the api resource.  The data transport is JSON, the lingua franca of web APIs.

We're each making our own version of the client, written in Objective-C using the iPhone SDK.  To help light the fire, the first version of the client must be written by midnight on Saturday, October 18th.  The first version must do just two things:

  • Allow posting a new message to the server.
  • Download and display the last 10 messages from the server.

We started doing this about a month ago, but kept pushing the deadline off as it approached, so this time, we agreed that whoever didn't deliver this time would have to put $20 into a jar*.

I think it's working.  This past Saturday, there was much documentation reading and code typing and instant message sending going on.  Tonight, I got my client to pull the data down for the first time.

This is fun.

* jar money purpose not determined at this time.

9th Sep, 2008

Mozilla Ubiquity

Wow. Wow. Wow.  Ubiquity. Like quicksilver for your web browser.

All the cards I got for my 30th birthday.

I want to thank everyone for their great outpouring of sorrow and commiseration when they heard I had reached my 30th birthday.  I guess I have to start "acting my age" and "knowing better," or something like that.

Anyway, thanks to everyone who sent a card.

(-:

Categories