There are many facets to being a programmer (e.g. communication, pragmatism, etc.) but what technical skills do you think separate an average programmer from a jedi programmer?
Here are a few on my list:
- Know/understand a system level programming language like C/C++
- Know/understand a managed programming language like C#/Java
- Know a couple of scripting languages like Python/Perl/Bash
- Know a declarative language like XML
- Know how to use a debugger and do it well
- Continually update your personal knowledge portfolio (read, read, read)
- Be comfortable in different operating systems (Windows/Linux/Solaris/etc.)
- Master the ins/outs of your IDE
- Learn how to properly write unit tests
- Study design patterns
- Skilled with regular expressions when appropriate
...I could go on but I'm curious to hear what you guys think...
EDIT: A few people have scoffed at the list of languages as opposed to the conceptual skills. In the question, I specify technical skills - not just soft-skills.
Regardless, my opinion of "jedi" programmer has changed a bit. After reading Andy Hunt's "Pragmatic Thinking and Learning", I have a whole new sense of what it means to be an expert in a particular field. But again...this question is about technical skills within the knowledge portfolio itself.