Learning in a Result Oriented Software Development environment
This article is being written in context of Software development, but should be applicable to all areas where ever there is human involvement.
Looking at the current scenario, all of us are becoming more result oriented. And in the process giving less importance to the learning. Its not our fault, but its due to the importance given to the results. No one looks at the path taken to get to the result, instead the result is what is considered as the ultimate achievement.
For example, you are assigned the responsibility of developing a feature and it requires you to explore certain new API. There are 2 ways I think one can get to know how to use the API- One is to learn about the API and then use it, or the other is to search on the internet for examples where the API is used and copy paste it. The latter approach saves you time and helps you build the feature faster than the former approach of learning. And the stakeholder of the feature would be impressed looking at the end result, they dont care how much of the API you have learnt. Because it doesn’t matter to them directly.
Everything looks good until the client/stakeholder (it can be your manager/customer) comes back with a change in the feature. So what does the Ctrl-C+Ctrl-V person would do? Yes of course, search for the solution and then again do Ctrl-C+Ctrl-V. Now if the API usage is not obvious and there isn’t much help on the web regarding that, what can the Ctrl-C+Ctrl-V person do? Sit and learn the API and can he do that? With the pressure from the client and limited time, it becomes hard to learn. What would the other person who learnt the API in the first place do? Just use the API as required to add the enhancement.
If you are not familiar with the code you have written, then for each of the enhancement or the bug fix you have to add, you need to read through the code again and again to find what is used where. And in the end the larger the codebase becomes, harder it becomes to fix a bug or add an enhancement. It shouldn’t happen that: “When you wrote the code only you and god would understand it and after sometime only god can understand it“. [Thanks to my teacher for this lovely quote]. What I want to convey here is that- time spent on learning is not a waste of time, instead it one step towards reducing the time spent in developing the software, one step towards improving the quality of code and the software developed.
I have been in this position quite a lot of times. And on all the occasions where I have Ctrl-C+Ctrl-V’d the solution, I have had to do the same when I encountered the problem again. But in places where I have learnt about the problem and the solution I have been in a better position to solve the problem next time.
The reason for writing this post is the popularity of sites like: http://www.java2s.com/, http://www.roseindia.net/java/, http://www.java-tips.org who just provide the solution to certain problems, for example: reading a file in Java or obtaining the hostname in Java and the like. There are lot more sites like this which are popular. Also on CodeRanch forums lot of people ask for direct solution to a certain problem. But the more experienced users, the moderators do not encourage anyone asking for answers. The main focus on forums like CodeRanch is the learning which is involved in the solving of a problem and not the solution itself.
Related to this is Software Craftmanship which is all about the developer and the skill of the developer. If you are not continuously learning then you are missing out of lot of things. I will write about it sometime in future as well.
What are your thoughts about the importance given to results than to learning?