Qual é o melhor código-fonte aberto que você já viu? [fechadas]


19

Parte do valor do Open Source é fornecer um excelente exemplo de código para as pessoas que estão começando com uma nova plataforma ou idioma.

Qual é o melhor código-fonte aberto que você encontrou e por que gosta da sua escolha? Qualquer idioma serve, mas estou particularmente interessado nos melhores exemplos de Objective-C que você pode destacar.

Obviamente, essa é uma pergunta em aberto, então deixarei a pergunta em aberto por um tempo e verei que tipos de respostas obteremos.

Obrigado!

EDIT: Para "melhor", eu estava pensando em código que segue os idiomas no idioma ou plataforma fornecida, além de incluir as partes que tornam o código "profissional" - boa documentação, uma suíte de testes etc. Código que é conciso, mas não excessivamente inteligente é preferível a códigos muito concisos ou faladores.


4
Alguma definição específica de "melhor" em mente?

Sua pergunta é um pouco ampla. Talvez você possa editá-lo para ser mais específico e definir o que "melhor" significa para você. Melhor interface do usuário, melhor aplicativo de desktop / web / telefone, melhor concordância, melhor código visualmente atraente?
Walter

+1 para uma boa pergunta. Eu sugiro que você o apague para algum idioma / tecnologia específica. Comparar C para Linux x Java para driver de banco de dados é francamente uma ideia inconsistente.
precisa saber é o seguinte

Seria muito útil para outras pessoas que leem a pergunta se você editou esse esclarecimento. :)
Michael K

Respostas:


14

Devo dizer que, tendo analisado partes do código-fonte aberto ao longo dos anos, fiquei imensamente desapontado com tudo isso.

A principal irritação para mim é que geralmente há muito poucos comentários, freqüentemente os únicos comentários são alguns avisos de direitos autorais longos e legalistas.

O kernel do linux é um exemplo em que os arquivos freqüentemente nem têm um comentário neles dizendo a que finalidade eles servem (por exemplo, o driver para XYZ pelo menos me diria que estou no lugar mais ou menos certo).

Eu vim da programação comercial e de defesa, onde os padrões de codificação exigem comentários inteligíveis e sensatos, não apenas para dizer o que uma unidade de código faz, mas através do código deve haver blocos de comentários que descrevam algoritmos, métodos, peculiaridades, hacks / coisas inteligentes , tudo para que quem vier depois possa olhar e descobrir rapidamente o que está sendo feito, em vez de percorrer meticulosamente o código real.

Talvez a moral seja: diga-me o que você está fazendo, não me faça descobrir.

Não encontrei nenhum código-fonte aberto que faça isso bem. No que diz respeito ao código aberto como um meio de aprender boas práticas de codificação, meu conselho é: Não.


Concordo que os projetos de código aberto geralmente são mal comentados e mal documentados. Mas eles são todos voluntários. É difícil motivar os voluntários a fazer coisas desagradáveis, geralmente sem a recompensa que procuram (status, social, realizar grandes coisas ou fazer o que amam).

@ pierre303 - Criei e mantenho o NoRMproject.org. Uma das principais coisas que faço é escrever comentários quando escrevo o código, e isso ajuda. Eu acho que os colaboradores trabalharão nas partes que os líderes enfatizam. No caso do NoRM, eram testes, comentários e código de idiomas (para c #). Acho que temos uma base de código bastante profissional e sustentável por causa disso.
Andrew Theken

Concordo que os comentários devem ser escritos à medida que o código está sendo escrito. (Eu também faço isso em toda a minha próprio código, principalmente porque eu sou egoísta e isso me ajuda a escrever uma narrativa antes do bloco de código -. Esclarece em minha própria mente o que eu preciso fazer antes de realmente fazê-lo)
rapid_now

Lembra-me dessa citação engraçada em que me deparei: "Se eu tivesse dificuldade em escrevê-la, eles deveriam ter dificuldade em lê-la".
Denis de Bernardy

+1, @quickly_now - você acha que o código deve ser bem planejado, testado e agora bem comentado! Em que tipo de planeta louco você vive?


5

Donald Knuth escreveu dois programas para ajudá-lo a digitar melhor suas fórmulas matemáticas em seus livros do que sua editora.

Esses dois programas (em sua versão final) foram escritos usando a programação alfabetizada, que permitiu criar uma versão impressa e tipográfica do código-fonte e foram publicados como livros. Estes são simplesmente os melhores programas documentados que eu já li!

  • "Computadores e tipografia, volume B: TeX: o programa"
  • "Computadores e tipografia, volume D: Metafont: The Program"

Eles não estão disponíveis para leitura on-line, mas a Amazon também permite que você "examine o interior" do livro Metafont em http://www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/

Aviso: são coisas pesadas, e é por isso que cada livro tem 600 páginas.


1
Nota: é a versão tipográfica que não está disponível online. A fonte está totalmente disponível e pode - com um pequeno esforço - ser usada para gerar a versão impressa.

4

O livro Beautiful Code tenta responder a essa pergunta com vários exemplos do que os contribuidores acham que são exemplos de código bonito de projetos de código aberto.
texto alternativo


4
Vale a pena conferir o livro?
Oliver Weiler

Este não é o código-fonte aberto do "mundo real" em nenhum sentido. Esta resposta está enganando! : P
Noldorin

1
Eu sou o dono, não fiquei impressionado. A maioria dos capítulos é entediante, mas há alguns destaques - o mapa / redução é explicado se bem me lembro.
Martin Wickman

4

CodeIgniter

Alguns dos códigos-fonte mais limpos e documentados que eu já vi em um projeto de sistema operacional.


1
php e mais limpo?
Kugel

1
@ Kugel: Sim para ambos.
Josh K

Basta dar uma olhada na fonte do CodeIgniter e, de fato, parece muito bem estruturado e limpo. Eu acho tão bonito que você pode entrar em php. :) E eu sempre gostei de humor no código fonte: "// Nenhum banco de dados especificado ainda? Derrube-os sem sentido ... if (! Isset ($ params ['dbdriver'])) ..."
Bjarke Freund-Hansen

