Code bewerten - als Anfänger

Gast #6221416
Lesenswert?

Ich denke nicht das ein Anfänger (vlt. sogar jeder)  seinen eingenen 
Code sinnvoll berwerten kann. Was ein Anhaltspunkt sein könnte: wenn du 
nach einer Weile deinen Code ändern oder erweitern willst und dabei 
größere Schwierigkeiten hast, dann ist der Code schlecht dokumentiert 
oder strukturiert.
#6221430
Lesenswert?

USS schrieb:
> wenn man als Anfänger seinen eigenen Code bewerten soll, welche
> Anhaltspunkte würdet ihr wählen?

Die klassische Bewertung eines Programmcodes (oder allgemeiner eines 
Algorithmus), in jeder Informatik-Grundvorlesung, geht nach dem Aufwand 
den der Prozessor hat die Aufgabe zu bearbeiten, also die Anzahl der 
Maschienbefehle die (nicht der code lang ist sondern die) ausgeführt 
werden um das Problem (inklusive Fehlerbearbeitung) zu lösen.

So sind Programme, die eine Aufgabe mit mehr Rechenaufwand lösen, 
schlechter als solche, die es schneller mit weniger Aufwand hinbekommen.

Es gibt da ganze Notationen mit O(n) als Komplexitätsbetrachtungen von 
Algorithmen.

Das macht man in der Grundvorlesung mit einfachem code (z.B. 
Sortieralgorithmen), später wird vorausgesetzt daß man den Aufwand den 
man dem Prozessor aufhalst abschätzen kann. Leider besuchen viele self 
taught programmes keine Grundvorlesung.

Üblicherweise gilt, daß Programme die weniger Aufwand enthalten, auch 
einfacher zu erweitern und warten sind.
Gast #6221453
Lesenswert?

Michael B. schrieb:
> Die klassische Bewertung eines Programmcodes ... geht nach dem Aufwand
> den der Prozessor hat die Aufgabe zu bearbeiten

Das ist nur ein Aspekt.
Was ist mit Testbarkeit, Fehlerverhalten, Wartbarkeit (nicht als 
Nebeneffekt), Dokumentation und (dank der BLWer) Time-to-Market?
#6221468
Lesenswert?

Michael B. schrieb:
> So sind Programme, die eine Aufgabe mit mehr Rechenaufwand lösen,
> schlechter als solche, die es schneller mit weniger Aufwand hinbekommen.

Das stimmt so pauschal sicher nicht. Manchmal ist genug Rechenzeit da, 
aber der Speicher ist knapp. Dann wäre es unklug, wenn man einen 
Algorithmus verwendet der viel Speicherplatz benötigt, aber mit der 
Rechenzeit sparsam umgeht.

"Für nicht genutzte Rechenzeit gibt es kein Geld zurück." :-)
#6221473
Lesenswert?

USS schrieb:
> Hallo,
>
> wenn man als Anfänger seinen eigenen Code bewerten soll, welche
> Anhaltspunkte würdet ihr wählen?

Der Code ist dann gut, wenn er:

1.) Das korrekte Ergebnis liefert.
2.) Von einer anderen Person gelesen und ohne großen Aufwand verstanden 
werden kann. Das erzielt man durch vernünftige Namen für Funktionen und 
Veriablen, und hier und da mal einen sinnvollen Kommentar warum man 
Problem X jetzt auf die Art und Weise Y löst.
Gast #6221485
Lesenswert?

Mark B. schrieb:
> 1.) Das korrekte Ergebnis liefert.
> 2.) Von einer anderen Person gelesen und ohne großen Aufwand verstanden
> werden kann. Das erzielt man durch vernünftige Namen für Funktionen und
> Veriablen, und hier und da mal einen sinnvollen Kommentar warum man
> Problem X jetzt auf die Art und Weise Y löst.

naja, obs jemand versteht ist subjektiv. Ich wollte mehr in die 
wissenschaftliche Richtung
#6221495
Lesenswert?

USS schrieb:
> Wolfgang schrieb:
>> Fehlerverhalten
>
> interessanter Punkt.  Wie macht man das "messbar", also wie kann ich da
> eine quantitative Aussage treffen?

Fehleingaben provozieren und das Ergebnis messen. Alle Eingaben sollten 
im Code auf Plausibilität geprüft werden. Wenn irgendein Wert nicht 
plausibel ist, braucht man eine vernünftige Fehlerreaktion. Durch Null 
teilen ist zum Beispiel meistens nicht sehr vorteilhaft. ;-)
#6221502
Lesenswert?

