james mckay dot net

because there are few things that are less logical than business logic
03
Oct

The two types of programmer

There are two types of programmer in the world.

Now when somebody writes that on their blog, they’re generally criticised as being elitist and condescending. This is because they tend to talk about the “alpha geeks” or the “20%,” and everyone else or the “80%.”

I’m not going to say that. But I am still going to say that there are two types of programmer.

  • Those for whom programming is a means to an end.
  • Those for whom programming is an end in itself.

If you’ve been following me on Twitter, and if you’ve read my recent blog posts, you’ll know that this has been something of a theme for me for the past couple of months or so. What got me going about it was reading this remark in a blog post by Jeremy Miller a few months back:

I had a great time at CodeMash yet again. For those of us who look at software development as more of a lifestyle than just a way to meet the mortgage, these kinds of events are like a huge dose of nutrition for the soul. I really liked Scott Chacon’s keynote address and it’s got my head a going about how to make our workplace better (see this again).

It’s not a bad post, all in all, but whoa there. Since when was software development supposed to be a lifestyle?

Don’t get me wrong here. I’m all for being passionate about programming, for sharpening the saw, for improving your skillset, for using the best tools for the job, and all that, but when I hear of people describing software development as a lifestyle, I wonder just what makes them tick. And this isn’t a criticism of Jeremy either. It’s more a criticism of myself. There have been times when I myself have slipped into that way of thinking, and I’ve not found it to be beneficial. It’s easy to fall into that trap when you have the kind of mind that enjoys programming, and it takes a good deal of self-discipline to avoid it. In fact, paradoxically, I find that when I get into programming-as-an-end-in-itself mode, I end up getting less code written, not more.

This, in a nutshell, is what’s been behind a lot of the things I’ve been blogging about recently. It’s been behind my recent decision to stop using vim, for instance. For that, and everything else I’ve been looking into, I’ve been asking myself the question: is this a means to an end, or is it an end in itself?

So to those of you who would want to persuade me to reconsider learning vim properly, or to switch from Mercurial to git, please allow me to remind you of one important fact.

You can’t learn everything.

As programmers, we face a firehose of new tools, new technologies, and so on. Many of these are promoted loudly with great fanfare on the Internet by their fans. In the case of some (*cough* git *cough* ruby on rails *cough*) the fanboy hype is deafening. Most of them are claimed by their proponents to be counterexamples to Fred Brooks’ classic essay, No Silver Bullet. Almost none of them are anything of the sort. Yes, they are beneficial to a greater or lesser extent, but in most cases, there are trade-offs.

It simply isn’t possible to give all of them more than a cursory once-over. You have to triage what to learn and what not to learn. Aggressively. Learning vim would rob me of time familiarising myself with other, more important technologies such as Selenium or backbone.js, for instance. Frameworks and tools that you do learn are huge and complex these days, and if you try to learn too many of them, you end up with a very superficial understanding of them that can lead to problems. Either that, or else you end up spending so much time on the computer that you damage your health and your relationships with other people.

So in the past few weeks, I’ve been taking a good hard look at everything I’m doing, re-evaluating what I should be taking up, what I should be dropping, and what I should just allow to carry on as-is. With that in mind, I’ve been formulating some criteria by which I should decide what to adopt, and what to ignore. With everything I’ve been doing, I’m asking myself a few pertinent questions now:

  • Does this solve a problem that I am currently facing or am likely to face in the not too distant future? If so, how effectively?
  • Will knowing it enhance my career prospects? More importantly, will not knowing it harm my career prospects?
  • Are there any examples of real-world applications using it, or is it all smoke and mirrors?
  • What is the ramp-up time, and is it worth it?
  • Is it in line with the direction I am heading, or is it a distraction?
  • If it makes programming easier, does it do so at the expense of the end users?

The last point is a key implication of programming being a means to an end rather than an end in itself. If programming is a means to an end, and you care about your end users, you will base your choice of tools and frameworks on what serves them best. On the other hand, if programming is an end in itself, you will choose the cool languages and tools that everyone is raving about, but at the expense of your audience. This is of course what WordPress got right but Diaspora got wrong.

I’ve decided that in terms of tools and technologies, I should focus on my core competencies: namely, the Microsoft .NET stack, HTML 5 and JavaScript. I also want to up my game as far as test-driven development is concerned — hence, I’ll probably have another, closer look at MSpec — and also get to grips much more with agile development methodologies, in particular Scrum, which we have been using at work for the past year or so. As far as my other skills are concerned, such as PHP, Python, Django and Linux, these are useful skills to have, but how much time I spend on them from now on is something I am yet to decide. While it’s good to diversify to an extent, I don’t think much of the Pragmatic Programmers’ suggestion that you should learn another language every year, simply because that takes you into the realm of programming for programming’s sake, and besides, I don’t think it’s realistic, unless you are content to be a jack of all trades and master of none.

Bloggingggaaaaaaaa!