2
Eu tive uma olhada no código fonte e devo admitir que foi bem documentado e fácil de seguir, e eu tinha não esperam de um sistema operacional PHP.
OnesimusUnbound

2
Outra excelente estrutura do sistema operacional PHP é o fuelphp ( fuelphp.com ), que também é documentado, organizado de forma limpa e usa convenções de nomenclatura que não fazem você arrancar os cabelos. Isso prova que não é culpa do PHP o código do espaguete, geralmente são as pessoas que escrevem o código.
Michael JV

3

Eu já vi dois projetos muito bem estruturados:

  1. Django
  2. Projeto cromo

Especialmente, o segundo é muito interessante com base em algumas coisas:

  • Como ele usa processos para muitas coisas (guias, plug-ins) e como ele se encaixa
  • multiplataforma com GUI nativa para cada Windows, Mac, Linux
  • integração de kit da web

Também ouvi dizer que o Postgre está escrito de maneira limpa (em oposição ao MySql), mas eu mesmo não o li.


1
+1 para o código PostgreSQL. É extremamente limpo e legível.
Denis de Bernardy

2

Alguns dizem que o código C para o Linux Kernel é bastante bom.

(Não que eu entenda a coisa! É possivelmente o melhor projeto C de código aberto escrito por aí.)


1
Para código otimizado, é ótimo. Por legibilidade não tão boa, na minha experiência. Claro, eu não escrita qualquer, apenas lê-lo ...
Michael K

1
Sim, verdade. Infelizmente, a pergunta realmente não definiu "melhor", então estou adotando minha própria definição. :)
Noldorin

2

Eu achei o código fonte LLVM muito legível. Tenho certeza de que é o C ++ mais limpo que eu já vi. Se você não está familiarizado com isso, é basicamente um kit de ferramentas de construção do compilador.

  • Possui um amplo conjunto de testes. Bem, na verdade, ele tem pelo menos dois: um conjunto para testar recursos e outro para testar o desempenho (do próprio LLVM, bem como dos programas compilados que ele gera).
  • O código está bem comentado.
  • Código altamente repetitivo (como a instrução correspondente nos vários back-end) é gerado automaticamente a partir de uma descrição DSL de nível superior (chamada TableGen).
    • Isso também permite que vários trechos de código separados sejam gerados a partir da mesma descrição. Por exemplo, a especificação de back-end é usada como parte de um back-end do compilador, mas também para montadores e desmontadores.
  • Tem uma documentação muito boa.

É um projeto bastante grande, portanto, não espere entender rapidamente exatamente como tudo funciona. Mas deve ser bem fácil obter uma visão geral de alto nível.


1

Não é um projeto enorme, mas o SubSonic ORM foi extremamente fácil para eu hackear. Foi o primeiro projeto de código aberto real que eu consegui modificar exatamente como eu precisava. A maioria dos outros acabei olhando a fonte e batendo a cabeça na parede. Eu tinha parcialmente suporte ao PostgreSQL (baseando-o no provedor do SQL Server) dentro de algumas horas. É o projeto mais bem organizado que eu já vi ... embora isso não signifique que eu olhei para muitos projetos de código aberto.


0

Primeiro, um exemplo simples: o código para o sistema de manipulação de eventos zope.event. Eu tinha usado outros sistemas de eventos, que enviavam eventos para diferentes ouvintes de eventos. Quando vi o código do zope.event, estava na hora do facepalm, quando percebi como algumas coisas poderiam ser simples.

Está escrito em Python, e aqui está o código completo:

subscribers = []

def notify(event):
    """ Notify all subscribers of ``event``.
    """
    for subscriber in subscribers:
        subscriber(event)

Para adicionar um assinante, faça o seguinte:

from zope.event import subscribers
subscribers.add(MySubscriber())

O melhor exemplo de KISS que eu já vi.

Em seguida, um exemplo mais complexo: a base de código marciana é muito agradável e fácil de ler, embora esteja usando alguns hacks inteligentes do Python. O mesmo vale para a maioria dos códigos do Grok, que são criados usando o Marciano.


3
Eu não entendo o que é ótimo com esse código. Não conheço python, mas só posso ver um uso simples do padrão de observador aqui, e nada mais.
Barjak

Você o comparou com outros sistemas de eventos? Para simplificar, considere outro exemplo de Python: pypi.python.org/pypi/pyjon.events/1.1.1
Lennart Regebro

1
Linda - na verdade, escrevi algo muito semelhante em javascript. Eu acho que sou inteligente? ;)
Michael K

Só porque existem sistemas de eventos muito piores, não significa que esse seja um ótimo código. Eu vi exatamente esse código em toneladas de idiomas. E, mais importante, vi implementações seguras do tipo.
back2dos

@ back2dos: Esse é o tipo seguro.
Lennart Regebro

0

Considere ler este livro A arquitetura de aplicativos de código aberto . Deverá fornecer uma crítica de por que e como as decisões de design foram tomadas nos projetos discutidos no livro.

Em vez de procurar o melhor, que pode iludi-lo por muito tempo, tente apreciar o design de alguns projetos, talvez além do escopo do livro. Isso pode ajudá-lo a desenvolver o sucesso desses projetos em vez de repetir seus erros (ou, como é chamado popularmente, reinventar a roda).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.