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

Held on 24 January 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.

Comments (133)

Sandeep Panda's photo

Hey Robert! Thanks for the AMA! 🙌

Which of the current trends in Software Engineering are overrated? What practices in SE has changed for good since 1970?

Robert Martin's photo

Overrated? At the moment, Microservices.

Changes for good since 1970? Agile. No question. Agile is the acknowledgement that discipline overrides ceremony in software development.

j's photo

Hey Robert,

I read your book Clean Code and listen to some of your talks like 'the future of programming' and 'the principles of clean architecture' which I enjoyed.

To my questions:

  • Do you still actively code?
  • What Language Families do you like, Wirth? C-Like? ML? Fortran?
  • Do you still got the time and the nerve to follow current trends within the language ecco-systems?

Thx for your time :)

Show +1 replies
David Domingo's photo

Hi Uncle Bob,

I am currently trying to learn a Lisp for fun and Clojure is my first choice because of Clojurescript. But what is it about Clojure that makes it your go to language?

Thank you for your time :D

j's photo

David Domingo you need to tag him so he gets a notification :)

Eric Lemes's photo

Thanks for this opportunity. I've read all your books, including some very old ones (like the C++ in Booch method) and they are all great. You influenced a lot my work and I'm really grateful for so many interesting ideas.

I wish I could ask one, but it will be a lot.

I've been working a lot with code metrics or any objective ways of measuring code quality based on static analysis. I've been getting some interesting data about this which I can discuss if you are interested. I've seen some suggested metrics, specially in Clean Code, about number of lines of code, number of arguments per method, coupling etc. and that's why a lot of my questions will be directed towards measuring code coverage and TDD (since there are loads of studies showing that TDD improves code quality).

  • Do you believe it is possible to objectively measure code quality analyzing code structure (number of lines, cyclomatic complexity, afferent and efferent coupling, code coverage)?
  • Do you believe good design can be measured objectively?
  • I've seen a lot of discussion in C++ about dynamic polymorphism being a performance issue (since it disables a lot of opportunities for compiler inlining, and since adds a pointer per class, can increase cache misses). What are your thoughts on this based on games or any other CPU intensive applications?
  • I know this is a curve ball, but, what do you think would be the ideal unit test code coverage (line and branch)? Why?
  • Knowing ideal code coverage can be tricky and sometimes irrelevant, what would be the lower limit? For examples, is 10% of code coverage relevant?
  • What would be the threshold when you start feeling improvement?
  • I've heard a lot of people stating that you can achieve high coverage numbers (for example 80%) and still have a pretty bad code. What are you thoughts on that?
Robert Martin's photo
  • Do you believe it is possible to objectively measure code quality analyzing code structure (number of lines, cyclomatic complexity, afferent and efferent coupling, code coverage)?

    You can get some information from these metrics. But you cannot determine code or design quality from them.

  • Do you believe good design can be measured objectively?

    Not with static analysis metrics. But I think good designers can pass appropriate judgements on good or bad design. In the end, there is only one metric that matters: Was the manpower required to build, deploy, and maintain the system appropriately minimized.

  • I've seen a lot of discussion in C++ about dynamic polymorphism being a performance issue (since it disables a lot of opportunities for compiler inlining, and since adds a pointer per class, can increase cache misses). What are your thoughts on this based on games or any other CPU intensive applications?

    When you need to save 3 nanoseconds, dynamic polymorphism is a factor. So in deep loops with tight real time deadlines, removing dynamic polymorphism is an option. In all other cases the cost is so small as to be nonexistent; and the advantages are so great as to be overriding.

  • I know this is a curve ball, but, what do you think would be the ideal unit test code coverage (line and branch)? Why?

    100%. Line and branch. Obviously. Of course you can probably never achieve this level; but it should still be the "ideal" (your word).

  • Knowing ideal code coverage can be tricky and sometimes irrelevant, what would be the lower limit? For examples, is 10% of code coverage relevant?

    Lower than 100% means you aren't done. Of course you 'll never really be done. But there is no stopping point lower than 100%.

  • What would be the threshold when you start feeling improvement?
    I've heard a lot of people stating that you can achieve high coverage numbers (for example 80%) and still have a pretty bad code. What are you thoughts on that?

    If you have 80% coverage, it means that 20% of the code might not work. That's not a good number. No one should be happy about 80% coverage.

