A una década de programar…

Justamente leyendo la página de Retromags comentada en el post anterior, me doy cuenta de un post  en el que preguntan… qué estaba haciendo en mayo de 1999??

Y justamente se me vino a la mente que en ese año fue que tuve mi primer ordenador, un vejestorio el cual venía aun con windows 3.11. Recuerdo que luego no pasaron ni dos meses para que le instalara Windows 95, que, aunque ya habia salido Windows 98, la máquina no lo iba a soportar con apenas 12 MB de ram.  El caso es que tambien así como aprendi a usar Windows 95, como todo nuevo usuario, aprendí a arruinarlo, y a instalarlo de nuevo N veces hasta memorizar el bendito fondo monocromo azul y negro de teclado que tenia la pantalla de instalación.

Asi era mi primer maquina, un vejestorio de primera.

Asi era mi primer maquina, un vejestorio de primera.

Fue así como, al instalar dicho S.O.  me di cuenta que traia un “navegador” (el cual en ese tiempo ni sabia que era, ni para que servia), pero recordé que tenía unas revistas viejas de Club Nintendo en donde estaba publicado unos cursos de HTML..  Y en mi afán de investigar y aprender, comenzé a hacer un HTML básico a puro notepad, la verdad no tenia ni idea para que servia pues mis conocimientos eran casi nulos. sin embargo ahi estaba terminado, una linda pagina Web 1.0 extremadamente estática, con exceso de tags <blink></blink> y marquesinas para que no se viera así. Eso fue como en abril de 1999…  teniendo siempre como inspiración los videojuegos.

A la vez también tuve mi primer experiencia con la Web, en un café internet del cáduco centro comercial Tikal Futura, El pinche café internet cobraba nada mas que Q25 la media hora de navegación, un total fraude.  Sin embargo ahi estaba yo feliz, no solo navegando por la web 1.0, sino tambien a cada efecto bonito que veía en alguna página, investigaba como carajo los hacian (como los onMouseOver que eran lo más interactivo de la época) Ahi fue donde descubrí JavaScript, mi primer lenguaje de programación

Dado que el acceso a internet era precario, en un dia lluvioso de Mayo de 1999, decidí encargarle a mi hermano que tenía acceso más facil a la web, que me imprimiese unos manuales de Javascript, con los cuales, de manera autodidacta, me puse a aprenderlos y a hacer mi primer “Hola Mundo!” al mejor estilo web 1.0(Ahh cuan dificil me fue agarrarle la onda a los ciclos for() en ese entonces).  Recuerdo la satisfacción de ver el primer algoritmo funcionar… era un éxtasis impresionante cuando todo corría como debía, era una sensasión endiosante, como sentirse creador. Pero lueg que habia dejado todo bonito, publique mi primer web en los servers de Angelfire llamado de The Underground Cave… el cual descontinuaria por lo cansado que era desarrollar a mano el contenido…

Y así fue consecutivamente con lenguajes como Visual Basic (1999,por lo fácil, y por que MS Office ya incluia el IDE  y el interprete, y luego haciendo menus de autorun para cada disco que quemaba), Pascal (2000,por curiosidad, y desde el principio odie ese lenguaje), C (2000,por que habia leído que los videojuegos se hacian en este lenguaje, compilando bajo djgpp), los que aprendi antes de entrar a bachillerato, sin saber que me iban a dar ventaja del resto, y tener mas tiempo para descansar.

Tambien con lenguajes como C++ (2001, que pense que iba a ser facil despues de saber un poco de C, pero sin contar que era un cambio total de paradigma), ActionScript y PHP (2002, Por la necesidad de aprender flash y server side scripting, por un desarrollo freelance que consegui). y así sucesivamente… hasta llegar al mogollón de lenguajes que se ve uno obligado a aprender de manera autodidacta  ya dentro de la Universidad..

Y asi, frente al ordenador, irónicamente escribiendo sobre una página HTML generada por JavaScript usando AJAX (el editor de texto de wordpress),  celebro mi décimo aniversario de hacer mi primer algoritmo, sin saber siquiera que era un algoritmo; haciendo una pagina web simple, sin haber tenido contacto siquiera con internet;  y sin saber además de que la programación además de convertirse en mi carrera profesional, se  iba a convertir en mi estilo de vida… Y todo por simple curiosidad (o como diriamos al buen chapín, por shute).

