Ingeniería de Software != Computer Science

En un largo e interesante artículo escrito por Chuck Connell, que tiene el mismo título de este post, el autor señala varios puntos que indican que el desarrollo de software nunca será una disciplina completamente formal y rigurosa. La razón de que esto sea así es que la ingeniería de software incluye a lo seres humanos como parte central del proceso. Desde esa perspectiva el desarrollo de software estaría más próximo a una ciencia social como la economía que a una ciencia exacta.

El artículo de Connell para Dr. Dobb’s puede ser encontrado en este URL, pero debido a su importancia he decidido traducir las partes más resaltantes del mismo, para los lectores de este blog.

Hace pocos años, yo estudie Algoritmos y Complejidad. El campo es maravillosamente claro, con cada concepto claramente definido y cada resultado construido en demostraciones anteriores. Cuando usted aprende un hecho en esta área, usted podria llevarlo al banco, desde que la matemática debería ser inconsistente para hacerle cambiar de dirección de lo que usted ha aprendido. Aún los resultados imperfectos, como las aproximaciones y los algoritmos probabilisticos, tienen un analisis riguroso sobre sus imperfecciones. Otras disciplinas de Computer Science, como la topología de redes y la criptografía tambien gozan de un estatus similar.

Ahora trabajo en Ingeniería de Software, y esta área es desesperante resbaladiza. No hay Conceptos definidos con precisión. Los resultados son calificados de "usualmente" o "en general". La investigación realizada hoy en día podría, o no, ayudar en el trabajo futuro. Nuevos enfoques a menudo revocan los métodos anteriores, con los nuevos enfoques brillando claramente por un tiempo para luego pasar de moda cuando sus limitaciones surgen. Creíamos que la programación estructurada fue la respuesta. A continuación, pusimos nuestra fé en los lenguajes de cuarta generación y, a continuación, los métodos orientados a objetos y, a continuación, la programación extrema, y ahora tal vez el modelo open source.

Pero la ingeniería de software es donde la llanta se une a la carretera. Pocas personas prestan atención de si P es igual a NP sólo por la belleza de la cuestión. El campo de Computer Science es hacer cosas con las computadoras. Esto significa escribir software para resolver problemas humanos, y que dicho software se ejecute en máquinas reales. Por la Tesis de Church-Turing, todos las computadoras son esencialmente equivalentes. Así, mientras que la nueva arquitectura de una máquina es novedosa, el verdadero reto que restringe a Computer Science es el problema de la creación de software. Necesitamos software que pueda ensamblarce en un monto de tiempo razonable, por un costo razonable, que trabaje de la forma como esperamos, y funcione con pocos errores.

Con estos objetivos en mente, algo que siempre me ha molestado (y a muchos otros investigadores) es: por qué no podemos tener resultados más rigurosos con la Ingeniería de Software, como las otras ramas de la Computer Science? Reformulando la pregunta de otro modo, "Cuánto del software diseñado y construido puede ser formalizado y probado?". La respuesta a dicha pregunta reposa en la siguiente figura:

Figura 1

Los temas por encima de la línea constituye la ingeniería de software. Las áreas de estudio por debajo de la línea son las materias básicas de Computer Science. Estos últimos temas son claros y de resolución formalizada. Para las preguntas aún abiertas en estos temas, esperamos que los nuevos resultados también sean formalizados. Estos temas se basan entre sí – la criptografía de la complejidad, y compiladores en algoritmos, por ejemplo. Además, creemos que demostrado resultados en estos ámbitos, los resultados seguirán siendo válidos por los próximos 100 años.

Entonces, ¿qué es que esa línea brillante y por qué ninguno de los temas de ingeniería de software está debajo de ella? La línea es la propiedad que "implica directamente la actividad humana". La ingeniería de software tiene esta propiedad, mientras que la Computer Science tradicional no. Los resultados de las disciplinas por debajo de la línea pueden ser utilizados por las personas, pero sus resultados no son afectados directamente por las personas.

