ist nicht automatisch ein Anwendungsentwickler oder primär jemand der
Programme schreibt.
Ein Informatiker, der keine oder kaum Programme schreibt, kriegt es wohl auch nicht besser hin, als einer, der es tut. Insofern ist der Satz formal nicht zu beanstanden.
Eigentlich wollte ich ja hier nicht den Berufsstand des Informatikers beleidigen. Das mit dem Unvollständigkeitssatz betrifft mich hin- und wieder auch selbst, obwohl ich kein Informatiker bin aber doch dazu neige, hin- und wieder etwas zu programmieren.
Was mir aber in den langen Jahren innerhalb diese Berufes auffällt: Die Leute neigen zur "Feature-ittis" und blasen die Software immer auf, nur um Optionen freizuhalten, die später keiner braucht.
Es ist eine hohe Kunst, eine Programm (oder auch ein beliebiges technisches Gerät) auf die einfachste Bedienbarkeit und auf das minimal Notwendigste reduziert, zu entwickeln.
Die Frage: Für was brauche ich das Ding eigentlich und wie kriege ich das am schnellsten hin, geht sehr gerne unter.
Die
Leute neigen zur "Feature-ittis" und blasen die Software immer auf, nur
um Optionen freizuhalten, die später keiner braucht.
Würdest du ein Produkt kaufen, das sich nicht vor Vorgänger unterscheidet, lediglich eine höhere Stabilität bei weniger Bugs verspricht - was meist nicht gleich nachprüfbar ist? Oder würdest du dann beim alten bleiben, wenn die Bugs keine Showstopper sind?
Abhilfe: Produkt vermieten. Bringt regelmäßig Geld in die Kasse, ohne zwingend eine Gegenleistung zu erbringen. Funktioniert bestens in Verbindung mit vendor lock in.
Was mir aber in den langen Jahren innerhalb diese Berufes auffällt: Die
Leute neigen zur "Feature-ittis" und blasen die Software immer auf, nur
um Optionen freizuhalten, die später keiner braucht.
Bis zu einem gewissen Grad kann das sinnvoll oder sogar "State of the Art" sein:
Dass man Konstanten nicht hardcoded in den Quelltext legt, ist Allgemeinwissen.
Dass man normalerweise nicht anfängt, seinen eigenen Compiler für X-beliebiges-Software-Projekt Nr. 17 zu schreiben, ist auch jedem klar.
Dazwischen gibt es ein weites Feld von mehr oder weniger sinnvollen und aufwendigen Generalisierungen, die einem spätere Anpassungen erleichtern können. Wenn man die Wette gewinnt, spart man nachher sehr viel mehr Zeit als man reingesteckt hat - was sonst eine Woche dauert, kann in Minuten "fertig" sein...
Aber ja, manchmal hält man sich auch lange an Dingen auf, die am Ende doch keiner braucht. Daher ist es schon gut sich immer mal wieder an die eigene Nase zu fassen und zu fragen: Wie viel Zeit investiere ich, und wie viel Zeit habe ich damit im Mittel gespart?
Würdest du ein Produkt kaufen, das sich nicht vor Vorgänger
unterscheidet, lediglich eine höhere Stabilität bei weniger Bugs
verspricht - was meist nicht gleich nachprüfbar ist?
Ja.
Oder würdest du
dann beim alten bleiben, wenn die Bugs keine Showstopper sind?
Ich hätte den Vorgänger nicht gekauft.
Kein early adopter, sondern erst die zweite Serie kaufen.
Es gibt sehr viele Produkte, die weiterentwickelt unattraktiv geworden sind, und bei denen ma lieber beim alten bleibt, was noch fokussiert auf das zu lösende Problem war.
Antoine de Saint-Exupéry ist berühmt für den Spruch:
“Perfection is Achieved Not When There Is Nothing More to Add, But When
There Is Nothing Left to Take Away” Antoine de Saint-Exupery.
Leider scheint man das fast nirgendwo zu wissen oder ernstlich zu
berücksichtigen.
Na ja, JEDER Informatiker bekommt im ersten Semester beigebracht, dass das optimale Programm genau dann vorliegt, wenn es die minimale Anzahl (oder Laufzeit, oder Strombedarf) von Instruktionen ausführt, um das geforderte Problem inklusive Fehlerbehandlung abzuarbeiten, von dem man also nichts mehr weglassen kann.
Das überblickt er vielleicht noch bei kurzen Algorithmen wie Bubblesort, danach verliert er den Überblick.
Den Rest seines Lebens verbringt der Informatiker damit, Ausreden dagegen zu erfinden "zukunftsorientiert", "wartungsfreundlich", "schneller zusammengeschustert".
Also für mich klingt das wie "Mimimimimi, ich komme mit dem fremden Programmierstil nicht klar" und das ist bei Programmierern einigermaßen normal.
Quick'n'Dirty war wurde vor einigen Jahren noch völlig salonfähig gemacht... nannte sich "agile Programmierung". Die beiden Buchstaben "fr" am Anfang sind wohl durch einen Bug verlorengegangen.
Erster allgemeiner Unfähigkeitssatz der Informatik:
1
> "Ein Informatiker ist nicht in der Lage, ein Programm fertig zu stellen
2
> und auszuliefern"
3
>
Nun, betrachtet man das im Lichte der Beobachtung Edsger Dijkstra:
1
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration"
wird das sicher stimmen. Da "BASIC" allerdings kaum noch in der Erstkontaktphase eines potentiellen Informarmatikstudent liegt, muß man dies womöglich dergestalt aktualisieren:
1
"It is practically impossible to teach good programming to students that have had a prior exposure to www.mikrocontroller.net: as potential programmers they are mentally mutilated beyond hope of regeneration"
Irgendwo habe ich mal die Aussage gelesen, dass Ingenieure besser(e) Programme schreiben als Informatiker, weil Ingenieure das Programm so schreiben, wie es gebraucht wird, während Informatiker das Programm theoretisch perfekt schreiben wollen, aber dafür zu lange brauchen oder zu viel Komplexität bekommen.
Dabei zwischen Informatikern und Ingenieuren zu unterscheiden ist höchstwahrscheinlich falsch, aber (mindestens) diese beiden Herangehensweisen gibt es.
Das habe ich auch mal selber mitgekriegt. Eine Aufgabe in einer Informatikklausur war, eine Form in drei Größen zeichnen zu können (Größe vom Anwender wählbar). Ein Schüler hat das generisch gemacht, so dass jede beliebige Größe darstellbar war, ein anderer hat die drei Fälle hart codiert.
Das hart codierte Programm hat funktioniert, das generische war komplizierter, hatte dadurch einen Bug und funktionierte nicht.
Wer von denen hat jetzt besser programmiert? Wer hat das bessere Programm geschrieben?
Früher hätte ich gesagt, dass das generische Programm besser, weil vielseitiger war. Aber die Anforderung war in der gegebenen Zeit ein funktionierendes Programm zu schreiben und das wurde nur vom hartcodierten Programm erfüllt.
Blitznachricht: Informatiker (zumindest wenn du auf Absolventen des
entsprechenden Studiengang abzielst) sind Ingenieure (lt. Ing Gesetz).
Das habe ich auch kürzlich mit Erstaunen festgestellt. Keiner unserer Informatiker hatte einen Bezug zu technischen Aufgabenstellungen gehabt oder entwickelt. Im Gegenteil: es fehlt am mechanischen, elektrischen und physikalischen Grundwissen, was bei Ingenieuren anderer Fachrichtungen vorausgesetzt werden kann.
Das habe ich auch mal selber mitgekriegt. Eine Aufgabe in einer
Informatikklausur war, eine Form in drei Größen zeichnen zu können
(Größe vom Anwender wählbar). Ein Schüler hat das generisch gemacht, so
dass jede beliebige Größe darstellbar war, ein anderer hat die drei
Fälle hart codiert.
Für den absoluten einfachsten Fall und den dümmsten Typ der das betrachtet (du) mag das klar sein.
Jetzt nehme an, du hast die Vorgabe 10.000 Fälle abzudecken. Ist es jetzt immer noch einfacher, 10.000 mal copy und paste zu machen um jeden Fall "hart zu codieren"? Oder ist jetzt plötzlich ein generischer (=variabler) Ansatz besser?
Du bewegst dich hier im Bereich einer Schulaufgabe und willst damit irgendwas im realen Entwicklerleben ableiten.
Tja. Und tatsaechlich gibt's Informatiker auf die das zutrifft. Wird's
aber auch bei Fleischereifachverkaeuferinnen geben.
Und wer kennt nicht die Aussage: "Eine Fleischereifachverkaeuferin darfste nie hinter ne Theke stellen"?
Komischerweise kommen solche Kruden aussagen nur immer im IT Bereich wo jeder Hausmeister und jeder Bau-Ing der schon mal 5 zeilen FORTRAN in 1960 programmiert hat, meint, mitreden zu können. Genau diese Leute würden doch bei jedem auch nur halbwegs komplexen Projekt (hier scheiterst es ja regelmäßig an einer Tastenentprellung) weinen wie kleine Mädchen.
Vielleicht ließe sich das Erweitern zu:
"Ein Informatiker ist nicht in der Lage dazu, ein Program auf die
minimal notwendige Funktion zu reduzieren"
Da würde ich gerade keine Informatiker für in Haft nehmen. Berufsmäßig braucht man natürlich was, um sich abzugrenzen, und um sich den "Lebensraum" zu sichern.
Ich würde auch nicht unbedingt meinen, das sich die Abgründe des Know Hows der Informatiker gerade bei Mikrocontrollern offenbaren.
Außerdem ist vieles Handzusammengestöpselte eher traditionell, während man aktuell eher Bibs zusammenklickt.
Außerdem kann man ja auch ganz gut an Internetseiten beobachten, dass die Informatik da eher fehlt. Kann man zwar auch nicht gut verallgemeinern, ergibt aber vielleicht doch gute Hinweise.
Nur: wem wollte man an die Gurgel gehen, wenn die vielen verschiedenen und uneinheitlichen Cookie-UIs total nerven?
Das habe ich auch kürzlich mit Erstaunen festgestellt. Keiner unserer
Informatiker hatte einen Bezug zu technischen Aufgabenstellungen gehabt
oder entwickelt.
Ist schon sehr lange her, nämlich 1980er, aber in meinem Informatik-Studium (Uni, Diplom) gab es
einen Studienschwerpunkt wie Theorie, Software oder eben Hardware mit Rechneraufbau, Elektronik und Dergleichen,
ein obligatorisches Nebenfach wie Elektrotechnik, Verkehrstechnik oder Energietechnik, das im Idealfall zu späteren Beruf oder wenigstens grob zur Richtung passt. Ing-nahe Kenntnisse sind darin ggf enthalten.
“Perfection is Achieved Not When There Is Nothing More to Add, But When
There Is Nothing Left to Take Away” Antoine de Saint-Exupery.
Leider scheint man das fast nirgendwo zu wissen oder ernstlich zu
berücksichtigen.
Naja, nur weil das mal irgendein Herr mit wohlklingendem französischen Namen gesagt und zufällig jemand mitgeschrieben hat muss das ja noch lange nicht stimmen.
Und dass man das nirgendwo mehr weiß ist nun etwas übertrieben. Diese Plattitüde wird gefühlt täglich irgendwo hochgespült, man kommt ihr kaum aus.
Solche Aussagen verleiten, konsequent zu Ende gedacht, zu unleserlichem und unwartbarem Spaghetti-Code, weil man ja unbedingt noch die letzte Instruktion weglassen möchte.
Mein Lieblingsbeispiel ist PeDas berühmte Entprellroutine die seit knapp 20 Jahren durchs Forum geistert. Technisch genial, dafür schwer zu verstehen und noch schwerer aufzubohren (aber das muss ja eh niemand, denn Anforderungen ändern sich bekanntlich nie ;-)).
Ich weiß nicht wieviele 100 Anfängerfragen es zu dieser Routine regelmäßig gab. Es hätte niemanden weh getan, diesen Algo anders zu formulieren, auch wenn es ein paar nS mehr Rechenzeit gekostet hätte.
Und technisch bestand schon im Jahr 2005 keine Notwendigkeit, hier derart zu optimieren.
Aber KISS ist halt Definitionssache.
Für den einen ist die kürzest-mögliche Lösung KISS, alles hartcodiert und unwartbar.
Der nächste findet es KISS wenn er über eine Parameterschnittstelle einfach Anpassungen zur Laufzeit machen kann, anstelle an zig Stellen im Code rumzuwurschteln und alles neu zu bauen. Und nun?
Die Antwort auf die Frage nach dem besten Programm, dem besten Programmierstil ist halt ein unbefriedigendes "kommt drauf an".
Außerdem kann man ja auch ganz gut an Internetseiten beobachten, dass
die Informatik da eher fehlt.
Zur Ausbildung in Informatik konnte auch zu meiner Studienzeit Anwendungs- und Anwenderorientierung gehören. Da das Web damals irrelevant war, kenne ich heutige darauf abzielende Richtungen nicht, bin aber sicher, dass es sie gibt.
Klingt realistisch. Welcher Informatiker hat schon Bezug zu Technik.
Dir ist aber schon klar, dass ein Großteil der embedded-Programmierung einen technischen Hintergrund erfordert? Da ist es kontraproduktiv Informatiker "Ingenieur" zu nennen, wenn sie zur Technik keinen Bezug brauchen.
Das wäre so (um im Beispiel zu bleiben), als wenn ein gelernter Viehhändler automatisch Fleischereifachverkäufer ist.
Das habe ich auch mal selber mitgekriegt. Eine Aufgabe in einer
Informatikklausur war, eine Form in drei Größen zeichnen zu können
(Größe vom Anwender wählbar). Ein Schüler hat das generisch gemacht, so
dass jede beliebige Größe darstellbar war, ein anderer hat die drei
Fälle hart codiert.
Cyblorad schrieb
Für den absoluten einfachsten Fall und den dümmsten Typ der das
betrachtet (du) mag das klar sein.
Jetzt nehme an, du hast die Vorgabe 10.000 Fälle abzudecken. Ist es
jetzt immer noch einfacher, 10.000 mal copy und paste zu machen um jeden
Fall "hart zu codieren"? Oder ist jetzt plötzlich ein generischer
(=variabler) Ansatz besser?
Du bewegst dich hier im Bereich einer Schulaufgabe und willst damit
irgendwas im realen Entwicklerleben ableiten.
Exemplarischer hätte man die Ursache des "Unfähigkeitssatz der Informatik" nicht darstellen können.
Vielleicht ließe sich das Erweitern zu:
"Ein Informatiker ist nicht in der Lage dazu, ein Program auf die
minimal notwendige Funktion zu reduzieren"
Auf die Programmierer von Kfz-Bordcomputern trifft das definitiv zu. Beispiel: Beim Öffnen der Fahrertür ertönt ein akustisches Warnsignal. Für wie grenzdebil halten die die Autofahrer eigentlich?
Auf die Programmierer von Kfz-Bordcomputern trifft das definitiv zu.
Beispiel: Beim Öffnen der Fahrertür ertönt ein akustisches Warnsignal.
Für wie grenzdebil halten die die Autofahrer eigentlich?
Der kleine Udo glaubt also, dass sich die Programmier-Inder selbst die Features und Funktionen ausdenken die sie in die Autos programmieren?
Auf die Programmierer von Kfz-Bordcomputern trifft das definitiv zu.
Beispiel: Beim Öffnen der Fahrertür ertönt ein akustisches Warnsignal.
Für wie grenzdebil halten die die Autofahrer eigentlich?
Der kleine Udo glaubt also, dass sich die Programmier-Inder selbst die
Features und Funktionen ausdenken die sie in die Autos programmieren?
Vielleicht habe ich ja auch nur den falschen Blickwinkel. Möglicherweise dient das Warnsignal nur dazu, den gewohnten Geräuschpegel aufrechtzuerhalten, denn es piepst, pingt oder quäkt ja heutzutage immer irgend etwas. Da würde die plötzliche Stille nur stören.
Einfach ist nicht primitiv oder doof. Sondern so einfach, als daß es die Anforderung der Aufgabe erfüllt. Diese Anforderung kann auch implizit sein, daß die Software wartbar ist. Oder auch nicht! Einfach heißt, keine Anfodrungen erfüllen, die gar nicht existieren. Kein Overengineering!
Der nächste findet es KISS wenn er über eine Parameterschnittstelle
einfach Anpassungen zur Laufzeit machen kann, anstelle an zig Stellen im
Code rumzuwurschteln und alles neu zu bauen. Und nun?
Nur dann, wenn diese Schnittstelle auch direkt benutzt wird und nicht irgendwann mal vielleicht nützlich ist.
Die Antwort auf die Frage nach dem besten Programm, dem besten
Programmierstil ist halt ein unbefriedigendes "kommt drauf an".
Vielleicht muss man gar nicht nach dem Besten fragen oder streben. Es reicht meistens, wenn es einfach gut ist. Allein das ist oft genug schon nicht der Fall.
Für wie grenzdebil halten die die Autofahrer eigentlich?
Das ist doch eigentlich ganz einfach, wenn auch geistig schwächer ausgestattete Leute Autofahrer sein dürfen. Intelligente Leute zu unterfordern, mag diese nerven, aber Leute zu überfordern geht in die Hose. Also sei froh, dass du dich in dieser Frage auf der unterforderten Seite siehst.
Betrachtet auch die andere Seite, also Programmierer bzw Gerätedesigner. Die müssen sich vorstellen, wie alle möglichen Fahrer funktionieren, wie sie denken, was sie können. Das ist bei grossem Unterschied im Intellekt keineswegs einfach.
> "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration"
2
>
"Programmierdenke" hat nichts mit der verwendeten Programmiersprache zu tun. Wenn ich will, kann ich auch in C oder Pascal Spaghetticode schreiben. Wer es nicht fertigbringt, ein Problem zu analysieren und in logische Schritte zu zerlegen ( bevor er sich an die Tastatur setzt), wird in keiner Programmiersprache etwas brauchbares zustande bringen.
Ich nehme an, Edsger Dijkstra war nur stinkig, dass es da plötzlich eine Programmiersprache gab, die sich in kürzester Zeit auch ohne Hochschulstudium erlernen liess.
"Programmierdenke" hat nichts mit der verwendeten Programmiersprache zu
tun.
Es gibt ein eher abstraktes Konzept von Programmiertätigkeit, das allerdings schon ein wenig von Sprachen abhängig, nämlich über Programmierparadigmata. Sprachen wie C oder Pascal gehören zum gleichen Paradigma und die Unterschiede betreffen Details, nicht die Grundprinzipien des Programmierens damit.
Intelligente Leute zu
unterfordern, mag diese nerven, aber Leute zu überfordern geht in die
Hose.
Aber gerade die verschiedenen Piepssignale ueberfordern viele. "Warum hat das jetzt gehupt?"
Meine Erfahrung in der Programmierung ist, dass einfache Programme auch mit einfachen Programmierkonstrukten und einfachen Sprachfeaturen gebaut sein sollen, waehrend zunehmend komplexere Programme von ausgefuchsten Architekturen profitieren. Die Trennung kann es auch innerhalb eines Programms geben, wo ein eher statischer Kernteil/Bibliotheken mit allen erdenklichen Sprachmitteln ein leistungsfaehiges Grundgeruest bildet, und daran angeflanscht Quick-und-Dirty-Funktionen, die schnelle Aenderungen erlauben und durch ihre Einfachheit auch gut verstaendlich sind. Da verzichtet man dann bewusst auf Vererbung, Interfaces usw.
Ein Informatiker, der was auf sich haelt wird sich also eher im hinteren Teil aufhalten und nicht in den Anbauten mitmurksen wollen.
Ich weise von mir, in technischen Dingen und allen Details unfähig zu sein zu müssen, bloss weil ich Informatiker bin. :)
Das lässt sich bei Eignung durchaus miteinander verbinden. Muss aber nicht. Das gilt auch für Ings. Bloss weil man sich Ing nennen darf, wird man nicht automatisch zum allumfassenden Genie. Auch wenn manche Ings ihren Status zum Anlass nehmen, sich über alles erhaben zu fühlen, das sie nicht verstehen. Grundlagen guter Programmierung inklusive.
Unter Activities->Code sind mir sofort die oben erwähnten nicht-programmierenden Informatiker eingefallen:
The advocates of XP argue that the only truly important product of the
system development process is code – software instructions that a computer
can interpret. Without code, there is no working product.
Die KISS Faustregel ist ein Lieblingskonzept vom Emil P von Bethesda.
Der verwechselt aber irgendwie, dass sich das eher auf den Programmcode bezieht, und weniger auf ingame Spielinhalte.
So hat das Starfield-Game von Bethesda praktisch die ganzen negativsten Seiten von den Bethesdaspielen aufakkumuliert.
Spielspaß? Wer braucht den schon.
MS gibt sich durchaus Mühe, da noch was geradezubügeln - aber da hat wohl noch einer ein Bethesdaspiel gespielt. ;)
The advocates of XP argue that the only truly important product of the
system development process is code – software instructions that a computer
can interpret. Without code, there is no working product.
Die Aussage ist richtig, aber unvollständig und damit falsch. Gerade bei "komplexeren" Softwareprodukten ist das Konzept und die Dokumentation mindestens genau so wichtig.