Nick K's photo

What do you think about Go (golang) language? It's structs, embedding/composition, no inheritance, interfaces? Error as a value? Concurrency model? Do you think those decisions made in the golang design are actually smart and make sence for the problem they are trying to solve by creating and maintaining golang? (generics will be released soon)

Islam Shehata's photo

Robert Martin Hey Uncle Bob, I hope to see your answer on this.

Chilon's photo

Hi Robert, I have a question regarding integration testing.

Let's assume that we have a project where several classes/modules have been developed using TDD (possibly by different developers). This implies that communication between these classes has been mocked out, so there might be a bug/incompatibility hidden in their communication once we integrate them (e.g. class A calling foo() method of class B, but class B object is in a state where it does not expect foo() to be called).

Occasionally we have such bugs slipping to production in real projects. Even though we have integration tests where class A calls method foo() of B (so the glue/adapter code is covered by the tests), B is not in the erroneous state that will expose the bug.

So my question is, what is your approach on enumerating which integration tests to write? It seems that writing just enough tests to cover the glue code is not enough. On the other hand writing integration tests that verify the communication of objects in every possible state increases the number of tests exponentially. What's your advice?

Show +2 replies
Conrad Taylor's photo

I tend to write integration and unit tests for each feature to drive the implementation of user story from the outside in (i.e. BDD).

Next, the very goal of integration tests is exercising the expected assumptions of these connected components. The very goal of the unit test is exercising the expected assumptions of the individual component.

If either the integration and/or unit test is insufficient for the components or component under test, then it's definitely possible to receive errors when the code is exercised in a context in which it hasn't been tested.

In summary, one shouldn't expect an insufficient integration or unit test to catch errors when the code is being exercised outside the context for which has been tested.

Chilon's photo

Conrad Taylor, I completely agree with your points.

My concern is that we do not have a structured way/methodology for writing sufficient integration tests. For unit tests we have TDD, which by definition leads to a test suite that covers the whole unit (there is also mutation testing). But for integration tests we do not have a similar methodology.

I also follow a test-first approach when writing integration tests. That way the glue code that connects the units is not written until there is a failing integration test. But as I explained in the original question, these tests do not seem to be enough.

One way of mitigating the problem is to minimize the chance of developing incompatible units by pair/mob programming. Still this leaves room for bugs slipping through due to the human factor involved. Another way is to write tests that exercise the contract of units developed by different developers/teams (as Robert Martin proposed), but this would require lot more tests especially if done for each unit.

Deactivated User's photo

Hey Robert, What do think about Node.js? Do you code today?

Robert Martin's photo

I don't do much javascript coding. I've never used node. I'm hoping I can skip over thew whole Javascript thing and use Clojurescript instead. <grin>.

Ben Buchanan (200ok)'s photo

What are you most excited or surprised about in present-day programming?

If you could replace any one piece of advice you've given in the past with a new one, what would it be?

What's the best non-code/non-technical thing someone can do to be a better programmer?

Robert Martin's photo
  • What are you most excited or surprised about in present-day programming?

The fact that Agile -- especially the technical practices -- are continuing to gain ground inside the programming community. And of those, most especially, Test Driven Development.

  • What's the best non-code/non-technical thing someone can do to be a better programmer?

Read and write. Read a lot and write a lot.

Radek Falhar's photo

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?

Kapralov Sergey's photo

People who really deserve respect and have something valuable to say will always draw haters attention. People who have no haters behind are boring and have no own position to stand for.

Robert Martin's photo

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.

Matt Madson's photo

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.

Robert Martin's photo

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.

Aleksa Boškov's photo

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?

Cheers.

