What they think we do
It’s common knowledge, isn’t it? – Brilliant programmers solve complex problems by producing complicated code that is incomprehensible to mere mortals. Normal programmers could never take over that code and maintain it. Only a genius code wizard or, better, a group of the best programmers with PhDs and long track records could inherit a program from a brilliant programmer. You can also look at it conversely: The more complicated a program is, the more it indicates the brilliance of the person who created this Byzantine piece of work.
What we really do
All this is of course complete rubbish and nothing could be farther from the truth. The most important part of what we as programmers do is analysis: We break a complicated problem down into several very simple ones. Better yet, if we do this very smartly, all of the complexity vanishes into thin air. The second, equally important part of our work is synthesis, during which we take the pieces and build a new structure out of them. If we do this very smartly, we don’t even get a lot of different puzzle pieces that solve individual aspects of the problem, but an economic, intuitive and coherent basic structure that everybody can understand immediately and explain to their grandma or boss.
A challenge that doesn’t look like one
So in my opinion, a great programmer will tackle and solve problems that are too complicated and challenging for most colleagues, but she will normally drive out the complexity and create simple, intuitive and easily maintainable solutions that do not need to be maintained by a brilliant programmer. If you think you’re really good, here’s a test: Hand over your programs to the newbie for maintenance. If this works really well, and if an inexperienced colleague can incorporate change requests into your program while preserving the original architecture, then in my book you’ve passed – because poor programmers code programs that requires a team of geniuses to maintain, but great programmers can will their code to the new guy.