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

Anuncios

Entonces… qué ha hecho el software libre por nosotros?

ya sea por conveniencia o por ignorancia, ésta es una pregunta que quizá se haya hecho mucha gente que ve atemorizada cómo este modo de desarrollo de software ha crecido exponencialmente en los últimos años gracias a su naturaleza colaborativa, intentando atacar y defender a su software propietario simplemente por que no saben usarlo. Pues para todos aquellos que están renuentes a reconocer los grandes cambios que el software libre ha hecho en el mundo, aquí presento una lista de razones por qué el mundo es diferente desde la existencia de esta ideología.

Basta con ver que la gran parte de software “significativo” de software, proyectos importantes de tiempo real, sistemas operativos, y la mayoria del software que mantienen vivo el mundo, e incluso juegos de video, está compilado usando GCC y enlazados al conjunto de librerías GLIBC, convirtiéndolo en quiza el compilador más usado del planeta, no solo por su gran eficiencia o su arquitectura, sino también por su flexibilidad entre plataformas, permitiendo la interoperabilidad entre diferentes plataformas con leves cambios de código, usando el mismo lenguaje. Ésto señores si es multiplataforma.

Este compilador es la base para que grandes proyectos como el Kernel de LINUX, se volvieran una realidad, y se materializara uno de los cambios más importantes dentro del movimiento libre… darle un Kernel al conjunto de utilidades y librerías GNU, convirtiéndose más tarde en lo que conocemos como GNU/Linux y toda la revolución estuviera por iniciar… hasta la actualidad, donde el superordenador más poderoso del mundo, el BlueGene de IBM, de cientos de teraflops, se ejecuta nada mas y nada menos que en el sistema operativo libre de preferencia, apto para mantener vivo este supercluster. Incluso Motivando a empresas manufacturadoras de Sistemas Operativos Propietarios a cambiar la arquitectura de sus kernels para sus versiones recien cocinadas del 2008 para poder hacerle frente a la estabilidad y escalabilidad que GNU/Linux y los diferentes BSD han dado durante años.

Incluso no hay que ir tan lejos, basta con recordar también el Kernel del sistema operativo más usable y amigable. MacOS X, el cual, con su apariencia reluciente, no es nada más que un shell gráfico sentado sobre una plataforma estable llamada Darwin, y como no es de extrañarse por las descripciones anteriores, es software libre compilado con software libre. Y yendo un poco más abajo… vemos ademas a Motorola más frecuentemente produciendo teléfonos de calidad, y reduciendo costos de desarrollo, y por ende bajando precios al consumidor, al utilizar un sistema operativo muy famoso que tiene de mascota a un pingüino.

Google no hubiera sido tan exitosa (y quizá no existiera) sin software libre, así como el internet actual no sería lo mismo sin Google, quienes supieron sacarle el jugo a las capacidades de “crecimiento horizontal” que el software libre permite hacer al crear superclusters y lograr reducir los costos de procesamiento para una exitosa implementación de sus algoritmos de búsqueda distribuida.

Incluso, otro proyecto clave para el crecimiento de Internet ha sido LAMP, en donde un gran porcentaje de software “Web 2.0” se ejecutan en este tipo de herramientas, el cual, también estoy seguro que el internet no sería el mismo sin LAMP así como este mundo actual no sería el mismo sin internet… o será en vano que Sun Microsystems recientemente adquiriera MySQL para mejorar su interoperabilidad con Java, tambien recientemente liberado?

Con estos pocos ejemplos vemos que el software libre no son solamente ideales, es mejora continua para producir software de calidad… y continua en crecimiento.

JAVAizando sistemas de la USAC.

Una de las cosas por las que la gloriosa y tricentenaria Universidad de San Carlos de Guatemala se ha dado a conocer a nivel nacional, por ser una de las universidades en donde ganar los cursos es un sacrificio sinigual, Decir que alguien se graduó de la USAC muchas veces significa que es una persona que ha superado etapas de burocracia, catedráticos trabadores, y sobre todo, muchos desvelos. Y qué decir del prestigio de salir de Ing. en Ciencias y Sistemas, una de las carreras que por mucho tiempo fue considerada como la más desafiante dentro de la USAC. Ahh un gran sacrificio, mas por los 80s; sin Internet, ni wikipedia, ni Sourceforge, sin Amarok o Winamp y obvio sin mp3 de Kreator que escuchar para una mayor iluminación de algoritmos, etc…, y con una gran carga algorítmica dada en los cursos científicos computacionales y que había que desarrollar e investigar en bibliotecas convencionales.

