views:

316

answers:

9

I wondered what people's opinions were regarding self confidence as a factor in ability as a programmer. Personally I've found it makes a surprisingly big difference to my ability to code quality software.

I've found that when I've felt less confident about code I've been willing to settle with suboptimal code and not explore potentially superior alternatives, I've found that I've been far less able or motivated to (politely) challenge colleagues when I've found problems with their code, and overall I've just not had the confidence to think fluidly and creatively and just get into that 'flow' state.

The more confident I feel the quicker I am able to produce better quality code and get things done, is this a common phenomenon or simply just me?!

+3  A: 

Well, one thing that is certain is that one probably won't learn how to become a better coder if one lacks the self confidence to take chances on writing code without asking for the solution from others.

If someone cannot take the initiative to make implementation decisions, he/she will never learn the hard way or fully understand the impact of design decisions.

Daniel Auger
+2  A: 

It's not just you. However, confidence does not produce quality code - quality code produces confidence. Quality code comes from a complete understanding of the problem, your tools, and your solution. You should never resort to splicing in code fragments you find online (or elsewhere) without knowing exactly what they do.

Once you have mastery of your tools and problem specifications you will be confident your solution is correct.

Kyle Cronin
+1  A: 

That's true enough.

I think comfort with the tools you're using helps get you into the flow. If you're constantly having to look up syntax or rembering if it's 0-based or 1-based, then that's going to disrupt the flow. When these become second nature, then there's one less barrier between your mind and the code.

It's also been perversely true that as I've learned more alternative ways to attack a problem, I find myself taking longer to think about it rather than forging ahead. I will roll over in my mind which approach is really best, when the difference between them is probably negligible. When I only had a few items in my bag of tricks, life was a lot simpler.

JohnMcG
+3  A: 

Confidence is huge! I have a high tolerance for risk, so I usually take on stuff that most folks wouldn't. The payoff, though, is typically worth it.

"Nothing ventured, nothing gained", right? ;)

And it definitely feeds on itself. The more you risk and learn from mistakes, the more comfortable/confident you are about taking on more.

EDIT: As someone else mentioned, confidence != quality. True enough. And it's difficult when dealing with someone who feels good after implementing some rather "iffy" solution. My solution is to typically just help nudge 'em in the right direction. Helps to be the Alpha-Geek in the group :-P

-- Kevin Fairchild

Kevin Fairchild
+1  A: 

Absolutely agree that, as with most things, self confidence is crucial to performance. A few years ago I started out as a software tester and spent many years working closely with developers (before becoming one). I was always conscious to be as tactful and fair as possible when talking about bugs, etc as some developer's confidence could be very fragile.

I often found the more confident developers could easily shrug off the bug reports (many even seemed to welcome them) whilst the fragile ones seemed to handle them badly, leading to even more loss of confidence.

Dr Zimmerman
A: 

I think confidence correlates with good code, but I'm not sure that confidence causes good code. I believe both can be attributed to other factors.

For example, if you're very familiar with a code base and understand it well, you'll probably be confident in any changes you make to that code base. It's also likely that your changes to that code base will be good changes that won't cause unexpected problems. But it wasn't your confidence that caused your good code, it was your familiarity and comprehension of the code base.

There are some other factors that I think would boost both confidence and good code.

Evan Shaw
A: 

As someone else stated, its perhaps more the other way around. As you learn to create quality code, your confidence rises. I'm not sure I agree that confidence itself drives quility but then again I guess it helps motivate you to go that extra mile to keep the quility high.

However, some people I have worked with have the negative kind of confidence which is opposite the humble humble programmer. They are confident in their practices even when they lead to poor quality. An example is commenting and unit tests which people are too lazy to implement. There's nothing worse than the comment "I wrote it, so I know how/that it works".

Morten Christiansen
+2  A: 

I don't think confidence is the only part to quality code, but it is required. Confidence will allow you to attack a problem even if you do not have all the knowledge to solve it.

It is what makes us learn new things.

Rob Sloot
A: 

I believe confidence is the result of writing successful code. "Successful" does not have to equal "quality" in the early stages of your development...if just means that you've been able to solve the problem to the satisfaction of your sponsor. As you amass successes throughout your coding career, your confidence level rises, because you have been able to meet the challenges presented to you, and, more importantly, identify those areas where you feel less comfortable about your selected approach or wish that you had the time to do something over in a different way.

I've come across many different levels of developer in my career. There are those developers who try to impress you with their latest clever solution to a simple and straightforward problem. There are also those developers who use twenty lines of code where three will do. There are those developers who immediately dismiss "old technology" and only look toward the latest and the greatest. There are also those developers who refuse to evolve with technology and stick to what they know because it's always worked for them.

This industry is about change...plain and simple. You have to embrace learning in order to be able to translate your ideas into results. You have to be willing to accept some amount of change in your habits, in your approach, and in your thinking as you progress throughout your career. You also have to be willing to reject the notion of change for change's sake...everything you do, every decision you make, every line of code you produce has to increase the overall value of whatever project you are on. All of these notions together can make you a better developer, and, as your skill improves, so will your confidence.

Neil T.