2009-01-26 10 views
8

He escuchado muchas quejas a lo largo de los años sobre proyectos heredados con los que los desarrolladores de los Estados Unidos tenemos que trabajar. El sitio WTF tiene toneladas de ejemplos de código que me hacen murmurar entre dientes "WTF?"¿Qué código hereditario te ha impresionado o inspirado?

Pero a alguno de ustedes se le presentó un código que lo hizo ir, "¡Mierda, esto estaba bien pensado!" o "¡Guau, nunca pensé en eso!"

¿Qué código hereditario has tenido que trabajar que te hizo sonreír y por qué?

+1

@Malfist: Haznos un favor a todos y deja de editar las etiquetas. – GEOCHET

+1

@Malfist, maldito fuera. – mmcdole

+0

Y pensé que la solicitud para poder rechazar a un usuario era estúpida. Ahora tengo el pie en la boca ... – GEOCHET

Respuesta

8

Hace mucho tiempo, fui responsable de la biblioteca Turbo C/C++ en tiempo de ejecución. Tanj Bennett escribió el emulador de punto flotante original de 80x87 en un ensamblador de 16 bits. No había mirado detenidamente el código de Tanj ya que funcionaba bien y no requería atención. Pero estábamos haciendo el movimiento a 32 bits y me tocó la tarea de estirar el emulador.

Si alguna vez se puede decir que la programación tiene algo en común con el arte, esto fue todo.

Las funciones matemáticas básicas de Tanj lograron mantener un resultado temporal de coma flotante de 80 bits en cinco registros de 16 bits sin tener que guardarlos y restaurarlos desde la memoria. Los programadores ensambladores de X86 entenderán qué logro fue este. El espacio de registro era escaso y mantener cinco registros como temperatura mientras simultáneamente hacía matemáticas complejas era un sitio hermoso para la vista.

Si solo fuera una cuestión de codificación inteligente que habría sido suficiente para calificarlo como arte, pero era más que eso. Tanj había elegido cuidadosamente los algoritmos matemáticos subyacentes que serían más adecuados para mantener la temperatura en los registros. El resultado fue un emulador de punto flotante ultrarrápido que fue un importante punto de venta para muchos de nuestros clientes.

Cuando llegó el 386, la mayoría de las personas que se preocupaban por el rendimiento en punto flotante no usaban un emulador, pero teníamos que admitir el 386SX de Intel, por lo que el emulador necesitaba una revisión. Reescribí la lógica de decodificación de instrucciones y el manejo de excepciones, pero dejé las funciones básicas de matemáticas completamente intactas.

0

Creo que Rocky Lhotka debería obtener el crédito, pero tuve que tocar una aplicación CSLA.NET recientemente {en mi práctica privada en el lado} y quedé muy impresionado con el orden del código. La aplicación funcionó muy bien, pero el cliente necesitaba algunas extensiones. El autor original había muerto trágicamente, y el nuevo tipo era poco sofisticado. Él no entendía el enfoque basado en objetos de negocios de CSLA.NET, y quería hacerlo todo de nuevo en VB.NET, sin ningún marco elegante.

Así que recibí la llamada. Observar un ejemplo de trabajo de enlace WinForm y CSLA.NET fue bastante instructivo sobre muchas cosas.

1

Me encontré con algún código VB6 de otro programador de mi compañía que manejó las condiciones de error muy bien (ya sea que se tratara directamente con ellos o los registrara).

Junto con un código bastante complejo que fue bien comentado.

+0

Siempre me entusiasma cada vez que me encuentro con un código de manejo de errores que realmente * maneja el error *, en lugar de simplemente iniciar sesión y volver a lanzarlos. – MusiGenesis

1

Sé que esto traerá una gran cantidad de respuestas como,

"nunca he encontrado un buen código antes de que me paso en" y variaciones.

Creo que el problema real no es que no haya buenos codificadores o proyectos excelentes por ahí, es que hay un exceso del síndrome NIH y el hecho de que a nadie le gusta el código de los demás. Lo último es solo porque tienes que esforzarte intelectualmente para comprenderlo, un esfuerzo mucho mayor de lo que necesitas para comprender tu propio código, para que no te guste (te hace pensar y trabajar después de todo).

