The RPG of Life

Perhaps somewhat unwisely, I installed the Role-Playing Game Baldur’s Gate II on my laptop a month or so ago. I’ve found it really fascinating to observe how so many of my personality traits are drawn out and highlighted by playing the game. Take, for example, my constant desire to avoid confrontation. I’m constantly fearful of saying the hard truths that might make people within the game attack my party. Or my unwillingness to head into the future without knowing what I’m about to face: I’ve found myself frequently wanting to turn to an FAQ to find out what’s about to happen rather than being content to discover as it happens. That’s just like me in real life, where I always want to know the end from the beginning rather than being willing to trust God and get on with it even when the outcome is uncertain. Or the really big one – indeed, one of the main attractions for me of playing a game like Baldur’s Gate II – that insatiable urge to accumulate “stuff“, even if it’s not actually going to be useful for me. The whole point of many of the side quests is just to pick up these cool magical items and feel the satisfaction of levelling up and gaining reputation. The thought of making choices in the game that will shut down options, making it impossible to gain certain items, well that’s just intolerable.

There are a few ways, however, in which playing the game has brought home the meaning of certain Biblical illustrations in a whole new way. Take Psalm 119:162, for example:

“I rejoice at your word
like one who finds great spoil.”

It makes me imagine my Level 12 ranger stumbling upon some amazing treasure trove full of wonderful, wonderful bounty. Discovering profound truths from God’s word should bring far greater joy than any magical Short Sword +3.

Letting Others Shine

Why Service Is the Heart of the Universe

A few weeks ago I came to the end of a very happy time working for the VFX company Framestore as a software developer in their Production Tools group. We were basically responsible for the various databases and other software systems that keep a company like that running smoothly, enabling other talented folk to focus on doing their jobs well so that they could get on and make fantastic movies like Where the Wild Things Are. As I was leaving, I pondered how that mentality – the unknown and out-of-sight software servants nobly doing battle with the evil forces of SQL and PHP, so that others might be rescued from a slow and certain death by data – well, that mentality reminds me a lot of my king, Jesus. In a particularly poetic bit from the book of Philippians, the Apostle Paul writes this about him:

Who, being in very nature God,
did not consider equality with God something to be grasped,
but made himself nothing,
taking the very nature of a servant,
being made in human likeness.
And being found in appearance as a man,
he humbled himself and became obedient to death–
even death on a cross!
Therefore God exalted him to the highest place
and gave him the name that is above every name,
that at the name of Jesus every knee should bow,
in heaven and on earth and under the earth,
and every tongue confess that Jesus Christ is Lord,
to the glory of God the Father.

Jesus is in very nature God – the eternal Son of God – deserving of the same glory and honour as God the Father himself. And yet rather than standing on his rights and putting his feet up and having people feed him grapes all day long, instead he looked down at the plight of our world – a world ravaged by sin and under the righteous judgement of God – and he rolled up his sleeves and took up his mop. He came to deal with our sin by becoming a man and dying in our place to take the punishment that we deserved – my sin was counted as his sin, so that his perfection might be counted as mine – and he suffered the most humiliating death humanity could devise: even death on a cross.

But the result? It was for this reason, because of his willingness to suffer in our service, that God exalted him to the highest place, and gave him the name that is above every name, that at the name of Jesus every knee should bow. The route to true glory isn’t to go seeking it out, to puff up your chest and say “look at me, everybody!” (Twitter, take note!) The principal at the heart of our universe is glory through the ultimate sacrifice of self-interest.

It’s also worth pointing out, in closing, that if Jesus Christ is Lord, if his is the name that is above every name, well then that leaves little room for me to try and be lord of my little empire, for me to try and make my name the one that everybody praises. Any attempts to usurp Jesus’ throne and glorify the name of Andy Geers will ultimately be thwarted when the true king returns. Why not save yourself the bother, and get in line with the future right now by submitting to Jesus’ lordship? It’s not the valiant software developers of Production Tools who get their names up in lights when the film comes out at the cinema, but the Director. The great news of Christianity is that when the True Director, Jesus Christ, arrives on the red carpet, those who trust in him will get to marvel at and share in His glory for the rest of eternity.

The Working Christian’s Guide To Twitter

Chirping at the sun

Like Marmite, Twitter is one of those things that people seem to either love or hate. It’s notoriously hard to explain to those who just don’t “get” it: the hopelessly literal explanation is that it’s a bit like Facebook status updates, but without absolutely everything else that makes Facebook worth using. That’s a bit like describing a movie as a few patches of different colours moving around on a two-dimensional surface whilst the air vibrates around you, and wondering why you’ve failed to excite anybody’s enthusiasm. Personally, I find a more helpful approach to explaining it to people is to talk in terms of micro-blogging: it’s a way of lowering the barriers of entry to running your own blog by limiting the scope of each post to 140 characters. People also find it a brilliant way to make connections: one minute you’re tweeting about an independent film you just watched at the weekend, and the next minute the film maker is tweeting you back saying he’s glad you enjoyed it. Twitter Search also makes it incredibly easy to find out what everybody is talking about this second, an invaluable tool for both journalists and businesses trying to interact with their customers.

How should Christians use Twitter?

But how should Christians be thinking about and using Twitter? There have been some really helpful posts on the subject from Christian leaders like John Piper and Al Mohler. But perhaps it’s easy to dismiss their words as being just for people like them whose job it is to teach the Bible, and so I thought it would be helpful to jot down a few words from an average congregation member like myself about my own experiences using Twitter, and how it can be a help or a hindrance in the Christian life. I’m not writing this as an expert or as somebody who’s got it right – I’m writing this as somebody who’s conscious that I’ve probably got it all wrong and need to think further on the subject! So rather than having a whole bunch of rules (after all, Christianity isn’t about “do’s and don’ts”!) I thought I’d just ask one big question as a starting point for further thought:

What Story Does Your Twitter Feed Tell?

If somebody were to open up your Twitter Feed right now and read your tweet history for the past few months, what kind of picture would it paint of you: of your hopes and fears, your passions, your hates, your character and your temperament? What kind of inferences would they make about your beliefs, and about the God in whom you claim to believe?

  • Vague Thought No. 1: Would it even be at all obvious that you were a Christian? The danger of narcissism is often cited with reference to Twitter, and I think for many of us this is a real concern: is your tweeting all about you and what you’ve been doing, without reference to your creator? Does your faith make the least bit of difference to your tweets? I guess that for some of us, the obsession with boosting our “follower” count means we’re afraid to be open about our faith in case it scares potential followers away. Some aspects of Twitter culture can foster this obsession with popularity in a really unhelpful way.
  • Vague Thought No. 2: What kind of a God does your Twitter feed show you’re placing your trust in? Is his faithfulness and commitment to his people put on display, demonstrated by your confident trust in his good providence, or do you come across as completely neurotic and worried about all the minor details of life? This is probably as much of a personality thing as a Twitter thing, and I’m not saying that it’s wrong to have worries. But why not make a commitment to use your tweets to publicly entrust your anxieties to God rather than just using them to stress? When I was regularly blogging over on LiveJournal a few years ago, I used to try to make sure every blog post contained at least one “thank God”, a habit which really helped me to lift my eyes a little when I would otherwise have just been wallowing in my problems. That’s harder to do in 140 characters, but maybe it could be reflected by the balance of your many tweets instead – one “thank you God” for every “aghghg!!!”.
  • Vague Thought No. 3: This follows on from the last point, but what attitudes is your Twitter Stream characterised by? Thankfulness and positivity? Or disgruntlement and anger at the world? This may come down to having an explicit aim for your Twittering: instead of just posting whatever random thought is upper-most in your mind (“grrr! my trains were late, again!”), think about who might be reading your tweets, and why you would want them to be reading it. It’s a bit like that time after church, where the sermon’s finished and you’re starting to think about food. What do you choose to talk to your mates about? Do you just aimlessly drift into talking about the football, or do you have a bit more clarity of purpose and try to edify those around you by chatting about what you’ve just heard from the Bible and how it’s going to shape the rest of the week? It’s easy for us as Christians to just slot into the culture around us, rather than being proactive and standing out from the crowd, showing our distinctive values and a radically different purpose in life.

As I said at the start, all that is really just a starting point for further discussion. Feel free to chip in using the comments section below, or drop me a Twitter message @andygeers.

P.S. I always like to recommend Michael Lopp’s The Art of the Tweet when I’m talking about Twitter – well worth a read. Twitter in Plain English is also helpful when explaining it to friends.

The Theology of Underwear

