Forum: PC-Programmierung switch(Funktion()) möglich?


von Wilhelm M. (wimalopaan)


Lesenswert?

Heiko L. schrieb:
> Du kennst den Unterschied zwischen Einheit und Betrag doch.
> Wenn man statt 5m 5ft schreibt, ist es falsch. Das geht auch mit
> Length<feet>(5) oder ähnlichem.

Selbstverständlich kann ich eine Entfernung falsch abgeben.

Ich kann auch einfach die falsche Formel für den schiefen Wurf ansetzen. 
Ich kann N Fehler machen. Aber wenn ich durch ganz einfache Maßnahmen 
schon einige dieser Fehler ausschließen kann, bin ich schon ein Stück 
weiter.

Hinzu kommt noch, das
1
Meter d = 1_m;
selbsterklärend ist, was
1
double d = 0.001;
nicht ist.

Der Leitsatz ist: eine Schnittstelle sollte leicht richtig und schwer 
falsch zu benutzen sein!

: Bearbeitet durch User
von Heiko L. (zer0)


Lesenswert?

Wilhelm M. schrieb:
> Der Leitsatz ist: eine Schnittstelle sollte leicht richtig und schwer
> falsch zu benutzen sein!

Na das wird aber schwierig, wenn alle Typen maximal restringiert sind 
und jedes Modul seine eigenen Einheiten definiert.
Da hätte ich dieses passende Beispiel aus dem Bereich 3d-Grafik. 
Grundsätzlich hat da echt JEDE lib, die man benutzt seinen eigenen 
"Vector" definiert. Da passiert es dann schon mal, dass beim Umformen 
etwas falsch läuft... (buffer overflow)

von Wilhelm M. (wimalopaan)


Lesenswert?

Heiko L. schrieb:
> Wilhelm M. schrieb:
>> Der Leitsatz ist: eine Schnittstelle sollte leicht richtig und schwer
>> falsch zu benutzen sein!
>
> Na das wird aber schwierig, wenn alle Typen maximal restringiert sind
> und jedes Modul seine eigenen Einheiten definiert.
> Da hätte ich dieses passende Beispiel aus dem Bereich 3d-Grafik.
> Grundsätzlich hat da echt JEDE lib, die man benutzt seinen eigenen
> "Vector" definiert. Da passiert es dann schon mal, dass beim Umformen
> etwas falsch läuft... (buffer overflow)

Na dann gibt doch mal ein konkretes Beispiel ...

von batman (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Dann bist du wahrscheinlich auch der Meinung, dassdouble distance1 =
> 42.0; // km?
> double distance2 =  1.0; // mm? cm? who knows ...
> double l = distance1 + distance2;
> einen Wert in l von etwa 43.0 ergeben sollte?

Hier hast du noch selbst double für eine distance verwendet, als 
sinnvolles Beispiel im Gegensatz zur "sinnlosen" Addition von 
Fehlercodes. :)

Also was stimmt nun, sind nun alle Operationen der double-Arithmetik auf 
Distanzen sinnvoll und ist double ein geeigneter Datentyp für Distanzen 
(OHNE die Einheit zu berücksichtigen)?

Tja, hinterher ist man immer schlauer und weiß, wie es besser gewesen 
worden wäre, nech. ;)

von Wilhelm M. (wimalopaan)


Lesenswert?

batman schrieb:
> Wilhelm M. schrieb:
>> Dann bist du wahrscheinlich auch der Meinung, dassdouble distance1 =
>> 42.0; // km?
>> double distance2 =  1.0; // mm? cm? who knows ...
>> double l = distance1 + distance2;
>> einen Wert in l von etwa 43.0 ergeben sollte?
>
> Hier hast du noch selbst double für eine distance verwendet, als
> sinnvolles Beispiel im Gegensatz zur "sinnlosen" Addition von
> Fehlercodes. :)

Hast Du es auch gelesen, das Beispiel?
Du meinst also auch 42km + 1mm = 43km ?

Und schon ist die Raumsonde wieder vorbei ...


> Also was stimmt nun, sind nun alle Operationen der double-Arithmetik auf
> Distanzen sinnvoll und ist double ein geeigneter Datentyp für Distanzen
> (OHNE die Einheit zu berücksichtigen)?

Distanzen sind ohne Einheit gar nicht darstellbar.

von Vincent H. (vinci)


Lesenswert?