Personalmente puedo recordar (como todos supongo) algunos casos de código realmente malo, pero también recuerdo un código bastante bien documentado y elegante.

Actualmente, el proyecto que más me impresionó fue un motor de flujo de trabajo dinámico muy potente, no solo por la simplicidad sino también por la forma en que está codificada. Puedo recordar algunos fragmentos muy inteligentes aquí y allá, así como una hermosa biblioteca de metaprogramación basada en un IDL completo desarrollado por algunos amigos míos (Aspl.es)

0

Symbian OS: el viejo núcleo de todos modos, el bit que data de los días de Psion o aquellos que aún hoy mantienen vivo ese espíritu.

Y sentarse junto a él y todo es la nueva basura creada por los mejores postores contratados por las grandes corporaciones de telefonía. Fue sorprendente, realmente podía sentir en sus huesos si un poco de código base era viejo o nuevo de alguna manera.

3

El código que más me impresiona y que trato de emular es un código que parece demasiado simple y fácil de entender.

Es muy difícil escribir ese tipo de código. :-)

0

Recuerdo cuando escribí mi tesis de licenciatura en inferencia de tipos, mi 'compilador' Pascal-to-Pascal era una extensión de un analizador programado por mi supervisor (en Java). Por lo que puedo recordar, tenía una estructura bastante buena, y para mí, que nunca había hecho ninguna programación seria orientada a objetos, fue toda una revelación.

2

Tengo una historia divertida que contar aquí.

Estaba trabajando en esta aplicación de Java, llena de getters & setters que no hacían más que obtener o configurar interfaces e incluso todo lo que alguna vez se haya inventado para hacer que el código sea ilegible. Un día tropecé con un código que parecía muy bien diseñado: era básicamente una implementación de algoritmo que se veía muy elegante = pocas líneas de código legible, aunque respetaba todas las reglas posibles que el proyecto tenía que cumplir (se hacía checkstyled automáticamente) .

No pude averiguar quién en el equipo podría haber escrito dicho código. Me moría por hablar con él y compartir pensamientos. Afortunadamente, habíamos cambiado a la subversión (de cvs) unos meses antes y rápidamente me encontré con 'svn culpa'. Lloré por todo el lugar, viendo mi nombre al lado de la implementación.

Había escuchado historias sobre personas que no recordaban el código que escribieron hace 6 meses, código que es una pesadilla para mantener. No podía creer que algo así pudiera pasar: ¿cómo puedes olvidar el código que escribiste? Bueno, ahora estoy convencido de que puede suceder. Afortunadamente, el código fue correcto y fácil de extender, así que solo he experimentado la mitad de la historia.

+0

Heh. Estuve tentado de contar una historia como esa, también, pero ahora no es necesario. –

+0

Pensé que una madre siempre conoce a sus polluelos? Siempre reconozco mi propio código, ya que soy el único programador de mi empresa que puede deletrear. – MusiGenesis

3

En mi primer trabajo, me sorprendió descubrir una clase "ID segura" en la base de código (C++), que envolvía ID numéricos en una clase con una clase de etiqueta vacía, que garantizaba que el compilador se quejaba usted intentó, por ejemplo, comparar o asignar un UserId en un OrderId.

No solo me aseguré de tener una clase Id equivalente en todas las bases de códigos posteriores que estaría usando, sino que realmente me abrió los ojos sobre lo que el compilador podría hacer para garantizar la corrección y ayudar a escribir código más sólido.

1

Heredé un gran grupo de código que estaba TAN bien escrito Realmente gasté los $ 40 en línea para encontrar al tipo, fui a su casa y le di las gracias.

+0

¿Qué estaba bien escrito al respecto? – rball

0

He estado haciendo un montón de desarrollo de plug-ins de Eclipse y con frecuencia tuve que depurar en el código fuente de Eclipse real. Si bien no lo he "heredado" en el sentido de que no continúo trabajando en él, siempre me ha impresionado el diseño y la calidad del núcleo inicial.

Cuestiones relacionadas