Third Shelf

Programming pragmatically

Posted in books, dont-program-if, productivity, reviews by Sydney du Plooy on June 13, 2010

Don’t program if… you have not yet read The Pragmatic Programmer: From Journeyman to Master by Andy Hunt and David Thomas. I never understood what all the fuss was about and here I am making a fuss about it.

pragmatic 1540s, from M.Fr. pragmatique , from L. pragmaticus  ”skilled in business or law,” from Gk. pragmatikos  ”versed in business,” from pragma  (gen. pragmatos ) “civil business, deed, act,” from prassein  ”to do, act, perform.” (1)

Pragmatic programmer

So, what makes a pragmatic programmer? A pragmatic programmer is someone who exhibits certain attitudes and practices when thinking, writing, testing and deploying software. This includes being an early adopter or fast adapter, being inquisitive and thinking critically. It also means being realistic and being anything-ready. And to be anything -ready one must learn continuously.

One of the major philosophies is to always place the problem and the solution in a larger context. This means to always think beyond the immediate problem and see the bigger picture. Why? Simply, so that you can make informed decisions such as deciding where to comprise and where to apply the Pareto principle.

A pragmatic programmer takes responsibility for everything they do. They don’t just sit there and watch the code rot. A pragmatic programmer will always endeavor to keep the code pristine.

Instigating change is another important skill that a pragmatic programmer must learn to apply. People are naturally opposed to change and in order to be a pragmatic in a software project, it is sometimes necessary to break the “we have always done it like this” mentality.

Skills and Tools

Using the appropriate tools is one of the best ways to amplify your productivity. Try various tools and pick the ones that work for you. Then, learn them extremely well. Mold them to the shape of your hand. Consider the following categories of tools:

  • Source control
  • Text manipulation
  • Debugging

Another important tool is to be able to touch type. This is a worthwhile skill to learn, so be prepared to put in a lot of time.

Life as a pragmatic programmer

Being a pragmatic programmer does not make you write perfect programs. Accept it. Things will go wrong and when they do, we should ensure that the data always remain consistent. As the book says “dead programs tell no lies” and sometimes it is best to just simply kill it.

As long as there are people, software will change, continuously. That’s life. Pragmatic programmers guard themselves against the impact of these changes by observing the Law of Demeter (it’s not a dot counting exercise) and decoupling dependencies. Keep separate concepts separate.

Coding is not just a matter of transcribing requirements into source code. It is a continuous process of making decisions. Decisions that will either pave your way or cause you grief later on. The choice is yours. Think critically about every line of code and remember to refactor continuously. Test, test and test some more.

While building software, there are two important principles that a pragmatic programmer always observes. These are avoiding duplication at all costs and avoid splitting a piece of knowledge across multiple components. Failing to observe these two principles will invariably bring you headaches in the future as the source code spirals out of control.

This is the way of the pragmatic programmer.

By the way, there are loads of tips in the book that will not only benefit you now, but for as long you write code.

(1) Dictionary.com, “pragmatic,” in Online Etymology Dictionary. Source location: Douglas Harper, Historian. http://dictionary.reference.com/browse/pragmatic. Available: http://dictionary.reference.com. Accessed: June 13, 2010.

Personal Knowledge Management with a Wiki

Posted in books, gtd, management, productivity by Sydney du Plooy on April 7, 2009

In the excellent book Pragmatic Thinking and Learning: Refactor Your Wetware (Pragmatic Programmers) by Andy Hunt, he suggests that every programmer should have a personal wiki in order to manage knowledge effectively. A sort of exocortex. A place where you can keep ideas, thoughts and nearly anything you want outside your brain.

Ever received one of those emails that you just have to keep somewhere? That snippet of source code that might come in handy? That chocolate muffin recipe? Why not put all of it into your wiki?

My personal choice of this kind of wiki is TiddlyWiki. Simply because all of the content is in a single HTML file. Fan of Getting Things Done? TiddlyWiki can easily be configured to support the Getting Things Done methodology. Have a look at d-cubed for example.

Bear in mind that it has a learning curve to it, but if you are willing to stick to it you will surely reap the benefits.

Some of the features include:

  • Tagging
  • Searching
  • Text formatting, including support for monospace
  • Highlighting
  • Block quotes
  • Tables
  • Headers
  • Save with backups
  • RSS feeds

I would suggest the following plugins to really spice-up TiddlyWiki:

Check out TiddlyTools and TiddlyVault for other plugins. It supports themes, which can be downloaded from TiddlyThemes. There is also a great cheat sheat available.

Tagged with: , , ,

Workplace Morale

Posted in management, productivity by Sydney du Plooy on December 27, 2008

Lately I’ve been thinking on morale in the workplace. What is morale? According to Alexander H. Leighton, “morale is the capacity of a group of people to pull together persistently and consistently in pursuit of a common purpose“.

