Practices of the Proper Christian Programmer
This post is to announce the publishing of “Divine Code – Practices of the Proper Christian Programmer”.
Whilst more or less appropriate commandments have a long standing tradition in software development – one of the first examples being Dijkstra’s famous “Goto Considered Harmful”, little has so far been written about sound practices in God fearing development, that acknowledge the necessity of a strong faith and recur to the spiritual experience of two millenia.
The authors provide us with a step by step introduction to the practices that could very well be used as a maturity model.
They start out with the practice of Prayer. Praying has a long standing tradition in software development – the steps pray and deploy are part of every serious continuous integration effort. It is now well understood that the power of the prayer is – not unlike TDD – twofold. There is a direct effect when the spirit enters the code base as well as an indirect effect through the changed mind-set of the developer. Some pagan processes do rely on daily standups as a substitute for prayer. These efforts might be well-intended but do nonetheless amount to heresy!
Further practices include Christening, which involves getting your system properly soaked, the Holy Communion formerly known as team drinks, Exorcism which comes in different degrees ranging from the casual refactoring to a full blown rewrite. When all that could be done has been done the Annointing of the Sick Code Base could be your last resort.
Another practice that has recently been falling into misuse by heathen folks is the Sacrament of Reconciliation aka Confession. The godless call it retrospective though.
Peace of mind is essential for the productive programmer and can easily be achieved with the firm believe in theProject Everlasting. Everything else failing there is always the option of applying the time honored practices ofCrucifixion or Stoning to the incompetent manager or customer, though the authors concede that in most cases generous amounts of Holy Water and Incense will do.
In the true spirit of inclusiveness and diversity there is a contributed chapter on Halal coding Habits, that provide an even more elaborate mental frame work for the aspiring programmer, vividly illustrating that Christianity is not the only hope for the industry. Halal actually meaning lawful or permitted our knowledgeable co-author makes a good point that doing the bad stuff makes the project go haram – unlawful. Another interesting point is his elaboration on the importance of a prophet between the mere mortals and the divine, incomprehensible supreme being. This indirection has indeed come to us in the form of asynchronous messaging with a certain BizTalk combining these virtues with the agile virtue of talking to the biz.
The book is available as of today, April 1st 2010 – let the lord in to your heart. Buy a copy. And become a truly superior programmer.
no respect for IIS
I never liked IIS, internet information services… Already the name sounds quite wrong.
Coming from a Java/*nix background, these are the things I’m missing the most:
- A web UI
Seriously, every application/web server I ever used had one, from the very basic and almost useless of the early versions of tomcat (didn’t check it for quite a while now) to the super complex and unusable of websfear (Google says: Did you mean: websphere?).
I hate the fact that I’ve to remote desktop onto the machine, and the rich client UI seems a bit simplistic, it doesn’t look geek/professional enough, it seems just yet another silly tool from Microsoft like regedit or notepad, it’s ridiculous and also quite hard to use (all those “Advanced settings” and “Basic settings” menus).
My impression is that at Microsoft they don’t have any idea on how to write something that looks enterprise, they always try to make happy the people that don’t know how to use a computer…
- Efficient/Proper/Decent Logging
Last week we were trying some rules on Netscaler, in order to balance traffic depending on user agents and other parameters: the IIS log sucks. After some googleing I’ve found out that I had to download and install the “Advanced Logging Module for IIS” in order to have decent, real-time logging, as they call it. What? Logging has to be real-time always! And it is on any other server!
I believe that the “standard” installation of IIS doesn’t have “the advanced logging” feature just because the windows filesystem sucks but if you know any better reason to take off such an extremely basic feature off from IIS please let me know.
I had to install on all our cluster instances cygwin to get a proper tail, but I can’t blame IIS for this, it’s off topic.
- Rewrite module
Well, apparently it’s another “advanced module”, I kind of see that they wanted to have something like a plugin architecture (unfortunately you can’t just drop all these modules somewhere, you have to go through a bloody wizard!) but this module… It’s again something very basic, I don’t understand what is advanced in it.
- Configuration
In all the other application servers I know you setup/change once and then you are done with all the others: the configuration is on a readable format (and if you’re a cool dude you are not using the UI anyway!), you can copy it across all your servers, done.
Some .net folk may argue that you can do the same cloning the whole machine, good point. Unfortunately we went in some unknown and crazy IIS errors cloning one machine from one domain (QA) to another one (LIVE).
I’ve no respect for IIS, and it’s a shame, .net 3.5 and 4.0 are quite nice languages that are evolving not being stuck as Java.
Other modules that you can get from the IIS site and I haven’t tried yet:
- http://www.iis.net/expand/webdeploy : web deployment… another basic one totally missing
– http://www.iis.net/expand/ApplicationRequestRouting … application based routing, quite basic and needed
- http://www.iis.net/expand/ApplicationWarmUp … application warm up? what? yeah, right, apps in IIS take ages to start… how sad!
- http://www.iis.net/expand/IISManager … remote management… No Web UI unfortunately…
- http://www.iis.net/expand/PowerShell#mce_temp_url# … scripting… like bash? not really, but scripting…
Other findings on IIS in my last 9 months:
- Application pools “recycle” every 20 minutes by default! It’s like saying, you are such a shitty developer, I bet you got plenty of memory leaks, let’s restart your stuff every twenty minutes! Since starting an application in IIS is not really fast and since you’ll have probably to reconnect to the DB, reinitialize your application/NHibernate cache, your IOC container you may get some troubles here!
- Applications tends to take ages to start up, as mentioned above, I really don’t know why, the WarmUP Module may help (sad lol)
No respect, not for Microsoft tools not for IIS, end of the story.
#monoglot architecture for the #win
I’ve probably spent too many nights up in North Wales recently and had way too many rants with Mark and Chris , but if it’s true that initially I’ve been quite attracted by polyglotism now I can see its risks and the costs.
On the project where I am now we are using quite some different domain specific languages to build a trivial web application: C#, CSS, HTML, XML (at least in 3 different ways: nhibernate mappings, nant build, web config), ASPX, Javascript, SQL and unfortunately some TSQL store procedures.
We didn’t plug in any other fancy new thing, some F# or some boo, could be quite cool. Neither we write our acceptance tests using ruby and cucumber like David and Mike are doing on their projects.
So, before starting to write this blog I did a search on google for posts taking about monoglotism vs polyglotism I’ve found a a good one that references this other good one criticizing polyglotism, so I am not going to criticize it, I want to think forward, what could be a good, general purpose language that will allow me to write an entire web application without having a pile of 7 or more books on the desk?
I’m quite intrigued by Javascript in these days.
Therefore I am trying to write something that uses only Javascript, server side and client side…
I’m looking at frameworks like Sammy (cheers Mark), at Node.js (Cheers Duncan), at CouchDB for the persistence layer and at at the JQuery haml plugin for the view layer (cheers Chris).
This is good seriously good stuff, the benefits on using only Javascript are enormous:
- you can rely on a solid framework like JQuery on client side code and on server side (think about validation)
- you can easily TDD your controller logic if JSON is the input and the output of your controllers
- you don’t have to mess around with SQL and embrace the NoSQL Movement
- you can write event driven fragments of the UI leveraging node.js & on the fly generated html
- you can easily cache JSON using any in memory cache provider and restful controller calls
again on the story wall… the hold zone
Yesterday I’ve got a nice comment from JK on the previous blog post about the story wall and we talked a bit about our story walls (he’s a the same client but on a different project).
I didn’t realize we both have an hold zone at the bottom of the story wall, for blocked stories/stories on hold.
He pointed out and I totally agree that that is the most dangerous thing you can do.
Stories are prioritized top down, putting them down there it’s like saying that they have no value, low priority.
That horizontal section is also so low that you almost don’t see them.
At that point I’ve realized that we actually had that section, I’m still shocked I didn’t remove it earlier in the project!
So, what is JK doing in his team now? He keeps the stories on hold on the same position as they were, with a visible block-sticker on them.
With that he is avoiding:
a) the mistake of forgetting a story
b) the mistake of change the priority of a story for no reason
He’s achieving more visibility on the blockers in the project and with few blockers on a lane it will be hard to pull more stories there, so you will be naturally forced to solve those blocking issues. (a bit of TOC always helps)
