Das Lesen des SQLite- Quellcodes ist IMO-Mission unmöglich. Dabei handelt es sich um eine nützliche, recht komplexe Software (schließlich handelt es sich um eine vollständig eingebettete Datenbank), die heruntergeladen, kompiliert und aus anderem Code verwendet und ständig aktualisiert werden kann.
Wie schaffen es die Leute, solch extrem komplexen und schwer lesbaren Code zu schreiben und zu pflegen?
source-code
maintenance
readability
scharfer Zahn
quelle
quelle
Antworten:
Es gibt einen großen Unterschied zwischen komplex und kompliziert. Der folgende Link fasst es zusammen. :)
http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/complex-vs-complicated.aspx
Persönlicher ausgedrückt, arbeite ich mit einer Codebasis von mehr als 1 Million Codezeilen. Ich war von Zeile 1 bis zu seinem aktuellen Status dabei. Je mehr Farmilar Sie sind (lesen Sie länger, bis Sie im Code sind), desto einfacher wird es. Ich kann Ihnen nicht sagen, was jede Zeile tut, aber ich kann Ihnen sagen, dass Sie nach einer bestimmten Aufgabe oder einem bestimmten Fehler suchen sollen. Es kommt einfach von alleine.
Die Moral der Geschichte ist, dass wie alles in der Programmierwelt Zeit benötigt wird. Wenn Sie SQLite kennen und verstehen wollen, dann machen Sie doch selbst Witze. Es wird einige Zeit dauern, um herauszufinden, wie alles zusammenarbeitet. Der Unterschied zwischen gutem und schlechtem Code besteht darin, wie lange dieser Vorgang dauert.
Schließlich haben einige Entwickler nicht die Möglichkeit, in eine Codebasis zu springen und dies herauszufinden. Viele werden sich von der Größe oder Architektur der Codebasis überwältigt fühlen. Andere werden kein Problem damit haben, einfach hinein zu springen. Es hängt alles von den Stärken der Entwickler ab.
quelle
Im speziellen Fall von SQLite ist das Hauptwerkzeug, das sie für die Entwicklung und Wartung ausgewählt haben, das automatisierte Testen. Sie sind stolz auf eine 100% ige Abdeckung (Zweigabdeckung, keine Aussageabdeckung) in ihrer Testsuite. Ihnen zufolge ist es eines der am besten getesteten Softwareprodukte der Welt. Sie wissen also sofort, wann etwas, das sie hinzugefügt oder geändert haben, eine Regression hervorruft und können sich infolgedessen ziemlich furchtlos entwickeln.
http://sqlite.org/testing.html
Ziemlich erstaunliche Zahlen - sie haben ungefähr 640- mal so viele Zeilen Testcode wie der Seriencode.
EDIT: Diese Frage wurde von den Toten aufgeworfen, wie es scheint! Und etwas mehr als ein Jahr später meldet dieselbe Seite, dass sie 1177-mal so viele Zeilen Testcode wie in der Produktion enthält!
quelle
quelle
Sie müssen das gesamte Projekt nicht genau kennen, um es verwalten zu können. In der Regel haben Menschen mit großer, komplexer Software ihre eigenen "Bereiche", die sie betreuen, und sie verfügen nur über ein vorübergehendes Wissen über den Rest des Systems.
SQLite ist im Vergleich zu "großen Softwareprojekten" eigentlich relativ klein, aber wenn Sie sich so etwas wie das Windows-Betriebssystem ansehen, werden Sie Leute haben, die nur am Kernel arbeiten, Leute, die nur an der Shell arbeiten, Leute, die nur arbeiten im Internet Explorer, Leute, die nur mit dem Fenstermanager arbeiten, usw. usw. Jemand, der in der "Shell" arbeitet, kann einen Fehler im Kernel nicht im Handumdrehen beheben.
Es gibt auch den Vorteil, dass sich diese Projekte im Laufe der Zeit weiterentwickeln: Sie haben nicht immer so kompliziert begonnen. Das bedeutet, dass ein neuer Entwickler normalerweise von erfahreneren Entwicklern "geschult" werden kann.
Wenn Sie sich einem großen Entwicklerteam anschließen, erhalten Sie einen bestimmten Aspekt des Projekts, an dem Sie arbeiten müssen (möglicherweise einen Fehler oder eine neue Funktion), und in den ersten paar Iterationen wird ein anderer Entwickler Sie zum "Kumpel". Ihr Kumpel hat ein gutes Verständnis für den Bereich, in dem Sie arbeiten, und kann Ihnen helfen, sich zurechtzufinden.
Bei Open-Source-Projekten wie SQLite ist es tatsächlich etwas schwieriger, da vorhandene Entwickler nicht motiviert sind, neue Entwickler zu "schulen". So werden Sie feststellen, dass Sie ein bisschen mehr alleine sind. Sie finden jedoch weiterhin Hilfe in Entwicklerforen oder Mailinglisten (z. B. wenn Sie eine Frage wie "Ich möchte diese und jene Funktion implementieren" oder "Ich habe Fehler XYZ gefunden, wo soll ich suchen?" irgendeine Form von Hilfe.
quelle
Es gibt einen Unterschied zwischen schwer lesbaren und komplexen Projekten. Wenn eine Person die Sprache, in der das Projekt geschrieben wurde, oder die Domäne des Projekts nicht gut versteht, bedeutet dies nicht, dass der Code schlecht geschrieben ist.
Mein Rat:
Für mich ist SQLite viel zu komplex und nichts kompliziertes. Die Domäne dieses Projekts erfordert ein tiefes Verständnis für breite Konzepte.
quelle
Eine Sache, die in den anderen Antworten nicht erwähnt wird, ist "Es kommt natürlich zu ihnen". Die meisten Menschen möchten guten Code schreiben, sind jedoch darauf eingestellt, schlechten Code zu schreiben. Einige der Programmierer, die ich getroffen habe, sind natürlich LINEAR-Denker. Manchmal kommen sie sehr witzig auf komplexe Lösungen. Die meisten dieser Leute verbringen keine Zeit damit, das Buch zu lesen oder daraus zu lernen, wie und wann die Arbeit es erfordert.
quelle
Wenn es sich bei ihnen um die ursprünglichen Programmierer handelt und sie es weiterhin pflegen, sehen sie es nicht als "komplex und schwer zu lesen" an. Sie sehen es wahrscheinlich als "einfach und leicht zu lesen" an, da sie es selbst geschrieben haben.
Jeder Code braucht Zeit, um ihn zu verstehen. Es ist nur so, dass einige länger dauern als andere :)
quelle
Sie können Ihren Kopf um jede Code-Basis wickeln, wenn Sie - Ausdauer, Geduld und einen methodischen Ansatz - aber hauptsächlich Ausdauer haben :-)
quelle
Das Management wird viel einfacher, wenn die Dinge immer auf die gleiche Weise erledigt werden. Ich kenne den SQLite-Code nicht, arbeite aber in einer Umgebung, in der es mehrere Projekte gibt. Abgesehen vom Verständnis des Geschäftsfalls (EQ-Logik) ist es relativ einfach, mit der Arbeit an einem anderen Projekt zu beginnen, da im Grunde genommen alles überall auf die gleiche Weise erfolgt (Datenbankzugriff usw.). Langer Text, kurzer Sinn: Codierungsrichtlinien - in geeigneter Weise - machen das Leben und einen solchen Code viel einfacher. Dies könnte einer der Helfer für die SQLite-Codierer sein.
quelle
quelle
Sie versuchen es auf einfache Weise zu schreiben, aber nicht auf einfache Weise.
Wenn Sie so einfach wie möglich vorgehen, wird das Verstehen / Lesen beschleunigt, auch wenn dies einige Zeit in Anspruch nehmen kann.
quelle
Der implementierte Algorithmus legt eine Untergrenze für die Einfachheit des Codes für eine Implementierung fest. Wenn eine abstrakte Beschreibung des zu implementierenden Algorithmus extrem kompliziert ist und das Koppeln von Tonnen verschiedener Daten erfordert, kann der Code, der den Algorithmus implementiert, nicht einfach sein, egal wer ihn schreibt.
Mit anderen Worten, ein Grund, warum ich manchmal unergründlichen Code schreibe, ist, dass ich angesichts des Algorithmus, den ich implementieren möchte, keine andere Wahl habe.
quelle