Hallo,
ich programmiere jetzt schon länger hobbymäßig und versuche dabei
krampfhaft einigermaßen professionelle Strukturen (OOP, etc)
reinzuquetschen.
Das endet meistens zwar mit Objektorientierung aber meiner Meinung nach
Hässlich.
Beispiel: github.com/Ivo04/Kara
Kennt ihr da einen guten Link oder ein gutes Buch? Ein Suchwort für
Google wäre auch schon nicht schlecht, ich weiß nämlich nicht, wonach
ich suchen soll.
Vielen Dank im Vorraus,
Ivo
Ivo Z. schrieb:> Kennt ihr da einen guten Link oder ein gutes Buch? Ein Suchwort für> Google wäre auch schon nicht schlecht, ich weiß nämlich nicht, wonach> ich suchen soll.
ein paar Stichwörter:
- "best practice"
- "clean code"
- "software engineering"
"professionell" ist alles, was begründete Vorteile hat. Viel fremden
Code lesen hilft, den SW design ist im wesentlichen das Abwägen von Vor-
und Nachteilen bestimmter Lösungen und da hilft dann halt Erfahrung.
Gerade Anfänger bewerten Performance viel zu hoch und nutzen häufig das
pseudo-Attribut "sauber". Also erst einmal auf eine funktionierende
Lösung fokusieren und versuchen, dass Wort "sauber" in Argumentationen
nicht zu verwenden. (Tipp: es gibt meist viel konkretere Attribute)
Und bevor Du überhaupt irgend etwas anfängst, mache Dir die
Anforderungen klar. Ansonsten kannst Du Vor- und Nachteile bestimmter
Lösungen überhaupt nicht bewerten und wirst auch nie erfahren, wann Du
fertig bist.
mfg Torsten
Torsten R. schrieb:> "professionell" ist alles, was begründete Vorteile hat. Viel fremden> Code lesen hilft, den SW design ist im wesentlichen das Abwägen von Vor-> und Nachteilen bestimmter Lösungen und da hilft dann halt Erfahrung.
Unbedingt!
> Gerade Anfänger bewerten Performance viel zu hoch und nutzen häufig das> pseudo-Attribut "sauber". Also erst einmal auf eine funktionierende> Lösung fokusieren und versuchen, dass Wort "sauber" in Argumentationen> nicht zu verwenden. (Tipp: es gibt meist viel konkretere Attribute)
Ergänzend dazu die beiden wichtigsten Weisheiten zum Thema Performance:
1.) "Permature optimization is the root of all evil." (Donald E. Knuth)
2.) "Measure, don't guess." (Kirk Pepperdine)
... und zudem die IMHO wichtigste Regel für jede Entwicklung:
"Make it work, make it right, make it fast." (Kent Beck)
Ich bin zwar auch kein Vollblutprogrammierer, programmiere aber auch
gelegentlich und gerne und bin bestrebt möglichst guten Code zu
schreiben und mein Werkzeug (Programmiersprachen zähle ich auch dazu)
möglichst gut zu beherrschen. Außerdem kenne ich das Problem auch.
Bücher, die ich dir empfehlen kann:
-Entwurfsmuster von Kopf bis Fuß (O'Reilly-Verlag)
Das Buch ist sehr auf Java zugeschnitten, ein paar Mal gehen die da aber
auch auf C++ ein und vieles ist sicherlich auch ähnlich bzw. weitgehend
allgemeingültig.
Ich hab nach dem Buch zumindest den Hauch einer Ahnung davon bekommen,
was Softwareentwickler eigentlich so machen und was man mit Klassen
überhaupt so alles anstellen kann. Und es läßt ich (für 95% aller
Menschen) sehr gut lesen, einige wenige kommen mit dem Stil allerdings
ganz und gar nicht klar.
-Weniger schlecht programmieren (auch O'Reilly-Verlag)
Ich habe das Buch eher aus einer Art Eigenverpflichtung heraus gelesen
und kann es empfehlen-wenn auch mit einigen Einschränkungen. Teilweise
ging es mir beim Lesen ziemlich auf die Nerven, daß die Autorin
gelegentlich unterschwellig ihre sexuelle Einstellung und politische
Korrektheit zur Schau stellt. Das generische Femininum liest sich
einfach nur scheiße, immerhin ist das Buch aber nicht durchgängig so
geschrieben.
Allerdings hat mir das Buch immerhin den Zahn gezogen, in Deutsch zu
programmieren. Deutsch bleibt zwar Erstsprache für die
Benutzeroberfläche, Englisch gibt es da entweder wenn es mir wichtig
ist, ich einfach nur gnädig bin und einen guten Tag hab oder dafür
bezahlt werde. Im Quellcode lasse ich, seitdem ich das Buch gelesen
habe, davon aber nichts mehr sehen, auch die Codekommentare scheib ich
englisch.
Wenn du dazu bereit bist dich auch mit Kritik an eben jenen
"professionellen" Strukturen auseinanderzusetzen, dann solltest du dich
einmal mit den Gedanken von ein paar Leuten aus der Szene der
Videospiele bekannt machen.
Mike Acton
Jonathan Blow
Casey Muratori
Das sind mal meine liebsten keynote speaker aus dem Bereich. Von denen
gibt es einen Haufen Videos bei Youtube.
Wühlhase schrieb:> Allerdings hat mir das Buch immerhin den Zahn gezogen, in Deutsch zu> programmieren. Deutsch bleibt zwar Erstsprache für die> Benutzeroberfläche, Englisch gibt es da entweder wenn es mir wichtig> ist, ich einfach nur gnädig bin und einen guten Tag hab oder dafür> bezahlt werde. Im Quellcode lasse ich, seitdem ich das Buch gelesen> habe, davon aber nichts mehr sehen, auch die Codekommentare scheib ich> englisch.
Das ist der größte Blödsinn den ich je gehört habe. Bei
Systemfunktionen, mag ich Dir noch Recht geben. Ab der Ebene, in der Du
fachspezifische Funktionalitäten in Software gießt, wird sich Dein
englischer Sprachschatz sehr schnell erschöpfen und was noch wichtiger
ist, jemand der nach Dir an dieser Software arbeiten muss, wird Deine
Übersetzungen der Fachbegriffe aus der Wirtschaftswelt nur begrenzt
verstehen.
Und bevor jetzt der sit storm los bricht. Ich habe 10 Jahre bei einem
großen Versicherer gearbeitet. Da gibt es Fachbegriffe, zu denen mir
nicht mal ansatzweise eine englische Übersetzung einfallen würde.
Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins
englische übersetzen?
Gruß
Frank
Ivo Z. schrieb:> versuche dabei> krampfhaft einigermaßen professionelle Strukturen (OOP, etc)> reinzuquetschen.
Meines Erachtens sollte man so programmieren, wie es einem leicht von
der Hand geht. Je nach Projektgroesse und Komplexitaet stoesst man dann
frueher oder spaeter an einen Punkt wo es hakt, wo man nicht mehr seinen
gewohnten Stil runterreissen kann. Das ist dann der Punkt innezuhalten
und sich zu ueberlegen mit was fuer einer Struktur man das Problem am
besten loesst und nicht den erstbesten Workaround nehmen. Wenn man das
mal gemacht hat, kennt man schon eine Einsatzmoeglichkeit und ihre
Moeglichkeiten, das muss sich aber mit der Zeit aufbauen. Natuerlich
wird die Situation dass es klemmt auch noch unter Einsatz der besten
Programmiertechniken eintreteten, manche Probleme sind halt komplex.
D.h. solange du die Vorteile von OOP nicht fuehlst gibt es auch keine
Vorteile fuer dich (und Leser deines Codes).
Da kann ich Feldstecher erstmal nur Recht geben!
Wenn der TO einsteigen will, sind Software Pattern zuerst einmal ein
sehr guter Einstieg. Sie sind kein Allheilmittel bei weitem nicht, sie
bilden aber eine gute Grundlage. Die aus meiner Sicht wichtigsten
Pattern MVC, Oberserver, Fassade sollte man beherrschen.
Genauso wichtig ist im OO-Bereich der Umgang mit Klassen und Vererbung
sowie die Nutzung von Interfacen.
Im Laufe der Jahre, ist es für nicht mehr kriegsentscheidend welche
Sprache ich einsetze. Wichtig ist, dass man eine einigermaßen gute
Software-Architektur im Kopf hat nach der man die Aufgabenstellung
implementiert.
Auch hier gilt, nicht jede Architektur eignet sich gleichgut für jede
Entwicklungssprache. Eine Architektur die sich im OO-Bereich gut
anfühlt, muss in nicht OO-Bereichen nicht unbedingt gut sein.
Wenn man sich das verinnerlicht, ist eine Entwicklungssprache nur noch
Syntax und Grammatik, beides kann man lernen.
Gruß
Frank
Ivo Z. schrieb:> ich programmiere jetzt schon länger hobbymäßig und versuche dabei> krampfhaft einigermaßen professionelle Strukturen (OOP, etc)> reinzuquetschen.
"Professionell" bedeutet für mich lediglich, daß ich dafür bezahlt
werde. Gut strukturiert und leserlich muß der Code dafür nicht sein
(versuche ich aber trotzdem), Hauptsache, er läuft fehlerfrei.
Was mir z.B. bei Kara/core.js auffällt:
Überall stehen Kommentare wie z.B.
1
//create the <tr>
2
//create the <td>
die beschreiben, was darunter passiert. Sowas geht m.E. geschickter,
weil leserbarer, indem man daraus jeweils eine Funktion/Methode macht,
die mehr oder weniger genau so heißt. Dann beschreiben übergeordete
Programmteile quasi in Prosa für jeden klar verständlich, was sie
machen, anstatt sofort mit Anweisungen höchsten Detailgrades loszulegen
und damit überfrachtet zu werden. Das nennt sich strukturiertes
Programmieren.
Dito bei einer Abfrage wie dieser in Kara/world.js:
Mach eine is...-Funktion aus dem boolschen Ausdruck, dann muß sich der
Leser nicht mehr mit solchen Details herumschlagen, um erst mal zu
verstehen, was deren Aufrufer macht. Den Kommentar kannst Du dann
getrost entsorgen. Will der Leser dann wissen, was diese is...-Funktion
macht, kann er dort immer noch nachsehen.
Bzgl. Objektorientierung:
Oft wird darunter verstanden, Attribute mit ihren Gettern und Settern
nun in ein Objekt verpacken und damit kapseln zu können. Dann werden
andere Objekte um solche Objekte gruppiert, die Unmengen dieser Getter
und Setter aufrufen.
Das mag für manche Klassen ok sein, z.B. reine Datencontainer ohne
fachliche Funktionalität, wird jedoch oft auch für Fachobjekte
angewendet, bei denen dies recht unleserlichen und schlecht wartbaren
Code bewirkt.
Dazu gibt es z.B. den Artikel "Why getter and setter methods are evil":
https://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html
Was ein Interface (in Java) ist oder welche Facetten es haben kann,
haben meiner Erfahrung nach nur wenige wirklich verstanden.
Ein Interface kann wie eine Basisklasse eingesetzt werden: für
Polymorphie, z.B. um Objekte unterschiedlicher Klassen drucken zu
können. Diese Klassen würden ein Interface wie Printable implementieren.
Für einen Printer sehen die dann alle gleich aus, Printables eben. Ein
Printer entkoppelt sich dadurch von diesen Klassen: er muß sie nicht
kennen, um sie drucken zu können.
In Fachlogik kann dieser Mechansimus ebenso eingesetzt werden, z.B. für
den Zugriff auf eine Datenbank. Ich möchte in Fachlogik keinen Code
sehen, der sich von einem Kontoninhaber-Objekt (Person) per Getter den
Primärschlüssel holt, um mit ihm einen Query abzusetzen, der seine
Konto-Objekte liest. Derartiger Code läßt sich schwer testen, da eine
Datenbank simuliert werden müßte.
Stattdessen würde ich ein Kontoninhaber-Interface modellieren, das die
Methode getKontos() besitzt. Wo die Konten herkommen und wie dieser
Zugriff zu implementieren ist, braucht die Fachlogik nicht zu wissen,
ist nicht ihre Aufgabe. Implementiert wird dieses
Kontoninhaber-Interface und damit auch dieser Zugriff ganz woanders. Ein
Objekt davon wird in die Fachlogik reingereicht. Mit derart modellierten
Fachobjekten läßt sich Fachlogik schreiben, die völlig unabghängig von
solcher Technik ist, sich deshalb auch unabhängig von ihr entwickeln und
einfacher ändern und testen läßt.
Und: derartige Fachobjekte, also die Interfaces Kontoninhaber und
möglicherweise auch Konto, wenn davon ausgehend auch ein
Datenbankzugriff resultieren muß, sind Eigentum der Fachlogik und liegen
bei ihr, also beim Aufrufer, und nicht bei demjenigen, der sie
implementiert, also beim Aufgerufenen. Deshalb werden solche Interfaces
als required bezeichnet: der, den es nichts angeht, wie etwas
implementiert ist, modelliert seine Anforderungen (Requirements) als
required Interface.
Das Gegenteil eines required Interfaces ist ein provided Interface. Dies
sind z.B. die Interfaces einer Library, die ein Standard-API wie JPA,
JMS oder JDBC implementiert. Dort liegen die Interfaces in der Library,
also beim Aufgerufenen. Sie können aber auch in einer eigenen Library
liegen. Dann braucht es keine konkrete Implementierung, um gegen ein
solches API entwickeln zu können. Solche Interfaces liegen auf keinen
Fall beim Aufrufer.
Dann gibt es noch den Spruch "Composition over Inheritance". Dafür gibt
es ja genug Beispiele im Web.
Feldstecher schrieb:> Meines Erachtens sollte man so programmieren, wie es einem leicht von> der Hand geht.
Ich würde dabei Lesbarkeit in den Vordergrund rücken. Locker von der
hand gehen auch temp1 oder (Dank automompletiion) ui16CounterForLoop.
Lesbarer ist oft i....
Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
Gar nicht. Was hat denn so ein Begriff als
Variablen-/Funktions-/Klassenname im Source Code zu suchen?
Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
Wie wäre es mit "panel physicians's extra services"?
Keiner N. schrieb:> Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?>> Gar nicht. Was hat denn so ein Begriff als> Variablen-/Funktions-/Klassenname im Source Code zu suchen?
Ohne Kommentar...
Markus L. schrieb:> Professionell" bedeutet für mich lediglich, daß ich dafür bezahlt werde.
Richtig.
> Gut strukturiert und leserlich muß der Code dafür nicht sein
Richtig, es gibt gar schauerliches.
Wühlhase schrieb:> auch die Codekommentare scheib ich englisch.
Warum, damit auch ein Inder deine Arbeit unverzüglich übernehmen kann ?
Frank L. schrieb:> Keiner N. schrieb:>> Frank L. schrieb:>> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins>> englische übersetzen?>>>> Gar nicht. Was hat denn so ein Begriff als>> Variablen-/Funktions-/Klassenname im Source Code zu suchen?>> Ohne Kommentar...
Nun, Du vergisst, dass diese "Übersetzung" doch schon in UML und
Dokumentation vorkommt, wo man klar lesen kann, dass ObjektTemp42 alle
Aspekte der Kassenärztlichen Sonderleistungen behandelt.
Frank L. schrieb:>> ...Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
z.B. als "Assoziation of special service"
Nutz doch mal die Begriffe
- Software Structure
- Software Architecture
in Google... ich denke da findest Du eine ganze Menge an nützlichen
Informationen (auch von Hochschulen) die Du Dir ansehen und ggf. nutzen
kannst.
Warum ich das schreibe... nun ich finde es immer problematisch wenn Dir
andere Leute (auch hier mal wieder in diesem Thread) sagen, dass das was
ein anderer Teilnehmer geschrieben hat (ich sag es mal freundlich) nicht
okay ist. Wenn jemand der diesen Text geschrieben hat, diese Erfahrungen
gemacht hat, kann und sollte ein Dritter sich nicht hinstellen und das
als falsch deklarieren. Er hat vielleicht eine anderer Erfahrung gemacht
und das ist okay... aber mit seinen Erfahrungen einem Dritten
abzusprechen, das dessen Erfahrungen falsch sind, geht garnicht.
Sorry für mein Off-Topic, aber leider kommt es in diesem Forum mehr und
mehr vor, das gemachte Erfahrungen von Dritten als falsch bewertet
werden.
Erfahrungen kann man nicht vermitteln, die muß (leider) jeder selber
machen und seine eigenen Schlüsse daraus ziehen.
MaWin schrieb:> Wühlhase schrieb:>> auch die Codekommentare scheib ich englisch.>> Warum, damit auch ein Inder deine Arbeit unverzüglich übernehmen kann ?
Nun, zumindest muß ich nicht fürchten daß ein Inder meine Arbeit
unverzüglich aufnehmen wird. Da hängt noch mehr als nur Programmieren
dran, ich bin ja kein reiner Codesklave, und ich halte auch nicht viel
davon mich unersetzlich zu machen. Wobei ich das mit dieser Einstellung
anscheinend ja schon fast wieder bin, zumindest für langfristig denkende
Chefs. Zudem ist dort, wo ich arbeite, Englisch ohnehin mindestens
Pflichtoption.
Außerdem ist es ganz praktisch, wenn man einen Codeteil mal
veröffentlichen will. Oder wenn man andere drüberschauen lassen möchte
(Stichwort Stackoverflow-Debugging). Das nervige Umschreiben-wozu? Die
meisten Probleme sind sowieso in englisch gelöst, Dokumentation ist
normalerweise in englisch gehalten, während des Programmierens lese ich
viel englischen Text. Das ständige Umschalten zwischen zwei Sprachen
kann ich mir so auch ersparen. Und ganz ehrlich-wie scheiße sehen solche
Zeilen denn aus:
1
//Prüfen ob fifo leer ist
2
if(speicherIstLeer){
3
//bla
4
}
5
else{
6
//blablub
7
}
Ich persönlich mag meine Muttersprache sehr gerne und setze diese durch
wo es geht, aber ich kann Verwässerung derselben nicht leiden. Wenn
schon, dann richtig (und für die englische Sprache lasse ich das auch
gelten). (Dafür verzichte ich aber auch weitgehend auf Anglizismen wie
dieses unsägliche 'To Go' oder, aktuell sehr beliebt, 'Public Viewing'.
Welcher degenerierte Kulturverräter hat sich diesen Unfug nur
ausgedacht.)
Markus L. schrieb:> In Fachlogik kann dieser Mechansimus ebenso eingesetzt werden, z.B. für> den Zugriff auf eine Datenbank. Ich möchte in Fachlogik keinen Code> sehen, der sich von einem Kontoninhaber-Objekt (Person) per Getter den> Primärschlüssel holt, um mit ihm einen Query abzusetzen, der seine> Konto-Objekte liest.
ORM existiert.
> Derartiger Code läßt sich schwer testen, da eine Datenbank simuliert> werden müßte.
Man kann die Veranstaltung auch in Farbe testen. Und mit SqLite, Derby
oder einen lokalen MySQL- oder PostgreSQL-Installation dürfte es jetzt
wohl nicht so schwer sein, eine Datenbank zu haben. Sorry. ;-)
Gegen deutsch sprechen auch die fehlenden Umlaute in
pre-unicode-compilern/Editoren.
Es macht nur wenig Sinn, Dogmen daraus zu machen. Wenn alle Deutsch
sprechen, aber einer wenig Englisch, dann soll er schwierige
Sachverhalte in deutsch schreiben. Und wenn, wie oben, die
Aufgabensprache deutsch ist, dann verwirrt Englisch mehr als es nützt.
Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
Da stehst du offenbar vor dem gleichen Problem wie Microsoft, die es in
einer (noch gar nicht so alten) Excel Version fertiggebracht haben, in
der Benutzeroberfläche den Begriff (Polynom-)"Ordnung" als "Reihenfolge"
zu übersetzen.
Das Wichtigste am Code schreiben ist, bereits ab der ersten Zeile ein
Debugkonzept drin zu haben. Fehler sind nicht leider "uups" da, sondern
sie sind da. Wenn man das zu Beginn weg einbaut spart man sich viel
Zeit. Viele Fehler findet man nicht per Singlestep, sondern nur mit
einem Gesammtueberblick. Deshalb braucht man an Modulschnittstellen
Visualisierer. Was auch immer das sein wird.
Sheeva P. schrieb:> ORM existiert.
Das möchte ich gern sehen, wie die Fachlogik an ein Business Object
gelangt, das mit JPA-Annotations behaftet ist, ohne einen Select Service
oder ein DAO zu nutzen oder gar selbst über einen EntityManager einen
Query abzusetzen.
Sheeva P. schrieb:> Man kann die Veranstaltung auch in Farbe testen. Und mit SqLite, Derby> oder einen lokalen MySQL- oder PostgreSQL-Installation dürfte es jetzt> wohl nicht so schwer sein, eine Datenbank zu haben.
Das ganze muß in einem JEE Container mit Container Managed Transactions
im Two Phase Commit und unter Nutzung von EJB 3.0 Dependency Injection
laufen, was bedeutet, daß die Anwendung keine SQL-Connection selbst
aufbauen kann und diese weder selbst committen noch rollbacken darf.
Zusammen mit Modulen, die ihre eigene Persistence Unit besitzen, gibt es
kein Test-Framework, das sowas bei akzeptablem Aufwand unterstützt,
außer vielleicht EJB3Unit, das jedoch schon lange nicht mehr
weiterentwickelt wird. Mit akzeptabel meine ich hier, daß es nicht
komplexer sein darf, einen Test zum Laufen zu bringen, als den zu
testenden Produktivcode zu schreiben. Das ist bei den genannten
Vorbedingungen aber der Fall. Zudem dauert das Ausführen derartiger
Tests - ich meine Unit-Tests, keine Integrationstests - viel zu lange,
als daß sie für z.B. Test Driven Design genutzt werden können, da der
Overhead zum Aufbauen eines Micro-Containers und der Datenbankstrukturen
sehr hoch ist. Viel zu oft mutieren Tests von ORM-durchsetztem Fachcode
zudem zu Integratiotionstests statt Unit-Tests.
Da ist es sehr viel einfacher, EJB- und JPA-freien Fachcode als POJOs zu
entwerfen und im Test die von mir erwähnten Interfaces zu mocken. Dazu
braucht es dann auch kein JMockit oder Mockito, dafür reicht EasyMock.
Fachcode hat mit Datenbankstruktur nichts zu tun. Wozu sollte der dafür
vorgesehene Test also SqLite, Derby, MySQL- oder PostgreSQL benötigen.
Macht doch keinen Sinn.
Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
Das würde für mich unter "Name" laufen. Also wären die Kommentare im
SourceCode auf englisch und "Kassenärztliche Sonderleistungen" eben auf
deutsch. Keine Ahnung ob es sowas im
englischen/amerikanischen/französischen/indischen überhaupt gibt. Wer
wissen möchte, was das ist, muss dann eben bei den "Deutschen"
nachfragen.
Für einen großen deutschen Spülmaschinenhersteller habe ich auch mal
Software geschrieben, in der auf englisch kommentiert werden sollte.
Aber ganz viele spezielle Begriffe wurden auf deutsch "geprägt" und
deswegen wurde auch der deutsche Begriff verwendet. Das holpert dann im
Lesefluss etwas, aber man gewöhnt sich dran. Und die amis vermutlich
auch :-)
Walter T. schrieb:> Wer hat denn das Buch "clean code" schon gelesen und kann etwas dazu> sagen, inwieweit sich die Methoden auf einem µC sinnvoll einsetzen> lassen?
Das Buch dreht sich grundsätzlich darum, wie man sauberen/leserlichen
Code schreibt. Unabhängig davon ob du jetzt das neue Call of Duty oder
ein BlinkyLED auf einem ATmega programmierst. Die Konzepte sind überall
identisch.
Das einzige Nachteilige für MCUs ist hier, dass er es manchmal ein
bisschen mit dem refactoring übertreibt und quasi jede Zeile in eine
neue Funktion auslagern will. Wodurch du unnötig Code/Funktionssprünge
produzierst.
Aber man muss das Buch ja nicht für bare Münze nehmen, sondern eher als
Leitfaden, wie man es prinzipiell macht.
Würde es aber auf jeden Fall empfehlen.
mfg
Jetzt kommt der traurige Teil: Ich habe das Buch im Januar gekauft. Und
gelesen. Gestern ist es mir im Bücherregal aufgefallen. Insgesamt war es
wohl so nichtssagend, daß ich mir gerade mal 6 Zeilen Notizen gemacht
habe und dann die Tatsache, daß ich es schon gelesen habe, direkt wieder
vergessen habe.
Meine Notizen:
---
Der Autor bevorzugt häufiges, kleinteiliges Refactoring. Modultests
spielen dort die entscheidende Rolle.
Interessanter Ansatz für Kommentare:
TO <funktionsname> Beschreibung
1
//TO renderHTMLPage()
2
//we allocate memory, fetch content or display error message.
Das funktioniert natürlich nur bei englischen Kommentaren, hilft aber
tatsächlich dabei, "gute" Funktionsnamen zu finden.
---
Das muß nicht heißen, daß das Buch schwach ist. Vielleicht waren mir
auch einfach die Konzepte größtenteils schon bekannt. Keine Ahnung. Habe
es ja vergessen.
Also ich finde die folgende Methode nicht schlecht, wenn man die Objekt
nicht aus dem Bauch heraus findet.
1) Beschreibe textuell vollständig Deine Aufgabe.
2) Substantive stehen für die Objekte.
3) Verben stehen für die Methoden.
Zu meinem letzten Post. Gehe aber nicht blind vor. Sinnvoll sollte das
Ganze schon sein. Man muss nicht jedes Substantive zu einem Objekt, oder
jedes Verb zu einer Methode machen.
Ein anderes Prinzip ist das Dualitätsprinzip. Wenn Du also ein reales
Objekt hast, zu dem Du eine Software schreiben must, baut man die reale
Struktur dieses Objektes in Form von "Softwareobjekten" nach.
Achim S. schrieb:> Nun, Du vergisst, dass diese "Übersetzung" doch schon in UML und> Dokumentation vorkommt, wo man klar lesen kann, dass ObjektTemp42 alle> Aspekte der Kassenärztlichen Sonderleistungen behandelt.
Du beliebst zu scherzen? Oder ist mein Ironiedetektor kaputt?
Derart kryptische und nichtssagende Variablennamen haben im Code nichts
zu suchen und sind ein Schlag ins Gesicht für den Leser. Lieber lange
Namen als gar keine Namen.
DanVet schrieb:> Das würde für mich unter "Name" laufen. Also wären die Kommentare im> SourceCode auf englisch und "Kassenärztliche Sonderleistungen" eben auf> deutsch.
Wozu muss eine Software die kassenärztliche Sonderleistungen berechnet
englische Kommentare haben? Kein Englischsprachiger wird sie wohl je zu
Gesicht bekommen.
Wühlhase schrieb:> Und ganz ehrlich-wie scheiße sehen solche> Zeilen denn aus:>> //Prüfen ob fifo leer ist> if(speicherIstLeer){> //bla> }> else{> //blablub> }
das sieht richtig gut aus. Das kann jeder flüssig runter lesen, ohne
sich das Hirn verrenken zu müssen.
Frank L. schrieb:> Oder wie würde ihr den Begriff "Kassenärztliche Sonderleistungen" ins> englische übersetzen?
Special treatment provided by a panel doctor.
Was man nicht "direkt" übersetzen kann, muss man eben in einem
(Halb-)Satz ausdrücken.
Wenn es von solchen Spezialbegriffen nur so wimmelt, wäre es freilich
schon sinnvoller die Doku in deutscher Sprache zu schreiben.
Mark B. schrieb:> Special treatment provided by a panel doctor.
Nein.
Der nächste der kommt und einen Bug der irgendwie mit kassenärztlichen
Sonderleistungen in Zusammenhang steht fixen muss darf dann erst mal
tagelang rumrätseln welche der sonderbaren halbgaren englischen
Wortschöpfungen nun "Kassenärztliche Sonderleistungen" bedeutet und sich
erstmal tagelang hinsetzen und das halbgare englische Kauderwelsch ins
Deutsche zurückübersetzen so daß man überhaupt erstmal einen
Zusammenhang zwischen hingeschriebenem Code und den in deutsch
verfassten Businessregeln erkennen kann.
Wenn er Glück hat sind es nur interne Schnittstellen und er kann bei
jedem Begriff den er zweifelsfrei rückübersetzen konnte Shift-Alt-R
drücken und dem Ungetüm projektweit wieder den richtigen deutschen Namen
zurückgeben. Und anschließend dringend empfehlen den Trottel achtkantig
zu feuern der die Bezeichner vorsätzlich obfuskiert hat.
Wer programmiert denn hier alles für deutsche Versicherungen?
Ich schätze, das sind wohl eher die wenigsten.
Zugegeben, wenn ich derartig exotische Strukturen nachbauen wollen
würde, würde ich das mit dem englischen auch nochaml überdenken.
Bernd K. schrieb:> Kein Englischsprachiger wird sie wohl je zu> Gesicht bekommen.
Hast du eine Ahnung wer alles für deutsche Firmen codiert.
Bei uns rennt auch ein halbes Dutzend Inder rum, Spanier, Griechen,
Russen und in Indien arbeiten nochmal 30 Personen für uns.
Bernd K. schrieb:> Oder ist mein Ironiedetektor kaputt?
Ja.
Es war ein Beispiel, dass die ursprüngliche These
Keiner N. schrieb:> Gar nicht. Was hat denn so ein Begriff als> Variablen-/Funktions-/Klassenname im Source Code zu suchen?
Unsinn ist. Begriffe aus der Problemdomäne vorab zu übersetzen oder gar
zu verschleiern ist übel.
Udo S. schrieb:> Hast du eine Ahnung wer alles für deutsche Firmen codiert.> Bei uns rennt auch ein halbes Dutzend Inder rum, Spanier, Griechen,> Russen und in Indien arbeiten nochmal 30 Personen für uns.
Die die deutsche Gesetzestexte in Code abbilden werden wohl der
deutschen Amtssprache mächtig sein. Wie sollen sie sonst ihren Job
machen?
Ich würde mir auch nicht anmaßen wollen ein griechisches oder ein
spanisches oder gar ein indisches Krankenversicherungsprogramm zu
schreiben obwohl ich fließend englisch kann aber noch nie einen Fuß auf
indischen Boden gesetzt habe. Für solche exotischen hochspezifischen
Spezialanwendungen nimmt man Leute die sich in der Fachdomäne bestens
auskennen und wie viele Griechen oder Inder kennen sich mit dem
deutschen Krankenversicherungsrecht bestens aus und können die
Gesetzestexte lesen, verstehen und umsetzen ohne der Sprache mächtig zu
sein?
Bernd K. schrieb:> Die die deutsche Gesetzestexte in Code abbilden werden wohl der> deutschen Amtssprache mächtig sein. Wie sollen sie sonst ihren Job> machen?>> Ich würde mir auch nicht anmaßen wollen ein griechisches oder ein> spanisches oder gar ein indisches Krankenversicherungsprogramm zu> schreiben obwohl ich fließend englisch kann aber noch nie einen Fuß auf> indischen Boden gesetzt habe. Für solche exotischen hochspezifischen> Spezialanwendungen nimmt man Leute die sich in der Fachdomäne bestens> auskennen und wie viele Griechen oder Inder kennen sich mit dem> deutschen Krankenversicherungsrecht bestens aus und können die> Gesetzestexte lesen, verstehen und umsetzen ohne der Sprache mächtig zu> sein?
Auch ein deutscher Entwickler wird kaum dazu befähigt sein Gesetzestexte
"richtig" zu interpretieren, um sie in Code zu gießen. Dazu braucht es
entsprechende Fachexperten, welche die Umsetzung und das Ergebnis
bewerten, z.B. Juristen oder Domänenexperten, die nicht notwendigerweise
Entwickler sein müssen. Die eigentliche Entwicklungsarbeit muss dann
auch nicht von einem Deutschen gemacht werden.
Sowas wie "kassenärztliche Sonderleistung" würde ich im NLS-Layer der
Applikation erwarten. Wer weiß ob nur Deutschsprachige mit der Software
arbeiten werden?
Analog dazu sind die meisten Entwickler hier auch nicht mit den
Workflows im klinischen Alltag im Detail vertraut, dafür gibts die
klinischen Konzeptspezialisten mit denen man sich unterhält, die den
Arbeitsalltag einer MTA / eines Radiologen im Detail kennen und wissen
wos im Alltag wehtut / Zeit verbrannt wird.
Bernd K. schrieb:> Mark B. schrieb:>> Special treatment provided by a panel doctor.>> Nein.>> Der nächste der kommt und einen Bug der irgendwie mit kassenärztlichen> Sonderleistungen in Zusammenhang steht fixen muss darf dann erst mal> tagelang rumrätseln welche der sonderbaren halbgaren englischen> Wortschöpfungen nun "Kassenärztliche Sonderleistungen" bedeutet und sich> erstmal tagelang hinsetzen und das halbgare englische Kauderwelsch ins> Deutsche zurückübersetzen so daß man überhaupt erstmal einen> Zusammenhang zwischen hingeschriebenem Code und den in deutsch> verfassten Businessregeln erkennen kann.
Nein, das braucht er nicht. Nämlich genau dann, wenn man eine
Dokumentation hat in der zu den deutschen Begriffen die passenden
englischen Begriffe aufgelistet sind. Wenn man ein Projekt ernst nimmt,
wird man eine solche Liste mit Übersetzungen anlegen und in einem
geeigneten Repository ablegen.
In einer Frickel-Bastelbude ist natürlich Herumraten angesagt. ;-)
Mark B. schrieb:> Nämlich genau dann, wenn man eine> Dokumentation hat in der zu den deutschen Begriffen die passenden> englischen Begriffe aufgelistet sind. Wenn man ein Projekt ernst nimmt,> wird man eine solche Liste mit Übersetzungen anlegen und in einem> geeigneten Repository ablegen.
Ja, selbstverständlich. Aber schöner ist es, wenn man genau diese
Übersetzung komplett einspart. Es ist halt ein "im Kopf behalten"-Ebene
weniger.
Wollen wir ehrlich sein: Abstraktionsebene, Kommentierstil und
Variablennamen sind zwar wichtige Anteile von Softwareentwicklung, aber
eben nur ein Anteil.
Ich denke, der TO sucht ein gutes Kompendium und keine konkreten Tipps
zu Implementierungsdetails.