Mittwoch, August 30, 2006

Firmenkultur

Michael Moritz (Silicon Valley VC) sagt: “Most people think that IPOs are the climax of a company’s story, but in fact they’re just the first chapter.” He went on to say that a company’s genetic code gets set in its first eighteen months. “After that,” he said, “companies are impossible to change; their cultures are hardwired in. If the DNA is right, you’re golden. If not, you’re screwed.”

Dienstag, August 29, 2006

The Graphing Calculator Story

Unglaubliche Geschichte über zwei Typen, die bei Apple für Apple über Monate ein Maulwurf-Projekt durchziehen, ohne dort angestellt zu sein. Hier das Video dazu.

Montag, August 28, 2006

Offtopic: Der Frosch

"Schmeißt Du einen Frosch in kochendes Wasser, springt er wieder hinaus, um dem Tod zu entrinnen. Steckst Du ihn aber in lauwarmes Wasser und erhitzt es, wird er langsam zu Tode gekocht. Meiner Ansicht nach steckt Israel in dieser Situation."
(Ziv Koren, Photojournalist aus Israel, im Film "More than 1000 words")

Memory-Prediction Framework-Seite

Für später: Eine immens populäre Seite (75 Hits bisher) zum Thema Memory-Prediction Framework. Hab's noch nicht gelesen.

Mittwoch, August 23, 2006

Einstellungsgespräche

Das hier ist ein ziemlich cooles Argument gegen Puzzle-Fragen in Einstellungstests. Werde ich mal bei meinem Arbeitgeber vorschlagen...

Schlechter ist besser, und anderes

Ich bin mal wieder in die Tiefen der Wikipedia abgeschweift - nur weil mich jemand aus London nach Dateisystemen gefragt hat.
Da wäre Plan 9 from Bell Labs. Ein Betriebssystem, das als Research-Nachfolger von Unix konzipiert wurde (Wie stellt man einen Forschungsantrag für so ein Projekt, das über 15 Jahre gelaufen ist und wahrscheinlich keinen Cent eingebracht hat?) wurde geschrieben von einigen der illustresten Köpfe im Unix-Bereich: Rob Pike (Tausendsassa, z.B. Erfinder des ersten Window-Managers, von UTF-8, oder von Sawzall), Ken Thompson (hat als erster reguläre Ausdrücke implementiert), Dennis Ritchie, Brian Kernigham (Erfinder von C), Bjarne Stroustrup (Erfinder C++), Tom Duff ("Duff's Device", heute bei Pixar), Douglass McIlroy (Erfinder Unix-Pipes). Mit Sicherheit also keine Co-Autoren des Unix Haters Handbook.
Was hat das mit Dateisystemen zu tun? Plan 9 hat das Konzept des Unix-Dateisystems ins Extrem getrieben - alles wird zur Datei: Drucker, Prozesse, andere Rechner, Sockets, Windows. Spezielle Arten von Links konnten verschiedene Quellen in ein Verzeichnis mounten. So werden lokale und verteilt laufende Prozesse transparent.
Link 2 wäre Worse is Better, der "New Jersey Style" des Programmierens. Einfachkeit sollte das wichtigste Ziel der Implementation sein. Einfachkeit der Implementierung ist wichtiger als Einfachkeit der Schnittstelle. Korrektheit steht an zweiter Stelle, Konsistenz an dritter, und Vollständigkeit an vierter. Das mag manchmal nicht immer korrekten, zu inkonsistenten, und am wenigsten vollständigen Lösungen führen, die aber dafür einfach sind. Dem kann ich mittlerweile nur zustimmen. Lucene ist für mich ein Beispiel dafür, wie man ein komplexes Problem auf einfachste Art lösen kann.
Link 3: Die Seite über die Unix Design-Philosophie. Bekannte Namen von oben.

Dienstag, August 22, 2006

Hackers & Painters

Hätte ich ein paar Tage Zeit, würde ich jetzt Hackers & Painters
lesen, ein Buch über Programmierer und Maler, von einem, der Malen studiert hat und jetzt programmiert. Das klingt interessant genug. Danke für den Hinweis, Basti...

Montag, August 21, 2006

Local Grammar Research Programm

Ende 2004 habe ich ein Proposal geschrieben, das ich nicht genug verbreitet habe - sonst wären wir jetzt schon weiter.

FOHLN Meeting

Vorletzte Woche gab es in Seattle ein (noch: bescheidenes) FOHLN Meeting FOHLN meeting ("Friends of Hadoop, Lucene, and Nutch").
Interessant dabei:
- Mike C. arbeitet an einer Open Source Implementierung von BigTable
- Technorati benützt Lucene als Suchmaschine (viele Updates)
- Monster benützt es auch und kommt auf bis zu 500 qps.