Anuncios

Mis proyectos de sistemas en la USAC parte II: Progra 2…

Bueno, luego del exitoso post anterior (de donde jodidos), tambien he publicado los proyectos desarrollados en el curso de Introducción a la Programación 2… en un semestre donde se comenzaban a complicar las cosas pues habia que llevar varios cursos no triviales como Fisica 2 o Lenguajes formales.  La progra 2 de aquellos tiempos era un poco diferente a la de ahora, pues antes se daba solamente temas de persistencia en archivos, OOP,   Memoria dinámica (punteros, listas y todo eso), un poco de análisis y diseño (unico tema que persistió en la progra 2 de ahora), y conceptos básicos de redes… y lo que se programaba se hacia en C ++.

Y aunque seguían con su necedad de obligarnos a programar en el asquerosisimo borland C++, me importó un comino y empecé a hacerlo en un compilador mucho más superior y que cumple estándares… GCC, desarrollandolos dentro de algo que es más que un IDE… EMACS, y sobre un sistema operativo tambien superior, Linux. además que daba primera vez uso de un sistema básico de versionamiento, el CVS.  Y para cuando tenian que calificarmelo en windows que hacia? pues como los proyectos eran básicamente en consola, no me costo mucho portarlos a Windows usando el compilador MingW.  Bueno, a continuación un trio de proyectos inútiles cuya única finalidad era didáctica (bueno, quiza tambien tenia de finalidad trabarnos, pero al menos no lo lograron conmigo):

1. FIRST (FIfa Rating SysTem)

Continúan los nombres estúpidos, para un proyecto tambien estúpido, supuestamente era un calculador de posiciones y punteos para torneos de la FIFA,  lo más difícil era entenderle bien la ambiguedad del enunciado que la mera programación en sí.  Éste proyecto tenía que hacer uso de archivos no recuerdo para qué, pero lo que si recuerdo es que sacaba estadísticas.

svn checkout  http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy1/ first

2. MOTHELL:

Este supuestamente era una administración de hoteleria o algo así, en donde se debía poner en práctica los conceptos de OOP que supuestamente habian enseñado.  Tiene estructura parecida al anterior, pues fue hecho por el mismo mortal con las mismas herramientas… ahh, e incluye su Makefile para una facil compilacion.

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy2/src/ mothell

3.  Libra:

El último y más trabajoso proyecto (aunque la verdad estaba bastante facil) que consiste en Mantenimientos para libros de una biblioteca, administrando también préstamos y todo es en colas. En éste se tendría que utilizar ya estructuras de memoria dinámicas como pilas, listas y colas, y además, usar full OOP.  Aqui empezaba a meter mano a los TDAs, además de usar la característica de Templates de C++ para no andar reescribiendo un TDA para cada tipo de dato. Compila bajo GCC e incluye makefile tambien.

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy3/ libra

Bueno, esto fue IPC2, un curso “comodín” en donde metían cualquier tema que les diera la gana dar.  con proyectos que quizá eran los más fáciles de la carrera media vez se dominara de antemano la OOP (algo dificil para la mayoria, dado que se aprendia en progra 1 en el paradigma top down)…

PD. Para poder bajarlos, deben instalar el cliente subversion de consola en gnu/linux y ya instalado ejecutar el comando dado en el directorio donde se vaya a bajar. Tambien recomiendo usar el TortoiseSVN si van a bajarlos en Windows

M-x introduccion-a-emacs

Una de las herramientas mas marcianas que ví la primera vez que usé un sistema GNU/Linux fue un extraño editor llamado emacs. pues ingresaba a él, y luego no sabía como cerrar la aplicación.

Emacs logo

