Ich habe im Laufe der Jahre eine Menge Klagen über vererbte Projekte gehört, mit denen wir Entwickler arbeiten müssen. Die WTF-Seite hat Tonnen von Code-Beispielen, die mich tatsächlich in meinen Mund murmeln lassen "WTF?"
Aber jemand von euch hat tatsächlich einen Code bekommen, der dich dazu gebracht hat zu gehen: "Heiliger Mist, das war gut durchdacht!" oder "Wow, ich habe nie darüber nachgedacht!"
Mit welchem vererbten Code haben Sie gearbeitet, der Sie zum Lächeln gebracht hat und warum?
Vor langer Zeit war ich für die Laufzeitbibliothek von Turbo C / C ++ verantwortlich. Tanj Bennett schrieb den ursprünglichen 80x87 Fließkomma-Emulator in 16-Bit-Assembler. Ich hatte mir Tanjs Code nicht genau angesehen, da er gut funktionierte und keine Aufmerksamkeit erforderte. Aber wir machten den Umzug zu 32-Bit und die Aufgabe fiel mir, den Emulator zu dehnen.
Wenn man sagen könnte, dass Programmierung mit der Kunst etwas zu tun hat, dann war es das.
Tanjs mathematische Kernfunktionen schafften es, ein 80-Bit-Fließkomma-Ergebnis in fünf 16-Bit-Registern zu speichern, ohne sie speichern und aus dem Speicher wiederherstellen zu müssen. X86-Assembly-Programmierer werden verstehen, was für eine Leistung das war. Register Platz war knapp und halten fünf Register als Ihre Temp, während gleichzeitig komplexe Mathematik war eine schöne Seite zu sehen.
Wenn es nur eine Frage cleverer Kodierung wäre, hätte es genügt, um es als Kunst zu qualifizieren, aber es war mehr als das. Tanj hatte sorgfältig die zugrunde liegenden mathematischen Algorithmen ausgewählt, die am besten geeignet waren, die Temperatur in Registern zu halten. Das Ergebnis war ein blitzschneller Gleitkomma-Emulator, der für viele unserer Kunden ein wichtiges Verkaufsargument war.
Als der 386 kam, hatten die meisten Leute, die sich um die Gleitkomma-Performance kümmerten, keinen Emulator, aber wir mussten Intels 386SX unterstützen, so dass der Emulator überarbeitet werden musste. Ich habe die Instruktions-Dekodierlogik und die Ausnahmebehandlung neu geschrieben, aber die mathematischen Kernfunktionen völlig unberührt gelassen.
In meinem ersten Job war ich erstaunt, eine "sichere ID" -Klasse in der Codebasis (c ++) zu entdecken, die numerische IDs in eine Klasse mit einer leeren Tag-Klasse verpackte, die sicherstellte, dass der Compiler sich beschweren würde versucht, zum Beispiel eine UserId zu einer OrderId zu vergleichen oder zuzuordnen.
Ich habe nicht nur sichergestellt, dass ich in allen folgenden Codebasen eine äquivalente Id-Klasse verwendet habe, sondern es hat mir auch gezeigt, was der Compiler tun kann, um Korrektheit zu garantieren und stärkeren Code zu schreiben.
Der Code, der mich am meisten beeindruckt und den ich zu emulieren versuche, ist ein Code, der zu einfach und leicht zu verstehen ist.
Es ist verdammt schwierig, diese Art von Code zu schreiben. : -)
Ich habe hier eine lustige Geschichte zu erzählen.
Ich habe an dieser Javaish-Anwendung gearbeitet, gefüllt mit Gettern & amp; Setter, die nur get oder set haben und Interfaces und alles, was jemals erfunden wurde, um Code unlesbar zu machen. Eines Tages stolperte ich über Code, der sehr gut verarbeitet schien - es war im Grunde eine Algorithmusimplementierung, die sehr elegant aussah = wenige Zeilen lesbaren Codes, obwohl sie alle möglichen Regeln respektierten, die das Projekt einhalten musste (es wurde automatisch geprüft) .
Ich konnte nicht herausfinden, wer im Team solch einen Code hätte schreiben können. Ich wollte unbedingt mit ihm diskutieren und Gedanken austauschen. Zum Glück waren wir ein paar Monate zuvor auf Subversion (von cvs) umgestiegen und ich lief schnell "Schuld". Ich saß überall herum und sah meinen Namen neben der Implementierung.
Ich hatte Geschichten über Leute gehört, die sich nicht an Code erinnern, den sie vor sechs Monaten geschrieben haben, ein Code, der ein Albtraum ist, den man pflegen muss. Ich konnte nicht glauben, dass so etwas passieren könnte: Wie kannst du Code vergessen, den du geschrieben hast? Nun, ich bin überzeugt, dass es passieren kann. Zum Glück war der Code in Ordnung und einfach zu erweitern, so habe ich nur die Hälfte der Geschichte erlebt.
Der Code, der mich am meisten beeindruckt und den ich zu emulieren versuche, ist ein Code, der zu einfach und leicht zu verstehen ist.
Es ist verdammt schwierig, diese Art von Code zu schreiben. : -)
In meinem ersten Job war ich erstaunt, eine "sichere ID" -Klasse in der Codebasis (c ++) zu entdecken, die numerische IDs in eine Klasse mit einer leeren Tag-Klasse verpackte, die sicherstellte, dass der Compiler sich beschweren würde versucht, zum Beispiel eine UserId zu einer OrderId zu vergleichen oder zuzuordnen.
Ich habe nicht nur sichergestellt, dass ich in allen folgenden Codebasen eine äquivalente Id-Klasse verwendet habe, sondern es hat mir auch gezeigt, was der Compiler tun kann, um Korrektheit zu garantieren und stärkeren Code zu schreiben.
Ich habe hier eine lustige Geschichte zu erzählen.
Ich habe an dieser Javaish-Anwendung gearbeitet, gefüllt mit Gettern & amp; Setter, die nur get oder set haben und Interfaces und alles, was jemals erfunden wurde, um Code unlesbar zu machen. Eines Tages stolperte ich über Code, der sehr gut verarbeitet schien - es war im Grunde eine Algorithmusimplementierung, die sehr elegant aussah = wenige Zeilen lesbaren Codes, obwohl sie alle möglichen Regeln respektierten, die das Projekt einhalten musste (es wurde automatisch geprüft) .
Ich konnte nicht herausfinden, wer im Team solch einen Code hätte schreiben können. Ich wollte unbedingt mit ihm diskutieren und Gedanken austauschen. Zum Glück waren wir ein paar Monate zuvor auf Subversion (von cvs) umgestiegen und ich lief schnell "Schuld". Ich saß überall herum und sah meinen Namen neben der Implementierung.
Ich hatte Geschichten über Leute gehört, die sich nicht an Code erinnern, den sie vor sechs Monaten geschrieben haben, ein Code, der ein Albtraum ist, den man pflegen muss. Ich konnte nicht glauben, dass so etwas passieren könnte: Wie kannst du Code vergessen, den du geschrieben hast? Nun, ich bin überzeugt, dass es passieren kann. Zum Glück war der Code in Ordnung und einfach zu erweitern, so habe ich nur die Hälfte der Geschichte erlebt.
Ich habe im Laufe der Jahre eine Menge Klagen über vererbte Projekte gehört, mit denen wir Entwickler arbeiten müssen. Die WTF-Seite hat Tonnen von Code-Beispielen, die mich tatsächlich in meinen Mund murmeln lassen "WTF?"
Aber jemand von euch hat tatsächlich einen Code bekommen, der dich dazu gebracht hat zu gehen: "Heiliger Mist, das war gut durchdacht!" oder "Wow, ich habe nie darüber nachgedacht!"
Mit welchem vererbten Code haben Sie gearbeitet, der Sie zum Lächeln gebracht hat und warum?
Einige VB6-Code von einem anderen Programmierer in meiner Firma, die ich stieß, die Fehlerbedingungen sehr gut behandelt (ob es direkt mit ihnen umgehen oder sie protokollieren).
Zusammen mit etwas ziemlich komplexem Code, der gut kommentiert wurde.
Ich weiß, dass das viele Antworten wie
bringen wird"Ich habe nie einen guten Code gefunden, bevor ich eintrete" und Variationen.
Ich denke, das eigentliche Problem ist nicht, dass es keine guten Programmierer oder exzellente Projekte gibt, dass es ein Übermaß an gibt NIH-Syndrom und die Tatsache, dass kein Körper Code von anderen mag. Letzteres ist nur, weil Sie eine intellektuelle Anstrengung machen müssen, um es zu verstehen, eine viel größere Anstrengung, als Sie brauchen, um Ihren eigenen Code zu verstehen, so dass Sie es nicht mögen (es bringt Sie zum Nachdenken und Arbeiten).
Persönlich kann ich mich (wie alle ich denke) an einige Fälle von wirklich schlechtem Code erinnern, aber ich erinnere mich auch an einen ziemlich gut dokumentierten, eleganten Code.
Momentan hat mich das Projekt, das mich am meisten beeindruckt hat, eine sehr dynamische Dynamic Workflow Engine, nicht nur wegen der Einfachheit, sondern auch wegen der Art und Weise, wie es kodiert ist. Ich kann mich hier und da an einige clevere Ausschnitte erinnern, sowie an eine schöne Metaprogrammier-Bibliothek, die auf einer vollständigen IDL basiert, die von einigen meiner Freunde entwickelt wurde () Aspl.es )
Symbian OS - das alte Kernstück jedenfalls, das Stück, das auf die Psion-Tage zurückgeht oder diejenigen, die diesen Geist noch heute am Leben halten.
Und direkt neben ihm sitzt der ganze neue Mist, den die niedrigsten Bieter der großen Telefonkonzerne geschaffen haben. Es war erschreckend, man konnte tatsächlich in den Knochen spüren, ob ein bisschen Code-Basis irgendwie alt oder neu war.
Ich habe einen großen Haufen Code geerbt, der so gut geschrieben war. Ich habe die $ 40 online ausgegeben, um den Typen zu finden, ich ging zu ihm nach Hause und bedankte mich bei ihm.
Ich denke, Rocky Lhotka sollte den Kredit bekommen, aber ich musste kürzlich eine CSLA.NET-Anwendung {in meiner privaten Praxis} berühren und ich war sehr beeindruckt von der Ordnungsmäßigkeit des Codes. Die App hat sehr gut funktioniert, aber der Client brauchte ein paar Erweiterungen. Der ursprüngliche Autor war tragisch gestorben, und der neue Typ war nicht kultiviert. Er verstand CSLA.NETs Business-Objekt-basierten Ansatz nicht, und er wollte es noch einmal in ausgeklügelten VB.NET, ohne irgendwelche Phantasie Rahmen tun.
Also habe ich den Anruf bekommen. Ein funktionierendes Beispiel für WinForm-Bindung und CSLA.NET zu betrachten, war ziemlich lehrreich.
Ich erinnere mich, als ich meine Bachelorarbeit über Typinferenz schrieb, mein Pascal-zu-Pascal-Compiler war eine Erweiterung eines Parsers, den mein Supervisor programmiert hatte (in Java). Soweit ich mich erinnern kann, hatte es eine ziemlich gute Struktur, und für mich, die noch nie eine ernsthafte objektorientierte Programmierung gemacht hatte, war es eine echte Offenbarung.
Ich habe eine Menge Eclipse-Plug-in-Entwicklung gemacht und musste oft in den eigentlichen Eclipse-Quellcode debuggen. Während ich es nicht in dem Sinne "geerbt" habe, dass ich nicht weiter daran arbeite, war ich schon immer beeindruckt von dem Design und der Qualität des frühen Kerns.
Vor langer Zeit war ich für die Laufzeitbibliothek von Turbo C / C ++ verantwortlich. Tanj Bennett schrieb den ursprünglichen 80x87 Fließkomma-Emulator in 16-Bit-Assembler. Ich hatte mir Tanjs Code nicht genau angesehen, da er gut funktionierte und keine Aufmerksamkeit erforderte. Aber wir machten den Umzug zu 32-Bit und die Aufgabe fiel mir, den Emulator zu dehnen.
Wenn man sagen könnte, dass Programmierung mit der Kunst etwas zu tun hat, dann war es das.
Tanjs mathematische Kernfunktionen schafften es, ein 80-Bit-Fließkomma-Ergebnis in fünf 16-Bit-Registern zu speichern, ohne sie speichern und aus dem Speicher wiederherstellen zu müssen. X86-Assembly-Programmierer werden verstehen, was für eine Leistung das war. Register Platz war knapp und halten fünf Register als Ihre Temp, während gleichzeitig komplexe Mathematik war eine schöne Seite zu sehen.
Wenn es nur eine Frage cleverer Kodierung wäre, hätte es genügt, um es als Kunst zu qualifizieren, aber es war mehr als das. Tanj hatte sorgfältig die zugrunde liegenden mathematischen Algorithmen ausgewählt, die am besten geeignet waren, die Temperatur in Registern zu halten. Das Ergebnis war ein blitzschneller Gleitkomma-Emulator, der für viele unserer Kunden ein wichtiges Verkaufsargument war.
Als der 386 kam, hatten die meisten Leute, die sich um die Gleitkomma-Performance kümmerten, keinen Emulator, aber wir mussten Intels 386SX unterstützen, so dass der Emulator überarbeitet werden musste. Ich habe die Instruktions-Dekodierlogik und die Ausnahmebehandlung neu geschrieben, aber die mathematischen Kernfunktionen völlig unberührt gelassen.
Ich weiß, dass das viele Antworten wie
bringen wird"Ich habe nie einen guten Code gefunden, bevor ich eintrete" und Variationen.
Ich denke, das eigentliche Problem ist nicht, dass es keine guten Programmierer oder exzellente Projekte gibt, dass es ein Übermaß an gibt NIH-Syndrom und die Tatsache, dass kein Körper Code von anderen mag. Letzteres ist nur, weil Sie eine intellektuelle Anstrengung machen müssen, um es zu verstehen, eine viel größere Anstrengung, als Sie brauchen, um Ihren eigenen Code zu verstehen, so dass Sie es nicht mögen (es bringt Sie zum Nachdenken und Arbeiten).
Persönlich kann ich mich (wie alle ich denke) an einige Fälle von wirklich schlechtem Code erinnern, aber ich erinnere mich auch an einen ziemlich gut dokumentierten, eleganten Code.
Momentan hat mich das Projekt, das mich am meisten beeindruckt hat, eine sehr dynamische Dynamic Workflow Engine, nicht nur wegen der Einfachheit, sondern auch wegen der Art und Weise, wie es kodiert ist. Ich kann mich hier und da an einige clevere Ausschnitte erinnern, sowie an eine schöne Metaprogrammier-Bibliothek, die auf einer vollständigen IDL basiert, die von einigen meiner Freunde entwickelt wurde () Aspl.es )
Ich denke, Rocky Lhotka sollte den Kredit bekommen, aber ich musste kürzlich eine CSLA.NET-Anwendung {in meiner privaten Praxis} berühren und ich war sehr beeindruckt von der Ordnungsmäßigkeit des Codes. Die App hat sehr gut funktioniert, aber der Client brauchte ein paar Erweiterungen. Der ursprüngliche Autor war tragisch gestorben, und der neue Typ war nicht kultiviert. Er verstand CSLA.NETs Business-Objekt-basierten Ansatz nicht, und er wollte es noch einmal in ausgeklügelten VB.NET, ohne irgendwelche Phantasie Rahmen tun.
Also habe ich den Anruf bekommen. Ein funktionierendes Beispiel für WinForm-Bindung und CSLA.NET zu betrachten, war ziemlich lehrreich.
Symbian OS - das alte Kernstück jedenfalls, das Stück, das auf die Psion-Tage zurückgeht oder diejenigen, die diesen Geist noch heute am Leben halten.
Und direkt neben ihm sitzt der ganze neue Mist, den die niedrigsten Bieter der großen Telefonkonzerne geschaffen haben. Es war erschreckend, man konnte tatsächlich in den Knochen spüren, ob ein bisschen Code-Basis irgendwie alt oder neu war.
Ich erinnere mich, als ich meine Bachelorarbeit über Typinferenz schrieb, mein Pascal-zu-Pascal-Compiler war eine Erweiterung eines Parsers, den mein Supervisor programmiert hatte (in Java). Soweit ich mich erinnern kann, hatte es eine ziemlich gute Struktur, und für mich, die noch nie eine ernsthafte objektorientierte Programmierung gemacht hatte, war es eine echte Offenbarung.
Ich habe eine Menge Eclipse-Plug-in-Entwicklung gemacht und musste oft in den eigentlichen Eclipse-Quellcode debuggen. Während ich es nicht in dem Sinne "geerbt" habe, dass ich nicht weiter daran arbeite, war ich schon immer beeindruckt von dem Design und der Qualität des frühen Kerns.
Tags und Links legacy-code