Adam Romney's photo

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.

John Welty's photo

Have you done any more work with Transformation Priority Premise?

Robert Martin's photo

No, though some other folks have.

Rafal Lesniak's photo

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

Robert Martin's photo

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.

k's photo

Hi Uncle Bob!

I'm working on a mobile banking app. Most of the business logic is handled through the backend API, the app code is for making API calls, presenting data and navigating the user through flows.

My question is this - what constitutes the "core business logic" of such an application? Is the iOS-specific view layer the implementation detail? Is the API layer the implementation detail? Are both of them?

Mikaeil's photo

Hello Uncle Bob! Thanks for the AMA and your work on the Clean Coder series. I have 3 questions:

  1. I've read books on TDD and OOP (like yours), but a lot of these ideas have been around for decades. Do you think there will ever be more groundbreaking ideas like TDD or SOLID? Is this the end of history for best practices in programming?
  2. Given how many new developers enter the industry every year, is it possible that we're in a tech bubble which will eventually burst?
  3. Are there any specific reasons why Python is not usually discussed in books and talks about OOP best practices?
Brian Takita's photo

Hello Robert, thank you for all of your contributions to the profession & your courageous stances on numerous debates.

Are you a student of philosophy? Care to disclose your Weltanschauung and how it relates to programming?

Michael Bykovski's photo

Hey Robert,

have you ever used workflow engines to program business processes? What is your opinion in making BPMN Diagrams and then put them in such workflow engines?

Thanks a lot. Cheers

Michael Winick's photo

Your Interactor model demands dependencies directed towards the business logic and never from BL outward. DDD also has similar design ideas (Port and Adapters, too). Why haven't you jumped neck deep into Domain Driven Design? I have seen you say positive things about DDD, but you don't come across publicly as an advocate. Is there something with DDD that you find incongruous with your architecture/style?

Kapralov Sergey's photo

Hi Robert.

I am a fan of your design metrics (linux.ime.usp.br/~joaomm/mac499/arquivos/re..) and the "Zone of Pain" term you described in "Clean Architecture". It changed my vision on what is maintainable code drastically.

However, originally you outlined those concepts for a set of classes, calling it "class categories". My question is: why can't the same metrics be applied to classes and interfaces per-se. They are a subject of reuse in OO code as well, and stable-concrete classes will inevitably be the source of pain and regressions, when the time to change something comes.

Also, what do you think about DI frameworks, which do injections by means of annotations (like Spring's 'Autowired' or CDI's 'Inject')? Aren't they break stable dependencies/abstractions principles, making implicit direct dependencies between our components?

Show +2 replies
Daniel Hiller's photo

Regarding abstraction vs. concretion, I think that programming against the interface vs. the concrete implementation is a good thing. This enables to replace the concrete implementation with a mock for testing.

OTOH in my experience you seldom need more than one concrete implementation, and if you do, you have a strategy and their implementations. For those cases you need to have separate configurations anyway, each based on a certain case.

As you are mentioning Springs @Autowired here, you could create @Configuration s for these cases, which would enable you to define the required dependency externally. Each of these could be enabled by a @Profile when appropriate.

I'm guessing that you mean to be able to very easily shoot yourself in the foot by overusing it, which I completely agree with. But most of the time it saves me personally from writing the boilerplate code of object creation and composition, which I think is good

Kapralov Sergey's photo

Daniel Hiller

OTOH in my experience you seldom need more than one concrete implementation, and if you do, you have a strategy and their implementations.

I disagree. You are right, interfaces are often designed in "service" way, and usually implemented once or twice, but IMO it is severe mistake. Interface is meaningless if it is designed for just a few implementations. Only the interfaces which has potentially infinite number of implementations truly enable OCP. For example:

interface Light {
    void on();
    void off();
}

Interface Light from example. It can have plenty of implementations, which are able to turn on and off smart lights from different vendors. Also, it can be implemented as a fake object for test purposes. It can have composite implementation, which enable management of group of lights in one shot. Any customer's demand related to turning on and off the lights can be implemented behind this interface. Such characteristic is achieved because Light is completely purified from technical details. It is true stable abstraction, the one that is always safe to depend on.