May our confidence be based on more than this!

“Therefore, brothers, since we have confidence to enter the holy places by the blood of Jesus, by the new and living way that he opened for us through the curtain, that is, through his flesh, and since we have a great priest over the house of God, let us draw near with a true heart in full assurance of faith, with our hearts sprinkled clean from an evil conscience and our bodies washed with pure water. Let us hold fast the confession of our hope without wavering, for he who promised is faithful. And let us consider how to stir up one another to love and good works, not neglecting to meet together, as is the habit of some, but encouraging one another, and all the more as you see the Day drawing near.”

Now there’s a hope that will last today, tomorrow, next week and on into an incredible eternity in God’s new creation! I’ve been challenged recently that perhaps I don’t talk about these positives enough. Yes, Jesus’ death on the cross does save me from the terrors of a real Hell, but God always saves us for something better – life forever with him! Not a nervous day-by-day “have I been good enough to escape the clutches of hell today?” but a bold, assertive “praise God!” for doing everything on my behalf that was necessary to secure my eternal future. My primary identity as a Christian is now “in Jesus” – i.e. it’s Jesus’ obedience, Jesus’ excellencies, Jesus’ perfect sinlessness that is the deciding factor in whether I’ll be admitted to heaven. If Jesus is in, and I’m in Jesus, then I can be sure that I’ll be there with him – that’s what being in him means!

National Biblical Literacy Survey

Yesterday on BBC Radio Four’s Sunday programme (about 10 minutes before the end) they shared some preliminary results from a National Biblical Literacy Survey carried out by St. John’s College, Durham. The results will come as no surprise, but they do paint a sorry picture of a nation that has forgotten God:

  • Encouragingly, 75% of people surveyed owned a Bible, though few ever read it
  • 57% could say nothing at all about the story of Joseph and his brothers, despite the popular musical
  • 60% could say nothing at all about the Good Samaritan (“wasn’t he the man who helped the woman at the well?”, asks one interviewee)
  • One of the commentators involved in education said many of her students couldn’t even tell you which came first: the crucifixion or the resurrection of Jesus

“Why does any of this matter?”, you may ask. Kudos to Nicky Gumbell, one of the guests on the show, for a very clear presentation of what’s at stake: God tells us that the Bible is the ultimate revelation of his character, will and plan, and that it’s therefore powerful to change people. As the wonderful Vijay Menon often likes to put it, it’s pure dynamite. Ignorance of the Bible is ignorance of God, which is ultimately the world’s biggest problem.

Sounds to me like a great time to be making Old Testament adventure games to help share with people the amazing message of the Bible.

Announcing Your Plans

A fascinating blog post was doing the rounds last week titled “Shut Up! Announcing your plans makes you less motivated to accomplish them” by Derek Sivers (whose entire blog makes for great reading!). The gist of it was this:

Tests done since 1933 show that people who talk about their intentions are less likely to make them happen.

Announcing your plans to others satisfies your self-identity just enough that you’re less motivated to do the hard work needed.

It seems to fit with my own experience, that the more I talk about my Bible-teaching computer game the more it becomes a “social reality” sometimes to the detriment of actually making progress on the project.

What I found interesting, however, was the tacit assumption throughout that the essence of motivation is essentially pride. If talking about our plans with others satisfies our pride sufficiently, why bother going to all the trouble of actually implementing them? The whole notion of “Bible-teaching computer games” is so other-worldly to the average person’s experience that I can convey the idea of Andy Geers the programming wizard without needing to demonstrate the least iota of actual talent, merely through so much hot air.

The conclusion of the blog post was this:

If you do tell a friend, make sure not to say it as a satisfaction (“I’ve joined a gym and bought running shoes. I’m going to do it!”), but as dissatisfaction (“I want to lose 20 pounds, so kick my ass if I don’t, OK?”)

As sound as such advice may be, may I suggest that it settles too easily for treating the problem rather than actually curing it? It concedes the inevitability of human pride and refocuses it into a form of motivation that actually works (now your reputation is bound up in actually succeeding, meaning you don’t get the pay off if you fail). Yet being content with our pride is a dangerous place to be – a topic the Bible has much to say about – that is likely to lead us towards our eventual ruin. I wonder if a better approach is to renounce our pride and turn away from self-glorification as a motivation, seeking the glory of Jesus Christ in sacrificial service of others instead. I suspect it might require a different kind of plan though: for most of us, it’s hard to see how “losing 20 pounds” can be a Christ-glorifying goal in its own right (though if our bodies are seriously struggling under the strain of an unhealthy lifestyle, we may well find ourselves with more energy to serve Christ and others if we were to commit to losing 20 pounds!) But maybe we could follow the example of a friend of mine, whose first instinct is always to ask “who could I do this with?” If you’re a Christian, why not find somebody who’s new at church and needs somebody to take them under their wing, then agree to play squash together once a week? The motivation then becomes serving this other person in the name of Christ, and losing weight comes as a handy side-effect!

A man’s pride brings him low,
but a man of lowly spirit gains honor.
(Proverbs 29:23)

Losing All Confidence (Unity FTW!)

The Transformational Power of Glorying in Christ Jesus

As I have stated previously, I care far too much about what other people think about me. There’s all sorts of issues of self esteem and self worth bound up together in there, but at the end of the day I want people to think that Andy Geers is awesome. Given the right conditions, I can even go a long way towards convincing myself that might be true. I can pull some pretty smart moves on the dance mats, for instance. Not to mention how I’ve been labouring for four and a half years on a custom-built 3D engine for my Bible-teaching computer games under the illusion that I’m an awesome programmer (there’s no other sensible hypothesis for why I would have attempted such a feat, after all!) I can convince myself it’s true when it comes to my relationship with God as well: if I leave out the ugly parts, I’m basically a good person and I’m sure God will be happy enough with my performance, given how generally awesome I am.

But the trouble with this attitude is when the cracks start to show. What happens when you come to start using your game engine in anger and you find that it’s riddled with bugs, leaving you facing the prospect of investing months more work in an engine that’s already at least five years behind the state-of-the-art? What happens when somebody else shows up on the scene who is quite clearly even more awesome that you thought you were (and whose dance mat prowess leaves you in the dust)? What happens when the sin in your life because so painfully obvious that it starts to become clear that the holy God in whom is no darkness whatsoever must be offended by the very thought of you?

Put no confidence in the flesh

At church tonight we had a brilliant sermon looking at Philippians 3:1-7, and I was particularly struck by verse 3:

“For we are the real circumcision, who worship by the Spirit of God and glory in Christ Jesus and put no confidence in the flesh

The Christian person is free (indeed, obliged) to discard any pretensions at having reason to boast in themselves, and instead is freed to glory in their utter worthlessness and dependence upon the merits of the Lord Jesus Christ alone. Let me shout it from the rooftops with the utmost joy in my heart: I HAVE NO GROUNDS FOR CONFIDENCE IN MYSELF!!! Hurrah! It doesn’t matter if so-and-so is threatening to outshine me with their superior awesomeness – I have no awesomeness to protect! Andy Geers is not awesome – but Jesus IS!

It’s such a liberating truth to know that I don’t need to protect my self-esteem – instead I need to bolster my Jesus-esteem. I’ve been really encouraged and challenged by these accounts of Martin Luther that have been doing the rounds this past week:

The Devil would come to him and whisper in his ear, accusing him of all manner of filthy sin: “Martin, you are a liar, greedy, lecherous, a blasphemer, a hypocrite. You cannot stand before God.” To which Luther would respond: “Well, yes, I am. And, indeed, Satan, you do not know the half of it. I have done much worse than that and if you care to give me your full list, I can no doubt add to it and help make it more complete. But you know what? My Saviour has died for all my sins – those you mention, those I could add and, indeed, those I have committed but am so wicked that I am unaware of having done so. It does not change the fact that Christ has died for all of them; his blood is sufficient; and on the Day of Judgment I shall be exonerated because he has taken all my sins on himself and clothed me in his own perfect righteousness.”

Unity FTW!

I’m going to keep dwelling on Luther’s approach this week. But in the mean time, I’ve taken the plunge and started a 30 day trial of the Unity game engine to see if I can reproduce my point & click adventure game during that time. So far I’m absolutely loving it! It’s a great feeling to know instead of being burdened with having to do everything myself, instead the longer I sit back and wait the more features and extensions and bugfixes get developed for it! And it has so many more features than my poor little engine could ever hope to have offered, it’s unbelievable, not to mention cross-platform support for Windows, Apple and Nintendo Wii. Somehow, I think I’ve made the right choice! Even if it does mean giving up a little cause to boast in myself.

