Welcher vererbte Code hat dich beeindruckt oder inspiriert?

8

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?

    
rball 26.01.2009, 22:20
quelle

11 Antworten

8

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.

    
David Stafford 26.01.2009, 22:45
quelle
3

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.

    
small_duck 26.01.2009 23:24
quelle
3

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. : -)

    
Ron Savage 26.01.2009 22:51
quelle
2

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.

    
user51568 26.01.2009 23:23
quelle
1
___ answer481711 ___

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. : -)

    
___ qstnhdr ___ Welcher vererbte Code hat dich beeindruckt oder inspiriert? ___ answer481811 ___

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.

    
___ answer481807 ___

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.

    
___ qstntxt ___

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?

    
___ Antwort481667 ___

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.

    
___ answer481668 ___

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 )

    
___ answer481670 ___

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.

    
___ answer481821 ___

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.

    
___ answer481657 ___

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.

    
___ tag123legacycode ___ Ursprünglich veralteter Code bedeutete Code, der von Autoren oder von einer früheren Programm- / Systemversion "geerbt" wurde. Seit Michael Feathers sein Buch "Working Effectively with Legacy Code" veröffentlicht hat, ist eine neue Definition entstanden, wo Code ohne Tests Legacy-Code ist. ___ answer481762 ___

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.

    
___ answer481825 ___

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.

    
___ answer481700 ___

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.

    
___
Josh Weatherly 26.01.2009 22:36
quelle
1

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 )

    
Jorge Córdoba 26.01.2009 22:37
quelle
1

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.

    
UnkwnTech 26.01.2009 23:29
quelle
0

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.

    
David Leon 26.01.2009 22:31
quelle
0

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.

    
Will 26.01.2009 22:37
quelle
0

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.

    
panschk 26.01.2009 23:06
quelle
0

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.

    
Uri 26.01.2009 23:32
quelle

Tags und Links