2008
06.27

I wanted to talk about a few things relating to being a professional. Specifically, dealing with being a professional software developer. Whether you work for a small contractor, a start-up company, or a monstrous development firm. I want to focus on the idea of job security and the illusion many developers harbor about it.

I ended up discussing the topic with a coworker once. The discussion had ventured to the topic of what happens when a key developer leaves a project. In some teams or projects, the key developer takes with them the potential success of the project. That is, the developer had been employed under the “Superman Syndrome.” This is what happens when a single developer finds themselves in a position to create themselves job security through obscurity. Either they have mastered a complex codebase, memorized certain pieces of information and neglected to share it, or have an extremely high tolerance for bad code. When they leave the project, the remaining members are forced to pick up the pieces (at the peril of their paychecks) or scrap the project. Neither scenario is beneficial.

Under this situation, the developer has created what they believe is job security. The reality of the situation is this is a false sense of security. A lazy company or management may let this slide. It’s a slippery slope and it will only get worse with every day this developer is entrusted with resposibility. The up-tick is that this developer is not likely creating many new technologies, but rather maintaining the seemingly unmaintainable. If you are reading this and think you possess job security, you’re delusional. Your employer has no reason to be tolerant of such behavior; there is always a recent college graduate that can fill your shoes.

The worst kind of Superman is the kind that intentionally does their job in such a bizarre manner that others find it difficult to work with their products. By this I mean they write complex or poor code in the hopes that others will be incapable of maintaining it, thus ensuring the company will always need them. Some do this more indirectly than others by choosing a poor design or omitting the design process entirely. This is more poisonous to the company than anything else and I consider it a form of insider sabotage.

You never know when you or another key developer could be hit by a bus. If you are the key developer, don’t leave a mess for someone else to deal with. If you are not the key developer, it would behoove you to document as many things that can be learned as possible. This will create a knowledge trail that will help you and your co-workers deal with a gaping hole in the team.

I believe that what a single developer adds to a project should not be quantifiable. A high quality developer will add a skill-set to the group to fill a specific role. A developer’s success is measured by their intellectual output, so they must possess the ability to flex, learn, craft, lead, and take direction. For example, I hope that if I left the group or project I am currently assigned to that I will leave the group or project in a better state than I joined it. I also would like to think that the only thing I take with me would be my abilities and experience. I hope that the main thing that will be missed in my absence would be my ability to solve problems and create solutions to complex situations.

Moving on to something in a slightly different direction, I wanted to briefly talk about how to build yourself into key developer that positively impacts every development team you join. Jeff Atwood recently dug up a good article (by Steve Yegge) recently about how to do so. You have to treat software development like a craft. Crafts must be practiced, honed, and enjoyed. Going to work does not merely mean that you are advancing your abilities, so take a peek over at Jeff’s coverage of the article or the original article itself. While you’re at it, be sure to read Norvig’s article about how to develop yourself in the span of 10 years.

I personally believe that I have an ability to perform a craft that must be honed and perfected like any other artisan skill. Even professional football players have to go to practice to maintain and improve their abilities. I practice by playing a little golf, reporting bugs to prominent open source projects, and contributing patches. I eventually gain commitbit access to a full project, then I will likely have to tackle the more social and political aspects to being a developer. I am also a graduate student which requires the most critical and analytical thought process of any task I’ve undergone. If you are a developer, I urge you to practice your craft (or not, it’ll make me look better and get paid more).

So in closing, software engineering is a craft like no other. It’s possible for too many people to get comfortable in their job. It’s possible for some people to poison and ruin everything they touch. It’s also possible for someone to make a hugely positive impact to everything they work on and everyone they work with. As a professional, everyone has to decide what they want their role to be.

2008
06.21

I’ve been increasingly interested in partaking in perl6 development as of late. I have been keeping up with the various efforts and perl headlines. I even bought the first perl6 book when it was first released.