In such curcumstances, if all interfaces in a system are designed with this consideration in mind, the strategy pattern, spring profiles and autowired injections become really crooked and inflexible.

Nope's photo

Dear Uncle Bob,

From what I understand, you define OO as disciplined indirect calls / inversion of control (e.g "when old code calls new code"). Which makes it a tool to manage dependencies (by strategically inverting some of them, you get to fully isolate some parts of your system from the others).

James Coplien's definition seems a lot more related to modeling the domain (the "real world" ?), and seems very tied to UI and more generally what the user "sees" or "manipulates" ; and seems not to apply to non-interactive programs like a webserver or a compiler. Also, there seem to be a lot more upfront design in the way he works, which makes it clear from the start that you are required to have a solid understanding of the domain.

We also have Alan Kay's definition of OO, which is more related to the "fire-and-forget" (unidirectional?) style communication between the different parts of the system ("message-oriented programming", from his own words).

To make the matter worse, we also have the "definition" that "OO is putting related data and functions together", which conveys almost no information (as we've been doing this for decades, as soon as we were able to split code into several files).

Are all these definitions different ways to see the same thing? Do they lead to the same architectures? Is it possible to reconcile them, and should we?

Thanks for your answer, and thanks for all the answers you already provided to our profession!

Jairo's photo

Hello, I'm new at developing with C#. it is a good practice to always return IEnumerable<T> and receive IList<T> in my methods when dealing with collections or should I favor the use if IEnumerable<T> for both, in and out?

Robert Martin's photo

The best practice is to use the smallest interface that provides the methods that your callers need to call.

Eric Lemes's photo

Thanks for this opportunity. I've read all your books, including some very old ones (like the C++ in Booch method) and they are all great. You influenced a lot my work and I'm really grateful for so many interesting ideas.

I wish I could ask one, but it will be a lot.

I've been working a lot with code metrics or any objective ways of measuring code quality based on static analysis. I've been getting some interesting data about this which I can discuss if you are interested. I've seen some suggested metrics, specially in Clean Code, about number of lines of code, number of arguments per method, coupling etc. and that's why a lot of my questions will be directed towards measuring code coverage and TDD (since there are loads of studies showing that TDD improves code quality).

  • Do you believe it is possible to objectively measure code quality analyzing code structure (number of lines, cyclomatic complexity, afferent and efferent coupling, code coverage)?
  • Do you believe good design can be measured objectively?
  • I've seen a lot of discussion in C++ about dynamic polymorphism being a performance issue (since it disables a lot of opportunities for compiler inlining, and since adds a pointer per class, can increase cache misses). What are your thoughts on this based on games or any other CPU intensive applications?
  • I know this is a curve ball, but, what do you think would be the ideal unit test code coverage (line and branch)? Why?
  • Knowing ideal code coverage can be tricky and sometimes irrelevant, what would be the lower limit? For examples, is 10% of code coverage relevant?
  • What would be the threshold when you start feeling improvement?
  • I've heard a lot of people stating that you can achieve high coverage numbers (for example 80%) and still have a pretty bad code. What are you thoughts on that?
nico's photo

Hi there, so, how terrible do you think "serverless" is ?

Alex Vasyliev's photo

Hi Robert, what is your attitude to fullstack developers? Should every dev choose his side one day or fullstack is more effective for professional growth?

Huseyin Ergin's photo

Hi Robert,

1) What do you think of a CS education to be a software engineer? Is it totally useless or you see some value in that?

2) If we would like to build a software engineering course based on agile and want to divide it into 6 pieces. What would they need to be? (i.e. waterfall has these requirements, design etc etc.)

Thanks,

Robert Martin's photo

1) What do you think of a CS education to be a software engineer? Is it totally useless or you see some value in that?