La ingeniería de software tiene un componente humano. La mantenibilidad del software, por ejemplo, es la capacidad de las personas para comprender, encontrar y reparar los defectos de un sistema de software. El mantenimiento de software puede ser influenciado por algunas nociones formales de Computer Science – quizás la complejidad ciclica de los gráfos de control de software. Pero la mantenibilidad fundamentalmente implica humanos, y su capacidad para comprender el significado y la intención del código fuente. La cuestión de si un determinado sistema de software es altamente mantenible no puede ser respondida sólo por el examen de la mecánica de software.

[…]

Esta observación conduce a la tesis de Connell:

     Ingeniería de software nunca será una disciplina rigurosa con resultados probados, ya que implica la actividad humana.

Se trata de una declaración extra-matemáticas, acerca de los límites de los sistemas formales. Yo no ofrezco ninguna prueba del enunciado previo, aunque no hay pruebas de que no existe ninguna prueba. Pero el hecho es que las cuestiones centrales de la ingeniería de software son las preocupaciones humanas:

     * ¿Qué debe hacer este software? (requisitos, usabilidad, seguridad)
     * ¿Qué debe tener el software dentro de, por lo que es fácil de fijar y modificar? (arquitectura, diseño, escalabilidad, portabilidad, extensibilidad)
     * ¿Cuánto tiempo se tarda en crear [el software]? (estimación)
     * ¿Cómo debemos construir [el software]? (codificación, verificación, medición, la configuración)
     * ¿Cómo debemos organizar el equipo para trabajar con eficiencia? (gestión, proceso, documentación)

Todos estos problemas giran en torno a las personas.

Luego de la presentación de su hipótesis Connell procede a discutir detalladamente por qué método considerados formales en la Ingeniería de Software como COCOMO II o el CMMI, no producen resultados confiables pues se basan en tratar de sacar fuera de una ecuación matemática formal, el comportamiento humano que está intrínsicamente envuelto en los procesos que pretende modelar.

Realmente es un magnífico paper sobre Ingeniería de Software y recomiendo la lectura completa del mismo a todos los estudiantes de Computer Science, Informática o ramas afines envueltas en el desarrollo, despliegue, gestión y mantenimiento de sistemas de software.

Reparando Windows con Linux

Buscando utilitarios para reparar una partición de Windows 2003 dañanda luego de un hard reboot, me encontré con un interesante LiveCD de Linux llamado Trinity Rescue Kit (TRK) que booteando desde una memoria Flash USB, un CD/DVD o sobre la red usando el protocolo PXE, permite reparar una partición de Windows dañada, o hacer una copia de los archivos a otro dispositivo ya sea localmente o a través de la red (incluso da la opción de clonar toda una partición a través de la red). Funciones adicionales incluídas en el TRK son resetear el password del administrador de un Windows, buscar virus en todas las particiones detectadas, redimensionar el tamaño de particiones windows y recuperar particiones borradas.

En suma TRK es una interesante navaja suiza en caso se desee reparar una partición windows (2000/2003/XP/Vista). He usado la versión estable 3.2-build-279, hay un Release Candidate 3.3 pero no recomiendo el uso todavía especialmente si deseamos recuperar datos importantes, es mejor usar la última version estable. En caso de que necesiten reparar una partición Vista no tendran más opción que usar el RC 3.3 que aún esta en fase beta.

Pueden descargar TRK desde este mirror.

Luego del arranque el TRK inicia en modo root sin password, pero como espera encontrar un servidor DHCP si Ud. no cuenta con uno en su red (esto es lo usual en un data center), debe usar el script "setip" para configurar la red y poder acceder a Internet. Para montar todas las particiones del sistema en el que ha booteado debe usar el script  "mountallfs", pero antes de utilizar cualquier herramienta para reparar una partición debe estar seguro de que no hay particiones montadas, sino puede dañar los datos en las mismas, para ello use el comando "umountallfs".

Espero que estos tips les hayan sido de utilidad.

Interesante proyecto de robótica

