Entradas archivadas en Cosas de Ingeniero

Code Complete 2edEl primer libro técnico de este año ha sido un tocho (unas 900 páginas) que habia oído recomendar a algunos profesores, Code Complete de Steve McConell. He leído la 2a edición, que es una actualización de la primera, que es uno de los clasicos de la ingeniería del software. En esta, el autor ha substituido los ejemplos de C, Pascal, Basic, Ada, Fortran por ejemplos en lenguajes más actuales como C++, Java o Visual Basic. Quizás solo eche en falta consejos en el ambito del desarrollo de aplicaciones web, que es un aspecto bastante común dentro de la programación de negocios.

El autor ha sido gestor de proyectos en multitud de compañías, lo cual le da una visión bastante completa de las buenas practicas en la construcción de software (como la llama el) y eso es precisamente lo que encontrarás en este libro. Hay cantidad de buenos consejos y información en este libro, pero estas prácticas parecen escritas más para el jefe/gestor del proyecto, que se las debe inculcar a su gente, que no para el individuo/programador. No obstante, un libro interesante si podeís cogerlo en la biblioteca de la universidad o similar, aunque, en mi posición, no lo compraría.

Joel Spolsky, foto de microsoft-watch.comJusto ayer hablaba con Javier Romero de la capacidad de ingeniárselas de los informáticos de carrera, cuando veo este artículo en el blog de Joel Spolsky. Últimamente Joel estaba flojeando un poco y hablando de lo guay que es su compañía y lo “guay” que es el y lo “ultra-cool” que es estar con el en sus megaproyectos. No obstante, cuando añadí esta página al blogroll fue por sus magníficos artículos de opinión. Opinión que puede discutirse y que, en muchos casos, no comparto, pero que siempre es buena base para iniciar una discusión.

Logo de JavaLo que comenta Joel en el articulo es una evolución que parece ver el en los últimos graduados que entrevista. Parece ser que se esta tendiendo hacia el Java en el mundo universitario. Según el con Java no se puede distinguir entre buenos y malos programadores. La impresión es que con Java se les enseña a programar un tipo concreto de aplicaciones y que no los puedes sacar de ahí. Luego habla de su epoca de estudiante y como las cosas eran más difíciles con Scheme (cosa que no dudo).

La verdad es que mi opinión la resumiremos en ni tanto ni tan poco. Creo, como Joel, que es necesario para la correcta formación mental de un programador/informático aprender cosas como Scheme, la programación funcional y demás cosas raras que no usaras en la empresa en tu vida, a menos que trabajes en Google. Pero también, como le digo siempre a Javier, los tiempos han cambiado y quizás no es mala idea gastar un poco de tiempo, que personalmente sacaría del bajo nivel, en hablar de cosas como J2EE y demás arquitecturas mastodonticas dedicadas a los desarrollos empresariales.

Por ultimo, no se como sera alli en los States, pero en las universidades de por aquí seguimos teniendo nuestra dosis de todo lo que el echa en falta (aunque nosotros usabamos NJML). Porque casi todo lo que comenta que no saben los informáticos recién horneados lo he dado en la carrera y yo he acabado este año.

El viernes decidí comprarme un libro técnico para aprender un nuevo lenguaje con el cual desarrollar un pequeño trabajito paralelo que tengo aparcado y de paso para engrosar el currículum con un nuevo y flamante lenguaje de programación. El trabajo es rehacer una pequeña aplicación que gestiona una web estática y que esta hecho con Visual Basic 6. Como no tengo muchas ganas de trastear con VB y la aplicación es realmente pequeña voy a utilizar este trabajo, que aunque remunerado no corre prisa, para añadir un punto nuevo al currículum. Así que estuve indagando en los dos lenguajes que voy a comparar decidiendo cual seria el escogido. Como la aplicación tiene que ser para Windows, los bindings GTK+ y Qt de Python no resultan ninguna ventaja. Así que tenia bastante pensado utilizar wxWindows para relizar el interfaz de usuario. Lo primero que hice fue leerme el tutorial de Python de la pagina oficial y realmente te ayuda a aprender el lenguaje, sobretodo si, como yo, estas familiarizado con Perl. Tras esto me puse a investigar Ruby y la verdad es que la sintaxis no es tan bonita como Python, que tiene una sintaxis muy limpia, de lo mas limpio que he visto en lenguajes de programación prácticos. Lo bueno que tiene Ruby es que esta diseñado pensando mucho en el diseño y en hacer un lenguaje plenamente Orientado a Objetos, no nos extrañaremos si tenemos en cuenta que es mas joven aun que Java, mientras que Perl (87) y Python (91) llevan bastante tiempo en activo. Esto hace que, aunque a primera vista la sintaxis de Python sea mas limpia, en cuanto te familiarizas un poco con Ruby la sintaxis pasa totalmente desapercibida.
Sin mas dilación pasemos a las simpáticas listas de ventajas de cada uno.

Python

  • Gran cantidad de excelente documentación online: esto es un punto muy bueno para Python. Es un lenguaje que no necesitas ningún libro ya que en Internet se puede encontrar el Cookbook, muy buenos tutoriales, etc. Lo único malo es que se tiende a abusar de gags de los Monty Python que para los no familiarizados puede resultar algo molesto.
  • Mucho soporte por parte de la industria: hay bastantes empresas que han empezado a apostar por Pyhon, con lo cual tenemos bastantes IDEs muy buenos, como Komodo de ActiveState.
  • Sintaxis muy clara: debido a su feature de tener que organizar el código mediante espacios, el código en Python queda muy bonito, limpio y claro.
  • Python tiene mejor soporte para Windows. Esto no es especialmente importante para mi ya que no tenía intención de usar COM o OLE o demas tecnologias Microsoft, pero claramente es un punto a favor de la serpiente.

