In my recent blog posting "The Secrets to Becoming a Great Programmer" I discuss a couple of characteristics of great programmers. You can read about those characteristics at
The Secrets to Becoming a Great Programmer
What other characteristics make a programmer great? Do you agree with my assessment?
Indeed - guilty of over simplification for the sake of making a point .
> you cannot be a programmer without being an engineer
Yes that was really the point I was trying to get across. There is a lot more to "being a programmer" than "programming" so I dislike the name. Personally I find writing code - the act most traditionally called programming by many - a little tedious. By that time I've done the fun part - the design, understanding the system, etc. You do find some people who only want to write code, and who actively avoid most of the other parts, but they are few and far between - most people are multi-disciplinary.
At the other end of the spectrum I work with very good software engineers who no longer write much code at all; they have other expertise be that designing and writing specs, running QA teams, etc. Understanding software code is key to the job, but writing it isn't.
In that case, I would say before one can become a great software engineer, they need to go through the drudgery of programming. Just because someone can code does not make a good system in the end. It still needs a good system architect to make good manageable, efficient, and maintainable codes.
Indeed, and a lot of discipline!
Becoming a good programmer or software engineer isn't done overnight. Often this takes years and in some cases (like mine) decades...
Lovely discussion!
It's so important to recognise that what makes a good programmer and what makes a good software engineer are very different. I know individuals who are incredibly talented programmers but just don't get the "engineering" thing at all; conversely, I know excellent engineers who can't write code for toffee (hope that's not too UK-centric a phrase but I'm sure you can work out what it means!)
A really good "software engineer" combines both.