It's time to ditch Medium for good! 🌈⚡️

Introducing Devblog by Hashnode. Blog on your domain for FREE. Highly customizable and optimized for developers.

Learn more

I am Robert C. Martin (Uncle Bob). Ask me anything.

Started on January 24, 2019 8:00 PM

Hey there, 👋

Most of you might know me as Robert "Uncle Bob" Martin from Cleancoder.

I am a software professional since 1970. I have spent the last 40 years contributing toward the betterment of the field, from kickstarting the Agile Alliance to authoring landmark books about Agile Programming, Clean Code, and more.

This is your opportunity to ask me anything regarding programming on Hashnode. I will start answering them live from 2 pm CST on 24th January.

Ask a Question

125 discussions

Hey Uncle Bob, thanks for doing this one. I have a question regarding TDD and how it fits into planning and estimation.

I'm working at a company that values technical task breakdown and somewhat accurate estimations. By practicing this, we usually get the design and separation of major components nailed down before the development begins. Now, this doesn't work very well with TDD as I already kind of have my design laid out.

How would you approach this, and where do you think is the fine line between planning and estimating and letting tests drive the design?


Watching Uncle Bob's Bowling Game TDD demo might address part of your question. In the demo he puts forth a planned design for the problem then walks through the TDD approach and compares the result to the design. So perhaps the planned design is useful for estimating but actual implementation ought to be done via TDD.

Reply to this…

Share your programming knowledge and learn from the best developers on Hashnode

Get started

How do you handle more senior engineers who are resistant to evolutionary design / iterative refactoring and TDD? How best do you shape the hearts and minds of your fellow colleagues.

Tough question. You can try to change people's minds, but don't expect much. People don't like to change their minds.

The best strategy is to be a role model. Adopt the disciplines yourself, and allow people to follow you. You can do some lunch-and-learns, and you can talk with folks about the benefits.

In the end, you are likely to convince a few people. But the majority will not be convinced.

This divides the programmers into two populations. These two populations have very different values. People from those two populations find it very difficult to work together. In the end they will separate. People who like TDD will tend to congregate within the same company, or may leave in search of other companies who share their values.

This migration in search of values has been going on for twenty years now. There are whole companies who have adopted TDD/Refactoring etc. I expect them to outperform those who don't.

Reply to this…

Do you agree that base your career on a specific language is like throwing a lottery ticket?

Every programmer should know many language. Dave Thomas and Andy Hunt once said (in "The Pragmatic Programmer): Learn a new language every year. This is good advice.

Every programmer should know a C based language like C, Go, Java, C# or C++. Every programmer should know a functional language like Clojure, or F#. Every programmer should know a stack based language like Forth. Every programmer should know a logic language like prolog. Every programmer should know LISP.

And that's just for starters.

Reply to this…

Have you done any more work with Transformation Priority Premise?

No, though some other folks have.

Reply to this…

Hi Robert,

You are quite (in)famous on some places on the internet. On /r/programmers, any of your articles is immediately downvoted and even mention of your name is quick to produce negative reactions.

How do you feel about such kind of negative reputation? Do you know of anything that you have said or done that you would deserve such negative popularity? Have you, or would you do something to fix your reputation?

Show all replies

I don't know what /r/programmers is. I am aware that there are folks who don't like my message for one reason or another. That's fine. I believe in the marketplace of ideas. If their ideas are better, their ideas will win.

Some folks don't like the fact that I am a conservative, and a republican. Some folks don't like the fact that I voted for Donald Trump. That's fine. I believe in the marketplace of ideas. If my politics is wrong, then it will lose.

Meanwhile, I've been a programmer for 48 years. That's something of a rarity. Very few people alive have been coding for 48 years straight. That sheer level of experience puts me in a position of some authority. I'm also a tolerably good writer, and that helps.

Anyway, there's room for all of us here.

Reply to this…

Load more responses