November 2005 - Posts

Udi Dahan did a posting on a question he received from a developer the other day: The developer asked him, why Udi was so much in favor of so many DLLs in a project? Wouldn´t the large number of DLLs make the project unnecessarily complicated?

I agree with Udi´s response and I hear the same question, too, quite often. But it always reminds me of a dialog in the movie "Amadeus":

Emperor Joseph II: "Your work is ingenious. It's quality work. But there are simply too many notes, that's all. Just cut a few and it will be perfect."
Wolfgang Amadeus Mozart: "Which few did you have in mind, Majesty?"

As if there was a maximum to the number of notes in a musical piece - as long as it fulfilled its purpose to please. Too many notes is a rediculous concept.

But so is the idea of too many DLLs in a project - as long as it fulfills its purposes. Interestingly, I think the same developer would not have asked Udi, if there were too many classes in the whole project. He just saw more DLLs than usually and that made him uneasy.

There is no such thing as a maximum number of methods or maximum number of classes or maximum number of DLLs in a software project! It´s all about the right (!) number of software artifacts.

But what´s the right number of classes or DLLs?

To answer this obvious question we´ve to ask, what the purpose of software artifacts is. What´s the purpose of methods oder classes in general? What´s the purpose of a certain class or DLLs?

Methods combine statements to form a unit of function. Statements that belong together go into the same method. The same is true for methods forming a class. It´s a question of concerns. Put together what belongs together. Keep apart, what is sufficiently different. Low coupling, high cohesion should be the mantra of every software designer.

But that´s not so new, is it? It´s pretty well understood on the level of methods and classes. 15 years of OOP should have driven this point home.

However, developers lack a bigger picture of software. They lack established levels of abstraction above the class level. But there´s more to the world of software as the Software Universe and Software Cells model describe:


Method and Class are just the lowest levels of abstraction when designing software. So what Udi´s developer is lacking is a bigger picture and tools/concepts to manage complexity. Software is a polylogic entity, so trying to handle it by just reducing some number of artifacts is plain wrong.

Instead, we need to develop an awareness of the intersecting hierarchies (of different logical domains, e.g. structural hierarchy, logical hierarchy, derivation hierarchy) and also rules of how artifacts should or should not be delineated and connected in each of those hierarchies.

Each of those hierarchies with its logic can be viewed as a separate dimension in a n-dimensional Software Universe (of which the above picture only shows one dimension, the structural hierarchy) thus making software an n-dimensional concept. This might not sound very helpful, but in fact it is, because when the different "facets" of software are undenieable it is better to have a clear frame of reference for them instead of always mulling them together.

So what is needed is not fewer classes or DLLs, but rather models and tools to manage complexity. Software developers better get used to that. Because the complexity of software is only increasing as we move forward in our industry. So let´s get real: It´s not the number of DLLs that´s irritating some of us. It´s the lack of knowledge of how to manage them (e.g. with regard to deployment, dependency management, versioning, development).

Posted by ralfw | with no comments

Today was a surprising and very happy day for me: Scheduled to talk at the iX Conference - Better Software - in Colone, Germany, I was invited to participate in the panel discussion on "Software development - art or engineering dicipline" for Tom DeMarco, who had to leave the conference early. The topic was fun, although in the end we were mostly discussing whether there still was a software crisis or not and what its characteristics might be.

Most enjoyable for me, though, was to have the honor to sit next to a "hero" of my youth: Prof. Niklaus Wirth, most well known for his invention of the Pascal Language. I still remember reading his "Pascal Language Reference" (way back in 1980 or so), "Algorithms and Data Structures" and one of my all time favorite technical books: "Compiler Construction" - small, pragmatic, enlightening.


At the panel discussion with my "hero" from 25 years ago: Niklaus Wirth (left).

I found Prof. Wirth to be a very amiable man with a clear opinion on current trends in software development. Later, after the discussion, I did an interview with him and we found out, we share quite some views on the state of the industry, e.g. how necessary changes in teaching software engineering are to overcome current problems in programmer recruitement or software development.

But all in all the conference was an exciting event not only because of meeting Niklaus Wirth, but also because the presentation of my Software Cells architectural model was very well received and sparked several interesting discussions. I guess I really need to sit down and write a book on it to sum up all the aspects...

And at the end we listened to a closing keynote from Peter Krieg - author of "Die paranoide Maschine - Computer zwischen Wahn und Sinn" - who talked about a new way of organizing data. Instead of storing data as we know it, he suggests we should move to storing relations between "data atoms" and regenerate the original data when needed. He likened this to how pictures are handled in computer games: games like Doom don´t come with a database of pictures/bitmaps but rather generate the images in realtime. During the keynote Peter Krieg´s concepts were not all too tangible, though. Just impressions of holographic images and associative memories flashed by my mind´s eye. However, after the keynote Peter Krieg showed me a first proof of concept on his laptop. It´s based on an open source project (http://www.pileworks.org/) and showed full text search in a large text corpus. Very impressing speed and functionality - especially when you remind yourself, there is no such thing as a fulltext index of words in its database. Nevertheless I need to think about his "relationistic approach" to data storage for a while. Good food for thought!

Posted by ralfw | 3 comment(s)
Filed under:

For those who demanded an English posting when I wrote my last blog entry here´s a link you can follow to explore Suchwerk - an interessting tool which somewhat combines Google´s desktop search and Windows Explorer´s file search. Suchwerk (German, could be translated to something like "search factory") is a virtual drive which allows you to organize file in a virtual hierarchy of folders. The folders contents are dynamic and you don´t need to explicitly put files into them. It´s done automatically by Suchwerk according to a query you implicitly specify by creating the folder hierarchy.

A quite interesting technology, I´d say. Somewhat reminds me of WinFS. However, Suchwerk is still concerned with files and not entities like contacts, tasks etc. But maybe this is going to change... I will meet with the creator of Suchwerk sometime later this month and we´re going to explore how Suchwerk can be further developed. Stay tuned...

Posted by ralfw | with no comments

Bin gerade auf www.suchwerk.net gestoßen. Eine interessante Technologie!

"Suchwerk" ist virtuelles Laufwerk und Suchmaschine für den Desktop in einem: Dateien, die man "ganz normal" auf seinem Rechner speichert, werden automatisch in eine vorgegebe (auf Dokument-Metadaten basierende) Verzeichnishierarchie eingeordnet oder tauchen "wie von Geisterhand verlinkt" in beliebig vielen selbstdefinierten Verzeichnissen auf. (Die selbstdefinierten Verzeichnishierarchien definieren implizit Suchkriterien, die auf alle Dateien angewandt werden.)

Selbst wenn man also alle Dateien einfach nur in ein physikalisches Verzeichnis legen würde, könnte man zu ihnen über den vorgegeben bzw. selbsterstellten dynamisch gefüllten Verzeichnisbaum sehr einfach hinnavigieren. Das ist ziemlich cool - und scheint mir eine gute Ergänzung den üblichen Desktop Searchengines. (Auf WinFS müssen wir ja noch lange warten.)

Besonders freut mich, dass "Suchwerk" eine Systemsoftware ist, die mit dem .NET Framework entwickelt wurde.

Posted by ralfw | 2 comment(s)
More Posts