Lately, I have been keeping an svn checkout of parrot up to date making sure it compiles properly. The most popular implementation of perl6 appears to currently be Rakudo, which is perl6 on parrot. I was originally following the pugs implementation in haskell but was completely turned off by the language of choice. My attention was forced elsewhere due the primary developer losing focus, abandoning pugs.

Being written in PASM (Parrot Assembly Language), it has received plenty of attention. Also, because it is distributed (temporarity) with parrot in the languages section, there is no short supply of active developers.

Pugs did give the perl6 community one great thing: a starting point for the test suite. As of right now, all of the rakudo tests are pulling the test suite from the pugscode repo. This is a great starting point for any implementation and helps centralize the entire perl6 test suite (the pugscode suite is largely incomplete).

Last night, I was discussing the current state of the perl6 implementations with a few of the developers in the IRC #perl6 channel. I was caught up on what’s going on in the community and found a focus. My urge to write some slick new perl6 code can be satiated by working on the pugscode suite. Eventually, I’d like to start solving those problems in the Rakudo implemtation as well.

We’d like you to join us as a author for Pugs.

My interest and enthusiasm must have impressed someone, because one of the developers gave me commitbit access to the pugscode repo. If I submit enough quality patches to parrot/rakudo, I will get parrot/rakudo commit access as well. While pugs itself may be abandonware, the test suite is still the most advanced yet and is in active development.

Join me in #perl6 and help propel perl6 into history as the most powerful language available, yet again.

2008
06.18

So this past weekend lived up to the mythos. In fact, the week leading up to it was something else as well. So my tale of last week is broken up into a few sections here, which I’ll go over one by one.

The Pee Pants

On Wednesday, during my tempo run, I noticed everyone I passed was giving me a funny look. An elderly couple looked at me as if they were confused. I jokingly thought to myself that they must not be used to seeing a lanky guy like myself expending so much energy to barely move. A mother and daughter walking their dog refused to respond when I greeted them. Then, one woman on a bike initially gave me a welcoming smile but then sort of glanced down and winced. It was then that I realized there was something wrong, so I checked to make sure my baggage was stowed (if you know what I mean) and everything was in order. Everything seemed fine except there was a sweat pattern developing around my crotch. I’m sure it looked like I peed my pants, but I didn’t and it could have looked far worse.

The Ulcer

Jay: I farted on Jason’s pillow, he farted on Jonah’s, thinking it was mine, and eventually pinkeye-d my pillow. I’m not proud of any of this.

Well, I didn’t develop pink-eye, but it sure felt like I did. Friday morning I stuggled to keep my eyes open and found it grew worse throughout the day, leading into light sensitivity and soreness. I assumed it was just something in my eye and a night’s sleep would clear it up. It actually became worse, so I went to the optometrist. Turns out I had developed an ulcer in my upper right eye and it had become emergent. I had to apply drops in my eye hourly and go back the next day to check to see if the prescription was effective. I took the opportunity to live like Batman the next day and avoided spending any time in the sun.

It cleared up by about 80% on Sunday and I was told I could scale back the prescription usage. I should be able to start wearing my contacts again by Friday.

The Stitch

As per our Sunday evening routine, I was finishing a few things on the grill (mushrooms and under-cooked pork) when yet another emergency occurred. Our cheap knives have this bad habit of not staying in the handle, which led to one of the steak-knives doing just that. From about 3 feet off the ground, it feel tip down into my foot. There wasn’t any pain, but gravity took over and blood starting spurting out. I yelled at Sunshine to try and get her to bring me a towel to stop the bleed. Her response: bring a towel and the Britta water pitcher, apply the later before the former. This just caused more blood to pour out, so I took the towel, wrapped the wound, and hurried into the bathroom tub.

I don’t claim to be even remotely medical, so I figured a hospital visit was in order. The hospital may be less than 5 miles away, but we had to wait 2 hours to see a doctor, bleeding wound and all. After a smart-assed male nurse came in to give me a tetanus shot, the PA decided I only needed 1 stitch, which was quickly administered.

