What should be the qualities which makes the difference between good and great Software Engineer ?
Qualities of a great Software Engineer
I want to be a great Sofware Engineer, I always try to learn from my mentors/collegues that how are they trying to analyze any problem. How are they trying to solve it with minimal efforts and applying agile approach while developing software.
In my perspective following should be the qualities of a great Software Engineer.
Able to balance pragmatism and perfectionism - Great programmers have the ability to make both masterful/quick/dirty hacks and elegant/refined/robust solutions, and the wisdom to choose which is appropriate for a given problem. Some lesser programmers seem to lack the extreme attention to detail necessary for some problems. Others are stuck in perfectionist mode.
Not averse to debugging and bugfixing - Mediocre programmers often fear and loathe debugging, even of their own code. Great programmers seem to dive right and drill down with Churchill-esque tenacity. They might not be happy if it turns out that the bug is outside their code, but they will find it.
Healthy skepticism - A good programmer will get a solution that appears to work and call it a day. A great programmer will tend to not trust their own code until they’ve tested it extensively. This also comes up a lot in data analysis and system administration. An average programmer might see a small innocuous-looking discrepancy and ignore it. If a great programmer sees something like that they will suspect it could be a hint of a greater problem, and investigate further. Great programmers tend to do more cross-checking and sanity checking, and in doing so discover subtle bugs.
Business-awareness - You can also call it product-awareness. Most engineers (especially the really talented ones) tend to waste a huge percentage of their time making improvements to things that won’t make the slightest bit of difference in the grand scheme of things. Great engineers are aware of the fact the company exists for a purpose - they have a feel for what matters and what doesn’t to the customers. They prioritize their time accordingly, and they can work for months without any direction and still produce useful work because they always understand what’s the next most important thing to do for the company.
They know when not to write code- A great programmer try to understand “User Story” even before starting to work on it. may be he’ll discuss again with product owner about the user story. It’s always better to clear all the doubt before even writing a single line of code.
I’ll keep adding more and more qualities in near by future. It’s a never ending process and more and more you’ll read on internet, better things you’ll find out to apply in your daily work.