But there are self-interest forces at work in arguing against the duct-tape arguments--advocates of patterns, tdd and so on.
Two parties in this argument here have shipped real software in crunch mode. Perhaps others in this argument have not.
But there are self-interest forces at work in arguing against the duct-tape arguments--advocates of patterns, tdd and so on.
Two parties in this argument here have shipped real software in crunch mode. Perhaps others in this argument have not.
This is a key point. Agile methodology vendors who wax loudest about TDD and other "core practices" have never shipped any significant software [1]. None of them ever built a software product or a startup. Neither do they show us any decent body of code written with their superior approach [2] (vs talk interminable about how our code will be better if we adopt their advice and pay them the big consulting $$).
After all the book is about Coders At Work, not "Methodology Vendors at Work" (which might be an interesting book, in a very horrific fashion).
[1] How many of the creators of the Agile Manifesto have shipped any significant software or built a software company? Most (All?) of them are methodology consultants.
[2] Kent beck has JUnit. Robert Martin has Finesse. The rest of the agile gurus don't have anything. I leave it to the readers to decide if JUnit and Finesse are significantly superior, designwise, to other Open Source code bases, written without TDD.
Bugs in systems like that will kill people, and we're getting to a state these days where those systems are becoming more and more embedded in day to day life and the risk to Joe Soap is getting higher. How long until a bad UI in a GPS iPhone app turns out to be a contributing factor in a bad car accident? Or until a web-based medical app with a hidden bug screws up a dosing calculation for a patient?
This whole duct-tape-it-and-ship-the-sucker mentality has got to stop, before someone gets badly hurt.
StrawMan.
replace "duct tape programmers" by "TDD/Agile consultants" What do you get? ;-)
"tell me you'd be happy depending on those systems, for your chemotherapy or your ABS brakes or your ATM code or your airliner's fly-by-wire system."
More Strawmen.
Would you be happier if methodology consultants whose only programming experience in the last 10 years was working on a PayRoll System at Chrysler (which failed btw) used TDD to develop your chemotherapy/fly-by-wire/ABS brakes? ;-)
Or are you saying you base your level of happiness on the experience level of the coders involved rather than their test coverage stats? Because last I checked, experience levels meant very little. The Tacoma Narrows bridge was designed by - at the time - the foremost structural engineers in the world. Their paper on its design was recognised as the single most important paper of its kind in that decade. The bridge still fell, not because they were wrong, but because of something nobody had encountered yet (in this case, aerodynamic flutter).
Critical code is precisely that - critical. You don't leave it to the "gifted engineer" model of development because that always fails. Noone is gifted and diligent 100% of the time, everyone screws up eventually. It's dangerously arrogant to think otherwise. You build a system of work that lowers the probability that those screwups make it into a working system, that's all. Civil and Mech. and other engineering branches have been doing it for decades. We're just getting started on it in this branch of engineering.
And to some point, we need people, maybe our beloved one, maybe ourselves to be sacrificed in order for scientists and engineers in the next generation to figure out and put them into their test cases to avoid repetition of tragedies.
I think you misunderstand gifted engineers. Gifted engineers understand what they shipped are imperfect, but they have guts to ship them and see how they work. The failure will be lessons for next generation to learn. I feel more scared of people who think their tests have removed all known defects while they forget about unknown defects. They have committed the sin of "confirmation bias" and is much worse to welfare of humanity.
But there are another part of computer science and engineering dealing with fuzzy requirements or unknown problems. I don't see any better way to explore that area except trials and errors and the scientists and engineers have to face possible charges of "piss-poor", unethical, criminal and evil for the consequences of their solutions.
I feel that you have a very clear dichotomy of moral system. Unfortunately I deal with fuzzy things daily and see the harms of dichotomy in creating new stuffs and burning through money without any fruit of labor. It is easy for you to improve existing technologies because you can define criteria for improvements. But it is so hard in underfunding web startups that you can't expect in advance what a new solutions will be to users unless you make it and test it with them.
If I need someone to preserve and maintain existing software systems, because specifications and use cases are well defined, people like you are well fit for the task. But if someone has a new idea to solve a new problem that no one solved before, I would rather to see an unsophisticated solution first to test against the problem and start from there, and I am ready to rewrite the system when the problem becomes clearer.
Luckily, I just finished reading this article by one of the Twisted guys in relation to the recent release of Tornado which, in passing, sings the praises of TDD, basically calling it essential for the work they do: http://glyph.twistedmatrix.com/2009/09/diesel-case-study-in-...
No that isn't what I am saying. I am saying many of these people have no programming experience worth a damn. If someone were to tell me how to program(which is what all these methodology sellers do), they would be much more credible if they actually had the programming chops to back it up.
Musashi writing a book on swordsmanship is one thing. If I (who couldn't wield a samurai sword to save his life) write a book that claims my "style" of swordsmanship is better than anything all the others existent today, I shouldn't be surprised if practicing swordsmen don't pay me much heed.
It is the juxtaposition of people with no demonstrated/demonstrable programming skills being loud and obnoxious about the superiority of their advice about programming which I pointed to.
I was also careful to distinguish between Beck and Martin (who at least walk the walk by putting out code developed using the methods they preach) from the other more "all hat no cattle" folks like Jeffries. so to answer your question,
"Bit of a catch-22 there, no? "
No, Not at all. :-). I don't have any problems with people telling me how to program. But I don't trust people who demonstrate convincingly that they know nothing about programming (like Ron Jeffries does with his Sudoku code) who also claim to be "masters" of programming.
That would be like trying to learn fighting skills from a martial arts "master" you saw getting bashed around by a couple of punks at the bar last night, and ended up being taken to hospital and is still covered with bandages and walks with a limp! A master who wins fights would be much more convincing if he claimed he discovered a new martial art which makes existing ones obsolete.
I explicitly said
"None of them ever built a software product or a startup. Neither do they show us any decent body of code written with their superior approach (vs talk interminably about how our code will be better if we adopt their advice and pay them the big consulting $$)."
I stand by this. These guys write books that are the programming equivalent of "Who Moved My Cheese"?. "Coders at Work" otoh, focusses on people who actually are great programmers. Each interview contains more wisdom on programming than reams of "agile" (and these days "lean") textbooks.
FWIW, I did TDD almost exclusively for three years (when I worked at ThoughtWorks), but I don't do TDD anymore, though I still have unit tests.
I don't know about the specific people named in swordmanship but generally in sport the best teachers, coaches and managers will not necessarily be the best at the actual sport. Maybe that doesn't apply in the martial arts though.
And that's at the top level. For ordinary folks I'd suggest that the advice given by a legend may be inspirational, but that pragmatic advice from a standard teacher which is aimed at their level (e.g. "walk away from bar fights if at all possible") may be more appropriate. So I have no problem with methodology suggestions provided by the less than leet.
Also, your reply suggests you unit test, you just don't write the tests first. Which means, compared with the average programmer, you're like Greenpeace complaining about PETA and while you see a big difference the 'average' person just lumps you in together under the general heading of "extremist weirdos".
Fair Enough. You have a right to form your own opinions. Asking for proof of competence is not "ad hominem", especially in a context where that competence is what is under discussion. But yeah,, whatever.
I think most agile guru can't code for nuts. If you have difference of opinion, show me some great code these agile gurus wrote that in your opinion gives them the "level" to teach us how to code. Or a wildly successful project they managed(No the original XP project at Chrysler that failed doesn't count! ;-)) to the point they can give us the rest of us lessons.
"So I have no problem with methodology suggestions provided by the less than leet."
I don't either. But I do have problems with people who can't put one foot in front of the other masquerading as martial arts teachers. A teacher should know something beyond the students they purport to teach.
Shifting form martial arts to music, If someone doesn't know how to string a guitar and sets himself up as a "master guitarist" , should we all automatically respect him as a maestro just because he calls himself one?
Programming like music depends on quality of the output, not what title is on a visiting card. if someone can't sing "Jingle Bells" in tune, he is hardly a "musician" no matter what he calls himself or how much he blogs/tweets/writes self promoting pamphlets. Likewise for the programmatic equivalent of what (agile "guru" Ron Jeffries's attempts at TDDIng a Sudoku solver are. Please do a web search for "Ron Jeffries Sudoku Norvig" for the gory details).
A master musician is someone who can play very well. A music teacher should play much better than the untrained/untalented, if not at superhuman levels. There is a minimu,m bar of performance where it is criminal to let such a person "teach".
" your reply suggests you unit test, you just don't write the tests first."
I use what works.
But your vague Green peace/PETA analogy doesn't hold. You have your history mixed up.
You imply that anyone who uses unit tests is different from a an Agile Kool Aid drinking, propaganda spouting full time TDDer only as matter of degree. So Unit tests = agile to some degree !
Yeah Right :-).
Unit (and other) tests were used much before the agile weirdos came on the scene and blew it up into some ultimate design method (which I don't believe in - I've stated what I believe in - I think the Agile movement is largely inhabited and sustained by consultants and "scrum masters" and people who write books but no/very bad code.).
Using unit tests is not supporting Agile/XP/whatever. Drawing an occasional UML ish diagram on the whiteboard doesn't mean you support the RUP methodology salesmen.
FYI. I am done with this thread. I have no intention of going back and forth with you on a long and tedious thread. The PlinkPonk Thread Depth Alarm just went off. If you are really interested in discussing this offline, my email is in my profile. Else, well met and have a great day.