Throughout my career in India I always used to believe that Software Engineering is all about problem solving skills. This is what interview's is all about. Every big company want's to hire people with good programming solving skill. However, good problem solving skill doesn't necessarily imply that you are a good engineer but vice versa is not true. There is an additional attribute associated with it. Something which is not only ignored by several academic institutions but also by big branded companies. There is something which most of the companies want but they don't emphasize on it or maybe most of them take it for granted.
It was only I started working in Commondesk as an intern I discovered that programming is all about problem solving skill but software engineering goes way beyond it.
Problem solving in a nutshell:
In order to understand my point let me take a simple task of burning paper using solar energy. In order to accomplish this task you need a magnifying glass which can focus the energy of the sun to a single point. Higher the focus and intensity of light the easier it gets to burn the paper. Everyone would agree with me that both sunlight and magnifying glass are important to burn the paper. Just one of them is not sufficient.
Now compare this analogy to creating a software module where burning the paper is the task assigned to you. The magnifying glass is like your problem solving skill and intensity of the sunlight is your knowledge. In order to solve a problem you need both.
Problem solving comes with writing code and Knowledge comes with reading code. Depending upon your job profile you may be skewed either to one of them. Usually people who work with applications and high level languages like Java invest their lot of time in code maintenance and hence tend to be good at code reading. Others who work on low level languages and systems tend to posses better problem solving skills because they invest a lot of time in code writing.
Software Engineering is about the balance between both of them. It's about understanding to use the appropriate skill when required.
It's not uncommon to find people with good problem solving skill spending time to rewrite most of the existing utility twice. It's human nature to find the easiest way to get things done. So if you can solve a problem with a previously known strategy you would prefer doing it that way rather than learning a new way of doing it. Daniel Kahneman mentioned in his book Thinking, Fast and Slow that people tend to believe their intuition without evaluating it. Being a good programmer is about your skills but being a good software engineer is your choice. It's all about your attitude.
It was only I started working in Commondesk as an intern I discovered that programming is all about problem solving skill but software engineering goes way beyond it.
Problem solving in a nutshell:
Now compare this analogy to creating a software module where burning the paper is the task assigned to you. The magnifying glass is like your problem solving skill and intensity of the sunlight is your knowledge. In order to solve a problem you need both.
Problem solving comes with writing code and Knowledge comes with reading code. Depending upon your job profile you may be skewed either to one of them. Usually people who work with applications and high level languages like Java invest their lot of time in code maintenance and hence tend to be good at code reading. Others who work on low level languages and systems tend to posses better problem solving skills because they invest a lot of time in code writing.
Software Engineering is about the balance between both of them. It's about understanding to use the appropriate skill when required.
It's not uncommon to find people with good problem solving skill spending time to rewrite most of the existing utility twice. It's human nature to find the easiest way to get things done. So if you can solve a problem with a previously known strategy you would prefer doing it that way rather than learning a new way of doing it. Daniel Kahneman mentioned in his book Thinking, Fast and Slow that people tend to believe their intuition without evaluating it. Being a good programmer is about your skills but being a good software engineer is your choice. It's all about your attitude.