batman schrieb:
> Wilhelm M. schrieb:
>> Dann bist du wahrscheinlich auch der Meinung, dassdouble distance1 =
>> 42.0; // km?
>> double distance2 =  1.0; // mm? cm? who knows ...
>> double l = distance1 + distance2;
>> einen Wert in l von etwa 43.0 ergeben sollte?
>
> Hier hast du noch selbst double für eine distance verwendet, als
> sinnvolles Beispiel im Gegensatz zur "sinnlosen" Addition von
> Fehlercodes. :)
>
> Also was stimmt nun, sind nun alle Operationen der double-Arithmetik auf
> Distanzen sinnvoll und ist double ein geeigneter Datentyp für Distanzen
> (OHNE die Einheit zu berücksichtigen)?
>
> Tja, hinterher ist man immer schlauer und weiß, wie es besser gewesen
> worden wäre, nech. ;)


Du hast weder kapiert dass das Distanz Beispiel ein DONT und kein DO 
war, noch siehst du die Vorteile starker Typisierung bei der Arithmetik.

Also... nein, du bist hinterher nicht schlaucher, "nech". ;)

von batman (Gast)


Lesenswert?

Lies dir noch mal den ganzen Beitrag durch. Das DONT war da die Addition 
der Fehlercodes.

von batman (Gast)


Lesenswert?

..was er dann später auch wieder fallenließ und zur Multiplikation 
auswich. Naja, sinnloses Versteckspiel hier.

von Heiko L. (zer0)


Lesenswert?

Wilhelm M. schrieb:
> Na dann gibt doch mal ein konkretes Beispiel ...

Warum es problematisch ist, verschiedene Vector-Klassen mit OpenGL zu 
verwenden? Weil man immer an den Punkt kommt, wo man die Werte verwenden 
muss.
Da passiert es dann u.U. dass man glColor4fv schreibt, wo glColor3fv 
stehen müsste, wenn da zu viele Sachen durcheinander fliegen. C++ macht 
die Sache da potentiell noch unübersichtlicher, weil man dort ggf. 
implizite Conversions über primitive Typen triggern kann, die man aber 
leider braucht, weil der Source-Code sonst so clumsy wird.
Und das ist bei Sensoren nicht anders: in welcher Einheit arbeit das 
Ding?
Genauso wenig wie beim Datenaustausch im Netzwerk: Kommen die Werte in 
Big oder Little Endian?

Ich würde wetten, dass das ganze NASA Zeugs in ADA geschrieben war und 
es trotzdem nichts genützt hat...

von Heiko L. (zer0)


Lesenswert?

Hier ist übrigens noch eine interessante Studie zum Thema 
"Fehleranfälligkeit von Programmiersprachen"
https://cacm.acm.org/magazines/2017/10/221326-a-large-scale-study-of-programming-languages-and-code-quality-in-github/fulltext

von Nop (Gast)


Lesenswert?

Heiko L. schrieb:

> Ich würde wetten, dass das ganze NASA Zeugs in ADA geschrieben war und
> es trotzdem nichts genützt hat...

Die Sache war etwas komplexer, und natürlich hätte C++ hier nichts 
genutzt.

"The problem involved reading data from a file and a miscommunication 
about what the numbers in the file were. I don't know of any language, 
no matter how type-strict, that forces you to tag the string "123.45" in 
a file with the units of force (newtons vs foot-pounds), nor do I know 
of any language, no matter how type-loose, in which you could not impose 
such a convention if you wanted to."

Dazu kam dann noch, daß der Code ohne ausreichendes Review 
wiederverwendet wurde, obwohl seine Wichtigkeit von "reines Logfile" zu 
"missionsentscheidend" angestiegen war. Außerdem waren die Teams strikt 
getrennt. Die Bodenmannschaften am Ende waren auch noch unerfahren, 
sonst hätten sie das rechtzeitig bemerken können.

Übrigens wurde die Anomalie frühzeitig durchaus entdeckt, aber die 
Reports dazu wurden ignoriert.

https://skeptics.stackexchange.com/questions/7276/was-nasa-s-mars-climate-orbiter-lost-because-engineering-teams-used-different-me

von A. S. (Gast)


Lesenswert?

Nop schrieb:
> Richtig macht man das so, daß man in einem einzigen Datenformat und
> einer einzigen Einheit rechnet, und zwar konsistent und überall. Bei
> Bedarf kann bei der Ausgabe in andere Datentypen oder Einheiten
> konvertiert werden.

Ein Großteil der Diskussion um Einheiten hier resultiert wohl daher, 
dass einige den Sinn der Sätze nicht erfasst haben, weil sie selber noch 
nicht an dem Punkt waren.

 Ein auch im metrischen häufiges Beispiel wären Winkel, wo man Rad (für 
Mathe) und Grad (für Nutzer) braucht.

von mh (Gast)


Lesenswert?