Donnerstag, August 17, 2006

Weltkarte des Glücks

Laut einer von der englischen Universität Leicester erstellte Weltkarte des Glücks sind die Dänen weltweit am glücklichsten, gefolgt von der Schweiz und Österreich. Deutschland kam nur auf Platz 35.
Was aber, hätte man Bayern extra bewertet? Ich glaube nicht, dass bei dem Gedanken an verschneite Gipfel, Biergärten, weiß-blauem Himmel, den reschen Madeln und einer gstandenen Mass ein anderer als der erste Platz auch nur denkbar gewesen wäre. Die nebligen Bremer, arbeitslosen Mecklenburger und spießigen Castrop-Rauxler haben es uns vermiest. Ganz bestimmt.

Montag, August 14, 2006

Bob Jenkin's Website - Hash und Regression Tests

Bob Jenkins hat eine der besten Ressourcen zum Thema Hash-Funktionen im Netz.
Darüber hinaus hat er "jenny" geschrieben, ein sehr interessantes Tool, um das Schreiben von Regression Tests zu vereinfachen.
(Update) Hier ist noch eine Website von Thomas Wang.

Steven Chu's Talk

Ola hat auf ihrer Seite auf ein außergewöhnliches Interview mit einem Physik-Nobelpreisträger verlinkt, das ich mir mittlerweile mehrmals angeschaut habe.
Einen Ausschnitt daraus finde ich besonders bemerkenswert: Die Beschreibung der Arbeitsumgebung an den Bell Labs Ende der 70er, Anfang der 80er Jahre. Klingt fast wie eine Beschreibung der Zustände am CIS:

So Berkeley wanted me as a professor, so I accepted, but then they did something unusual, they said, "you can start your group, or, because you've spent so much time here, you also have the opportunity to go somewhere else for a year or two." (...) I decided to go to Bell Laboratories which at that time (1978) was one of the best industrial labs. At that time, they allowed a small fraction of us, 50, 60, to do whatever we wanted.

So, I joined Bell Labs, and my department head said, "Steve, you can do whatever you want, it doesn't even have to be physics. (...) And, by the way, don’t do anything immediately. Spend six months, talk to the people around the lab, and keep an open mind.”

This was a devastating experience for me [laughs], the freedom to do whatever you want, and being told "don’t do what you think you wanna do now", so I spent some time exploring (...) I really felt pressure, because they said, “we really expect great things out of you”.

I don’t want to hear that… (laughs). It’s much nicer to have a small problem that you work on and it’s really cozy… but it did have a real influence me, because it got me into that mode of going and talking to people, outside of my field. And, when I finally started doing things at Bell Laboratories, I started first in some area that was condensed meta physics, where I knew nothing about, but using techniques from my old field, atomic physics, and laser physics.

But it got me into the mode of “I got this crazy idea”, and going to a collegue at Bell Labs and to say “How does this sound”, and they would say, “this is the most stupid thing I’ve heard” (laughs), or “maybe you have something here.”. And it really set the tone for the rest of my life, collaborating with people outside of the area of my expertise. So, it was a wonderful experience.

I must also say, in the years I was there, 78 to 87, there was an economic slump in the mid 70s. Bell Labs had just started hiring people, and there were a group of us, maybe a few dozen, and we were young, we were all put in this position, “do something important, here are the resources of the American Telephone and Telegraph System, we expect you to do something wonderful.” We were there at nights, we were there at weekends, (...) we would party together, and I think, something in the order of 5 or 6 of us got Nobel prices. Over a dozen are in the National Academy of Sciences.

We all were kind of growing up together. And then we had these really wonderful senior scientists there as well. It was this remarkable period of time were everything was exciting and then something would come along that was not in my field, and I would say “wow, this is really interesting”, and we discussed it. And then, people would jump fields, or jump areas, because there was this feeling of excitement of the science. And even though we were doing this (points right) it was alright to move (points left), and it wouldn’t be considered failure because something even more exciting came along, either from the laboratory, or from a collegue’s lab, or from the rest of the world.

-- “So, a positive freedom, freedom in the best sense, but in an environment where it could lead to new levels of understanding.”

-- Yes, a positive, electric athmosphere. You would go to lunch rooms, everybody would go there around noon time, everybody would sit around these big round tables, and would go, “ok, what’s new?”. So people would be seen socializing, but talk a lot about science. And a lot of ideas were invented at those lunchroom tables. So, again it was this real community. So, it was kind of magic. And people close to science, people who knew the areas that Bell Labs was touching, knew that there was something magical going on at that time.

Newsweek - World's Most Global Universities