USS schrieb:
> naja, obs jemand versteht ist subjektiv. Ich wollte mehr in die
> wissenschaftliche Richtung

Es gibt kein strenges wissenschaftliches Kriterium für die Qualität von 
Code (oder besser: für manche Aspekte der Qualität). Wenn es das gäbe, 
könnte man einfach einen Analyzer bauen der einem sagt "hier die Stelle 
ist schlecht und die und die".

Was es gibt, sind Tools zur statischen Codeanalyse. Die weisen auf 
Fehler hin wie nicht initialisierten Speicher und dergleichen. Aber sie 
können nicht die Verständlichkeit des Codes für Menschen prüfen. Die ist 
aber in großen Software-Projekten, an denen mehrere Menschen arbeiten, 
extrem wichtig.
Gast #6221509
Lesenswert?

Einem Anfänger anzuraten den Maschinencode als Maß von Softwarequalität 
heran zu ziehen halte ich für falsch.

Auf Sourcecode Ebene gibt es brauchbare Richtlnie nach denen der code 
erstellt werden sollte.
Man muß ja nicht gleich MISRA-C anlegen, aber einiges davon ist durchaus 
sinnvoll.

Lesestoff (und weiter führende links) gibt es z.B. hier: 
https://de.wikipedia.org/wiki/Programmierstil
Gast #6221524
Lesenswert?

Wolfgang schrieb:
> Das ist nur ein Aspekt.
> Was ist mit Testbarkeit, Fehlerverhalten, Wartbarkeit (nicht als
> Nebeneffekt), Dokumentation und (dank der BLWer) Time-to-Market?

Auf Time-to-Market würde ich nur Optimieren, wenn ich weiß das die Firma 
verlasse bevor das nächste Update Kommt. Bei denn anderen Aspekten gehe 
ich mit.

Wichtig ist auch immer, das der Autor des Codes sagt auf was er 
Optimiert hat. Was nutzt mir ein super schnelle Algorithmus, der viel 
Speicher braucht wenn ich nur wenig davon habe. Die Wartbarkeit ist auch 
so ein Faktor, denn man Schwer Objektiv messen kann, aber guten Code von 
Schlechten unterscheidet.

Ich zum Beispiel finde die Simple Erkenntnis: "Code wird öfters gelesen 
als Geschrieben, also Optimiere auf das leichte Verständnis!" Im 
allgemeinen besser, als, auf das letzte µ-laufzeit von Hand optimierte 
Programme. Als High frequency Broker hätte ich vielleicht andere 
Prioritäten.
Gast #6221552
Lesenswert?

Es lässt sich kurz zusammenfassen, dass es mannigfaltige Kriterien zur 
Bewertung von Sourcecode gibt. Das hängt stark davon ab, was Deine 
Aufgabe in einem Projekt ist und ob es sich um PC-Software oder Firmware 
handelt.
Meiner Erfahrung nach, wirst du Sourcecode einmal schreiben und vielfach 
lesen müssen. Schreib ihn so, dass er einfach lesbar ist. Davon 
ausgenommen sind lediglich performance-kritische Codeteile. Die dann mit 
entsprechend noch höherer Sorgfalt dokumentiert werden müssen.

Für mich hat sich folgendes Kriterium als brauchbar erwiesen:

google nach: "the only valid measurement of code quality wtfs/minute"
#6221628
Lesenswert?

USS schrieb:
> kann man soetwas als Programmierstil bezeichnen

ein "Prinzipieller Aufbau" ist erstmal kein "Stil", sondern "Struktur".
So wie ein Auto prinzipiell ein Lenkrad hat.

Ein weiteres schräges Beispiel:

Eine Wohnung kann durchaus "Struktur" haben (z.B.  hat Wohnung_1 und 
Wohnung_2 ein Schlafzimmer und ein Badezimmer)

Ob es noch zur "Struktur" gehört, das das Schlafzimemr "zur Strasse 
raus" ist, und das Badezimmer ein Durchgangszimmer ist, darüber kann man 
philisophieren.

Der Stil (die eigentliche Ausführung) mag dann jedoch unterschiedlich 
sein: Das Durchgangs-Badezimmer hat feinsten Marmor und goldene 
Wasserhähne, und das andere Bad hat angedötschte Fliesen aus den 50ern 
...
Gast #6221643
Lesenswert?

