Schreibe Computerprogramme so, dass sie nur eine Aufgabe erledigen und diese gut machen.
Laut Wikipedia stammt dieses Zitat von Douglas McIlroy – und der Mann hat Recht.
Über einen längeren Zeitraum habe ich mich gefragt warum es z.B. eigentlich nicht sowas wie eine zentrale “Communication Suite” mit E-Mail, Feeds, Microblogging, Instant-Messaging usw. geben könnte und wie/ob es möglich wäre ein solches Programm zu realisieren.
Recht anschaulich hat mir jetzt der Mail-Client der Wahl Claws-Mail demonstriert warum das keinen Sinn macht: Wenn man mit dem RSSyl-Plugin seine Newsfeeds in Claws-Mail integrieren will kann man (bei entsprechender Feedlisten-Grösse) nicht mehr “schnell mal E-Mails abrufen” – die Abrufzeit ist einfach zu lang.
Setzt man die Aktualisierungsintervalle auf “manuell” funktioniert das Mailabrufen wieder zügig, dafür geht der “Luxus” automatisch mit aktuellen Feeds beliefert zu werden verloren.
Also zurück zu Claws-Mail für die E-Mails und Liferea für die Newsfeeds – zwei Programme die ihre jeweilige Aufgabe nahezu perfekt erfüllen.
Abgesehen von diesen “kleinen” Problemchen wäre ein Kommunikationsmonster das so viele Dienste wie möglich in sich vereint wohl kaum auf Dauer vernünftig zu betreuen, der Code wäre zu gross, zu unübersichtlich, zu fehleranfällig – keine gute Idee.
Ich bin endgültig von Herrn McIlroys’ Meinung überzeugt.
Am 29.01.2010, 13:01
Sehr schöner Artikel.
Ich arbeite genau an einem solchen Monster!
” … kaum auf Dauer vernünftig zu betreuen, der Code wäre zu gross, zu unübersichtlich, zu fehleranfällig”
Kann ich nur bestätigen!!!
Dazu kommt noch eine schlechte UI und Userbility!!
Am 29.01.2010, 13:15
Am 29.01.2010, 13:21
Ich bin Gnome Nutzer, genau aus diesem Grund. Keine Zentralität wie bei KDE. KDE (4) macht zwar Spaß, aber wenn ich mir Kontact ansehe, weiß ich wohin so etwas führen kann…womit ich nicht sagen will, diese PIM-Suite erfüllt keine Qualitätsansprüche – was ich sagen will ist, das es über 50% an Funktionen sind, die man im Durchschnitt nicht braucht…
Am 29.01.2010, 13:27
Bei Programmen ohne GUI wird man von mir aber keinen Widerspruch hören.
Dein Beispiel mit Claws-Mail klingt nun so, als wäre das Problem nicht verursacht durch die verschiedenen Aufgaben, sondern durch die fehlende Trennung beim Abruf?
Eine große verbindende Kommunikationssuite wäre vielleicht keine so schlechte Idee, die Beliebtheit der Multiprotokoll-Instant Messenger spricht ja auch dafür. Google versucht sowas gerade mit Wave (gut, da wird allerdings die Komplexität reduziert, indem es eine neue Sache ist, die Ansätze statt bestehenden Protokollen verbindet).
Am 29.01.2010, 13:45
Schau dir Kontact, nein ganz KDE an. Und es funktioniert wunderbar und ist genial. Wer das nicht mag muss es ja nicht benutzt. Ähnlich wie bei Opera…
Murks kommt nur dabei heraus, wenn man beide Philosophien vereinigen will, siehe Evolution… ;-)
Am 29.01.2010, 13:47
@Wutzara: Ja, der Gedanke kam mir auch. Moblin hat ja ansatzweise etwas derartiges indem es Appointments etc. auf dem Desktop darstellt. Wie würde das jetzt aber z.B. mit E-Mails funktionieren die nicht schon a.d. Server auf Spam gefiltert werden – “Sie haben 1299 ungelesene Nachrichten” – gerade bei den Mails für mich unpraktikabel.
@Onli: Bei den GUI-Programmen empfinde ich die Oberfläche nicht als weitere Aufgabe sondern nur Mittel zum Zweck – gehört dazu. Insofern denke ich dass z.B. ein Feedreader möglichst gut mit Newsfeeds umgehen sollte, der E-Mail-Client mit E-Mails und allem was dazugehört (z.B. auch Verschlüsselung etc., ob jetzt erweiterbar mit Plugins oder monolithisch ist wieder eine andere Sache), der IM hat als Hauptaufgabe dem Benutzer das Messaging zu ermöglichen – die verschiedenen Protokolle gehören untergeordnet auch zu dieser Aufgabe.
Zum o.g. Beispiel: Indirekt entstand das Problem durch die “neue” Aufgabe als E-Mail-Client auch mit Newsfeeds umzugehen was dann wieder zu einer Einschränkung bei der Hauptaufgabe geführt hat.
Am 29.01.2010, 13:59
Ich bin überzeugt und schreibe darüber, mich interessieren aber genauso auch andere Meinungen und ggf. Beispiele wo der gegenteilige Ansatz gut funktioniert.
Am Ende muss aber doch jeder selbst entscheiden welche Richtung besser gefällt.
Wo/wie werden in Evolution “beide Philosophien vereinigt”?
Am 29.01.2010, 14:26
Kurz: Unbegründeter Bullshit. Aber mir fällt seid längerem auf, dass um den uu.de-Planeten immer mehr absolute Laien kreisen, die mal besser auf Dieter Nuhr hörten.
Am 29.01.2010, 16:24
Klar wenn ein Spamverseuchtes Postfach hat, wird gerade keine Freude an sowas empfinden – aber das wäre in diesem Falle ja nicht die Schuld des Mailprogramms. Und die Spamfilter innerhalb eines Mailclienten sind ja auch nur Mittel zum Zweck. Nicht umsonst werden von Mailprovidern Spamblocker eingesetzt – diese dürfen noch nichtmal auf deinen Computer gelangen.
Am 29.01.2010, 16:39
Am 29.01.2010, 16:59
Am 29.01.2010, 18:43
Leider müsste ich bei einem meiner Mailprovider den Spamfilter zusätzlich kaufen, daher wollte ich bisher auf Bogofilter (bin sehr, sehr zufrieden damit) nicht verzichten.
@Igby: Hast du ein Beispiel für ein Programm dass die Multifunktionalität gut umsetzt? Bin wirklich interessiert, keine Hintergedanken :)
@Schumbi: Firefox konzentriert sich doch (fast) nur auf den Surfbetrieb – würde man Tabs,Bookmarks und Druckfunktionen auslagern bleibt abgesehen von den diversen about:config-Einstellungsmöglichkeiten doch kaum noch etwas übrig? Die Multifunktionalität wird doch eher durch die Erweiterungen ermöglicht?
Am 29.01.2010, 21:17
Aber:
Warum? Mehr Information wäre schön gewesen.
Woher weisst du dass ich absoluter Laie bin? Ok, du musst mich also kennen – wenn wir uns sehen sprich mich mal an :)
Mal im Ernst – was soll so ein überheblicher Kommentar? Hilft der irgenwie irgendjemandem weiter? Ich erwarte keine Antwort, bin aber gespannt.
Edit: Selbst wenn – was spricht überhaupt dagegen? Dürfen Laien keine Blogs führen?
Am 30.01.2010, 15:58
Inhaltlich bleibt der Artikel aber schwach. Du schließt von Unfähigkeit des RSSyl-Plugin-Entwicklers gleich auf Faustregeln für die Programmierung. Das ist so Hanebüchen, dass man sich nur ans Hirn packen kann. Wirklich verstört
hat mich dann der letzte Absatz. “Kommunikationsmonster” aha. Hast Du schon mal ein größeres Programm geschrieben? Wie kommst Du darauf, dass so eine Anwendung nicht wartbar sei?
Wenn ich für jeden Kommunikationsweg ein eigenes Programm habe, wird dann der Quelltext etwa kürzer?!
Wie auch immer, ich hätte Dich deswegen nicht gleich anflaumen müssen, das tut mir Leid. Ich finde es nur schade, dass das Verhältnis von Signal zu Rauschen hier so stark abgenommen hat.
Am 30.01.2010, 17:43
Ich schliesse nicht vom RSSyl-Plugin auf die Faustregel – die Faustregel ist schon lange bekannt – aber die Begebenheit liess sich einfach zu schön darauf anwenden. Quasi “ein Beispiel für” die Gültigkeit der Faustregel. 2 Aufgaben in einem Tool vermischt ergibt das Problem, 2 Aufgaben auf 2 Tools verteilt führt zum Erfolg.
Zum Thema Kommunikationsmonster – nein ich habe ein Programm in dieser Grösse noch nicht geschrieben, liegt aber haupts. daran dass ich auch Familienvater bin, da fehlt einfach die entsprechende Zeit.
Allerdings habe ich vor etwas mehr als 15 Jahren meine ersten Erfahrungen mit BASIC und Pascal(?) machen können, seitdem viel wieder vergessen, etwas ,C, C++, Python und viel PHP/MySQL dazugelernt, habe im Alleingang ein komplettes Blogsystem inkl. aller Standardfeatures und Gallerie auf NestedSet-Basis etc. über 1 Jahr nebenberuflich entwickelt und betreue noch mehr oder weniger mein daraus entstandenes Subprojekt CyStats – aber auch weniger da die Zeit einfach fehlt.
Und genau deswegen entstand auch der letzte Absatz. Mein Fehler war/ist definitiv dass ich nicht klar genug gemacht habe dass das die Sichtweise aus der Egoperspektive einer Einzelperson ist, für die wäre ein solches Programm “schwer wartbar”
Gleiches gilt für den Quellcode – gesamt ist das natürlich nicht weniger, für die Einzelperson kann es aber einen deutlichen Unterschied machen. Selbst erlebt mit dem Blogsystem und dem daraus entstandenen Statistikplugin.
Mehrere Personen könnten da natürlich mehr erreichen, keine Frage. Wenn ich mich richtig erinnere gibt es (bis auf das Microblogging) mit irgendeinem Thunderbird-Derivat inkl. Telepathy-Integration auch schon etwas in der Richtung.
Das sind alles keine “Monster”, für eine Person alleine aber schon schwer wartbar.
Mich hat der erste Kommentar von dir richtig sauer gemacht, ehrlich. Nicht weil du mit meinem Geschreibe nicht einverstanden bist, kein Problem. Aber der Ton macht die Musik. Und du hast eine Überheblichkeit rübergebracht die mir persönlich extrem unangenehm war. Auch in denem letzten Satz klingt das jetzt wieder etwas durch…
In jedem Fall aber Danke für die nochmalige Rückmeldung und Begründung, hat mich wirklich gefreut.
Edit: Was mir auch noch wichtig ist – ich habe allen Respekt für die Autoren des UU-Planeten (und alle anderen auch), auch wenn ich nicht immer einer Meinung bin. Sie schreiben über das was sie für interessant halten, beteiligen sich aktiv an der Kommunikation und fördern selbige, ebenso wie die Kommentatoren die sich durchringen ihre eigene Meinung preiszugeben.
Die Autoren können dazulernen (wie hier z.B. im gestrigen Artikel mit “checkinstall” passiert), die Leser ebenfalls. Kämen die Artikel ausschliesslich von den Linux-Profis wäre das Ganze zumindest für mich persönlich als “normalen Anwender mit leicht tiefergehenden Kenntnissen” fast zu wenig, wird die ganze Palette an Interessensgebieten abgedeckt ist das doch irgenwie wesentlich kompletter.
Am 31.01.2010, 03:01
Wenn man das ganze geschickt macht, entsteht kein Codemonster und alles ist hübsch, sogar das von dir beschriebene Performance problem dürfte kein Problem mehr darstellen.
Meine Idee wäre, einen Kern zu schreiben, dieser ist nur dafür zuständig eine Oberfläche anzuzeigen, die das Konfigurieren des eigentlichen Programms ermöglicht.
Die ganzen Sachen wie Email, RSS-Feed usw. werden dann per Plug-In nachgeladen und in eigenen Threads gestartet.
Über die Basiskonfiguration kann nun der Bediener den einzelnen Plugins Prioritäten zuordnen.
bspw. geb ich dem RSS-Feed Plug-in die Prio 2, meinem Emailplug-in die Prio 0 und meinem Chat Plug-in die Prio 1.
Wenn nun die RSS-Feeds abgerufen werden und du auf den email abrufen button klickst, führt das Programm intern eine Prüfung der prio’s durch und pausiert dann das RSS-Feed plugin und das chat plug-in solange, bis die Emails abgerufen wurden.
Damit hat man kein Codemonster: Die Plugins werden über implementierte Interfaces geladen und sind für sich selbst verantwortlich (das Programm muss nur wissen, dass es sie gibt und eine Priorität zuweisen kann und ggf. den Namen des Plug-Ins, alles dinge die man über ein Interface aufbauen kann. Das pausieren des Plug-ins ist allein dadurch möglich das man den Thread einfach kurz stoppt, was eig. in allen mir bekannten Sprachen möglich ist. evtl. muss man die anforderung zum pausieren auch dem plug-in mitteilen, damit dies bspw. die abruf routine pausiert.
Die Plug-ins müssen das dann in letzteren fall vernünftig handlen.
Somit ist am Ende jeder Entwickler für seinen kleinen Codeberg zuständig (sein Plug-In) und um den Core kümmern sich wiederum ganz andere Entwickler.
Es muss nur geprüft werden, dass die Plug-ins korrekt auf Steuerungssignale reagieren (start/pause/beenden) und keine Exception der Plug-Ins den Core erreicht.
Die Aussage “baue ein Programm für eine Sache” ist nur begrenzt richtig, denn schließlich bildet jedes plug-in sein eigenes Programm, in deinem Kontext ist sie aber falsch.
Am 31.01.2010, 07:10
Hat man ausreichend Leute und Zeit ist das natürlich machbar. So gesehen sehe ich die Theorie in meinem Kontext auch weiterhin als richtig an, und betone nochmals dass ich nie abgestritten habe dass es anders auch geht :)
Deine Beschreibung klingt recht interessant, muss ich sagen, vielen Dank.
Am 31.01.2010, 09:19
Genau das habe ich mir auch überlegt, wenn auch in der Form einzelner Dienstprogramme mit definierten Schnittstellen und einem “UberTool”, dass nur die Aufgabe hat die Programme zu integrieren.
Damit ist one tool, one job ebenso umgesetzt wie ein generisches Tool für den Anwender. ;-)
Allerdings bin ich da noch nicht so tief eingestiegen ;-)