3 ms·
thats kind of TDDs core point. you don't really know upfront, so you write tests to validate what you can define up front, and through that, you should find you
by no_wizard 4y ago
thats kind of TDDs core point. you don't really know upfront, so you write tests to validate what you can define up front, and through that, you should find you discover other things that were not accounted for, and the cycle continues, until you have a working system that satisfies the requirements. Then all those tests serve as a basic form of documentation & reasonable validation of the software so when further modifications are desired, you don't break what you already know to be reasonably valid.
Therefore, TDD's secret sauce is in concretely forcing developers to think through requirements, mental models etc. and quantify them in some way. When you hit a block, you need to ask yourself whats missing, then figure out, and continue onward, making adjustments along the way.
This is quite malleable to unknown unknowns etc.
I think the problem is most people just aren't chunking down the steps of creating a solution enough. I'd argue that the core way of approaching TDD fights most human behavioral traits. It forces a sort of abstract level of reasoning about something that lets you break things down into reasonable chunks.
- pjmlp 4y agoI doubt ZFS authors would have succeeded designing it with TDD.
- no_wizard 4y agoWhat's inherent about this problem that wouldn't benefit from chunking things into digestible, iterative parts that lend themselves nicely to the TDD approach as I described?
- pjmlp 4y agoDon't write any code without tests doesn't provide a path to data structure design, or device drivers infrastructure.
- no_wizard 4y agoWhat about behaviors and expectations? At the end of the day you’re verifying behaviors and expectations of software. I mean when designing a solution you need to think these things through. TDD compliments this just the same