USS schrieb:
> kann man soetwas als Programmierstil bezeichnen (gibt es eine Norm)? Ist
> das soetwas, an das ihr euch haltet?

Lies bitte den verlinkten Wikipedia-Artikel.

Mir scheint die Frage wichtig, worum es Dir geht.

Ich vermute, Du nimmst an, dass es einen richtigen, allgemein 
anerkannten Stil gibt. Das trifft nicht zu.

Es gibt vielmehr eine Reihe verschiedener, sich teilweise 
widersprechende, teilweise umstrittene Regeln, auf die man sich 
festlegen kann oder auch nicht. Der Wikipedia-Artikel beschreibt das 
Problem der Entscheidung und einige Regeln recht verständlich und 
ausführlich, denke ich.

Das wesentliche scheint mir zu sein, sich, für sich persönlich oder für 
eine Gruppe, zunächst mal auf ein paar Regeln festzulegen und sie strikt 
zu befolgen. Man wird im Laufe der Zeit erfahren, ob der Sinn, der 
Effekt dieser Regeln für einen selbst wichtig ist oder nicht. Ebenso, ob 
es Regeln gibt, die einem fehlen oder sogar solche, an die noch niemand 
gedacht hat.

Sinnvolle Fragen i.d.Zshg. scheinen mir also zu sein: Welche Regeln gibt 
es (Wikipedia und anderswo)? Welche will ich anwenden? Welchen Effekt 
sollen sie haben? Haben (nach einer Weile der Anwendung) diese Regeln 
den gewünschten Effekt? Welche externe Kritik gibt es? Halte ich diese 
Kritik für relevant?
Gast #6221646
Lesenswert?

USS schrieb:
> kann man soetwas als Programmierstil bezeichnen (gibt es eine
> Norm)? Ist
> das soetwas, an das ihr euch haltet?

Kommt Darauf an (TM) Wenn es Teil des Pflichtenheft/Projektstandard ist, 
halte ich mich dran. Meiner Persönlichen Meinung widerspricht der Aufbau 
diese Struktur.
Zum Beispiel Wenn die Funktionen so wie so in der gleichen Datei 
Implementiert werden, wozu dann die Protoypen über der Main? Die Main am 
Ende hätte den Vorteil, dass ich mit einer guten IDE sofort dahin 
springen kann und das Programm so lesen wie es der Computer tut und so 
weiter.
Gast #6221652
Lesenswert?

> Üblicherweise gilt, daß Programme die weniger Aufwand enthalten, auch
> einfacher zu erweitern und warten sind.

Dass die Effizienz eines Programms in die Qualitätsbewertung eingeht, 
steht außer Frage.  Allerdings habe ich eher die Erfahrung gemacht, dass 
effiziente Lösungen meist komplexer und schwerer zu warten sind als 
triviale, einfache und offensichtlich korrekte, dafür aber meist weniger 
effiziente Lösungen.  Zu entscheiden, welche davon die "bessere" Lösung 
ist, erfordert Erfahrung und einen guten Überblick über das 
Gesamtproblem.


>> Anzahl der Maschienbefehle
>
> wie kann ich das in meinem konkreten Fall herausfinden? Also was ich so
> höre, hängt es von der Hochsprache usw ab

Beim Betrachten der Laufzeit unter Groß-O-Notation ist die konkrete 
Implementierung eher nebensächlich.  Man betrachtet die Abhängigkeit der 
Laufzeit von der Menge an Eingabedaten: doppelte soviele Eingabedaten, 
doppelte Laufzeit -> O(N); doppelte Eingabedaten, 4-fache Laufzeit -> 
O(N²); etc.  Ob die Implementation in Sprache A nun 30% schneller ist 
als in Sprache B, ist irrelevant, da konstante Faktoren rausfliegen. 
Die Sprache wird erst relevant, wenn sie bestimmte (effiziente) Lösungen 
nicht ermöglicht.
Gast #6221656
Lesenswert?

Ich vergaß zu erwähnen, dass es auch ästhetiche Gesichtspunkte gibt. In 
manchen Fällen widersprechen sie auch einer Stilregel.

Mir z.B. ist es lieber, Bedingungen wie
1
if (i == 7) ...

nicht so
1
if (7 == i) ...

zu schreiben, obwohl es mir korrekt erscheint, dass die zweite 
Schreibweise einen Fehler wie
1
if (i = 7) ...

vermeidet.