Sin embargo, como buen estudiante de ingeniería en sistemas, me gusta complicarme la existencia, y decidí ponerme a aprender a utilizar dicha aplicación. Encontré luego que al presionar F10 accedía al menú ficticio que me aparecía en la pantalla principal, navegué hasta la ayuda, y vi algo así como “Tutorial rápido de emacs”. Decidí tomarlo, y luego no pude despegarme de este excelente editor de texto (?) , que me ayudó principalmente en el curso de Programación 2 y Compiladores 1 ya hace algunos años, cuando hacía programas en C y C++. Y no solo me dejaba hacer eso, sino que con ayuda de CVS llevaba el control de versiones de dichos proyectos, así como generaba los autoconf y automake respectivos. Además de muchísimos otros beneficios que tiene esta aplicación. Por lo que decidí publicar una pequeña transcripción de una descripción muy certera que le hacen a esta poderosa aplicación.

Emacs como IDE

GNU Emacs, tiene en comun con algunas otras buenas cosas, la cualidad de que es mejor apreciado con la experiencia en vez de una descripcion a sangre fría. Gracias a su grandiosa extensibilidad, y a la larga gestación producto del trabajo compartido de muchos programadores, se ha convertoido en “Todo” para “todos”, Su extensibilidad y personalización está hecha gracias a sus archivos auto documentados “Elisp”. Emacs crece y crece en una gran feceta modular. una arquitectura protable y vasta, que está compuesta de módulos de código colectivo. En resumen Emacs ofrece un entorno totalmente integrado y listo para configurar para cualquier tipo de programación común y no común. procesado de texto y tareas computacionales regulares.

Éste grandioso programa puede ser usado para escribir y editar textos como éste. para probar, escribir, y ejecutar código, páginas webs entre servidores, actualizar y publicar entradas de blogs, organizar pensamientos y notas de nuevas formas, y como punto de entrada para manipulación del todo poderoso Shell de Unix. Y así esta lista se extiende y se extiende…

Así que si tienen la oportunidad (y la paciencia) para tomar el tutorial de éste app, háganlo, y verán que con emacs, las tareas cotidianas de programación se simplifican.

Aqui les dejo el link para que puedan probar el poderosísimo emacs

Bajar Emacs

Para mas informacion:

El Blog de Emacs (Inglés)

ALT+X help (desde emacs)

Modularización, un problema pendiente…

Es lamentable que muchos estudiantes de la carrera de Sistemas no apliquen los conceptos más importantes de modularización, sea cual sea el lenguaje… Es algo inaceptable que un proyecto largo, como los que suelen dejar en los cursos de Sistemas de la USAC, venga si mucho un par de archivos fuente.

Recuerdo en mis tiempos, cuando llevé progra 1/progra 2, y se programaba en C existían proyectos con una modularización que daba pena, ya que ni modularizaban a nivel algoritmico ( o sea, todo lo hacian en el void main() olvidando los principios fundamentales de la programación descendente), mucho menos utilizaban diferentes archivos para la división semántica del proyecto, y en algunos caso llegaban a utilizar hasta sentencias goto!!(incluso todavía hay gente que lo utilizan en java… que pecado a la abstracción).

Por ello, es importante una buena modularización, tanto para el entendimiento del propio código, como del código ajeno (ojo Willy), además de que ayuda
evitar código redundante.

Cada lenguaje y compilador cuenta con sus propias herramientas y técnicas, además de “barreras naturales” para una mayor modularización, listaré algunos ejemplos básicos:

  • HTML/XHTML del lado cliente: Dividir el contenido, presentación e interacción en diferentes archivos .htm/.xhtml, .css,(Hoja de estilos) y .js (javascript). Esto es muy importante mas si se van a utilizar RSS Feeds.
  • Java: Utilizando un public class por cada .java, y aplicando el concepto de packages, ademas de utilizar generics cuando sea posible para evitar redundancia.
  • C#: Aplicando un public class por cada .cs, tratar de enfocar todo el motor en las librerías, y utilizar namespaces, generics, y reflexion cuando sea posible.
  • C: Contener la definición en un .h, y la implementación en un .c, tratando de colocar las estructuras de datos y declaraciones en el .h, y colocando sólo los algoritmos y funciones para estas estructuras de datos en su respectivo .c.
  • C++: Aplican los mismos principios que en C, ademas de hacer uso de namespaces para evitar colisiones, y templates para evitar redundancia.

Bueno, estos son los principales, en los que regularmente se suele hacer un espagueti de código (en especial C). Tomen el consejo… modularizen y sigan la regla KISS (Keep it simple, stupid!!)