20 junio 2016

Ingeniería del software libre

En el contexto digital del siglo veintiuno, las tecnologías de la información y comunicación, se están convirtiendo en parte fundamental de la organización social. Estas tecnologías funcionan gracias a programas y aplicaciones que permiten la conectividad y el acceso, además del uso de la información y el conocimiento. En el libro de Winner, publicado el año 1987 con el título “La ballena y el reactor: Una búsqueda de los límites en la era de la alta tecnología”, se menciona que acercarse a estos programas, aplicaciones y sistemas implica tener control o no sobre la tecnología que se utiliza y sobre la información propia de las personas. Una época rica en información electrónica puede lograr maravillosas oportunidades sociales a cambio de meter a la libertad, quizás sin advertirlo, en un congelador.

En la tesis de maestría de Turner, publicada el año 2012 con el título “Software libre y abierto: Comunidades y redes de producción digital de bienes comunes”, se indica que la diferencia entre saber, más allá de lo que se puede ver, lo que ocurre en una computadora y no saberlo está en la posibilidad de tener acceso o no a todas las instrucciones que se encuentran detrás de las interfaces de los programas que se utilizan. Probablemente, no se tiene el conocimiento o la voluntad para leer y entender los códigos que le indican a la máquina lo que debe hacer, pero el asunto es si se tiene o no la libertad de aprender el lenguaje con el que es posible interactuar con las maquinas. Al hablar de software se hace referencia a aplicaciones computacionales; de manera más adecuada, se habla de códigos, de lenguaje de programación, de órdenes escritas de forma lógica que hacen funcionar de determinada manera lo que se observa en el monitor de la computadora o la pantalla del teléfono celular.

El Estándar 729 del Instituto de Ingenieros Eléctricos y Electrónicos, publicado el año 2003 en el “Glosario de terminología de la ingeniería del software”, indica que según las definiciones más formales, se entiende como software al conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación. Turner, en la tesis de maestría mencionada en párrafos precedentes, menciona que de esta manera software refiere, no sólo a las aplicaciones, tomando en cuenta su código fuente, archivo binario e interfaz gráfica, sino también a los sistemas operativos. En sí, se entiende como software aquellos programas de cómputo que hacen funcionar el hardware, es decir, la estructura física, material, tales como el monitor y el teclado de la computadora. Para simplificar la definición, se puede decir que software, es el conjunto de algoritmos que guían a los circuitos electrónicos para que hagan o dejen de hacer determinado proceso. Ostrom y sus colegas, en el artículo publicado el año 2007 con el título “Entender el conocimiento como un bien común. De la teoría a la práctica”, completa la idea señalando mientras que no siempre se considera la programación de computadoras como un esfuerzo científico, de hecho, el desarrollo de software es una forma de ciencia, y el software como producto es una forma de propiedad intelectual.

Turner, en la tesis de maestría mencionada en párrafos precedentes, señala que para que una computadora haga cualquier tarea, incluso “iniciarse” y pedir la identificación de usuario y la respectiva clave de entrada, necesita algún tipo de software. Actualmente, ya no es necesario saber algún lenguaje de programación para iniciar cualquier proyecto o aplicación, la computadora recibe las instrucciones para funcionar sin que las personan tengan que hacer aparentemente nada. Sin darse cuenta, las personas transmiten qué hacer al presionar los botones del ratón o las claves del teclado. Lo que se observa en la pantalla es una interfaz que presenta de manera “amable” y comprensible de las acciones encargadas a la máquina. Sin embargo, detrás de la interfaz las órdenes se generan en lenguaje lógico y son recibidas en lenguaje binario; es decir, se trata de software compuesto exclusivamente de ceros y unos.

En la tesis de maestría de Reingart, publicada el año 2014 con el título “Desarrollo rápido de software libre de alta calidad: Ingeniería de software asistida por computadora, enfocada en tareas, para agilizar el ciclo de vida de las aplicaciones, mediante mejora continua disciplinada a nivel personal”, menciona que si no se puede recortar el alcance y el presupuesto es limitado, para que los proyectos terminen en buen puerto quizás se deberían explorar otras alternativas, analizando desde el punto de vista del software libre: (1) Buscar nuevas tecnologías. Lenguajes dinámicos y herramientas de desarrollo más avanzadas permiten aumentar la productividad. Si bien en la mayoría de los casos la mejora no va a ser “espectacular”, sí se puede esperar un incremento del rendimiento entre tres y cinco veces, por lo que reduciría los tiempos lo suficiente, sobre todo comparados con un proyecto que use tecnologías “tradicionales”. (2) Reusar paquetes existentes. Seguramente haya algún proyecto de software libre con funcionalidades similares al que se debe desarrollar, la mayoría de las veces es mejor basarse en algo existente que “reinventar la rueda”. Solo con no desarrollar desde cero ya se gana bastante, por más que haya que dedicarle tiempo a estudiar el trabajo que realizaron otros. Además, contribuir con un proyecto de la comunidad generalmente es bien visto, ayuda a no cometer los mismos errores, e incluso puede llegar a recibir aportes externos. (3) Expertos. En lugar de aumentar el equipo, y suponiendo que se puede usar nuevas tecnologías, se podría buscar profesionales con experiencia. Ciertos autores indican que la diferencia de productividad y conocimiento entre los mejores programadores y la media es importante.

No hay comentarios:

Publicar un comentario en la entrada