Well, It is obvious that software development is a virtual world and here comes the continuous need for metaphors and design patterns.
A rich source of thoughts can come from experiences with real world professions and hobbies.
We all in software development know about metaphors and design patterns coming from Civil Engineering which I think is the major source of metaphors and design patterns. So, we have Software Architecture, we ‘build’ software programs and create ‘foundations’ for them. We use ‘Creational Patterns’ like ‘Factory Methods’ and ’Builder Pattern’.
The rise of Agile Software Development came from understanding that building a software, which is a virtual structure, differs from building concrete structures. The need for Big Design Upfront (BDUF) is mandatory for building concrete structures since that once you have finishes the structure foundations & moved to mounting or constructing walls your ability to change will tend to Zero. This is not the case when building a software. We can iteratively create our designs and iteratively code required features. It is true that the cost of change gets higher as time goes on. Here comes the need for extensible, flexible, and maintainable code base to enable us to adopt changes since that change is inevitable.
Therefore, although It may not sound much reasonable, I think the chance of developers who have experience with other professions or hobbies, other than computers, is higher than other fellows who owns only computer science knowledge. From this observation I started to think about the need for practicing other new hobbies, away from my computer, to the extent that I think that even fishing or carpentry can be a good source of new thoughts and experiences that can be reflected later while building a new software.
For Dear Reader: If you agree or disagree, it is valuable to hear from you. Thanks in advance.