viernes, 2 de septiembre de 2022

La metamorfosis interna de PSeInt

Siempre dije que internamente el intérprete está muy mal diseñado, y muchas veces amagué con rehacerlo completamente. Sin embargo ninguno de esos amagues se completó por falta de tiempo. Así que ahora voy a tomar el camino más largo porque... Claro, como me falta tiempo, mejor ir por el camino más largo, ¿no? ¿WTF?


El problema es así:

  • Tengo un código base que es horrible, pero funciona para lo que se le pide en este momento, y no es poco lo que se le pide. 
  • Es tan horrible que sería menos trabajo hacerlo de nuevo desde cero, bien pensado, y aplicando toda la experiencia acumulada, antes que tratar de "corregirlo".
  • Pero empezar de cero implica perder de golpe toda la funcionalidad que ya se tiene, y que pase tiempo hasta que se vuelva a recuperar y esté lo suficientemente probado y estable otra vez.
  • Y si empiezo de cero, dado que el esfuerzo estaría en el nuevo código, mientras tanto no podría ni valdría la pena trabajar en el viejo, así que durante todo ese tiempo el software no tendría mejoras ni correcciones a ojos de los usuarios.
  • Lo bueno sería que pasado ese doloroso proceso, tendría una base mucho más adecuada para que las próximas mejoras salgan mucho más rápido.

Si midiera el tiempo necesario, seguro que rehacerlo requiere mucho menos que corregirlo. Pero el problema es que requiere todo ese "menos" tiempo de golpe. Es menos, pero tiene que estar concentrado, porque el mientras tanto tiene los problemas que acabo de mencionar. Y por eso no me estaría funcionando.

Un ejemplo claro de los amagues y las ideas está en este blog en 2018, cuando comenté los planes para una nueva arquitectura (en estos posts: p1, p2a, p2b, p2c). También en diciembre del año pasado hice otro intento, escribí bastante código, pero luego pasaron cosas y no llegué ni a comentarlo en este blog. Después de tanto tiempo intentando encontrar más tiempo para rehacerlo y evitando trabajar en el código viejo, es evidente que no resultó.

 

En cambio, corregir lo que hay lleva más tiempo, es más doloroso en algún sentido, pero me permite ir de a poco, no perder funcionalidad en ningún momento, y poder mientras tanto hacer pequeñas mejoras o correcciones sabiendo que no son 100% descartables. En teoría no es la opción ideal (ya escribí sobre esta disyuntiva hace muchos años), pero en la práctica hay que saber adaptarse.

Así que ahora voy por este otro camino, tratando de que ese código se convierta lentamente en una hermosa cucaracha de carreras (como Mike y Bubsy), en lugar de sufrir el triste destino de Gregorio Samsa, que es a donde se dirigía. Pero quedará para otro post discutir los detalles y comentar los primeros avances.

3 comentarios:

  1. Hola
    Reiniciar un trabajo desde 0 se avanza en ciertos casos más rápido que remodelar o mejorar lo ya hecho.
    Si se desea el mismo efecto, iniciar desde 0 puede no ser una gran idea. Iniciar desde 0 para obtener algo mejor vale la pena. En este punto en el que esta PseInt es grande y maravilloso. Se puede iniciar un PseInt V2.x, claro esta como dice Pablo no tendrá en un principio todas las funcionalidades que se han desarrollado durante toda su evolución.

    Es importante PseInt V2.x para llevar el intérprete a otro nivel, una de esas partes del nuevo kernel podría ser un análisis paso a paso de ciertas expresiones como por ejemplo 3 * ( 4 + 5 ), casi todo depurador mostraría 27, resultado de 3 * 9, pero no desplegaría la expresión 3 * 9 como tal y luego 27, una forma de hacer esto es convertir la expresión a Notación Polaca Inversa aka RPN, pues programé RPN por mucho tiempo y me gustaba hacer programas que mostraran paso a paso la ejecución de una expresión matemática. Por ejemplo la expresión 3 * ( 4 + 5 ) recodificada en RPN es 3 4 5 + *, esto en una pila es: primero se coloca 3 luego 4 luego 5 se suma (+) ósea queda 3 9 luego se multiplica (*) y se obtiene 27, a simple vista parece codificación de Aliens, pero esto ejecutándose paso a paso de forma automática se ve como se descompone la expresión y como se ejecuta u opera cada parte, voy a realizar un video de este potencial de convertir a RPN para prueba de escritorio avanzada, RPN está presente por ejemplo en las calculadoras Hewlett Packard serie HP48, HP50.

    Otra justificación para crear un kernel v2.0 es hacerlo multilenguaje natural es decir PSeudoCode por ej. en italiano, portugués, inglés, etc

    Algo también importante para motivar a escribir algoritmos en PSeudoCode es tener una segunda ventana de salida una ‘CONSOLA’ GRAFICA de manejo de pixeles, pues los chicos dicen profe PseInt solo puede texto, queremos gráficos así sean de conformación de pixel a pixel. Ver por ejemplo graficación de fractales lleva a los estudiantes a imaginar mundos no comunes a simple vista en sus mentes, esto ya lo está haciendo Flowgorithm, pero este no soporta PSeudoCode, solo codificación por diagramas de flujo de código DFC que a veces es complicado efectuarlos cuando son demasiado extensos
    Como no todo se puede hacer desde 0, sino que se debe apoyar en hombros de terceros, por ej. se puede usar bibliotecas de manejos de gráficos, otra de editor de texto como lo hace Pseint con Scintilla, para esta parte podrían unirse colaboradores, cuente conmigo para pruebas beta, aporte de ideas, creación de manuales, tutoriales y similares, pues no soy profesional en programación computacional avanzada, soy Ing. en electrónica, docente de mates, circuitos, lógica algorítmica, programación computacional de primeros semestres en universidad.

    Por último, PSeInt versión 1.0 podría ‘mejorase’ más que todo en la parte estética y paralelamente ir creando la V2.0
    Espero se puedan unir a este proyecto, muchas mentes hacen que todo evolucione más rápido, trabajo colaborativo =)
    Atentamente
    Jaime Meza

    ResponderEliminar
  2. Noooo, por qué cambiar algo que funciona tan bien, hace menos de un año que estoy de lleno aprendiendo a programar, y aunque al principio no entendía muy bien como trabajar en Pseint, siempre me ha parecido super intuitivo, fácil de manejar y entender. Y ahora que apenas estoy explorando realmente las herramientas del programa (antes sólo me concentraba en que funcionaran los algoritmos), me parece que tiene todo lo necesario para desarrollar algoritmos, con ayudas muy completas y me encanta el diseño vintage.

    ResponderEliminar
  3. Intente darle una mejor organizacion y arquitectura, pero me fue imposible

    ResponderEliminar