She also recommended that I not run (the fact that I was a runner was only logical after she took my blood pressure and found it to be 104/55) until the stitch was removed next Wednesday. I said to hell with that and ran yesterday and today anyways, albeit slower than planned. I figured if there are people that can run without feet at all, then the least I could do was deal with a single stitch without whining.

So here are my pace charts for last week. I burned ~1500 calories and struggled with the heat all week. I took a few walk breaks due to the oppressive heat. Sunday was not a good run, as you can tell from all of the up and down motion in the chart. Hopefully this week will turn out better.

20080609.png20080610.png20080611.png20080612.png20080615.png

2008
06.10

So last week didn’t produce anything eventful in the running area. I powered through the runs and found that I get better in second extended interval than the first. I struggled with intense 40 mph winds on Wednesday’s tempo run which sapped the energy from me and caused me to walk a few times. Uphill and into heavy winds like that is no way to start a 3 mile tough run. I also made the mistake of changing the route Wednesday due to the increased distance that I definately paid for thanks to the wind.

The only thing worth noting is I had an excellent run on Saturday. I did not fatigue until the halfway mark, which is about 2 miles further than it took last week.

I’m posting this late in the week because of the troubles I had with SportTracks again. This software is seriously pushing my patience. I accidentally hit the start button on my Garmin when I was changing on Saturday, so there was a few seconds of no movement until I realized I had done so. The trouble came with importing the data. SportTracks has this nagging bug where it does not successfully delete the last track, so my pace chart was horribly skewed because of that accidental split. I kept trying to remove it and did everything I could think of. The solution I stuck with was splitting the track at the time that I thought I finished, then removed the new activity.

These kinds of bugs are trivial to fix, but take an extrodinary amount of time to get resolved in a closed source environment. Every little nitnoid like this is driving me closer and closer to an open source solution, such as PyTrainer. In fact, I am tempted to get started helping with development.

Anyhoo, here’s the charts:

20080602.png20080603.png20080604.png20080605.png20080607.png

2008
06.07

Tee Off

So I was listening to Car Talk on the way to work today (on a Saturday, bleh) after my run (more on that later) and I made special note of the puzzler. Usually the puzzler can be very tricky, but not this week, for me at least. They haven’t posted it yet, but it goes something along these lines:

Tommy went to a farmers market one day. He accidentally kicked over a big basket of eggs and broke every single one of them. Feeling bad, he asked the woman how many there were so he could compensate her appropriately. [author's note: this part gets a little fuzzy to remember] She says that she didn’t count them but had put them in paper bags earlier. When she put 2 in each bag, she had 1 left over (not placed in a bag). So she decided to put 3 in each bag, but still had 1 left over. Then she tried 4, 5, and eventally 6, but they all had 1 remaining egg, but 7 eggs per bag worked without any extra eggs. What is the minimum number of eggs Tommy has to pay for?

So obviously I wrote a perl script in my head while driving to calculate it. I figured I’d test it out when I got to work, but I had 30 minutes until I arrived. I decided to mentally golf my script to come up with the least amount of characters needed to provide the answer. I golfed out 2 more answers and came up with the following:

$_++ until $_%2==1 && $_%3==1 && $_%4==1 && $_%5==1 && $_%6==1 && $_%7==0;
print "Minimum number of eggs: $_\n";

It’s pathetically 2 lines of code, but 1 is a user friendly line to print the answer. I was starting to wonder if I could golf any more of that code down, but after reading some actual perl golf scripts, I came to the conclusion that I clearly a) do not know perl well enough and b) am not clever enough. So I think I am going to embark on trying to golf this down as much as possible. If you remove the unneccessary spaces and print statement, it’s exactly 63 characters.