I’d rather spend my time boasting in Jesus Christ.

Geero’s Garden Update No. 1

A few weeks ago, my mum stocked me up on all manner of seeds, and I went absolutely crazy planting whatever I could find space for. I don’t really know what I’m doing, but it really inspires that part of my personality that loves the potential of things that might be, so I’ve been obsessively getting outside as often as I can to see how things are coming along. Tonight I thought I’d take a few photographs to share with you all!

Potatoes

Potatoes

The biggest success story of the lot so far, from purely outward appearances, are definitely the potatoes. These plants have been growing like crazy, visibly increasing in size from day to day even just as I look out from my bedroom window. Not bad, considering they started as two mouldy old forgotten potatoes left in my mum’s cupboard a bit too long!

Carrots and Parsnips

The carrots and parsnips are the things I’m most eager to see succeed, and yet the things I have least hope in. The soil they’re growing in is pretty stony, but today for the first time I started to see signs of life. It could just be grass or some kind of weed that I’m seeing, but I like to tell myself they’re carrots.

Herbs

Also starting to appear today are various shoots in the two pots I planted coriander and parsley in. They don’t look much like coriander or parsley at this stage, so again, they may turn out to be weeds, but they at least look different from each other and from the other weeds that are found everywhere in the rest of the garden!

Coriander

Confessions of a Glory Seeker

I’ve been thinking a lot lately about the extent to which so much of what I do in life and how I arrange things are all designed to maximise my own glory – to make sure as many people as possible are able to realise just how awesome I am. It’s a wide ranging phenomenon which impacts a whole bunch of different areas:

  1. My Holiness

    So much of my so-called “godliness” turns out to really be mere outward conformity – wanting to behave in a sufficiently conventional way that people look at me and go “Andy Geers, yep, he’s pretty godly. No wild drunken benders for him”. But when it comes to true inward holiness in the areas that only God observes – well then I only care about holiness in as much as it impacts my self-esteem. Sin brings back that dreaded “Oh no, I’ve stuffed up again, I’m obviously not as amazing as I thought I was” feeling, rather than any sense of having offended against the holy majesty of God by rebelling against his right rule. Repentance then becomes about feeling bad, and praying for God to help me be more awesome in the area of personal godliness, rather than about confessing guilt and praying for God to help me please him in all areas of life.
  2. My Evangelism

    If outward conformity is the order of the day when surrounded by Christians, then not looking weird is what it’s all about when in the presence of those who don’t follow Christ. It’s okay to be a bit distinctive, in fact it’s quite glorifying in one sense to be the “other-worldly” Christian nutcase who stands out from the crowd. But not to the extent that you risk people trying to avoid you – that’s a big no-no when it comes to being awesome. And again, my ultimate motivation for wanting to bring people to hear about Jesus is often to rack up points in the eyes of other Christians (“wow! look at how many people Andy Geers knows!”) rather than because I have a deep concern for Jesus’ honour and a desire to see my friends saved from eternal judgement.
  3. My Ambitions

    It turns out that jobs can often be a great way to bring glory to yourself. I recently got invited for an interview for a very well known company that is widely recognised as a fantastic employer – and being able to tell people all about that was a wonderful way to remind people just how awesome I am, that I should be associated with such a company. My ambitions often seem to revolve around finding a set of life circumstances that will bring the most glory to my name – like being able to pull off an amazing coup like making the world’s greatest Bible-teaching computer game, marrying some domestic goddess with looks to die for, or getting some highly glamorous job. I’m frequently running calculations through my head of what such-and-such a choice will do for my image, and rejecting the options that might cause people to think less of me.

The Glory of Service

In one sense, of course, seeking glory isn’t a problem in itself. The problem is where you seek your glory from: will you be like the authorities in John 12:42-43, who “loved the glory that comes from man more than the glory that comes from God”? Or will you be like those in Romans 2:6-8, “who by patience in well-doing seek for glory and honour and immortality” from God, receiving eternal life as their reward?

As ever, Jesus Christ leads us by example in this area. I’ve benefited greatly by spending a lot of time lately in Philippians 2:

Have this mind among yourselves, which is yours in Christ Jesus, who, though he was in the form of God, did not count equality with God a thing to be grasped, but made himself nothing, taking the form of a servant, being born in the likeness of men. And being found in human form, he humbled himself by becoming obedient to the point of death, even death on a cross. Therefore God has highly exalted him and bestowed on him the name that is above every name, so that at the name of Jesus every knee should bow, in heaven and on earth and under the earth, and every tongue confess that Jesus Christ is Lord, to the glory of God the Father.

True Glory is found in humble service of others, seeking their good and the glory of God’s name. Those who are truly praiseworthy are those who don’t even care for your praise, only God’s. They’re prepared to serve in the lowly ways, do the despised jobs, stand up for Jesus in a hostile world even if it costs them their life, to be content in whatever situation God has been pleased to place them in. True glory is found in the way of the cross.

What is Repentance?

These last few weeks, God has been convicting me of a number of wrong attitudes and character traits, which I could broadly sum up as the extreme self-centredness of my worldview – my world revolves around me. It strikes much to the heart of the Christian life, when you realise that all these things you were supposedly doing “for God”, actually turn out to be serving yourself – your own ego, your own self-esteem. Such a realisation can almost bring you to the point of asking “have I ever truly repented?” – so far all my attempts at repentance really seem to have been more about remorse that I’m not quite as amazing and awesome as I originally thought I was, rather than confession of the fact that I have sinned against the immortal glory and majesty of the Holy God who created me.

As always, Jim Packer has some very helpful words of challenge and encouragement. I thought I’d share here some bullet point definitions of what repentance actually is, from his excellent book A Passion For Holiness:

  1. Realistic recognition that one has disobeyed and failed God, doing wrong instead of doing right.
  2. Regretful remorse at the dishonor one has done to the God one is learning to love and wanting to serve.
  3. Reverent requesting of God’s pardon, cleansing of conscience, and help to not lapse in the same way again.
  4. Resolute renunciation of the sins in question, with deliberate thought as to how to keep clear of them and live right for the future.
  5. Requisite restitution to any who have suffered material loss through one’s wrongdoing.

As Packer points out – it’s harder than it sounds! But I love number two: I’m still very much learning to love this amazing God, and learning true repentance is a part of that. Thank the Lord that I’m not saved by my ability to “repent properly”!

Commenting with Facebook Connect

People have been complaining for months that they couldn’t comment on my blog, but now Facebook has made it easy with a really easy-to-setup Javascript widget. So no more complaints! If you’re reading this from the homepage, you’ll have to click through to the individual blog post by clicking on it’s title.

Ministry of the Word and Prayer

My friend Sam pointed me in the direction of one of my ancient blog posts about the phrase “the ministry of the word and prayer” the other day, and it got me thinking. My nagging conscience is quick to remind me of the importance of praying whilst preparing to lead Bible studies or whilst writing talks I’m going to deliver, but I often think of that purely in terms of praying for God’s help in my preparation itself. “Please God, help me to concentrate whilst I write this.” “Please God, help me to properly understand this passage.” “Please God, give me some good ideas for illustrations.”

The helpful phrase “the ministry of the word and prayer” reminds me that prayer is an essential part of the ministry itself. I don’t just pray so that my word ministry will go well; rather I do the twofold ministry of teaching the word and praying for those I teach it to. Ultimately it is God’s ministry that he has graciously invited us to be a part of, and so it’s natural for us to pray to him, asking him to be at work in people’s hearts and minds; it’s only then that we get on with using the tool he has given us for the job: his living and active word, the Bible.

Ambition and Insecurity

I’ve just been away on a church event called The Annual Student Conference (or TASC), where we take lots of our students away to a place called the Frontier Centre near Wellingborough in Northamptonshire. The title this year was “United We Stand”, taking a look through the book of Philippians (amongst many, many other things). This was especially handy for me, since I’m about to preach on Philippians 2 in a couple of weeks time!

Charlie Skrine helped us to see the link between ambition and insecurity: if our identity is found in what we do and in what people think of what we do, then we’re going to be reluctant to give those things up if putting other people first requires it. If my identity is in being the Curry Man who organises Bank Holiday trips to Brick Lane, then I’m going to fight hard to hang on to that role long past the point where it would be good to get somebody else to do it. If my identity is in having a cool job that makes people react a certain way when I introduce myself, then I’m going to fight hard to find jobs that are interesting rather than necessarily the job that will enable to serve Christ most effectively. If my identity is in being the Bible-teaching Computer Games guy, then I’m going to be jealous and hostile towards other Christian games developers I perceive as a threat to that identity. Our insecurities lead to ambitious rivalry.

