Wie Komplexere Projekte korrekt Programmieren

Also den Trend von C verstehe ich ehrlich gesagt nicht. Deine Erklärung könnte zwar eine Erklärung sein, jedoch sehe ich den Trend persönlich garnicht.
V.a. kenn ich es eher wie bei CNTK (als (Status: letztes Jahr) schnellstes Framework für neuronale Netze), welches im Falle von objektorientierten Frameworks C++ (als ebenfalls objektorienterte Sprache) im Hintergrund hat, und dann ein mehr oder weniger direktes Mapping erfolgt.
Ich hätte mir den Codeanteil von C jetzt eher mit Cython erklärt :D

Und C++ hat ja eigentlich keinen Overhead und ist bei höherer Komplexität (natürlich bei einer einzelnen C-Funktion nicht gegeben) auch häufig schneller.

Vlt. spielt auch IoT bei der C Verbreitung mit rein, wo auf uCs häufig der Heap/C++ verteufelt wird.
 
Zuletzt bearbeitet:
andy_m4 schrieb:
Und weil ich ja nicht jedes Mal alles schreiben will, bloß weil ich ein Monatswert deklariere, kann ich den neu erschaffenen Typ natürlich definieren:
(define-type Month-type (Refine [n : Positive-Integer] (<= n 12)))

Nu lässt sich ganz einfach schreiben:
(define monat : Month-type 2)
Wo genau ist jetzt hier der Unterschied zu Java, C++, you name it?
Abgesehen von der Syntax?

Ist doch genauso ein gewisser Aufwand.
 
@andy_m4
OK, in deinem Beispiel machst du am Ende doch auch nicht anderes als einen neuen Typ zu definieren. Was außer der Syntax ist da jetzt der Unterschied zu einem struct/class in C++, welches intern den Wert als size_t speichert und bei einer Zuweisung die Größe prüft und wenn der Wert nicht passt eine Exception wirft? Sorry, aber da gäbe es etliche Dinge die du hättest anführen können die in der Praxis relevant sind.

Mal ganz abgesehen davon daß Racket jetzt nun wirklich keine Sprache ist welche man in Konkurrenz mit C++ setzen sollte.
 
Funart schrieb:
Ich hab noch keinen guten Programmiere gesehen, der UML Diagramme zeichnet.

*der UML Diagramme für sich selbst zeichnet
:p

Die meisten haben das Diagramm unterbewusst im Kopf und benötigen es deshalb nicht. Wer aber noch Probleme damit hat, seinen Code zu strukturieren, kann darin Abhängigkeiten entschlüsseln und auf dieser Basis neu ordnen.

Sculletto schrieb:
Was bislang noch nicht erwähnt wurde, aber speziell hierführ sehr nützlich ist: kommentiere deinen Code. Umschreibe, was er machen soll. Und schreibe bei jeder Funktion/Methode oder Klasse, wozu die gut ist. Selbst wenn du der Meinung bist, dass es doch offensichtlich sei. Jemand anderes ist es vielleicht nicht, und du selbst bist es vielleicht auch irgendwann nicht mehr.

Da muss ich teils zustimmen und teils ablehnen.

Faustregel: schreibe deinen Code so, dass er verständlich ist und halte alle Informationen, die notwendig sind um den Code als Externer richtig zu interpretieren, in Kommentaren fest.

Ich sehe viel zu viele Kommentare im Stile von "addiert x auf Variable y" und das war's. Nur schade dass man genau das bereits am Code ablesen kann. Ins Kommentar gehört in dem Beispiel nämlich viel eher: "was ist Variable y und warum addiere ich x" anstatt "was mache ich mit x und y"?

Kommentiere das "was" und "warum", nicht das "wie".


Ansonsten für Code-Strukturierung würde ich mir versch. Frameworks anschauen und das mitnehmen, was dir als "gut sortiert" erscheint. Eine definitive Antwort was wo hin gehört wirst du nie kriegen, dafür sind Projekte und Entwickler zu verschieden.
 
Zuletzt bearbeitet:
new Account() schrieb:
Wo genau ist jetzt hier der Unterschied zu Java, C++, you name it?
Wie würde man es in Java machen?
Kannst Du da auch sagen: Nimm int aber das von 1..12 ?

new Account() schrieb:
Ist doch genauso ein gewisser Aufwand.
Ähm ja. Stell Dir vor. Wenn man ein Variablentyp deklariert muss man auch hinschreiben welcher Typ. *Augenroll*

