Coder, Programmer

Interview with Uncle Bob

The clean coder “Uncle Bob” aka Robert C. Martin reflects on his career, the way he works and what advice he would give to his younger self if he were to start his career again.

Tell us a little bit about yourself.

I’ve been married for 44 years, have four children and 5.75 grandchildren. I live on the North Shore of Lake Michigan in Northern Illinois. I travel the world teaching classes and giving talks on software professionalism and craftsmanship. I produce software training videos that I sell at I am learning to be a pilot, and am looking forward to flying to nearby customers.

How did you get started in programming?

The original DigiComp I sold as an educational toy for US$4.99.

When I was 12 my mother bought me a Digi-Comp I for my birthday. This was a little plastic computer with three flip flops and six and gates. It was a three bit finite state machine that you could program by slipping little tubes onto pegs. You could program it to count from 0 to 7, or count down from 7 back to 0. It could add two bits to produce a sum and a carry bit. And there were several logic puzzles you could solve with it.
The little machine fascinated me. I ordered the “Advanced Programming Manual” for it; from which I learned Boolean algebra and the idea of specifying the transitions of a finite state machine using Boolean equations. With that knowledge I was able to make that little three bit machine do anything it was capable of doing. And I was hooked. I knew what I wanted to do for the rest of my life. I have never wavered from that.

What are some of the languages you use today and why?

Java, because it is common and has lots of tooling.
Clojure, because it is powerful, elegant, beautiful, and rides atop the JVM.
Go, because it is fast, fast, fast, and the logical successor to C/C++.
Python, because it is common and easy.
Ruby, because it is common, rich, and full of intriguing fidelty-bits.
C, C++, as needed.

What type of applications do you develop?

Nowadays I work on the website. That’s built-in Clojure. I also sometimes work on the FitNesse project in Java. And I’m considering writing a SLIM implementation for FitNesse in GO.

What’s your biggest passion these days related to programming?

Keeping the code simple, clean, well structured, and well tested.

What still sucks and shouldn’t be in programming?

SQL. I mean _really_? A text-based language for manipulating data? A text-based language that can easily sneak through the UI to allow security breaches. Can you imagine how many security breaches would have been impossible if database access were done through a true API instead of that horrid text-based language?
And that’s just one thing. You don’t want to start me on a rant. I mean, I could go on about XML, or the absurdity of programmers not writing tests, or…

What are some of the most important skills developers can have?

Care. The skill to care for the code. The skill to be careful instead of to rush. The skill to realize that rushing makes you go slower, not faster. The skill of patience, and care, and professionalism.
Look, it doesn’t take a mental genius to write code. It’s just ‘if’, ‘while’, and ‘assignment’ statements after all. What requires real skill is to write code that other people can read and understand, and that can be easily changed with a minimum of breakage. Those skills are pretty rare in our industry right now.

Uncle Bob

How do you convince your manager to write more unit tests or practice TDD?

You don’t. It’s none of your manager’s business how you write code, or what disciplines you use. YOU are the one who knows how to do your job. So the real question here is how do you convince your PEERS to write more unit tests and to practice TDD. And that’s a truly tough question to answer. The best approach is to be a role model — to never shirk your disciplines or abandon them because others don’t follow them. You can also do the standard lunch-n-learns, etc. But in the end, only a few people will catch the TDD bug. The rest will not.
If you find yourself on a team which is not doing TDD, you’ll have to change teams; because your values are incompatible. Or, if your team practices TDD, but one or two people resist; those people will have to leave the team. You cannot have a team that doesn’t share values as important as testing.

Any tips on making managers understand the importance of using Typemock?

No. Again, it’s not your manager’s job to know what tools you need. You know the tools you need, and you inform your manager to buy them. If your manager won’t buy them; then you’ll have to buy them yourself.
Of course, this is a team decision. You can’t have a team in which everyone is using different tools. A good team decides what tool suite they will use, and then everyone on the team uses that suite.

Do you practice TDD and if so, what are some of your favorite code katas?

Of course I do. I often do the Video Store Kata that Martin Fowler made famous so many years ago. I also do the Bowling Game, Prime Factors, Word Wrap, Stack, Environment Controller, and many others.

What are some of your must-have tools or libraries that you use in your daily work?

A good unit test library and the Jetbrains suite of IDEs and plugins.

Who or what inspires you in the technical world?

Developing a code of professional behavior for programmers. If we do not develop that code within the next few years, one will be imposed upon us from above by our fearful and resentful governments.

When you need a quick recess at work to regain focus, what do you do?

Nowadays I watch a good YouTube video like Veritasium, Space-time, VSauce, or Numberphile. If my brain is truly fried, and the weather is good, I go on a bike ride.

What’s your horror/war story from the coding trenches?

Sitting in a telephone central office at midnight, trying to patch the software that doesn’t work, and realizing that I just started a procedure that erased every file on the disk. That was not a good night.

What’s the best advice you’ve ever received or what advice would you give your younger self?

Understand the business. It’s good to be a coder. It’s good to solve technical problems. But to do a truly good job, you have to understand the business you are serving.

What are some interesting links you can share about yourself?

On Twitter you can find me under @unclebobmartin and my websites are and

What is one question that we should have asked, and we didn’t and what would be the answer?

Why does our industry have such a poor reputation for quality?

Because we’ve chosen the wrong strategy to go fast. You don’t go fast by rushing. You go fast by carefully doing a good job.