devdiary #1

First day at work. Sounds like a bit of drama occured over the weekend. Our primary payment provider went down and the team was scrambling to get a half-baked release out the door so that we could bring a second payment provider online.

Got set up with Jira, Confluence, checked out some code from the repos and started poking around. Dev leads were busy putting out fires, so it was mostly “get yourself acquainted” day.

A call for rigorous evidence-based software engineering

Here’s a video recording of a keynote presented by Greg Wilson at CUSEC 2010 entitled “Bits of Evidence: What we actually know about software development and why we believe it’s true”.

My favourites are a few of his closing thoughts.

On the point of research:

The point of research is to find a really good question that is going to move human knowledge forward. There are lots of bad questions out there that are either pointless or too hard to tackle. Finding something that is worth answering and within reach is an art form, and the only way to teach it to you is to have you do it for a few years.

On the purpose of university:

We are trying to teach you how to take over the world because you’re going to have to whether you want it or not, sooner than you think.

On inheriting the world:

I want [my daughter] to inherit a better world from you than you’re going to inherit from us. And the only way to get there is to have you think a little more clearly… [Before you know it,] You’ll be running the world, and the world you’ll be running will be scarier place than the one you’ve got now. You’ll be dealing with all the mess that my generation is leaving behind because we’re to fat and happy to fix it.

For a more comprehensive transcript, check out Joey deVilla’s notes on the Canadian Developer Connection MSDN blog.

Why I’m learning Emacs

In my high school years, I was one of those kids who spent every spare moment geeking out at the school computer lab. The teacher in charge there had a background in software development and was a bit of a nerd himself (thankfully).

Once in a while, a new copy of Microsoft Internet Developer (MIND) magazine would appear in the lab (he’d purchased it). I would eagerly flip through it and attempt to digest its contents.

If you’ve ever have had the privilege of reading one of these magazines, you’ll recall that every feature article had a little callout box at the start that said something to the effect of:

To get the most out of this article, you’ll need to understand Microsoft IIS, MSMQ and ASP

These articles were very technical, and my teenage grey-matter struggled to grasp the concepts presented. Which is why the callout box proved invaluable to me because at very least I knew what those labels were, which meant my journey didn’t need to come to an abrupt end; rather, there were detours that I could take en route to enlightenment.

So I would put down the magazine, seek out some 4-inch thick QUE tome, and wander merrily down wherever the path led for as long as my teenage attention span could last.

Needless to say, I usually didn’t last long enough for the chapter numbers to turn double digits, much less get back to the magazine article that I so wanted to decipher. A month would go by, a new magazine would appear, along with new set of keys for me to acquire in order to unlock the wisdom of the “grown-up professionals”.

How little things have changed.

Just this week, I stumbled upon Steve Yegge’s Tour de Babel. Lo’ and behold, a new carrot was presented to me:

All of the greatest engineers in the world use Emacs. The world-changer types. […] the greatest software developers of our profession, the ones who changed the face of the industry.

And that is why, sucker that I am, and despite having spent the last 5-6 years barely getting comfortable in Vim, I am learning Emacs.

My head hurts like hell because of my vim inclinations, but here’s hoping over a decade in, I would get a little further than my teenage self.

Have you got a story about how or why you pick things up? Share below, or join the discussion at Hacker News

My browser stack

Like most web developers, I’ve got an array of web browsers installed on my PC for cross-browser work. But apart from development and testing work, I’ve noticed a curious habit of ‘partitioning’ my day-to-day web experience through different browsers.

So I thought it’ll be a good idea to write about the web browsers that I use, and the peculiarities of each one.

Opera

Opera is my daily web-consuming browser. I have the weather, Hacker News, Slashdot, Proggit and OSnews on Speed Dial, a trunk.ly bookmarklet on the main tool bar and DuckDuckGo as my location bar search engine.

Opera has got quite a few nifty features that I haven’t been able to find in any other browser: things like mouse gestures, its peculiar single-key shortcuts, built-in IRC client, search keywords and native site blocking.

Among the url patterns that I’ve got blacklisted in Opera are *google-analytics*, *facebook.com*, *googlesyndication* and a plethora of other ad syndicate domain names that I’ve collected over the years. The only downside to using a 1.56% browser is that you occasionally run into the odd website that doesn’t render properly, which is when I fire up…

Firefox

Firefox is for when I want/need to see the web “as most people should see it”. It is my primary development workhorse. To maintain a somewhat “blank slate” consistency every time I fire it up, I’ve turned off the Disk Cache, History and Password management. I only have a handful of add-on’s activated, namely Firebug, FirePHP, Web Developer and HackBar to keep things light and zippy.

While I’m furiously going through my Edit-Save-Reload development cycles, I often find myself spawning documentation tabs in Opera. This allows me to save “Alt-Tab” for switching between editor, documentation and output while “Ctrl-Tab” cycles within each context.

Chrome

Chrome for me is permanently set to incognito by way of appending –incognito at the end of its shortcut. From a development perspective, Chrome is my WebKit-esque view of the interweb. If it looks okay in Chrome, it’ll likely be decent in OS X Safari, iOS Safari and a good chunk of Android devices (though, nothing beats actual testing on the browser/platform combo).

On the peculiar “mental partitioning” front, Chrome is what I fire up for the occasional Facebook meander (remember, *facebook.com* is blocked on Opera), and more heavy “app”-y stuff like Gmail. I think this perception stems from its supposedly bad-ass V8 Javascript engine and the fact that this browser wants to become the heart of an operating system.

Internet Explorer

The only time I use Internet Explorer is to download Opera whenever I’m setting up a new machine. As far as development goes, I use the handy-dandy IETester to cover my IE 6 – 9 bases. Although IE9 comes with a pretty good set of Document Modes for testing your site with.

So yeah, that’s my browser stack. What does yours look like?

Working with a team of developers

For the last three months, I’ve been working at a web startup that’s building a social network service for events (i.e. concerts, parties, pretty much anything that has a place, date and time).

Perhaps one of the most enlightening experience I’ve had is the chance to work alongside two other excellent Ruby on Rails developers.

Now I’ve been part of cross-disciplinary teams before where there’s maybe a graphics guy, a marketing guy, a video/motion guy, and finally a web/tech guy which invariably ends up being me. Either that, or I’d slog it out alone on some pet project as the sole developer.

But working alongside fellow developers is different. Because I’m part of a team of three, and the other two are super-competent, I feel like I’m producing 3 times the amount of work for every unit of work that I put in. It’s the same feeling you get when you chant along at a thousand-strong sports match, or you when you sing along to a song playing through your earphones. Tiny, insignificant input, absolutely awesome output*.

So I’d spend two days working on a commenting feature on the site, but in those very two days, a new search feature and a swanky Google Maps feature was added to the site. 1 unit work, 3 units value produces.

Then again, isn’t that the reason why I became a software developer? To write lines of code that have the potential of infinite value.

*Though there’s also much to be said about being part of a team where 3 units of effort gets whittled down to 1 unit of value (or even less) because you’re having to clean up after the incompetencies of your colleagues. Not today. Life’s good.