Study on Test-Driven Dev.: 15-35% longer, but 40-90% less bugs [pdf]
research.microsoft.com
research.microsoft.com
The simplest thing I can think of is if you have to alter a function to handle correctly some corner cases. You didn't think about them when you wrote the function in the first place, so basically your function was buggy all along... Now you have to test all the functions that rely on this function again. What if they relied on said bug and you didn't realize it ? With tests, you just run the tests (and hope they were well designed...). With your technique, you do the same, by hand, function after function...
Or to remain in a very bottom up style, what if you realize that one of your underlying brick was poorly designed ? It just doesn't address well the new problem at hand and need little enhancements... Anything that relied on this brick have to be, well, updated to use the new functions, and of course checked again. Again unit-tests come in handy...
Note that I'm just making the case for unit-testing, not test-driven developement itself...
Also, it's comparing time to count. Does 90% fewer bugs make up for the lost time? Are serious, systematic defects caught by tests? I suppose I should read the paper.
I hadn't realized Christians were necessarily language prescriptivists. If we were necessarily language prescriptivists, I would have to tell you that "em" should be written as "them", or in the alternative written as "'em" to emphasize the omission of the first two letters. I might also go on to mention that you mean systemic, not systematic. Systemic means occurring across a system, systematic means planned and ordered, as in a system.
http://en.wikipedia.org/wiki/Linguistic_prescription
But we're not necessarily language prescriptivists so, whee, you can write how you want to write and we can understand what you've written because it is communicative even if not "correct" as defined by reference to static "authoritative" definitions.
How accurate is to compare the various project teams? It always seems to me that no two projects and no two dev teams are ever the same. How do you account for the differences? The researcher somewhat addresses this but I am not fully convinced:
>>"...The projects developed using TDD might have been easier to develop, as there can never be an accurate equal comparison between two projects except in a controlled case study. In our case studies, we alleviated this concern to some degree by the fact that these systems were compared within the same organization (with the same higher-level manager and subculture).Therefore, the complexity of the TDD and non-TDD projects are comparable..."
Perhaps more data needs to be collected.
Look for a MSFT TDD MVP certification now.
Seriously? The OCaml implementation is about as fast as C and -- if you were to look at the language shootout -- fast OCaml code is digestable for pretty much anyone with even minimal exposure to the language. The OCaml execution model is simple. Now, with Haskell you might have a point.
Language shootouts are poor benchmarks for the quality of a languge. Better metrics are community activity and the quality of the libraries.
For more generic purpose as far as functional languages are concerned F# might have a go, if Microsoft continues to push its efforts to integrate it in Visual Studio and make it mainstream. With .net/mono under the hood the libraries are there. Not completely production ready yet in my opinion, but hopefully soon I'll be able to use it instead of C# when I have something (fast) to do on top of mono...
For most programs, you don't care about getting C performance, and functional OCaml code does an excellent job.
I should not have said that writing "fast-running" code in Ocaml is painful and ugly, since normal OCaml code runs fast enough for most purposes. What I meant to say is that writing optimized code in OCaml can be painful.
The performance of OCaml is really good if you write no imperative code. If you have a cost-centre that bothers you, it is pretty easy to get it fast: OCamls compiler does very little optimization, so a bit of manual rewriting helps a long way. There are several documents on the net that explains how to manually optimize a cost centre.