51 votes

Des projets open source bien écrits (pour l'apprentissage) ?

Nous apprenons la programmation en écrivant des programmes et en apprenant d'autres programmes. Quels dépôts de code source ouvert/programmes suggérez-vous pour apprendre/améliorer la programmation ?

Lorsque vous citez une référence, veuillez également mentionner ce qui vous a plu.

20voto

Daniel Pollard Points 1084

Je recommande le livre de Scott Hanselman articles hebdomadaires sur le code source il fait exactement ce que vous proposez, c'est-à-dire lire plus de code source pour s'améliorer. Cela vaut la peine de le lire.

14voto

Jonas Kölker Points 4520

Je peux recommander La collection de puzzles de Simon Tatham . Il s'agit d'une série de jeux de réflexion (minesweeper, sudoku, quinze) disponibles pour Windows, OS X et Linux (et sous forme d'applets java). L'architecture est assez simple : il y a une interface frontale avec trois implémentations (une par plateforme), une interface back-end avec une implémentation par jeu (j'ai donné trois exemples) et une interface intermédiaire qui les fait communiquer entre elles, fait de la sérialisation et d'autres choses intéressantes.

En gros, c'est une bonne POO. Il est écrit en C. Il est facile d'y contribuer (j'ai implémenté les jeux Filling et Range) car il est bien documenté et facile à lire.

10voto

Esko Luontola Points 53877

Disrupteur Le code de l'entreprise est exemplaire et beaucoup de choses peuvent être apprises de ce qu'elle fait pour obtenir des performances extrêmes sur du matériel moderne.

A lire absolument L'explication de Martin Fowler de son architecture, le document technique (PDF) et la présentation du QCon . Les blogs des développeurs sont également très intéressants à lire, notamment le Blog sur la sympathie mécanique qui enseigne de nombreuses choses sur le fonctionnement des processeurs modernes et de la mémoire.

6voto

Jim Buck Points 10839

Cela dépend de vos centres d'intérêt, mais j'avais travaillé avec la Base de code de Quake III et qui était assez bien écrit et agréable à utiliser. Il est écrit en C.

5voto

Chris S Points 32376

L'un des meilleurs exemples de code source clair et concis que j'ai trouvés est le fichier jQuery source. Que vous aimiez Javascript ou non, il constitue un excellent argumentaire contre les partisans de "le code étant la documentation" .

Il y a beaucoup de commentaires, mais ce n'est pas de l'art ascii et vous pouvez voir un raisonnement clair - les commentaires vous permettent de savoir exactement ce que l'on essaie d'obtenir.

Un exemple ( source complète ) :

(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 votes

La plupart des commentaires auraient pu être évités. "Le fait que le code soit la documentation ne signifie pas que le code soit truffé de commentaires, vraiment. Martin fowler m'a éclairé quand j'ai lu que les commentaires sont des odeurs de code.

2 votes

J'aime la plupart de ces commentaires. Ils s'inscrivent dans ma politique qui consiste à commenter non pas pour dire QUOI je fais, mais POURQUOI.

1 votes

@sebstian exactement, sans les commentaires vous n'auriez aucune idée du pourquoi. window = this est utilisé. @ragu.pattabi faites-vous référence à ceci : martinfowler.com/bliki/CodeAsDocumentation.html ? Il ne mentionne rien à propos des commentaires, juste que le code clair est auto-documenté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X