Ruby

  • Ruby es un lenguaje elegante, con un impecable diseño y que además tiene algunas cosillas heredadas de Perl aunque, dicho sea de paso, solo las buenas ;)
  • Ruby trae integrado la parte de Testing Unitario lo cual quiere decir que facilitara utilizarlo y, creo, que se incita a ello, lo cual es una buena practica
  • Aunque no tiene todavía demasiado soporte, en los últimos días esta experimentando un boom debido al fantástico framework Ruby on Rails, asi que es posible que, en un futuro tenga bastante soporte por parte de la empresa
  • Es un lenguaje arcano, creado en Japón, lo cual le da un toque nada despreciable de misticismo para añadir al currículum :)

Finalmente, tras valorar pros y contras y, principalmente debido a que, de los dos, el que tenia el mejor libro-biblia, como el Programming Perl (el libro del camello) es para Perl, era Ruby con su “PickAxe”, me decidí por este segundo, mas que nada porque me apetecía tener un libro de papel. Espero que esta comparación os sea de utilidad o al menos que os haya entretenido un rato.

Hace bastante tiempo que no me siento identificado con los ideales del software libre. Una idea que de base es buena y resulta beneficiosa para la sociedad ha degenerado en una retorica fundamentalista con la cual no me siento cómodo. Richard Stallman es el ideólogo por excelencia de las libertades y creador de gran parte de la filosofía del movimiento.
Uno de los ultimas excentricidades de Stallman, relacionado con todo el escandalo Harry Potter ha sido desvelar el final del famoso libro que salio antes de tiempo. No es que Harry Potter me importe demasiado hoy en día, pero la imagen que crea de los partidarios del software libre es bastante negativa.
Si los Linuxeros quieren que la gente se acostumbre a usar software libre, no seria mala idea que empezasen a buscar figuras alternativas que les representen, porque tal como esta la cosa hoy en día, la imagen que se esta dando es de talibanes. El problema de los Linuxeros es que creen estar en posesión de la verdad/razón absoluta y tratan de imponer el software libre en frente de lo privativo (maligno, satánico, …).
Yo soy partidario de utilizar siempre que se pueda software libre (o open-source), evitando freeware con contrapartidas en forma de malwares varios, o pasar por caja. En un mundo ideal pasar por caja y el código abierto no serian incompatibles, aunque visto como tiene que pedir (casi mendigar) el creador de BitTorrent, me apena ver que esto no es así.

A mi me gusta Java. No es mi lenguaje de programación preferido, pero tiene buenos entornos de desarrollo, sirve para bastantes cosas, tiene un API muy bien documentado y es bastante elegante. Quizás peca de ser bastante verbose para mi gusto (necesitas escribir mucho para casi todo). Su principal defecto es la llamada trampa de Java. Por si no queréis leer, básicamente que al ser propiedad de Sun, estos modifican como quieren y distribuyen, gratuitamente, sus VM , pero sin liberar el código … así que dependes de ellos y su buena voluntad.

Pues hoy estamos un poco quemados con esa super idea de Sun del J2ME. La idea de Sun era que todos los móviles tuvieran una VM de Java para poder desarrollar aplicaciones independientes del móvil. La idea en si es buena, y en el mercado móvil es importante porque hay muchos mas dispositivos. Inicialmente la especificación era muy simple, los dispositivos tampoco eran muy potentes, así que no era mucho problema. Los programadores tampoco sabían que hacer para los móviles (aun hoy tampoco esta claro). Hasta que a alguien se le ocurrio hacer juegos… y claro, los fabricantes empezaron a desarrollar extensiones para facilitarles la vida a los programadores y de paso, al ser estas incompatibles con sus competidores… podían dominar el mercado. Sun hace relativamente poco actualizo su especificación incluyendo una API Multimedia, otra de Bluetooth, de conexión, etc. Todas opcionales pero estandarizadas.

En la asignatura que estoy cursando que programamos aplicaciones móviles hacemos uso de la primera, la MultiMedia API (MMAPI). Para desarrollar utilizamos el emulador y las herramientas de Sun ya que tanto el profesor como nosotros teníamos la impresión que era mas practico y nos permitía ceñirnos al estándar. Aun sin salir del estándar, pero utilizando funciones que permitían acceso a bajo nivel (enviar mensajes al sintetizador MIDI del móvil, notas para los profanos). El caso es que cuando empezamos a probar la aplicación en móvil nos encontramos con un divertido problema. Nokia no soporta una larga lista de clases (partes de la librería) en los móviles de serie 60 (¡que además son Smartphones con Symbian!). Además, algunas funciones no están implementadas y otras funcionan de manera diferente.

No voy a renegar totalmente de Java como Stallman, ya que me parece un lenguaje super practico. No obstante, los lenguajes de script como Python, Ruby o, por supuesto, mi querido PERL cada vez están pegando mas fuerte y ofreciendo librerías estándar muy completas y una velocidad de ejecución bastante aceptable. Y en el futuro esta el .NET, estandarizado por ECMA, y el proyecto Mono, que podrían meterle caña al Java. Y no podemos olvidar que en cuanto las utilidades GNU para Java estén maduras, el dominio que tiene Sun podría no estar tan claro.