Meet, then, the most secure man who ever lived,

“who, though he was in the form of God, did not count equality with God a thing to be grasped, but made himself nothing, taking the form of a servant, being born in the likeness of men. And being found in human form, he humbled himself by becoming obedient to the point of death, even death on a cross.” (Philippians 2:6-8)

Jesus’ rock-solid security in being God himself enabled him to give up all pretences at ambition and become a weak, pathetic human baby, who grew up to be a weak, pathetic man hanging on a Roman cross – despised and rejected by men, written off as a lunatic or a blasphemer. If Jesus had stood on his rights for even a second – where would we be?

Because of this amazing humility on the part of Christ, the Christian’s identity is rock solid – we are children of God, those who have “encouragement in Christ, comfort from love, and participation in the Spirit” – so we have every reason to be some of the most secure people around. So are you willing to consider others’ needs above your own? Are you willing to consider others as more significant that yourself? Charlie’s rather penetrating examples included being willing to train somebody else until they become better than you and easily outshine you – being willing to let others have a chance even when you think you could do a better job, when the circumstances allows.

Where does your identity come from? Lord God – may you give us the mind of Christ!

Some New Years Goals

In years gone by I have had a tendency to scoff at the notion of New Year’s Resolutions, but I’m increasingly coming to see the value of a clean break and an obvious opportunity for reflection (which is offered equally well by a birthday, a new academic year or moving into a new flat – there’s nothing special about January 1st). This year I have a few goals which I shall now proceed to share with you.

1. Paying For Online Services I Use

I suspect this one is inspired by Jeff Atwood somewhere along the line, but I’ve decided that in a struggling economy it becomes even more important to pay for what you find useful. Sites like Wikipedia, ToodleDo and Flickr add immense value to my life, and they rely upon paying users to keep them running for the long term. Just because we’ve got used to having stuff online for free doesn’t mean that’s a sustainable state of affairs.

2. Finishing a Puzzle Overview Document

I’ll probably blog about this one in a bit more detail some time, but I hope to finalise the list of puzzles and solutions for my first Bible-teaching computer game within the next few months. It may be hard work, but it helps to have goals!

3. Learning To Live Sustainably

No, I don’t mean I want to “go back to the land” and learn to grow my own vegetables (though having said that…). By “learning to live sustainably” I mean getting out of the mindset that leads to short-termism and burnout. Years of disposable accommodation lived in for 12 months and then discarded, along with the housemates I shared it with, has led to all sorts of bad habits. Moving regularly could be considered the brute force solution to an aversion to cleaning, but it’s really not sustainable in the long run. Similarly, the pattern of overcommitting yourselves during the term, massively overdoing it and then crashing during the holiday break from Bible-studies and so on might work if you only expect to be at the same church for a year or two, but if you’re staying long term then something has to change. In 2009 I wish to learn to live sustainably.

4. Investing in Christian Community

This is another one that I eagerly hope to blog about at more length, but I have been thinking a lot lately about how to build true Christian community with genuine, deep friendships, and I hope to start putting some of that in to practice in 2009.

What are your goals for 2009?

The Curse of Information Addiction

RSS is Rotting My Brain

I’ve been thinking lately about the detrimental effects that I’m
suffering as a result of information overload. Over the last few months, the
number of blog feeds I follow in Google Reader has been steadily
creeping up, not to mention people I follow on Twitter and FriendFeed.
Most notable has been the effect on my concentration span – I now seem
completely incapable of focussing on anything for more than a few
minutes before I suddenly find myself back on the Google Reader tab
looking at what’s new. It’s an obsession – constantly craving that new
titbit of information to feed my addiction. As Seth Godin
recently said, “The internet is almost full”: not physically, but the
demands on our attention and our ability to take it all in are
dangerously overstretched.

The symptoms are very similar to
those suffered by TV addicts. A whole generation of couch potatoes is
widely criticised for having the attention span of goldfish, constantly
hopping from one sound bite to another as they surf the channels in
search of the next fix. I enjoy the fact that where I live in London we
don’t own a television – instead I watch DVD boxsets of specific shows
like “The West Wing” and “House“.
It’s proven itself to be a much healthier model than just plonking
myself down in front of whatever happens to be on the telly at that
moment: I can proactively choose what to follow, and the fact that
there’s a finite amount of material available allows me to make
informed decisions about how I’m going to pace myself.

A Better Way?

Some blogs really lend themselves to being read in a “DVD Boxset” manner. A favourite of mine is “Joel on Software“.
I arrived quite late in the day when Joel had already been writing for
several years, but because he tends to post a smaller number of higher
quality articles rather than blogging daily, it was still quite
practical to read through his entire back catalogue from start to
finish. Just like with my DVD boxsets, I’ve now done the same for a
number of bloggers of similar style, such as Rands In Repose and Paul Graham. The other thing that these three all have in common – another by-product of their writing style – is that they’ve all produced books
by collecting together the best of their blog posts on certain themes,
making them even more analogous to the television show’s DVD boxset.
Now that I’ve begun to notice the mind-rotting effects of constanty
flitting between different RSS feeds, I’m beginning to wish that I’d
simply bought these books rather than reading online.

The reason
that I find the appeal of Google Reader experience so enduring is that
at heart I’m a busybody. I like to know what’s going on in the world –
what’s new and exciting, what people are thinking and saying. New
version of WordPress just released – great! Google Chrome out of beta –
fantastic! Crummy Wifi at  the LeWeb conference – too bad! It feels
like too great a cost to stop following these news sources – to be like
everybody else and find out three months later when an article finally
makes it to BBC news. But I’m convinced that something has to change:
as Paul commands in 2 Thessalonians 3:11-12, busybodies who are idle when they should be working need to sort themselves out and get on with it!

Drastic Measures

The result of all this thinking is that I’ve decided to change my blog reading habbits for good.

  • I’m
    going to narrow down the list of blogs I read regularly to the ones
    that are of a consistenly high standard and which I really benefit from
    reading.
  • I’m going to favour a weekly or biweekly session of
    sustained reading of those blogs, rather than feeling the need to read
    posts the minute they’re published.
  • I’m going to put a premium
    on bloggers who collate the best of what they read online for you so
    that you don’t have to – feeds like Robert Scoble’s Shared Items or Justin Taylor’s Christian blog “Between Two Worlds“.
  • Related to that, I’m going to carry on my habbit of reading high quality aggregation sites like Hacker News once daily and let other people do the obsessive RSS reading on my behalf.

My
hope and prayer is that however painful it might feel in the short
term, over the long term I’ll really benefit from this change of
attitude and begin to see an improvement in my ability to focus on the
job at hand.

Things to ponder:
  • what habbits of yours are adversely affecting your concentration?
  • are there other ways to get some of the same benefits with less of a detrimental effect upon your work?
  • do you think the blogs you read genuinely offer value that makes them worth following daily?
  • do
    you find the blog posts you really enjoy reading often end up appearing
    on another site that you visit anyway, making it less important to read
    the blog directly?

I’m a Christian Software Developer

After running my blog in it’s current form for just over six months now, I’ve decided to slightly tweak the formula. I’ve been finding the tagline of “Christian Software Development” somewhat restrictive in terms of what it inspired me to write about, and my trusty Google Analytics stats have suggested that it would be perfectly sensible to relabel geero.net as the site of a “Christian software developer” instead. As a Christian who also happens to be a software developer, I hope to be able to bring to bear a Christian worldview on issues that I find interesting, and which other software developers, Christian or not, are also likely to be interested in – which is pretty much what I’ve been doing already but less intentionally.

What this means practically remains to be seen, but I have a number of potential blog posts brewing at the moment and hope to write them up over the next few weeks and months. Stay tuned!

The Idolatry of Brand Names

As I was standing outside the Apple store on Regents Street waiting for my friend to finish his shift there, I couldn’t help but notice the looks of reverence and awe on the faces of those who passed by. There seemed to be a widespread recognition by all who gazed across the threshold that this was hallowed ground – one of the sacred sites of the Western world which rivals any ancient temple. Us sophisticated modern people look down our noses at the naivety of the ancient world who trembled before their pantheon of gods – we’re far too educated for such superstition! And yet it began to dawn on me that maybe we’re not so different after all. They look rather different and we call them by different names – could it be that our Mount Olympus is occupied by the imposing brand names of large corporations? The gods and goddesses Apple, Microsoft, Sony, Nike, Pixar, Google? Just as the gods of old dominated every aspect of life for those who worshipped them, from agriculture to childbearing, so too the modern brand name deities exert their influence over all walks of life, from what we buy to where we work. Below are three big similarities that I thought of – perhaps you can think of more!



