open source - open - Bien escrito proyectos de código abierto(para el aprendizaje)?
open source projects (9)
Aprendemos programación escribiendo programas y aprendiendo de otros programas. ¿Qué repositorios / programas de código abierto sugiere para aprender / mejorar la programación?
Al citar referencias, también mencione lo que le gusta de él.
Encontrarás muchos ejemplos. Pero dijo Jim Buck, depende de tus intereses. Aprendí una cantidad métrica de "cosas" de la fuente de SharpDevelop .
Recomendaría los artículos del código fuente semanal de Scott Hanselman, él hace exactamente lo que propones, es decir, lee más código fuente para mejorar. Vale la pena leerlo.
Si alguien tiene una copia de Code Reading de Diomidis Spinellis , ¿sobre qué proyectos de código abierto escribe?
@Avinash: si desea obtener más información acerca de la programación en general, le recomendaría tanto Code Reading como Code Quality por Spinellis. Tienen ejemplos de código de varios proyectos, todos FOSS, creo, por lo que no solo se puede leer sobre ellos, sino que se debe obtener la versión discutida en el libro y la última versión para leer más código de ellos y aprender.
El kernel de Linux 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 este de 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.
Relativamente pequeño, pero con suficiente complejidad para poder aprender, mi voto va a:
Marco de registro Log4Net de Apache.
Su código fuente es muy legible y "multiplataforma" [compilable en: .NET 1.0, 1.1, 2.0, CF, MONO ...], por lo que es valioso para la lección sobre el desarrollo de C # "multiplataforma" ...
Una de las mejores piezas que he encontrado de código fuente claro y conciso es la fuente jQuery . Ya sea que te guste el Javascript o no, es un gran caso contra los defensores del "código que es la documentación" .
Hay muchos comentarios, pero no es una obra de arte ascii y puedes ver un razonamiento claro: los comentarios te hacen saber exactamente lo que se intenta lograr.
Un ejemplo ( fuente completa ):
(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 );
...
Puedo recomendar la colección de rompecabezas de Simon Tatham . 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.
El código de Disruptor es ejemplar y también se puede aprender mucho de lo que hace para lograr un rendimiento extremo en hardware moderno.
Vale la pena leer la explicación de Martin Fowler sobre su arquitectura, el documento técnico (PDF) y la presentación QCon . También los blogs de desarrolladores contienen mucha lectura, especialmente el Blog de Simpatía Mecánica, que enseña muchas cosas sobre cómo funcionan las CPU y la memoria moderna.
Depende de tus intereses, pero trabajé con la base de código de Quake III , y eso estuvo bastante bien escrito y es agradable trabajar con él. Está escrito en C.