Fonce schrieb:
OK, in deinem Beispiel machst du am Ende doch auch nicht anderes als einen neuen Typ zu definieren.
Offenbar setzt Du Typ und Klasse gleich. Das ist häufig so wie beispielsweise in Java. Muss es aber nicht notwendigerweise sein.

Fonce schrieb:
Mal ganz abgesehen davon daß Racket jetzt nun wirklich keine Sprache ist welche man in Konkurrenz mit C++ setzen sollte.
Das war ein Beispiel um zu zeigen, was C++ fehlt. Das das im Kontext C++ auch sinnvoll ist, steht auf einem völlig anderen Blatt.

Abgesehen davon hast Du natürlich recht. Racket ist sehr viel ausdrucksstärker als C++. Spielt also in einer ganz anderen Liga. ;)
Ergänzung ()

psYcho-edgE schrieb:
*der UML Diagramme für sich selbst zeichnet
:p
*lol*

psYcho-edgE schrieb:
Kommentiere das "was" und "warum", nicht das "wie".
Was Kommentare betrifft, sagst Du sehr viel Richtiges. :daumen:
 
  • Gefällt mir
Reaktionen: psYcho-edgE
Alles nach Thema ordentlich in Klassen, Strukturen, Funktionen und ggf unterschiedliche Dateien aufteilen.
Habe schon vieles ausprobiert, am effektivsten zur vorab Planung war für mich am Ende immer der Zettel und Stift.
Wenn man es konzeptionell am PC etwas im UML Style machen will, kann man auch zB LibreOffice Impress bzw MSPowerpoint nehmen, dort Textfelder mit Rahmen/Hintergrundfarbe erstellen und diese lassen sich mit Verbindern verbinden.
 
andy_m4 schrieb:
Ähm ja. Stell Dir vor. Wenn man ein Variablentyp deklariert muss man auch hinschreiben welcher Typ. *Augenroll*
Das liest sichja bei Racket anders:

Fonce schrieb:
Bei welcher Sprache kannst du den ein Integer ohne einen Gewissen Aufwand darauf eingrenzen?
andy_m4 schrieb:
Zum Beispiel in Racket. Wobei es da […]



andy_m4 schrieb:
Wie würde man es in Java machen?
Kannst Du da auch sagen: Nimm int aber das von 1..12 ?
Eine Klasse.
andy_m4 schrieb:
Offenbar setzt Du Typ und Klasse gleich. Das ist häufig so wie beispielsweise in Java. Muss es aber nicht notwendigerweise sein.
OK. Auch Klassen sind legitime Typen.

andy_m4 schrieb:
Das war ein Beispiel um zu zeigen, was C++ fehlt. Das das im Kontext C++ auch sinnvoll ist, steht auf einem völlig anderen Blatt.
C++ hat auch Klassen/Typen -> C++ fehlt das nicht.?
Sowohl in Java als auch C++ würde ich wohl sogar den Weg gehen und die Monatsnamen mit den Zahlen zu verknüpfen.

Kann der Argumentation nicht wirklich folgen^^
 
new Account() schrieb:
Das liest sichja bei Racket anders:
Wie liest es sich denn?
Ich meine, was ist jetzt an
(define monat : (Refine [n : Positive-Integer] (< n 12)) 2)
umständlich?
Nehme Bezeichner monat und weise ihm den Typ Positive-Integer mit der Einschränkung <12 zu.

new Account() schrieb:
Na nun mal Butter bei die Fische. Schreib Deine Klasse. Wenns so einfach ist, ists ja auch kein Problem.

new Account() schrieb:
OK. Auch Klassen sind legitime Typen.
Nichtsdestotrotz ist das ein Unterschied. Auch wenn der bei Sprachen wie Java nicht so stark zutage tritt.

new Account() schrieb:
Sowohl in Java als auch C++ würde ich wohl sogar den Weg gehen und die Monatsnamen mit den Zahlen zu verknüpfen.
Ja. Für die Namensgebung könnte man sogar einen Aufzählungstyp nehmen. Geht aber an der Sache vorbei.

new Account() schrieb:
Kann der Argumentation nicht wirklich folgen^^
Das Gefühl hab ich auch. :-)
 
