Software de código abierto bien diseñado / de alta calidad [cerrado]

32

Estoy tomando una clase de diseño de software donde debería elegir un software de código abierto para analizar desde el punto de vista del diseño de software.

Tiene que ser un gran proyecto: no menos de 100,000 líneas de código.

Realmente me gustaría elegir un software que esté muy bien diseñado y diseñado para tener una buena idea del buen diseño del software.

Por buen diseño me refiero a cosas como clases y arquitectura significativas, buen uso de patrones (de diseño), buen uso de abstracción, buena organización de componentes, alta cohesión y bajo acoplamiento entre componentes, etc.

¿Tienes algún software para sugerirme?

Tenga en cuenta que el software solo necesita tener un buen diseño, ¡el diseño no necesita ser documentado! :)

No necesita ser una aplicación para el usuario final ... También puede ser una biblioteca, una herramienta, etc.

Andrea Zilio
fuente
3
¿Por qué preguntarnos? ¿Qué te interesa? Si sugiero un paquete de contabilidad y le resulta aburrida, no sería una buena respuesta, ¿verdad? ¿Qué tipo de paquete te interesa? Mire esos primero, luego pregúntenos sobre los paquetes específicos que miró.
S.Lott
Gracias por mencionarlo. Tengo que decir que las herramientas de desarrollo de software serían de mi interés.
Andrea Zilio
¿Alguna plataforma en particular que te gustaría usar?
3
Eche un vistazo a La arquitectura de aplicaciones de código abierto que describe una serie de aplicaciones de código abierto bien diseñadas.
Richard
Las líneas de medida del código son ambiguas. El tamaño del ejecutable y todos los archivos dlls de los que depende podrían decirle algo. Si hay una buena biblioteca, solo tiene sentido usarla. Entonces, ¿cuento las líneas de la biblioteca como parte de mi recuento total de LOC o no? Diría que muchos de los frameworks (bibliotecas, API, SDK o cualquier nombre que prefiera) tienden a ser muy buenos (se los golpea mucho desde todos los ángulos, por lo que los errores son rápidos de encontrar y deben solucionarse rápidamente). Dado que los buenos codificadores aprovecharán otras buenas bibliotecas, el LOC actial no necesita ser grande para una aplicación compleja.
Trabajo

Respuestas:

23

Por buen diseño me refiero a cosas como clases y arquitectura significativas, buen uso de patrones de diseño, buen uso de abstracción, buena organización de componentes, alta cohesión y bajo acoplamiento entre componentes.

Primero, un software, bueno o malo, no vive en la soledad: modela un escenario del mundo real que los humanos conciben como un problema y, por lo tanto, siempre se asocia estrechamente con algo llamado "dominio de aplicación". Entonces, cada vez que hable sobre software, primero conozca y estudie el dominio, ya que solo entonces puede lograr la discreción de lo bueno y lo malo.

  • git : no solo bueno, sino un diseño increíble. En esencia, no es un control de versiones, solo un sistema de archivos. Una fina capa de funcionalidad en la parte superior del núcleo lo convierte en un sistema de control de versiones. Conozca los aspectos internos de git, y su sentido del diseño de software se iluminará.

  • jQuery : no es una biblioteca muy bien documentada (internamente), pero es una fuente inspiradora que demuestra cómo el código JavaScript del lado del cliente puede hacer maravillas.

  • NodeJS : si está interesado en crear servidores, este proyecto tiene nuevas ideas y patrones que ofrecer.

  • v8 : muy buen código C ++, biblioteca fantástica para aprender / estudiar implementaciones de máquinas virtuales.

  • Proyectos NoSQL - Couch, Mongo, Redis, Cassandra - estos proyectos demuestran formas inteligentes de resolver problemas de persistencia. También abrazan la idea de la persistencia políglota.

  • Impulsar bibliotecas : buena dosis de C ++.

  • OpenStack : muy buenos proyectos sobre computación en la nube y virtualización.

  • The Apache Software Foundation : elija cualquiera de sus proyectos y estudíelo. La estructura modular de HTTPd es una gran fuente si desea ver cómo se unen los componentes. APR (tiempo de ejecución portátil apache): una lib realmente buena también.

  • mod_wsgi : uno de los mejores programas en C que he encontrado.

"buen uso de patrones de diseño" - NO es importante que el código corresponda a un patrón de diseño bien conocido - es más importante que resuelva el problema "inteligentemente" - que sea mantenible, reutilizable y legible. Si el código está repleto de una "forma" particular, solo para adherirse a un patrón de diseño, puede ser un código incorrecto.

"no menos de 100,000 líneas de código", ya que cuando el número de líneas se convirtió en una métrica de buena calidad, probar el "software bien diseñado / con arquitectura" no requiere que sea GRANDE.

Nuevamente, recuerde estudiar primero la naturaleza y los matices del dominio del problema y luego profundizar en la lectura del código.

ACTUALIZACIÓN: octubre de 2015

InfluxDB - https://influxdb.com/ Este proyecto Go está en desarrollo activo y aún no es muy complejo. Por lo tanto, puede comenzar a cavar en el código con relativa facilidad que algo como OpenStack.

