Folgende Benutzer bedankten sich beim Autor msfox für den Beitrag:
ralf.wenzel
Funktionsgruppen sind wenn schon eher Klassen mit Vererbung. Schon aufgrund des globalen Sichtbarkeitsbereiches im TOP Include. Nun ja mehr können Funktionsgruppen nicht. Das die UI an der Logik gekoppelt ist, ist eher ein Nachteil denn ein Vorteil. Deswegen sollte man heutzutage nur noch dann einen FM schreiben, wenn man UI braucht. Für alles andere sollten ausschließlisch Klassen benutzt werden.DeathAndPain hat geschrieben: ↑04.09.2024 11:22Tatsächlich würde ich Klassen nicht mit Formroutinen vergleichen, sondern mit Funktionsgruppen. Wenn man genau darüber nachdenkt, stellt man fest, dass eine Funktionsgruppe von der Funktionalität her nichts anderes ist als eine abstrakte Klasse ohne Vererbung und separate Interfaces. Die darin enthaltenen Funktionsbausteine sind die Methoden, und die globalen Variablen der Funktionsgruppe sind die Attribute. Womit einmal mehr das deutlich wird, was ich immer wieder gerne betone: Attribute sind nichts anderes als globale Variablen mit all ihren Nachteilen und nach meiner Überzeugung der Hauptgrund dafür, dass ABAP OO-Programme so oft viel schlechter verständlich sind als herkömmliche prozedurale Programme. Durch die Attribute ist das Verhalten der Methoden nicht mehr durch das definiert, was man den Methoden über ihre Schnittstelle übergibt, und eine Methode kann sich mal so und mal völlig anders verhalten, je nachdem, was eine völlig andere Methode irgendwann früher mal irgendwo in einem Attribut abgelegt hat. Wer die Klasse nicht sehr gut kennt (bzw. sie gerade erst zu begreifen versucht), bekommt hier gerne mal die größten Verständnisprobleme.
Vom Leistungsumfang sind Funktionsgruppen und statische Klassen ohne Vererbung also gleich. Wenn man das Detail hinzunimmt, dass Funktionsgruppen eigene Dynpros haben und RFC-tauglich sein können, können sie in bestimmten Hinsichten sogar ein bisschen mehr. Allein die Schönheit der Aufrufe (insbesondere funktionaler Aufrufe und Aufrufe mit Inline-Deklarationen) rechtfertigt es in meinen Augen aber durchaus, dennoch auf abstrakte Klassen zu setzen. Meine Programme sind deutlich besser lesbar geworden, seit ich das mache - was das Handhaben höherer Abstraktionsgrade erleichtert.
Folgende Benutzer bedankten sich beim Autor gtoXX für den Beitrag:
ralf.wenzel
Also das Performanceargument trifft schon mal gar nicht zu. Warum gibt es Instanziierung ? Weil ein Objekt zu seiner Laufzeit von einem Objekt gleichen Typs ersetzt werden kann. Das kann ein FM nicht. Die auch ganz furchtbar sind.DeathAndPain hat geschrieben: ↑05.09.2024 10:41
Wie von black_adept schon eingewendet habe ich explizit "abstrakte Klassen" gesagt, also Klassen, die nicht instanziierbar sind. Bei solchen Klassen hast Du nicht mehrere Objekte für mehrere Belege (oder was auch immer). Natürlich kann man mit Instanziierung von Objekten Sachen machen, die über Funktionsgruppen hinausgehen. Das habe ich nie bestritten. Allerdings habe ich auf den Umstand hingewiesen, dass der Löwenanteil der Klassen, die ich von anderen Entwicklern zu sehen bekomme, nur genau einmal instanziiert wird. Dann aber ist die Instanziierung nutzlos und legt nur eine überflüssige Abstraktionsebene drüber, die die Performance senkt und das Programm schlechter lesbar macht.
Forms haben zusätzlich den Nachteil, das ein USING gleichzeitig ein CHANGING ist und es keine Returnparameter gibt.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Das stimmt nicht so ganz. Von der Lesbarkeit her sind PERFORM-Aufrufe einfach schrecklich, zumal sie bei ihren Parametern keine Formeln und keine Inline-Deklarationen erlauben und nicht funktional nutzbar sind. Allein dafür lohnt es sich schon, stattdessen Methoden zu verwenden. Die Aufteilung in DEFINITION und IMPLEMENTATION-Block halte ich für akademisch und nutzlos; das ist nur Schreibarbeit und erschwert die Lesbarkeit des Programms. Doch sogar diesen Preis bin ich für die um Längen übersichtlicheren Methodenaufrufe bereit zu zahlen. Wobei ich mir aber die Arbeit mache, die Parametrisierung meiner Methoden als Kommentar nochmal dorthin zu übertragen, wo sie meiner Meinung nach hingehört: an den Anfang der IMPLEMENTATION. Des Problems, dass solch Kommentar sich (anders als bei Funktionsbausteinen) nicht automatisch aktualisiert, wenn ich einen Parameter ändere, bin ich mir bewusst.
Da würde ich schon mal nachfragen ob derjenige überhaupt OO verstanden hat.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Wie gesagt, wenn die Zustände sinnvoll genutzt und so gut dokumentiert werden, dass auch ein anderer Entwickler nachvollziehen kann, wofür genau die Attribute stehen und wo ihre Werte herkommen (können) und wann sie gesetzt werden, dann habe ich da keine Einwände. In der von mir erlebten Praxis sehe ich aber fast nur Ein-Objekt-Klassen mit als globalen Variablen (im negativsten Sinne des Wortes) verwendeten "Attributen".
Weil eine solche Doku gar nicht notwendig ist. Woher die Werte eines Attributs kommen ist per OO Definition klar : Nur das Objekt selbst, verwaltet seine Attribute. Die Werte können also von nirgendwoher anders kommen. Ist eine Änderung nötig, dann geschieht das nach "Open-closed" Prinzip über eine Methode. Denn so behält das Objekt die Kontrolle darüber, dass seine Attribute stets konsistent geändert werden und immer konsistent sind.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Das ist ein berechtigter Einwand, ebenso wie der Umstand, dass es keine lokalen Funktionsgruppen gibt. Aber ich bitte, sich zu erinnern, was ich eigentlich sagen wollte. Ich habe nie postuliert, dass man anstelle von Klassen besser Funktionsgruppen verwenden solle, sondern wollte nur auf die auffallenden Parallelen zwischen Funktionsgruppen und abstrakten Klassen aufmerksam machen. Das wirft ein Schlaglicht auf das Konzept der "Attribute". Für mich sind "Attribute" nichts anderes als schöngeredete globale Variablen. Die Nachteile sind nämlich genau dieselben: Sie sind nicht Bestandteil des Parameterinterfaces der Methoden, und wenn man das Programm nicht selber geschrieben hat, ist es sauschwer nachzuvollziehen, wo ihre Werte herkommen und wofür sie irgendwann später im Code noch alles verwendet werden (welche Auswirkungen eine Änderung also hat). Theoretisch müsste man das superakkurat dokumentieren. Praktisch habe ich in meinem ganzen Leben noch nicht ein OO-Programm gesehen, dessen Ersteller das gemacht hätte, erst recht nicht dort, wo man solch Doku unter allen Umständen wiederfindet, nämlich direkt in der Klassen- oder Methodendokumentation.
Also das Performanceargument trifft schon mal gar nicht zu. Warum gibt es Instanziierung ? Weil ein Objekt zu seiner Laufzeit von einem Objekt gleichen Typs ersetzt werden kann. Das kann ein FM nicht. Die auch ganz furchtbar sind.DeathAndPain hat geschrieben: ↑05.09.2024 10:41
Wie von black_adept schon eingewendet habe ich explizit "abstrakte Klassen" gesagt, also Klassen, die nicht instanziierbar sind. Bei solchen Klassen hast Du nicht mehrere Objekte für mehrere Belege (oder was auch immer). Natürlich kann man mit Instanziierung von Objekten Sachen machen, die über Funktionsgruppen hinausgehen. Das habe ich nie bestritten. Allerdings habe ich auf den Umstand hingewiesen, dass der Löwenanteil der Klassen, die ich von anderen Entwicklern zu sehen bekomme, nur genau einmal instanziiert wird. Dann aber ist die Instanziierung nutzlos und legt nur eine überflüssige Abstraktionsebene drüber, die die Performance senkt und das Programm schlechter lesbar macht.
Forms haben zusätzlich den Nachteil, das ein USING gleichzeitig ein CHANGING ist und es keine Returnparameter gibt.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Das stimmt nicht so ganz. Von der Lesbarkeit her sind PERFORM-Aufrufe einfach schrecklich, zumal sie bei ihren Parametern keine Formeln und keine Inline-Deklarationen erlauben und nicht funktional nutzbar sind. Allein dafür lohnt es sich schon, stattdessen Methoden zu verwenden. Die Aufteilung in DEFINITION und IMPLEMENTATION-Block halte ich für akademisch und nutzlos; das ist nur Schreibarbeit und erschwert die Lesbarkeit des Programms. Doch sogar diesen Preis bin ich für die um Längen übersichtlicheren Methodenaufrufe bereit zu zahlen. Wobei ich mir aber die Arbeit mache, die Parametrisierung meiner Methoden als Kommentar nochmal dorthin zu übertragen, wo sie meiner Meinung nach hingehört: an den Anfang der IMPLEMENTATION. Des Problems, dass solch Kommentar sich (anders als bei Funktionsbausteinen) nicht automatisch aktualisiert, wenn ich einen Parameter ändere, bin ich mir bewusst.
Da würde ich schon mal nachfragen ob derjenige überhaupt OO verstanden hat.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Wie gesagt, wenn die Zustände sinnvoll genutzt und so gut dokumentiert werden, dass auch ein anderer Entwickler nachvollziehen kann, wofür genau die Attribute stehen und wo ihre Werte herkommen (können) und wann sie gesetzt werden, dann habe ich da keine Einwände. In der von mir erlebten Praxis sehe ich aber fast nur Ein-Objekt-Klassen mit als globalen Variablen (im negativsten Sinne des Wortes) verwendeten "Attributen".
Weil eine solche Doku gar nicht notwendig ist. Woher die Werte eines Attributs kommen ist per OO Definition klar : Nur das Objekt selbst, verwaltet seine Attribute. Die Werte können also von nirgendwoher anders kommen. Ist eine Änderung nötig, dann geschieht das nach "Open-closed" Prinzip über eine Methode. Denn so behält das Objekt die Kontrolle darüber, dass seine Attribute stets konsistent geändert werden und immer konsistent sind.DeathAndPain hat geschrieben: ↑05.09.2024 10:41Das ist ein berechtigter Einwand, ebenso wie der Umstand, dass es keine lokalen Funktionsgruppen gibt. Aber ich bitte, sich zu erinnern, was ich eigentlich sagen wollte. Ich habe nie postuliert, dass man anstelle von Klassen besser Funktionsgruppen verwenden solle, sondern wollte nur auf die auffallenden Parallelen zwischen Funktionsgruppen und abstrakten Klassen aufmerksam machen. Das wirft ein Schlaglicht auf das Konzept der "Attribute". Für mich sind "Attribute" nichts anderes als schöngeredete globale Variablen. Die Nachteile sind nämlich genau dieselben: Sie sind nicht Bestandteil des Parameterinterfaces der Methoden, und wenn man das Programm nicht selber geschrieben hat, ist es sauschwer nachzuvollziehen, wo ihre Werte herkommen und wofür sie irgendwann später im Code noch alles verwendet werden (welche Auswirkungen eine Änderung also hat). Theoretisch müsste man das superakkurat dokumentieren. Praktisch habe ich in meinem ganzen Leben noch nicht ein OO-Programm gesehen, dessen Ersteller das gemacht hätte, erst recht nicht dort, wo man solch Doku unter allen Umständen wiederfindet, nämlich direkt in der Klassen- oder Methodendokumentation.
Das stimmt so nicht. Es gibt diverse andere Gründe FM zu schreiben
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain
Aber wir werden uns schnell einig, wenn wir sagen: Man braucht schon einen triftigen Grund für eine Funktionsgruppe / einen Funktionsbaustein. Nicht, weil man eine Funktion braucht die man aufrufen kann, dafür sollte man wirklich besser in OO-Objekten arbeiten.black_adept hat geschrieben: ↑09.10.2024 14:36Das stimmt so nicht. Es gibt diverse andere Gründe FM zu schreiben
- RFC-FuBa
- Verbucher
- Parallelisieriung
? Ereigniskopplung?
...
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag (Insgesamt 2):
black_adept • gtoXX
Für die Parallelisierung brauche ich keine FM mehr. Das gibt's ebenso OO basiert. Eine Verbuchungslogik per FM ist ebenfalls nur in seltenen Fällen nötig, ich kann die Konsistenz einer LUW auch anders sicherstellen. RFC Fubas brauche ich nur da, wo ich keinen Service habe. Ich weiß nicht genau, welche Ereigniskopplung du meinst, aber die SWEC z.b. kann mit Klassen umgehen. Selbst wenn ich einen FuBa noch schreibe, sollte er letztlich nichts anderes sein, als ein Wrapper für einen Objektaufruf.black_adept hat geschrieben: ↑09.10.2024 14:36Das stimmt so nicht. Es gibt diverse andere Gründe FM zu schreiben
- RFC-FuBa
- Verbucher
- Parallelisieriung
? Ereigniskopplung?
...
Diese Aussage halte ich für absurd. Das TOP-Include ist nur dazu da, Typen und Felder zu definieren. Die sind funktionsgruppenglobal. Damit entspricht es der Definition von Typen und Feldern im DEFINITION-Block der Klasse, die damit dann klassenglobal sind.Funktionsgruppen sind wenn schon eher Klassen mit Vererbung. Schon aufgrund des globalen Sichtbarkeitsbereiches im TOP Include.
Eine Behauptung, die Du nicht belegst, während das Gegenteil offensichtlich ist: Jeder Befehl, also auch das Erzeugen einer Instanz, kostet Rechenzeit. Das ist mehr Rechenzeit, als stattdessen nichts zu machen, soviel steht fest. Und "stattdessen nichts machen" ist genau das, was bei einer statischen Klasse nötig ist. In dem Fall, in dem nur eine einzige Instanz erforderlich ist (und nur von diesem Fall habe ich gesprochen) ist beides funktional gleichwertig, denn eine statische Klasse hat eine implizite Instanz, die nicht händisch erzeugt werden muss. Zugleich ist die Lesbarkeit besser, da der dann nutzlose Objekterzeugungswasserkopf im Quellcode fehlt.Also das Performanceargument trifft schon mal gar nicht zu.
In dem Moment, in dem Du mehrere Objektinstanzen benötigst, ja. Ich habe explizit von dem Fall gesprochen, in dem im ganzen Programm stets nur eine einzige Instanz der Klasse angelegt wird. In den "objektorientierten" Programmen, die ich von anderen zu sehen bekomme, kommt dies nicht nur vor, sondern ist sogar der erdrückende Löwenanteil. Und das finde ich bescheuert; dann brauche ich keine Instanziierung.Warum gibt es Instanziierung ? Weil ein Objekt zu seiner Laufzeit von einem Objekt gleichen Typs ersetzt werden kann.
Dafür ist bei Methoden ein EXPORTING gleichzeitig ein CHANGING, jedenfalls solange nicht explizit Wertübergabe definiert ist.Forms haben zusätzlich den Nachteil, das ein USING gleichzeitig ein CHANGING ist
Da bin ich vom Gegenteil überzeugt, aus Gründen, die ich im Verlauf dieses Threads bereits dargelegt habe. Was Du mutmaßlich nicht gelesen hast.Die Aufteilung in Definition und Implementierung erhöht die Lesbarkeit von Klassen deutlich.
Um Himmels willen, was für eine Aussage!!! Das kann ich nicht glauben, dass jemand ernsthaft sowas behauptet.Wenn ich Kommentare für Parameter lese gehe ich automatisch von schlechten Parameternamen aus. 30 Zeichen reichen durchaus aus eine Bezeichnung zu wählen, die jedes Kommentar überflüssig machen. Kommentare sind per se nutzloser Wartungscode.
Das haben diese Leute nicht, aber das wirft ein Schlaglicht auf den Umstand, das nahe an 0% der ABAP-Programmierer OO verstanden haben. Und das wiederum wirft ein Schlaglicht auf OO, denn eine Sprache, die so akademisch ist, dass keiner ihrer praktischen Verwender in der realen Welt sie wirklich versteht und weiß, wie er damit umgehen muss, ist eben genau das: akademisch und nicht praxistauglich. Auch wenn das verbleibende Prozent der Entwickler, die es verinnerlicht haben, tolle Sachen damit veranstalten kann.Da würde ich schon mal nachfragen ob derjenige überhaupt OO verstanden hat.DeathAndPain hat geschrieben:Wie gesagt, wenn die Zustände sinnvoll genutzt und so gut dokumentiert werden, dass auch ein anderer Entwickler nachvollziehen kann, wofür genau die Attribute stehen und wo ihre Werte herkommen (können) und wann sie gesetzt werden, dann habe ich da keine Einwände. In der von mir erlebten Praxis sehe ich aber fast nur Ein-Objekt-Klassen mit als globalen Variablen (im negativsten Sinne des Wortes) verwendeten "Attributen".
Und das Objekt kann 100 Methoden haben, die dies tun. Mit der gleichen Berechtigung könnte ich als herkömmlicher Programmierer sagen: Mein Programm selbst verwaltet seine globalen Variablen. In irgendeiner meiner Formroutinen haben sie ihre Werte erhalten (von denen Du jetzt an einer bestimmten Programmstelle grübelst, wo sie herkommen und was sie an anderer Stelle im weiteren Programmverlauf bewirken werden).Woher die Werte eines Attributs kommen ist per OO Definition klar : Nur das Objekt selbst, verwaltet seine Attribute.
Nur sind die Attribute auch dann nur dann konsistent, wenn es keine Programmierfehler gibt. Dies zu beurteilen, wenn die Klasse nicht von einem selber ist, ist alles andere als trivial. Und selbst dann kann solch fremder Code unfassbar schwer zu verstehen sein. Das ist genau die gleiche Sch… wie seinerzeit mit den herkömmlichen globalen Variablen. Genau deshalb hat man seinerzeit zu recht gesagt, die Werte, die ein ein Unterprogramm nutzt oder verändert, gehören in seine Schnittstelle. Auch wenn dieses Unterprogramm im privaten Teil der Klasse sitzt.Ist eine Änderung nötig, dann geschieht das nach "Open-closed" Prinzip über eine Methode. Denn so behält das Objekt die Kontrolle darüber, dass seine Attribute stets konsistent geändert werden und immer konsistent sind.
Da sind wir uns tatsächlich einmal einig.Ralf hat geschrieben:Aber wir werden uns schnell einig, wenn wir sagen: Man braucht schon einen triftigen Grund für eine Funktionsgruppe / einen Funktionsbaustein. Nicht, weil man eine Funktion braucht die man aufrufen kann, dafür sollte man wirklich besser in OO-Objekten arbeiten.
- Funktionsbausteine im BDTblack_adept hat geschrieben: ↑09.10.2024 14:36Das stimmt so nicht. Es gibt diverse andere Gründe FM zu schreiben
- RFC-FuBa
- Verbucher
- Parallelisieriung
? Ereigniskopplung?
...
Don't feed the trollsDeathAndPain hat geschrieben: ↑10.10.2024 01:24Um Himmels willen, was für eine Aussage!!! Das kann ich nicht glauben, dass jemand ernsthaft sowas behauptet.Wenn ich Kommentare für Parameter lese gehe ich automatisch von schlechten Parameternamen aus. 30 Zeichen reichen durchaus aus eine Bezeichnung zu wählen, die jedes Kommentar überflüssig machen. Kommentare sind per se nutzloser Wartungscode.
Wenn mir ein Entwickler einen simplen(!) Report mit 3 Objekten übergibt würde ich ihn fragen ob er KISS kennt. Und ehrlich gesagt verstehe ich sowieso nicht warum hier alles OO programmiert werden soll. OO hat ein paar Vorteile in bestimmten Situationen. Aber die sehe ich in den vielen ( in meinem Kundenkreis typischen ) ABAP-Programmen nicht. Und das Verwenden von Methoden statt FORMs ist halt kein OO! Methoden sind ja wie FORMs und FB nichts anderes als Modularisierungseinheiten, für welche SAP einfach das m.E. beste Interface dieser Modularisierungseinheiten anbietet.
Das glaube ich nicht. Ich denke mal, dass sehr, sehr viele ABAP Entwickler OO in Grundzügen oder sogar phantastisch beherrschen. Ich definiere einen guten/erfahrenen Entwickler so, dass er weiß in welcher Situation er welches Werkzeug verwenden sollte. Weder jemand der OO als Ultima Ratio ansieht noch jemand der dieses Thema als Teufelswerk ablehnt sind mir geheuer.DeathAndPain hat geschrieben: ↑10.10.2024 01:24Das haben diese Leute nicht, aber das wirft ein Schlaglicht auf den Umstand, das nahe an 0% der ABAP-Programmierer OO verstanden haben. Und das wiederum wirft ein Schlaglicht auf OO, denn eine Sprache, die so akademisch ist, dass keiner ihrer praktischen Verwender in der realen Welt sie wirklich versteht und weiß, wie er damit umgehen muss, ist eben genau das: akademisch und nicht praxistauglich. Auch wenn das verbleibende Prozent der Entwickler, die es verinnerlicht haben, tolle Sachen damit veranstalten kann.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 3):
Murdock • ST22 • gtoXX
Weil man nicht mehrere Paradigmen verwendet, sondern sich für eines (bei einem Kunden / in einem System / für sich) entscheidet.black_adept hat geschrieben: ↑10.10.2024 12:01Wenn mir ein Entwickler einen simplen(!) Report mit 3 Objekten übergibt würde ich ihn fragen ob er KISS kennt. Und ehrlich gesagt verstehe ich sowieso nicht warum hier alles OO programmiert werden soll.
Ja, OO ist akademisch und für "einfache" Leute, die nicht Softwareentwicklung gelernt haben, schwierig. Das führt dazu, dass nur Fachleute ("richtige" Softwareentwickler) diese Arbeiten durchführen können und eben nicht Leute, die nur gelernt haben, Anweisungen hintereinander zu schreiben.DeathAndPain hat geschrieben: ↑10.10.2024 01:24Und das wiederum wirft ein Schlaglicht auf OO, denn eine Sprache, die so akademisch ist, dass keiner ihrer praktischen Verwender in der realen Welt sie wirklich versteht
Bei jungen Entwicklern ist das so, bei älteren (also eher meine Generation, die umgeschulten Bäcker und Maurer) ist das Wissen um OO erschreckend niedrig. Das liegt AUCH daran, wie es ihnen erklärt wurde (egal wo man liest, man liest immer das Beispiel mit Autos und Motorrädern; ich hätte mir da etwas SAP-relevanteres gewünscht, dann versteht man das nämlich sehr schnell).black_adept hat geschrieben: ↑10.10.2024 12:01Das glaube ich nicht. Ich denke mal, dass sehr, sehr viele ABAP Entwickler OO in Grundzügen oder sogar phantastisch beherrschen.
Genau deshalb setze ich gerne auf statische Klassen. Nicht wirklich OO, völlig richtig, aber die deutlichen Interface-Vorteile gegenüber Formroutinen voll mitgenommen.black_adept hat geschrieben:Und das Verwenden von Methoden statt FORMs ist halt kein OO! Methoden sind ja wie FORMs und FB nichts anderes als Modularisierungseinheiten, für welche SAP einfach das m.E. beste Interface dieser Modularisierungseinheiten anbietet.
Ehrlich gemeinte Frage: Denkst Du das nur, oder kennst Du reichlich davon? Ich urteile anhand der Codes, die ich zu sehen bekomme. Solides OO mit mehr als einer Instanz pro Klasse und dann womöglich sogar noch nachvollziehbar programmiert statt leere Methodenschnittstellen und alles in globale Variablen mit Etikett "Attribut" dran - das bekomme ich so gut wie gar nicht zu sehen.black_adept hat geschrieben:Das glaube ich nicht. Ich denke mal, dass sehr, sehr viele ABAP Entwickler OO in Grundzügen oder sogar phantastisch beherrschen.
Vielleicht ist das eine Frage technischer Begabung und auch einer gewissen professionellen Einstellung. Im Laufe meines Lebens habe ich nämlich die Erfahrung gemacht, dass letztere themenübergreifend ist und auf nahezu jeden Bereich des Lebens - durchaus auch im privaten Bereich - angewendet werden kann. Wenn man etwas macht, muss man mit der Einstellung rangehen, es der Reihe nach und ordentlich zu machen und dafür die eine oder andere Extraminute einzuplanen.Ralf hat geschrieben:Das ist übrigens bei Autos, Heizungen, Waschmaschinen und Kernkraftwerken auch so. Klar, man KANN als Nicht-Profi versuchen, Wartung und Reparaturen selbst zu machen, ist nur oft ne doofe Idee, viele reparieren dabei mehr kaputt als heile.
Das ist aber auch eine Frage der eigenen finanziellen Ausstattung. Wenn man es nicht so dicke hat, kann man sich durchaus auch mit dem Qualitätsniveau einer selbst gestrichenen Wohnung zufriedengeben, auch wenn das nicht perfekt ist. Häufig genug reicht das ja sogar für die Wohnungsabnahme beim Auszug aus einer Mietwohnung.Ralf hat geschrieben:Aber ich würde z. B. nie auf die Idee kommen, meine Wohnung selbst zu streichen, weil das NIE so gut wird wie wenn ein gelernter Maler das tut.
Wenn ich mit sowas neu anfange, ja. Deswegen sollte man den Rahmen am Anfang auch bescheiden stecken. Aber in dem Maße, wie ich dann Erfahrung sammele, sinkt das Risiko, und die Vorteile werden immer stärker.Immerhin gibst du zu, dass du ein Risiko eingehst.
In meinen Augen machst Du einen Fehler: Du gehst davon aus, dass jemand, der etwas von der Pike (!) auf gelernt hat, auch gut ist. Doch in allen Branchen gibt es Pfeifen, in vielen sogar reichlich. Bei Autowerkstätten ist es aber genauso. Die haben zwar alle ihre Lehre abgeschlossen, manche sogar einen Meistertitel (der freilich im wesentlichen kaufmännischer Natur ist, also da lernt man, eine eigene Werkstatt zu führen), aber was die für einen Mist machen, geht auf keine Kuhhaut. Ein Beispiel hatte ich mit den Glühkerzen schon gebracht. Ich könnte unzählige weitere anführen, die ich selber erlebt habe.Das ist der Unterschied zwischen einem Bastler und einem Profi. Und wenn du dein Auto selbst reparierst, dann ist das dein Ding. Würdest du aber deine Leistung an mich verkaufen wollen, würde ich keinen Bastler haben wollen, sondern einen der es wirklich von der Pike (Pieke?) aus gelernt hat.
Ich halte es für einen Irrglauben, dass die neuen Leute besser sind. Bis vor zwei Jahren habe ich mit einen Kollegen zusammengearbeitet, der Ende 20 gewesen sein wird. Vorher hatte er als SAP-Berater bei der mindsquare AG gearbeitet. Sein "OO"-Code war auch nicht besser als das, was ich hier so geschildert habe.Ralf hat geschrieben:SAP-Entwickler verkaufen ihre Leistung an Arbeit- oder Auftraggeber und dann erwarte ich professionelles Wissen und keine angelernten Kräfte. Es gab Zeiten, da gab es diese Profis einfach nicht, da musste man darauf zurückgreifen. Ich weiß aber auch, wie viele von denen, mit denen ich meine Umschulung damals gemacht habe, noch am Markt sind.