Software Craftsmanship Principles

Single Responsibility Principle, Dependency Inversion Principle, Common Closure Principle, Common Reuse Principle, Boy Scout Rule, YAGNI, Eliminate Waste, Shipping is a Feature, Don’t Repeat Yourself, Interface Segregation Principle, Liskov Substitution Principle, Open Closed Principle.

http://nimblepros.com/products/software-craftsmanship-2011-calendar.aspx

Posted in Craftsmanship, Principles | Leave a comment

Dreyfus Model and Programming Experience

The Dreyfus Model fundamentals are summarized here.

  • Novice – Needs to be told exactly what to do. Very little context to base decisions off of.
  • Advanced beginner – Has more context for decisions, but still needs rigid guidelines to follow.
  • Competent – Begins to question the reasoning behind the tasks, and can see longer term consequences.
  • Proficient – Still relies on rules, but able to seperate what is most important.
  • Expert – Works mainly on intuition, except in circumstances where problems occur

As illustrated by this blog entry, it could be used to improve the right level of information you need in order to achieve a certain programming task.

By assessing your skill level on a given topic, you know if you can make decision or if you just need to follow a well-explained rule or convention.

By assessing the one’s of your colleague, and you can quickly ask the right questions to your peer.

That could come in handy in code peer reviews for instance

Posted in Uncategorized | Leave a comment

Two Programmers’ Manifestos

I’m thinking of two manifestos:

1- Master your Craft: which is about how to be experienced in your craft (input). If you are a novice programmer then do one, two, three and you are a Master. Or if you are a Master then do one, two, three and you are a Super Star.

2- Quality Product: which is about productivity and how to produce a product that customer love it. (output)

To be continue …

Ahmed.

Posted in Manifesto | Leave a comment

Deliberate Practice for Programmers

This paper “The Role of Deliberate Practice in the Acquisition of Expert Performance” is one of the best research papers I have ever read about. Why? Because it open the door for anyone to be an expert in any field.

The main findings in this paper are:

1- Nothing called talent that will sit you among top performers, but smart individual hard work.

2- Keys to acquire experience are:

a- A task that is just beyond you capability.

b- Repetion

c- Observe weaknesses in your performance.

d- Adjust your performance accordingly.

How we can apply this to programming ?

e.g. I would like to know how to connect from ASP.NET VB.NET to Access and SQL Server databases

a- This task is just beyond my capability because I’ve done this before using Visual Studio 2008 Wizard, and this time I would like to use web.config and VB.NET for security reasons.

b- I will repeat this process until I know it by heart. Basics skills when know it by heart will save room in memory for next level skills.

c- I will search for other codes which do the same thing with much different way, and test the performance.

d- Adjust my code until it gives me the best performance and clearance so as for someone who will come later to read or modify it find it very easy.

Ahmed.

Posted in experience | Tagged , , , | Leave a comment