Im übrigen ist es durchaus eine Ansichtssache, was unter "Stil" fällt. 
Der Wikipedia-Artikel nennt einige Regeln und (sogar) Paradigmen bzw. 
Entwicklungsmuster, die er "im weiteren Sinn" als "Stil" bezeichnet; 
also nicht im eigentlichen. Muss man sich überlegen, ob man so eine 
Abgrenzung für wichtig hält und wofür.
Gast #6221669
Lesenswert?

> nicht so: if (7 == i) ...

Dass dir das nicht gefällt, mag aber auch an deiner Muttersprache 
liegen.  Ein Japaner verteidigte mal diese Schreibweise damit, dass sie 
eher der japanischen Sprache entspricht (Wortreihenfolge im Satz) - 
klingt einleuchtend, weiß aber nicht, ob das tatsächlich so ist ;-)
Gast #6221686
Lesenswert?

Solange der TO nicht schreibt, wofür oder auf was er bewerten will, ist 
das alles hier.kaffesatzleserei.

Sollst Du für irgendwas oder irgendwen bewerten? Wird jemand anders 
bewerten? Dann nenne Ross und Reiter.

Willst du besser werden? Dann schreibe und lese Code, und ein paar gute 
Bücher. Zu beidem kannst Du auch konkret hier fragen.
Gast #6221760
Lesenswert?

ihr gebt mir viel Input, was gut ist, aber einiges geht durcheinander.
Das Bild von dem Aufbau eines C-Programmes -> habe ich in öffentlich 
zugänglichen uochschulmaterila gefunden. Es stand keine Norm dabei oder 
ähnliches. Aber ich bezweifel, dass der prof sich das aus der Nase 
gezogen hat. Deswegen die Frage, ob es zu dem konkreten Beispiel eine 
Norm gibt
 Ansonsten erstmal vielen dank, lese mich ein und sonst melde ich mich 
nochmal
Gast #6221765
Lesenswert?

USS schrieb:
>> Anzahl der Maschienbefehle
> wie kann ich das in meinem konkreten Fall herausfinden?

Das bekommst du indirekt über Performance-Tests heraus, bei denen man 
nicht nur die Ausführungszeit sondern auch die CPU und Speicherlast 
berücksichtigt.
Gast #6221773
Lesenswert?

Mark B. schrieb:
> "Für nicht genutzte Rechenzeit gibt es kein Geld zurück." :-)

Das ist nur halb richtig. Denn schlafende Computer nehmen weniger Strom 
auf (nicht alle, aber die meisten). Und den vergangenen 20 Jahren haben 
Intel und AMD ihre x86 Prozessoren in dieser Hinsicht extrem verbessert.
Gast #6221785
Lesenswert?

USS schrieb:
> ihr gebt mir viel Input, was gut ist, aber einiges geht durcheinander.
> Das Bild von dem Aufbau eines C-Programmes -> habe ich in öffentlich
> zugänglichen uochschulmaterila gefunden. Es stand keine Norm dabei oder
> ähnliches. Aber ich bezweifel, dass der prof sich das aus der Nase
> gezogen hat. Deswegen die Frage, ob es zu dem konkreten Beispiel eine
> Norm gibt
>  Ansonsten erstmal vielen dank, lese mich ein und sonst melde ich mich
> nochmal

Aber lieber USS! Dann musst Du Deine Frage sorgfältiger formulieren.

Du hast ursprünglich gefragt:

"wenn man als Anfänger seinen eigenen Code bewerten soll, welche
Anhaltspunkte würdet ihr wählen?"

Das ist eine ganz andere Frage. Nämlich die woher Dein Prof. irgendein 
Bild hat und ob das aus einer Norm stammt.

Wenn hier irgendwas durcheinander geht, dann Deine Fragen.

Bitte habe Verständnis dafür, dass die Verständigen hier genau die Frage 
beantworten, die Du stellst. Nicht die, die Du nicht stellst.
Wir lesen keine Gedanken und unsere Glaskugeln sind alle beim polieren. 
:-)
Gast #6221924
Lesenswert?

Theor schrieb:
> Bitte habe Verständnis dafür, dass die Verständigen hier genau die Frage
> beantworten, die Du stellst. Nicht die, die Du nicht stellst.
> Wir lesen keine Gedanken und unsere Glaskugeln sind alle beim polieren.
> :-)

passt doch alles, die Frage hat sich  herauskristallisiert
Gast #6221956
Lesenswert?

