2008-08-26 17 views

Respuesta

6

Depende de sus intereses, pero he trabajado con el Quake III codebase, y eso fue bastante bien escrito y agradable de trabajar. Está escrito en C.

17

Recomendaría weekly source code articles de Scott Hanselman, él hace exactamente lo que propones, es decir, lee más código fuente para mejorar. Vale la pena leerlo.

3

Encontrarás muchos ejemplos. Pero dijo Jim Buck, depende de tus intereses. Aprendí una cantidad métrica de "cosas" de la fuente SharpDevelop.

2

Si alguien tiene una copia de Code Reading by Diomidis Spinellis, ¿qué proyectos de código abierto escribe sobre ellos?


@Avinash: Si desea obtener más información sobre la programación en general, recomendaría tanto lectura de códigos y Calidad Código de Spinellis. Tienen ejemplos de código de varios proyectos, todos FOSS, creo, por lo que no solo se puede leer sobre ellos, sino obtener la versión discutida en el libro y la última versión para leer más código de ellos y aprender.


5

El Linux kernel es una muy buena forma de aprender.

Sé que puede ser difícil sumergirse debido a la estructura multi-arquitectónica y la gran cantidad de código, pero hay algunos artículos muy buenos para entrar lentamente, como this one from Tim Jones.

Aprendí mucho mirando un tema específico, como la implementación del controlador FAT y la abstracción de los sistemas de archivos.

12

Puedo recomendar Simon Tatham's puzzle collection. Se trata de una serie de juegos de acertijos (buscaminas, sudoku, quince) disponibles para Windows, OS X y Linux (y como applets de Java). La arquitectura es bastante simple: hay una interfaz de front-end con tres implementaciones (una por plataforma), una interfaz de back-end con una implementación por juego (he dado tres ejemplos) y un medio que los hace hablar, hacer serialización y otras cosas ordenadas.

Básicamente, es un buen OOP. Escrito en C. Es fácil contribuir (implementé los juegos de Llenado y Rango) ya que está bien documentado y es fácil de leer.

3

relativamente pequeño, pero con la suficiente complejidad para ser capaces de aprender de, mi voto va a:

marco Log4Net registro de Apache.

Su código fuente es muy legible, y "multiplataforma" [compilable en: .NET 1.0, 1.1, 2.0, CF, MONO ...], por lo tanto es valioso para la lección de desarrollo de C# "multiplataforma" ...

5

Una de las mejores piezas que he encontrado de código fuente claro y conciso es la fuente jQuery. Si le gusta Javascript o no, es un gran caso contra los defensores de "el código es la documentación".

Hay muchos comentarios pero no es una obra de arte ascii y puede ver un razonamiento claro: los comentarios le hacen saber exactamente lo que se intenta lograr.

Un ejemplo (full source):

(function(){ 

var 
    // Will speed up references to window, and allows munging its name. 
    window = this, 
    // Will speed up references to undefined, and allows munging its name. 
    undefined, 
    // Map over jQuery in case of overwrite 
    _jQuery = window.jQuery, 
    // Map over the $ in case of overwrite 
    _$ = window.$, 

    jQuery = window.jQuery = window.$ = function(selector, context) { 
     // The jQuery object is actually just the init constructor 'enhanced' 
     return new jQuery.fn.init(selector, context); 
    }, 

    // A simple way to check for HTML strings or ID strings 
    // (both of which we optimize for) 
    quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, 
    // Is it a simple selector 
    isSimple = /^.[^:#\[\.,]*$/; 

jQuery.fn = jQuery.prototype = { 
    init: function(selector, context) { 
     // Make sure that a selection was provided 
     selector = selector || document; 

     // Handle $(DOMElement) 
     if (selector.nodeType) { 
      this[0] = selector; 
      this.length = 1; 
      this.context = selector; 
      return this; 
     } 
     // Handle HTML strings 
     if (typeof selector === "string") { 
      // Are we dealing with HTML string or an ID? 
      var match = quickExpr.exec(selector); 

      // Verify a match, and that no context was specified for #id 
      if (match && (match[1] || !context)) { 

       // HANDLE: $(html) -> $(array) 
       if (match[1]) 
        selector = jQuery.clean([ match[1] ], context); 

       // HANDLE: $("#id") 
       else { 
        var elem = document.getElementById(match[3]); 

        // Handle the case where IE and Opera return items 
        // by name instead of ID 
        if (elem && elem.id != match[3]) 
         return jQuery().find(selector); 

... 
+1

La mayoría de los comentarios podrían haberse evitado. "el código es la documentación" no se trata de ensuciar el código con comentarios, realmente. Martin Fowler me iluminó cuando leí que los comentarios son olores de códigos. – rpattabi

+2

Me gustan la mayoría de esos comentarios. Mantienen mi política de comentar no decir QUÉ estoy haciendo sino POR QUÉ. –

+1

@sebstian exactamente, sin los comentarios no tendrías idea de por qué 'window = this' se está utilizando. @ ragu.pattabi ¿te refieres a esto: http://martinfowler.com/bliki/CodeAsDocumentation.html? Él no menciona nada sobre los comentarios, solo que el código claro es auto-documentado. –

Cuestiones relacionadas