18 de agosto de 2005

La PC más famosa del mundo

En este artículo publicado en el Universal el día 18 de agosto de 2005, se habla de que la Comodore 64 ha sido la PC más famosa del mundo hasta el momento. Al leer este artículo recordé mis inicios en el mundo de las computadoras, ya que la primera que toqué e intenté progrmar fue precisamente una Comodore 64. Incluso, esta computadora todavía sigue funcionando y se encuentra guardada en casa de mis padres. Así que si hay por ahí un nostálgico que le gustaría contar con ella, así como con todos los dispositivos con que la equipó mi padre (lector de diskets, cassets, impresora a color, pluma digital, y software variado), y está dispuesto a pagar por ello, quizá podamos hacer negocios.

Para leer más sobre este artículo: "La PC más famosa del mundo"

4 de agosto de 2005

Spyware, ¿la nueva guerra en Internet?

Por lo general no nos preocupamos por los problemas hasta que los padecemos. Durante mucho tiempo me sentí seguro al navegar en Internet, pensé que tenía todo cubierto, mi antivirus corriendo correctamente, mi sistema operativo actualizado, y un buen control sobre los programas instalados en mi computadora. Por eso nunca me preocupé por tener algún virus o programa no deseado. Así estuve trabajando durante muchos meses, hasta que algo en mi sistema dejó de funcionar correctamente.

A finales del mes de Julio, me di cuenta de que mi computadora comenzó a fallar, algunos programas dejaron de funcionar, y otros lo hacían muy lentamente. Fue aquí que decidí investigar lo que podría estar pasando. Mi principal preocupación fue que mi máquina se hubiera infectado con un virus, así que decidí correr el antivirus, el cual no detectó nada. Después decidí acceder a varios antivirus en línea para ver si era algún virus nuevo que mi antivirus no detectaba, pero nada. Así que decidí correr programas de detección de spyware. Con esta revisión detecté algunos programas conocidos como adware y spyware, pero después de borrarlos el problema continuó. Tuve que solicitar la ayuda de un técnico, quien utilizó un programa especial. Así nos dimos cuenta de que había programas no deseados que podrían estar funcionando como spyware. Sin embargo, una vez borrados, el problema continuó. Lo peor, fue que seguí detectando señales que sugerían la existencia de algún programa dañino, sin embargo, no encontramos la forma de detectarlo para eliminarlo. Finalmente, la opción que consideramos más segura, fue formatear mi máquina para reinstalar por completo el sistema operativo, así como los programas que requería para trabajar. Gracias a que por experiencias pasadas tomé medidas para proteger mi información de estas situaciones, no perdí nada importante. Sin embargo, esto me dejó pensando en los problemas que pueden causar los programas no deseados en nuestras computadoras.