Image by strangeaeons

1. They give us a sense of belonging

When talking about his new book “Tribes“, marketing guru Seth Godin said this:

“Harley Davidson and Apple are titanic brands for the very same reason. They sell a chance to join a group that matters”

If you go to a web community conference like BarCamp or the Google Developer Day, you can’t help but notice that 90% of the people there seem to have a MacBook on their laps. The message is loud and clear: “if you were really a part of our club, you’d have one too.” It’s the same thing that causes school kids everywhere to spend such large proportions of their income on brand name clothes – worshipping the right branding gods shows that you’re a member of the tribe.

2. They cast a large shadow

Brands are held in awe – consumers flock to them, competitors fear them, employees find security under their wings; brands stand immovable and unshakeable, at least they like to think they do. I’ve long known my own idolatrous heart has been drawn to big brand companies when looking for work because of the prestige that working for one seems to convey. Buying your DVD player from Sony somehow feels safer than buying some unknown brand – you feel confident in the quality of your purchase, whether or not that’s well-founded. As the saying goes, “nobody ever got fired for buying IBM.”

3. They own their part of the world

Just like the idols of the ancient world were restricted in their field of influence, so it is with modern brand names. Where Demeter was in control of your crops succeeding or failing, so Microsoft dominates your office productivity; where Poseidon ruled the seas, so Google rules the world of the internet. To guarantee success across the board, the ancient pagans were forced to offer sacrifices to as many different gods as possible to make sure they covered their bases. After all, what if the one god you missed out ended up being the very one you ended up needing a favour from? Equally, it is not sufficient for the modern man to wear the right clothes if he does not not also own the right television or have the right job with a sufficiently well-recognised City firm.

The pressures of idolatry facing us today really aren’t that different from those faced by the Israelites back in the Old Testament. They were eager to avoid standing out from the nations around them, for example when they begged Samuel to appoint for them a king, “that we also may be like all the nations”; they feared that limiting their worship to just one God, the Lord, might incur the disfavour of another to their detriment; they often sought to make alliances with other, more powerful nations by worshipping their gods.

The antidote: worship the all-powerful Creator

The Bible’s antidote to their idolatry was to show how ridiculous it was in the face of God’s amazing bigness:

“Hear the word that the Lord speaks to you…: Their idols are like scarecrows in a cucumber field, and they cannot speak; they have to be carried, for their cannot walk. Do not be afraid of them, for they cannot do evil, neither is it in them to do good… they are all the work of skilled men. But the Lord is the true God; he is the living God and the everlasting King. At his wrath the earth quakes, and the nations cannot endure his indignation… It is he who made the earth by his power, who established the world by his wisdom, and by his understanding stretched out the heavens. When he utters his voice, there is a tumult of waters in the heavens, and he makes the mist rise from the ends of the earth. He makes lightning for the rain, and he brings forth the wind from his storehouses.”

Whereas their false gods were limited in their sphere of influence, the Lord made the whole world and has ultimate power and authority over every inch of it. At the end of the day, our modern brands are but the creation of human hands, who were themselves made by the one, true God. Our fear is often really just the fear of men – how foolish it looks when confronted with the almighty God?

So let us not fear the false gods of this age, but respond like the Thessalonians: who “turned to God from idols to serve the living and true God” – the one who made the earth by his power.

Friend Feed and Comments

Some of you may have noticed how utterly useless the “comments” area on this blog was – if you’ve noticed it at all! Well, today I finally got around to hooking my blog up with FriendFeed, an excellent service from a bunch of ex-Googlers. You’ll need an account with them to comment, but you really ought to have one of those anyway.

If I wasn’t so lazy, I might find the time to allow you to post comments without leaving my blog, but for now you’ll have to go to FriendFeed itself in order to actually post the comment, which will then show up at the bottom of the post itself.

The Wordle of God

romans8.JPG

I’ve had one of those rare weekends of having pretty much nothing to do whatsoever – praise the Lord for a very welcome break! It gave me a chance to do a bit of coding just for fun, and after discovering a brilliant website called Wordle I decided to make a mashup with Bible Gateway. The result: The Wordle of God. Whilst it’s basically just a lot of fun, I think it also has potential as a really useful tool for getting an overall feel for a Bible passage and what the dominant themes are.

 

Geero’s Recommendations – June 2008

Back at the start of May I left Trinity Mirror, where I’d been working for two and a half years as a web developer, and joined Framestore, a film company specialising in computer generated movies. It’s been a great experience that’s given me some helpful insight on my character and a fresh perspective on my time at the Mirror. The down side is I’m working a five day week and longer hours, hence why I’ve not succeeded in blogging much lately.

In the absence of something more profound to post, I thought it would be a fun little exercise to post a bit about the books, websites and places I’ve been enjoying over the last few weeks. For the uninitiated, my life is essentially one big routine, so this is a bit of a reflection of how I spend my days!

Morning Commute

I live in the East End of London and work near Tottenham Court Road in the West, so I basically have two choices for how to get there each morning:

  1. Central Line from Mile End to Tottenham Court Road – this is definitely the quickest route to work, taking about half an hour for me door to door. The downside is that the Central Line is absolutely rammed at half eight in the morning, such that you’ll probably have to wait for several trains to pass, and then once you do squeeze on you may not always have much room to get a book out and read it
  2. District Line to Embankment and then Northern Line to Tottenham Court Road – ah, much nicer! You can probably get a seat for much of the journey, making reading much easier. Shame it takes more like 45 minutes, though.

As for what I read: the morning is my time for reading a good Christian book to help my hard heart to meditate on God’s character. At the moment I’m reading the excellent Knowing God by Jim Packer – it’s one of those books I’d recommend every Christian to make a habit of reading regularly. I last read it about five or six years ago, and am finding it every bit as edifying the second time around.

My general criteria for my morning book is that the author should write in points short enough to read in their entirety before reaching your destination, but ideally with a bit of time left over to chew on what you’ve read and take it in properly.

Before Starting Work

I use a del.icio.us tag to neatly organise all of the websites I like to check before I get down to work. Currently on my list are:

  1. Twitter – it doesn’t take a minute to update your status once a day, and keep your Facebook friends up to date on the latest goings on in your life
  2. Various comics – at the moment I love reading Pearls Before Swine and F Minus
  3. Remember the Milk – I’ve only just discovered this fantastic website, but it’s great for helping overcome that sometimes overwhelming feeling that you’ve got so much personal admin to do and no chance of remembering all of it
  4. Google Mail – I resisted for ages, but having gotten the Google Mail bug I now use this exclusively for all my mail, forsaking my previous approach of downloading all of my mail onto my main computer on a regular basis and only having unread messages available through webmail.

Lunch Time

I have a number of options for lunch, depending on the weather and my mood.

  1. Russell Square Gardens – a bit of a walk from my office, but a beautiful little spot to sit and eat your lunch, read a book or have a quick pray
  2. The Covent Garden Talks – every Thursday lunchtime a bunch of Christians meet together on Endell Street to hear the Bible explained in way that’s really accessible to non-Christians. It’s a great resource to invite colleagues to, and to equip us to server God in the workplace.
  3. Google Reader – my ‘sit-at-my-desk’ lunch option is to go on Google Reader. I follow quite a lot of blogs, mostly programming ones. My current favourite is Jeff Atwood’s Coding Horror.

Banana Time

My whole family has a weird tendency to get the jitters just before dinner if we don’t get some sugar in us, so I make a point of eating one of the bananas my company freely provide us with at around 4.45pm. It makes a nice opportunity for a little break, where I often visit Hacker News for some thought provoking discussions.

Commute Home

The Central Line is much quieter at the time I go home, so I virtually always use it. In the evenings I tend to go for a secular book, and have just finished an excellent book called Dreaming in Code by Scott Rosenberg. It’s a very well written discussion of what makes software so incredibly hard to write, following the story of OSAF, the creators of the Chandler Project. I shall probably post some more at some point about some of the idea it’s given me for how to move forward with my Bible-teaching computer games project.

Evenings