En su blog Jeremy Blum, nos describe su proyecto de una ametralladora centinela Nerf, el cual ha sido realizado para el curso Introducción a la computación usando Matlab y robótica de la Universidad de Cornell. El proyecto del cual incluye fotos, videos, esquemas y código fuente en su blog consiste en usar una webcam USB común y corriente que permita identificar a alguien que entra en una habitación y si este no cuenta con una identificación entonces la ametralladora Nerf suelta una lluvia de dardos sobre el visitante desconocido.

Puede que a muchos no les llame la atención este proyecto, o tal vez no le encuentren utilidad. Pero a mi he hizo recordar la razón de por qué estudie ingeniería mecánica-electrica, quería construir el arma que revolucionaría la guerra convencional tal como la conocemos. Sin embargo las necesidades de la vida me hicieron seguir otro camino, pero aún esa pasión por desarrollar mecanismos o cualquier forma de robot con aplicaciones militares sigue viva dentro de mi corazón aunque sepultada por toneladas de trabajo diario relacionado con tener funcionando un puñado de servidores de la empresa donde trabajo, del cuál depende mi sustento y el de mi familia.

Ver proyectos como este, desarrollador por gente tan jóven, me hacen tener esperanza de que no todo está perdido, de que no todos los jóvenes están preocupados por twittear su última borrachera desde su iPhone, y de que el futuro de la tecnología está garantizado.

Aquí les dejo el video de la ametralladora centinela robot desarrollada por Jeremy Blum y Jason Wright.
 
 

 
 

Google busca respuestas a su fuga de cerebros

Para nadie es un secreto que Google ha tenido problemas últimamente para poder retener valiosos miembros de su personal que han dejado la compañía, el día de hoy The Wall Street Journal le dedica un artículo al tema y describe las estrategias seguidas por Google para tratar de resolver este problema:

"Preocupado porque la fuga de cerebros pueda dañar la viabilidad de la compañía en el largo plazo, Google esta pleneando atacar el problema con su herramienta típica: un algoritmo.

El gigante de las búsquedas en Internet está procesando los números de sus empleados, revisando promociones e historial salarial en una fórmula que Google afirma puede predecir cuál de sus 20,000 empleados tiene mayores probabilidades de renunciar a la empresa.

Google oficialmente se resiste a compartir los detalles de dicha fórmula, la cual esta aún en proceso de prueba. La entrada de información incluye desde encuestas a entrevistas individuales, y Google dice que el algoritmo ya ha identificado empleados los cuales están subutilizados, una queja clave entre aquellos que contemplan dejar la compañía.

Aplicar una compleja ecuación a un problema cuya base son los recursos humanos es típico de Google, una compañía que ha estado usando el análisis de gran cantidad de datos para tomar decisiones, una de sus "Diez reglas de oro" proclamadas en el año 2005.

Edward Lawler, director del Centro para Organización Efectiva en la Universidad del Sur de California, dijo que Google es una de las pocas compañía que haya adoptado más temprano una aproximación cuantitativa al proceso de selección de personal.

"Ellos están claramente a la cabeza del grupo, pero un gran número de compañías están aceptando el hechos que existe un serie de modelos que pueden proveer a la empresa con información crítica sobre su capital humano", dijo Mr. Lawler.

La serie de acciones tomadas por Google han servido para impedir que sus más prominentes ingenieros, diseñadores y ejecutivos de ventas dejen la compañía en un momento cuando su alguna vez poderosa organización (una atmósfera de start-up con precios de acciones en las nubes) se ha ido diluyendo con su aumento de tamaño. En adición al análisis de los datos, Google esta aplicando también medidas más tradicionala como capacitación a sus empleados y reuniones de liderazgo para evaluar talentos.

El algoritmo desarrollado por Google ayudará a la compañía a "ponerce dentro de la mente de las personas antes de que ellos sepan que deberían renunciar", dijo Laszlo Bock, quien dirige los recursos humanos en Google.