Sin embargo todo esto ha ido cambiando, y desde el 2005, desde que entro el dizque decano Paiz, y su equipo de trabajo, específicamenteel Ing. Mazariegos, ex director de la Escuela de Sistemas, quien propuso al inicio de su gestión, “cambios” que supuestamente beneficiarían al estudiantado. Estos cambios fueron fundamentados en la necesidad de renovación de enseñanza en la carrera, que según él, eran más aplicables, llevaron a convertir esta carrera de alta demanda en Guatemala, en algo asi como una carrera enfocada más en tecnologías cortoplazistas y triviales, removiendo todo rastro de ciencia que tenía la carrera, y convirtiéndolo en J2EE, etc, una tecnología que si bien los conocimientos de ésta tienen alta demanda en el mercado, todos sabemos muy bien que el mundo tecnológico cambia a un ritmo acelerado, y lo que hoy es tecnología de punta, mañana es tecnología inservible, e inútil. y Java no va a ser la excepción.

Hasta donde yo se el nombre de la carrera es “Ingeniería en Ciencias y Sistemas”, mas no “Ingeniería en Java y Paradigmas Tecnológicos Actuales de Sistemas”, ya que pareciese que se removió cualquier rastro de ciencia que quedaban en cursos de 3er semestre al 6to, Convirtiendo los contenidos de cursos tan importantes como Estructuras de Datos, de Arboles B a Web Services e i18n en Java, y a la masterización de herramientas como NetBeans y JDeveloper…

El problema ha llegado a tal extremo que la pobre generación que comenzó Programación 1 en el 2do semestre de 2005 no sabe ni siquiera el concepto de puntero en C/C++, mucho menos van a saber la implementación óptima de un arbol B en C/C++, o de un Arbol de Sintaxis Abstracta, muy útil para los cursos de Compiladores, que afortunadamente siguen sin cambio en sus temas titulares y el contenido se sigue basando en el Libro del Dragon sin embargo…

A esto viene la siguiente pregunta: Cuando se ha visto que un compilador este hecho en una plataforma tan ineficiente sobre Java??? pues señoras y señores, esto es lo que se está haciendo en los laboratorios de Compiladores 1 y 2, imponer el uso de herramientas tan ineficientes como JLex y Cup y crear un intérprete o compilador en lenguaje Java que se ejecute ineficientemente sobre la JVM…

Para muestra un boton, el proyecto publicado en este blog esta hecho en Java, con una ineficiencia enorme, y no tanto por culpa del programador(o sea yo ;-)), sino de la plataforma Java y su JVM, Esa ineficiencia se hubiera minimizado si se hubiese hecho en un lenguaje igual de portable, e incluso soportando más plataformas de hardware/software que el mismo Java como C/C++ bajo GCC usando Flex y Bison o ANTLR(y si no me creen lo de la portabilidad, dos preguntas sencillas… Con que lenguaje está hecho y bajo que esta compilado el kernel de Linux?? en C bajo GCC obviamente, y en cuantas plataformas de Hardware se ejecuta?? Muchísimas, incluyendo teléfonos móviles…), por lo que la excusa de la portabilidad era el motivo para el uso excesivo de Java en los cursos de programación en la Escuela, con el anterior argumento se acabó.

Y no es que esté en contra de tecnologías y paradigmas como J2EE, .NET, , ni de lenguajes como Java o C# o tendencias como Web Services o i18n, Se que con ellas se pueden realizar muy buenas aplicaciones con el mínimo de esfuerzo, y reconozco que estas tecnologías se tienen que seguir impartiendo, sin embargo como temas de laboratorio, no de la clase titular. De lo que sí estoy en contra es de la sustitución de la base científica fundamental por éstas, que bien se sabe que lo que es ciencia, perdura por los siglos de los siglos.

Afortunadamente yo todavía tuve la oportunidad de ser la última generación en aprender lo que quedaba de Ciencia de la computación… ya que gracias a este background científico, aprender nuevas tendencias como Ajax, Ruby on Rails, J2EE, se hace mucho mas sencillo, y el cambio de paradigma menos costoso y doloroso… a que si le ponen a un alumno carnet 2005 a que les desarrolle un sistema de archivos para una base de datos usando Árboles B+ bajo C++. Que las cosas buenas continúen, y la ciencia computacional regrese a donde debe estar, he dicho.