Los programas conocidos como spywares han tenido una evolución reciente que los ha convertido en una verdadera amenaza para quienes trabajan con sus equipos conectados a Internet. La problemática de estos programas es tal, que la revista Communications of the ACM, una de las más leídas a nivel internacional por profesionistas e investigadores en el área de ciencias de la computación, ha dedicado su edición de agosto de 2005, a tratar el tema del spyware, con artículos que reportan experiencias e investigaciones científicas al respecto (los resúmenes de estos artículos pueden verse en http://portal.acm.org/, ingresando a la revista CACM, volumen 48, número 8).

Debido a los problemas que los programas spyware pueden causar a los usuarios de Internet, he pensado en escribir una serie de blogs al respecto. En estos blogs hablaré sobre qué son estos programas, cuáles son sus características, qué daños pueden causar, y cómo podemos combatirlos, así como algunas medidas de seguridad para prevenirlos, o minimizar sus efectos. Hasta la próxima entrega.

12 de julio de 2005

¿Qué tipo de desarrolladores queremos formar?

Pensando un poco en mi post titulado "¿Qué tipo de desarrollador quieres ser?", me vinieron a la mente algunos recuerdos. La pasada semana del 20 al 24 de Junio, asistí a la semana MoProsoft organizada en la Ciudad de Mexicali, B.C., dónde se presentaron diversas pláticas y mesas de discusión relacionadas con el desarrollo de software en méxico, donde participaron personas de la industria, academia y gobierno. Así también, durante esta semana, tuvimos la fortuna de asistir al taller de MoProsoft impartido por su principal creadora: la Dra. Hanna Oktaba.

Dentro de las mesas de discusión, surgió un tema que ha sido de interés para la comunidad de ingeniería de software en México durante los últimos años, el cual se relaciona con la formación de recursos humanos en el área de ingeniería de software. Esto surgió de una inquietud expresada por los estudiantes que participaron en el evento, quienes se encuentran preocupados porque en las escuelas se les enseñan cosas que las empresas no requieren, y lo que las empresas requieren, no se les enseña. Creo que este es el clásico tema de la falta de entendimiento entre lo que es importante para la industria, y lo que es importante para la academia.

Un punto interesante que salió a discusión, se relacionaba directamente con el desarrollo de software, y en particular, con la programación. Los estudiantes se quejaron de que se les "enseñaban" muchos lenguajes de programación, pero no los que la industria requería; los empresarios se quejaban de qué los egresados no sabían programar; mientras que los académicos argumentaban que se trataba de formar a los alumnos, no capacitarlos en un lenguaje específico, o como programadores para cierto sector (esto puede dar para una amplia discusión sobre qué vamos a considerar como formación, y qué sobre capacitación; y más aun, qué parte le corresponde aportar a la academia, qué a la industria, y qué a los mismos estudiantes).

En mi experiencia personal, creo que todos tienen algo de razón en sus argumentos. Una licenciatura o ingeniería no es un curso de capacitación, sino de formación. Además, desde el punto de vista de la programación, un académico no se puede casar con un lenguaje de programación o tecnología específica, ya que esta cambia constantemente, y diferentes empresas pueden requerir diferentes tecnologías. Por lo tanto, el objetivo no es enseñar un lenguaje, sino enseñar a programar. Por ejemplo, durante mi carrera de Ingeniero en Sistemas Computacionales, me "enseñaron" a programar en Cobol, Pascal, y finalmente C (aunque aprendí a programar en C antes de que me dieran el curso, y con mayor profundidad que lo que pude haber aprendido en clase). Sin embargo, durante ese tiempo Cobol era un lenguaje prácticamente extinto, y con una lógica que difícilmente nos pudiera servir posteriormente para aprender otro. En fin, aun cuando llevé estos tres cursos de programación, creo que donde realmente aprendí a porgramar (diseñar e implementar estructuras de datos y algoritmos un poco complejos) fue en el curso de programación de sistemas donde debimos desarrollar un compilador, pasando por todas las faces (análisis de léxico, semántica, manejo de variables locales y globales, reutilización de variables temporales, generación de código intermedio, ensamblador, y finalmente executable). Cabe hacer mención que este aprendizaje fue principalmente autónomo, y con un lenguaje diferente a los que vi en clases (Delphi para ser exacto). Creo que la dificultad que implicaba el desarrollo completo de un compilador, fue lo que realmente me ayudó a aprender a programar, buscando la manera de implementar algoritmos y estructuras de datos para poder llevar a cabo las distintas etapas del compilador.

Lo anterior fue lo que me ayudó a empezar a trabajar como desarrollador al salir de la carrera, aún cuando debí utilizar un lenguaje que nunca había usado antes (FoxPro). Esto fue lo que me hizo ver que no importa mucho qué lenguaje se utilice en un aula mientras que realmente se enseñe a programar. Sin embargo, creo que la academia constantemente falla en este punto, dado que por el afán de que los estudiantes tengan un espectro más amplio, se pierde mucho tiempo enseñando diferentes lenguajes sin profundizar en ellos, es decir, sólo se desarrollan programas sencillos para ejemplificar el funcionamiento de la sintaxis y semántica del lenguaje, más no para resolver problemas por medio del diseño y desarrollo de algoritmos y estructuras de datos. Más aun, cada profesor trata de ver las cosas según su punto de vista particular, y no se conjugan los esfuerzos en pro del bien de los egresados.

Considero que por el bien de los futuros ingenieros de software, es necesario que los académicos empecemos a ponernos de acuerdo para encaminar los esfuerzos hacia un mismo destino, y no que cada quién trate de llevar agua a su molino. En el caso del desarrollo de software, tenemos que empezar a pensar en qué tipo de desarrolladores queremos formar.

7 de julio de 2005

Los roles del desarrollo de software

En una serie de artículos en la revista electrónica developer.com, Robert Bogue trata sobre los diferentes roles involucrados en el desarrollo de software, ininciando con su artículo: "Cracking the Code: Breaking Down the Software Development Roles". Creo que es una serie de artículos interesantes sobre todo para los que se hayan involucrados con el desarrollo de software.

¿Qué tipo de desarrollador quieres ser?

¿Cuál puede ser la clave para el éxito de un desarrollador de software?, ¿ser un todólogo, o un especialista?. Por lo general, cuando uno se dedica al desarrollo de software, su interés se centra en poder ser capaz de desarrollar cualquier tipo de aplicación. Sin embargo, como Robert Bogue lo trata en su artículo "The Many Faces of a Developer", quizá la clave para el éxito sea convertirse en un desarrollador especialista. Si consideramos el crecimiento acelerado dentro de la industria del software, tener claro este punto puede ser más que importante. Constantemente nacen nuevos métodos, técnicas y herramientas para desarrollar software, así como nuevos tipos de aplicaciones. Por lo tanto, pensar que podemos llegar a ser expertos en todo puede ser sólo un sueño guajiro. Esto nos lleva a pensar: ¿es conveniente seguir tratando de conocer todo por encima, o ser especialista en ciertos tipos de aplicaciones, herramientas de desarrollo, lenguajes, etc.?