La preocupación sobre el éxodo de talentos ha revivido en semanas recientes con la partida de altos ejecutivos, incluyendo el jefe de ventas de publicidad Tim Armstrong y el jefe de muestra de anuncios David Rosenblatt. Mientras, empleados de rango medio como el líder de diseñadores Doug Bowman, el director de ingenieros Steve Horowitz y el jefe de calidad de búsquedas Santosh Jayaram continuan partiendo para start-ups de moda como Facebook Inc. y Twitter Inc.

Empleados y ex-empleados de Google dicen que la compañía esta perdiendo talento porque algunos empleados sienten que ellos no pueden tener el mismo impacto con la compañía madura. Varios dicen que Google provee un plan de carrera poco formal, y algunos encuentran el programa de recursos humanos de la compañía muy impersonal.

Matt Furman, vocero de Google dijo que la única oportunidad para contrinuir a que "las sorprendentes y constante innovaciones" continúen es mantener comprometidos a los empleados. La compañía esta determinada a retener a los más capaces gerentes de producto e ingenieros

Google no podría decir cuantas personas dejaran la compañía, pero si podemos administrar las renuncias de los más importantes miembros del personal. "Nosotros no hemos visto que las personas claves hayan dejado la empresa", dijo Laszlo Bock "

YouTube en su Chipod

ChipodEl término Chipod (Chinese iPod) es usado para referise a todos aquellos productos en su mayoria de origen chino que intentan imitar al famoso producto de Apple iPod. Algunos logran replicar exitosamente la forma externa, que hasta podría engañar al ojo experto. Sin embargo la diferencia salta a la vista cuando se opera el dispositivo, ya que el firmware de los mismos carece de la usabilidad del producto que pretende imitar.

Los Chipod se han caracterizado en los últimos años por ser comercializados con memorias Flash que han sido hackeadas para mostrar un tamaño superior a la real, así equipos con sólo 1 GB eran vendidos como equipos de 4 GB u 8GB. Sin embargo la contínua caída de los precios de las memorias Flash ha hecho que estos dispositivos ofrescan ya sus valores reales. Es así que podemos ver Chipods con 2GB de memoria en el rango de precios de los $20 a $30.

Como todo producto que pretende ganar mercado, en adición a la funcionalidad de reproducir el popular formato de audio MP3, los Chipod ofrecen a la vez otras funcionalidades como visualizar archivos gráficos (GIF, JPEG), sintonizar estaciones de radio FM y servir como grabador de audio. Pero tal vez la característica que más atrae al público es su capacidad de reproducir videos, es por ello que algunos suelen referirse a estos productos como "MP4 Players", aunque lo cierto es que la gran mayoría de Chipod no puede reproducir el formato MP4, sino otro formato propietario llamado AMV. La razón es simple el chip usado en la fabricación de estos dispositivos polifuncionales de bajo precio no posee el poder suficiente para decodificar archivos con formato MP4.

Dado que estos dispositivos son ampliamente populares actualmente y que el software que traen en el CD que suele acompañar al producto está sólo disponible para Windows y ofrece una funcionalidad limitada (convierte solo AVI o MPEG a AMV). Y por otro lado la casi universal aceptación de YouTube para buscar videos, es que decidí iniciar un proyecto personal para ofrecer la conversión directa de videos de YouTube, que suelen estar en formato FLV al formato AMV que usan la mayoría de Chipods. De esa forma en un sólo paso y usando un navegador cualquier usuario podría poner contenido en su Chipod, independientemente del sistema operativo que utilice.

La idea es simple, Ud. solamente copia el URL del video que desea convertir en la caja de texto, selecciona la resolución de la pantalla de su Chipod, hace click en convertir y luego de unos minutos se le ofrece un link desde el que puede descargar el archivo AMV que puede ser copiado en su Chipod. Aunque el sitio está aún en fase de prueba (beta), he decidido hacer público mi proyecto FLV2AMV, para recibir sus comentarios y sugerencia de cómo mejorar el servicio. Además si la idea prospera podría convertirlo en un Startup.

Quedo a la espera de sus sugerencias, comentarios y críticas. A la vez que espero esta idea les sea de utilidad.