Sorry aber wenn ihr keine UML-Diagramme benötigt / erstellt, dann ist das Projekt nicht wirklich komplex :)
Ich verwende meistens einen Mix aus UML (Sequenz, Use-Case, Automaten), BPMN, Relationenmodellen und für das Anfangsdesign einer neuen Datenbank / eines neuen Datenbankabschnitts ER-Diagramme, um die Anwendungen, die ich betreue, zu entwerfen und weiter zu entwickeln. Ganz unmittelbar skizziere ich einfach frei schnauze auf einen Whiteboard...

Meine Entwicklungstätigkeiten und die meines Teams würden ohne diese Dokumentationen jedenfalls nicht funktionieren.

Was ich jedoch nicht erstelle ist ein UML-Klassendiagramm. Häufig wird von "Laien" das Klassendiagramm als UML-Diagramm bezeichnet. Ist mir jedenfalls schon mehrfach so untergekommen.
UML ist aber eine Sammlung, die mehrere Diagrammdefinitionen beinhaltet.
UML-Sequenzdiagramme und UML Use-Case-Diagramme erstelle ich hingegen sehr oft. Hat was mit komplexen Berechtigungssystemen, diversen APIs, in denen meine Anwendungen "schwimmen" und den allgemeinen Geschäftsprozessen einer mittelgroßen Aktiengesellschaft zu tun. Ab und zu erstelle ich auch einen Automaten, einfach um eine Komplexe Fallunterscheidung (Berechtigungen mit Sondergenehmigungen z.B.) innerhalb eines Moduls darzustellen.

Momentan fummel ich an einer neuen Systemarchitektur herum, demnach erstelle ich gerade ein Systemkontextdiagramm...

Aber jeder, wie er mag und Erfolg hat.

Grüße
 
ayngush schrieb:
Sorry aber wenn ihr keine UML-Diagramme benötigt / erstellt, dann ist das Projekt nicht wirklich komplex :)

[IRONY]Sorry aber wenn ihr UML-Diagramme benötigt / erstellt, dann geht ihr es viel zu kompliziert an :p[/IRONY]

Hast wohl recht, aber ehrlich gesagt nutzen mir diese Diagramme erst etwas, wenn es um Kommunikation zwischen einzelnen Projekten/Projektteilen bzw. externen Softwares geht, oder, wie du sagtest, die Zustandsübergänge zu visualisieren, bevor ich anfange.
 
Ich male ganz gerne mal ER-Diagramme und ab und zu Sequenzdiagramme, aber für alles andere schmiere ich mit anderen Meeting-Teilnehmern unformalisiert auf Whiteboards rum.
 
  • Gefällt mir
Reaktionen: psYcho-edgE
andy_m4 schrieb:
Wie liest es sich denn?
Erst schreibt er, dass es auch für andere Sprachen ein gewisser Aufwand ist. Dann schreibst du, dass das für Racket nicht gilt und zeigst, was man dafür machen muss. Dann sage ich, dass es hier einen Widerspruch gibt, weil es einen gewissen Aufwand gibt. Verstehst du? Hier ist ein Widerspruch.
andy_m4 schrieb:
Wenns so einfach ist, ists ja auch kein Problem.
Ja eben.
andy_m4 schrieb:
Nichtsdestotrotz ist das ein Unterschied.
Was ist ein Unterschied? Dass man in jeder Sprache die Typen anders darstellt? :freaky:
 
new Account() schrieb:
Verstehst du? Hier ist ein Widerspruch.
Nee. Ich sehe den Widerspruch nicht. Hab auch detailliert begründet warum. Da reicht es nicht, wenn Du nur sagst "iss nicht so".

new Account() schrieb:
Komm mach mal und lass nicht immer die anderen die Arbeit machen. Dann werden wir ja sehen.
Ich habe genug erklärt. Jetzt musst Du auch mal liefern. Ansonsten muss ich davon ausgehen, dass Du nur laberst.

new Account() schrieb:
Was ist ein Unterschied? Dass man in jeder Sprache die Typen anders darstellt?
Ein Datentyp ist etwas anderes als eine Klasse. Die beiden Sachen sind nicht deckungsgleich. Das merkt man sogar in Java direkt. int ist ein Datentyp, aber gleichzeitig keine Klasse.
 
andy_m4 schrieb:
eigentlich "primitiver Typ", den es auch als Klasse gibt und zwischen dem in Java tatsächlich unterschieden wird: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
In C# ist der primitive Datentyp sogar einfach nur ein alias: https://stackoverflow.com/questions/62503/should-i-use-int-or-int32

also haben wir Klassen=Referenz Typen und primitive Typen als Typen. Typen

