Was ist »guter« Code

In diesem sagt einer der Gründer von Zend(Zeev Suraski) ,dass PHP nicht schlecht ist ,sondern die Entwickler.
Nun ,wenn ich mich hier umsehe ,dann gebe ich ihm Recht.
Das liegt aber meiner Meinung nach daran, dass hier überwiegend die PHP-Neulinge ihre Fragen stellen. Da kann man nicht erwarten, dass der Code "gut" ist.

Ich bezeichne Code als gut, wenn er ein Problem mit möglichst geringer Zeilenanzahl lösen kann. Ausserdem ist mir wichtig, dass der Code Anpassungen in sehr kurzer Zeit zulässt.

snuu
 
Guter Code, lass mich nachdenken :

Code den ein mit der Applikation unerfahrener Benutzer in einer vernünftigen
Zeitspanne verstehen und bearbeiten kann.

Nachdem ich gerade (wieder mal) an Code sitze bei dem ich alle
zwei Zeilen entweder weinen oder lachen könnte und das schon
öfter machen musste geht vernünftig kommentierter Code mit
einer übersichtlichen Struktur und klar erkennbaren Funktionen für
mich über alles.
 
Obwohl vieles schon gesagt wurde...

Guter Code...
1. ... ist logisch durchdacht strukturiert (auch auf Datei- und Verzeichnisebene!)
2. ... ist leicht verständlich geschrieben (Variablennamen mit nur einem Buchstaben etc. vermeiden)
3. ... ist ausreichend kommentiert
4. ... ist übersichtlich und vor allem einheitlich formatiert
5. ... sollte leicht erweiterbar/abänderbar sein
6. ... sollte, wenn möglich, auch relativ performant geschrieben sein. Performanz ist aber nicht immer die Maxime! Wenn sehr stark optimierter Code vorliegt, muss dieser auch ausreichend kommentiert sein (evtl. sogar leichter verständlichen, funktionsgleichen Code in den Kommentar packen)

Alles natürlich nur IMHO und unvollständig ;)
 
„Ich bezeichne Code als gut, wenn er ein Problem mit möglichst geringer Zeilenanzahl lösen kann.“
Dem stimme ich nicht überein. Denn auch das komplizierteste Skript passt theoretisch in eine Zeile – nur der Editor setzt dem eine Grenze.

Unter guten Quellcode verstehe ich ebenfalls, dass die Datenverarbeitung von der Datendarstellung getrennt ist.
 
Ich finde es ebenfalls sehr wichtig wie man ein bestimmtes Problem löst!

Manche Probleme erfordern einen iterativen Ansatz, andere lassen sich sehr viel besser mit einer Rekursion lösen (z.B. Listen, Bäume, Bernoulli...).

Ebenfalls wichtig beim Sortieren z.B.:
Jeder Sortieralgorithmus hat verschiedene Vor-und Nachteile. Nur wer diesen passend zum Problem auswählt schreibt einen guten Code und dies widerlegt
folgende These:

„Ich bezeichne Code als gut, wenn er ein Problem mit möglichst geringer Zeilenanzahl lösen kann.“

Das ist meiner Meinung nach nicht richtig! Sonst würde man ja immer Bubblesort verwenden da dieser sehr leicht und kurz programmierbar ist.

Lieben Gruß,
Manuel ;-]
 
Guter Code ist der Code, der a) seine Aufgabe erfüllt und b) von jemand fremdem gelesen werden kann und er danach grob versteht, wass der Code macht.

Bubblesort kann auch "guter Code" sein - wenn nicht viel zu sortieren ist, z.B.
 
Original geschrieben von KoMtuR
Natürlich ist das schwer zu erklären. Jeder hat einen eigenen "Standard". Du hältst vielleicht ein Code für gut und ich wiederrum meine, dass ich ihne sch... finde. Ich denke einfach mal, dass er mit gutem code meint, dass er erstens fehlerfrei gesciptet wird und dann auch keine Angriffsmöglichkeiten bilden. Man sagt ja auch immer, dass man einen Code so schreiben sollte, dass jeder dieses Stück lesen kann.
Aber lesen können wir alle und wer sich ein Codestückchen anschaut und verstehen will, muss sich ja auch zwangsläufig mit der Sprache auskennen. Ich kann ja nicht alle kommentieren, am Besten noch die Definition am Ende rankommentiert.

Ist glaub ich fast so, wie wenn du fragen würdest, was der Unterschied von "das Gleiche" und "das Selbe" ist ;)


Original geschrieben von Nils Hitze

Code den ein mit der Applikation unerfahrener Benutzer in einer vernünftigen
Zeitspanne verstehen und bearbeiten kann.

Da muss ich dir widersprechen Nils. Ein unerfahrener Programmierer sollte etwas an seiner Erfahrung arbeiten wenn dies zum Problem wird.
Streichst du das Unerfahren dann unterschreib ich dir den Satz.
Wartbarkeit, heisst u.a das die Logic die in dem Code steckt, von 3. Programmierern nachvollzogen werden kann

Original geschrieben von Nils Hitze

Nachdem ich gerade (wieder mal) an Code sitze bei dem ich alle
zwei Zeilen entweder weinen oder lachen könnte und das schon
öfter machen musste geht vernünftig kommentierter Code mit
einer übersichtlichen Struktur und klar erkennbaren Funktionen für
mich über alles.

Soll ich dich an Rolands Code errinnern (Gott sei dank, hab ich damit
nichts mehr zu tun) ? :D

Original geschrieben von Wolfsbein
7. Er muss wiederverwendbar sein. Der Programmierer an sich ist faul ;).

Ja wenn die Wiederverwendbarkeit nicht mit zu hohen Entwicklugsaufwand erkauft wird.
Wenn ich etwas für eine Firma entwickel die ihre komplett eigenen Geschäftsprozesse haben, ist es eher Schädlich auf Teufel komm raus das so umzugestallten das ich so viel wie möglich davon wieder benutzen kann.
Wir als Endprogrammierer (diejenigen die aus Librarys und SDK fertige Programme kreairen) brauchen diese Wiederverwendbarkeit nicht ins Extreme zu treiben.
Das heisst die Wiederverwendbarkeit ist je nach Art des Produktes wichtig. Schreiben wir eine GUI Applikation für einen Kunden ist sie weniger wichtig als wenn wir ein Framework für dies oder jenes schreiben.

Original geschrieben von squeaker
Guter Code ist der Code, der a) seine Aufgabe erfüllt und b) von jemand fremdem gelesen werden kann und er danach grob versteht, wass der Code macht.

Bubblesort kann auch "guter Code" sein - wenn nicht viel zu sortieren ist, z.B.

Zum 1. Satz: unterschreib
Zum 2. Satz: weshalb sollte ich ein Bubblesort implementieren wenn ich anhand meines eigenen Comporators und einer sort Methode sortieren kann?
Der Comporator hat einen riesen Vorteil vor jeder eigenen Implementierung, jeder Java Programmierer erkennt gleich wonach sotiert wird und muss sich nicht erst in die Implementierung der Sotierung einarbeiten.

Zu Klammern und ähnlichem:
Absolut sekundär.
Ein programmierer kann sämmtliche Arten von Klammerung lesen, solange dies nicht auf die Spitze getrieben wird.

Guter Code ist bei OOP Code ein sinnvolles Object Orientiertes Design.
Und genau das ist etwas das den meisten Anfängern auch fehlt. Denn das feeling dafür wie mann am besten Kapselt kommt erst mit der Zeit.

Guter Code versucht mehr zu sein als er ist. Sprich selbst wenn das Ziel
eine Applikation in Deutsch, und nur in Deutsch ist, versucht guter Code schon vorrauszusehen das die Applikation irgendwann internationalisiert wird und sorgt dafür das keine Strings im Code selber stehen. Auch sorgt guter Code dafür das es einfach ist Funktionalität durch einfaches Austauschen / Hinzufügen von Klassen ermöglicht wird.

Guter Code zeigt das der Programmierer nicht sein Ego befriedigen wollte, in dem er dem Code seine "Persöhnliche Handschrift" aufträngt sondern er hält sich an allgemein gültiges. Er ist so einfach wie möglich gestrickt und verzichtet darauf Komplexität hinzuzufügen ohne einen wirklichen zugewinn.

Guter Code versucht es zu vermeiden x Schleifen ineinanderzuquetschen und hier einen Trigger und da einen zu setzen nur das früher oder später das gewünschte Ergebnis zu stande kommt, sondern er ist ausreichend Modularisiert das die Methoden / Funktionen klein sind und nur ihre beschreibende Aufgabe durchführen.

Guter Code verlässt sich nicht darauf das alles glatt geht, sondern er hat für alles einen Plan B. Das heisst ein Code der Daten aus einer Datenbank liest, daraus ein PDF generiert und dieses per SOAP Call an ein Webservice als Bytearray schickt weiss wie er regieren muss.
So gibt es Datenbanken die nur eine bestimmte Menge an gleichzeitigen Verbindungen erlauben, guter Code reagiert auf sowas indem er sich einen Timeout gibt die Verbindung versucht aufzubauen, wenn dieses nicht funktioniert eine Pause macht, es erneut versucht und am ende des Timeouts richtig reagiert (Logging? Error Mail an den Admin?) er reagiert auch darauf wenn das PDF generieren und speichern des PDFs nicht möglich ist (Festplatte voll?!) und hat ebenso eine Fehlerbehandlungsroutine für den Fall das der Webservice nicht erreichbar ist.
Diese Fehlerbehandlung ist etwas das ich hier im Forum bei den meisten als nicht durchgeführt sehe.
So werden Daten auf die Festplatte geschrieben, ohne das sich jemand Gedanken macht was passiert wenn die Platte voll ist? Das Programm ohne sinnvolle Behandlung einfach abstürzen zu lassen, hat wenig Sinn und hat mit gutem Code nix zu tun.

Und guter Code ist es, wenn er nicht so aussieht wie der Code den ich noch vor einem Jahr geschrieben habe :-)
 
OT: Das Gleiche und das Selbe

Original geschrieben von KoMtuR
Natürlich ist das schwer zu erklären....
Ist glaub ich fast so, wie wenn du fragen würdest, was der Unterschied von "das Gleiche" und "das Selbe" ist ;)

Den Unterschied kann man sich sehr leicht merken. Zwei Dinge können sich gleichen aber sie können sich nicht selben !
;)
 
Original geschrieben von Christian Fein

Zum 2. Satz: weshalb sollte ich ein Bubblesort implementieren wenn ich anhand meines eigenen Comporators und einer sort Methode sortieren kann?
Wenn du das kannst, ist das eine feine Sache - ich hab Bubblesort trotzdem in asm programmiert - ich hatte keinen Comparator und es musste trotzdem funktionieren.
Nein - ich habe mich auf weiter oben bezogen. Ein gut geschriebenes Programm muss nicht unbedingt das Programm mit dem schnellsten Algorithmus sein. Es muss ein Programm mit einem ausreichend schnellen Algorithmus sein. Wichtig ist, dass er JETZT ausreichend schnell ist auf dem KLEINSTEN Rechner der verwendet wird. Und nicht dass in 6 Monaten der aktuellste Rechner ausreichend schnell sein wird.
Aber dann kann ein einfacherer, aber langsamerer Algorithmus zur Lösung eines Problems durchaus angebracht sein. Oder die Benutzung einer Programmiersprache wie Java statt C++ - wegen der Bibliothek - oder oder oder.
 
Zurück