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!