Auf der Liste von Newsweek befinden sich die üblichen Verdächtigen: Stanford, Harvard, 6 weitere US-Universitäten, sowie Oxford und Cambridge. Danach fünf weitere US-Universitäten, danach Tokyo.

Ich kann mir nicht helfen, aber das ist ein Armutszeugnis für das europäische Bildungssystem...

Und ich stelle mir jeden Tag die Frage, ob dies einfach eine Konsequenz der Entwicklungen der letzten 60, 70 Jahre ist, in denen Englisch zur Wissenschaftssprache wurde, unausweichlich und im Wesentlichen von großen Bewegungen beeinflusst wie der Migration von Wissenschaftlern in die USA in und nach dem zweiten Weltkrieg, der Entwicklung der amerikanischen Leitkultur, der großen monetären Transfers der US-Verteidigungspolitik, großer Wissenschaftsprogramme wie dem Mondfahrtprogramm, usw. usf., oder ob es eine Chance für Europäer gibt, hier wieder Fuß zu fassen.

Freitag, August 11, 2006

Pattern Matching Algebra

Die Pattern Matching Tools, die ich kenne, müsste man mal auf eine solidere Grundlage stellen. Sie mixen alle verschiedene Aspekte einer Pattern Matching Algebra, die man auch mal sauber und in funktionaler Manier implementieren könnte:
- Basis-Matcher m: Sie nehmen einen Text T und erzeugen daraus eine Menge M =<t,<start,ende,transformation>*> (Vereinfachend könnte man einfach sagen: Input ist bereits eine solche Menge, mit <t,ø>
Der Matcher kann auf irgendeine Art die Patterns erzeugen: Über einen regulären Ausdruck, eine Grammatik, ein Lexikon, was auch immer. Mit anderen Worten, ein Matcher ist eine Abbildung <t,<start,ende,transformation>*> -> <t,<start,ende,transformation>*>, wobei in den meisten Fällen der Input = t sein wird.
Darauf kann man nun Operationen anwenden:
- Oder: M | M ist einfach die Vereinigung der beiden Mengen, wobei jeweils das Resultat eines Matchers m ist und wiederum einen Matcher darstellt (all diese Operationen gehen nur, wenn T1=T2).
- Und: M & M, die Schnittmenge
- Minus: M - M, die Differenz. Oder auch: "Blacklisting"
- Komposition: M o M: Output des ersten ist Input des zweiten: "Pipelines"
- Komplement: Das wären alle denkbaren Matches aus T außer den Einträgen in M. Macht wohl keinen Sinn.
- Filter: longest(M), shortest(M) etc.: filtert M nach gewissen Prädikaten.
Bei Verwendung einer funktionalen Programmiersprache wären diese Operationen offensichtlich. Die Berechnung würde hier immer "lazy" erfolgen, also nur, wenn ein Client sie anfragt.
Die Verwendung imperativer Programmiersprachen verhindert, dass man diesen Zusammenhang sieht. Im schlimmsten Fall erzeugt das Programm die Matches und schreibt sie selbst irgendwo hin - Komposition unmöglich. Besser ist es, wenn die Operationen durch eine Cursor-Algebra implementiert werden, also auf Basis von Iteratoren. Das ist in imperativen Sprachen aber oft sehr umständlich. Es erfordert, dass man eine Schleife in der Mitte abbricht, zurückspringt, und die Verarbeitung danach an der gleichen Stelle wieder aufnimmt. Manche Sprachen wie Python machen einem hier das Leben auf Sprachebene leichter (siehe auch meine Bemerkungen zu yield, unten).
Die Verwendung einer Cursor-Algebra hat einen weiteren Vorteil: Der entstehende Baum von Iteratoren kann umgeformt und damit optimiert werden. Würde die Programmiersprache dies unterstützen, könnte man on the fly umformen, etwa dass (M1 o (M2 o M3)) = o(M1,M2,M3), wobei o dann eine optimierte n-äre Implementation des Operators o wäre (wenn ich es richtig verstanden habe, unterstützt LISP genau das).
Dies in C++ durchzuführen, ist allerdings ein arbeitsames Unterfangen. Es würde sich lohnen, sich mehr mit Sprachen wie ML oder Lisp zu beschäftigen, die hier gewisse Erleichterungen bringen.
Wie lässt sich nun ausdrücken, dass dieselben Operationen auch auf den Transformationen möglich sind, ohne dass man (wie bei Transducern) Information vergessen, also die Transformation zum neuen T machen muss?

Diese Gedanken zum Thema funktionale Programmierung bringen mich auf zwei weitere: Das Problem der Aggregation und das der Parallelisierbarkeit.

Aggregation ist das Sammeln von Statistiken, das "Eindampfen" von Ergebnissen der oben genannten Operationen. Der count() Operator von SQL wäre so ein Fall (übrigens ist SQL ein Paradebeispiel dafür, wie man es nicht machen sollte - die meisten Implementationen haben große Probleme mit Kompositionalität). Das Zählen von Einträgen im Tupel mit dem gleichen Wert. Derartige Dinge.
Die Erkenntnis von heute: Im Endeffekt sind wir hier bei einer Reduce-Operation, wie es sie etwain Python gibt. Und eine Funktion f: M -> M ist ein Mapping. Auch ein Python-Konstrukt. Beides ist natürlich keine Python-Erfindung, sondern schon aus Lisp-Zeiten bekannt. Und natürlich gibt es die MapReduce-Variante von Google. In Hadoop hat dazu kürzlich eine Open-Source-Implementierung das Licht der Welt erblickt. Sehr angenehm.

Das zweite ist Parallelisierbarkeit. Einzelne Mappings lassen sich natürlich parallelisieren, auf verschiedene Rechner verteilen - wenn sie nicht voneinander abhängen. Hier kann man das Rad neu erfinden und nennt das dann "verteilter matcher". Dieser bekommt einen matcher als argument und ist selbst einer. Und der andere läuft dann auf einem anderen Rechner, in einem eigenen Server, für das man dann ein Kommunikationsprotokoll schreiben muss.

Parallelisierbarkeit ist das Stichwort der nächsten Jahre. Die Steigerungen bei der Gigahertz-Zahl sind zunächst mal gestoppt. Jeder Prozessor wird aus 2, 4, 8, 16... Kernen bestehen. Data Crunching passiert auf 1000en Computern gleichzeitig. Wird Zeit, dass sich die Programme anpassen.
Die Konzepte wurden allerdings bereits anfang der 60er Jahre entwickelt. Das Multics-System war bereits ein symmetrisches Multiprozessor-System, mehrere Prozessoren teilten sich einen Hauptspeicher (siehe das Essay von Jack Dennis - noch einer, der recht hat)
Dennis hat ein paar weitere Ideen: Er will Hardware und Software besser aufeinander abstimmen und baut deshalb einen Rechner, der sich für Parallelisierung besser eignet als jetzige. Er hat in einer Präsentation u.a. Prinzipien für Parallelisierbarkeit aufgestellt:
  • Ausdrücke: (u + v) * (x + y) - jeder Unterausdruck kann parallel berechnet werden
  • Funktionen: z=f(x,u)+g(x) lässt sich parallelisieren, da keine derFunktionen vom Output der anderen abhängt
  • Daten: Ein linearer Durchlauf durch ein Array lässt sich parallelisieren, wenn es keinen weiteren Zustand außer der Schleifenvariable gibt:
    Z := for i in [1..n]
    z = X[i-1]+Y[i+1]*2.0
    returns array of z
    end for;
    Hier ist die Zeile z = ... verteilbar. Die Sprache ist übrigens Sisal.
  • Producer/Consumer:
    producer:
    x = f(x)
    sende g(x) an port
    consumer:
    y = lese port
    z = h(z,y)
    Dieses Pattern ist in vielen Sprachen eingegangen, etwa auch die Generatoren von Python, eine Art von Coroutinen, oder auch Threads in Java mit PipedInputStream/OutputStream und der Concurrency Bibliothek
Kommen wir zum Schluss:
  • Wer Data Crunching betreibt, suche nach Möglichkeiten, Kompositionalität zu erreichen, indem eine Algebra erstellt wird. Ansonsten wird man, wie bei SQL geschehen, bestimmte Konstrukte, die durch die Algebra ausgedrückt werden könnten, fix vorgeben und die Flexibilität dadurch von "unendlich" auf eine finite Anzahl Konstruktionen einschränken.
  • Es lohnt sich, sich näher mit funktionaler Programmierung auseinanderzusetzen. Der steigende Grad an Parallelisierung wird es ermöglichen, funktional geschriebene Programme blitzschnell auf Terabytes von Daten operieren zu lassen.
  • Google MapReduce implementiert die hier besprochenen Konstrukte auf elegante Art und ermöglicht massive Verteilung
  • Und wer meint, Sisal wäre eine tote Sprache, der irrt: Viele Operationen in MapReduce werden bei Google in der hauseigenen Sprache Sawzall geschrieben. Obwohl das Paper Sisal nicht direkt zitiert - kaum anzunehmen, dass es außer dem Namen keine Anklänge daran gibt.
  • Die schlechte Nachricht: Es war alles schon mal da, und es ist wieder da. Und alles bei Google. Wenig, was dem noch hinzuzufügen wäre.
PS: Wer Peter Norvig gelesen, verstanden und befolgt hat, hat natürlich alles von Anfang an gewusst und diese Programmierparadigmen schon gelernt...

Donnerstag, August 10, 2006

Bottom Up und Top Down

Die Ansätze beim Schreiben von Software lassen sich kurz in zwei Ansätze zusammenfassen: Bottom up oder Top Down. Diese Ansätze entspringen der Organisation, in der eine Software entstanden ist.
Innerhalb von Firmen herrscht eine Top-Down Kultur: Sie ist geprägt von Hierarchien und Organisation. Im Extremfall ist sie fast militärisch. Organisation ist nur möglich über Professionalisierung, das heißt in der Ausbildung unterschiedlicher Organisationsrollen, und Arbeitsteilung. Der operativ wirkende Mitarbeiter steht dabei am unteren Ende der Hierarchieskala. Große Projekte werden über Planung in oberen Hierarchieebenen bewerkstelligt. usw. Der Transfer der ursprünglich militärischen Organisationsform auf die Privatwirtschaft und die Einführung des Begriffs Management ist eine der Leistungen der vergangenen 200 Jahre, die den Wohlstand der Menschheit wohl am meisten vermehrt haben. Erst dadurch wurde die Koordination komplexer Prozesse, die Interaktion mit den komplexen Systemen ganzer Gesellschaften möglich.
Das Gegenbeispiel ist die selbstverwaltete Organisation einer (staatlichen) Universität. Hier ist die Verwaltung lediglich ein Anhängsel, eine Art Dienstleister der einzelnen Wissenschaftler. Im Wissenschaftsbereich selbst gibt es kaum Professionalisierung, kaum Arbeitsteilung. Die Anreizsysteme sind für alle Mitarbeiter dieselben: Nur über Publikationen kann der Einzelne Aufstieg erreichen, nicht aber, indem er z.B. als Projektmanager, Recruiter oder Marketing-Fachmann arbeitet. Gegeben ein beschränktes Budget von Stellen, wird sich ein Institut nie dazu entschließen, etwas anderes als einen Wissenschaftler einzustellen - es sei denn, man überschreitet eine gewisse Größe und steht z.B. unter starkem öffentlichen Rechtfertigungsdruck.
Das führt dazu, dass Projekte an Universitäten im Normalfall kaum über ein paar Personen hinaus skalieren. In vielen Fällen herrscht sogar das Bild des einsamen Forschers vor, der abgeschottet von der Außenwelt über Büchern brütet. Vor die Herausforderung gestellt, dennoch eine komplexere Aufgabe bewältigen zu müssen, sind viele Projekte zum Scheitern verurteilt: Da keine Organisation dafür sorgt, talentierte Ressourcen in unterschiedliche Rollen zu alloziieren, ist es eine Sache des Glücks, ob die Talente im Projekt gerade so verteilt sind, dass die Herausforderung gemeistert werden kann. In allen Fällen führen jedoch fehlende Anreizsysteme dazu, dass sich die Situation nicht selbst optimiert: Ein Organisator wird in seiner Organisatorrolle nicht die Bestätigung erleben (etwa durch eine Beförderung) wie dies in der Privatwirtschaft gegeben ist.
Es gibt natürlich Ausnahmen, die durch äußeren Druck entstehen. Zum Beispiel ist es für einen viele Physiker heute kaum mehr möglich, ohne millionen- oder milliardenschwere Technologie Forschung zu betreiben. Hier muss es Spezialisten geben, spezielle Stellen, die dann jedoch nicht in der Forschung, sondern eben auf operativer Ebene angesiedelt sind. Ebenso muss ein Krankenhaus organisiert werden.
Doch zurück zur Software: Wie gesagt, spiegelt sich die Organisationsform in der Organisation der Software wider: Es gibt top-down und bottom-up Software. Es gibt auch unterschiedliche Märkte dafür: Eine bottom-up Software wird von einem Privatunternehmen in vielen Fällen weniger stark nachgefragt werden wie eine top-down Software.
Ein paar Beispiele dazu: Unix ist eine klassische Bottom-Up-Software, ein Abkömmling öffentlicher und privater Forschungs-Organisationen. Unix-Erfinder haben dies ja auch zur Philosophie gemacht und einige Prinzipien aufgestellt. Die Essenz ist: Enge die Funktionsweise Deines Programms ein, schau, dass es das Problem, das es angeht, auch wirklich gut löst, und versiehe es mit standardisierten, einfachen Schnittstellen, die ein Mensch noch versteht. Das heißt, Unix Pipes, Textuelle Formatierung von Input und Output, etc. Schau, dass das System kompositional wird, indem ein Programm den Output des anderen als Input nimmt (f | g entspricht also der Komposition von Funktionen, g(f(x)) - eine Arbeitsthese wäre, dass in Universitätsumgebungen eher ein funktionaler Ansatz zu finden ist, was sich auch in einer größeren Verbreitung von funktionalen Programmiersprachen widerspiegelt. Doch dies hat sicher auch andere Gründe).
Das Unix-System passt perfekt in die Bottom-Up-Welt: Einzelpersonen können einzelne Programme schreiben, die durch Komposition zum größeren Ganzen werden.
Die Kehrseite ist jedoch, dass es keinen "top-down" Blick auf das Gesamtsystem mehr gibt. Das System lokaler Kontrakte funktioniert auf Kommandozeilenebene recht gut. Schon hier gibt es allerdings gewisse Reibungsverluste, die sich in unterschiedlicher Syntax verschiedener Tools zeigen. Ein Beispiel: Manche Unix-Befehle zeigen über "-?", andere über "-h" oder über "--help" eine Hilfe-Seite an. Es gibt keinen durchgängigen Standard für Tastaturbelegungen, etc. Der Bereich Usability-Forschung wurde daher auch nicht an Universitäten erfunden - er erfordert einen Blick über Modulgrenzen hinweg - eine Anforderung, die Universitäts-Software nicht leisten kann.
Als Gegenbeispiel seien hier die Betriebssysteme von Apple und Microsoft genannt (man möge mir verzeihen, sie in einem Atemzug zu nennen). Sie (insbesondere letzteres) sind von ihrer Machart her top-down organisiert: Unter Windows gibt es ja z.B. eine zentrale Registrierungsdatenbank für Konfigurationen, zentrale Dienste wie ein System für verteilte Komponenten, ein durchgängiges Tastatur-Layout, ein systemweites Hilfesystem etc. Man mag sich bei manchen dieser Erfindungen streiten, ob sie sinnvoll waren, viele Dinge wurden jedoch später auch auf Unix-Systeme übernommen: So hat z.B. das KDE-Projekt viele dieser Errungenschaften auf Unix-Systeme übertragen: Ein Komponentensystem eingeführt, das sehr nahe an dem von Windows angelehnt ist, eine standardisierte Benutzeroberfläche mit zentraler Systemsteuerung eingeführt, Shortcuts standardisiert, etc. Es bleibt festzustellen, dass hier nur sehr wenig wirkliche Innovation stattfindet. Die meisten Programme unter KDE oder Gnome sind Kopien ihrer kommerziellen Pendants.
Ähnliches kann man aber auch im Bereich der Programmierung entdecken: So wurde die erste objektorientierte Programmiersprache, Simula, zwar an der Universität Oslo entwickelt. Später kam Smalltalk vom Xerox PARC hinzu, immerhin schon einer privaten Forschungsorganisation. Durchgesetzt hat sich das objektorientierte Paradigma jedoch durch zwei Entwicklungen: Einmal die Verbreitung von C++ (entwickelt bei AT&T) und die Verbreitung von Benutzeroberflächen, für die sich Objektorientierung besonders eignet. Ich möchte argumentieren, dass das objektorientierte Paradigma wie geschaffen für top-down Organisationen ist. Während der Unix-Ansatz dafür gemacht ist, Daten zu manipulieren, ist der objektoerientierte dazu da, die Welt abzubilden und Strukturen zu schaffen.
Man könnte auch sagen: Der funktionale Ansatz stellt Verben in den Mittelpunkt, der objektorientierte die Substantive. Hier geht es um die Modellierung von Beziehungen und Hierarchien und letztlich um das Erzeugen einer ganzheitlichen Sicht auf ein System.
In ihrer Ausprägung als statisch getypte Sprachen haben C++, Java und Co. überdies einen Vorteil: Sie können Garantien geben. Eine arbeitsteilige Organisation muss diese Möglichkeit haben, indem in Spezifikationen festgeschrieben werden kann, wie die Schnittstellen eines Programms aussehen. Eine fluide Definition, dass man eben Text bekommt, der wieder geparst werden muss, oder einen nicht genau spezifizierten Datentyp, erzeugt bei einem Projektmanager nur Unbehagen. Bei der Zusammenarbeit verschiedener Organisationen wird dies dann zum Problem. Ein Kunde wird die Eigenschaften einer Schnittstelle festschreiben lassen, da eine Verletzung unter Umständen sein Geschäftsmodell gefährden kann. Würden keine ausreichenden Garantien gemacht werden können, könnte er den Vertragspartner nicht zur Rechenschaft ziehen. Die Frage, ob im Bereich IT dynamische Sprachen wie Python eine Chance haben, lässt sich daher einfach beantworten: Nein.
Doch nicht nur die Programmiersprachen verraten ihre Herkunft: Auch die Welt der Application Server, der Komponenten-Architekturen, sogar Programme wie Eclipse verraten ihre Herkunft als Produkte von der Industrie, für die Industrie.
Zum Glück sind die Grenzen heute nicht mehr so streng, wie sie früher einmal waren. Entwicklungen in Industrie und Forschung schwappen in relativ kurzer Zeit zur anderen Seite über. Ein Beispiel ist die größere Verbreitung von Unix-Tools unter Windows, Windows-ähnliche Programme unter Linux, oder der Unix-Unterbau von Mac OS X. Derzeit verbreiten sich auch wieder mehr dynamische Programmiersprachen in der Industrie (allerdings wohl eher unter der Motorhaube und nicht an den Schnittstellen).
Viele Software-Firmen sind in ihrer Art auch ähnlich zu Universitäts-Organisationen: Entweder, indem sie kleine, innovative Ausgründungen sind, oder, indem sie eine Research-Abteilung enthalten. In beiden Fällen wird man eher dem Unix-Paradigma zugeneigt sein. Es ist interessant zu beobachten, wie sich eine kleine High-Tech-Firma wandelt, wenn sie wächst: Wie ein reiner Unix-Shop mit einem Produkt, das den Prinzipien der kleinen Tools und der dynamischen Programmiersprachen verhaftet ist, immer mehr zu einem Industriedienstleister wird, mit einer größeren Bedeutung von Application Servern, garantierten Interfaces und einer größeren Bedeutung von Windows. An irgendeinem Punkt wird man sicher den Research-Bereich davon wieder abkoppeln (oder hat dies in einzelnen Teams schon getan), um Bottom-Up-Innovationen zu ermöglichen.
Für den Einzelnen, der sich zwischen diesen Welten bewegt, stellt sich nun die Frage, welche Technologie zu welchem Zeitpunkt verwendet werden soll. Wer die Möglichkeit (das heißt: Wahlfreiheit und Überblick) hat, sollte sich nun also wertfrei derjenigen Techniken bedienen, die der Lösung eines Problems und der Organisationsform, in der man sich befindet, am besten entsprechen. An einer Universität sollte man daher nicht versuchen, große Frameworks der Industrie ohne kritische Prüfung zu übernehmen: Ob das Applikationsserver oder Benutzerschnittstellen sind: Unter Umständen erfordern sie wochenlange Schulungen und Spezialisierung. Auf der anderen Seite liefern sie vielleicht eine bessere Benutzbarkeit als typische Unix-Tools. An der Universität sollte man Programme wohl eher in der Form Input-Verarbeitung-Output schreiben. Kommandozeilentools, zusammensetzbar, von einer Person beherrschbar. Die universitäre Sichtweise würde eher erwarten, dass diese einzelnen Programme hervorragend funktionieren, egal wie groß der Input und der Output ist. Das Programm würde sich durchsetzen, wenn der Einzelne gut funktioniert, eine gewisse Genialität an den Tag legt. Das Problem würde einmal gelöst, und das Programm in die Ewigkeit der Unix-Gemeinde eingehen.
In der Industrie würde man eher eine Objektorientierte Sichtweise annehmen, zusammen mit gewissen Techniken, die in der funktionalen Programmierung automatisch gegeben wären, wie "Dependency Injection". Man würde sich organisieren, ein Team bilden, einen Projektplan erstellen, die Abhängigkeiten durch Definition von Komponenten reduzieren, iterative Entwicklungszyklen einführen, usf. Das Programm setzt sich dann durch, wenn das Team gut funktioniert. Je organisierter das Team, desto weniger genial muss der Einzelne sein. Im Extremfall sind es militärische Organisationen wie Accenture, die die Durchschnittlichkeit der Einzelnen komplett ausbügeln können, die im statistischen Mittelwert aber dennoch "brute-force", mit viel Arbeitskraft, viel komplexere top-down-Projekte stemmen können als das an der Universität je möglich wäre.

Mittwoch, August 09, 2006

Programmieren als Theorie bildender Prozess

In diesem Video nennt der Präsentator einen interessanten Artikel von Peter Naur, einem der Entwickler von ALGOL 60. "Programming as Theory Building". Er betrachtet Softwareentwicklungs-Methoden sehr skeptisch und sagt, letztlich wären alle Artefakte immer nur eine kleine Untermenge der Theorie, die ein Programmierer im Kopf erstellt hat, während er das Programm geschrieben hat.
Leute, die ein Programm dann weiterentwickeln sollten, würden diese nicht verstehen. Um die Theorie hinter einem Programm zu verstehen, müsste man es entweder selbst geschrieben oder sehr nah mit den Schreibern zusammengearbeitet haben. Und: Da die Artefakte, also das Programm selbst, nur eine Untermenge der Theorie darstellen, könnte man die Theorie auch nicht aus Artefakten wiederherstellen. Hier eine genauere Beschreibung und ein Auszug dazu von Alistair Cockburn.
Das Video enthält auch einen Pointer auf die Sapir-Whorf-Hypothese und das Blub-Paradox.

Dienstag, August 08, 2006

Programming in Ten Years

Aus aktuellem Anlass kann ich nur immer wieder den Artikel
Teach Yourself Programming in Ten Years
empfehlen:
"Researchers have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music."
Ist natürlich gut möglich, dass das niemand hören will. Aber er hat recht. Genauso wie Peter Norvig in vielen seiner übrigen Artikel recht hat...
Insofern bin ich in Computerlinguistik noch 7 Jahre von echten Höchstleistungen entfernt. Damn.

Sonntag, August 06, 2006

Eric Schmidt...

Google CEO Schmidt ist smarter als ich dachte (ich hatte kein so gutes Bild von ihm wegen seinem Engagement bei Novell...).

Bei einer Wirtschaftskonferenz in Stanford gab es ein interessantes Q&A:

"Q: Do you think the relationship between universities and companies are in a good shape in Silicon Valley?"

"A: It's interesing when you look at the pattern: For 20 years in my other jobs i tried to reproduce [the following:]
2 grad students working with a strong faculty member in a university, creating enormous value, and every time the univerities win. (...)
The combination of a dedicated faculty member, graduate students who work 24 hours a day, no sense of limits, no sense of the impact they can have, people holding them back, a robust venture industry, good exit strategies for them, has produced tremendous economic societal, technological, human impact. (...) And we really are the envy of the rest of the world. The funny thing is, we can explain this to other governments in other societies, and they won't get it.
They think, if your company will fail, that you should go to jail. Or, if you have losses, you can't recover them. So, I have developed a tremendous respect towards the actors that have built this infrastructure over the last 50 years, and I will tell you that one of the actors is the United States government. I was, for example, when I was at XeroX PARC, on a doctoral grant. And so, let's not forget that's the universities, the government funding, the work of the graduate students, the dedication of the junior faculty, that creates it."

"What are the problems of a company of 2 guys working in a garage to a global company with 1000s of employees working in different countries, nations and cultures?"

Google has every known problem in time compression. If I'd ask you about problems of a fast-growing company you'd list things like who to promote, who to hire, who do I get a new job, where do I move to, and so on.
At Google all these things occur in parallel very very fast. So, we knew this when we saw the possibilities of monetization, which came through our advertising network, and as a result we organized the company so that it is very decentralized.
And ultimately all these organizations can only grow through decentralization. So we try to empower as much as we can individuals. So we have a number of interesting rules: For example, the engineers are told to work 20% of their time on whatever they want to, which is unheard of in companies of our scale. We spend 70% of our time priorities on core business, 20% on adjacent businesses and 10% on other. And, much of what you see in the press is about the 10% of other. And so sometimes I get approached by someone who says "Did you know that you'ss about to do this attack this and that..." and I say, "I'll go find him." This one person takes on this entire industry, which is a 10% project which means we're experimenting with.
And one of the characteristics of experiments is that it's fine for them to fail. So if you can build a culture which can in a decentralized way scale, especially globally, then you can build something that can scale very very quickly, and is also durable.

Passend dazu: Ausschnitte aus einem Rhetorikkurs von 1988. Weiß der Geier wie so was ins Netz kommt... Sicher nicht als Beispiel für Brillenmode...

Scalable Learning and Inference in Hierarchical Models of the Neocortex

Heute ist Video-Tag...
Hierarschische generative Modelle, ein TechTalk bei Google, oberflächlich gesehen mit einer gewissen Ähnlichkeit zu Hierarchical Temporal Memory, aber weniger esoterisch als Jeff Hawkins Ausführungen. Der Autor zitiert allerdings ein Paper von Hawkins und George, den Leuten hinter Numenta. Tom Dean ist Professor bei Brown, hat sich mit Temporalen Datenbanken und danach viel mit probabilistischen Modellen beschäftigt.

BigTable

A Google Research Fellow, Jeff Dean, talks about
BigTable: A Distributed Structured Storage System

Freitag, August 04, 2006

Search Technology Webcast

UC Berkeley hat eine Liste von Webcasts
mit einer illustren Schar von Sprechern, darunter Sergey Brin, Peter Norvig etc.