Thoughtworks seminar

This morning I attended a Thoughtworks seminar in Stockholm. The venue was piperska muren - a really nice conference centre at Kungsholmen. The founder of the company opened up with a short introduction of the agenda, the company and the speakers. 

First out was Ola Bini - one of the local employees - speaking - as he often does - about programming languages. He made some points about the usefulness of different languages - most of them valid I think. A typical application today uses a bunch of languages - think enterprise Java and you have at least Java, XML, HTML, CSS, Javascript and SQL. It is one language per technical need. So we are sort of used to different languages already. What we are not used to are different main programming languages. A system may be written using a bunch of different languages for its subsystems depending on the character of each subsystem. Coding a rules engine in Java may not be the best choice of language for example. I agree a lot with this. I would rather try new languages every year then continue to dwell in the Java trench. It would probably be good for the systems I work on and I would grow personally a lot more than I do now (repeating the same tedious tasks over and over). But I am not so sure this is a practical approach. The proportion of developers that are able to easily grasp another programming language is very low. Many developers I work with barely manages to get it right in Java but when they finally "get" it - it sticks. Is it possible to deploy a large number of languages in a large organization that "just" have average developers? I would like to say yes to this but I am not so sure.

Second - Martin Fowler. A great speaker to say the least. He held 3 different short talks. (1) First he talked about the value of software design. He made a lot of good and well known points. Software design is not visible to the users and customer of a system so it is not easy to make them pay for good software design. The way to go about it is to introduce the concept of technical debt (coined by Ward Cunningham) to the customer. Whenever there is a technical debt the customer can either decide to pay the debt up front (refactor the system) or pay interest on future investments (added functionality needs to live with and work around  limitations introduced earlier). And as interest builds up new functionality gets more and more expensive. He also did not agree on the difference between technical debt and mess as described in a blog post by Uncle Bob but rather thought of it in matters of whether the debt was deliberately created or not. Fowlers nondeliberate debt probably equals Uncle Bobs mess. A debt is always created in any software project since we can not know the design until after we are done. Software development is exploratory in its nature and it is natural that knowledge about the system comes to us progressively throughout a project. A comforting thought indeed. (2) The second talk was a proposal to use the pattern called "event sourcing" more in business applications. He argued that this concept - that developers use everyday while using version control systems makes a lot of sense in many business situations too. It solves the problems of history and alternative reality (branching) for us. Interesting but not applicable right now.... (3) In the third talk he took a step back and pondered on the nature of software projects and related it to the work of thoughtworks. There is a scale of software efforts from pure infrastructure of no competitive business value to core business software that may be the edge between a business and its competitors. A competitive and therefore expensive software consultancy like thoughtworks should look for the latter kind of projects - strategic projects where the payback is far higher then the increased cost of skilled developers. In these kind of projects there is a real point in using expensive and great developers. He finished of with a bit of self criticism wanting his company to work less with "crappy financial software" and more with stuff that makes the world a better place.
Third and last - Vivek Prahlad - one of the men behind Twist - thoughtworks automatic gui tester that also comes bundled with the continours integration tool Cruise (a commercial continuation of CruiseControl) and collaboration thing Mingle. He started with laying the theoretical foundation for this kind of testing. This includes the case against manual testing due to its inability to repeat the same test twice and that test is an issue for the entire team - not only for the testers. All this seems so nice and good but is seldom implemented for real. He then went on and demonstrated Twist and I must say that I was truly impressed. Too bad it ain't free - I want to implement it right away in my current project. At $3000 a year for 5 users it is still not expensive but harder to just slip into an organization where the procurement process is sacred. I will certainly recommend it to any future customer. Twist runs on top of selenium (and other test automation frameworks as well I think) and enables test cases that actually are readable by normal users. Built in the eclipse framework it features refactoring of test cases among other things. The generated code is easily accessible so that code generated by the recorder can be made tidy.
All in all - a nice couple of hours listening to people that knows software development.

Old comments

Is it possible to deploy a large number of languages in a large organization that "just" have average developers? I would like to say yes to this but I am not so sure.

Call me optimistic (or naive ;)) but I believe that if developers are already handling multiple languages (albeit "barely") then it shouldn't be too much of a stretch to learn yet another DSL.

That being said, there are some issues with Ola's vision of polyglot programming, the main one being that there are a lot of developers that do not want to learn another language. Then there are the issues with IDE support; for mainstream acceptance the support for language X would have to be at least as good as the current tooling is for Java.

At least in MS-land that may change, since they're now promoting F# as a full worthy complement to C#. If only Sunacle could throw its weight behind Scala then there might be some light at the end of the tunnel ;)