I feel there is more to being a good software enginner than knowing the programming language (and DB/UI) alone. The other ones being (in no particular order):

  • Thinking in abstractions. Finding patterns. Taking a step backwards and looking at the bigger picture.
  • Clarity of thought.
  • Knowing the business purpose of the feature/change request.
  • Good written communication.
  • Knowing the developer tools well.
  • Using the (right) developer tools.
  • Curiosity.
  • Identifying what assumptions to verify (specially while debugging).
  • Searching with the right keywords in a search engine.

Cheers!