The day-to-day

| 0 Comments

Photo by flattop341

Scott Koon recently wrote a great article, Pros Don’t Make Do. Scott argues that in order to be a true professional, you have to use the right tool for the job.

I agree entirely. Rarely is there one silver-bullet solution to every software problem. No language, framework, or toolset is appropriate to every situation, but numerous software shops assume the opposite. Many software developers are or have been in such "one-size-fits-all" organizations. Is there a reason in these places to study tools and frameworks you may not be able to use right here, right now?

Expanding your repertoire carries long-term benefits to your career, but hardly impacts the day-to-day. However, there are less obvious and more immediate benefits to such knowledge too. Learning a toolset doesn't just add to your base of knowledge, it changes the way you write software. It goes back to the idea of "programming into a language" rather than "programming in a language" to borrow from Steve McConnell’s Code Complete. McConnell argues that your code should ultimately not be constrained by the choice of language or toolset.

Writing such code is only possible by either being a super-genius, or by expanding your knowledge of tools and technologies. Perhaps a concrete example will help. Last week I, along with another .NET developer from a different company, attended a meeting of the Chicago Area Scala Enthusiasts about making Domain-Specific Languages with Scala, via Dave Orme.

Neither of us will ever, EVER have a chance to use Scala in our current jobs. However, all we could talk about after the meeting was how Dave's use of implicit conversions in Scala to create DSLs changed how we viewed C#'s extension methods.

Whereas before we have viewed extension methods as mainly a way to add missing convenience methods to pre-built classes, now we saw them as a useful method to change the entire meaning of constants and classes, to build basic DSLs out of primitives and constants in .NET.

I have similar stories about Ruby's method_missing, aspect oriented programming, and pair programming, to name a few off the top of my head. All of these have provided opportunities to rethink how I'm writing code independently of these technologies.

Of course your mileage may vary. If you decide you have nothing to gain in the day-to-day from learning an alien language or unfamiliar toolset, you are destined to be proved correct regardless. If instead you approach such opportunities with an open mindset, you may be surprised at what new thoughts and ideas trickle in.

Or if you are like me, you’ll be pleasantly surprised when anything whatsoever manages to trickle in.
-Scott

Launchy – Clever software, cleverer soliciting

| 0 Comments

Oh Launchy, I want to have your open source keystroke babies.

Recently I was caught up in a frenzy of mouseless-computing hysteria. While the dream of going mouse-free has yet to be (Microsoft CRM, could you be any keyboard-unfriendlier?), one of the pure joys of this journey has been stumbling upon Launchy. It’s a delightfully free tool for Linux and Windows that acts as an intelligent, configurable application & document launcher. It’s hot stuff.

I won’t go into the specifics of why it rules here – there’s plenty of other, better writeups of that on the net. I’ll simply offer as proof that within a week after I installed it upon my work computer, the Start Menu was deprecated on every machine I owned.

Instead, I want to talk about where Launchy is particularly clever – the marketing pitch. Launchy is open-source software, so it’s free to use without ever paying a dime. I had installed it, and merrily tottered along launching programs willy-nilly. After a few weeks of near-continuous usage, I hit Win-Space to bring it up, and there was a pause.

My heart skipped a beat. However, after a brief delay, the Launchy Donations page opened in a new IE window with the following, simple text:

Please help this poor grad student to put ramen on the table. I greatly enjoy developing Launchy, and I hope that you enjoy using it. It's free to use, but if you think Launchy is a worthwhile application, I would sure appreciate your support. This webpage will only appear once per installation of Launchy.

Thanks!

Josh Karlin

It took me a moment to register what was happening. If you think about it though, this strikes me as a great and relevant software model in the “everything is free” software age we live in. Disagree? Compare to the problems Launchy would have had with the traditional approaches:

  • Registration-ware: This could have required a registration, either up-front or after some period. The downside of this approach is that knowing I’m using a time-limited version, or that I have to register in advance, is a massive barrier to entry. This is doubly-true for an application like Launchy - an “An Open Source Keystroke Launcher” is one of those products that fulfills a need you didn’t know you had, so the barrier to entry has to be as low as possible.
  • Nag-ware: Launchy could have very easily entered a “Please donate” or “You are using an unregistered copy” reminder to every launchy window. The problem with applying something like that to Launchy is that, as I said, it’s solving a problem I didn’t know I had until it showed me. As a result, I need a little time to get familiar and comfortable with it, like a pair of new underwear. All that time, I’m being reminded to donate via an on-screen message. It goes from something I actively ignore (hey, I don’t even really know what this does, leave me alone kthxbye) to something I don’t even see by the time I actually appreciate the product.
  • Disable-ware: This probably goes without saying, but when software I know and love shuts itself off, that generates anger – not the desire to spend money. Yet Launchy could have easily taken this path. Since Launchy’s usage (launches programs) becomes such an integral part of one’s computer habits, in a way this would feel like my computer had been taken hostage by Mr. Karlin in exchange for some PayPal donation. Again, I don’t think this model is appropriate for any kind of software, but I think that’s doubly true for something like Launchy, since it acts as a gateway to every other piece of software on my machine.

Now I’m probably not the first one to recognize this and I’m probably over-analyzing this just a bit. It comes down to this, really: the three approaches above almost never, ever work on me. But the gentle & innovative Launchy one-time reminder? Worked like a charm, even as the American economy is feeling a bit wobbly and throwing up over the rails of the SS Global Economy.

Clearly, Mr. Karlin has given his “business model” some thought here – perhaps more software developers professional and open-source alike should as well.

-Scott