Comments on: Duct tape considered harmful http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/ Random tangents Thu, 13 May 2010 11:50:45 +0000 hourly 1 By: RobW http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-710 Thu, 13 May 2010 11:50:45 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-710 Both the author and Joel Spolsky are right, but at different ends of the spectrum. When this subject comes up, it is a discussion of Technical Debt. The way I explain it is that technical debt is just like how you pay for anything else: you pay now or you pay later. Joel’s argument is acceptable if you decide to pay later, where time-to-market is vital (and a moot point if you don’t get there first because you go out of business), and is analogous to a credit card. You save now, but incur huge interest payments later. *As long as you understand that*, then it’s a valid choice. What is an *invalid choice* is to decide that you want to pay later but then change your mind and expect software maintenance to be free in the future.

The author’s argument is also correct: in safety-critical applications, you *cannot* pay later. It’s like paying for a product where they don’t take credit cards, only cash. And in regards to testing, I don’t buy the argument that software should be like bridges but that bridges are not tested but are reliable due to specifications. That may be true for bridges, but software cannot have quality constructions that way. The reason is simple: *unlike* a bridge, you only ever write software once! There’s no point in writing the same software code again and again, you simply copy it! Bridges can’t be duplicated out of thin air, they have to be rebuilt again and again. Every software coded is new in some way, and THAT is why you must test it.

]]>
By: Mark Dennehy http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-704 Tue, 11 May 2010 23:35:39 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-704 In reply to Dave R..

And the day you can rewrite Linux in pure haskell is the day you’ll have an analogy that works.

]]>
By: Dave R. http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-702 Tue, 11 May 2010 21:48:20 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-702 The day someone shows me a skyscraper you can jack up and move to another continent or add twelve basement levels to is the day I’ll accept the civil engineering analogy.

]]>
By: Tweets that mention Duct tape considered harmful ( Stochastic Geometry ) -- Topsy.com http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-614 Fri, 26 Mar 2010 01:05:10 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-614 […] This post was mentioned on Twitter by Web Startup Group, Mark Dennehy, hnquestions, Hacker News, Thomas Buck and others. Thomas Buck said: Why Joel Spolsky was wrong about 'duct tape programmers' being good programmers. http://bit.ly/cmuRvZ […]

]]>
By: Rudolf Olah http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-271 Wed, 28 Oct 2009 18:54:19 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-271 Thank you for writing this post. It is very nice to see someone write about the dangerous and uninformed writings of bloggers such as Joel Spolsky.

]]>
By: Mark Dennehy http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-270 Mon, 28 Sep 2009 17:20:33 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-270 In reply to Forrest Landry.

Forrest, to look at it more clearly, if you have a bar of properly formed steel, you know it will have a tensile strength of X from prior destructive testing on other bars. Your testing, therefore, is not to see if X is the tensile strength; but if the bar is properly formed. It is indirect testing.

With unit testing, you exploit the fact that you can directly test software by seeing if it does what it’s meant to – whereas with a bar of steel, if you test its tensile strength directly, you have to do it destructively.

There’s nothing running counter to the flow of causality here. It’s a different form of testing, that’s all.

]]>
By: Forrest Landry http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-269 Mon, 28 Sep 2009 17:06:12 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-269 Perhaps I can restate in another way to make my notion about testing clearer. If I start with a steel bar of a specific thickness and length, as an engineer, I am going to ‘know’ that it will have certain tensile capabilities, bending moments, compression resistance, etc. I do not need to perform any tests to know that a bar of this kind is going to have certain functional characteristics — it is inherent in the physics and is reliable knowledge.

Note that testing to _validate_ that the material is in fact steel and is correctly formed is an inherently /different/ kind of testing — it is a validation of what something is, rather than what it does. This is also very different than testing a new, otherwise unknown material, to identify what sort of characteristics it has. Neither of these other types of ‘testing’ has anything to do with the basic idea that it is *only* possible to argue causality in the direction from what something _is_ to what it _does_. IF we are working with a bar of known size, material, and mechanical correctness THEN we can be certain of its having known functional properties. *All* engineering modalities, regardless of kind, depend explicitly and completely on causal relations of exactly this type: they all are causal statements that go from what something is to what it can be expected to do.

The basic problem with software ‘testing’ is that it attempts to go backwards, against this necessary and fundamental flow of causality. Software testing attempts to go from testing what some code /does/ (its functions) backwards towards assertions about what it /is/ (its quality/correctness). Not only is this terrible engineering practice, it goes against the very nature of logic itself. Software testing is the logical fallacy of affirming the consequent. It is the syllogism of attempting to argue from statements: 1) “IF A is true THEN B is true” and 2) “B is true”, towards the inherently faulty conclusion of “Therefore, A is true”. How different is this from the idea of software testing which writes tests in from of “IF our algorithm is correct (of high quality), THEN it will perform function Z”? When the code ‘passes’ the Z functional tests, then the QA department, engineers, management, etc, feel/think/claim that they can then assert “the algorithm is correct” — yet this is not so!

