Being ‘Creative’ in Software Development
Creativity in Software Development
Human Adoption Process
With the advent of CASE (Computer Aided Software Engineering) and other tools that automate the software development process, there is a school of thought, which says that these tools stifle creativity of the software professional. But how true is this argument?
CREATIVITY IN SOFTWARE DEVELOPMENT
Creativity itself is neither admirable nor contemptible. It’s what you do with it that makes it one or the other. There have been plenty of evil geniuses in history and plenty of software engineers who simply made the wrong decisions. Being creative does not imply being moral, ethical or always right.
Creativity in software development is something different. Creativity in software development comes form putting together established building blocks to create real solutions to problems. Creativity in design is more valuable than creativity in implementation. If you don’t know anything, everything you do will be creative. But you will be only reinventing the wheel. Creativity in software engineering comes from making efficient and effective use of things that are already there.
If you have mastered every technique and have immense knowledge, anything creative that you do will be of immense value and will have the potential to advance the state of the art. As Isaac Newton rightly said, “If you have seen further, it is by standing on the shoulders of giants”. So to see further you should know what is already available. One should have a very good understanding of what has already been achieved. Then only his work will become productive and creative. Otherwise one will be inventing things and solving problems that others have done before.
In the software field there was, is and will be a very few exceptionally creative and gifted professionals who develop new, revolutionary and very creative pieces of software products. But in most cases you will be inventing something that is already there. So in the context of software development creativity has a different meaning.
Creativity means knowing what is available and the using it and developing only those that are not currently available. Creativity means not wasting the time and resources on a developing a function that can be substituted by an existing and time-tested one. Whatever problem you are working on, there is a high probability that, it or a similar one has already been solved. Most software solutions involve putting together common building blocks, which have been used many, many times. There may a little variation. Small enhancements may have to be done. Details may vary. There are many ways to do things and different building blocks that you can use. But you should use your creativity in choosing the ways and means to accomplish the mission. Here experience and expertise will definitely help. The more programming you have done and the more problems that you have solved and studied, the easier it is to know what to do in any situation. As a software engineer gains experience, he should build up a knowledge base of high quality building blocks so that future problems can be solved more effectively. He should use his creativity in learning form mistakes, not necessarily his own. This knowledge base or building blocks will consist of existing routines, knowledge of algorithms, existing blocks of code that can reused, etc. So an efficient software engineer should be a production manager of a software factory where he assembles products -software products – using the parts and building blocks that is available in his inventory.
HUMAN ADOPTION PROCESS
The human adoption process has the following steps:
- Installation – You install proper methods and procedures, rules and regulations, standards and guidelines.
- Practice – You learn to do things, solve problems, design and develop things, etc.
- Proficiency – The more you practice, the more situations that you have been in, the better you perform.
- Naturalness – You practice, practice and practice, so that the methods are so ingrained that they can be performed without intellectual effort. Things are at their easiest when you know how to do something and don’t have to think. You just react in an intuitive and instinctive way.
The same applies for software also. The more a person knows and the more he has practiced, the more quickly he can solve the problem, write code and without errors.
There are no royal roads to becoming a good software engineer. You can only do this through experience, tempered by training and review of your work.
Alexis Leon, DQ Week Madras, 4th August 1997.