If anyone has any suggestions, please drop a comment. I would really like to learn to play better golf and develop a much better understanding of perl. Also, if anyone wants to golf this out in another language, feel free to drop a comment (use the code tag).

Update: Refer to the on-going game at perlgolf.

2008
06.04

So there’s several things on today’s discussion agenda. Let’s get right down to business.

First up, I made a minor change to the site. I am now sifting the main content feed through FeedBurner. This means I will hopefully get a better idea who’s reading the blog. All I know right now is the tiny bit of information from the WordPress Stats plugin and that Google Reader thinks my blog is the most obscure thing I read. You may have also noticed that I updated the plugins and fixed the obsocialbookmarker plugin to provide links to some of the aggregators I’ve heard of. If I’m missing your favorite, do tell.

Also, I hit a milestone with my last post; it marked my 500th blog! That’s right, I’ve written way too many words that way too few people read. I’ve had some ups and downs, a few contintributors who have long stopped contributing, even watched as my wife set up her third Blogger account. Here’s to the next 500 posts!

The reason why I have not posted recently was more out of a superstition. Monday night was an incredibly intense game 5 of the Stanley Cup Finals between the Red Wings and the Penguins. It lasted for well over 100 minutes, into three overtime periods, and ended with a disappointing goal by the Penguins. Fear not, the Red Wings went back to Pittsburg to steal the cup from them on the Pens’ own ice. The celebration afterwards was riddled with boos and hisses, but it was still a sweet victory to see my boys bring The Cup home for the 4th time in 11 years.

Lastly, I never got to posting last week’s pace charts. Monday was tough because I stupidly decided to run in the afternoon and it easily broke the 90’s. The other runs were tough but managable. I’m still struggling with the long run. I felt better than last week, but only slightly. I think I am going to try and focus on maintaining a pace for a long time because I see to have trouble beyond 3 miles. Hopefully, this is just a decreased stamina due to the extended break and not loss of ability. I also need to see about excluding the walk breaks during the intervals as it greatly skews the graphs, so I decided to change to a non-continuous bar graph so it would display something useful.

I’m blathering, so here are the charts:

20080526.png20080527.png20080528.png20080529.png20080531.png

2008
06.01

I’ve been using Gentoo Linux for several years now and have been growing increasingly frustrated. There has been a steady decline in quality assurance. The core utils team has repeatedly made changes that cause widespread breakages without warning. Many of the ebuilds languish without active maintainers. The Bugzilla database is growing rapidly out of control. There seems to be anamosity amongst the developers as they have been struggling to keep valuable developers (so devrel has failed horribly). Most importantly, the council has decided they don’t want to following the rules set forth for them (lack of attendence at meetings requires an election). The only really promising Gentoo project is the Sunrise project (users submit ebuilds), but even this comes off as an attempt to solve the problem of a lack of developers.

The problems go on and on, most of which stem from the fact that the organization has greatly strayed from it’s original purpose: source compilable meta-distribution. There has been a large focus on the management and increasingly less focus on Getting Things Done. This is usually what causes the death of a project.

Every so often, I venture into DistroWatch to see what has been popular. Most of the time, I don’t see any promise amongst the distributions to provide the same quality and features that I fell in love with when I found Gentoo. Almost every visit meets with a decrease in Gentoo popularity. Recently I have been watching the rise of a distro called Sabayon. It’s based on Gentoo and seemed to have promise.

Upon further inspection, Sabayon is nothing more than a pre-packaged Gentoo overlay. That’s right, you can check out the overlay from a Gentoo install and quickly change to a Sabayon install. This basically does not impress me. So I continue the search.

Arch looks promising but their application tree is very sparse. I used to use Slackware, and would happily switch back if there was something like an up-to-date repository for packages. The “current” repository is nice but the lack of dependencies with the package maintainer could make things very tricky.

I refuse to use a Debian or RedHat based distribution unless there is something very compelling, like Portage and eutils, to draw my attention away. So if anyone out there has an suggestions, feel free to share.