Nop schrieb:
> Heiko L. schrieb:
>
>> Ich würde wetten, dass das ganze NASA Zeugs in ADA geschrieben war und
>> es trotzdem nichts genützt hat...
>
> Die Sache war etwas komplexer, und natürlich hätte C++ hier nichts
> genutzt.
>
> "The problem involved reading data from a file and a miscommunication
> about what the numbers in the file were. I don't know of any language,
> no matter how type-strict, that forces you to tag the string "123.45" in
> a file with the units of force (newtons vs foot-pounds), nor do I know
> of any language, no matter how type-loose, in which you could not impose
> such a convention if you wanted to."

Natürlich hätte C++ da nichts genützt. Aber das Prinzip der strong types 
lässt sich doch 1:1 Übertragen. In die Datei gehört neben dem Betrag der 
Kraft auch die Einheit. Natürlich kann man dann immer noch Fehler machen 
und man kann die Einheit einfach ignorieren. Aber es gibt keine 
Unklarheit über die Einheit dieses Werts.

> Dazu kam dann noch, daß der Code ohne ausreichendes Review
> wiederverwendet wurde, obwohl seine Wichtigkeit von "reines Logfile" zu
> "missionsentscheidend" angestiegen war. Außerdem waren die Teams strikt
> getrennt. Die Bodenmannschaften am Ende waren auch noch unerfahren,
> sonst hätten sie das rechtzeitig bemerken können.
>
> Übrigens wurde die Anomalie frühzeitig durchaus entdeckt, aber die
> Reports dazu wurden ignoriert.
>
> 
https://skeptics.stackexchange.com/questions/7276/was-nasa-s-mars-climate-orbiter-lost-because-engineering-teams-used-different-me

Das zeigt doch noch um so deutlicher, wie wichtig es ist Fehler so früh 
wie möglich zu verhindern, in diesem Fall indem man den Wert mit einer 
Einheit ausstattet.

von Nop (Gast)


Lesenswert?

mh schrieb:

> In die Datei gehört neben dem Betrag der Kraft auch die Einheit.

Genau das steht doch in dem Zitat - und das hätte man auch in einer 
Sprache mit schwacher bis fehlender Typisierung machen können. Man hätte 
es auch in C machen können. Hat man aber nicht, und DAS war das Problem.

Auch C++ hätte einen nicht gezwungen, Einheiten in die Datei zu 
schreiben - und man hätte es daher auch in C++ nicht gemacht. Und zwar 
aus denselben Gründen, wieso man es in der Realität nicht gemacht hat.

von mh (Gast)


Lesenswert?

Nop schrieb:
> mh schrieb:
>
>> In die Datei gehört neben dem Betrag der Kraft auch die Einheit.
>
> Genau das steht doch in dem Zitat - und das hätte man auch in einer
> Sprache mit schwacher bis fehlender Typisierung machen können. Man hätte
> es auch in C machen können. Hat man aber nicht, und DAS war das Problem.
>
> Auch C++ hätte einen nicht gezwungen, Einheiten in die Datei zu
> schreiben - und man hätte es daher auch in C++ nicht gemacht. Und zwar
> aus denselben Gründen, wieso man es in der Realität nicht gemacht hat.

Ok ... möchtest du vllt noch ein paar Wörter in dem Zitat weglassen, 
wenn du die anderen Sätze schon weglässt?

von Nop (Gast)


Lesenswert?

mh schrieb:

> Ok ... möchtest du vllt noch ein paar Wörter in dem Zitat weglassen,
> wenn du die anderen Sätze schon weglässt?

Ich bin auf das Wesentliche eingegangen. Das Zitat von Norvig hat Deinen 
Punkt schließlich schon vorweggenommen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Die Problematik beim Mars Orbiter ist dieselbe wie in diesem Thread 
generell:

Hier gibt es Leute, die sagen:

A) Es ist doch alles dokumentiert, es kann deswegen nichts schief gehen.

oder

B) Wir wissen, dass es nicht gut / falsch ist. Deswegen ändern wir es 
nicht.

Genauso wurde damals gehandelt.

Es ist schon erschütternd, das manche nicht einmal die Chance ergreifen, 
Dinge zu verbessern.

Aus der Rezension zu "Elements of Programming":

Ask a mechanical, structural, or electrical engineer how far they would 
get without a heavy reliance on a firm mathematical foundation, and they 
will tell you, ‘not far.’ Yet so-called software engineers often 
practice their art with little or no idea of the mathematical 
underpinnings of what they are doing. And then we wonder why software is 
notorious for being delivered late and full of bugs, while other 
engineers routinely deliver finished bridges, automobiles, electrical 
appliances, etc., on time and with only minor defects.

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Yet so-called software engineers often
> practice their art with little or no idea of the mathematical
> underpinnings of what they are doing.

Sowas wie z.B. OOP hat auch keine mathematische Grundlage. Und im 
Übrigen braucht man sich nur mal Code von Mathematikern und 
Wissenschaftlern anzuschauen, diese Fortranwüsten (auch dann, wenn sie 
nicht in Fortran geschrieben sind).

Konkret zum Mars-Orbiter hätte mein Vorschlag von 1500 Postings weiter 
oben geholfen: man rechnet projektübergreifend immer im selben System. 
Das schafft Konsistenz. Dazu hätte man keine abgefahrene Arithmetik 
gebraucht, die hier im Übrigen wegen der Schnittstelle der Datei sowieso 
nicht geholfen hätte.

von mh (Gast)


Lesenswert?

Nop schrieb:
> Wilhelm M. schrieb:
>> Yet so-called software engineers often
>> practice their art with little or no idea of the mathematical
>> underpinnings of what they are doing.
>
> Sowas wie z.B. OOP hat auch keine mathematische Grundlage. Und im
> Übrigen braucht man sich nur mal Code von Mathematikern und
> Wissenschaftlern anzuschauen, diese Fortranwüsten (auch dann, wenn sie
> nicht in Fortran geschrieben sind).

Du hast offensichtlich sowas von keine Ahnung, was Mathematiker und 
Wissenschafler für Software schreiben.

von Nop (Gast)


Lesenswert?

mh schrieb:

> Du hast offensichtlich sowas von keine Ahnung, was Mathematiker und
> Wissenschafler für Software schreiben.

Ich hab davon so einiges gesehen, danke der Nachfrage.

von Wilhelm M. (wimalopaan)


Lesenswert?

Nop schrieb:
> Wilhelm M. schrieb:
>> Yet so-called software engineers often
>> practice their art with little or no idea of the mathematical
>> underpinnings of what they are doing.
>
> Sowas wie z.B. OOP hat auch keine mathematische Grundlage.

Ja, wissen wir mittlerweile: nur 2'er-Komplimentarithmetik des Datentyps 
int ist wahre Mathematik ;-)

Kennst Du das Buch überhaupt, auf das sich die Rezension bezieht?

> Und im
> Übrigen braucht man sich nur mal Code von Mathematikern und
> Wissenschaftlern anzuschauen,

Genau: Ritchie war Mathematiker, Keringhan war Physiker, Thompson war 
E-Techniker. LOL!

> Konkret zum Mars-Orbiter hätte mein Vorschlag von 1500 Postings weiter
> oben geholfen: man rechnet projektübergreifend immer im selben System.

Ja genau: hat ja wahnsinnig geholfen.

> Das schafft Konsistenz. Dazu hätte man keine abgefahrene Arithmetik
> gebraucht,

Von den Grundrechenarten einige weg zu lassen ist für die schon 
abgefahrene Arithmetik. WoW! Kein Wunder, dass Du mit anderen Dingen 
schnell überfordert bist.

von Nop (Gast)


Lesenswert?

Wilhelm M. schrieb:

> Ja genau: hat ja wahnsinnig geholfen.

Hätte geholfen - wenn man ihn denn gemacht hätte. Vorschläge, die man 
nicht macht bzw. verwirft, helfen nicht soviel. D'oh!

> Von den Grundrechenarten einige weg zu lassen ist für die schon
> abgefahrene Arithmetik.

Es geht nicht um "weglassen". Worum es geht, habe ich mehrfach erklärt. 
Wenn Du es nicht verstehst, lies es nochmal nach - diesmal möglichst 
sinnerfassend.

von Markus F. (mfro)


Lesenswert?

Blöd ist, überhaupt erst auf die Idee zu kommen, man könne Flugbahnen 
(oder in diesem Fall - Drehmomente) mit irgendwas anderem als mit 
SI-Einheiten berechnen (so was kann nur einem Ami einfallen, ich rechne 
ja auch nicht mit kp/Elle, was wertmässig etwa auf dasselbe rauskäme).

Noch blöder ist, wenn die verwendete Einheit (foot-pound) nur um den 
Faktor 1,35 "daneben" liegt, da helfen auch "ingenieurmässige 
Überschlagsrechnungen" angesichts der sowieso vorhandenen 
Ungenauigkeiten wenig.

Aus diesem Kardinalfehler Softwareengineering-Regeln ableiten zu wollen, 
erscheint mir persönlich etwas weit hergeholt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wilhelm M. schrieb:
> Es ist schon erschütternd, das manche nicht einmal die Chance ergreifen,
> Dinge zu verbessern.
>
> Aus der Rezension zu "Elements of Programming":
>
> Ask a mechanical, structural, or electrical engineer how far they would
> get without a heavy reliance on a firm mathematical foundation, and they
> will tell you, not far. Yet so-called software engineers often
> practice their art with little or no idea of the mathematical
> underpinnings of what they are doing. And then we wonder why software is
> notorious for being delivered late and full of bugs, while other
> engineers routinely deliver finished bridges, automobiles, electrical
> appliances, etc., on time and with only minor defects.

Statt ein Buch zu lesen, das erklärt, wie man seine Programme mit viel
Mühe mathematisch untermauert, könnte man auch eine Programmiersprache
lernen, die diese Untermauerung schon von vornherein mitbringt, nämlich
Haskell.

Das Sprachkonzept, das Typsystem, die in der Standardbibliothek
vordefinierten Typen und Typklassen und nicht zuletzt die Syntax sind
stärker als bei allen anderen mir bekannten Programmiersprachen
mathematisch beeinflusst. Zudem erzwingt die Sprache eine mathematische
Denkweise des Programmierers, weswegen schlampige Programmierung in
Haskell sehr schwer ist.

Der Softwarebug des Mars-Orbiters hat seine Ursache aber nicht in der
fehlenden mathematischen Untermauerung der Software, sondern ganz
einfach in der fehlenden Kommunikation zwischen den Entwicklern. Reden
diese nicht miteinander, hilft auch noch so viel Mathematik nicht,
Fehler zu vermeiden.

von Carl D. (jcw2)


Lesenswert?

Niemand wird daran gehindert, die "distance" Klasse inklusive 
Stream-Io-Operatoren zu implementieren. Dann MUSS eben in der Datei eine 
Einheit dabei stehen. Und dann ist es egal, ob man Unterarme, Daumen 
oder Füße als Referenz benutzt oder ob man auf klimatisierte 
Edelmetallzylinder schwört, das Ergebnis in der eingelesenen Variable 
ist eine Distanz.

von Nop (Gast)


Lesenswert?

Carl D. schrieb:
> Dann MUSS eben in der Datei eine Einheit dabei stehen.

Die hätte man aber selbst dann haben können, wenn die schreibende Seite 
in DOS-Basic gewesen wäre. Dann wäre übrigens der anderen Projektseite 
auch klar gewesen, was da eigentlich steht, selbst wenn die in 
Excelmacros gearbeitet hätte.

Der Punkt ist, daß das eben nicht gemacht wurde. Der Einheitenfehler kam 
eben nicht so zustande, wie hier im Thread zunächst suggeriert wurde.

von Carl D. (jcw2)


Lesenswert?

Nop schrieb:
> Carl D. schrieb:
>> Dann MUSS eben in der Datei eine Einheit dabei stehen.
>
> Die hätte man aber selbst dann haben können, wenn die schreibende Seite
> in DOS-Basic gewesen wäre. Dann wäre übrigens der anderen Projektseite
> auch klar gewesen, was da eigentlich steht, selbst wenn die in
> Excelmacros gearbeitet hätte.
>
> Der Punkt ist, daß das eben nicht gemacht wurde. Der Einheitenfehler kam
> eben nicht so zustande, wie hier im Thread zunächst suggeriert wurde.

Man kann das sogar in Assembler manchen, aber es sollte eben
  "Easy TO use correct"
und
  "Difficult TO use incorrect"

Denn codierende Dumpfbacken findet man überall und muß man halt 
irgendwie unter Kontrolle bringen. Alternativ abschrecken und damit los 
werden. Klappt!

von Nop (Gast)


Lesenswert?

Carl D. schrieb:

> Man kann das sogar in Assembler manchen, aber es sollte eben
>   "Easy TO use correct"
> und
>   "Difficult TO use incorrect"

Das wäre durch Einheiten in der Datei bereits erfüllt worden, ebenso wie 
durch konsistente Benutzung ein- und desselben Einheitensystems im 
ganzen Projekt. Das ganze Beispiel taugt somit eben nicht zur 
Untermauerung von Spezialarithmetik, die in diesem Fall den Fail auch 
nicht verhindert hätte - denn an dem Punkt, wo die zum Zug gekommen 
wäre, wäre der Fehler bereits passiert gewesen.

Einfach mal hören "Mars-Sonde, Einheitenfehler" und dann drauflos 
argumentieren funktioniert so nicht.

von Carl D. (jcw2)


Lesenswert?