Das alleinige Kriterium ist, ob der Code die Anforderungen erfüllt.
Code ist ja kein Kunstwerk, für das der Künstler beliebig viel Zeit 
investieren soll.

Alles was der Code erfüllen soll ist im Vorfeld festgelegt. z.B.
- maximaler Speicherbedarf
- Ausführungsgeschwindigkeit
- Reaktionsgeschwindigkeit
- Skalierung
- Fertigstellungstermin
- Kosten/Zeitaufwand

und nicht zuletzt auch firmeninterne Regelungen wie
- Coding-Style
- Variablenbenennungen
- Dokumentation
- Versionierung
- Testkriterien

Dann kannst z.B. ein Netzdiagramm machen, wie gut die einzelnen 
Anforderungen erfüllt sind.
Alles was nicht im Vorfeld festgelegt wurde, kann nicht in 
Qualitätsbetrachtungen eingehen.
#6221962
Lesenswert?

Meiner Meinung nach können Anfänger Code schon auch bewerten, aber halt 
nach simplen Kriterien. Zwei Dinge die mir da ad-hoc einfallen sind:
-) Zu lange Funktionen
-) Zu große Einrückungstiefe

Das sind erfahrungsgemäß auch so Dinge die quasi jeder am Anfang falsch 
macht.
Gast #6222039
Lesenswert?

Michael B. schrieb:
> also die Anzahl der Maschienbefehle die (nicht der code lang ist sondern
> die) ausgeführt werden um das Problem (inklusive Fehlerbearbeitung) zu
> lösen.

Mit heutigen Prozessoren kann die Performance auch mal mit der Anzahl 
der ausgeführten Instruktionen steigen, ist also eher eine sinnlose 
Metrik. Gemessene Taktzyklen sind aussagekräftiger.
Gast #6222045
Lesenswert?

USS schrieb:
> Aber ich bezweifel, dass der prof sich das aus der Nase gezogen hat

Wenn es darum geht, Code für einen Prof zu schreiben: das hat nichts mit 
echten Code zu tun. Das wäre, als bewerte man ein Gedicht nach der 
Handschrift.

Die ganzen akademischen Regeln gelten für Code von genau dem Umfang 
(1000 Zeilen ). Und wenn der Prof an ungarischer Notation hängt, dann 
macht es den Code nicht besser, aber deine Zensur.
Gast #6222050
Lesenswert?

USS schrieb:
> weiß ich nicht, wie so ein Test aussieht

Kann man auch nicht pauschal sagen- Performance Tests sind immer sehr 
Anwendungsspezifisch und werden in der Regel selbst wiederum 
schrittweise entwickelt. An besten von einem separaten Team - nicht von 
den Programmierern.
Gast #6222055
Lesenswert?

A. S. schrieb:
> Und wenn der Prof an ungarischer Notation hängt, dann
> macht es den Code nicht besser, aber deine Zensur.

Genau, womit wie wieder darauf zurück kommen, dass der Code die 
Anforderungen des Kunden erfüllen muss. In diesem Fall ist der Professor 
der Kunde und auch derjenige, der Struktur und Stil vorgibt.

Als Entwickler orientiert man sich besser daran, was die Leute um einen 
herum haben wollen, als an irgendwelchen Standards. Über Standards 
sollte man genau so wie über eigene Ideen mit Team und ggf. Kunde 
diskutieren, bevor man sie umsetzt.
#6222078
Lesenswert?

Stefan ⛄ F. schrieb:
> das geht nicht. Anfänger können ihren eigenen Code nicht bewerten.

Grundsätzlich kann jemand, der ein Stück Code geschrieben hat, dessen 
Qualität nicht bewerten. Egal ob Anfänger oder nicht.

Wer (funktionierenden) Code geschrieben hat, hat das Problem verstanden 
und offensichtlich auch den Algorithmus (sonst würde der Code 
wahrscheinlich nicht funktionieren).

Für den wird es immer einfacher sein, das Programm zu verstehen als für 
jemanden, der sich (noch) nicht eingehend mit dem Problem beschäftigt 
hat.

Wenn beispielsweise jemand, der sich länger mit Grafik-Algorithmen 
beschäftigt hat, wird er einen Bresenham- oder DDA-Algorithmus auch ohne 
ausgiebige Kommentierung mehr oder weniger sofort als solchen erkennen.

Wer Finanzsoftware programmiert, wird selbst mit Kommentaren 
wahrscheinlich noch Literatur benötigen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren