tag body attribute code-complexity

code-complexity - body - title html css



¿Cuál es el programa más duro que has escrito? (20)

Solo por curiosidad, me pregunto qué han hecho todos los programadores o novatos experimentados (como yo). Entonces, ¿cuál es el programa más complicado que has escrito?


¡Cualquier cosa relacionada con el cifrado y la seguridad es siempre un 1000% más difícil de lo que parece!


2 cosas:

1) Un compilador. El nombre del idioma era "3 bolas" (homenaje a un amigo que le operaron las bolas)

2) Un programa de ensamblaje de Windows sin una sola macro, todo se colocó en la pila y la dirección fue relativa. Funciona en todas las ventanas (sin dirección codificada). Básicamente es una ventana simple con algunos botones y etiquetas. Pero lo bueno es que, del objeto y los archivos ejecutables, extraje los códigos de operación y generé un código de shell a partir de ellos. ¡Así que podría explotar cualquier búfer en un programa y literalmente crear mi propia aplicación por encima de la que se ejecuta! Es agradable mostrar una pantalla en una computadora remota, y la computadora remota ejecutará un programa que no existe en su computadora, literalmente envió el programa para que se ejecute a la computadora remota.

Por supuesto, esto es demasiado dolor de cabeza para nada ... ¡pero vale la pena todos los bytes que escribí!


Actualmente estoy escribiendo una aplicación para iPhone. Es definitivamente el programa más difícil que he escrito. No porque el lenguaje sea difícil, el código sea difícil o por cualquier otra razón, sino porque todo en el dispositivo tiene que ser tan fluido.

Todo tiene que verse y sentirse natural. Como soy un programador real (con nula comprensión de la fluidez, la suavidad o el diseño ... así parece), esto me lo pone realmente difícil. El programa funciona con código, pero con la interfaz de usuario me cuesta mucho más hacer las cosas.

También los hilos chupan ;-)


Automatización con COM, con ejecución a través de la Grid.


Comencé a escribir una biblioteca de gráficos vectoriales en 1998 que hizo un uso extensivo de la subdivisión jerárquica para proporcionar muchas operaciones en O (log n) y tesselaciones anisotrópicas memorizadas en las listas de visualización de OpenGL para mantener altas tasas de cuadros en escenas dinámicas. En particular, podría acercarse a gráficos vectoriales complicados de manera fluida porque los descompuso en árboles y los eliminó de manera eficiente. Durante muchos años, fue, con mucho, el procesador de gráficos vectoriales a nivel de consumidor más rápido del mundo.

La versión original era 200kLOC de C ++ pero los problemas teóricos que formaron la base de su diseño me llevaron 2 años para resolverlos.


El que no quería, o divertirme, escribiendo.


Estoy trabajando en el Otro Framework PHP, que ha sido un viaje divertido hasta ahora.


He escrito varias piezas de código que modelan en múltiples dimensiones espaciales (desde 3 hasta aproximadamente 7 dimensiones). Los problemas se vuelven más difíciles cuando se trabaja en algo que realmente no se puede trazar o visualizar.

Pero realmente, como uno que ha pasado la mayor parte de mi tiempo construyendo kits de herramientas para que otros los utilicen en su trabajo, diría que los programas más complejos que he hecho fueron en realidad cajas de herramientas, conjuntos de herramientas hechas para trabajar entre sí en una de forma coherente. Debido a que todos están hechos para trabajar juntos, puede argumentar que varias docenas de utilidades funcionan como una sola herramienta. (Por supuesto, cualquier código modular es similar a este respecto). Aquí también, lo que proporcioné fueron generalmente herramientas de modelado, hechas para resolver problemas de administración de color.


La aplicación que creé en 2005/6 permite a las personas crear visualizaciones de sus casas / autos, etc. pintadas en diferentes colores. Eso sí se puede hacer en Photoshop, pero había mucho, mucho más.


Me hicieron esta pregunta en una entrevista hace un par de semanas (todavía no he oído si obtuve el trabajo).

Para mí fueron varias tareas en mi primera clase de programación después de las clases básicas de introducción. Fue la primera vez que ofrecí un curso de Diseño Web en mi universidad. Como era nuevo, varias personas de la tercera edad que se graduaban se inscribieron y comprendían aproximadamente la mitad de la clase. El instructor estaba acostumbrado a dar clases de nivel superior, y ya conocía a muchos de los que estaban en la clase. Básicamente, lo enseñó a su nivel, en lugar de hacerlo para la otra mitad de la clase que no tenía mucha experiencia.

Probablemente la tarea más difícil fue escribir un navegador de solo texto. Tuve problemas con el análisis de las distintas etiquetas y pedí ayuda. El instructor dijo: Bueno, si hubieses tenido el curso de Compiladores, solo podrías escribir uno simple. En ese punto, ''Compilador'' era una caja negra que hacía cosas mágicas antes de que se ejecutara el programa. Realmente no sabía qué era, y mucho menos era capaz de escribir uno.

Lo que lo hizo difícil fue no tener las herramientas necesarias para hacer el trabajo, para incluir la comprensión de los resultados que obtuve cuando busqué en Google. (Las páginas de manual y las API son excelentes si ya entiendes lo que estás buscando, pero no para enseñar un noob). En mis experiencias cooperativas, lo que más aprendí fue cuando tuve un mentor que me dijo: Si estás atascado. más de un par de horas, avísame para que pueda desatascarte y seguir adelante. Mucho mejor que aquellos que no quieren saber de mí, excepto cada semana o algo así.


Nada especial, pero una función que podría dibujar una "esfera" con triángulos, con nxn puntos e interpola los triángulos entre dos colores (por lo que la entrada fue el radio, el número de subdivisiones, color1, color2). Fue duro pero muy divertido cuando funcionó :)


Probablemente un empate: un solucionador de problemas de decisión para conjuntos que utilizan teorías de módulo de satisfacción y un planificador de procesos cooperativo en C / ASM que se ejecutó sobre un sistema operativo UNIX. La primera fue sencillamente difícil: nunca se había hecho antes de usar SMT y traducir el documento altamente teórico en una implementación real en un contexto diferente era difícil. El segundo involucró buscar en las estructuras de datos del sistema operativo para comprenderlas, y luego reemplazar los bits y piezas para saltar de un lado a otro entre las funciones del programa como si fueran hilos programados por separado.


Un controlador de módem de propósito general para un servicio en línea inusual. También tenía que admitir 30 tipos de módem (antes de los módems Hayes). Todos ellos tenían diferentes características de tiempo.

Tenía que estar escrito en ambos ensambladores 8086 y Z80 para las versiones CP / M y DOS de nuestros productos. Todavía tengo pesadillas sobre cierto módem semidúplex ...


Una aplicación que compiló y se ejecutó tanto en windows como en mac con un código base.


Una biblioteca para resolver ecuaciones diferenciales parciales no lineales. Lo usamos en un grupo de física teórica para resolver una adaptación no lineal de la ecuación de Schrodinger que ocurre en ambientes muy especiales de baja temperatura.

Fue relativamente fácil lograr que un simple solucionador funcionara, pero generalizarlo y hacerlo rápido fue un desafío.

Actualmente es de código abierto en Google Code: fdtl


Una clase de transmisión de video patentada que utiliza la api ffmpeg, en el nivel de manejo de paquetes y visualización de cuadros en el momento adecuado, sincronizando con el audio. No es tan difícil como algunos de los otros en la lista, ¡pero me pateó el trasero durante muchas semanas!


Una vez hice un software de procesamiento de video multicámara en tiempo real, haciendo detección de movimiento y magia histográfica acumulada, todo en procesadores de 33MHz y 640Mb de RAM. La parte difícil era hacer que esto fuera rápido; Copias abundantes de hashing, cambio de bits, trampas, insultos y noches nocturnas con pizza y efifanías durante aproximadamente 4 años. Ah, y también hice una versión que trata del color. Ah, y un módulo que podría ver la diferencia entre vapor y humo blanco en habitaciones grandes (como los reactores nucleares, por así decirlo). Hah, solo lo intentas! No encontrarías ejemplos de eso en ningún libro de texto. :)


Una vez tuve que escribir un algoritmo de compresión que utilizaba BWT (Burrows Wheeler Transform) y hay un paso en el algoritmo en el que tienes que crear una matriz ENORME. Tuve problemas con la memoria y la velocidad porque la matriz era muy grande. Venga a descubrirlo, hay un algoritmo realmente simple que podría haber usado y evitado por completo.

También tuve que escribir un sistema operativo simple en ASM y eso fue bastante complicado.


un compilador


un depurador