That depends on the school. At some schools it is entirely possible to get a masters level degree in computer science without writing a line of code. That's just nonsensical. On the other hand, there are schools that do a pretty good job of getting your fingers on the keyboard.

Overall, however, I do not think CS degrees are necessary, or even worth the cost. Software is a trade that can be learned on the job via good apprenticeship programs.

2) If we would like to build a software engineering course based on agile and want to divide it into 6 pieces. What would they need to be? (i.e. waterfall has these requirements, design etc etc.)

Pick 6 projects, and run each one of them all the way through to completion. Use all the Agile disciplines in each. Teach the students by doing.

Flavius's photo

Hi Robert,

I know you ran away from the C++ standards committee.

With that in mind, what do you think about rust's lifetimes and ownership, and generally about rust and its future in the programming language landscape?

Can you explain each of the SOLID principles in the context of rust (including traits)?

Robert Martin's photo

I was never invited to be on the C++ standards committee. Had I been invited, I would have declined. I hate bureaucracies. I don't want to haggle over little tiny language features. I want to code.

I know absolutely nothing about Rust. I may look into it one day; but there are so many other things to look into. Decisions, decisions.

Tomás Vallotton's photo

Robert Martin It is a very innovative concept. I'd recommend to give it a look. Ownership allows rust to ensure that your code cannot have data races, which is not a safety guarantee that any other language can provide as far as I know. This allows for very scalable programs imo.

Eugene Nikolaev's photo

Hey, Dear Uncle Bob!

Do you use any reactive/state management/shadow dom/whatever library while programming on ClojureScript?

עִדוֹ וייס's photo

Hey Uncle Bob! In your first episode about functional programming you said, and I quote: "Functional programming is destined to be the dominant style of programming in the years to come". I was actually quite surprised to hear that from you. Can you give some more detailed explanation about that? And generally, what are your expectations from the field of programming in, say, 20 years from now? Thank you so much for your amazing contribution to this profession, I enjoy Cleancoder so much.

Christian Vásquez's photo

What is the most memorable moment of your carrier?

Masoud Naghizade's photo

Hi there uncle bob , I've gathered a team in far away country based on your books and videos. we do clean coding and clean architecting , as well as testing and we do all the principles of XP and we are indebted to you for these and we thank you from the bottom of our hearts.

We code in kotlin and we really are annoyed by it being staticly typed. We have developed some hacky but ugly ways to use dynamic DTOs .but we really consider your suggestion on switching to clojure as a dynamic and truly functional language.

You are being known for the word CLEAN , then How do you defend clojure being clean and easily read when it really looks ugly?!

Andrew's photo

Hi, what's your flow when you developing solo projects, like do you flesh out ideas on paper? Flowcharts?Pseudocode? Prototyping? etc. Then after you finished coding/refactoring/tdding is that the end for a day or do you do something like reflect on the code.

Jonathan Novaretti's photo

What are others books about software design you recommend?

Igor Dimcevski's photo

What are the titles of the last three software engineering books that you have read?

Mike Albert's photo

Hi Bob! 👋How does your dev toolkit look like? Which IDE do you use?

Gabor Juhasz's photo

Hi, when teaching programming to absolute beginners, do you think it would make sense to teach functional style first? I.e. constants instead of variables, no mutability, and (to be able to do anything meaningful) recursion, etc. early on. Thanks

Guo-Guang's photo

Hi Robert,

Could you share any experiences you manage to develop a product from an idea at early stage and how you overcome challenges along the way?

Matias Alvin's photo

Hey Uncle Bob,

I really love your books (clean code & clean architecture) and currently planning on buy your other books. My question is:

  • Do you sell kindle formatted for your books? I can't seems to find it on amazon.
  • With current mobile development trend, where most of it required the software to highly coupled to it. Is it possible to implement clean architecture?
  • What makes you interested in clojure?

Thanks for the AMA! I really love your works, stay awesome Uncle Bob :)

Alix Warnke's photo