The basic problem here is inherent the very idea of how most people conceive of the function of software testing. Testing of system function (what something does) does will never allow for a way to argue backwards “that the system is of high quality” (an claim of what something is). Conflating the basic notions of validation testing (testing what something is) with property/characteristic testing (testing what it does) — as many people do — will not help (posts above make this mistake). How often do you find yourself or your peers thinking: ‘because the unit/system tests have all passed, that/therefore the system is of high quality (ie, reliable)”? It is a surprisingly insidious and common idea — yet even having a majority of practicing software professionals believe it does not make it logically correct — it is still complete bullshit to think that ‘software testing’ as it is currently conceived has anything at all do do with software/system quality.

Software design practices will remain at a infantile stage forever, unless and until the basic logic and principles of structural casual process are recognized and incorporated into the code writing methodologies at a primary and fundamental level. Chasing after ‘improved testing practices’ (TDD, etc) as a ‘silver bullet fix’ is inherently broken. It is a fad, and it will pass. The rise of TDD is more the result of management types trying to get useful code work from masses of unskilled ‘developers’ (cheap labor) than it is a reflection of any basic principle of ‘good software engineering practices’. If you reflect on it, you may notice that TDD proponents all tend to be associated with development groups that are much more cost-driven than quality-driven: TDD is seen as a way to avoid hiring truly skilled engineers, instead replacing them with vast numbers of code monkeys. As a truly skilled engineer (the minority) would you wish to contribute to the promotion of this basic fallacy?

]]>
By: Top Posts « WordPress.com http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-268 Sun, 27 Sep 2009 00:15:53 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-268 […] Duct tape considered harmful Blogs are a useful and important tool for professional developers and engineers, for two main reasons. Firstly, by and […] […]

]]>
By: [Link] Duct Tape Considered Harmful « jkwiens.com http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-267 Sat, 26 Sep 2009 20:00:21 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-267 […] Duct Tape Considered Harmful (Hacker News)Signs of a Programmer Created UI (Hacker News)09/21/09 PHD comic: 'Annual Grad/Faculty Softball Game, pt. 4' (PHD Comics)TEDTalks : Rebecca Saxe: How we read each other's minds – Rebecca Saxe (2009) (TEDTalks (hd))WordPress Just Made Millions of Blogs Real-Time With RSSCloud (Hacker News)Work expands to the time allowed (The Endeavour)Three algorithms for converting color to grayscale (The Endeavour)TEDTalks : Dan Pink on the surprising science of motivation – Dan Pink (2009) (TEDTalks (hd)) […]

]]>
By: Mark Dennehy http://178.63.27.54:8080/statictangents/2009/09/25/duct-tape-considered-harmful/comment-page-1/#comment-266 Sat, 26 Sep 2009 15:17:43 +0000 http://stochasticgeometry.wordpress.com/?p=330#comment-266 In reply to Conor.

If Joel is writing for managers without technical knowledge, then he is doing no favours to us working stiffs by recommending stupid ideas like losing tools from the toolbox. It’s hard enough to produce something without having a PHB tell us what tools to use when they have no idea what those tools are or do. And as to recommending dropping testing to PHBs because it doesn’t add value, well that’s just plain vindictive.

And I’m pretty sure you’ve got the same perspective issue going on here that I mentioned below. There’s coding for customers (where you want to ship, ship, ship because there’s money to be made!) and coding for users (who are often not the same people and whose interests conflict with those of customers, and quite often, it’s the user who takes it in the neck instead of the customer when something goes sideways). Engineering is very insistent that engineers code for users – business and management are very insistent that engineers code for customers.

Thing is, every engineer out there is (or should be) immediately remembering the phrase “take off your engineering hat and put on your management hat” when faced with that choice.

Historically speaking, we’re in a unique place right now, right at the start of all our fun stuff becoming part of the infrastructure. This has happened to all the other branches of engineering over the years. Mechanical starts off as a bunch of guys trying to build something and sell it, there’s little in the way of ethical considerations, it’s ship-ship-ship all the way; over time, as society becomes dependant on what they’re building, the requirements of the actual user, and the ethical duties to that user became prevalent. It’s not so much a point you hit in the development of the industry as it is a phase the industry slides into, and we’re mid-slide right now from what I can see.

When we start seeing the first serious legal penalties coming in for poor software engineering, that’s when we’ll know we’re nearing the end of that slide. Thing is, waiting until then to adjust our techniques is somewhat unethical.

As to the amount of embedded code out there, Ganssle estimated off back-of-envelope calculations that there were some five million embedded projects out there, with around 240,000 more coming in every year. He wound up with a 50-50 split between the embedded and non-embedded codebase sizes. I’ve seen papers from ACM conferences which go further than that, to the point where it’s projected that 60% or more of all code written everywhere next year will be for an embedded system.

]]>