codificador de árboles
fuente
13

Tirar una moneda. Todos los grandes proyectos de código abierto tienen que ser brillantes para sobrevivir. Los proyectos Apache, Linux, GNU son todos brillantes.

S.Lott
fuente
44
Todos los grandes proyectos de OSS administrados por la comunidad tienen que ser al menos decentes para sobrevivir. No diría genial. Para las cosas que se dicen principalmente, proyectos gubernamentales realizados exclusivamente por empleados, la calidad del código no siempre es lo más importante en una lista de prioridades. Pero +1 para tus ejemplos.
TZHX
8
¿Wordpress es brillante?
Dibujó el
9
  • Cromo
  • Firefox
  • apache
  • MySQL
  • PostgreSQL
  • Linux
  • ÑU
Michael JV
fuente
2
¿Estás seguro de que Firefox no está plagado de códigos estancados escritos a principios de los 90? Ese no parece ser un buen código para
estudiar
3
El código fuente de Firefox y MySQL son horribles pedazos de basura que nunca deberían usarse como ejemplos de buen diseño de software.
Jordan
7

Pitón. Específicamente, CPython, la implementación principal. Para la Versión 3.2, el intérprete ejecuta aproximadamente 50k sloc de código C, biblioteca estándar sobre 400k sloc de código Python. Dada la extremadamente alta calidad del lenguaje y su aliento a los principios de legibilidad y buen diseño, creo que todo este código sería bastante bueno.

Tom Zych
fuente
4

Vale la pena estudiar TeX junto con MetaFont: http://www.tug.org/

Su biblioteca local puede ayudarlo con versiones impresas de las fuentes.


fuente
3

Recomiendo leer el siguiente libro antes de elegir un proyecto de código abierto. Esto le dará una idea de lo que puede considerarse un código bueno / malo.

Greg Wilson
haciendo software lo que realmente funciona y por qué creemos en
la arquitectura de las aplicaciones de código abierto

Aquí también está su entrevista de intercambio de pila de Blog si está interesado en escuchar al autor antes de mirar su
http://blog.stackoverflow.com/2011/06/se-podcast-09/

En general, ¿qué se considera software de alta calidad? La pregunta en sí es muy subjetiva. Los usuarios tienen diferentes medidas de calidad. Un usuario puede considerar que el paquete de software es de alta calidad dependiendo de los méritos técnicos. Donde otros usuarios pueden medir la calidad en función de la estética de la interfaz de usuario y la experiencia general del usuario.

Desde una perspectiva comercial, generalmente miden la calidad del software dependiendo de si cumple con las expectativas del cliente o si cumple con las obligaciones contractuales de un cliente. También hay una conducta profesional, pero eso depende de qué lado de la cerca lo veas.

Desde el punto de vista de los programadores, cuán elegante es el diseño y las construcciones de la API en el momento en que se creó el software. Se puede considerar que el mismo diseño o estándar de código no es profesional cuando las actitudes y opiniones de los programadores cambian con el tiempo.

Chad
fuente
2

Sugeriré la edición IntelliJ Community Edition ya que mencionas que te gustan las herramientas de software.

http://www.jetbrains.org/

Lo que me gusta de eso:

  1. Es una herramienta que hace algo en lugar de un marco
  2. Hacen cosas realmente interesantes como el análisis de código estático y el análisis de flujo de datos que encuentro realmente agradable para ver los detalles.
  3. Lo bueno es que puede usarlo para realizar su estudio, ya que también tiene la capacidad de ejecutar todo el análisis de código.

(Es cierto que soy un fanático de JetBrains)

sylvanaar
fuente
2

He estado buscando un proyecto así, y me conformé con él CLang.

  • Es relativamente nuevo (descendiente de LLVM que tiene solo 10 años), por lo que no (o no que haya visto) código obsoleto
  • Un diseño modular (como LLVM), extremadamente bien pensado, que creo que es muy importante hoy en día.
  • Código muy limpio, bien comentado (a menudo ves citas del Estándar para explicar las cosas)
  • Un conjunto de pruebas / entorno de prueba muy bien diseñado

No hay muchos patrones de diseño allí, algunos visitantes aquí y allá, pero eso es todo. Las jerarquías de clase son simples y directas ... En realidad, creo que la meta es la simplicidad , no parece haber ninguna ingeniería excesiva.

Dicho esto, al ser crítico para el rendimiento, una serie de decisiones de diseño pueden parecer dudosas (evitar funciones virtuales para numerosos objetos, compilar sin RTTI / excepciones), por lo que no todo es aplicable al software cotidiano.

Matthieu M.
fuente
1

Blender está bien estructurado y bien diseñado.

dan_waterworth
fuente
0

Joomla, está muy bien hecho. Pero no estoy seguro si son 100,000 líneas

Imran Omar Bukhsh
fuente
55
Jajajaja realmente?
Salman von Abbas
0

Entonces, solo otra variante: ¿qué pasa con el lenguaje de programación Nemerle ?

No es tan popular (pero GitHub acaba de agregar resaltado para Nemerle) y puedes encontrar muchos puntos buenos allí.

cnd
fuente