From this quote, it is evident that if morale decreases, people will no longer pull together in pursuit of the common purpose. Following from that, we can then say that morale is the glue that keeps people united and focused on the given task.

Sustaining a healthy level of morale in the workplace should be one of the primary concerns of managers. I’d like to think that every workplace has a set of morale pumps that help to maintain a certain level of morale, whether it be great coffee, job security or an energizing work culture, which contribute to keeping employees focused and united.

In the current economic environment where most businesses have to consider cutting costs on most levels, be careful when cutting costs on the morale pumps. Consider the cost of reducing and taking away that which maintains this level of morale. I think investing into keeping morale high is probably more needed now than ever before.

Here are some factors that influence morale in the workplace, either positively or negatively :

  • Job security;
  • Management style;
  • Staff feeling that their contribution is valued by their employer;
  • Realistic opportunities for merit-based promotion;
  • Team composition;
  • The work culture;
  • Compensation;
  • Recognition and rewards;
  • Work that isn’t challenging;
  • Limited growth opportunities;
  • Fun environment to work in
Tagged with: ,

OneNote 2008

Posted in gtd, productivity by Sydney du Plooy on August 30, 2008

One more favourite tool that I have come to like a great deal is OneNote 2008. Straight from the box I got used to the ease and the flexibility that it provides to capture and layout my notes. It is almost easier than a notebook.

Currently I am designing a website and the way that OneNote helped me organize the research is amazing. Not only that, it has a very handy screen capturing utility that can be invoked at any time using the Windows Key + S.

It also allows you to capture side notes at any point in time by pressing Windows Key + N. Very handy stuff indeed.

Some features of OneNote 2008 includes:

  • Gathering your notes and information in one place;
  • Automatic saving of your notebooks;
  • Organize information in the manner that you want with complete freedom;
  • Prioritization and management of your tasks and your to-do list more efficiently;
  • Themed notebook pages;
  • Sharing of your notebooks;
  • Text highlighting;
  • Using pens on the note surface;
  • Automatic source linking when pasting information;
  • etc…

I think I might have abondoned my Moleskine for good after discovering OneNote.

Tagged with: , ,

Remember the Milk

Posted in gtd, productivity by Sydney du Plooy on August 22, 2008

Most of the time I find myself running around like a mad thing and inevitably will forget fairly important things. Things that can land me in a fair bit of trouble, if forgotten. Out hunting for a decent task and time management application (I’m sorry todo.txt), I finally found and settled on one, RememberTheMilk.

The feature list and flexibility of this web application is outstanding. For starters, it integrates smoothly with the concepts of Getting Things Done. Here is a post on how to set it up for GTD.

You can add tasks from almost anywhere, be it mobile, Launchy, e-mail or even their own website. There are also a couple of ways to interact with your task lists, such as:

For offline access it uses Google Gears, so that you can continue to work with your tasks offline, and then synchronize when you are online again!

Some of the features that just make it that much better, is that it supports:

  • SMS reminders
  • E-mail reminders
  • Recurring tasks
  • Multiple lists
  • Tags for tasks
  • Weekly planners
  • Locations integrated with Google Maps
  • Synchronize to BlackBerry and Windows Mobile
  • Notes on tasks
  • Contacts with whom tasks can be shared
  • etc…

Well done to the Australian Team!

Tagged with: , ,

Why developers leave

Posted in productivity by Sydney du Plooy on July 12, 2008

Recently, I read an article by Aaron Reed discussing some of the issues as to why developers leave. I wish that every single employer with a development team would read this article! It truly provides much needed insight into the way that developers work and what they need to stay motivated.

Some of the main points that he highlights are:

  • Money - “… take care of them in a way that will make them never want to leave for monetary reasons …”
  • Morale – “… nothing can harm morale faster than broken promises …”
  • Burnout - “… Software development is not your standard “sit at your desk” job. It’s the equivalent of taking a difficult test 8 hours a day, 5 days a week (plus overtime) …”

If you follow some of the simple suggestions in this article, I’m sure that you’ll have a happier and more motivated development team!

Tagged with:

Logging code changes

Posted in productivity by Sydney du Plooy on April 13, 2008

code changes templateRecently, I had to embark on a huge refactoring. Of course, one change leads to another change, which leads to another and so on… After a while a lost myself in the chain reaction and had to put a stop to it. By reminding myself to make one small change and then run the unit tests, it was a lot easier. The way it ought to be.

But, now I was building up a whole list of pending changes as I moved through the current refactoring process and somehow had to remember all of the changes that I had made. This is where I stumbled upon a great thing that helped me out. I call it the Code Changes sheet.

It is a simple document that a co-worker drew up as a to-do list, which I took and then changed slightly. It has space to simply write down items, tick them off and then add a date when all the changes were checked in. It’s a great thing to have when the time comes to write that nice ‘little’ check-in comment.

So, feel free to download the code changes sheet here.

Tagged with: