Ich bin Softwareingenieur mit mehreren Jahre Beruferfahrung im Bereich
Maschinenbau. Meine bisherige Erfahrung ist, dass selbst in nahmhaften
Unternehmen dieser Branche komplexe (Hochsprachen-)Software auf
abenteuerliche Art und Weise entsteht. Es gibt fast keinen
Designprozess! Aus dem Studium und eigenen Projekten kenne ich viele
Vorgehensmodelle, Strukturierungs- und Spezifizierungsprozesse, UML,
Requirements-Engineering, Pflicht- und Lastenheft... nichtmal letzteres
wird in der Realität konsequent gemacht, zumindest nicht für Software im
Maschinenbau. Bei Microsoft, SAP und anderen Firmen des
Nicht-Maschinenbau ist das zumindest besser.
Man mag zu trockenen Planungsprozessen stehen wie man will, ganz ohne
diese Planung bricht einem ab einer gewissen Komplexität das Dach übern
Kopf zusammen. Seit über 25 Jahren sind diese Effekte bekannt! Und
dennoch geht die Entwicklung seit Jahren dahin, dass
Anforderungsmanagement durch Scrum ersetzt wird... hatte ich bisher
einfach nur Pech mit den Firmen oder ist das "branchenüblich"?
Ing schrieb:> hatte ich bisher einfach nur Pech mit den Firmen
Oder mit der Berufswahl.
> Aus dem Studium und eigenen Projekten kenne ich viele Vorgehensmodelle,> Strukturierungs- und Spezifizierungsprozesse, UML,> Requirements-Engineering, Pflicht- und Lastenheft... nichtmal letzteres> wird in der Realität konsequent gemacht, zumindest nicht für Software im> Maschinenbau.
Du solltest es als Chance sehen: diese Strukturen müssen dort alle noch
irgendwie implementiert werden. Sonst kann das ja niemals gutgehen!
> Bei Microsoft, SAP und anderen Firmen des> Nicht-Maschinenbau ist das zumindest besser.
Träum weiter. Dort kommen auf 1 Programmierer eben 3 Verwalter, die als
Consulter die ganzen "Requirements" beim Kunden einsammeln, ausführlich
doumentieren, dem Programmierer sagen wie sie die Anforderungen des
Kunden verstanden haben und dann kurz vor Ende des Geldes irgendwas
abliefern, das hinterher in 2 Jahren soweit zusammengeflickt wird, bis
es annähernd das tut, was die bisherige Lösung auch schon konnte.
Da kommt es dann schon mal vor, dass die firmeneigene IT als Ziel
ausruft: "die Nachfolgelösung ist nicht schneller oder besser als die
bisherige". Das möchte ich mal über eine meiner Maschinensteuerungen vor
der ganzen Firma verkünden wollen...
Lothar M. schrieb:> Träum weiter. Dort kommen auf 1 Programmierer eben 3 Verwalter, die als> Consulter die ganzen "Requirements" beim Kunden einsammeln, ausführlich> doumentieren, dem Programmierer sagen, wie sie den Kunden verstanden> haben und dann kurz vor Ende des Geldes irgendwas abliefern, das> hinterher in 2 Jahren soweit zusammengeflickt wird, bis es annähernd as> tut, was die bisherige Lösung auch schon konnte.
:-)
Mein persönliches Highlight war mal einer unserer "Berater" der mit
einem Kunden vereinbart hatte dass wir (SW-Entwicklung) "mal was
machen", der Kunde es sich dann ansieht und dann sagt wie er es gerne
hätte.
Zum Festpreis!
Ing schrieb:> Anforderungsmanagement durch Scrum ersetzt wird... hatte ich bisher> einfach nur Pech mit den Firmen oder ist das "branchenüblich"?
Wohl eher branchenübergreifend.
Welche Projekte waren denn das? Warst du als Interner dabei oder als
Externer?
Ich war schon in einigen Firmen angestellt. Und alle mit ausufernder
"Vorgehensmodelle, Strukturierungs- und Spezifizierungsprozesse, UML,
Requirements-Engineering, Pflicht- und Lastenheft" kamen nicht inne
Pötte und haben keine bessere Qualität abgeliefert.
Weniger ist manchmal mehr. Aber gewiss ganz sollte man sowas nicht
weglassen. Manche übertreiben es mit diesem Bla Bla jedoch ganz
gewaltig.
Udo S. schrieb:> Mein persönliches Highlight war mal einer unserer "Berater" der mit> einem Kunden vereinbart hatte dass wir (SW-Entwicklung) "mal was> machen", der Kunde es sich dann ansieht und dann sagt wie er es gerne> hätte.
Ein Traum! Da kann man sich mal ein nettes Projekt ausdenken fern von
wirtschaftlichen Zwängen, sich ein paar neue Technologien aneignen und
ausnahmsweise mal nicht Quick-and-Dirty coden. Dass der Kunde dann am
Ende nichts damit anfangen kann ist sein Problem...
Ing schrieb:> Und> dennoch geht die Entwicklung seit Jahren dahin, dass> Anforderungsmanagement durch Scrum ersetzt wird...
Normal, weil es oft keine genauen Anforderungen gibt. Keiner weiß so
genau was die Millionen potentielle Nutzer so genau wollen. Bei
Facebook, WhatsApp & Co wird auch kein Lastenheft geschrieben - es
werden diverse Dinge ausprobiert, und die die gut ankommen weiter
ausgebaut. Dann muss man auch den Mut haben, wenig benutzte Features
wieder einzustampfen, weil die letztlich nur Wartungsaufwand und damit
Geld kosten.
Ing schrieb:> Ich bin Softwareingenieur mit mehreren Jahre Beruferfahrung im> Bereich> Maschinenbau. Meine bisherige Erfahrung ist, dass selbst in nahmhaften> Unternehmen dieser Branche komplexe (Hochsprachen-)Software auf> abenteuerliche Art und Weise entsteht. Es gibt fast keinen> Designprozess! Aus dem Studium und eigenen Projekten kenne ich viele> Vorgehensmodelle, Strukturierungs- und Spezifizierungsprozesse, UML,> Requirements-Engineering, Pflicht- und Lastenheft... nichtmal letzteres> wird in der Realität konsequent gemacht, zumindest nicht für Software im> Maschinenbau. Bei Microsoft, SAP und anderen Firmen des> Nicht-Maschinenbau ist das zumindest besser.
Ist aussserhalb von Microsoft und SAP nicht nur im Maschinenbau so !
> Man mag zu trockenen Planungsprozessen stehen wie man will, ganz ohne> diese Planung bricht einem ab einer gewissen Komplexität das Dach übern> Kopf zusammen.
So isses !
> Seit über 25 Jahren sind diese Effekte bekannt! Und> dennoch geht die Entwicklung seit Jahren dahin, dass> Anforderungsmanagement durch Scrum ersetzt wird... hatte ich bisher> einfach nur Pech mit den Firmen oder ist das "branchenüblich"?
Scrum ist halt der heisse Scheiss. Da wird der Bock zum Gärtner gemacht,
Kritik ist sektenartig nicht erwünscht. Meckern über Scheiss
Anforderungen ist Vergangenheit, sieh zu wie du ohne klar kommst. Am
Ende steigt der Druck auf die Entwickler noch mehr, und es wird
gefrickelt bis der Arzt kommt. Verstehe nicht, wie mancher Entwickler
das auch noch gut findet.
Das mit dem Designprozess ist toll. Ich hatte mal so ne UML Phase, wo
ich 10 Jahre an mehreren UML Tools mitgearbeitet hab. Hab ich sehr viel
bei gelernt.
Kannst aber in der Praxis alles vergessen. Was ich jetzt erlebe ist,
dass die GeschFü Morgens die Spezifikation umwirft und erwartet, dass
paar Stunden später eine Version zum Testen bereitsteht. Da ist genau 0
Zeit, irgendwas zu dokumentieren o.ä.
Neue Funktionen sollen im Stundentakt eingebaut werden. Zum Testen
bleibt keinerlei Zeit.
FrustrierterComputerBastler schrieb:> Das mit dem Designprozess ist toll. Ich hatte mal so ne UML Phase,> wo ich 10 Jahre an mehreren UML Tools mitgearbeitet hab. Hab ich sehr> viel bei gelernt.>> Kannst aber in der Praxis alles vergessen. Was ich jetzt erlebe ist,> dass die GeschFü Morgens die Spezifikation umwirft und erwartet, dass> paar Stunden später eine Version zum Testen bereitsteht. Da ist genau 0> Zeit, irgendwas zu dokumentieren o.ä.>> Neue Funktionen sollen im Stundentakt eingebaut werden. Zum Testen> bleibt keinerlei Zeit.
Ja, aber Clean Coden und es soll auch noch ein vernünftiges OOP Design
entstehen. Ist ohne Planung nicht möglich, Scrum ist die Pflicht zu
Frickelei.
Ing schrieb:> kenne ich viele Vorgehensmodelle, Strukturierungs- und> Spezifizierungsprozesse, UML, Requirements-Engineering, Pflicht- und> Lastenheft... nichtmal letzteres wird in der Realität konsequent> gemacht,
Das es so viele gibt, ist oft ein Zeichen, dass keine gut ist.
Wenn Anforderungen bekannt, konstant und formulierbar sind, dann ist das
alles ja ganz schön. Wird z b. bei Sicherheit oft gemacht. Oder wenn man
Programmierer hat, was bei SAP & CO oft der Fall ist.
Aber Innovation, Fortschritt geht so nicht.
Und zusammenbrechen tut es nicht an fehlenden redundanten Dokumenten,
sondern an schlechtem Design. Egal ob in UML oder Code, es gibt halt
Leute mit genialen Lösungen und guter Auffassungsgabe und üble Frickler
(hat mir keiner gesagt, dass ...) und alles dazwischen.
Motzkopp schrieb:> soll auch noch ein vernünftiges OOP Design entstehen. Ist ohne Planung> nicht möglich,
Ein gutes Design ist erst möglich, wenn man einen Großteil der
Anforderungen und Einsatzfälle kennt. Das ist aber bei neuen,
innovativen Dingen erst im Projektverlauf. Wenn ich XY erfinde, baue,
dann kann ich noch nicht wissen, was ich mit XY mache, brauche.
Darum ist refakturieren, redesignen, Funktionen wegwerfen, andere
verbessern wichtig. Das Design muss/kann quasi erst am Ende sauber sein.
Der beste Plan ist wertlos beim ersten Feindkontakt. Oder: vergiss den
Plan, Planung ist alles.
A. S. schrieb:>>> Wenn Anforderungen bekannt, konstant und formulierbar sind, dann ist das> alles ja ganz schön. Wird z b. bei Sicherheit oft gemacht. Oder wenn man> Programmierer hat, was bei SAP & CO oft der Fall ist.
Die Herren aus dem Anforderungs und Produktmanagment usw waren schon
immer bequem und denkfaul, durch Scrum und diesen Scheiss kriegen sie
jetzt auch noch ne offizielle Legimitation dazu. Das sind die ersten,
die der GF erzählen, wie toll das ist, sind ja schließlich damit raus
aus der Verantwortung.
> Aber Innovation, Fortschritt geht so nicht.
Boa ej, hat man dich auch schon erfolgreich durch die Gehirnwäsche
durch, oder was ist das fürn Managergeschwafel?
> Und zusammenbrechen tut es nicht an fehlenden redundanten Dokumenten,> sondern an schlechtem Design. Egal ob in UML oder Code, es gibt halt> Leute mit genialen Lösungen und guter Auffassungsgabe und üble Frickler> (hat mir keiner gesagt, dass ...) und alles dazwischen.
Dann zaubere mir mal ein schönes DB und OOP Klassendesign hin, wenn die
Anforderungen tagesweise bekannt werden und wieder umgeworfen werden.
Nein, man wird aber nicht zugeben, dass das systembedingt kaum möglich
ist, Scrum ist nicht Schuld, das liegt an den Leuten !
A. S. schrieb:> Motzkopp schrieb:> soll auch noch ein vernünftiges OOP Design entstehen. Ist ohne Planung> nicht möglich,>> Ein gutes Design ist erst möglich, wenn man einen Großteil der> Anforderungen und Einsatzfälle kennt.
Da sind wir uns einig !
Das ist aber bei neuen,
> innovativen Dingen erst im Projektverlauf. Wenn ich XY erfinde, baue,> dann kann ich noch nicht wissen, was ich mit XY mache, brauche.>> Darum ist refakturieren, redesignen, Funktionen wegwerfen, andere> verbessern wichtig. Das Design muss/kann quasi erst am Ende sauber sein.
Ja, dann kannst nach agil und CO ständig redisgnen oder neu machen, und
das soll gut sein? Das ist nur teuer ! Und du glaubst ja wohl nicht, das
eine funktionierende Frickelkei in der Praxis später noch redesigned
wird.
> Der beste Plan ist wertlos beim ersten Feindkontakt. Oder: vergiss den> Plan, Planung ist alles.
Man sollte erstmal das Ziel haben den Plan so gut wie möglich zu machen
und nicht mit dem Ansatz Pkan geht sowieso nicht, also lassen wir es
gleich ganz.
Motzkopp schrieb:> Die Herren aus dem Anforderungs und Produktmanagment usw waren schon> immer bequem und denkfaul,
Wer sollen denn diese Leute sein?
Wie gesagt, Programmierer sind im Maschinenbaus selten. Eher
Softwareentwickler / Ingenieure, die etwas neues entwickeln. Zum
nachbauen haben wir Chinesen, für Änderungen Techniker, nachdem es
erfolgreich ist und das Design glattgezogen ist. Nur erfolgreiche
Produkte werden geändert!
A. S. schrieb:> Motzkopp schrieb:> Die Herren aus dem Anforderungs und Produktmanagment usw waren schon> immer bequem und denkfaul,>> Wer sollen denn diese Leute sein?> Wie gesagt, Programmierer sind im Maschinenbaus selten. Eher> Softwareentwickler / Ingenieure, die etwas neues entwickeln. Zum> nachbauen haben wir Chinesen, für Änderungen Techniker, nachdem es> erfolgreich ist und das Design glattgezogen ist. Nur erfolgreiche> Produkte werden geändert!
Programmierer gibt es bei uns auch nicht und mein Bereich ist nicht
Maschbau.
Aber sonne Maschine wird selbst nicht nach Scrum konstruiert und gebaut,
oder ? Warum nicht, ist doch so eine tolle Sache?
Zu der Frage wer diese Leute sein sollen. Ich bin mir sicher, auch im
Maschinenbau, obwohl nicht mein Bereich, gibt es Leute, die einem sagen,
was das Ding am Ende können muss.
Motzkopp schrieb:> Aber sonne Maschine wird selbst nicht nach Scrum konstruiert und gebaut,> oder ? Warum nicht, ist doch so eine tolle Sache?
Das Design einer Maschine ist z.B. dessen Zeichnung.
Das Design einer Software ist z.B. dessen Quelltext.
Der Unterschied zwischen Maschine und Quelltext ist, dass die Produktion
eines Prototypen (Maschine, Maschinencode) im einen Fall hunderte
Stunden dauert, im zweiten Fall nur Sekunden oder Minuten. Darum hat man
beim Maschinenbau weniger Itterationen.
Ob und wie Maschienenbauer ihr Design üblicherweise entwickeln, weiss
ich nicht. Ich hoffe aber mal, dass sie auch Dinge ausprobieren,
gemeinsam besprechen, Ideen im Projektfortschritt aufgreifen etc. Aber
dass konkret Scrum jetzt nicht passt, ist offensichtlich (es gibt keine
täglichen Prototypen, Funktionsmuster)
> Zu der Frage wer diese Leute sein sollen. Ich bin mir sicher, auch im> Maschinenbau, obwohl nicht mein Bereich, gibt es Leute, die einem sagen,> was das Ding am Ende können muss.
Ja, ähnlich Abstrakt wie Du einem Architekten sagst, wie Dein Haus
auszusehen hat. Du sagst ihm, ob es Traufenständig sein soll, wie groß
in etwa, was und welche Zimmer. Und dann macht er einen Entwurf, den Ihr
verfeinert. Und ja, technische Abläufe der Maschine muss der
SW-Ingenieur wirklich selber verstehen und dann Umsetzen. Und ja, wenn
es um z.B. die SPS-SW eine Produktionsstraße geht, dann brauchst Du eher
Programmierer. Aber eine SPS selber, Maschinen mit embeddedter Steuerung
und GUI, Eine Druckmaschine oder Spinnmaschine, … da ist die SW Teil der
Entwicklung.
A. S. schrieb:> Das Design einer Maschine ist z.B. dessen Zeichnung.>> Das Design einer Software ist z.B. dessen Quelltext.
Hä? Der Quelltext IST die Software. Das Design sind Ablauf-, Klassen-,
Zustands- etc. diagramme
c r schrieb:> Hä? Der Quelltext IST die Software. Das Design sind Ablauf-, Klassen-,> Zustands- etc. diagramme
Wenn das so wäre, bräuchte man Programmierer, die die Diagramme in
Quelltext "übersetzen". Wo das der Fall ist (bzw. von einem Tool gemacht
wird), hast Du recht. Ein Matlab-Simulink-Stateflow-Diagramm ist das
Design.
Vielleicht meinst Du eher eine Art "Architektur", "übergeordnete
Struktur" oder so. Das gibt es natürlich im Maschinenbau auch, dass es
übergeordnete Zeichnungen, Erklärungen etc. gibt.
Motzkopp schrieb:> Die Herren aus dem Anforderungs und Produktmanagment usw waren schon> immer bequem und denkfaul, durch Scrum und diesen Scheiss kriegen sie> jetzt auch noch ne offizielle Legimitation
Aber wieso kommt man damit durch? Man stelle sich vor ein Haus zu
beauftragen ohne Planung! "War halt noch nicht klar wo die Fenster und
Türen rein sollen und wo der Schornstein stehen muss"? Bauteil fertigen
ohne Zeichnungen/CAD? Das leuchtet jedem sofort ein, dass da etwas nicht
stimmt. Bei Softwareprojekten ist das Bewusstsein offenbar auf dem Stand
von 1980 verharrt?!
Ing schrieb:> Aber wieso kommt man damit durch?
Weil es funktioniert. Die Branchengrößen machen es vor.
Ing schrieb:> Man stelle sich vor ein Haus zu> beauftragen ohne Planung!
Ein Haus ist keine Software. Da kann man nicht mit einem Klick auf den
Stand von gestern zurückgehen.
Ing schrieb:> Bei Softwareprojekten ist das Bewusstsein offenbar auf dem Stand> von 1980 verharrt?!
Softwareprojekte sind so komplex, und arbeiten in einer so komplexen
Umgebung, dass die Entwicklung unmöglich komplett planbar ist. Bei einem
Haus oder einem Bauteil auf Basis bekannter Technologie ist das was ganz
anderes.
Komplett spezifizierte Anforderungen zu haben ist utopisch - viele
Auftraggeber wissen nicht genau was sie brauchen, und was sich im
Endkundenmarkt durchsetzt ist sowieso unvorhersehbar (klassisches
Beispiel VHS vs Betamax). Man muss mit dem arbeiten was man hat,
flexibel auf neue Erkenntnisse - die man vorher unmöglich haben konnte -
reagieren und das Ziel ständig neu stecken. Scrum hilft dabei.
Wenn man komplette Software-Projekte versucht durchzuplanen und alles
nach dem ursprünglichen Plan entwickelt, d.h. zwischendurch
dazugekommene Erkenntnisse und Technologien ignoriert, wird das Ergebnis
veraltet sein sobald es auf den Markt kommt - daher der Grundsatz, oft
kleine Versionssprünge zu veröffentlichen, um die Nutzer bei Laune zu
halten.
Auch bei Häusern ändern sich gelegentlich die Anforderungen
zwischendurch, und Dinge werden mittendin umgeplant. Das manifestiert
sich dann gelegentlich in kuriosen Konstruktionen.
Man muss diese typische Ingenieurs-Denkweise ablegen, alles durchplanen
und dann zusammenbauen zu können - das ist unrealistisch,
unwirtschaftlich und lässt Möglichkeiten ungenutzt (erinnert an
Planwirtschaft). Software ist lebending, ist nie fertig und kann
jederzeit umgebaut werden. Autoren planen ihre Romane auch selten von
A-Z durch um sie dann nur noch runterzuschreiben - es wird viel
nachträglich korrigiert und vieles spontan entschieden. In beiden Fällen
ist das natürlich ein zweischneidiges Schwert - es verleitet schnell zu
unbeherrschbarem Wildwuchs. Daher gibt es Modelle wie Scrum, um das in
den Griff zu bekommen, ohne auf eine starre Komplettplanung zurück zu
fallen.
Motzkopp schrieb:> Ja, dann kannst nach agil und CO ständig redisgnen oder neu machen, und> das soll gut sein? Das ist nur teuer !
Billiger als Projekte die nur für die Tonne entwickelt werden, weil man
sich ändernde Marktsituationen/-Erkenntnisse ignoriert.
> Und du glaubst ja wohl nicht, das> eine funktionierende Frickelkei in der Praxis später noch redesigned> wird.
Selbstverständlich werden Proof-of-Concept-Ansätze bereinigt und
ausgebaut, wenn sie gut ankommen.
Ing schrieb:> hatte ich bisher> einfach nur Pech mit den Firmen oder ist das "branchenüblich"?
Ist nicht nur dort so. Wenn der Käufer der Produkte keinen
Entwicklungsprozess zwingend in die Auftragsbücher diktiert, ist Wilder
Westen angesagt.
Ing schrieb:> Aber wieso kommt man damit durch?
Weil es einen Aspekt der Realität in der Entwicklung abdeckt, der von
den klassischen Methoden nicht abgedeckt wird, nämlich dass sich
Anforderungen ständig ändern.
> Man stelle sich vor ein Haus zu> beauftragen ohne Planung! "War halt noch nicht klar wo die Fenster und> Türen rein sollen und wo der Schornstein stehen muss"? Bauteil fertigen> ohne Zeichnungen/CAD? Das leuchtet jedem sofort ein, dass da etwas nicht> stimmt.
Schon mal ein Haus gebaut? Alle paar Tag fällt einem eine Änderung ein.
Hier noch was ein bisschen anders, da noch was. Wenn man es sich leisten
kann dann beauftragt man die Änderungen, was viel Geld kostet. Die
Handwerker freut es und man wäre froh, wenn im Gesamtsystem mehr
Flexibilität wäre.
Bei großen Bauprojekten ist es noch schlimmer. Jeden Tag Besprechung in
der man über Fehler in den Plänen diskutiert und mehr oder weniger guten
Pfusch beschließt.
Es ist übrigens ein Gerücht, dass bei Scrum keine Planung stattfindet
und es keine Anforderungen gibt. Jeder Sprint wird voraus geplant und
während eines Sprints wird sich an die Planung gehalten. Änderungen die
während eines Sprints reinkommen werden frühstens im nächsten Sprint
berücksichtigt. Damit das nicht zu lange dauert werden Sprints selber
sehr kurz gehalten.
Scrum bedeutet viel Disziplin.
Das ist das eigentliche Problem. Wenn die Beteiligten undisziplinert
sind, und die meisten sind es, dann kommt Mist raus. Der Product Owner
schafft die Requirements nicht ran oder sie sind extrem wage. Der Scrum
Master sichert nicht den Prozess. Die Sprints werden nicht sauber
geplant. Mitten in den Sprints wird die Richtung geändert, jeder
Programmierer macht was er will.
> Bei Softwareprojekten ist das Bewusstsein offenbar auf dem Stand> von 1980 verharrt?!
Nein, eher von 1950. Undisziplinierte Softwerker brauchen klare
Anweisungen und Kontrolle. Wer glaubt Scrum ohne Disziplin zum Laufen zu
bekommen, dem kann ich nur viel Spaß wünschen.
Ing schrieb:> Man mag zu trockenen Planungsprozessen stehen wie man will, ganz ohne> diese Planung bricht einem ab einer gewissen Komplexität das Dach übern> Kopf zusammen.
Ist das Dach denn schon zusammengebrochen?
Wenn ja:
Nach dem Desaster sollte eigentlich jedem in der Firma klar sein, dass
am Entwicklungsprozess etwas geändert werden muss. Vielleicht bist du
mit deiner Erfahrung der einzige, der in der Lage ist, so etwas
umzusetzen. Sprich doch einfach mal mit den Verantwortlichen darüber.
Evtl. fördert das sogar deine Karriere in der Firma.
Wenn nein:
Vermutlich gibt es bereits so etwas wie einen Entwicklungsprozess, sonst
wüsste ja keiner der Entwickler, was er jeden Tag zu tun hat. Der
Prozess basiert aber möglicherweise nicht auf einem starren Regelwerk
und deckt sich nicht mit den Verfahren, die du in deinem Studium gelernt
hast. Gerade in kleineren Entwicklergruppen kristallisiert sich oft im
Lauf der Zeit eine Vorgehensweise heraus, bei der ein paar erfahrene
Mitarbeiter den Wagen in die richtige Richtung lenken, ohne dass es für
ihre Rolle einen speziellen Namen oder eine genaue Beschreibung gibt.
Solche Vorgehensweisen mögen auf der einen Seite chaotisch anmuten, auf
der anderen Seite können sie aber sehr effizient, gut auf das jeweilige
Projektumfeld hin optimiert und vor allem sehr flexibel sein.
Die standardisierten Vorgehensmodelle, wie sie dir vorschweben, sind
meist auf größere Entwicklergruppen zugeschnitten, wo eine direkte
Kommunikation unter den Mitgliedern nur eingescränkt möglich ist.
Wie groß ist denn bei euch die Anzahl der Softwareentwickler, die
gleichzeitig an einem Projekt arbeiten?
> Softwareprojekte sind so komplex, und arbeiten in einer so komplexen> Umgebung, dass die Entwicklung unmöglich komplett planbar ist. Bei einem> Haus oder einem Bauteil auf Basis bekannter Technologie ist das was ganz> anderes.
Die sind komplex und ja ein Plan Bedarf ständiger Anpassungen. Aber
erstmal
einen Plan haben !
Und wie Wahrheit ist, dass gute Pläne an folgenden Dingen scheitern:
Zeit und Einstellung der Personen ! Man gesteht der Planung zu wenig
Zeit zu und die Anforderungsmanager haben kein Bock zu denken, es ist
halt leichter wenn man schonmal was zum draufklicken hat
und ein paar Dinge ausprobieren kann.
Typisch ist es z.B. dass der Anfoderungsmanager den IST-Zustand gar
nicht genau kennt, erst der Entwickler sagt ihm beim coden dann, was er
noch zu berücksichtigen hat. Das muss man bei Planestellung nicht bis
ins letzte Detail machen, das ist echt aufwendig, aber nen groben Plan
sollte man haben.
> Komplett spezifizierte Anforderungen zu haben ist utopisch - viele> Auftraggeber wissen nicht genau was sie brauchen, und was sich im> Endkundenmarkt durchsetzt ist sowieso unvorhersehbar (klassisches> Beispiel VHS vs Betamax). Man muss mit dem arbeiten was man hat,> flexibel auf neue Erkenntnisse - die man vorher unmöglich haben konnte -> reagieren und das Ziel ständig neu stecken. Scrum hilft dabei.
Oh man, hier haben wir einen der Scrum-Jünger !!! Die Schulungen sind
Gehirnwäsche.
> Wenn man komplette Software-Projekte versucht durchzuplanen und alles> nach dem ursprünglichen Plan entwickelt, d.h. zwischendurch> dazugekommene Erkenntnisse und Technologien ignoriert, wird das Ergebnis> veraltet sein sobald es auf den Markt kommt - daher der Grundsatz, oft> kleine Versionssprünge zu veröffentlichen, um die Nutzer bei Laune zu> halten.> Auch bei Häusern ändern sich gelegentlich die Anforderungen> zwischendurch, und Dinge werden mittendin umgeplant. Das manifestiert> sich dann gelegentlich in kuriosen Konstruktionen.
Es sagt niemand, dass man beim klassischen Vorgehen, nicht den Plan
ständig
anpassen kann. Wie gesagt, das Ziel sollte zuerst sein einen möglichst
guten Plan zu haben, statt einen Plan von vorneherein abzulehnen.
>> Motzkopp schrieb:>> Ja, dann kannst nach agil und CO ständig redisgnen oder neu machen, und>> das soll gut sein? Das ist nur teuer !> Billiger als Projekte die nur für die Tonne entwickelt werden, weil man> sich ändernde Marktsituationen/-Erkenntnisse ignoriert.
So ein Quark. Ich weiss nicht woher die Vorstellung kommt, das nach
Wasserfall keine Änderungen am Plan mehr möglich sind und das das nur
mit Scrum möglich ist.
>> Und du glaubst ja wohl nicht, das>> eine funktionierende Frickelkei in der Praxis später noch redesigned>> wird.> Selbstverständlich werden Proof-of-Concept-Ansätze bereinigt und> ausgebaut, wenn sie gut ankommen.
Bin 25 Jahre im Job ind 4 verschiedenen Unternehmen, das mit dem
Redisgnen klappt in der Praxis nur mit KleinKlein Zeug, das keine
anderen Entscheidungsgewalten abnicken müssen. Z.B. Meine jetzigen
"Kunden", die Fachabteilungen ist das nicht vermittelbar, wofür sie
wertvolle Resourcen opfern sollen. Was haben sie davon ?
Ing schrieb:> Motzkopp schrieb:>> Die Herren aus dem Anforderungs und Produktmanagment usw waren schon>> immer bequem und denkfaul, durch Scrum und diesen Scheiss kriegen sie>> jetzt auch noch ne offizielle Legimitation>> Aber wieso kommt man damit durch? Man stelle sich vor ein Haus zu> beauftragen ohne Planung! "War halt noch nicht klar wo die Fenster und> Türen rein sollen und wo der Schornstein stehen muss"? Bauteil fertigen> ohne Zeichnungen/CAD? Das leuchtet jedem sofort ein, dass da etwas nicht> stimmt. Bei Softwareprojekten ist das Bewusstsein offenbar auf dem Stand> von 1980 verharrt?!
Die kommen damit durch, weil sie näher am Managment und am Kunden
sitzen. Die Entwickler sind die Blaumänner in der Produktion, haben
nichts zu kamellen, dürfen es nur ausbaden.
Notfalls reden die Herren sich raus, schwieriger Kunde, Markt hat sich
geändert, Kunde hat es umentschieden usw. usw..
Meiner Meinung sind diese Ausreden zu 90% vermeidbar, wenn man seinen
Denkapparat ordentlich angeschmissen hätte, aber lieber ersteinmal auf
was rumklicken können und dann umentscheiden um dann damit massenweise
Geld/Entwiclungszeit zu vernichten.
Michael Gugelhupf schrieb:> Ing schrieb:>> Es ist übrigens ein Gerücht, dass bei Scrum keine Planung stattfindet> und es keine Anforderungen gibt. Jeder Sprint wird voraus geplant und> während eines Sprints wird sich an die Planung gehalten. Änderungen die> während eines Sprints reinkommen werden frühstens im nächsten Sprint> berücksichtigt. Damit das nicht zu lange dauert werden Sprints selber> sehr kurz gehalten.>> Scrum bedeutet viel Disziplin.>> Das ist das eigentliche Problem. Wenn die Beteiligten undisziplinert> sind, und die meisten sind es, dann kommt Mist raus. Der Product Owner> schafft die Requirements nicht ran oder sie sind extrem wage. Der Scrum> Master sichert nicht den Prozess. Die Sprints werden nicht sauber> geplant. Mitten in den Sprints wird die Richtung geändert, jeder> Programmierer macht was er will.>>> Bei Softwareprojekten ist das Bewusstsein offenbar auf dem Stand>> von 1980 verharrt?!>> Nein, eher von 1950. Undisziplinierte Softwerker brauchen klare> Anweisungen und Kontrolle. Wer glaubt Scrum ohne Disziplin zum Laufen zu> bekommen, dem kann ich nur viel Spaß wünschen.
Jepp, hier haben wir einen, sie einer meiner letzten Postings !
Merke: Es liegt nie an Scrum, wenns nicht klappt, es liegt an den
Leuten, oder man hat es falsch umgesetzt usw. !
Daher kommt mir das ganze auch so sektenartig vor, oder man will noch
Scrum-Schulungen verdienen und die ganzen zertifizierten Scrummaster
wollen es nicht umsonst gemacht haben.
Ing schrieb:> hatte ich bisher einfach nur Pech mit den Firmen oder ist das> "branchenüblich"?
Das ist so durchaus üblich. Wenn ein Unternehmen sich hauptsächlich als
Maschinenbauer sieht, woher soll es dann auch eine große Kompetenz in
Sachen Softwareentwicklung besitzen?
motzkopp schrieb:> Jepp, hier haben wir einen, sie einer meiner letzten Postings !
Ach du Pfeife, hör erst mal auf zu plenken.
Hättest du mich gefragt was an Scrum falsch ist hätte ich dir einen
mehrstündigen Vortrag darüber halten können. Aus Erfahrung. Danach hätte
ich noch eine Stunde dran hängen können, wie Scrum-Projekte durch
Ausnutzung der Schwächen erfolgreich sabotiert werden.
Aber du hast ja nicht gefragt. Du hast einfach rumgegrölt. So wie ein
Afd-Anhänger, unqualifizierte, unwissende aber im Besitz der alleinigen
Wahrheit und noch stolz drauf.
Weißt du, es ist traurig wenn ein angeblicher Ingenieur wie du nicht
einmal in Ruhe eine Diskussion zum Für und Wider einer Methode
aushalten, geschweige denn führen kann.
Nun, da alles Weitere bei dir nur Perlen vor die plenkenden Säue ist
schenke ich mir alles Weitere.
motzkopp schrieb:> Merke: Es liegt nie an Scrum, wenns nicht klappt, es liegt an den> Leuten, oder man hat es falsch umgesetzt usw. !> Daher kommt mir das ganze auch so sektenartig vor, oder man will noch> Scrum-Schulungen verdienen und die ganzen zertifizierten Scrummaster> wollen es nicht umsonst gemacht haben.
Versteiff Dich doch nicht so auf SCRUM. Mit denen Leuten, mit denen es
mit SCRUM klappt, kannst Du auch ohne SCRUM genauso viel reißen.
Du musst nur weg vom umfassenden Plan vorab. Wenn Deine Auftraggeber
wissen, was sie wollen, z.B. deren Geschäftsprozesse auf neues
Steuerrecht anpassen oder eine Produktionsstraße automatisieren, dann
ist das doch gut. Dann gibt es zwar hier oder da eine Änderung, aber
dann weiss anfangs, was hinten rauskommen soll.
Wenn Du etwas Neues entwickelst (ein Messgerät, eine Maschine, die
erstmals elektronisch gesteuert wird, ...) dann kannst Du nicht wissen,
was Du willst, einfach weil das bisher niemand in der Hand gehabt hat.
Dann brauchst Du Entwickler (keinen Techniker), Ingenieure, keine
Programmierer, Kreativität statt Sorgfalt. Oder besser gesagt, die
Mischung daraus. Dann brauchst Du die Freiheit, heute die Arbeit der
letzten 2 Wochen wegzuschmeißen und neu zu machen, heute die Annahme von
gestern (es wird nie mehr als 255 geben) zu verwerfen.
Hätte Ford die Kunden befragt, hätten sie sich schnellere Pferde
gewünscht.
Programmierer schrieb:> Ing schrieb:>> Aber wieso kommt man damit durch?>> Weil es funktioniert. Die Branchengrößen machen es vor.>
Das höre ich auch immer wieder.
Die Branchengrössen können sich von der Ressourcengewalt ganz anders mit
dem Zeug beschäftigen. Die können viel Ressourcen versemmeln, nur das
Produkt muss 100% sein, das nutzen Millionen von Leuten.
Kann man nicht mit normalen Softwarebuden vergleichen, wo jede Stunde
irgendein Kunde bezahlen muss und sich änderende Anforderungen und
ständiges anders und neu Gemache finanziell ganz anders auswirken. Ist
aber hipp, dass denen großen nachzumachen.
A. S. schrieb:>> Wenn Du etwas Neues entwickelst (ein Messgerät, eine Maschine, die> erstmals elektronisch gesteuert wird, ...) dann kannst Du nicht wissen,> was Du willst, einfach weil das bisher niemand in der Hand gehabt hat.> Dann brauchst Du Entwickler (keinen Techniker), Ingenieure, keine> Programmierer, Kreativität statt Sorgfalt. Oder besser gesagt, die> Mischung daraus. Dann brauchst Du die Freiheit, heute die Arbeit der> letzten 2 Wochen wegzuschmeißen und neu zu machen, heute die Annahme von> gestern (es wird nie mehr als 255 geben) zu verwerfen.>> Hätte Ford die Kunden befragt, hätten sie sich schnellere Pferde> gewünscht.
Diesen Anwendungsfall unterschreibe ich, siehe meinem letzten Postung,
da zählt das innovative schnelle Produkt 100 mal mehr, als die
Ressourcen und man startet auf der gründen Wiese.
Ich arbeite zur Zeit an einer seit 25 Jahren existierenden aus 50 Mio
Zeilen bestehenden -grob gesagt- Buchhaltungssoftware. Schmeiss da mal
kurz was um, jedes Flag einer Tabelle kann ungeahnte gravierende
Auswirkung haben...
Mark B. schrieb:> Das ist so durchaus üblich. Wenn ein Unternehmen sich hauptsächlich als> Maschinenbauer sieht, woher soll es dann auch eine große Kompetenz in> Sachen Softwareentwicklung besitzen?
Indem es entspr. Leute dafür einstellt und nicht die interne Truppe
dafür missbraucht die ein bischen was zusammenschustern kann.
Dick Boutsos schrieb:> Indem es entspr. Leute dafür einstellt und nicht die interne Truppe> dafür missbraucht die ein bischen was zusammenschustern kann.
Das scheitert an einem ganz banalen Grund:
Wenn man selbst keine Kompetenz in X besitzt, wie soll man dann erkennen
welche Person genau die richtige wäre um X korrekt durchzuführen?
Außerdem:
Reine Informatiker tun sich mit der Ansteuerung von Maschinen eher
schwer, da ihnen hierfür oft das Wissen aus Physik und Elektrotechnik
fehlt. Also nimmt man oftmals doch einen Ingenieur dafür. Der mag
manchmal auch gutes Wissen über Methodik der Softwareentwicklung haben -
oft genug aber hat er es nicht. Weil es nicht sein Fachgebiet ist.
A. S. schrieb:> Wenn Du etwas Neues entwickelst (ein Messgerät, eine Maschine, die> erstmals elektronisch gesteuert wird, ...) dann kannst Du nicht wissen,> was Du willst, einfach weil das bisher niemand in der Hand gehabt hat.
Äh, doch?
Wenn es eine kommerzielle Entwicklung ist, wovon ich jetzt mal ausgehe,
dann gibt es in jedem Fall eine konkrete Anwendung die realisiert werden
soll. Vielleicht soll eine Fernsteuerung her für die Maschine X, oder in
Produkt Y soll die zusätzliche Funktion Z hinein weil der Kunde das so
haben will...
Also zumindest Top-Level Requirements werden definitiv existieren. Wenn
es nichtmal die gibt, wird doch niemand das Budget für eine Entwicklung
bereitstellen.
Dick Boutsos schrieb:> Mark B. schrieb:> Das ist so durchaus üblich. Wenn ein Unternehmen sich hauptsächlich als> Maschinenbauer sieht, woher soll es dann auch eine große Kompetenz in> Sachen Softwareentwicklung besitzen?>> Indem es entspr. Leute dafür einstellt und nicht die interne Truppe> dafür missbraucht die ein bischen was zusammenschustern kann.
Softwareentwicklung ist aber keine Rocket Science. Es ist auch kein
Missbrauch, wenn die Angestellten ihr Wissen und ihre Fähigkeiten etwas
erweitern.
Mark B. schrieb:> Das scheitert an einem ganz banalen Grund:> Wenn man selbst keine Kompetenz in X besitzt, wie soll man dann erkennen> welche Person genau die richtige wäre um X korrekt durchzuführen?
Was das fürn Nullargument?
Dick Boutsos schrieb:> Mark B. schrieb:>> Das scheitert an einem ganz banalen Grund:>> Wenn man selbst keine Kompetenz in X besitzt, wie soll man dann erkennen>> welche Person genau die richtige wäre um X korrekt durchzuführen?>> Was das fürn Nullargument?
Ist kein Nullargument. Denk einfach mal bisschen nach, dafür ist dein
Gehirn ja da. Wenn niemand in einer Firma echte Kompetenz in Sachen
Software besitzt, und schon gar nicht die Personalabteilung, wie will
man dann einen guten Entwickler einstellen? Es fehlt einem ja dann die
Fähigkeit, beurteilen zu können wer wirklich gut ist.
Qwertz schrieb:> Softwareentwicklung ist aber keine Rocket Science. Es ist auch kein> Missbrauch, wenn die Angestellten ihr Wissen und ihre Fähigkeiten etwas> erweitern.
Naja. Ich will mal so sagen: Die Menge an schlecht geschriebenem,
undokumentierten und schlecht wartbarem Legacy Code ist legendär groß.
Scheint also wohl doch nicht so einfach zu sein, seine Kenntnisse
diesbezüglich auf einen guten Stand zu bringen - sonst hätten die Leute
es ja gemacht.
Mark B. schrieb:> Also zumindest Top-Level Requirements werden definitiv existieren. Wenn> es nichtmal die gibt, wird doch niemand das Budget für eine Entwicklung> bereitstellen.
Top-Level Requirement ist ganz hoch im Bullshit-Bingo.
Der Kunde hat Wünsche.
- Einfachere Bedienung
- Fernsteuerung
- Automatisierung bisher manueller Tätigkeiten
- Aussagekräftigere Anzeigen
- Eine Verriegelung, dass dies oder jenes nicht passiert
SW im Maschinenbau heisst weder Stückzahlen wie beim IPhone oder Auto,
noch EDV, wo schon seit 70 Jahren Tausende von Programmierern an einer
SW arbeiten.
Das was im Maschinenbau SW ist, wird bei IPhone oder Auto
"Vorentwicklung" genannt, und dort gibt es aus guten Grund ähnliche
Freiheiten und nicht die staren, auf Perfektion ausgerichteten
Vorgehensmodelle. Dort darf man spielen, probieren, kreativ sein.
Und ja, auch beim Maschinenbau gibt es SIL, SAfety und Co, und dort sind
Vorgehensmodelle Pflicht, weil die Aufgabe eine andere ist: Eine
konkrete, zu Anfang bekannte Funktion mit bewährten Mitteln zu
realisieren. Aber das ist nur ein (ungeliebter) Teil der SW im
Maschinenbau
Ich will da mal aus meinem Bereich ein kürzlich aufgetretendes Problem
schildern. Es gibt eine Tabelle mit Buchungen, wo wir 1,2 Mrd Datensätze
haben. Dort mussten wir ein neues DB Feld einführen. Rückwirkend mussten
alle Datensätze mit einem nicht einfach zu ermittelnden Wert gefüllt
werden. Dies passierte durch eine aufwendige PLSQL Routine auf einer
Oracle DB. Nun das Problem: Die Downzeit des Servers war nicht lange
genug, um dieses Update durchzuführen. Erst nach wochenlangem Tüfteln,
testen und optimieren haben wir das Problem gelöst. Da gab es schon viel
schlimmere Probleme, aber das Bsp versteht jeder Softie.
Warum erzähle ich das ? Weil das ein Scheiss Feld war, was so harmlos in
irgendeiner Maske in der GUI erscheint, fürn Anforderungsmanager
vollkommen langweilig, für die Entwickler viel Arbeit.
Mit Scrum dann haha, brauchen wir doch nicht, oder anders, oder so, hmm?
Da sprinten wir durch.
Wir müssen innovativer umd flexibler werden ! Erst mal was raushauen und
dann entscheiden, wo es lang geht.
Motzkopp schrieb:> Mit Scrum dann haha, brauchen wir doch nicht, oder anders, oder so, hmm?> Da sprinten wir durch.
Scrum ist doch für Deine Aufgaben überhaupt nicht sinnvoll. Das ist so,
als wenn jemand 13er Maulschlüssel verteufelt, weil die Prüfung einer
12V-Batterie damit nur unzureichen möglich ist.
Mark B. schrieb:> Ist kein Nullargument. Denk einfach mal bisschen nach, dafür ist dein> Gehirn ja da. Wenn niemand in einer Firma echte Kompetenz in Sachen> Software besitzt, und schon gar nicht die Personalabteilung, wie will> man dann einen guten Entwickler einstellen? Es fehlt einem ja dann die> Fähigkeit, beurteilen zu können wer wirklich gut ist.
Nach deiner Logik wäre dann jede Firma noch in der
produktionstechnischen Steinzeit, weil sie angeblich nicht in der Lage
ist fähige Leute zu erkennen. Dafür hat Gott die Studienabschlüsse und
Arbeitszeugnisse geschaffen. Wenn sich einer bewirbt mit 5 Jahren
Erfahrung in Softwareengineering und Informatikstudium wird der auch
Ahnung haben, jedenfalls mehr als der Maschinenbauer mit nebenher
erworbenen Programmierkenntnissen oder E-Techniker mit MC-Fokus.
Das Problem ist ein ganz anderes in diesen Firmen: Man hat noch gar
nicht erkannt wie unprofessionell man dort arbeitet, das Gestümpere gilt
dort als normal. Da wurschtelt halt der Maschinenbauer die Software
irgenwie zusammen oder der E-Techniker die Steuerung aber wenns mal
komplexer wird und über klassisches MC-Gefrickel hinausgeht glaubt er
kann da wie bisher weiterfrickeln. Dazu kommt noch wie oben schon
beschrieben, dass schnelle Ergebnisse gewünscht werden, der ahnungslose
Vorgesetzte bestimmt also wie gearbeitet werden soll. Selbst wenn die
Entwickler erkannt haben, dass sie mit dem Gefrickel nicht mehr
weiterkommen und das ändern wollen würden, der Chef oder wer auch immer
die Entscheidungsmacht hat, funkt mit seinen unrealistischen
Zeitvorgaben immer dazwischen.
Wenn ich schon in solchen Knallfroschbuden vom "Chefentwickler" höre
dass Testen überflüssig ist aber denen ständig die Projekte um die Ohren
fliegen und keinen Termin reissen. Fragt man die wie sie ihre Projekte
planen schauen die einen an wie ein Mondkalb. Scrum, Projektmanagement,
Testszenarien, alles unnützer Kram für die, der nur Zeit kostet. Denen
rennen auch regelmässig die Fähigen Leute weg, weil die keine neuen
Strukturen etablieren dürfen. Da muss erst mal Erkenntnis+Wille da sein,
das man so wie man jetzt 'arbeitet' es völlig unprofessionell ist und
das geändert werden muss.
Dick Boutsos schrieb:> Wenn ich schon in solchen Knallfroschbuden vom "Chefentwickler" höre> dass Testen überflüssig ist aber denen ständig die Projekte um die Ohren> fliegen und keinen Termin reissen. Fragt man die wie sie ihre Projekte> planen schauen die einen an wie ein Mondkalb. Scrum, Projektmanagement,> Testszenarien, alles unnützer Kram für die, der nur Zeit kostet. Denen> rennen auch regelmässig die Fähigen Leute weg, weil die keine neuen> Strukturen etablieren dürfen. Da muss erst mal Erkenntnis+Wille da sein,> das man so wie man jetzt 'arbeitet' es völlig unprofessionell ist und> das geändert werden muss.
Richtig. Und warum ist das so? Weil man nicht versteht, wie es richtig
gemacht werden muss (also die Entwicklung von Software). Und warum weiß
man das nicht? Weil man sich in diesem Fachgebiet nicht auskennt.
Wenn eine Firma clever genug ist, SW-Entwickler mit Berufserfahrung
einzustellen und diese auch darüber entscheiden zu lassen, wie der
Prozess der Entwicklung denn vonstatten gehen soll, dann ist ja gut.
Aber ob das so in der Regel passiert? Da bin ich skeptisch.
Mark B. schrieb:> Weil man nicht versteht, wie es richtig> gemacht werden muss (also die Entwicklung von Software).
Doch, von Zeit zu Zeit kommen dann solche Informatik-Experten und wollen
eine 5-Mann-Entwicklung professionalisieren, so wie es bei EDV-SW (mehr
oder weniger) gut funktioniert. Dann passieren folgende Dinge, die hier
im Forum ja auch schon geschildert wurden:
- Unsinnige, unhinterfragte Regeln, die im gegenwertigen Kontext keinen
Sinn machen. (Stefan U: jeder Member-Zugriff nur über Getter/Setter)
- Völlige Ausblendung des µC-Kontexts (Andreas S: Nein, die x kB-RAM im
Datenblatt sind MB: ein µC mit so wenig RAM gäbe keinen Sinn)
- Design in UML: Nicht nur schlecht geeignet für Automaten, meist auch
nur gemalt, nicht modelliert (nicht nur, dass kein Code erzeugt wird,
... das Modell selber ist mangels Umgebung in sich selber nicht
konsistent oder verifizierbar)
- Frühe Entscheidungen (Dann haben die Leute, die keine Ahnung von SW
haben, halt ihre wünsche nicht ausreichend durchdacht)
A. S. schrieb:> Doch, von Zeit zu Zeit kommen dann solche Informatik-Experten und wollen> eine 5-Mann-Entwicklung professionalisieren, so wie es bei EDV-SW (mehr> oder weniger) gut funktioniert. Dann passieren folgende Dinge, die hier> im Forum ja auch schon geschildert wurden:>> - Unsinnige, unhinterfragte Regeln, die im gegenwertigen Kontext keinen> Sinn machen. (Stefan U: jeder Member-Zugriff nur über Getter/Setter)
Ein echter Informatik-Experte weiß natürlich, dass das Quatsch ist.
Objekte sollen Nachrichten miteinander austauschen.
Echte Informatik-Experten lesen zum Beispiel solche Artikel:
https://www.javaworld.com/article/2073723/why-getter-and-setter-methods-are-evil.html
Und verstehen sie auch :-)
Das Problem bleibt nach wie vor, zu erkennen wer denn nun ein echter
Experte ist und wer ein Möchtegern-Experte... und sowas steht halt auf
keinem Diplomzeugnis der Welt drauf.
A. S. schrieb:> µC-KontextsA. S. schrieb:> Mark B. schrieb:>> Weil man nicht versteht, wie es richtig>> gemacht werden muss (also die Entwicklung von Software).>> Doch, von Zeit zu Zeit kommen dann solche Informatik-Experten und wollen> eine 5-Mann-Entwicklung professionalisieren, so wie es bei EDV-SW (mehr> oder weniger) gut funktioniert. Dann passieren folgende Dinge, die hier> im Forum ja auch schon geschildert wurden:>> - Unsinnige, unhinterfragte Regeln, die im gegenwertigen Kontext keinen> Sinn machen. (Stefan U: jeder Member-Zugriff nur über Getter/Setter)>> - Völlige Ausblendung des µC-Kontexts (Andreas S: Nein, die x kB-RAM im> Datenblatt sind MB: ein µC mit so wenig RAM gäbe keinen Sinn)>> - Design in UML: Nicht nur schlecht geeignet für Automaten, meist auch> nur gemalt, nicht modelliert (nicht nur, dass kein Code erzeugt wird,> ... das Modell selber ist mangels Umgebung in sich selber nicht> konsistent oder verifizierbar)>> - Frühe Entscheidungen (Dann haben die Leute, die keine Ahnung von SW> haben, halt ihre wünsche nicht ausreichend durchdacht)
Wer in Business Applikationen z.B. jedes Bit eines ints nutzt, um sich
platzsparend Zustände zu merken, der kriegt in der Welt gewaltig hinter
die Ohren, im µC-Kontext mag das ja sinnvoll sein.
Das mit den Gettern und Settern hätte ich auch gesagt. Hauptgrund neben
anderen Vorteilen: Ich kann da einen Breakpoint reinsetzen.
Mark B. schrieb:> Echte Informatik-Experten lesen zum Beispiel solche Artikel:> https://www.javaworld.com/article/2073723/why-getter-and-setter-methods-are-evil.html>> Und verstehen sie auch :-)>> Das Problem bleibt nach wie vor, zu erkennen wer denn nun ein echter> Experte ist und wer ein Möchtegern-Experte... und sowas steht halt auf> keinem Diplomzeugnis der Welt drauf.
"It follows then that in OO systems you should avoid getter and setter
functions since they mostly provide access to implementation details."
Was den für Implementierungsdetails ? Wo ist der Unterscheid zu public
members, die ich ja dann stattdessen benutzen muss ?
Ich bin auch kein Fan davon alle member Variablen mit gettern und
settern auszustatten, sondern nur die, auf die ich von aussen zugreifen
muss.
"To see why, consider that there might be 1,000 calls to a getX() method
in your program, and each call assumes that the
return value is of a particular type. You might store getX()'s return
value in a local variable, for example, and that variable type
must match the return-value type. If you need to change the way the
object is implemented in such a way that the type of X changes, you're
in deep trouble. If X was an int, but now must be a long, you'll get
1,000 compile errors."
Die kriege ich auch, wenn ich den Typ einer 1000 mal benutzen public
member Variabe von int auf long ändere.
Liebe Informatik Experten, ich habe es nicht verstanden, erklärt mir
warum getter und setter schlechter sein sollen, als public members.
Wow, ist ja echt interessant. Der Krieg der Vorgehensmodelle :D
Vielleicht wären Schulungen im Bereich der Komplexitätsforschung gar
nicht so verkehrt. Man kann lernen komplexe Systeme zu erkennen und
besser zu beurteilen. Und ich denke Software Entwicklung im
wirtschaftlichen Umfeld stellt ein komplexes System dar.
Es würde genügen die grundlegenden Wesenszüge solcher Systeme zu
verstehen und was einzelne Veränderungen bewirken können.
Und obwohl ich keine berufliche Erfahrung habe würde ich intuitiv
wetten, dass es nicht das perfekte Modell gibt, genau wie es auch nicht
die perfekte Programmiersprache gibt. Abhängig von diversen Faktoren
kann ein Modell in einem Unternehmen besonders gut oder besonders
schlecht funktionieren.
Aufwand, Zeitbedarf, Effizienz, Flexibilität... diese Werte können nicht
alle perfektioniert werden. Besonders große Flexibilität wird andere
Werte zwangsläufig hochtreiben, etwa den Zeitbedarf. Wenn ein Modell so
gestaltet ist dass es hohe Flexibilität bei möglichst geringem
Zeitbedarf bietet, treibt möglicherweise den Aufwands Wert hoch weil es
hohe Disziplin durch Einhaltung vieler Regeln bedarf um effizient und
flexibel zu funktionieren. Da aber nicht alle im Unternehmen
diszipliniert sind funktioniert es nicht wie es theoretisch sollte.
Bei Programmiersprachen ist es ja auch so. Besonders einfache
Programmiersprachen etwa Scriptsprachen sind langsamer.
Und eine Programmiersprache wie Rust die Vorteile einer GC Sprache ohne
einen GC haben will bezahlt den Preis mit einer höheren Lernkurve der
Sprache, was dann auch für viele eine problematische Hürde darstellt.
Vieles deutet also darauf hin dass es gar kein perfektes Vorgehensmodell
in Projekten geben kann.
Maximal flexibel, maximal schnell, maximal günstig, maximal effizient,
maximal leicht realisierbar... geht also nicht.
Was neue Modelle oft auszeichnet ist eine Verschiebung eines Wertes nach
oben ohne den Verweis auf die zwangsläufige Senkung eines anderen
Wertes.
Also es kommt z.B. ein neues Modell dass viel mehr Flexibilität und
Zeitersparnis verspricht. Erst die Praxis zeigt dann dass es dies
beispielsweise mit einer höheren Komplexität für die Beteiligten
bezahlt, was dann bei manchen nicht funktioniert, weil die Beteiligten
überfordert sind. Während die durchschnittliche Kompetenz in einem
anderen Unternehmen höher ist und dort funktioniert es etwas besser.
Und dann streiten sich die Leute darüber welches System besser sei :D
motzkopp schrieb:> Liebe Informatik Experten, ich habe es nicht verstanden, erklärt mir> warum getter und setter schlechter sein sollen, als public members.
Getter und Setter sind genauso schlecht wie public Members!
Hier mal ein fiktives Beispiel irgendeiner Connection-Klasse.
Die ersten beiden Klassen sind schlecht, da public Zugriff auf
Implementierungsdetails (enum-Member) besteht. In der 3.
Klasse ist der Zugriff komplett gekapselt, man kann das Objekt
nach seinem Zustand fragen.
1
// some C#
2
public enum State
3
{
4
Open, Closed
5
}
6
7
public class Connection
8
{
9
// BAD: public member
10
public State ConnectionState;
11
}
12
13
public class Connection
14
{
15
// BAD: public setter/getter
16
public State ConnectionState { get; set; }
17
}
18
19
public class Connection
20
{
21
// GOOD: private setter/getter
22
private State ConnectionState { get; set; }
23
public bool IsOpen() { return ConnectionState == State.Open; }
24
public bool IsClosed() { return ConnectionState == State.Closed; }
25
}
Ändert man den enum, sind bei den ersten beiden Klassen
alle Aufrufe im Client-Code zu ändern, die auf den enum
zugreifen. Bei der 3. Klasse betreffen die Änderungen
nur die Klasse selbst.
merciless
Dirk K. schrieb:> motzkopp schrieb:>> Liebe Informatik Experten, ich habe es nicht verstanden, erklärt mir>> warum getter und setter schlechter sein sollen, als public members.>> Getter und Setter sind genauso schlecht wie public Members!
Na, dann mich ich erstmal beruhigt, wobei ich persönlich die Getter und
Setter wesentlich besser finde, wegen Breakpoint setzen und mögliche
Modifizierung an zentraler Stelle.
>> public class Connection> {> // GOOD: private setter/getter> private State ConnectionState { get; set; }> public bool IsOpen() { return ConnectionState == State.Open; }> public bool IsClosed() { return ConnectionState == State.Closed; }> }>> Ändert man den enum, sind bei den ersten beiden Klassen> alle Aufrufe im Client-Code zu ändern, die auf den enum> zugreifen. Bei der 3. Klasse betreffen die Änderungen> nur die Klasse selbst.>> merciless
Du hast geschummelt. Hier gibt es noch ein Mapping zwischen einem Enum
und einem Boolean Wert, was die Abstraktion des Enums ermöglicht. Klar
muss dann der Rest des Code das Enum nicht kennen. Was ist, wenn ich
wirklich ein int haben will ?
Nachtrag: Schummeln im Sinne eines Informationsverlust, der nur aufging,
weil der Status nur zwei Zustände haben kann. Du kannst ja mal mit einem
byte das Spiel betreiben:
private byte a;
..
public bool IsMinus128(a == -128)
..
public bool Is0(a == 0)
public bool Is1(a == 1)
public bool Is2(a == 2)
public bool Is3(a == 3)
..
dann kannst du auch den internen Datentyp von byte auf int ändern, ohne
das der Rest des Codes betroffen ist ;).
motzkopp schrieb:> Liebe Informatik Experten, ich habe es nicht verstanden, erklärt mir> warum getter und setter schlechter sein sollen, als public members.
Auf die Daten innerhalb eines Objekts soll man möglichst gerade nicht
von außerhalb der Klasse beliebig zugreifen können. Wenn man das macht,
hat man ja gerade keine Datenkapselung. Außerdem kann man dann die
Implementierung einer Klasse nicht ändern, wenn anderer Code da immer
beliebig auf deren Membern herumwühlt.
motzkopp schrieb:> Du hast geschummelt. Hier gibt es noch ein Mapping zwischen einem Enum> und einem Boolean Wert, was die Abstraktion des Enums ermöglicht. Klar> muss dann der Rest des Code das Enum nicht kennen. Was ist, wenn ich> wirklich ein int haben will ?
Ich könnte den enum auf 47 verschiedene Werte aufbohren,
dann müsste ich im o.g. Beispiel 47 Methoden IsXYZ()
haben. Dann muss ich aber die gesamte Architektur in
Frage stellen.
Als aller erstes sollte man sich die Frage stellen, wieso
überhaupt Client-Code Kenntnisse von inneren Zuständen
eines Objektes haben muss. In den meisten Fällen ist das
auf eine schlechte Architektur zurückzuführen. In meinem
Beispiel würde ich dann die 47 Zustände in einer dedizierten
State-Machine kapseln.
motzkopp schrieb:> Nachtrag: Schummeln im Sinne eines Informationsverlust, der nur aufging,> weil der Status nur zwei Zustände haben kann. Du kannst ja mal mit einem> byte das Spiel betreiben:>> private byte a;> ..> public bool IsMinus128(a == -128)> ..> public bool Is0(a == 0)> public bool Is1(a == 1)> public bool Is2(a == 2)> public bool Is3(a == 3)
Und dieser Quatsch sagt mir, dass du nicht wirklich Ahnung
von Software-Entwicklung hast. Auf diese Art kann man jedes
Beispiel ins Lächerliche ziehen. Natürlich muss die Information
(enum) gemappt werden, wie soll sonst die Kapselung erfolgen.
merciless
> Und dieser Quatsch sagt mir, dass du nicht wirklich Ahnung> von Software-Entwicklung hast. Auf diese Art kann man jedes> Beispiel ins Lächerliche ziehen.>> merciless
Aber, aber, lieber Kollege ! Es ware hier die Rede von den so schlechten
getter und settern. Da will ich als Begründung nicht irgendeinen
konstruierten Fall haben. Der einzige vollfertige Ersatz sind public
members und die halte ich für wesentlich schlechter !
Mark B. schrieb:> motzkopp schrieb:>> Liebe Informatik Experten, ich habe es nicht verstanden, erklärt mir>> warum getter und setter schlechter sein sollen, als public members.>> Auf die Daten innerhalb eines Objekts soll man möglichst gerade nicht> von außerhalb der Klasse beliebig zugreifen können. Wenn man das macht,> hat man ja gerade keine Datenkapselung. Außerdem kann man dann die> Implementierung einer Klasse nicht ändern, wenn anderer Code da immer> beliebig auf deren Membern herumwühlt.
Jajaja, das ist alles klar. Wenn ich aber nun mal nen paar Werte der
Klasse setzen oder lesen will, hmmm ? Ganz darauf verzichten ?
motzkopp schrieb:>> Und dieser Quatsch sagt mir, dass du nicht wirklich Ahnung>> von Software-Entwicklung hast. Auf diese Art kann man jedes>> Beispiel ins Lächerliche ziehen.>>>> merciless>> Aber, aber, lieber Kollege ! Es ware hier die Rede von den so schlechten> getter und settern. Da will ich als Begründung nicht irgendeinen> konstruierten Fall haben. Der einzige vollfertige Ersatz sind public> members und die halte ich für wesentlich schlechter !
Dann, lieber Kollege, nenne doch mal ein Beispiel,
wo du von außen unbedingt einen Wert in das Objekt
setzen musst. Wenn sich das nicht umgehen lässt, dann
würde ich einen Setter verwenden, weil man sonst keine
Möglichkeit hat, auf die Änderung eines Wertes zu reagieren
(vielleicht muss die Gültigkeit geprüft werden, oder
eine Neuberechnung angestoßen werden, etc.).
merciless
Dirk K. schrieb:> Dann, lieber Kollege, nenne doch mal ein Beispiel,> wo du von außen unbedingt einen Wert in das Objekt> setzen musst. Wenn sich das nicht umgehen lässt, dann> würde ich einen Setter verwenden, weil man sonst keine> Möglichkeit hat, auf die Änderung eines Wertes zu reagieren> (vielleicht muss die Gültigkeit geprüft werden, oder> eine Neuberechnung angestoßen werden, etc.).>> merciless
Ich persönlich nutze Setter selten, ich versuche alles über den
Konstruktor zu übergeben. Aber manchmal lässt es sich nicht vermeiden,
die Bsp hast du ja selber schon genannt.
Also halten wir fest: Standardlehrbuch-Empfehlung getter und setter zu
benutzen (als Ersatz für public members) - Richtig und Gut !
Gegenempfehlungen beziehen sich nur auf absolute Feinheiten, ist aber
eine Gelegenheit sich als Creme de la Creme Informatik Experte zu
positionieren !
Motzkopp schrieb:> Richtig und Gut !> Gegenempfehlungen beziehen sich nur auf absolute Feinheiten, ist aber> eine Gelegenheit sich als Creme de la Creme Informatik Experte zu> positionieren !
Eine Frage an die Experten (wobei Du, Motzkopp, ja nach eigenem Bekunden
auch eher EDV machst):
Wer von Euch auf dieser Welle macht denn wirklich embedded Maschinen-SW?
Nicht GUI, nicht Visu, nicht Eingabe von Ablaufplänen, sondern wirkliche
Steuerungstechnik, (weniger Regelungstechnik, da das ja eher Matlab-Code
ist)?
Also Wenn Sensor so, dann Aktor so, wenn Zeit abgelaufen, dann, wenn
dies dann das?
Die meisten Mantras von Kapselung und keinen globalen Objekten greifen
da nämlich meist nicht oder nur schlecht. Es gibt nämlich einen globalen
Kontext, mit realen (nicht virtuellen) Teilen, die in einer konkreten,
physischen Abhängigkeit zueinander stehen.
Ich unterscheide es in virtuelle Objekte (ein Quadrat auf der
Zeichenfläche, ein Menber in der Adressliste, ein Fehlerbit im Logfile)
und reale Objekte (das Rad vorne Links im Auto).
Virtuelle Objekte sind gut OOP-kapselbar, können fast beliebig
instanziiert werden (50 neue Quadrate, neue Mitglieder? Nur zu).
Konkrete Objekte werden dann meist alibi-mäßig genauso gehandhabt ("ich
leite alle 4 Räder von der Klasse Rad ab! und instanziiere sie dann."
Super, hier ein Lutscher). Das ist quatsch. Es gibt genau 4 Räder am
Auto, und alle 4 haben spezifische Eigenschaften und es macht überhaupt
keinen Sinn, ein 5tes zu instanziieren oder nur 3. Kein DSP kommt damit
klar, wenn man ein Rad weglässt oder 2 tauscht. Globale Objekte spiegeln
hier nur die Aufgabe wieder und sind nicht böse. Wie weit das ignoriert
wird, zeigt sich, wenn Autosar (wo Milliarden hinterstehen) als Gebastel
angesehen wird, weil es den EDV-Mantras nicht folgt.
Ähnliches gilt für die Zeit, die in Steuerungstechnik eine viel breitere
Rolle einnimmt als in der EDV, wo einfach nur alles akzeptabel schnell
und gbgf. transaktionssicher sein muss.
Das, genau das ist der Unterschied, warum die EDV-Erfahrung der
Informatiker im Maschinenbau (und genau darum ging es dem TO) regelmäßig
scheitert.
A. S. schrieb:> Ähnliches gilt für die Zeit, die in Steuerungstechnik eine viel breitere> Rolle einnimmt als in der EDV
Fast jeder der Infrommatiker, die von der Hochschule kommend meine
Hardware zur Maschinensteuerung zu programmieren hatten, schaffte es
binnen weniger Tage, dass die Steuerung "zu langsam" und die Aufgabe
damit nicht lösbar ist.
Sie fragen dann regelmäßig nach mehr Rechenleistung um die nötigen
Reaktionszeiten im 100µs-Bereich zuverlässig ohne großen Jitter
einhalten zu können!
Regelmäßig nehme ich sie dann an die Hand und zeige ihnen, was der
Compiler da für umständliches Zeug aus ihrem umständlichen Zeug macht.
Früher oder später hat es dann noch jeder von ihnen kapiert, wie man
z.B. Funktionsaufrufe samt Parameterübergabe so zu gestalten hat, dass
sie effizient umgesetzt werden. Sie finden heraus, dass es schneller
ist, für ein Flag ein 32 Bit-Wort zu nehmen, als viele Flags in ein
einziges Wort zusammenzupacken.
Und kaum hat man die grundlegenden Grundlagen zum prozessor- und
compilerfreundlichen Programmieren gelernt, ist der Rechner auf einmal
wieder schnell genug, obwohl er nur 4 Cores mit je 1GHz hat...
Lothar M. schrieb:> Fast jeder der Infrommatiker, die von der Hochschule kommend meine> Hardware zur Maschinensteuerung zu programmieren hatten
Jetzt lästern schon die Mods verallgemeinernd über Informatiker... Waren
das denn auch Informatiker mit Embedded Spezialisierung? Können frisch
aus der Hochschule kommende Ings das besser?
Als Embedded-Spezialisierter Informatiker wird man von "normalen"
Informatikern belächelt weil man kein Experte in PHP, nodejs, Mobile App
Development, ... ist und nur so komisches Elektronik Zeug macht. Von
Ings muss man sich anhören dass Ings das alles besser können... Toll!
Ein kleines bisschen wie bei Immigranten 2. Generation, welche hier als
Ausländer und in der Heimat der Eltern als Deutsche gelten. Die habens
auch nicht leicht...
Das sind nur Lothars Tagträume. In denen verarbeitet er Neid auf
Informatiker. Als Mod sollte man sich etwas besser im Griff haben, als
hier dumpf auf das beliebte Ing vs. Inf zu gehen, auch wenn es dafür
Jubel vom Pöbel gibt.
Programmierer schrieb:> Als Embedded-Spezialisierter Informatiker wird man von "normalen"> Informatikern belächelt weil man kein Experte in PHP, nodejs, Mobile App> Development, ... ist und nur so komisches Elektronik Zeug macht. Von> Ings muss man sich anhören dass Ings das alles besser können... Toll!
Da ist ein wenig was dran. grins
Ich finde aber nicht schlimm, dass es so ist.
Programmierer schrieb:> Lothar M. schrieb:>> Fast jeder der Infrommatiker, die von der Hochschule kommend meine>> Hardware zur Maschinensteuerung zu programmieren hatten>> Jetzt lästern schon die Mods verallgemeinernd über Informatiker...
Nein, das tut Lothar nicht. Es geht offenbar nur um diejenigen, die
"Hardware zur Maschinensteuerung zu programmieren hatten".
> Waren> das denn auch Informatiker mit Embedded Spezialisierung? Können frisch> aus der Hochschule kommende Ings das besser?
Das ist die Frage.
Als ich damals Informatik studiert habe, musste man ein Nebenfach
belegen, also eine Art Spezialisierung wählen. Bei mir war das
Elektrotechnik inkl. (natürlich) Mikrocontrollerprogrammierung und
dementsprechend hätte ich vermutlich mit Lothars Aufgabenstellung
weniger Probleme gehabt als seine heutigen Infos.
Wie sieht das heutzutage aus?
> Als Embedded-Spezialisierter Informatiker wird man von "normalen"> Informatikern belächelt weil man kein Experte in PHP, nodejs, Mobile App> Development, ... ist und nur so komisches Elektronik Zeug macht. Von> Ings muss man sich anhören dass Ings das alles besser können... Toll!
Das schreibt Lothar nicht.
Eher, dass es das heutige Abstraktionsniveau der Software immer noch
spielend schafft, selbst schnellste Controller an ihr Limit zu treiben,
wenn man sich nicht mal klar gemacht hat, was der Compiler mit dem Code
anstellt.
Und da hat er Recht.
(schreibe ich als Dipl.-Inf. ;-)
Dirk K. schrieb:> Ändert man den enum, sind bei den ersten beiden Klassen> alle Aufrufe im Client-Code zu ändern, die auf den enum> zugreifen.
In diesem Sinne also nur noch Klassen ohne jegliches öffentliche
Interface? Und auch keine öffentlichen Funktionen mehr in jeglichem
Code? Denn man könnte ja gezwungen sein das API zu ändern und dann
müssten alle Benutzer angepasst werden? Sorry, aber diese Argumentation
die Du da vorgebracht hast ist ungültig.
Bei einem öffentlichen API muss man halt vorher mal tief in sich gehen
und scharf nachdenken und planen bevor man wild drauf los schreibt damit
man es später möglichst nicht mehr so oft ändern muss. Und man macht es
auch nicht breiter als gerade eben notwendig. Und ob da jetzt ein Setter
oder Getter oder Property oder sonstige öffentliche Methode oder
Funktion dabei ist macht dabei nicht den geringsten Unterschied.
Ich würde mich einem Vorposter anschließen, das man frisch von der
Hochschule erstmal in nix Erfahrung hat. Gilt für Infos genauso wie für
Ings.
Ansonsten gilt für Leute, die eher EDV machen: Da kommt es sehr wohl auf
Performance an, nur nicht auf 100µs. Es geht meist um Massendaten und
der erste Blick bei Performaceproblemen richtet sich immer gegen
IO/Datenbankabfragen. Weniger und sehr sehr schnelle Abfragen ist da das
Ziel. Da kann man was rausholen !
Danach kommen irgenwelche Schleifen über Massendaten und was die da so
machen. Danach kommt lange nichts.
Für Optimierungen des Codes Richtung compilerfreundlichkeit muss man
schon sehr verzweifelt sein. Ich habe schon oft Code gesehen, der
furchtbar kompliziert und umfangreich war, aber eigentlich nur einfache
Dinge machte. Da hat jemand ziemlich unverständlichen Code hinterlassen,
vermutlich ewig Zeit verbraten, nur um die letzten µs rauszuholen,
vollkommen unnötig. Das ist bei Business-Apps nicht angesagt.
Optimierungen, die den Code komplizierter machen, nur wenn es unbedingt
sein muss und an letzter Stelle, wenn man bereits erstere erwähnte
Möglichkeiten ausgeschöpft hat !
Daher haben logischweise Leute aus anderern Bereichen mehr Übung darin.
Chris D. schrieb:> Nein, das tut Lothar nicht. Es geht offenbar nur um diejenigen, die> "Hardware zur Maschinensteuerung zu programmieren hatten".
Und auch Maschinensteuerung ist etwas was Informatiker durchaus
beherrschen können.
Chris D. schrieb:> Wie sieht das heutzutage aus?
Genau so. Es gibt z.B. die Spezialisierung "Embedded Systems". Da lernt
man Regelungstechnik, Sichere Systeme (FuSi und so),
Mikrocontroller-Programmierung in C und C++, E-Technik-Grundlagen, DSP,
Adaptive Filter usw. Sollte doch für den Maschinenbau gar nicht so
falsch sein.
Chris D. schrieb:> Eher, dass es das heutige Abstraktionsniveau der Software immer noch> spielend schafft, selbst schnellste Controller an ihr Limit zu treiben,
Das hat aber nichts mit Informatikern an sich zu tun.
PS: In der Informatik-Spezialisierung "Embedded Systems" gibt es auch
Robotik-Fächer wo man Dinge wie Inverse Kinematik, ROS,
Roboter-Simulation usw lernt. Es gibt sogar einen Informatik
Master-Studiengang extra komplett für Robotik, u.a. mit Teilnahme am
Robocup. Man macht teilweise auch Schaltungsentwicklung und
Platinenlayouts. Die Teilnahme an der Formula Student (sehr viel
hardwarenahe Programmierung und Fahrzeugtechnik) wird gefördert. Ist
auch nicht so weit weg von Industrie und Maschinenbau, oder?
Programmierer schrieb:> Chris D. schrieb:>> Nein, das tut Lothar nicht. Es geht offenbar nur um diejenigen, die>> "Hardware zur Maschinensteuerung zu programmieren hatten".>> Und auch Maschinensteuerung ist etwas was Informatiker durchaus> beherrschen können.
Ja, natürlich - ich mache (neben anderem) genau das :-)
> Chris D. schrieb:>> Wie sieht das heutzutage aus?>> Genau so. Es gibt z.B. die Spezialisierung "Embedded Systems". Da lernt> man Regelungstechnik, Sichere Systeme (FuSi und so),> Mikrocontroller-Programmierung in C und C++, E-Technik-Grundlagen, DSP,> Adaptive Filter usw. Sollte doch für den Maschinenbau gar nicht so> falsch sein.
Danke für die Info.
Ja, das müsste dann doch passen - wenn Lothars Infos diese
Vertiefungsrichtung auch hatten.
Aber man darf natürlich auch nicht vergessen, dass man nicht viel kann,
wenn man frisch aus dem Studium kommt und nichts nebenbei gemacht hat
(daher unterstütze ich auch Formula Student - ist eine tolle Sache).
Wir Älteren vergessen das sehr oft.
Und dass sie nur wenig Zeit brauchten, um Lothars Erfahrungen
aufzunehmen, zeigt ja, dass sie durchaus fähig sind.
> Chris D. schrieb:>> Eher, dass es das heutige Abstraktionsniveau der Software immer noch>> spielend schafft, selbst schnellste Controller an ihr Limit zu treiben,>> Das hat aber nichts mit Informatikern an sich zu tun.
Richtig.
Aber ehrlich: irgendwo ist das doch Wahnsinn, wenn für eine simple
Taschenlampen-App (also im Prinzip etwas, das auf Knopfdruck eine LED
ein- und ausschalten muss) mittlerweile tatsächlich 5 MByte
heruntergeladen werden müssen.
Und dann schaut man sich eine alte Sinumerik 810T-CNC-Steuerung an, die
komplett keine 512kByte belegt und auf einem 80186 mit 16MHz läuft und
ist erstaunt, wieviel das Ding bereits beherrscht - in Echtzeit.
Chris D. schrieb:> Aber ehrlich: irgendwo ist das doch Wahnsinn, wenn für eine simple> Taschenlampen-App (also im Prinzip etwas, dass auf Knopfdruck eine LEDe> ein- und ausschalten muss) mittlerweile tatsächlich 5 MByte> heruntergeladen werden müssen.
Wobei App-Bloat eine ganz eigene Problematik ist, die mit dem
Programmierer-Problem für Maschinensteuerung nichts zu tun hat.
Walter T. schrieb:> Wobei App-Bloat eine ganz eigene Problematik ist, die mit dem> Programmierer-Problem für Maschinensteuerung nichts zu tun hat.
Ich bin mir da nicht sicher, ob man das trennen kann.
Denn offenbar führt genau die Denkweise "Wir haben unendlich viel
Speicher und Rechenleistung und tolle Wollmilchsäue als Bibliotheken" zu
solchen Programmkonstrukten, bei denen ohne größere Überlegung sehr
große Datenmengen per Funktionsaufruf übergeben werden und so die
Echtzeitfähigkeit sprengen.
Daher auch meine Frage, ob man auch als heutiger Informatiker nochmal
"ganz unten" nachschaut (und bspw. in Assembler programmiert) und ein
Gespür dafür vermittelt bekommt, was Code effizient macht.
Erfreulicherweise wird das ja in der entsprechenden Vertiefungsrichtung
auch noch gemacht. Ich nehme deswegen an, dass Lothars Schützlinge
einfach aus einem anderen Bereich kamen.
Aber vielleicht noch zum Thema Maschinenbausoftware:
wenn ich das hier so lese, dann bin ich doch froh, dass wir hier nur zu
zweit sind. Aber: schon hier muss geplant werden (allerdings ohne
irgendwelche spezielle Software).
Sehr bewährt hat sich, dass man nach dem ersten Anforderungskatalog
eines Kunden eine gewisse Zeit verstreichen lässt, in der man selbst
weitere Punkte sammelt und in der dem Kunden garantiert noch
"Kleinigkeiten" einfallen - und erst dann überhaupt in die
Softwareplanung geht. Und da ist dann noch lange keine einzige Zeile
Code geschrieben.
Aber auch das "Was könnte der Kunde noch zusätzlich wollen?" hat viel
mit Erfahrung zu tun, ebenso wie den Code so zu gestalten, dass später
noch leicht Erweiterungen möglich sind.
Chris D. schrieb:> Aber man darf natürlich auch nicht vergessen, dass man nicht viel kann,> wenn man frisch aus dem Studium kommt und nichts nebenbei gemacht hat
Ja, aber das gilt für alle Studiengänge. Tatsächlich sind Informatiker
hier eher im Vorteil, weil man im Studium und auch privat durchaus
programmieren üben kann. Maschinen bauen oder Labor-Experimente sind da
schon etwas schwieriger.
Chris D. schrieb:> Aber ehrlich: irgendwo ist das doch Wahnsinn, wenn für eine simple> Taschenlampen-App (also im Prinzip etwas, das auf Knopfdruck eine LED> ein- und ausschalten muss) mittlerweile tatsächlich 5 MByte> heruntergeladen werden müssen.
Das ist aber ein ganz anderes Problem. Google hat hier entschieden, dass
das das kleinere Übel ist: Die Apps bringen ihre eigenen Libraries und
Frameworks mit, alles zusammen in der .apk Datei. Das führt dazu dass
beliebte Frameworks - auch die, die von Google selbst stammen -
dutzendfach auf dem selben Gerät installiert sind. Dies ließe sich durch
einen Paketmanager wie APT lösen, welcher die Bibliotheken bei Bedarf
einmalig zentral installiert, die dann von den Apps benutzt werden
können. Ein solches System wäre, wie eben APT, aber derart komplex,
schwer beherrschbar und damit auch fehleranfällig, dass man das dem
Normalo-Android-User nicht zutrauen wollte. Unter Windows kennt man das
als "Dll-Hell". Die pragmatische Lösung ist es, nur ein Minimum an
gemeinsamer Funktionalität mit Android selbst auszuliefern (das
Android-Framework), und den Rest bringen die Apps selbst mit. Die
funktionieren dafür praktisch "immer" und man kann sie auch leichter
wieder deinstallieren, ohne Abhängigkeits-Chaos.
Dass APT in der Praxis so gut funktioniert ist den Maintainern zu
danken, welche unermüdlich mit riesigem Aufwand die Paketdatenbanken
pflegen. Das ist im schnelllebigen Mobile-Bereich, wo ständig neue Apps
und App-Versionen herauskommen, kaum zu stemmen. Wer mal eine Distro
genutzt hat, welche bei allen Paketen immer brandaktuelle Versionen
ausliefert kann ein Lied singen von unlösbaren Abhängigkeitsproblemen
(die gerne auch Updates komplett blockieren), die man nur durch
komplizierte Fummelei auflösen kann.
Dazu kommt, dass Apps Medien (Grafik, Video, Ton) für verschiedene
Sprachen und verschiedene Display-Auflösungen mitliefern. Das kann auch
eine Menge Platz belegen. Google versucht das mit App Bundles in den
Griff zu bekommen, was aber seine eigenen Probleme hat.
Chris D. schrieb:> Und dann schaut man sich eine alte Sinumerik 810T-CNC-Steuerung an,
Kann man da auch beliebige Apps von Drittherstellern installieren ohne
dass diese sich in die Quere kommen oder unauthorisierten Zugriff auf
Daten erhalten, eigene Apps ultrakomfortabel mit einer IDE entwickeln,
komplexe GUIs mit Medieninhalten bauen, Daten über verschiedene
Netzwerke austauschen, und sodass das ganze auch noch ziemlich sicher
ist?
Das Problem, beliebige Anwendungen und Komponenten kombinieren und
flexibel, effizient, robust und benutzerfreundlich ausliefern zu können
ist praktisch ungelöst. Wenn jemand eine Lösung hat, immer raus damit.
Bernd K. schrieb:> Dirk K. schrieb:>> Ändert man den enum, sind bei den ersten beiden Klassen>> alle Aufrufe im Client-Code zu ändern, die auf den enum>> zugreifen.>> In diesem Sinne also nur noch Klassen ohne jegliches öffentliche> Interface? Und auch keine öffentlichen Funktionen mehr in jeglichem> Code? Denn man könnte ja gezwungen sein das API zu ändern und dann> müssten alle Benutzer angepasst werden? Sorry, aber diese Argumentation> die Du da vorgebracht hast ist ungültig.
Nope, es muss das Ziel sein, Abhängigkeiten zu
minimieren und Kapselung zu maximieren. Aber
diesen Idealfall wird man in der Praxis nie
erreichen. Ein gutes Design findet dann halt
einen Kompromiss, mit dem man Leben kann.
Das wiederum ist das, was viele Nicht-Informatiker
nicht verstehen und davon ausgehen, Overengineering
macht den guten Informatiker aus - mitnichten.
Ich programmiere typischerweise keine Software
für Embedded Systeme, hatte aber auch schon
Projekte, die zeitkritisch waren. Man fängt halt bei
einer Lösung an, die nahe am Ideal liegt und muss
dann Kompromisse finden, um die Ausführungszeit
zu drücken. Da schrumpft dann die Klassenhierarchie
und Indirektionen durch Benutzung von Interfaces
verschwinden etc.
Die Leute aus der Hardwareecke rotzen typischerweise
ein paar tausend Zeilen globale C-Funktionen hin
und meinen gute Software zu schreiben. Denen fehlt
meistens der Blick aus der anderen Richtung.
Erst sauberen Code schreiben, auf Wartungsfreundlichkeit,
achten etc., dann kann man über Optimierungen reden,
um den Code schneller zu machen.
merciless
Programmierer schrieb:> Jetzt lästern schon die Mods verallgemeinernd über Informatiker...
Ich hatte die paar, mit denen ich direkt zu tun hatte, beispielhaft
angebracht. Wo habe ich Ansprüche auf die Allgemeingültigkeit meiner
Beobachtungen gestellt?
Programmierer schrieb:> Chris D. schrieb:>> Nein, das tut Lothar nicht. Es geht offenbar nur um diejenigen, die>> "Hardware zur Maschinensteuerung zu programmieren hatten".> Und auch Maschinensteuerung ist etwas was Informatiker durchaus> beherrschen können.
Tun die, die ich da "nachgebildet" habe, ja jetzt auch. Nur wussten sie
das eben vorher offensichtlich nicht. Oder nicht hinreichend.
Chris D. schrieb:> Und dass sie nur wenig Zeit brauchten, um Lothars Erfahrungen> aufzunehmen, zeigt ja, dass sie durchaus fähig sind.
Ja, es wurde ihnen einfach nicht beigebracht. Oder es wurde nicht darauf
hingedeutet, dass das wichtig wäre. Oder sie haben es vergessen.
Oderwasweißich.
Wobei nach eigener Aussage bis dahin die wenigsten mal ein Assemblerfile
ihres Codes angeschaut oder gar näher analysiert hatten...
Programmierer schrieb:> Tatsächlich sind Informatiker hier eher im Vorteil, weil man im Studium> und auch privat durchaus programmieren üben kann. Maschinen bauen oder> Labor-Experimente sind da schon etwas schwieriger.
Allerdings ist es halt so, dass man zum Lernen einer Srategie zur
Steuerungsprogrammierung eben auch eine Steuerung haben muss, die im
Ideal auch was steuert. Denn sonst lernt man bestenfalls,
Reaktionszeiten im 100ms Bereich zu programmieren, weil ein Mensch an
der Tastatur oder der Maus eben nicht viel schneller ist.
Und an der Maschine/Hardware selber muss man dann eben 1000 mal
schneller reagieren und darf auch nicht unnötig herumtrödeln.
Am Rande: gerade habe ich das "Problem" an der Backe, dass ein
Software-Kollege vor dem Speichern von Logdaten den Powerfail nicht
abfragt und deshalb SD-Karten korrumpiert werden. Der hat mich dann
vorwurfsvoll angeschaut und gemeint, das müsse doch die Hardware
sicherstellen, dass das Schreiben funktioniert... :-o
Dirk K. schrieb:> Nope, es muss das Ziel sein, Abhängigkeiten zu> minimieren und Kapselung zu maximieren.
Das erreichst Du aber nicht mit pauschalen Fausregeln wie oben (die von
sich aus an dem Grundproblem gar nichts ändern) sondern nur durch viel
allgemeinere Praktiken und Überlegungen bei der Planung der Architektur
die sich meist nicht auf einfaches "tu dieses anstatt jenem dann ist
alles gut" herunterbrechen lassen. Über dieses Thema kann man ganze
Bücher schreiben.
Wenn ein naiver Anfänger nämlich jetzt liest daß ein öffentliches enum
per se böse sein soll und damit im Hinterkopf dann überall mit aller
Gewalt anfängt seinen Code seitenweise mit is_foo(), is_bar(), is_baz(),
..., set_foo(), set_bar(), set_baz(), ... vollzupflastern und dann als
nächstes überall nochmal seitenweise if/else oder switch-Konstrukte
braucht um dieses umständliche API zu bedienen anstatt einfach den wert
des enums zu speichern oder weiterzureichen ist niemandem gedient!
Es gibt enums da weiß man von vornherein daß sie sich niemals ändern
werden und es gibt enums da weiß man vorher schon daß sie unvollständig
sind. Aber gerade letztere haben so viele Elemente daß Dein
is_foo()/is_bar()/... Ansatz sowieso vollkommen unpraktikabel ist, dann
nimmt man (zumindest nach außen hin) vielleicht auch kein enum sondern
numerische Konstanten, aber das muß man im Einzelfall entscheiden: Wer
benutzt diese API überhaupt? Kann ich in einem einzigen commit den
Datentyp überall ändern ohne daß es jemals nach außen dringt?
Auf jeden Fall wie auch immer man es macht, es hat nichts mit Properties
vs setter/getter zu tun, das ändert absolut nichts am Grundproblem wie
man API-Brüche vermeidet. Einen Setter braucht man in der Regel nur dann
wenn das Setzen auch eine Aktion auslösen soll, meist weiß man das aber
vorher schon, und da kommt es auch auf die Programmiersprache an, es
gibt auch Sprachen da kann man nachträglich bei Bedarf noch hooks an
Property-Zugriffe dranhängen und am öffentlichen API ändert sich dadurch
dann gar nichts, oder man kann Properties haben die read-only sind, da
kann man sich den ganzen getter/setter-Bloat und die daran hängende
ewige Diskussion um die Sinnhaftigkeit dann komplett sparen!
Ing schrieb:> nahmhaften Unternehmen dieser Branche komplexe (Hochsprachen-)Software
Also im Maschinenbau wären das in dieser Reihenfolge VB .net und VB 6 /
RealBasic / Xojo und neuerdings PyQt
Bernd K. schrieb:> Dirk K. schrieb:>> Nope, es muss das Ziel sein, Abhängigkeiten zu>> minimieren und Kapselung zu maximieren.>> Das erreichst Du aber nicht mit pauschalen Fausregeln wie oben> ...> Wenn ein naiver Anfänger nämlich jetzt liest daß ein öffentliches enum> per se böse sein soll und damit im Hinterkopf dann überall mit aller> Gewalt anfängt seinen Code seitenweise mit is_foo(), is_bar(), is_baz(),> ..., set_foo(), set_bar(), set_baz(), ... vollzupflastern und dann als> nächstes überall nochmal seitenweise if/else oder switch-Konstrukte> braucht um dieses umständliche API zu bedienen anstatt einfach den wert> des enums zu speichern oder weiterzureichen ist niemandem gedient!
Ja immer schön auf dem enum rumreiten:
Das war ein Beispiel, um Kapselung zu
demonstrieren, das kann man doch nicht
verallgemeinern!
Ach, heute ist ja Freitag...
merciless
Lothar M. schrieb:> Am Rande: gerade habe ich das "Problem" an der Backe, dass ein> Software-Kollege vor dem Speichern von Logdaten den Powerfail nicht> abfragt und deshalb SD-Karten korrumpiert werden. Der hat mich dann> vorwurfsvoll angeschaut und gemeint, das müsse doch die Hardware> sicherstellen, dass das Schreiben funktioniert... :-o
Im Grunde genommen hat er ja auch Recht:
Keine Software der Welt kann etwas gegen einen plötzlichen Ausfall der
Versorgungsspannung unternehmen. Denn wenn keine Spannung da ist, läuft
die Software nun mal nicht (mehr).
Deshalb gibt es zur Lösung solcher Probleme eine Pufferung über eine
alternative Spannungsversorgung. Sei es eine Batterie, oder ein
entsprechend groß dimensionierter Kondensator, ...
Dann fährt man das System eben sauber herunter, wenn ein
Spannungsausfall detektiert wurde, und gut ist.
Mark B. schrieb:> Deshalb gibt es zur Lösung solcher Probleme eine Pufferung über eine> alternative Spannungsversorgung. Sei es eine Batterie, oder ein> entsprechend groß dimensionierter Kondensator, ...> Dann fährt man das System eben sauber herunter, wenn ein> Spannungsausfall detektiert wurde, und gut ist.
So hatte ich Lothar verstanden: solange kein Signal "Powerfail" anliegt,
ist das Schreiben der Karte problemfrei bzw. die Versorgung ausreichend
gepuffert (vermutlich mit Vorgabe der maximalen Pufferzeit).
Verabsäumt man aber dessen Abfrage, dann wird das Schreiben zur
Glückssache und das ist hier offenbar prompt schief gegangen.
Es ist also durchaus eine Sache der Software.
A. S. schrieb:> Konkrete Objekte werden dann meist alibi-mäßig genauso gehandhabt ("ich> leite alle 4 Räder von der Klasse Rad ab! und instanziiere sie dann."> Super, hier ein Lutscher). Das ist quatsch. Es gibt genau 4 Räder am> Auto, und alle 4 haben spezifische Eigenschaften und es macht überhaupt> keinen Sinn, ein 5tes zu instanziieren oder nur 3. Kein DSP kommt damit> klar, wenn man ein Rad weglässt oder 2 tauscht. Globale Objekte spiegeln> hier nur die Aufgabe wieder und sind nicht böse. Wie weit das ignoriert> wird, zeigt sich, wenn Autosar (wo Milliarden hinterstehen) als Gebastel> angesehen wird, weil es den EDV-Mantras nicht folgt.
Schon recht.
Es gibt freilich auch Fälle beim Automobil, wo es sinnvoll sein kann
wenn man mehr oder weniger Objekte instanziieren kann. Zum Beispiel
haben manche Autos vorne und hinten elektrische Fensterheber, manche nur
vorne und hinten nicht, manche gar keine. Auch manche
Ausstaatungsverianten kann man vielleicht sinnvoll mit OOP abbilden.
Wenn das entsprechende System verbaut ist, wird eben instanziiert, wenn
nicht dann eben nicht.
Aber klar: Man muss nicht alles mit OOP machen. Und auch wenn man in C++
etc. prgrammiert, kann es durchaus globale Objekte geben. Wenn diese
sinnvoll mit der Realität übereinstimmen, wie bei dem Beispiel mit den
genau 4 Rädern, dann ist das doch okay so.
Chris D. schrieb:> So hatte ich Lothar verstanden: solange kein Signal "Powerfail" anliegt,> ist das Schreiben der Karte problemfrei bzw. die Versorgung ausreichend> gepuffert (vermutlich mit Vorgabe der maximalen Pufferzeit).>> Verabsäumt man aber dessen Abfrage, dann wird das Schreiben zur> Glückssache und das ist hier offenbar prompt schief gegangen.>> Es ist also durchaus eine Sache der Software.
Die alternative Spannungsversorgung sollte natürlich noch so lange
funktionieren, dass man sauber protokollieren kann was geschehen ist.
Sonst weiß man ja hinterher gar nicht, warum das System ausgefallen
ist. Viel Spaß dann bei der Fehlersuche! ;-)
Wenn man also den Log-Vorgang nicht mehr sinnvoll abschließen kann, weil
einem vorher schon der Saft ausgeht, dann ist das zumindest nicht
alleine ein Problem der Software.
Mark B. schrieb:> Im Grunde genommen hat er ja auch Recht: Keine Software der Welt kann> etwas gegen einen plötzlichen Ausfall der Versorgungsspannung unternehmen.
Lies mal, was ich geschrieben habe: natürlich ist ein Powerfail-Signal
da. Man muss es verwenden. Es ging mir eher darum, dass es dem
Softwerker überhaupt nicht bewusst war, dass es da überhaupt ein
Problem geben könnte.
> ein entsprechend groß dimensionierter Kondensator
Dass wir angesichts der knappen Stützzeit dieser Komponente vorher in
der Spec festgehalten hatten, dass keine Schreibzugriffe auf die
SD-Karte erfolgen dürfen, ist dabei nur ein kleiner Nebenschauplatz. Es
ergab sich eben "mit der Zeit", dass die Logdaten gespeichert werden
müssen.
Mal sehen, wie ich aus der Nummer wieder rauskomme...
Lothar M. schrieb:> Mark B. schrieb:>> Im Grunde genommen hat er ja auch Recht: Keine Software der Welt kann>> etwas gegen einen plötzlichen Ausfall der Versorgungsspannung unternehmen.> Lies mal, was ich geschrieben habe: natürlich ist ein Powerfail-Signal> da. Man muss es verwenden. Es ging mir eher darum, dass es dem> Softwerker überhaupt nicht bewusst war, dass es da überhaupt ein> Problem geben könnte.>>> ein entsprechend groß dimensionierter Kondensator> Dass wir angesichts der knappen Stützzeit vorher in der Spec> festgehalten hatten, dass keine Schreibzugriffe auf die SD-Karte> erfolgen dürfen, ist dabei nur ein kleiner Nebenschauplatz. Es ergab> sich eben "mit der Zeit", dass die Logdaten gespeichert werden müssen.>> Mal sehen, wie ich aus der Nummer wieder rauskomme...
Nun ja, ohne vernünftiges Mitloggen der Fehlermeldungen stelle ich mir
die Fehlersuche eher schwierig vor. Aber ich kenne das System und die
Anforderungen an dieses nicht. Nur wenn man nicht mehr loggen kann,
obwohl es gerade äußerst sinnvoll wäre dies zu tun, dann ist das
zumindest sagen wir suboptimal :-)
Lothar schrieb:> Ing schrieb:>> nahmhaften Unternehmen dieser Branche komplexe (Hochsprachen-)Software>> Also im Maschinenbau wären das in dieser Reihenfolge VB .net und VB 6 /> RealBasic / Xojo und neuerdings PyQt
Im Maschbau wird echt VB häufig eingesetzt, oder ist das ein Scherz ?
Für was, die Leitrechner ?
motzkopp schrieb:> Im Maschbau wird echt VB häufig eingesetzt, oder ist das ein Scherz ?> Für was, die Leitrechner ?
Heute wohl nicht mehr, aber es war recht verbreitet, die
Visualisierungen in VB zu machen. Oder halt alles, wo irgend ein
Benutzer mit dem PC interagiert.
MFC und Windows API waren damals nicht wirklich intuitiv, Delphi gut
aber exotisch (Pascal), QT und DotNet gabs noch nicht. Java auf Windows
auch irgendwie Stiefmütterlich. Mit DotNet haben dann viele von denen,
die in C eh µC gemacht haben, auf C# umgestellt, weil es ja C so ähnlich
ist ;-)
A. S. schrieb:> Mit DotNet haben dann viele von denen,> die in C eh µC gemacht haben, auf C# umgestellt, weil es ja C so ähnlich> ist ;-)
Ist ja auch so. Im Vergleich zu VB oder MS Visual C++ ist C# eine
wohltat.
A. S. schrieb:> auf C# umgestellt, weil es ja C so ähnlich> ist ;-)
C# soll wohl ähnlicher zu ObjectPascal/Delphi (somit also exotisch) sein
als jegliches C/C++-Derivat. Nur die geschweiften Klammern und die
unsägliche Prefix-Typen-Grammatik wurde beibehalten damit der
Kulturschock abgemildert wird.
Bernd K. schrieb:> C# soll wohl ähnlicher zu ObjectPascal/Delphi (somit also exotisch) sein> als jegliches C/C++-Derivat.
C# hat praktisch nichts mit C, C++, Pascal zu tun. Wenn schon ist C#
sehr ähnlich zu Java, da beides auf Bytecode und einer VM basiert. Wie
jetzt die Klammern aussehen und wo die Typen stehen ist ein rein
kosmetischer Aspekt und sonst ziemlich egal.
Lothar M. schrieb:> Es> ergab sich eben "mit der Zeit", dass die Logdaten gespeichert werden> müssen.
Ach, eine sich plötzlich ändernde Anforderung, die die Informatiker
ausbaden müssen...
Programmierer schrieb:> da beides auf Bytecode und einer VM basiert
Das ist für die Sprache irrelevant, das ist nur ein
Implementierungsdetail des zufällig gerade verwendeten Compilers.
Bernd K. schrieb:> Das ist für die Sprache irrelevant, das ist nur ein> Implementierungsdetail des zufällig gerade verwendeten Compilers.
Zum einen das und auf der Zielmaschine kann man dann immer noch ngen
drüber laufen lassen.
Bernd K. schrieb:> Das ist für die Sprache irrelevant, das ist nur ein> Implementierungsdetail des zufällig gerade verwendeten Compilers.
Gut zu wissen, dann schreibe ich meine AVR Programme demnächst in C#,
weil ich dessen Syntax schöner finde als die von C.
Dann will ich hier auch mal den Klugscheisser geben:
C# ist sehr sehr ähnlich zu Java, da hat Microsoft abgeschaut, was beide
auszeichnet ist die Garbage Collection, man braucht sich um den Speicher
nicht zu kümmern.
Anders als bei Delphi, C++, C. Die haben gemeinsam, dass es Pointer
gibt, das kennt ein Java oder c# Entwickler nicht.
Und C ist die einzige nicht OOP Sprache von allen.
Ing schrieb:> hatte ich bisher einfach nur Pech mit den Firmen oder ist das> "branchenüblich"?
Nein, so ein Chaos ist branchenüblich und stammt aus vielen Dingen wie
Unwissenheit, Knappheit an Ressourcen, Budget, wie auch fehlendes QM,
kein seriöses Requirement Engineering oder Tools u.v.m.
Auch in anderen traditionellen aber auch modernen Branchen üblich: man
ist sich immer noch gewöhnt, in Projekten mit Office, x Wordversionen,
xy Excelversionen und hunderte Mails zu arbeiten, vor allem verstaubte
Projektleiter.
Grüsse
klausi
klausi schrieb:> stammt aus vielen Dingen wie> Unwissenheit, Knappheit an Ressourcen, Budget, wie auch fehlendes QM,> kein seriöses Requirement Engineering oder Tools u.v.m.
Gibt es sich alles. Ist in Summe aber nicht stichhaltig. Gerade Budget
ist im Maschinenbau da, QM wurde quasi dort erfunden, und das deutscher
Maschinenbau keine Anforderungen kennt bzw. Kundenwünsche erfüllt, ist
auch nicht wirklich offensichtlich.
Vielleicht ist es doch so, dass sich offensichtlich falsche Methoden
dann doch als das herausgestellt haben, was sie sind: falsch.
Ja, wenn die Schreiner Doors verwenden würden, ihre Zollstöcke
regelmäßig kalibrieren und jeden Woche einen Tage am internen
Qualitätszirkel teilnehmen würden, dann würden sich die vielen Fehler
(vermessene Türen, falsche Maserung) sicher reduzieren.
Oder welche Fortschritte würde die Physik machen, wenn sie sich endlich
wie die Mathematik rein auf Berechnungen stützt, anstatt an all diesen
fehlerbehafteten Messungen festzuhalten,.
Motzkopp schrieb:> Dann will ich hier auch mal den Klugscheisser geben:> C# ist sehr sehr ähnlich zu Java, da hat Microsoft abgeschaut, was beide> auszeichnet ist die Garbage Collection, man braucht sich um den Speicher> nicht zu kümmern.https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
Zitat: C# was designed by Anders Hejlsberg, ...
James Gosling, who created the Java programming language in 1994, and
Bill Joy, a co-founder of Sun Microsystems, the originator of Java,
called C# an "imitation" of Java; Gosling further said that "[C# is]
sort of Java with reliability, productivity and security deleted." Klaus
Kreft and Angelika Langer (authors of a C++ streams book) stated in a
blog post that "Java and C# are almost identical programming languages.
Boring repetition that lacks innovation," "Hardly anybody will claim
that Java or C# are revolutionary programming languages that changed the
way we write programs," and "C# borrowed a lot from Java - and vice
versa. Now that C# supports boxing and unboxing, we'll have a very
similar feature in Java." In July 2000, Hejlsberg said that C# is "not a
Java clone" and is "much closer to C++" in its design.
https://en.wikipedia.org/wiki/Anders_Hejlsberg
Zitat: He was the original author of Turbo Pascal and the chief
architect of Delphi. He currently works for Microsoft as the lead
architect of C# and core developer on TypeScript.
> Anders als bei Delphi, C++, C. Die haben gemeinsam, dass es Pointer> gibt, das kennt ein Java oder c# Entwickler nicht.
Na na na: https://www.c-sharpcorner.com/article/pointers-in-C-Sharp/
merciless