Patterns‎ > ‎

Potter Metaphor

Author : Rajesh Patkar    Article ID : 2807150001    Published : August 2008

Potter Metaphor
Any Computer Language can be defined in terms of its Vocabulary and it's Grammar. A Language's grammar specifies the rules of composition of its fundamental elements.
When you start learning a language most of the introductory material focuses on the vocabulary and the grammar. When you achieve a satisfactory level of proficiency in the vocabulary and the grammar, you feel that you know the language. As you are aware that in languages like English, knowing vocabulary and grammar doesn't guarantee your ability to write an essay or a poem. Similarly knowing vocabulary and grammar of a computer programming language doesn't guarantee your ability to develop software in it. You have to master several other skills before you start developing a software. To clarify this to a new programmer, I use a metaphor called Potter Metaphor. 
A Potter starts with raw materials like mud, water, colours etc and with the use of his wheel creates pots. A potter who claims that he is a potter because he knows his raw material is immature. A potter is a potter because he can make a pot. Similarly, knowing a Computer Language like C is like knowing raw material. To be a developer you need skills enough to make a software product. 





Raw Material

         These building blocks that you use to create the finished product.

Tools

        Used by Engineer to perform various operations on raw material to create a finished product.

Product

        The product that meets the specification of the customer.

Engineer

        Person with skills to convert raw materials to finished product using required tools and processes.

Conclusion

To be a proficient developer, you must be clear about the product to be created. You must know your building blocks and tools well. You must be able to harness the design forces and their interactions to shape the product. You must know the process related to the software construction that would deliver the product in time and within budget.