Nop schrieb:
> Carl D. schrieb:
>
>> Man kann das sogar in Assembler manchen, aber es sollte eben
>>   "Easy TO use correct"
>> und
>>   "Difficult TO use incorrect"
>
> Das wäre durch Einheiten in der Datei bereits erfüllt worden, ebenso wie
> durch konsistente Benutzung ein- und desselben Einheitensystems im
> ganzen Projekt. Das ganze Beispiel taugt somit eben nicht zur
> Untermauerung von Spezialarithmetik, die in diesem Fall den Fail auch
> nicht verhindert hätte - denn an dem Punkt, wo die zum Zug gekommen
> wäre, wäre der Fehler bereits passiert gewesen.
>
> Einfach mal hören "Mars-Sonde, Einheitenfehler" und dann drauflos
> argumentieren funktioniert so nicht.

Die "Spezialarithmetk" wäre schon durch den ersten Test gefallen, hätte 
sie Zahlensalat ohne Einheiten vorgefunden.

Ich z.B. bin froh, daß mein Gehalt mit Wert und Einheit überwiesen wird 
und keiner unterwegs Rätseln muß ob das Euro oder Rupien sein sollen.

Das Mars-Problem war nicht, daß die Teams nicht vereinbart hatten, was 
in der Datei stehen soll, sondern daß sie es nicht reingeschrieben 
haben. Dazu brauch ich keinen Bericht lesen, das kann mein Hirn 
selbstständig ableiten.

von Nop (Gast)


Lesenswert?

Carl D. schrieb:

> Das Mars-Problem war nicht, daß die Teams nicht vereinbart hatten, was
> in der Datei stehen soll, sondern daß sie es nicht reingeschrieben
> haben.

Eben. Hätten sie es aber getan, dann wäre auf der Empfängerseite mit 
ganz banaler double-Arithmetik alles paletti gewesen.

Sie haben es übrigens deswegen nicht reingeschrieben, weil der Code 
ursprünglich bloß für eine unwesentliche Log-Funktion war - und dank 
Wiederverwendung dann auf einmal missionsentscheidend wurde.

Direkte Wiederverwendung von Code ist keine so gute Idee, wenn dabei 
dessen Wichtigkeitsstufe massiv ansteigt. Wie man schon aus menschlicher 
Textanalyse weiß, ist Text eben nicht nur ein Dokument, hier der Code, 
sondern eben auch das, was nicht im Dokument selber steht, also der 
Kontext.

Das ist eine Erkenntnis, die ausgerechnet für Geisteswissenschaftler 
absolut trivial gewesen wäre, die aber in "hard sciences" oftmals 
untergeht.

von A. S. (Gast)


Lesenswert?

“Numbers as invented by mathematicians are abstract and beautiful. This 
should not be spoiled by engineers”

(Die Reaktion vor 50 Jahren, mit der Einheitenrechnungen der Ingenieure 
abgewiegelt wurden)

von MaWin (Gast)


Lesenswert?

Warum glauben so viele, man könne dem Einheitenchaos begegnen, indem man 
die Einheiten mit Magie irgendwie konvertiert?