Hi Bob, in light of your recent tweet, twitter.com/unclebobmartin/status/106958883.. , about bloated programming languages with features that should be implemented in frameworks and your statement, a year ago, that you considered the current lineup of available programming languages to be sufficiently powerful, blog.cleancoder.com/uncle-bob/2017/11/18/On..

Do you consider Kotlin to be a better language than Java?

Bonus question (optional): Is it justifiable, generally speaking, to convert Java projects to Kotlin? If not, what would be the criteria?

Melanie Sumner's photo

I frequently observe young(er) developers trying to sell me something we tried 20 years ago but abandoned for various reasons (especially in web development). I want to find a good way to encourage experimentation, but at the same time, I feel like the industry is continually trying to reinvent the wheel. How do you deal with hype? Do you recommend software professionals stay out of the hype cycle, or lean into it?

Robert Martin's photo

The hype cycle is very real, very distracting, and very annoying. I strongly recommend assessing each "new" thing to come along, and then ignoring those that are just restatements of past ideas.

So, for example, microservices are not a bad idea; but there's been too much hype about them. They are an old idea that has a place, but programmers should not simply be leaping into microservices just because they are "new". Older programmers need to calm everyone down and remind them of the costs of creating hundreds of little services. Those costs are not trivial.

Melanie Sumner's photo

Thank you for the advice!

Frigo Coder's photo

Kevlin Henney in his presentation Seven Ineffective Coding Habits of Many Programmers makes an interesting argument at 43:00. He argues that we should write test fixtures that test the entire class for specific example data, instead of writing tests for each method with their own little examples. What are your thoughts about this?

Robert Martin's photo

Kevlin is right about too many things for me to argue with him about this.

Matt Madson's photo

Hi Uncle Bob,

Read and loved your book--Clean Architecture; curious on your thoughts for how component design and component coupling map to an AWS lambda FaaS world.

Thanks!

Ramon Chiara's photo

What happened to Object Mentor's site??? I liked its resources so much... I'm finishing reading Agile Software Development and there are some links to there. Where can I find them now? GitHub? Thanks for all the knowledge you share and for all the contribution to the programming community!

Lukáš Mešťan's photo

Hey Robert, What do think about Scrum/Kanban?

Robert Martin's photo

Both are fine methods. I prefer Extreme Programming myself. And I really don't like the certification aspect of SCRUM.

Benny Elgazar's photo

What do you think about Go-lang? It success is related to the fact it's backed up by google?

Sky's photo

Hey Robert,

Where do you think coding is moving with AI replacing some of the tasks in the industry? (As in do you think AI would replace basic coding in the workflow?)

Martin Moreno's photo

Hey Bob!

About the Clean Architecture, Use Cases in particular, do you think they map 1:1 to the concept of Action proposed by Mancuso in Interaction Driven Design? If not, what differences do you find?

squid storm's photo

Level 4---- my software Level 3----internal APIs e.g Iaudio Level 2----third party APIs e.g Boost Level 1----language APIs e.g STL Level 0----Operating system APIs

please illustrate for me how I should implement these levels in terms of code ?

Spencer Phillip Young's photo

Hi Uncle Bob,

It seems today that everybody and their mothers are adopting "micro-services" or service-oriented architecture. So, I would like to get your opinion on the use of this pattern.

Feel free to give your general thoughts, but I had these questions in mind:

  • For the average org, is SoA successful more often than not and can successes or failures be directly attributed to SoA?
  • Do you see SoA as a lasting trend?

Also, I want to thank you for taking the time to do this AMA! You're an inspiration to us all.

Adam Fraser-Kruck's photo

Hi Bob!

Have you had a chance to try out rust yet? Any thoughts or predictions that you'd like to share?

Thanks for your work. "Come on dogs!"

Bugra Hasbek's photo

What are your thoughts on writing automated tests for gui?

Harsha Jayamanna's photo

Hi,

I’m working with EJB these days. But I’m mostly interested in Spring, Hibernation and other related stuff. I’m thinking of learning EJB more because it can help me to perform in my job. Do you think learning EJB could help me become a better programmer?