Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Possible Duplicate:
I'm graduating with a Computer Science degree but I don't feel like I know how to program

I have been a .net dev for about 3 years at a non-software company, and I want to try and implement unit testing into our software projects.

I have been reading blogs about the basics of unit testing and am currently reading The Art of Unit Testing. I feel I have a fairly good understanding of how unit tests can be set up and implemented, but I am wary of implementing it because if things were set up wrong, no one would notice / my team would be writing bad tests thinking they were good tests.

I feel that my whole underlying issue is with fear of failure, being in implementing unit testing or in persuading the team to start using / writing unit tests.

How do/did you increase your confidence in your own knowledge about coding?

share|improve this question

marked as duplicate by Jon Hopkins, Mark Trapp Nov 1 '11 at 2:12

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

The first results that show a defect will boost your confidence and persuade others of following suit. Also ask your self, will you be more confident with releasing software in production without unit test or with tests that might or might not need improvement. Just get started! – Carlo Kuip Oct 31 '11 at 17:18
As for your particular case -unit testing-: try it yourelf for small programs you believed correct and you'll end up convinced that you can't live anymore without unit tests. You barely introduce risk by telling your developers to test, say, the most critical parts only. It would be a natural thing to happen if they don't do it 100% correctly at first. – vemv Oct 31 '11 at 18:01
One warning as you wade into unit testing--Unit testings only prove that your unit works as you coded it to work, it does not in any way prove that your program works. Although they are useful if you are just starting out you may find that automated system tests give you more bang for your buck. But on the other hand unit tests are an easy, obvious way for you to start that you don't need the approval of others, just start doing it! – Bill K Oct 31 '11 at 21:10

8 Answers 8

up vote 21 down vote accepted

After 20 years in and around this job it is clear that most developers suffer from imposter syndrome. Once you start to internalize your achievements you can stop having sleepless nights thinking you'll be 'found out' and be able to make good decisions (like moving to unit testing) without feeling that your entire career is constantly on the line.

share|improve this answer
The funny thing about imposter syndrome is that most developers THINK they are imposters because they encounter a lot of talking heads early in their careers that make them feel inadequate. What I found out later in life was that I wasn't the imposter, but most of those talking heads and bean counters were trying to make ME feel inadequate. It is surprising how many people in this field can sound impressive to the right people, but never actually accomplish anything of substance and STILL manage to have a financially successful career. Who REALLY is the imposter then? – maple_shaft Oct 31 '11 at 17:53
Many are not imposters, but fake imposters :D – DarenW Oct 31 '11 at 18:52

Let's just say that most programmers have what we might call "a natural affinity for confidence". I would not feel to bad about being genuinely humble.

That being said, the only way to build confidence (short of being naturally arrogant) is to go out and do something. Do your homework, implement and design to best practices, and hope for the best. Really, that is all you can ever do. Not everything will work the way you expected. Sometimes you cannot get everything up to "best practice" standards without more experience, and sometimes the best practices are flawed for you particular project. Regardless, keep what seems to be working as you go, and change the things that do not seem to be working as you go. This is the universal recipe for success with just about anything.

Also, perhaps when you need to hire someone else, look for someone with lots of testing experience.

share|improve this answer

Well, you need practice and a sandboxed environment where you can try things without spoiling production. Go in, try new things, rewrite, redo, destroy, and create. Eventually, you will learn enough about the practice of the theory that it will become 2nd nature, and you won't have interrupted anyone else's work.

Ask yourself why you're afraid of failure. Is it because you don't have proper safety nets in place, or is it because there is no tolerance for it in your company's culture? If it's because of the culture, then you're going to need to have some discussions with your manager to let them know you want to try new things and that you would like some help and support from them and the team.

share|improve this answer
I think I am afraid of failure because of the embarrassment factor. I just need to fail to fully realize that the world doesn't explode if you "break the build" or something along those lines. – Jim Oct 31 '11 at 18:09

Put up a corkboard at home or at the office, or both. Post items from past successes, images of the fruits of your labors. Thank you letters from the past. Good scores from exams, ribbons from competitions. Even if somewhat cheesy by today's standards, if you had fun at the time is what matters. Anything you have to remind you of your best past projects and how they benefited someone or made them glad. Doesn't have to be all programming related.

To really have fun, also manufacture evidence of successes in the future - the spacecraft to Mars you helped design, or whatever would be a thrill and great career highlight.

share|improve this answer

Step through implementing unit tests. Setup the environment on your own machine. Then write unit tests for code you write. By this time you should be able to know if it's configured correctly and can begin rolling it out across your company.

How will that build confidence? Simple. You'll be able to see that you've done it right. We're software Engineers why let gut feeling determine our confidence when we can test that we're heading down the right path. You'll be able to back up your ideas with facts. and that provides your confidence.

share|improve this answer

There is only one way to increase you programming and coding confidence, and that is by actually coding! "Practice makes perfect" and in this case, confidence :-)

share|improve this answer

I am wary of implementing it

If you have an idea how the initial version should look like, then go for it. It is iterative process anyway. When you find what is wrong, or when you find ways to improve it, then do so. It is impossible to foresee all details in advance.

share|improve this answer

First it depends on who is the head of the team, if it's not you then you have to try and convince the head of your team why it is a good idea to implement this, consult with him and take the load of the decision off yourself, either way you'll have to convince other team mebers of doing this(which can be really hard - developers don't like changing the way they do things).

To raise your confidence for doing something like this you'll need to read a lot of pros for doing this as a boost for your confidence that your'e doing the right thing.

And lastly before you start doing this spend some time doing this inside a sandbox and try various ways for implementing unit-testing without braking anything, that way you don't have to worry of anything going wrong, and find places where you can implement unit-testing without changing any structures(start from simple things which won't break anything).

Looks like this can motivate you(it also talks about motivation for implementing unit-testing):

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.