Das Gegenteil ist der Fall.
Wenn man 1 au + 1 mm rechnet, dann kann man das in C++ sicher machen mit 
Operatorüberladung und Typen.
Sinnvoll ist es trotzdem nicht, denn das Programm ist trotzdem falsch.
Z.B. Rundungsfehler werden so nur noch besser vor dem Programmierer 
versteckt. (vgl. https://en.wikipedia.org/wiki/Loss_of_significance )

Besser einigt man sich global im Projekt auf sinnvolle Einheiten und 
verwendet diese dann konsistent.
Dabei hilft einem die Programmiersprache kaum.

Interfaces definieren ist ein soziales und kein technisches Problem.

von Nop (Gast)


Lesenswert?

MaWin schrieb:

> Interfaces definieren ist ein soziales und kein technisches Problem.

Wobei diese Architektur mit zwei Systemen und verschiedenen 
Einheitensystemen dafür ja ein Beispiel ist - Stichwort "Conways's Law".

Und ja, soziale Probleme mit technischen Mitteln lösen zu wollen 
funktioniert meistens nicht - was Geeks nicht daran hindert, es immer 
wieder zu versuchen. Liegt auch daran, daß sie die Problemklasse oftmals 
nur mangelhaft verstehen.

von Carl D. (jcw2)


Lesenswert?

Nop schrieb:
> Carl D. schrieb:
>
>> Das Mars-Problem war nicht, daß die Teams nicht vereinbart hatten, was
>> in der Datei stehen soll, sondern daß sie es nicht reingeschrieben
>> haben.
>
> Eben. Hätten sie es aber getan, dann wäre auf der Empfängerseite mit
> ganz banaler double-Arithmetik alles paletti gewesen.
>
> Sie haben es übrigens deswegen nicht reingeschrieben, weil der Code
> ursprünglich bloß für eine unwesentliche Log-Funktion war - und dank
> Wiederverwendung dann auf einmal missionsentscheidend wurde.

Ok, in Summe: weil man sich keine Mühe gemacht hat, es von Anfang an 
richtig zu machen, ist richtig machen blöd.
Typische Ausrede für Frickel-Code, "reicht doch so", die ich in 30Jahren 
Softwareentwicklung oft genug gehört hab.

> Direkte Wiederverwendung von Code ist keine so gute Idee, wenn dabei
> dessen Wichtigkeitsstufe massiv ansteigt.

Wenn er eben nach der Methode "reicht schon" hingeschmiert wurde. Wenn 
es dabei um Aufwand gehen sollte, dann könnte man auch nach dem Risiko 
fragen. 5Tage gespart + x% Risiko einen 9-Stelligen Betrag zu verlieren. 
Eigentlich eine simple Rechnung. Zumal "richtig" oft nicht länger 
dauert, nur eben halt bei manchen länger als ihre Laufzeit.

> Wie man schon aus menschlicher
> Textanalyse weiß, ist Text eben nicht nur ein Dokument, hier der Code,
> sondern eben auch das, was nicht im Dokument selber steht, also der
> Kontext.
>
> Das ist eine Erkenntnis, die ausgerechnet für Geisteswissenschaftler
> absolut trivial gewesen wäre, die aber in "hard sciences" oftmals
> untergeht.

Geisteswissenschaftler mögen über den Inhalt einer Datei diskutieren und 
ihn interpretieren, wie sie wollen. Bei dem Projekt waren Ingenieure 
gefragt, die legen fest.

von MaWin (Gast)


Lesenswert?

Carl D. schrieb:
> Wenn er eben nach der Methode "reicht schon" hingeschmiert wurde.

Nein.

Jedes Programm, jeder Programmabschnitt, hat eine Anforderung.
Die Anforderungen an Code der printf befüttert sind ganz andere, als die 
Anforderungen an Code, der Steuerdüsen befeuert.

Wenn jetzt ein Entwickler hingeht und eine printf-Funktion einfach so 
zur Ansteuerung von Steuerdüsen wiederverwendet, dann ist das 
Anforderungsmanagement sehr sehr sehr sehr kaputt. Oder hat der 
Entwickler einfach ignoriert, dass die Anforderungen der Funktion gar 
nicht zu seinen Anforderungen passen? Das ist ein massiver Fehler in 
der Softwareentwicklung. Und zwar lange bevor auch nur eine Zeile des 
fehlerhaften Codes geschrieben wurde.

Der kleinste Teil der Softwareentwicklung ist die Programmierung.

von Nop (Gast)


Lesenswert?

Carl D. schrieb:

> Ok, in Summe: weil man sich keine Mühe gemacht hat, es von Anfang an
> richtig zu machen, ist richtig machen blöd.

Hat zwar nichts mit dem zu tun, was ich geschrieben habe, aber wird 
schon passen.

> Wenn er eben nach der Methode "reicht schon" hingeschmiert wurde.

Man hat für den unwichtigen Code, ALS er unwichtig war, einen 
Junior-Entwickler drangesetzt. In der realen Welt hat man nicht die 
Ressourcen, auch die unwichtigen Sachen von den Obercracks machen zu 
lassen, weil es für die Menge an Code, die weltweit gebraucht wird, 
nicht genug Obercracks gibt.

Das ist auch völlig in Ordnung so - nur die Hochstufung war eben nicht 
OK. In normaler Luftfahrt wäre es ja auch nicht möglich, daß man Code 
aus einem unwichtigen System wie Inflight-Entertainment hernimmt, den 
mal eben in den Turbinencontroller setzt und mit "paßt schon" abnickt.

> Geisteswissenschaftler mögen über den Inhalt einer Datei diskutieren und
> ihn interpretieren, wie sie wollen. Bei dem Projekt waren Ingenieure
> gefragt, die legen fest.

Oder auch nicht. Schlimmer noch, ihnen war weder beim Code noch bei der 
Datei die Bedeutung von "Kontext" bewußt, weswegen sie auch nicht drauf 
gekommen sind, daß sie da etwas festlegen hätten sollen. Eben um 
relevante Information aus dem Kontext in den Text zu ziehen.

Ändert alles nichts daran, daß die Spezial-Arithmetik zum Vermeiden von 
Einheitenfehlern hier weder notwendig noch hinreichend gewesen wäre.

von S. R. (svenska)


Lesenswert?

MaWin schrieb:
> Warum glauben so viele, man könne dem Einheitenchaos begegnen, indem man
> die Einheiten mit Magie irgendwie konvertiert?

Zumal auch nicht alle Einheiten verlustfrei ineinander umgerechnet 
werden können. Loss of Significance ist da nur ein Faktor.

von Heiko L. (zer0)


Lesenswert?

Carl D. schrieb:
> Ok, in Summe: weil man sich keine Mühe gemacht hat, es von Anfang an
> richtig zu machen, ist richtig machen blöd.

Was soll "richtig" denn hier bedeuten? Vermutlich hat der Code genau 
seine ursprüngliche Spec erfüllt. Das war einfach Zweckentfremdung nach 
dem Motto "Wir brauchen etwas hartes, um den Nagel in die Wand zu 
kriegen."
Ein Logfile ist dazu bestimmt, menschenlesbar zu sein und schon deswegen 
zur Kommunikation zwischen Systemen völlig ungeeignet.

von Carl D. (jcw2)


Lesenswert?

Heiko L. schrieb:
> Carl D. schrieb:
>> Ok, in Summe: weil man sich keine Mühe gemacht hat, es von Anfang an
>> richtig zu machen, ist richtig machen blöd.
>
> Was soll "richtig" denn hier bedeuten? Vermutlich hat der Code genau
> seine ursprüngliche Spec erfüllt. Das war einfach Zweckentfremdung nach
> dem Motto "Wir brauchen etwas hartes, um den Nagel in die Wand zu
> kriegen."
> Ein Logfile ist dazu bestimmt, menschenlesbar zu sein und schon deswegen
> zur Kommunikation zwischen Systemen völlig ungeeignet.

Worin besteht das Problem in einem Logfile 42km von 42inch unterscheiden 
zu können? Weil man dann weniger raten kann.
Wenn man Längen protokolliert, dann bestehen die eben aus mehr als einer 
Zahl, dannist es menschen- und maschinenlesbar.
Alles andere ist Pfusch, besonders im hunderte-Mega-$/€-Bereich.

: Bearbeitet durch User
von Heiko L. (zer0)


Lesenswert?

Carl D. schrieb:
> Worin besteht das Problem in einem Logfile 42km von 42inch unterscheiden
> zu können? Weil man dann weniger raten kann.

Es gibt halt unterschiedliche Konventionen in unterschiedlichen 
Bereichen. Geschwindigkeiten werden oft nicht in m/s angegeben. Das wird 
schon so gewesen sein, wie einstmals gedacht war. In ein Logfile eine 
Flughöhe in Inches einzutragen ist absurd, auch wenn es korrekt ist.

von Einer K. (Gast)


Lesenswert?

Heiko L. schrieb:
> In ein Logfile eine
> Flughöhe in Inches einzutragen ist absurd, auch wenn es korrekt ist.
feet

von S. R. (svenska)


Lesenswert?

Auch mm oder yards wären korrekt...

von Carl D. (jcw2)


Lesenswert?

S. R. schrieb:
> Auch mm oder yards wären korrekt...

Mit Meilen wäre man aber viel flexibler. Die gibt es in Einheiten von 
500..11299 SI-Meter. Aber immer wichtig: keine Einheiten reinschreiben!
</ironie>
Wenn ich hier so manches lese, bin ich froh die Schreiber nie persönlich 
zu treffen.

von S. R. (svenska)


Lesenswert?

Ich sprach nicht von "gut", ich sprach von "korrekt".

Und nein, zwingend Meter oder andere SI-Einheiten in Logfiles schreiben 
ist nicht überall die beste Idee. Wenn das intern verwendete 
Einheitensystem aus Timer-Ticks und Fixpoint-Arithmetik besteht, ist 
eine Float-Umrechnung fürs Log vermutlich sogar ziemlich doof.

Aber was schreibe ich hier, ihr habt die Weisheit natürlich auch alle 
mit Löffeln gefressen.

von Einer K. (Gast)


Lesenswert?

S. R. schrieb:
> Aber was schreibe ich hier, ihr habt die Weisheit natürlich auch alle
> mit Löffeln gefressen.

Wie so "auch"?

Wenn dann: ICH!

von Nop (Gast)


Lesenswert?

Es ist übrigens völlig normal, daß die Einheit nicht mitgesendet wird. 
Das wird es in Autos und Flugzeugen auch nicht. Was es da aber gibt, 
sind klare Dokumente, die das Nachrichtenformat im Detail beschreiben, 
und da steht die Einheit dann drin.

von Schönen Sonntag (Gast)


Lesenswert?

Ihr diskutiert sehr nahe am Thema. :-(

Der Thread wurde geentert und ist gekentert.

von Einer K. (Gast)


Lesenswert?

Naja...

Das ursprüngliche Thema wurde schon längst tot geritten.
Es wurde doch alles schon dazu gesagt.
Nur noch nicht von jedem.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.