Extreme Programming postulates, that courage is one of the fundamentally important virtues of an agile developer. I would augment this postulate and claim that it is, together with talent, THE most important one.
Why? Simple. Courage lets you overcome any and all obstacles that may stand in a way of developing a fine piece of software.
For example, I have seen a lot of cases where a programmer would shy away from an interesting project, because thay claim that thay lacked knowledge and expertise in the particular area. Or – the subject matter seemed too hard. They felt not „worthy” to try. Let me be a bit controversial and say: lack of knowledge does not matter. The courage to learn new stuff does.
I will let you in on a secret: the „experts” in any given field have usually just read one HOWTO more than you have. And they are maybe 2-3 months more „seasoned” then you are. If they have more experience in a given technology than a couple of months, the technology is probably obsolete already anyway. In this day and age, you are typically able to google the answer to any and all questions within a couple of minutes. And learn the required technology in a couple of hours. Granted – you won’t (yet) be as proficient as the others, who learned this before you. But you will know enough to get started, and then may actually be enough to get things done. And what if google does not know the answer? Ah, that’s when the fun begins! That’s when you know that you found yourself on the edge of the undiscovered, the uncharted territory. Excitement! Drama! Don’t we all want to be first doing the pioneer’s work? You just need the courage to try.
Another typical example: some people are afraid to „break something”. They fear that if they touch some unknown code, it will blow up at them. I say – so what? Let it explode. Let it break. It is fun to watch stuff disintegrate. That’s how you learn how things work. Introduced some new bug because you tweaked the wrong dial? Bummer – but you have learned something in the process. If you are working the agile way (and do read around this site to learn how – ample advice within on what safeguards to put in place and how to control destructive tendencies), the damage will be easily fixable. If worst comes to worst, you can always revert to the previous revision of your code, can’t you?
Last but not least, let me let you in on a secret – as developers, we have an easy job. It amounts to solving relatively simple logical and mathematical problems to get stuff done. There is nothing to it. The puzzles to solve are, for the most part – trivially easy. Also – the bareer for entry is very, very low – the cost of a very potent workstation is much less than a thousand dollars these days, and often times all of your software tools are free. You can actually build a very successful software company out of you parents’ basement, sacrificing nothing more than a chunk of your spare time. What other proffesion can claim that? Compare software development to, say, construction or biotechnology, or pretty much any other technology-related discipline, where you need the whole set of very very costly tools and materials just to get you started. Developing software is definitely not the most complicated and demanding way to make money. Compared to, say – designing a microprocessor, launching satellites, performing heart surgery – we have it really easy. Yet, there exists an aura of „complicatedness” surrounding software development („You know how to program computers? Gosh, you must be so smart”), which I guess is maintained by some geeks types with low self esteem – which unfortunately often backfires at them badly, because they start to believe that what they are doing is oh so difficult, that even they don’t know how to do it any more.