andy_m4 schrieb:
Da reicht es nicht, wenn Du nur sagst "iss nicht so".
Du hast es doch selbst gesagt :D

Er: Bei welcher Sprache kannst du den ein Integer ohne einen Gewissen Aufwand darauf eingrenzen?
Du: Zum Beispiel in Racket. Wobei es da...
Ich: Ist doch genauso ein gewisser Aufwand
Du: Ähm ja. Stell Dir vor. Wenn man ein Variablentyp deklariert muss man auch hinschreiben welcher Typ. *Augenroll*

Wenn du hier jetzt keinen Widerspruch siehst, bin ich auch ratlos :D



Und wegen mir programmier ich dir bei Zeiten mal Eine Monatskklasse in Java, oder wsl eher in C++, da ich für Java nichts am Rechner hab ;)
 
new Account() schrieb:
eigentlich "primitiver Typ", den es auch als Klasse gibt und zwischen dem in Java tatsächlich unterschieden wird
Siehste. Typ und Klasse sind offenbar ein Unterschied.

new Account() schrieb:
Wenn du hier jetzt keinen Widerspruch siehst, bin ich auch ratlos :D
Naja. Ich frag mich halt immer, wo Du da den Aufwand siehst. Es wird ja nicht mehr hingeschrieben als notwendig.
Oder ich frage mal anders: Wie sollte eine Deklaration aussehen die aus Deiner Sicht keinen Aufwand mit sich bringt?

new Account() schrieb:
Und wegen mir programmier ich dir bei Zeiten mal Eine Monatskklasse in Java, oder wsl eher in C++, da ich für Java nichts am Rechner hab ;)
Ob C++ oder Java ist mir letztlich egal.
Ich finde es aber interessant, dass Du das nicht aus dem Ärmel schütteln kannst, obwohls Deinen Worten zufolge doch so einfach sein soll. :-)
 
@andy_m4: Einmalig ein Template zu schreiben, dass du dann in etwa so nutzen kannst:

using my_int_t = safe_int<-5;10>;

ist nun wirklich nicht schwer. Es ist einmalig viel Schreibarbeit (wenn man aus irgendeinem Grund keine fertige Bibliothek dafür nutzen will) aber sicher keine Rocket Science .

Irgendwie hat diese Diskussion aber nur noch wenig mit dem Thema zu tun.
 
Miuwa schrieb:
Einmalig ein Template zu schreiben,
Ich halte Dich da sicher nicht von ab.

Miuwa schrieb:
ist nun wirklich nicht schwer.
Na offenbar schon, da hier niemand ne Lösung präsentieren kann.

Miuwa schrieb:
Irgendwie hat diese Diskussion aber nur noch wenig mit dem Thema zu tun.
Es geht um korrektes programmieren. Und dazu gehört halt auch Datentypen sinnvoll definieren. Das Problem ist, wenns nicht geht oder zu kompliziert ist, machts keiner.
 
andy_m4 schrieb:
Na offenbar schon, da hier niemand ne Lösung präsentieren kann.
Es gibt einen Unterschied zwischen nicht schwer und kein Aufwand. Das entscheidende ist, du musst es nur einmal machen oder dir eine entsprechende Bibliothek runter laden.

Wenn für dich alles schwer ist, was nicht mal eben in einem Forum gepostet wird haben wir ein sehr unterschiedliche Verständnis von diesem Begriff.
 
  • Gefällt mir
Reaktionen: new Account()
Miuwa schrieb:
Wenn für dich alles schwer ist, was nicht mal eben in einem Forum gepostet wird haben wir ein sehr unterschiedliche Verständnis von diesem Begriff.
Es zeigt nun mal das es eben nicht so einfach ist. Irgendwas hinbasteln kann man immer. Aber ne etablierte Variante zu haben die funktioniert ist halt was anderes.

Miuwa schrieb:
Es gibt einen Unterschied zwischen nicht schwer und kein Aufwand.
Es sollte halt beides nicht der Fall sein.

Miuwa schrieb:
Das entscheidende ist, du musst es nur einmal machen
Ja dann los. Ich warte. Irgendwie wird davon geredet das es geht, aber keiner wird mal konkret.
Nicht labern, machen!

Miuwa schrieb:
oder dir eine entsprechende Bibliothek runter laden.
Ja welche denn? Nu endlich mal Butter bei die Fische.

new Account() schrieb:
Was soll jetzt der kommentarlos hingerotzte Link sagen?
 
Zurück
Oben