<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: voiceofunreason</title><link>https://news.ycombinator.com/user?id=voiceofunreason</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 16 Apr 2026 05:04:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=voiceofunreason" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by voiceofunreason in "Ask HN: Books on Unit Testing and TDD?"]]></title><description><![CDATA[
<p>My recommendation: you should probably start from _Working Effectively with Legacy Code_ by Michael Feathers.<p>The best "let's do something not trivial" TDD book is probably still _Growing Object Oriented Software, Guided by Tests_ by Steve Freeman and Nat Pryce.<p>Most of the "more than the basics" topics are the same kinds of practices that were considered "good design" whether you were using TDD or not.  For example, Parnas 1971, Berard 1993, John Carmack 1998 ("Time is an input...."), and so on.<p>If you are interested in more than the basics on TDD, the right starting point is _Test Driven Development by Example_ by Kent Beck, which while a bit thin on examples actually covers a nice variety of more advanced topics (although not in great depth).  If you are going this route, you should pair that with Beck's 2023 essay "Canon TDD".</p>
]]></description><pubDate>Thu, 02 Apr 2026 03:34:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609686</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=47609686</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609686</guid></item><item><title><![CDATA[New comment by voiceofunreason in "Verification-First Development"]]></title><description><![CDATA[
<p><a href="https://tidyfirst.substack.com/p/canon-tdd" rel="nofollow">https://tidyfirst.substack.com/p/canon-tdd</a> isn't particularly new; Beck has been consistent about "write tests before the code, one test at a time" for about 25 years now.<p>Same idea, different spelling: do you really think TDD should get credit for your good results, when you aren't actually shackling yourself to the practices that the thought leaders in that community promote?</p>
]]></description><pubDate>Tue, 18 Mar 2025 21:25:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=43405332</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=43405332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43405332</guid></item><item><title><![CDATA[New comment by voiceofunreason in "There's No Place for Test-Driven Development (TDD)"]]></title><description><![CDATA[
<p>Is there any prior art that defines covariant/contravariant tests in this way, or is Martin just borrowing language that sounds cool?</p>
]]></description><pubDate>Mon, 24 Feb 2025 15:12:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43160422</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=43160422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43160422</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The Big TDD Misunderstanding (2022)"]]></title><description><![CDATA[
<p>"I still find the skepticism around TDD weird."<p>A small community of programmers, with a disproportionately large audience, foretold that practicing test-driven development would produce great benefits; over twenty five years the audience has found that not to be the case.<p>Compare with "continuous integration" - here, the immediate returns of trying the proposed discipline were so good that pretty much everybody who tried the experiment got positive returns, and leaned into it, and now CI (and later CD) are _everywhere_.<p>As for what is gained, try this spelling: test driven development adds load to your interfaces at a time when you know the least about the problem you are trying to solve, which is to say the period where having your interfaces be flexible is valuable.<p>And thus, the technique gets criticism from both ends -- that design work that should have been done up front is deferred (making the design more difficult to change, therefore introducing costs/delays), and that the investment is being made in testing before you have a clear understanding for which tests are going to be sensitive to the actual errors that you introduce creating the code (thereby both increasing the amount of "waste" in the test suite, in addition to increasing the risk of needing test rewrites).<p>The situation is further not improved by (a) the fact that most TDD demonstrations are problems that are small, stable problems that you can solve in about an hour with any technique at all and (b) the designs produced in support of the TDD practice aren't clearly an improvement on "just doing it", and in some notable cases have been much much worse.<p>So if it is working for you: GREAT, keep it up; no reason for you not to reap the benefits if your local conditions are such that TDD gives you the best positive return on your investment.</p>
]]></description><pubDate>Sun, 16 Feb 2025 14:56:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43068497</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=43068497</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43068497</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The Big TDD Misunderstanding (2022)"]]></title><description><![CDATA[
<p>"I call them 'unit tests' but they don't match the accepted definition of unit tests very well." -- Kent Beck, __Test Driven Development By Example__<p>The short version is that "unit test" did actually mean something (see Glenford Myers, __The Art of Software Testing__ or Boris Beizer, __Software Testing Techniques__), although it wasn't necessarily clear how those definitions applied to object-oriented programming (see Robert Binder, __Testing Object-Oriented Systems__).<p>The Test-First/TDD/XP community later made an effort to pivot to the language of "programmer test", but by the time that effort began it was already too late.<p>So I think you should continue to call your tests "tests" (or "checks", if you prefer the framing of James Bach and Michael Bolton).<p>As best I can tell - there's no historicity to the idea that "unit test" was a reference to the isolation of a tests from its peers; it's just a ret-con.</p>
]]></description><pubDate>Sun, 16 Feb 2025 14:25:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43068268</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=43068268</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43068268</guid></item><item><title><![CDATA[New comment by voiceofunreason in "Understanding gRPC, OpenAPI and REST and when to use them in API design (2020)"]]></title><description><![CDATA[
<p>"REST is just pure bullshit. Avoid it like a plague."<p>No it isn't.  Evidence: I'm reading this in a web browser.<p>"...REST is intended for long-lived network-based applications that span multiple organizations. If you don’t see a need for the constraints, then don’t use them."<p>Bikeshedding the spelling of resource identifiers? Or what "verb" should be used to express specialized domain semantics?  Yeah, _that_ is certainly plague bullshit.</p>
]]></description><pubDate>Thu, 23 Jan 2025 03:16:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=42800307</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=42800307</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42800307</guid></item><item><title><![CDATA[New comment by voiceofunreason in "Test-driven development with an LLM for fun and profit"]]></title><description><![CDATA[
<p>I have yet to see an LLM + TDD essay where the author demonstrates any mastery of Test Driven Development.<p>Is the label "TDD" being hijacked for something new? Did that already happen? Are LLMs now responsible for defining TDD?</p>
]]></description><pubDate>Fri, 17 Jan 2025 00:11:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=42732601</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=42732601</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42732601</guid></item><item><title><![CDATA[New comment by voiceofunreason in "That's not an abstraction, that's a layer of indirection"]]></title><description><![CDATA[
<p>Berard 1993 offers a good survey of the meanings of Abstrasction, Encapsulation, and Information Hiding<p><a href="https://web.archive.org/web/20071214085409/http://www.itmweb.com/essay550.htm" rel="nofollow">https://web.archive.org/web/20071214085409/http://www.itmweb...</a></p>
]]></description><pubDate>Sat, 28 Dec 2024 13:09:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=42530807</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=42530807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42530807</guid></item><item><title><![CDATA[New comment by voiceofunreason in "What TDD is good for"]]></title><description><![CDATA[
<p>There is definitely room for confusion as to whether the "design" that is "driven" by TDD is design-the-noun or design-the-verb.</p>
]]></description><pubDate>Tue, 10 Dec 2024 23:41:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=42382969</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=42382969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42382969</guid></item><item><title><![CDATA[New comment by voiceofunreason in "What TDD is good for"]]></title><description><![CDATA[
<p>Well, TDD (or its immediate precursor, depending on where you draw the lines) escaped from the Smalltalk world circa 1997; but I think you can make a case for 1999 being when it really began to emerge.  Most of the examples that I saw in the next 5 or so years were written in Java or Python.<p>Beck's book was 2003, with examples in Java and Python.  David Astels wrote a book later that year, again primarily Java but also with short chapters discussing RubyUnit, NUnit, CppUnit....  Growing Object Oriented Software was 2009.<p>My guess is that "peak" is somewhere between 2009 and 2014 (the DHH rant); after that point there aren't a lot of new voices with new things to say ("clap louder" does not qualify as a new thing to say).<p>That said, if you're aware of the gap between decision and feedback, and managing that gap, I don't think it matters very much whether that feedback comes in the form of measurements of runtime behavior vs analysis of the source text itself.  It might even make sense to use a mixed strategy (preferring the dynamic measurements when the design is unstable, but switching strategies in areas where changes are less frequent).</p>
]]></description><pubDate>Tue, 10 Dec 2024 18:26:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=42379668</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=42379668</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42379668</guid></item><item><title><![CDATA[New comment by voiceofunreason in "TDD is Not Hill Climbing (except where it is)"]]></title><description><![CDATA[
<p>"why would one have to write the test first?"<p>Disclaimer first: TDD won't give you anything that you couldn't instead achieve via "git gud"; except perhaps a reduced anxiety about overlooking a subtle error (but after "git gud", you don't _make_ subtle errors, do you?)<p>The main justification for test first is something like this: "we didn't have to be brilliantly prescient designers to find a less tightly coupled design.  We just had to be intolerant of pointless effort in writing the tests."  (Aim, Fire -- Beck 2000)<p>TDD is, in part, an attempt at reducing the length of a feedback loop.  The catch is that (in spite of the labels that have been used) the feedback loop of interest is not the programming-test loop, but instead the analysis-design-programming loop (bringing OOA, OOD, and OOP closer to each other).<p>The underlying assumption is something like "complicate code should be easy to test".  If you believe that easy-to-test drives less-tightly-coupled design, and you think that latter characteristic is valuable, then it makes a certain amount of sense to lock in that easy-to-test constraint early.<p>"TDD strikes me as a practice that slows you down a fair amount yet still doesn't offer anything close to complete formal validation"<p>Yes and... that's not TDD's job?  The automated checks used in TDD are written by the developer to satisfy the needs of the developer; if the thing you want is complete formal validation, then you should be using tools designed to meet that need.  TDD might give you a higher success rate when you subject candidate systems to formal validation, and should give you lower costs when revising a failed candidate, but "the TDDs passed, ship it" is _not_ a risk free proposition.<p>Beck again: "I never said test-first was a testing technique.  In fact, if I remember correctly, I explicitly stated that it _wasn't_."</p>
]]></description><pubDate>Wed, 03 Jul 2024 01:26:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=40862013</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=40862013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40862013</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The Big TDD Misunderstanding"]]></title><description><![CDATA[
<p>As far as I can tell, the XP community pretty quickly converged on "let's use patterns to nope that scope"; for example "The Humble Dialog Box" by Michael Feathers (<a href="https://raw.githubusercontent.com/peerreynders/rendezvous/main/media/TheHumbleDialogBox.pdf" rel="nofollow">https://raw.githubusercontent.com/peerreynders/rendezvous/ma...</a>).<p>(Also, TDD wasn't being hyped as a testing practice, but more of an analysis/design/programming practice: <a href="https://users.csc.calpoly.edu/~djanzen/setopics/testing/IEEESoftwareBeck.pdf" rel="nofollow">https://users.csc.calpoly.edu/~djanzen/setopics/testing/IEEE...</a> )</p>
]]></description><pubDate>Wed, 31 Jan 2024 14:53:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39204478</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=39204478</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39204478</guid></item><item><title><![CDATA[New comment by voiceofunreason in "TDD Outcomes"]]></title><description><![CDATA[
<p>"I never said that test-first was a testing technique. In fact, if I remember correctly, I explicitly stated that it wasn’t."  -- Kent Beck, 2001 (<a href="https://users.csc.calpoly.edu/~djanzen/setopics/testing/IEEESoftwareBeck.pdf" rel="nofollow noreferrer">https://users.csc.calpoly.edu/~djanzen/setopics/testing/IEEE...</a>)</p>
]]></description><pubDate>Fri, 24 Nov 2023 18:54:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=38406935</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38406935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38406935</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The big TDD misunderstanding (2022)"]]></title><description><![CDATA[
<p>See also: ANSI/IEEE 1008-1987</p>
]]></description><pubDate>Sun, 19 Nov 2023 18:36:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=38336057</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38336057</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38336057</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The big TDD misunderstanding (2022)"]]></title><description><![CDATA[
<p>Search for the writings of Dan North, and don't forget that in the English alphabet, "Behaviour" is spelled with a "U".<p>Very roughly, Cucumber framework appears in late 2008?  Whereas BDD first appears in the TDD community no later than December 2005.<p>Ex: here Dave Astels references a BDD talk he presented in 2005-09: <a href="https://web.archive.org/web/20051212160347/http://blog.daveastels.com/?p=53" rel="nofollow noreferrer">https://web.archive.org/web/20051212160347/http://blog.davea...</a></p>
]]></description><pubDate>Sun, 19 Nov 2023 18:03:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=38335583</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38335583</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38335583</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The big TDD misunderstanding (2022)"]]></title><description><![CDATA[
<p>That's not quite right, historically.<p>Behavior Driven Development began as a re-languaging of TDD: "The developers were much more receptive to TDD when I stopped talking about testing." -- Dan North.<p>BDD diverged from TDD fairly early, after some insights by Chris Matts.<p>As for TDD advocating tests of the public interface... that seems to me to have been more aspirational than factual.  The tests in TDD are written by developers for developers, and as such tend to be a bit more white/clear box than pure interface testing would suggest.<p>In the edge cases where everything you need for testing is exposed via the "public" interface, these are equivalent, of course, but there are tradeoffs to be considered when the information you want when running isolated experiments on an implementation isn't part of the contract that you want to be supporting indefinitely.</p>
]]></description><pubDate>Sun, 19 Nov 2023 17:50:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=38335415</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38335415</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38335415</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The big TDD misunderstanding (2022)"]]></title><description><![CDATA[
<p>Yes.<p><< I call them "unit tests" but they don't match the accepted definition of unit tests very well. >><p>I'm not entirely certain it's fair to accuse the author of lying; ignorance derived from limited exposure to materials outside the bubble (rather than deceit) is the more likely culprit here.<p>(Not helped at all by the fact that much of the TDD/XP origin story is pre-Google, and requires a different set of research patterns to track down.)</p>
]]></description><pubDate>Sun, 19 Nov 2023 14:56:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=38333190</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38333190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38333190</guid></item><item><title><![CDATA[New comment by voiceofunreason in "The big TDD misunderstanding (2022)"]]></title><description><![CDATA[
<p><< Originally, the term “unit” in “unit test” referred not to the system under test but to the test itself. >><p>Retroactive continuity - how does it work?<p>For today's lucky 10,000: "unit test", as a label, was in wide use prior to the arrival of the Extreme Programming movement in the late 1990s.  And the "unit" in question was the test subject.<p>But, as far as I can tell, _Smalltalk_ lacked a testing culture (Beck, 1994), so perhaps the testing community's definitions weren't well represented in Smalltalk spaces.<p>"The past was alterable. The past never had been altered."<p>(Not particularly fair to single out this one author - this origin myth has been common during the last 10 years or so.)</p>
]]></description><pubDate>Sat, 18 Nov 2023 02:05:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=38314046</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38314046</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38314046</guid></item><item><title><![CDATA[New comment by voiceofunreason in "Ask HN: Top 10 Timeless Software Books That ChangedLife as Software Engineer?"]]></title><description><![CDATA[
<p>> I've seen like bilion discussions about TDD and I still dont understand why is it so overhyped.<p>My guess: because it picked up a lot of momentum from the OO "patterns" community, and that gave it a lot of immediate reach and credibility.<p>Beck and Cunningham already had an audience of their own, and TDD also promoted Martin Fowler's ideas (pulling in his audience), and Robert Martin jumped aboard early as well (pulling in his audience).<p>The cynic in me notes that the Smalltalk community needed something to do, as it had by then become clear that Java was going to win that market.</p>
]]></description><pubDate>Mon, 13 Nov 2023 21:43:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=38255788</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38255788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38255788</guid></item><item><title><![CDATA[New comment by voiceofunreason in "Ask HN: Top 10 Timeless Software Books That ChangedLife as Software Engineer?"]]></title><description><![CDATA[
<p>> This whole red-green step in TDD makes complete no sense when you're writing new code.<p>Only viewed in isolation - the point of red-green is test calibration: be certain that your new experiment is actually measuring the thing that you think it is measuring.<p>Red-green isn't the only way to achieve this, of course, but it is a smooth way to achieve this.</p>
]]></description><pubDate>Mon, 13 Nov 2023 21:30:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=38255667</link><dc:creator>voiceofunreason</dc:creator><comments>https://news.ycombinator.com/item?id=38255667</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38255667</guid></item></channel></rss>