http://qs1969.pair.com?node_id=292098

I was thinking last night what made me think I'm an efficient perl coder. I had a bit of a Super and found this node, which co-incidentally is similar but not really what I was after.

After some careful thought I realised the things that I believe make me an efficient coder are not necessarily code specific qualities, but encompass a more holistic approach to banging out the final product. (The below list is not in any particular order).

When I say efficient, I don't mean banging out code on time and under budget, I'm talking about banging out code on time close to budget with the additional qualities of my code being easy to maintain, easy to expand, easy to replace in need etc etc. I'm not just talking about my lines of perl.

  1. Peer review
  2. Code reuse
  3. Good design
  4. Continual Learning
  5. Testing
  6. Teaching
  7. Documentation
To expand on the above points a briefly:

Peer review
I like to have others in my team and external to my workplace (eg PM) to look at my code, make suggestions and recommendations. It expands my experience and offers me the chance to learn new techniques, and to avoid bad ones.

Code reuse
Where ever i can, i attempt to extract core concepts out into standalone modules that can be used again and again, for example abstractions to data aggregation for reporting.

Good design
Obviously highly subjective, however in context an efficient design will lead to implementation on time, a solution that is maintainable and a end result that will make the project owners "happy" among a long list of desirable qualities.

Continual Learning
While similar to peer review, I take this a step further by experimenting with new things, reading journals, web sites and manuals/books.

Testing
Of course one of the things that makes me think that i am an efficient coder is testing. Writing automated tests, formal documentation with the aim of "Getting it right (tm)" without having to go back to the coding board tim e and time again.

Teaching
While related to Continual Learning, I find that if i can teach my team new things, i benefit twofold. firstly, i get to re-enforce things I already know and secondly I increase the knowledge in my team so i don't need to necessarily complete all the code that needs to be done.

Documentation
I like to document my code in pod and also inline. It helps me remember why i've done things, and why I've not done things. It reduces my time to revisit and understand code I've written before and not looked at for a while.

Of course there is quite a list of what can and does make an efficient coder, what additions/deletions would you make to the list?

update: fixed a bunch of weird (<deleted>) chars.