The ALT.NET movement makes me feel a little bit uneasy somehow. While there are some pretty good people in there, and I fully support the aim of finding better ways to do things, the movement as a whole seems to have largely degenerated into a clique of programming-as-an-end-in-itself Ruby fanboys with inflated egos who only do .NET under protest for their day jobs, and who complain about Microsoft tools purely for the sake of complaining about Microsoft tools. I ended up in conversation on Twitter with several of them in the wake of my TFS==Lotus Notes blog post, and I think some of that may have rubbed off onto me. Certainly, I’ve been doing far too much complaining recently, and I’m sure it doesn’t make me look good.

I’ve come to the conclusion that the programmers most worth following on Twitter, most worth subscribing to in Google Reader, are the people who are building end-user applications aimed at non-developers. This isn’t necessarily because they’re smarter — frameworks and developer tools are technically more challenging beasts to write and maintain — but because they tend to have a better grip on reality. Building end-user applications puts activities such as socialising and speaking to non-programmers right at the heart of programming: you have to talk to people before you start in order to get ideas, and then you have to talk to them afterwards in order to make sure you’ve delivered something that they can use without getting confused. And of course, you also have to talk to them in between times to make sure you are on the right lines. This is where agile software development hits the nail on the head — developers are expected to talk to the customers on a daily basis. On the other hand, only ever building programming tools and libraries, and little or nothing else, seems a bit self-serving to me.

At the same time, I’ve also been asking the same questions about my blog. Over the past few years, I’ve constantly found it to be a very time consuming animal, where I don’t see much benefit coming out of it, and I keep wondering why I do it. Most of my recent blog posts have said, “You should be doing this,” or “You shouldn’t be doing that,” or “This is a cool tool,” or “That process is bad,” or other things in that vein, and I’ve been saying very little about what I’ve actually been doing myself. This is just punditry, and I don’t want to be just another talking head. We have too many talking heads in our industry, and it gets rather boring after a while.

I also think I got carried away somewhat with the whole Mercurial/source control thing. Now don’t get me wrong: I still maintain that Mercurial is the best source control tool available today by a long shot, that only git comes anywhere near it, that the old-school centralised model is past its sell-by date and no longer fit for purpose, and that if you’re not using a DVCS, you’re harming your productivity, making a rod for your back, and exposing your project to unnecessary and unacceptable risks. But there comes a time when you have to let things drop, otherwise you end up coming across like a noisy fanboy yourself and you just annoy people who have missed them as they flew straight past coming out of the firehose. In fact, this fanboy attitude is totally out of order in the Mercurial culture itself, where viewing programming (and by extension, source control) as a means to an end and not an end in itself is very much the norm.

I’ve therefore decided that I need to take a break from blogging for the next few months. Quite when, or even whether, I return is anyone’s guess, but if I do, I’m not planning to carry on writing in the same vein as I’ve been doing so up to now. If I’m to carry on blogging, I want to build stuff that I can talk about and showcase here on my blog first. Unfortunately, at the moment, most of the code I write that’s worth talking about is at work, and there’s obviously a limit to how much I can write about that. But the Agile Manifesto tells us to favour working software over comprehensive documentation, and as a corollary, the contents of your github or bitbucket account say more about you as a developer than the contents of your blog.

I’ll no doubt continue working on some personal programming projects in my spare time. In fact, hopefully I’ll be able to spend more time working on programming projects without getting distracted by blogging about x, y or z. But it will have to be time-boxed anyway. During the week, I am out of the house from seven in the morning until seven in the evening, which doesn’t leave me much time for anything other than sleep, and I want to free up more time for socialising, church activities, and developing other interests that don’t involve sitting over a computer.

03
Feb

Published

My blog entry on Volta, GWT and leaky abstractions has been reproduced in the .NET Developers’ Journal.

This was a particularly interesting post because a lot of people are pretty impressed with Volta, and on the face of it, I was pointing out what I saw as its potential shortcomings. It has also attracted some comments from fairly accomplished developers — Bruce Johnson of Google’s GWT team, and Mats Helander, who wrote one of the first O/R mappers for the .net framework. However, while I may have come across a bit negatively, my opinion is not actually so much an anti-Volta/GWT/RJS one as a pro-JavaScript one. Since I started taking JavaScript seriously a year or so ago, I’ve really started to appreciate it, and to be honest, I think that developers who hide from it altogether behind abstraction layers of whatever nature are really losing out.

I’ve also had an e-mail from a journalist asking me for my opinion on MySpace for an article that she’s writing. I’m not sure I’m the best person to ask on that one to be honest: my experience of MySpace is pretty much limited to opening an account, discovering it doesn’t work with Windows Live Writer, closing it again, getting spammed, and experiencing all the yuk-that-is-gross reactions that any respectable, standards compliant, XHTML addicted web developer experiences on seeing your average profile page with gratuitous background images, animated GIFs, thrash metal background music, and broken rendering in Firefox.

It’s interesting where blogging can take you…

01
Oct

Church 2.0

Our church is organising a communication and media master class on 19-20 October with Mal Fletcher. This is highly recommended for anyone who is interested in using media in a Christian context. Mal Fletcher is one of those guys who is pretty hip with using modern technology and Web 2.0 and so on to communicate. I gather that the last time he was here, he was getting everyone excited about blogging, podcasting and the like. Unfortunately I missed that particular meeting so I don’t know exactly what he said, but the feedback sounded pretty good. His websites, nextwaveonline.com and edges.tv, have a lot of interesting and effective articles, videos and documentaries on various social issues that affect us all these days.

I often think it would be particularly good to see churches making much more effective use of blogging in particular to communicate their message. Blogging has a much more personal, authentic feel to it than traditional websites, especially if comments are enabled so that visitors can feel part of the discussion. For some reason, blogs don’t seem to have a particularly high profile on most major ministries’ websites though.

(For anyone wanting to get into blogging in a Christian context, The Blogging Church by Brian Bailey and Terry Storch is a must-read.)

03
Jul

Blogging offline

Well just a couple of days after I reinstalled Windows on my laptop, the screen finally decided to die. This means that until I get it replaced, I’m offline in the evenings and at weekends. It’s about time I replaced my laptop anyway though. It’s now nearly four years old, and while it’s still perfectly serviceable, it’s beginning to get a bit geriatric in computer terms now. It weighs a ton and feels like having a fan heater sitting on your lap, it gets that hot.

I think this will give my wrists a bit of a well-earned rest. They’ve been getting a bit sore with my recent experiments with /(Dvor|Colem)ak/. Shai Coleman, the designer of Colemak, responded to a comment that I made on the Colemak forums saying that you do experience some discomfort initially, but it goes if you persist. However, I am still on qwerty at work and that isn’t likely to change now.

I’ll still be blogging when I get a chance, however. I’ll just be relying on pen and paper a lot more for the first draft of each entry. I think this speeds up the process somewhat though. I tend to be something of a perfectionist at times: I find it all too easy to either (a) over-research my blog posts, or (b) spend too long editing, chopping and changing them, and just having a pen and paper puts a bit of a restraining hand on me from both these tendencies, since I have to write it all offline in one pass without recourse to Wikipedia.

26
Nov

Pastors: get blogging!

Kingdom Faith has a new website design, and the long awaited RSS feeds on the video blogs have finally arrived. There’s some great teaching, and you can have Google Reader or Internet Explorer 7 automatically alert you whenever there’s more for you to watch, listen to or read, without having to go back to the site every so often to check. Nice one.

Even better, I am told the video blogs will have a comment system in the near future.

That’ll be pretty exciting if they do it right. Comments are a crucial element of blogging: your readers can post their own feedback which will then appear below your article. In this way you can interact with them — they can ask you questions or initiate a discussion, and if you do it right, it gives them a feeling that they are actually interacting with real human beings rather than someone who is standing six feet above contradiction. It gives pastors a great way of interacting with, and even maybe widening, their audience beyond the four walls of the church.

There’s a new book coming out in the New Year called The Blogging Church, which looks like it could be a pretty good read. It is written by Brian Bailey, the technology director at Fellowship Church in Dallas, Texas, the fifth largest church in the USA. Bailey is also a friend of blogging guru and former Microsoftie Robert Scoble. Scoble’s book, Naked Conversations, is itself a must-read for anyone who is serious about blogging. It doesn’t blind you with science or technobabble, but focuses much more on the social and business aspects of blogging.

So pastors everywhere — you know what to do: get blogging. If you don’t know how to get started, the WordPress hosted service is as good as any.

30
Jul

Apparently the in word is “blog”…

A new feature of Faith Camp this year is a daily video report from around the showground, which is shown on the screens at some point in the main meeting every evening. Pastor Colin introduced them last night, saying “Apparently, the in word is ‘blog’. So here is our first video blog.”

It’s a great idea, though perhaps a slight misunderstanding of the word “blog” — which actually means an online diary that allows readers to post comments. A bit like my own website, for example. Purists such as Robert Scoble would add the requirement for RSS feeds, trackbacks and pinging blog search engines such as Technorati, though in practice, not all blogs do this. Then again, I guess we could stretch the definition a bit just for Faith Camp. There aren’t likely to be that many people going online on the East of England Showground during the week, after all.

Update: They’ve put the videos online. Lovely. I think that qualifies as a blog now.

05
Jun

Video blogs at Kingdom Faith

It’s great that our church makes good use of all the technological resources at its disposal to spread the Gospel. We couldn’t make it to the service yesterday morning, so we got the live stream over the Internet. It’s wonderful that modern technology makes it possible for you to get church to come to you when you can’t get to church.

The new video blogs look set to be quite promising if they do it right. It’s just a bit of a shame that there are no RSS feeds — I’d love to plug them into my news reader. C’mon guys, once Windows Vista hits the shelves in a few months, RSS is gonna go mainstream big time.