Estou participando de uma aula de design de software na qual devo escolher um software de código aberto para analisar do ponto de vista de design de software.
Tem que ser um grande projeto: não menos que 100.000 linhas de código.
Eu realmente gostaria de escolher um software muito bem projetado e arquitetado para ter boas idéias sobre o bom design de software.
Por bom design, quero dizer coisas como classes e arquitetura significativas, bom uso de padrões (de design), bom uso de abstração, boa organização de componentes, alta coesão e baixo acoplamento entre componentes, etc.
Você tem algum software para me sugerir?
Observe que o software só precisa ter um bom design, o design não precisa ser documentado! :)
Não precisa ser um aplicativo para o usuário final ... Também pode ser uma biblioteca, uma ferramenta, etc ...
fonte
Respostas:
Primeiro, um software, bom ou ruim, não vive na solidão - ele modela um cenário do mundo real que os humanos concebem como um problema e, portanto, está sempre associado intimamente a algo chamado "domínio de aplicativo". Portanto, sempre que você falar sobre software, primeiro conheça e estude o domínio - pois somente então você poderá atingir o discernimento de bom e ruim.
git - não apenas bom, mas um design incrível. Não é um controle de versão em sua essência, apenas um sistema de arquivos. Uma fina camada de funcionalidade no topo do núcleo faz dele um sistema de controle de versão. Conheça os aspectos internos do git, e seu senso de design de software será esclarecido.
jQuery - não uma biblioteca documentada muito bem (internamente), mas uma fonte inspiradora que demonstra como o código JavaScript do lado do cliente pode fazer maravilhas.
NodeJS - se você gosta de criar servidores, este projeto tem idéias e padrões novos e refrescantes para oferecer.
v8 - código C ++ muito bom, biblioteca fantástica para aprender / estudar implementações de máquinas virtuais.
Projetos NoSQL - Couch, Mongo, Redis, Cassandra - esses projetos demonstram maneiras inteligentes de resolver problemas de persistência. Eles também abraçam a idéia de persistência poliglota.
Impulsionar bibliotecas - boa dose de C ++.
Pilha aberta - projetos muito bons em computação em nuvem e virtualização.
Fundação Apache Software - Escolha um de seus projetos e estude-o. A estrutura modular do HTTPd é uma excelente fonte, se você quiser ver como os componentes se reúnem. APR (apache portable runtime) - uma lib realmente boa também.
mod_wsgi - um dos melhores programas em C que eu já encontrei.
"bom uso de padrões de design" - NÃO é importante que o código corresponda a um padrão de design conhecido - é mais importante que ele resolva o problema "de maneira inteligente" - que seja sustentável, reutilizável e legível. Se o código estiver repleto de uma "forma" específica - apenas para aderir a um padrão de design - pode ser um código incorreto.
"não menos que 100.000 linhas de código" - desde quando o número de linhas se tornou uma métrica de boa qualidade - obter uma amostra de "software bem projetado / arquitetado" não exige que seja GRANDE.
Novamente, lembre-se de estudar a natureza e as nuances do domínio do problema primeiro e depois mergulhe na leitura do código.
ATUALIZAÇÃO: Oct. 2015
InfluxDB - https://influxdb.com/ Este projeto Go está em desenvolvimento ativo e ainda NÃO é muito complexo. Assim, você pode começar a digitar códigos com relativa facilidade do que algo como o OpenStack.
fonte
Atirar uma moeda. Todos os grandes projetos de código aberto precisam ser brilhantes para sobreviver. Os projetos Apache, Linux e GNU são todos brilhantes.
fonte
fonte
Python. Especificamente, CPython, a principal implementação. Para a versão 3.2, o intérprete executa cerca de 50k sloc de código C, biblioteca padrão mais de 400k sloc de código Python. Dada a qualidade extremamente alta da linguagem e seu incentivo aos princípios de legibilidade e bom design, eu pensaria que todo esse código seria muito bom.
fonte
O TeX e o MetaFont realmente valem um estudo: http://www.tug.org/
Sua biblioteca local pode ajudá-lo com versões impressas das fontes.
fonte
Eu recomendaria ler o livro a seguir antes de escolher um projeto de código aberto. Isso fornecerá informações sobre o que pode ser considerado código bom / ruim.
Greg Wilson
Tornando o software o que realmente funciona e por que acreditamos na
arquitetura de aplicativos de código aberto
Aqui também está a entrevista de troca de pilhas do seu blog, se você estiver interessado em ouvir o autor antes de consultar o
http://blog.stackoverflow.com/2011/06/se-podcast-09/
No geral, o que é considerado software de alta qualidade? A questão em si é muito subjetiva. Os usuários têm diferentes medidas de qualidade. Um usuário pode considerar que o pacote de software é de alta qualidade, dependendo dos méritos técnicos. Onde outros usuários podem avaliar a qualidade com base na estética da interface do usuário e na experiência geral do usuário.
Da perspectiva dos negócios, eles geralmente medem a qualidade do software, dependendo se ele atende às expectativas do cliente ou se está cumprindo as obrigações contratuais de um cliente. Também há conduta profissional, mas isso depende de qual lado da cerca você a vê.
Do ponto de vista dos programadores, quão elegante é o design e as construções da API no momento em que o software foi criado. O mesmo padrão de design ou código pode ser considerado não profissional quando as atitudes e visões dos programadores mudam com o tempo.
fonte
Vou sugerir a IntelliJ Community Edition desde que você mencione que gosta de ferramentas de software.
http://www.jetbrains.org/
O que eu gosto sobre isso:
(é certo que eu sou um fã do JetBrains)
fonte
Eu mesmo tenho procurado por esse projeto e resolvi
CLang
.Não há muitos padrões de design por lá, alguns visitantes aqui e ali, mas é isso. As hierarquias de classe são simples e diretas ... Na verdade, acho que a simplicidade é o objetivo, não parece haver excesso de engenharia.
Dito isso, sendo crítico no desempenho, várias decisões de design podem parecer duvidosas (evitando funções virtuais para vários objetos, compilando sem RTTI / exceções); portanto, nem tudo é aplicável ao software cotidiano.
fonte
O Blender é bem estruturado e bem projetado.
fonte
Joomla, é muito bem feito. Mas não tenho certeza se suas 100.000 linhas
fonte
Então, apenas mais uma variante - e a linguagem de programação Nemerle ?
Não é tão popular (mas o GitHub acabou de destacar o Nemerle) e você pode encontrar muitos bons pontos por lá.
fonte