Although some general attributes are common to all professionals such as Passion, Focus and Drive, I have tried to find attributes somewhat more fitting in a software engineering context. Secondly, my list is more a reflection of my personal experience that I would like to share with an individual engineer, rather than a checklist a software development team leader would use to assess members in an office environment.
Math Foundation: this is central to this field. Without discrete maths, geometry, automaton theory, graph theory and algebra knowledge and such, one would struggle to excel in this field, find it hard to code and will not be able carry out tasks in a systematic fashion as the profession requires.
Communication: This is so true in today’s software development ecosystem – clients are closer to engineers comparing to the past. A good engineer’s duty goes beyond sitting there and coding. He/She has to communicate ideas with nontechnical people clearly – a big challenge in my opinion. From engineering perspective, the communication should be precise, brief, and somewhat less “geeky” to nontechnical people. I would also include teamwork as part of this attribute. A good engineer can not only code in a cave, but he/she has developed this learned skill of team collaboration, which is way more challenging that cave coding.
Ethics: This enables one to do duties in a manner that is more than just 9-5 office work and realize the value of his/her work. It also involves not doing things that are against ethical guidelines provided by software engineering regulatory bodies.
Agility: Improves one’s ability to balance priorities, switching between different application areas during development, maintaining good client relationship, responding quickly and effectively in disastrous situations etc. Of course, it needs a lot of practice and experience to increase agility.
Perseverance: The problem is there and a good software engineer wouldn’t let it persist owing to his/her perseverance. It doesn’t mean one will stop doing everything else in life, In fact, it is better to get away from the problem and take a timeout, and get back to the problem.
Participation: Good software engineers give it back to the community. It actually benefits all, meaning the people and the engineer in question both, and the engineer is aware of this fact. I believe good engineers are more likely to contribute to open source projects, write blogs, give talks, take part in Stack Overflow things like that.
Imagination: This is very subjective. I think without imagination a software engineer with all of the above attributes will fail to flourish.
I hope this helps.