Recently I’ve found my evenings to be pretty busy. I’m involved in a church called St. Helen’s, Bishopsgate, where I help to lead a student Bible study group. This year we’ve been doing a Bible Overview, which has been absolutely fantastic. I’m a bit sad to part with my lovely group now that they’ll all off for the summer :(

If you’re ever in the City area on a Sunday night, do come along to our 6pm service!

Summary

Well there you have it – my life in a nutshell!

Lessons Learnt From the First Job I Ever Quit

What I learnt about myself from my time at Trinity Mirror

On 4th September 2005, in God’s great sovereign
plan, I started work as a software engineer in the Digital IT department of the
Trinity Mirror newspaper group,
working on their online titles. It was a surprising move, in some ways: my
passion has always been for computer graphics and games development, and it’s
fair to say that web development had only ever been a sideline for me up until
that point. My priority at the time, however, was to get a reasonable job that
would enable me to still have a life outside of work so that I could get
involved in a church where I’d be
built up and equipped to serve Jesus in the long term, and Trinity Mirror
seemed like it would offer that. In the event, it exceeded my expectations in
every way, and any doubts I may have had quickly vanished. As a green young
developer with little experience of the realities of programming in a real-world
team it was a privilege to work with the very talented group of developers they
had working for them, and I shall be forever grateful for the masses I learnt
there about how to make great software, working on sites like Adzooks.co.uk and the rebranded Liverpool Echo and similar regional
newspaper sites. They taught me the joys of agile methodologies like Extreme Programming and Scrum; they taught
me the importance of actually talking to your customers and not just assuming
that you know that they want or even that they know what they want; they
taught me how (and how not) to write maintainable code (or at least why it
matters!); they certainly taught me the utterly incomprehensible choice of a
language that is Coldfusion;
but above all they instilled in me a deep routed desire to avoid the cheap and
easy hacks and implement the right solution in the right way.

So what changed?

For various reasons I’ve been getting increasingly itchy
feet for some months now, wanting to move on from Trinity Mirror. Whilst it’s
not appropriate to go into the details here of exactly why, I’d like to share
with you the following lessons that I’ve learnt about myself through the perspective
of my growing discontent:

  1. I’m a sinner. My colleagues will
    have had no problems identifying my many flaws, although I suspect they
    might think nothing of that which I consider most serious: my lack of
    thankfulness to God. It’s a testament to the depths of human depravity
    that when there were so many absolutely awesome things about this job I
    still managed to grumble my way through my last few months.
  2. Building something people want is way
    more interesting than exposing them to more advertising
    . Paul Graham
    is always going on about the fact that the best way to make wealth is to
    build something people want
    , but I’ve discovered through experience
    that it’s also the most satisfying kind of work I’ve ever done. I’ve only
    really just worked out why it was that working on Adzooks.co.uk was consistently the
    most interesting and enjoyable aspect of my job, and it’s this: when
    working on Adzooks, we were focussed on giving end users a more useful and
    more satisfying experience, often without any clear means of monetising
    it. The less satisfying projects were the exact reverse. There are some incredibly boring ways to
    make money
    out there, and also some awesome products with no strategy for making money whatsoever
    – but they’ll find a way some day. If I didn’t already, I certainly know
    now which of those I’d rather do for a living.
  3. I work best when my productivity
    levels are easily seen
    (for better or for worse). This is really a
    corollary of number 1 – I’m a sinner, who is both lazy and proud, and my
    behaviour in the face of changing circumstances has revealed that ugly
    truth. The loss of a great manager who was always aware of what I was up
    to and gave frequent feedback; a growing team where the contributions of
    individuals is harder to spot; a form of Scrum where the perception is
    that as long as you deliver what you committed to at the start of a
    fortnight there’ll be no questions asked – all of these things slowly
    began to sever the connection between how hard I worked and my standing
    within the team. The standard set for me is to “obey in everything those
    who are your earthly masters, not by way of eye-service, as
    people-pleasers, but with sincerity of heart, fearing the Lord” (Colossians
    3:22
    ), and yet instead people-pleasing seems to so often be the
    driving motivation, with sincerity of heart barely getting a look in. It’s
    easy to work hard when people will praise you for it; it’s far, far harder
    to keep pressing on when the hope of the Lord Jesus’ commendation is the
    only motivation on offer. On judgement day I shall have no defence but to
    plead the blood of Jesus who died to defeat such sin – and praise God for
    such a hope! For one day, by his grace, this sinful nature of mine will
    be overcome, and I shall be free to serve him perfectly as I long to
    do. In the mean time, give me small teams! Give me feedback! Give me high
    visibility of my productivity.

Finally, do I have any parting words for my co-workers?

  1. A huge “thank you” for everything.
    You’ve been great. It’s been marvellous fun. We’ve drunk a lot of tea.
  2. Be the change you want to see in the
    codebase
    . Don’t just grumble about the state of legacy code, get on
    and refactor it. Live the dream! Make things just a little bit better
    every day, placing your mark on the world. Be a garlic
    programmer
    .
  3. Never be content with mediocrity.
    You’re all smart, talented people. Yes, even you. Don’t settle for things
    the way they are – always be looking for ways to make things better. Read
    everything and anything you can get your hands on – you’ve got some great
    books on that shelf of yours! Question everything – why did that break? What could I have done differently to
    prevent it? What am I going to
    do differently to prevent it happening again? How will this change I’m
    about to make affect how hard this code is for other people to maintain?
  4. Make plans for eternity. Jesus may
    seem like a humorous joke to you at the moment, but one day you will die,
    and on that day you will meet him as your judge. “Of this God has given
    assurance to all men by raising him from the dead.” (Acts
    17:31
    ) I know it seems unlikely, but if it’s true then it’s so
    profound that it changes everything
    – isn’t that worth spending a few hours of your life to at least look into
    it?

Farewell, Trinity Mirror!

Tips for taking over someone else’s code

I’ve been dying for some time now to write a post explaining some of the changes I’ve been making to Blender’s DirectX exporter. In some senses it’s nothing particularly exciting, but it’s been a great learning experience for me, and it’s unearthed some little nuggets of goodness that I just can’t help but share.

The Importance of Feedback

I’ve been developing an engine to make 3D Point & Click adventure games for a few years now, and I have to admit that for much of that time I’ve been in a state of denial about how hard it would be to get content out of my 3D modelling package, Blender, and into my game. I’d only ever used pre-existing .X files for all my testing (good old Tiny.x!) and since Blender ships with a Python script for exporting DirectX files I wrongly assumed it be trivial to start creating my own when the need arose.

exporter_20080404.jpg

However, when I eventually tried it, it seemed to fail every time. The author was great at replying to my emails, and he was always able to diagnose some obvious flaw in the way my mesh was configured that was causing the exporter to stumble – “you’ve got a negative scaling factor”, “your armature isn’t parented to the mesh properly”, “you’re using envelopes instead of vertex groups for skinning”, and so it went on. These things were obvious to the author, since he knew exactly how the exporter worked and what assumptions it made, but to someone like me who’d never delved into the source code, all I knew was that my mesh wasn’t working properly and that I wasn’t being given any feedback to help diagnose the problem.

There’s a lesson in there: never let your software fail silently. If your user has ticked the “export animations” button, there’s a good chance that they think their mesh contains some animations. So why not check that you agree? If their mesh doesn’t contain any vertex groups that match bone names, and your code is built on the assumption that there are, it probably wouldn’t hurt to tell them.

The Mystery of Someone Else’s Code

Eventually I realised that I couldn’t rely on the author debugging my meshes for me forever, and that I was going to have to get my hands dirty to figure out why my mesh wasn’t working. I very quickly discovered what people have been telling me for years: it’s far, far harder to read code than it is to write it. I wasn’t helped by the fact that I’d never written a line of Python before in my life, nor did I have any knowledge of the Blender API. To be honest, I really rather enjoyed the challenge of figuring out this mysterious piece of code. Here are some of the tricks I used in my siege upon the citadel of mystery:

  • Treat every line of code other than the one you’re actually interested in as a black box that you don’t need to understand. This was helped by the fact that the exporter was nicely broken up into lots of beautifully short functions, so to begin with I could ignore all of them except the entry point. I’ve seen plenty of people give up and go home because they wanted to understand a complex system in its entirety, and the challenge was just too great. Gradually, over time, strongholds began to fall as I captured functions into my empire of understanding
  • Rewrite the code where necessary so that it documents itself. Many of the functions and variable names were either unenlightening or plain misleading. Here’s an example: the exporter gives the user two buttons, “Export All”, and “Export Selected”; which of those buttons do you think the ‘SelectObjs’ method belongs to? Well, for some unfathomable reason, that’s the function that exports all objects. Rename it! I’m a strong believer in having plenty of comments, but I’m an even bigger advocate of the idea that the code itself is the best explanation of what the code does (it’s certainly the easiest to keep up to date!) so it should be made as readable as possible by using sensible function and variable names. Got an argument called ‘obj’ which is always a ‘Mesh’ object? Rather than adding a comment to the code, why not rename it to ‘mesh_obj’ so that it comments itself? Conversely, if you have a variable called ‘mesh_obj’, make sure it doesn’t sometimes contain an ‘Armature’ object!
  • Liberal use of debug output – whilst you’re in the process of understanding some code, don’t be afraid to make it output all manner of superfluous debug information to help you get a feel for what values your variables hold at different points. Similarly, it’s helpful to explicitly document what assumptions you think the code is making about the contents of its variables (in C++ I’ve started to use ‘assert’ for this a lot more than I used to). Sometimes I’ve even used this in cases where you think it can’t possibly be necessary, and unearthed some really obscure bugs – for instance, if you’re convinced (and relying upon the fact) that two expressions are equivalent (e.g. you think that parent_matrix * my_matrix = combined_matrix) then by outputting the two expressions you can get a very helpful clue when you realise that they’re actually different.

Making it your own

Having started to understand the code a bit better, I gained the confidence to start making some improvements of my own. Here are some of my favourites:

  • ‘Why’ not ‘how’ – the original version of the code contained a good dozen instances of this line: name.replace(".", "").replace(" ", "_"), to deal with the fact that object names inside a .X file can’t have dots or spaces in them. Now, in some ways this seems harmless enough, but I wanted to factor it out into a method call anyway, just because I’ve got a strong dislike for ‘copy and paste’ coding. I could have named the method, “remove_dots_and_spaces” (a ‘how it does it’ name), but I’ve come to realise that a semantically descriptive name is much more useful, so I called it “make_x_compatible_name” (a ‘why it does it’ name). By doing that, it got the creative juices flowing, and I started thinking about what else might cause a name to break your .X file, and came across an example where using a reserved word (e.g. ‘string’ or ‘integer’) as a name caused it to break. Having a method factored out made it trivial to add some code to check for reserved words, and the change then immediately applied everywhere that method was used. Fantastic!
  • Pythonesque-ness – I can’t say for sure, but one got the impression reading this code that, like myself, the original author wasn’t a native Python speaker. I had great fun and learnt all sorts of neat things by rewriting things to be as Pythonesque as possible. I think so far my favourite Python feature is list comprehensions – the ability to generate new lists based upon old lists in a single line of code, a sort of combination of map and filter all in one neat piece of syntactic sugar. In my view, rewriting the code to be more ‘natural’ Python makes it a lot more compact and readable – it allows the intent to show through more clearly without being distracted by the means.
  • More robust error handling – I’ve added a great deal of code to the exporter that spots problems with how your mesh is configured and reports back to you. Hopefully that means it will be a lot more useful for real life work by real life people. One of my goals was to fix anything within the exporter that would require ‘fiddling around’ by the artist, since code in the exporter only needs to be written once whereas there are a lot of 3D assets to be made, and the exporter needs to be run again and again.

You can find my version of the exporter here. If you do experience any problems with it, please report back and send me your .blend file so that I can continue to improve its error detection and feedback.

Yesterday’s Priority is Today’s Procrastination

I’ve begun to notice a recurrent phenomenon lately that is totally killing forward momentum on my Bible-teaching computer games project, namely this: What was a genuine top priority yesterday turns out to be a complete waste of time today. When I dropped down to a four day working week last September in order to devote
more time to my game, I spent the first day drawing up a list of my top priorities. It wasn’t hard: there was a clear show-stopping feature that had been holding up substantial development for about six months. The stupid thing was that once I got down to it, I was able to bash out an implementation in a single weekend – opening the floodgates for all sorts of exciting progress that was dependent on that feature. Why oh why had I spent the last six months circling around the real issue, tinkering with code that simply didn’t matter
in the grand scheme of things?

“Never again,” I told myself. From now on, let’s always pick the most important feature and prioritise that. Yet barely a few weeks had gone by when I found myself in the exact same situation, frittering away my time on an annoying piece of code that actually wasn’t all that important, whilst the real meat left untouched in some other part of the system. So I asked myself how it had happened. Where was the bug in my process? What it came down to is this: my granularity of features was too large. Sure, the most important thing that needs doing today is the Doodad Whatyajibbet, but is it really true that every single line of code I’m writing under the Whatyajibbet umbrella is really equally important? The answer, in my case, was a resounding no. Yesterday, the Doodad Whatyajibbet was my critical path, but now that 70% of it has been implemented, it’s the FlimFlam MegaDoowhat that’s standing in the way of real progress. Getting this wrong is a disaster for motivation in the long run, because you get into situations like mine were you’ve spent six months faffing and essentially have nothing to show for it. What’s more, my days at home when I get to focus on my game are a precious resource that I really don’t want to be wasting – good stewardship of this amazing gift God’s given me demands that I use them wisely.

This is one of the things that agile methodologies like Scrum really help you with, if you do them well. You break your projects down into the smallest work units that make sense on their own, and then each sprint you pick the user stories that are going to give you the biggest return on
investment.

So here’s my battle plan moving forward:

  • Each day, pick the smallest work unit that’s standing in the way of progress
  • Implement as little as you can to see the benefits you’re after
  • Deprioritise mercilessly the things that won’t move me towards my goal

Repentance and Refactoring

Nothing to be proud of

I had a disturbing realisation the other day when I was asked to put together a code sample for a job application – I can’t think of a single piece of code I’ve written that I’m actually proud of. In fact, even ‘proud of’ is probably setting the bar a bit high – I can’t really think of many things I’ve written that I wouldn’t be ashamed of showing to a potential employer.

Now that, in itself, doesn’t actually worry me too much. In the context of applying for a job, I could talk at length about what’s wrong with how I’ve coded things and how I’d do it differently were I to start again – that kind of stuff actually makes for quite a good interview. I suspect that a large part of the reason I have so little code to be proud of at this stage in my professional development is simply that most of the things I’m programming I’m doing for the very first time – the first compiler you write, for instance, is bound to be a hopeless mess, because it’s often only in the coding of it that you figure out what on earth you’re doing. What’s more, as I learn the right way to code these things, my tolerance for ugly code diminishes – I often find myself flinching at little idioms I used to use with such abandon. It’s even been said that the very thing that distinguishes amateur coders from professionals is realising that everything you write sucks!

So the existence of shameful code doesn’t cause me to despair. Of more interest to me, and what this article is all about, is this: given my past experiences, why am I always so confident that my next piece of code will be different? What is it that means I’m always so blind to the probability that what I’m working on right now will prove to be equally ropey once I reach the end of it? It seems to me that it’s in the nature of computer programming that everything you ever write makes you learn something new. The result is that you’re constantly raising your standards and never completely happy with your previous coding efforts. Yet my heart seems to be several steps behind my head in realising this.

Refactoring your technical debt

In most programming projects, this constant growth means that you’re always left with something of a technical debt: pieces of code that could do with some attention to make them easier to understand, easier to test, easier to modify, and so on. It’s that piece of code in your most recent project that you know wasn’t quite “clean” enough for your liking, but which you didn’t have the time or energy to sort out at the time. You can usually get away with ignoring your technical debt in the short term – generally it doesn’t actually mean anything is broken, functionally speaking – but the cruft tends to accumulate and if you don’t give those areas of the code the attention they need, eventually it can lead to real problems.

People who are blindly optimistic about their abilities, like I seem to be, are likely to be content with the classic Waterfall Model of software development. This is the approach that assumes everything will go exactly according to plan – that everything will be perfectly designed in all its fullness, then perfectly implemented with no architectural flaws whatsoever, before being released to perfectly happy customers who are receiving everything they hoped for. Thankfully, most people these days seem to be realising that pretending this works doesn’t actually get you anywhere. Instead they’re embracing agile methodologies like Extreme Programming which are built upon an explicit acceptance of our human weaknesses – imperfectly knowledge, imperfect requirements, imperfect decisions – an assumption that happens to synthesise very happily with a Christian worldview that is only too aware of our sinful nature. One of their key tenets is the idea of Constant Refactoring. If you haven’t come across the term before, “Refactoring” describes the process of modifying the internal structure of your code and tidying up interfaces and so on, but without changing the observable behaviour. It’s about paying off your technical debt, little by little, until you have a code base you can be proud of. Agile methodologies embrace refactoring, because they know you’ll need to do it – they know you won’t be satisfied with the way you coded it the first time around, or even the second or the third. Of course, refactoring has to go hand in hand with repentance – a commitment to turn from your evil ways as a cowboy coder and start putting into practice all that you’re learning. Refactoring without repentance is a pointless exercise, since the chances are you’re just replacing one technical debt with another.

Refactoring the Christian life

But if it’s in the nature of computer programming that constant growth means you’re never completely happy with your previous coding efforts, how much more is this true of the Christian life? How often do you find yourself cruising along, thinking everything’s fine spiritually, only to look back on the last few weeks and notice some massive area of ungodliness that you’d overlooked: maybe some action of yours that really hurt someone without you even realising it, or maybe some persistent behaviour that you later realise has been a dreadful witness to your non-Christian friends. It’s part and parcel of the Christian life, for as Jim Packer says in “A Passion For Holiness“, growing up as a Christian is really all about growing down – that as we grow we “end up seeing ourselves as less – less nice, less able, less wise, less good, less strong, less steady, less committed, less of a piece – than ever we thought we were. We stop kidding ourselves that we are persons of great importance to the world and to God. We settle for being insignificant and dispensable”.

As God sanctifies us and conforms us bit by bit to the image of his son, we find our consciences flinching at things that previously never bothered us. Our tolerance for sin in our lives should always be less than it used to be – so long as it continues to be greater than God’s. As in programming, repentance is a way of life for the Christian, not something that you do once when you first decide to follow Jesus. The difference, however, lies in how we must deal with our past failings. For whereas bad programming leaves us with a technical debt that I can solve myself with a bit of refactoring, bad living leads to a spiritual debt that nothing short of death can pay for. Writing bad code has no legal ramifications
– although I’ve previously argued that there is a Christian imperative to write the best code we can out of love for our co-workers and our employers, I’ve not broken any laws by writing bad code. I don’t face a jail sentence or a hefty fine. But bad living, on the other hand, is a legal matter. Rejecting God’s rightful rule over my life and choosing my own path is tantamount to treason, and carries a penalty that I have no hope of paying myself. It takes the death of Jesus in my place as a substitute to set me free. For a proud programmer like me, becoming a Christian is an act of the utmost humility, as you admit to God that you are unable to offer anything towards your salvation, and that only the death of his son Jesus can pay off your debt. As Romans 6:23 puts it, “the wages of sin of death, but the free gift of God is
eternal life in Christ Jesus our Lord”.

Thank God for the ultimate software architect, the Lord Jesus, who refactors my ugly past, pays off my spiritual debt and cleans up the rope in my life so that I can get on with daily repentance as I seek to follow in his footsteps.

Programming Under the Lordship of Christ

Yet another coding blog?

When I relaunched geero.net a month or so ago, I did it under the slightly ambiguous subtitle of “Christian software development”. It’s true that I planned to talk about software which is explicitly Christian, particularly centring around my Bible-teaching computer games, but it is also my intention to talk about issues that affect Christians who are involved in software development, both professionally and as a hobby. But there are loads of brilliant programming resources out there written by people far smarter than me. So why does the internet need yet another coding blog, and why would I be arrogant enough to think that I can contribute anything unique? In fact, isn’t it a bit weird to a have a blog devoted to Christian software development in the first place? Isn’t being a programmer completely orthogonal to being a Christian?

Whilst the connection may not seem apparent at first glance, I think that being a Christian actually has quite a significant impact upon your computer programming. The Bible says that Jesus is interested in the everyday details of our lives, including our coding – and not just what we code, either, but the nitty gritty of how we code it. If he is the source of all our gifts and abilities, then it makes sense that he would be concerned with how we use those gifts, and it brings him glory when we use them well. To paraphrase Colossians 3:17, “whatever you do, in word or code, do everything in the name of the Lord Jesus, giving thanks to God the Father through him.”

One of the big themes of the New Testament is Jesus as King- the ruler of everyone and everything. As Abraham Kuyper once famously said, “There is not a square inch in the whole domain of our human existence over which Christ, who is Sovereign over all, does not cry: ‘Mine!'”. Nothing is outside of his rule, including our work and our coding. So what will it look like for us to bring our programming under the Lordship of Christ? It seems to me that there’s plenty of space for a blog that helps us think that through – I know I’ll certainly benefit from writing it!

Conduct in the Workplace

It seems obvious, but first and foremost, Christian programmers are Christians. That means that 99% of living under the lordship of Christ is exactly the same as if we were lawyers or secretaries or school teachers or acrobats. We’re called to be salt and light in the world, being a good witness to those around us, graciously speaking of Jesus when we can and commending him with our lives and our work. When speaking to slaves performing the most menial of tasks, Paul writes this:

“Whatever you do, work heartily, as for the Lord and not for men, knowing that from the Lord you will receive the inheritance as your reward. You are serving the Lord Christ” (Colossians 3:23-24)

It can be tremendously encouraging to know that Jesus cares about our work! Whether we’re professional programmers doing it for a living, or just a hobbyist hacking something together in our spare time, we’re to imagine Jesus as our real boss, calling the shots. We’re to work heartily,
putting all of our effort into it, and not just when our manager is looking over our shoulder (“not by way of eye-service as people pleasers”).

This is an area where I constantly find myself falling short. It’s so easy to slack off and start browsing the net when nobody’s looking, or to start grumbling if we seem to be going through a phase full of bugfixing and maintenance instead of any exciting new development. But this can be a terrible witness – especially since grumbling is like gangrene and is so quick to spread amongst a team, with disastrous effects on morale (incidentally, if you do find yourself wading through a month full of boring bug fixes, it may be an indicator that the code you wrote last month was a load of old rope – bear it in mind!)

Writing Quality Code

As a general rule, programming under the Lordship of Christ is going to mean doing the best job we can. Even when you’re programming for fun, it still glorifies God when you make good use of the gifts he’s given you, honing your skills. When you’re doing it professionally, however, it’s absolutely vital to your witness to be writing good code. Bad code is a headache for everybody who has to maintain it, so you can really serve your colleagues by writing code that’s easy for them to understand and change, with
good comments and unit tests, and so on. Even if you’re on a team of one, you can still show consideration for the poor soul who’ll have to maintain your code once you’re gone!

But as in most fields, quality doesn’t just happen by accident. So how do we learn how to write good code? Firstly, I’d say that if you’re not in the habit of reading programming blogs (in your lunch hour, of course!) then I’d highly recommend adding a few to your favourite RSS reader. Some of my
favourites are the Daily Worse Than Failure, and the joel reddit. These kinds of things can be great for exposing you to ideas that you wouldn’t have thought of on your own, and for keeping on top of the latest trends. Secondly, nothing beats getting your hands dirty for learning how to code better. The most valuable experiences
for me have been when I’ve had to maintain some truly awful code left behind by my predecessors – it really teaches you the pain that you can cause through sloppy coding practices!

The Problem of Proud Programmers

I want to close by addressing one sin that I think programmers are probably particularly prone to, and that is pride. We all know the stereotype of the computer
programmer, and great people skills aren’t part of it. But I wonder if part of the reason the stereotype is so often accurate is because of the kind of people who are attracted to computers. Other people are so inherently unpredictable, which some people find really hard to cope with, and computers can provide real
solace for them. I find it much easier talking to my computer, where I can tell exactly how it’s going to respond to a given input. But I wonder if this means that programmers are especially likely to slip into pride. We’re used to exercising complete dominion over our CPU, bending it wherever our will determines – we are like gods among men! Except we’re not – Jesus is the king, and programming under his lordship being quick to acknowledge that. It’s why the Bible devotes so much space to the issue of pride, since it’s a particularly nasty form of idolatry that sets us up as rivals to the Lord Jesus. Yet it’s not a topic that you’ll find covered in many other programming blogs. There are certainly writers like Jerry Weinberg who talk about the practical benefits of “egoless programming“, but I think there’s a massive spiritual dimension to pride that means there’s real benefit to be had from a programmers’ blog from a Christian perspective.

Programming under the Lordship of Christ won’t always be easy, but he’s promised to give us grace enough for each day as it comes, so let’s keep going in his strength as we spur one another on to love and good works.

And Now For Something Completely Different

You’re going to start seeing a few changes here at Geero.net over the next few months. I’ve decided to redesign the site, and put more of an emphasis on content related to being a Christian programmer, and also programming Christian software in particular.

If there are broken links or you can’t find the content you’re looking for, please bear with me. I have tried to make sure as many of my external links as possible still work, but I may well have missed a few.

Thoughts of a Christian Software Developer