Archives

Archives / 2005
  • Folding the informational space - or: How Pile lets you transcend hierarchies of data

    After some philosophical digressions now on to "More matter, less art" as Hamlet´s mother says. Lets step up the ladder of abstraction and look at how to put the elementary particle, those associations, to some tangible use. How about implementing a little full text search application? That´s what I did to check my understanding of Pile. Although there exists such an application at pileworks.org, I thought it would help me more to try to build it myself instead of just studying existing code.

  • Data is just an abstraction of associations - or: A philosophical interlude

    In my previouse posting I´ve described the Pile view of the "world of data": focus on associations, not data. Todays I wanted to put meat on this theoretical skelleton and show you code I wrote. But first let me insert a little philosophical deviation. It might help to distinguish Pile from other (more or less novel) approaches to "data management" - and either draw more fire from the RDBMS camp or drive them off altogether :-) We´ll see...

  • Beyond WinFS - Let associations rule! - or: An introduction to Pile for mere mortals

    Yesterday I wrote about why I think WinFS is a step forward - but in the end will not really solve the problem of the penned up data. WinFS´ data units (the objects, e.g. contacts, appointments and what not) simply are still too coarse grained. And even though WinFS puts relations between data units (or entities) more into the center of the stage, it is still bound by the general world view of "data is most important". However, as long as data is in the focus, associations between data are second. And as long as associations are second, we´ll have a hard time to map the multi contextuality of real world entities to software.

  • Gute Laune durch 'Computerbücher ins Altpapier'

    Es ist so angenehm und doch so selten, dass ich auf einen Text im Web stoße, der mir einfach so spontan gute Laune macht. Aber jetzt ist es doch wieder passiert. Peter Braun hat seinem Unmut über den Zustand der Computer-Fachliteratur in einem Kolumnenbeitrag mit dem Titel 'Computerbücher ins Altpapier' im Dr. Web Magazin Luft gemacht. Und das ebenso direkt wie herzerfrischend.

  • Storing Relations Instead of Data - Just a cool idea or a revolutionary new data storage paradigm?

    Well, this idea of storing relations instead of data sounded very interesting - even though I did not fully understand it. And I guess, I still do not fully understand it - but Peter Krieg got me hooked. I´m always open for unusual cool new ideas, and this seems to be one. Later that day he did a keynote titled "When Powerpoint meets Doom" where he tried to explain the idea to a larger audience. Reactions where mixed, but I immediately ran out to get his book "Die paranoide Maschine - Computer zwischen Wahn und Sinn". (Sorry, this book is only available in German; but nevertheless I can recommend it for his quite refreshing view on what computers are and how they need to change, if we want them to become more "intelligent".)

  • The discourses go on: Ingo Rammer and I talk about designing interfaces between services

    Listening to a discussion often offers a new view on a subject, because hearing contrasting thoughts next to each other sparks your own thoughts in a different way than reading a just an article explaining some subject. That´s why thinktecture now publishes its second email discourse on an software architectural topic.

  • Meeting a "hero" of my youth: Prof. Niklaus Wirth

    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.

  • A new slant on Desktop Search: search engine and disk drive united

    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.

  • Warum ist Wikipedia ein Erfolg? - Gedanken zur "Funktionsweise" von Kollaborationsprojekten im Internet

    Angeregt durch eine Diskussion in einer dotnetpro-Newsgroup hier ein Versuch der Erklärung, warum Open Source und Wikipedia und einige andere Projekte funktionieren. Denn nur wenn man eine Idee davon hat, warum eine Sache funktioniert, kann man abschätzen, ob eine andere, vermeintlich ähnliche Sache auch funktionieren könnte.
     
    Ich schmeiße mal Folgendes in einen Topf:
     
    -Wikipedia - Ein online Lexikon, bei dem jeder Beitrag von jedem Interessierten eingestellt und modifiziert werden kann.
    -Open Source im Web - Softwareprojekte, bei denen im Grunde auch jeder Kundige einen Beitrag leisten kann, indem er die frei verfügbaren Sourcen ergänzt und modifiziert. (Dass das nur eine Untermenge aller OS Projekte ist, ist mir klar.)
    -Napster, Gnutella & Co - Musiktauschbörsen, bei denen jeder Musikdateien anbieten und runterladen kann.
    -Newsgroups - Diskussionsforen, bei denen jeder Fragen einstellen und beantworten kann.
    -Projekt Gutenberg - Sammlung copyright freier Texte
     
    Alle diese Projekte wurden durch das Internet ermöglicht. Denn nur das Internet erlaubt die dafür nötige einfache Publikation (Erzeugung von Inhalt, Veröffentlichung, einfache Aktualisierung und einfachen Zugang). Die Produktions und Verteilungshürde traditioneller Medien ist mit dem Internet aus dem Weg geräumt. Damit haben Verlage (und Druckereien) einen Teil ihrer Existenzgrundlage verloren.
     
    Aber nicht nur ist die Produktion und Verteilung an sich mit dem Internet plötzlich einfach, darüber hinaus können die Publikationen ständig im Fluss bleiben. Dieselbe Publikation kann dauernder Revision unterliegen. Wenn dagegen ein Buch erstmal gedruckt ist, ist es unveränderlich.
     
    Diese grundsätzliche Modifizierbarkeit und die beliebige Granularität (von Softwareprojekte mit tausenden Dateienü über eBooks oder Musikstücke mit einer Datei bis zu einzelnen Sätzen innerhalb einer HTML-Seite) der Änderungen machen Kollaborationsprojekte wie die obigen möglich. Es können überhaupt jetzt erst viele zusammen kommen, um an einem großen Ganzen zu arbeiten.
     
    Das ist wie mit den kleinen Steinpyramiden, die man beim Wandern in den Bergen immer mal wieder sieht: jeder, der vorbeikommt, kann einen Stein dazu legen, wenn er will. Über die Zeit wächst dann ein Haufen, der anderen anzeigt, dass sie noch auf dem richtigen Weg sind. Viele kleine Beiträge formen also zusammen etwas Größeres und zudem nützliches. (Schon hierbei ist ein Charakteristikum zu sehen, dass für alle solche Projekte gilt: nur wenige tragen dazu bei, aber viele, viele nutzen es. Die Zahl derjenigen, die ein Musikstück über Napster herunterladen oder eine OS Software nutzen oder einen Wikipedia-Beitrag lesen ist immer um 10erpotenzen größer als die derjenigen, die ein Musikstück bereitstellen, eine Änderung an OS Software machen oder einen Beitrag schreiben. Dieses "free riding" kann ein Problem werden, wenn die Zahl der Produzenten unter einen kritischen Prozentsatz fällt. Dann "lebt" das Gesamtprodukt nicht genügend und bleibt/wird unattraktiv.)
     
    Zwischenstand:
    -Wikipedia, Napster, viele OS Projekte im Web (aber nicht alle) und Newsgroups sind Produkte (weil sie produziert werden, nicht weil sie Geld kosten), die nur durch das Internet möglich sind.
    -Alle diese Produkte sind Kollaborationsprojekte, zu denen immer viel weniger Produzenten gehören im Verhältnis zu den Nutzern.
    -Alle diese Produkte sind kostenlos für die Nutzer.
     
    Warum haben manche dieser Produkte so großen Erfolg und manche nicht? Das hängt wohl von einer kritischen Menge an Nutzen ab. Und die wiederum hängt von einer kritischen Masse an Nutzern (und Aufmerksamkeit) ab. Wikipedia war ja nicht immer erfolgreich, sondern hat klein angefangen. Aber aus irgendwelchen Gründen bot Wikipedia irgendwann soviel Nutzen, dass immer mehr Leute es wertvoll und empfehlenswert fanden. Damit stieg dann auch ganz natürlich die Zahl der Kontributoren, die mit ihrer Arbeit den Nutzen erhöht haben usw. usf. Eine positive Spirale.
     
    Nicht jedes OS Projekt kommt an diesen Punkt, wo das Interesse einen Sprung macht und eine positive Spirale aus "mehr Beiträge - mehr Interesse - noch mehr Beiträge - noch mehr Interesse" in Gang gesetzt wird.
     
    Die Newsgroups der dotnetpro sind dafür ein Beispiel. Sie haben keine kritische Masse an Beiträgen, also interessieren sich die Leser nicht sehr dafür, also steigt die Menge der Beiträge auch nicht stark. Um das zu ändern, müsste wahrscheinlich großer Aufwand getrieben werden. Aber es könnte auch zufällig einfach passieren. Warum die kritische Masse sich nach Erscheinen der dotnetpro nicht in den ersten Monaten eingestellt hat...? Keine Ahnung. Die Lebendigkeit der NGs der BasicPro konnte jedenfalls nicht einfach übernommen werden.
     
    Aber zurück zu Wikipedia & Co:
     
    Die Masterfrage lautet, warum überhaupt für diese kostenlosen Produkte Beiträge kostenlos produziert werden?
     
    Warum stellt jmd ein Musikstück bei Napster zur Verfügung? Warum schreibt jmd eine Antwort auf eine Frage in einer NG? Warum korrigiert jmd. einen Beitrag in Wikipedia?
     
    a. Der erste Teil der Antwort muss lauten: weil diese Produzenten den Wert des Produktes erhalten wollen. Produzenten sind also zunächst einmal Nutzer. So wie ein Bauer sein Feld bestellt, so "beackern" Produzenten ihre Kollaborationsprojekte. Sie wissen, nur wenn gesät wird, kann man am Ende auch ernten. Insofern handeln sie eigennützig und nicht altruistisch.
     
    b. Über die Erhaltung des Wertes eines Produktes hinaus treibt Produzenten aber sicher auch oft an, dass sie sich mit einem Beitrag ein gutes Gefühl verschaffen können. Sie freuen sich, wenn sie merken, dass ihr Beitrag wertgeschätzt wird. Insofern handeln sie eigennützig und auch nicht altruistisch.
     
    c. Und nicht zuletzt empfinden Produzenten bestimmt auch oft eine intrinsische Freude beim beitragen. Es macht ihnen unabhängig vom Gesamtnutzen und eventueller Ehre einfach Spaß, etwas zu produzieren. Sie tüfteln gern oder schreiben gern oder beschäftigen sich gern mit einem Thema. Auch in dieser Hinsicht handeln Produzenten eigennützig und nicht altruistisch.
     
    d. Für einige Projekte mag dann noch eine ideologische Komponente hinzukommen. Die Produzenten wollen mit ihren Beiträge eine Idee unterstützen. Der Wert des Produktes liegt dann nicht nur in seinem konkreten Nutzen, sondern in seiner puren Existenz als Ausdruck der Idee. Solche Ideen sind "Nur mit Open Source kann sichere Software produziert werden" oder "Nieder mit dem Kartell der Musikindustrie" oder "Informationen muss für alle immer kostenlos zugänglich sein, damit die Welt ein besserer Ort wird". Ob Beiträge, wenn man sie auf dieser Ebene betrachtet, altruistisch sind oder auch letztlich nur eigennützig, mag ich an dieser Stelle nicht entscheiden. Darüber lässt sich trefflich philosophieren.
     
    Alles in allem sind das plausible Gründe, würde ich sagen, warum Menschen an solchen Kollaborationsprojekten teilnehmen. Wikipedia & Co wohnt also keine Magie inne. Vielmehr sind Wikipedia & Co nur neue Betätigungsfelder - möglich gemacht durch das Internet - für Verhalten, dass schon immer da war:
     
    zu a.: Peter ist Mitglied bei der Freiwilligen Feuerwehr, weil er versteht, dass der Nutzen (gelöschte Brände) für ihn (und alle anderen) nur erhalten bleibt, wenn er sich an seiner Produktion beteiligt. Das Gleiche gilt für Bärbel, wenn Sie alljährlich mitmacht beim Frühjahrsputz des Tennisgeländes; denn nur so bleibt der Verein attraktiv und es macht Spaß, im Sommer auf einem schönen Platz zu spielen.
     
    zu b.: Monika geht wöchentlich einmal auf die Kinderstation im Krankenhaus und liest dort vor. Es erfüllt sie mit Freude, die fröhlichen Kindergesichter bei ihren Lesungen zu sehen. Fred ist Vorsitzender des lokalen Kunstvereins. Er organisiert Ausstellungen und ist stolz, wenn anschließend die Mitglieder zu ihm kommen und ihm für seine gute Arbeit danken.
     
    zu c.: Monika und Fred und auch Peter macht ihre Arbeit einfach auch Spaß. Peter liebt den Umgang mit dem Feuerwehrgerät und den Adrenalinstoß, wenn es zum Einsatz geht (es sei denn, der Einsatz ist nachts um 3h). Nur Bärbel putzt den Tennisplatz nicht wirklich gerne.
     
    zu d.: Monika ist natürlich auch der Ansicht, dass die Welt ein besserer Ort ist, wenn Kinder lachen und weniger einsam im Krankenhaus sind. Und Rolf engagiert sich für Greenpeace und steht bei Regen am Infotisch in der Fußgängerzone. Er ist fest davon überzeugt, dass die Welt verändert werden muss, damit sie eine Zukunft hat. Er hat keinen unmittelbaren Nutzen von seiner Arbeit, die unmittelbare Anerkennung fehlt meist auch (denn die meisten Passanten ignorieren ihn), Spaß macht es keinen, im Regen zu stehen und immer wieder mit Betonköpfen zu diskutieren, die nicht verstehen, dass Atomkraft nie wieder kommen darf. Aber er weiß, er arbeitet für ein wichtiges Großes Ganzes.
     
    Also: Wikipedia & Co sind zwar neue Betätigungsfelder - aber die Motivationen sind uralt.
     
    Für eine Beurteilung der Erfolgsaussichten neuer Kollaborationsprojekte stellt sich nun die Frage, was all diese Produkte gemeinsam haben?
    Sie haben alle einen Nutzen, sie erfüllen alle ein sachliches Bedürfnis und bieten darüber hinaus ein Betätigungsfeld für Menschen, die sich durch a., b., c. oder d. motiviert fühlen.
     
    Aber das reicht noch nicht. Das erklärt nämlich noch nicht, warum Menschen sich dort ohne monetäre Vergütung einbringen.
     
    Warum tun Menschen das? War verschenken sie ihre Leistung?
     
    Die Antwort ist einfach: Weil niemand ihre Leistung bezahlen würde. Niemand kann oder will ihre Leistung kaufen. Dafür gibt es viele Gründe, z.B.
     
    -Es ist kein Geld vorhanden. (Die Gemeinde kann sich eine Berufsfeuerwehr nicht leisten. Das Krankenhaus kann sich eine Vorleserin nicht leisten.)
    -Unklarheit bzgl. der Kompetenz des Produzenten. (Ist Stefan kompetent, etwas über das Thema xyz zu sagen? Selbst wenn er es objektiv nicht ist, sondern nur meint es zu sein, kann er einen Beitrag zu Wikipedia leisten - obwohl ihn die Brockhaus-Redaktion abgelehnt hätte.)
    -Unklarheit über das Potenzial eines Produktes. (Ist Musik im Internet erfolgsversprechend? Wie groß ist das Potenzial im Vergleich zu CDs? Wenn das unsicher ist, lassen Musikverlage die Finger davon  - aber Enthusiasten können durch Investition von Zeit trotzdem dieses Potenzial ausloten.)
    -Der Wert eines Beitrags ist klein und es existiert kein Bezahlungsmodell dafür. (Wie sollte die dotnetpro einen Newsgroupsbeitrag vergüten? Ist er das auch wirklich wert?)
     
    Den Erfolg der kostenlosen Kollaborationsprodukte im Internet macht also aus, dass es keine Alternative zu ihnen gibt. Ich kann mein Wissen zum Thema xyz niemandem verkaufen - und antworte daher in der NG oder schreibe einen Wikipedia-Beitrag (denn ich bin ja durch a., b. oder c. oder gar d. motiviert). Ich arbeite tagsüber mit Clipper an Geschäftsanwendungen, weil das lukrativ ist - aber abends kann ich meine Kompetenz als C++ Programmierer in einem Open Source Projekt einbringen. Ich stelle gerippte Musik ins Web, weil ich es der Musikindustrie zeigen will - eine Alternative habe ich nicht, denn für ungesetzliche Handlungen gibt es eigentlich kein Honorar.
     
    Kostenlose Beiträge sind kostenlos, weil ihre Produzenten - aus welchen Gründen auch immer, subjektiv oder objektiv - keine Alternative haben. Sie sind stark motiviert, kennen aber keinen Abnehmer für ihre Motivation, der ihre Arbeit auch noch vergüten würde. Denn selbstverständlich wäre es jedem Produzenten lieber, er würde für seinen Aufwand Geld bekommen. Denn diese Form der Anerkennung kann er an anderer Stelle gegen etwa anderes eintauschen, z.B. eine Stereoanlage oder einen Urlaub oder ein Buch.
     
    (Eine besondere Gruppe stellen jedoch Produzenten dar, die durch d. motiviert sind. Bei ihnen mag es "gegen die Ehre" verstoßen, Geld für ihre Leistung zu empfangen. Oder echte Bezahlung verstieße sogar gegen die Ideologie, die hinter dem Produkt steht.)
     
    Was bedeutet das für zukünftige Kollaborationsprojekte?
     
    Ich denke, es haben nur kostenlose Kollaborationsprojekte eine Chance, die entweder...
     
    -vor allem von Menschen getrieben werden, die ideologisch motiviert sind (und deren Ideologie am besten auch noch anti-monetär ist)
     
    -und/oder deren Beiträge nur schwer oder gar nicht an anderer Stelle gegen Bezahlung geleistet werden können.

  • Moving to SOA is like switching from Newtonian physics to relativistic physics

    I just read an article ("Dealing with the 'Melted Cheese Effect'" by Maarten Mullender in collaboration with my fellow thinktect Christian Weyer) on how to prepare for change in SOA architectures. Although the article itself does not contain many new insights - however it´s the start of an interesting looking series - of course it tackles an important problem: How can you replace the moving parts in a machine running 24x7? We´ll see, what Maarten has to say about that in his future postings.

  • Bücherflohmarkt - ADO.NET, Extreme Programming und mehr

    Meine Fachbücherregale haben es einfach nicht mehr gepackt. Als es auch mit zweireihiger Anordnung und Übereinanderlegen nicht mehr ging, musste ich jetzt schweren Herzens aussortieren. Hier eine erste Auswahl der aussortierten Bücher. Angegeben ist der Preis und die Rubrik, wo sie bei Amazon als second hand Titel zu finden sind:

  • Kennen Sie VauBekien? Wenn Sie VB-Entwickler sind, dann ist das Land eine Reise wert...

    Endlich ist es soweit: Uwe Baumann von Microsoft und ich haben unsere langersehnte Bildungsreise in das ferne und bald so nahe Vaubekien angetreten.
    Wir wollen für Sie erkunden, was Visual Basic .NET als Programmiersprache zu bieten hat. Was ist anders im Vergleich zu VB6?
    Und vor allem: Wie wird VB2005 mit dem .NET Framework 2.0 in Visual Studio 2005 aussehen?

  • Software Cells #E: Splitting the General Software Architecture Framework from the Prescriptive Model and Coming to Terms with UML

    After I did my previous posting on the "Big Picture", I felt qualms as to whether my vision was a little bit too grant. Does the world really need my view on software? Isn´t there already UML covering almost everything you need to know in terms of modelling software? After having slept bad for a couple of nights ;-) the following answer came to me: Yes, trying to stuff everything into just one model is too much. And I´m not trying to replace UML; in fact UML can be used to express my Software Cells´ concepts.

  • Software Cells #A: Embracing Infrastructure

    At the beginning of my journey into Software Cells was an uneasyness about the term "application". It seemed, developers were not all too clear about it. Now, as it turns out, I feel the same about "infrastructure". My impression is, in software projects distinguish not enough between problem domain and infrastructure. By that I don´t mean, nobody takes into account a HTTP like IIS is needed to host the code of an intranet application. And of course all developers are aware they have to rely on an OS or even some other runtime.

  • Previous Publications / Bisherige Publikationen

    A (yet incomplete) list of my publications until April/May 2005. All other publications will be listet as individual posting.

  • Software Cells #8: Of Customer Problem Domain and Infrastructure - Mind the Dimension

    After I put Software Cells into perspective with other architectural models, several people approached me with the question "Now, then, what are Software Cells for?" followed with some problem scenario. And I can tell you, those scenarios made me sweat for a while ;-) But I want to spare you the details and focus on my findings while trying to put Software Cells to good use on those problems.

  • First Impression: Meeting Google´s Craig Silverstein

    Lately there has been some discussion on if and how Google might be a threat to Microsoft. Bill Gates even said "[they] kicked our butts". Right now I´m not interested in the details of where exactly Microsoft feels hurt and if Google can do substantial damage to Microsoft´s position. Rather, what now surprises me is the surprise everybody felt when Google came out with desktop search functionality and Google maps etc. I´m surprised about this, because I just met with Craig Silverstein, Google´s director of technology and first employee of Google - or Google´s man behind the curtain (as some call him).

  • Software Cells #5: A journey through the software universe from single statement to Software Societies

    So, where are we with Software Cells? In my last posting I talked about Contract First design, and I guess, we now need to tie together the various bits and pieces.
    We need to talk about how to connect Software Cells. For that it´s beneficial, to put Software Cells into perspective. So let´s first vary the scale of our software map. Let´s get on a journey thru the "software universe"! What can we see, if we look thru a microsope? What can we see, if you look thru a telescope?

  • Software Cells #4: Contracts everywhere

    In my last posting I drilled down into the details of a Software Cells. We looked at the substructures of the Core, the Adapters and the Portals. But altough I think, those substructures make much sense and should be taken as a guidance when designing an Application, I´m very open for deviations and different ideas. Should a User Portal always implement the MVC pattern? I´d say, yes, try to map your problem to MVC, start out with MVC - but if it does not match your specific problem, then do the User Portal some other way. Most important is to see the User Portal as a separate entity from Core, Adapters and Application Portal. The same goes for other structures of a Software Cell.

  • Proposal for a more precise definition of the term "application"

    I´ve given the question I posed "What is an application?" some more thought. Martin Lercher made a good point, when he wrote "deployed set of executable code, infrastructure and data such that this set is minimal" for a given purpose. And Ingo Rammer surely explains it like I would have some time ago by saying, an application is "whatever is contained in one single Visual Studio SLN file." Microsoft surely likes him for that, too :-) But still... there remains a feeling of uneasyness in me with those explanations. For one, I strongly believe, non-trivial applications (or software based solutions) should not be developed within a single VS solution. And then, Ingo says: "A certain solution - or system - however might easily consist of several applications." That means, when I set out to solve a problem and tell the customer "Hey, I´m gonna develop a nice application for you." I might be wrong? I might end up producing several applications? If that´s the case - and I believe it is - then we should define the term "application" much stricter.

  • .NET lacks support for Microkernel architectures

    In yesterdays post I bemoaned VS.NET constraining how we develop software. Now, that I´ve thought about this a little bit more, I came to the conclusion, what I´m looking for is support for Microkernel architectures.

    Microkernels (although primarily known from the OS world) are a general architecture pattern. They allow a software to be extended without recompilation/relinking.

    However, the CLR primarily supports static binding with dynamic loading. Assemblies get dynamically loaded when needed, but you need to statically reference them from your project.

    Of course, the CLR also allows dynamic binding by loading assemblies by hand and using Activator.CreateInstance(). But these features are not tight together into a dedicated infrastructure to set up Microkernel architectures. For example there is no concept of a "registry" for implementations of interfaces by which you could instanciate implementations indirectly thus decoupling client and service.

    To reach new levels in parallel/independent development and decoupling of components, though, we must move to "Contract First" design for intra-application "boundaries". (The SOA world has recognized this already for inter-application boundaries. See Christian Weyer´s postings on his tool for Web Service Contract First programming as an example.) Currently, the services of a component are (mostly) implicitly described/determined by its implementation, the actual assembly we are referencing.

    But what we need, is an independet explicit description (a formal interface definition) against which we programm. And which only at runtime is dynamically linked to an implementation.

    This of course entails changes in how we test/integrate our applications. But it also allows for many improvements in the process of application development from design to maintenance.

  • VS.NET constrains the application development process

    Have you ever pondered the current practice of referencing assemblies from within a VS.NET project? I haven´t much until recently. I just took this way of linking to code for granted. It´s how we do dynamic linking today. Great!

    Or isn´t it?

    No, I don´t think it´s that great. I think it limits our thinking on how we develop software. It is just one way to link components together at runtime.

    What´s limiting in referencing assemblies is that it binds the component under development to a certain implementation of other components. Isn´t that, what we want, you might ask? Yes, sure, that´s what we need and want for components that already exist (lets call them libraries) while we develop our own component.

    When I work on my component, I need the services of libraries like the .NET Fx DLLs or the assembly of my favorite DataGrid. Those libraries exist prior to my project, their interfaces are set, their implementation is complete. So, sure, I should be able to include their services into my component by setting a reference to them, thereby importing not only their meta data, but also later on during runtim loading concrete assemblies.

    But when I want to do real component based development (CBD), then I consequentially want to divide my own application up into several modules/components. These components will be developed by several programmers in parallel. This will often lead to situations where a developer working on component A needs component B - which is still under development. But this scenario is not well supported by VS.NET or the .NET Fx.

    I cannot reference an assembly that does not exist yet. So what should I do in my project? There are several ways out of this dilemma. The one chosen most often is not to develop components at all. Next comes building huge solutions with many, many projects in them. Both ways sooner or later lead to tight coupling between components and thus thwart the vision of CBD.

    But there is a third way: I could define interfaces for components first and put them in a separate assembly. This assembly I could readly reference in my component A project. I´d then know how to use component B thru its interface IB. Great!

    Or isn´t it?

    Yes, a very good idea - but no well supported by VS.NET and the .NET Fx. Because this way entails you need to discover the implementation of the interfaces you bind to during runtime. Currently there is no way to accomplish that. You can´t pass an interface type to Activator.CreateInstance() and ask it to instanciate an unknown class implementing that interface.

    But that´s what´s necessary if you truely want to decouple a client component A from the implementation of some interface IB. Because during development of A you might use mock-up component BMockup which implements IB. But later on a client´s system BMockup has to be replaced by BFinal. Or maybe you want to try different implementations of IB, e.g. BStrategy1 and BStrategy2. How do you bind to those different implementations during development? Not at all, because they don´t exist.

    That´s what I mean, when I state, VS.NET contrains the development process. VS.NET and the .NET Fx are targeted towards developing applications where all implementations are well known during development time. It supports well bottom-up development. But it does not support well parallel, independet development. We still need to come up with additional infrastructure to overcome these limitations. We need to build our own Contract First tools for intra application interfaces between components.

  • Microsoft unveils new refactoring tool: CSCop

    According to the German .NET developer magazine dotnetpro, Microsoft has shown a prototype of its new CSCop refactoring tool at CeBit 2005 (read full article here (in German)).

    CSCop stands for Code Smell Cop and is developed by Microsoft Research. CSCop analyses .NET code (C#, VB.NET, and also IL) and - based on modern AI technologies like Bayesian networks - assesses if it needs refactoring.

    This alone is already revolutionary since Kent Beck and Martin Fowler in Fowler`s book "Refactoring" stated, they could not give any hard criteria to determine the "unstructuredness" of code.

    But Microsoft has not only solved this problem through merciless analysis of its own code base. In addition to this, Microsoft developed a completely new olfactoric user interface! CSCop flags code which needs refactoring by producing smells.

    Kent Beck coined the term "code smell" and Microsoft took this to heart to develop a user interface orthogonal to the common visual GUI. When viewing "bad code" in VS.NET 2005 with the CSCop stick attached to the USB port, the developer will soon smell a unique stench characterizing the kind of "misstructure" he´s looking at.

    According to Microsoft´s Steve Eson (lead developer of CSCop) it was quite difficult to find a set of "base smells" to mix all the necessary nuances of code smell from. Another challenge was to find a way to make the smells not too "sticky" but nonetheless be able to provide a characteristic smell for a whole application. CSCop currently is in beta 1.

    We´ll see, if developers will embrace a tool which makes code structure quality so obvious to anybody entering their cubicles.

  • On the Future of Software Development #4 – The need for specialization

    In my previous postings I talked about two perceptions: 1. I don´t see any real signs that make our trade of software development singular and hard to compare to other industries. 2. The rate of change in our industry has increased very much in the past 10 to 20 years and makes it impossible to keep up our attitude of allround programmers.

  • On the Future of Software Development #1

    Motivated by I a conversation with Steve Cook, one of the fathers of the Software Factory concept ([1], [2]), I´d like to share some thoughts with you about the future of software development. However, contrary to what you might be thinking now, I don´t want to speculate much about the next versions of the .NET Framework or how virtual shared memory could help to solve interop problems or the benefits of Intentional Programming.

  • Neuer dotnetpro.tv Programmiertipp online: Textimport mit RegEx leicht gemacht

    Wer noch ein wenig am Wiedereinstieg in die Arbeit zum Jahresanfang zu knabbern hat, für den gibt es jetzt ein jahreszeitlich stimmungsvolles Video aus der Serie dotnetpro.tv Tipp.



    Dieses Mal löst die Sekretärin des Projektleiters das Problem eines Datenimports aus Textdateien.
    Wo ihr Schatzi sich mit String-Funktionen die Zähne ausbeißt, kann sie durch den Einsatz von Regulären Ausdrücken kein Problem entdecken.
    Wie das sein kann? Sehen Sie selbst bei der dotnetpro - und den Quellcode des Beispiels können Sie auch herunterladen.

    Ich wünsche allen Freunden des .NET Framework ein frohes, neues Jahr!

    Lassen Sie mich gern wieder wissen, wie Ihnen dotnetpro.tv gefallen hat.
    Demnächst kommt auch das nächste Interview auf der dotnetpro Heft-CD heraus.