viernes, mayo 20, 2005

Costo de desarrollar software

La gente que se dedica a "crear sistemas" asegura que el producir software es muy caro, y esto es un asunto que se ha tratado desde que se construyen sistemas de computo complejos.

La ingeniería de software nace como una forma de mitigar el problema que representa construir un sistema computacional grande, que tiene de manera intrinseca, gastos asociados a su producción. Y que cuando no se sigue una adecuada metodología de ingeniería de software, termina con un producto atrasado en tiempo, más caro que el costo inicial estimado, y de calidad cuestionable.

Sin embargo, con el paso del tiempo, la complejidad de los sistemas de cómputo se incrementó, aumentando los costos de producción, y el tiempo invertido en construir estas aplicaciones.

El recurso humano es uno de los recursos mas caros, y en el caso del desarrollo de software, el principal eje de producción; mientra que en la generación de algunos productos, solo se requiere personal especializado en alguna parte de la generación del producto, y en otras incluso se puede precindir de cualquier intervención humana; en el desarrollo de software, es necesario que los desarrolladores esten presentes durante toda la etapa de desarrollo, hasta que se tenga un producto terminado. Lo que significa tener contratado a un equipo de profesionistas, por todo el tiempo que lleve hacer el sistema que se necesite, que puede ser por años, y que se puede incrementar su costo si además es un equipo inexperto y poco disciplinado.

Casos como estos son el desarrollo de videojuegos, en donde un equipo puede trabajar en un proyecto por tres años

Existe además una característica peculiar que se presenta en el desarrollo de software, y es el hecho de que éste todavía se desarrolla de manera artesanal. En la industria de transformación, el tiempo se invierte en el análisis y diseño, una vez que se tiene, se pasa a la línea de producción, y se comienza a producir el producto de manera continua, mediante la producción en serie. Con el software, no solo se sigue un proceso de análisis y diseño, además se continúa con otras etapas , por lo que no se puede automatizar la generación del producto mediante una línea de producción. Aún cuando el producto a entregar ya se haya hecho con anterioridad.

Se ha creado ya software, que programa software a partir de las especificaciones del producto, situación que nace como una necesidad de tener una aplicación a tiempo y que funcione. Y la tendencia va por esta línea. Con lo que se pretende que en los próximos años se tenga solamente arquitectos de sistemas, que se enfoquen al análisis y al diseño, dejando la parte de la codificación a las computadoras.

Otra caraterística peculiar, es que el producto terminado no tiene un costo muy elevado de reproducción, a pesar de lo grande y complejo que puede llegar a ser, en contraposición con otros productos, en donde además del costo de diseño se tiene el costo de reproducción del modelo validado, que se mitiga mediante la producción en serie. Un ejemplo es que una aplicación lista para instalarse, su replica en cdrom se puede reducir a dos pesos (o menos) por cdrom, mientras que un producto como un electrodoméstico si tiene un costo mayor de reproducción.

El software libre es tan costoso como el propietario (incluso puede ser que en algunas aplicaciones su costo sea mayor, y en otras menor), pero este costo no es nota porque se distribuye entre los cietos de miles de voluntarios que aporta parte de su tiempo, en la elaboración de alguna de las muchas aplicaciones que conforma el mundo del software libre.

Además de que existen fundaciones, organismos, instituciones educativas y de investigación, algunos gobiernos y empresas que aportan fondos o recursos al software libre, como la fundación mozilla, que costea el desarrollo del navegador mozilla y de firefox entre otras. Y ésta es una de las razones (pero no la única) por las que en muchos casos el software libre se distribuye de manera gratuita.

Programación paralela y procesadores multinucleo

Hace días IBM dió a conocer que comenzará a distribuir máquinas con procesadores de varios nucleos; AMD también anunció que comenzaría a distribuir procesadores con doble nucleo, y por supuesto, INTEL ha hecho lo propio.

La ley de Moore establece que el poder de computo de los procesadores se puede duplicar aproximadamente cada 18 meses, ley que se ha cumplido durante los últimos años, y que aún es vigente, hasta que se alcance el límite electrónico permitido. Todo esto consecuencia de la miniaturización de componentes electrónicos.

De seguir con el mismo esquema, se llegaría a un punto en que ya no sería posible seguir aumentando la capacidad de cálculo de los procesadores, y por consecuencia, de las computadoras; por lo que desde hace varios años se realizan investigaciones para generar alternativas que permitan seguir aumentando la capacidad de cálculo de las computadoras.

Entre estas investigaciones estan los nanotubos de carbón, bioprocesadores (hibridos entre neuronas y electronica), computadoras biológicas (utilizando secuencias proteinicas para resolver problemas complejos), y las computadoras cuanticas (máquinas muy costosas que ya se utilizan en algunas partes del mundo).

Sin embargo, todas estas opciones se encuentran aun lejos del bolsillo del usuario común, por lo que se utilizan algunas alternativas menos sofisticadas para proseguir con el aumento de calculo de las computadoras, en lo que una solución "permanente" se logra acercar al público.

La alternativa presentada es que en una sola pastilla, en lugar de que se comporte como un procesador, contenga en su interior varias unidades de procesamiento, quitando de en medio el bus principal, y teniendo un bus dedicado, con lo que se aumenta el poder de cálculo de los procesadores, si hay más unidades de cálculo, el trabajo se distribuye entre las unidades que existan, y se termina antes el trabajo.

Esto tiene la consecuencia de que por lo menos a nivel de instrucciones en ensamblador, estas se programen en paralelo, lo que implica que o los compiladores serán reestructurados para que internamente generen codigo paralelo, o los programadores de estas nuevas máquinas tengamos que programar pensando en un esquema paralelo.

Esto no tiene ninguna novedad, desde hace años se utilizan máquinas que son multiprocesadores y la programación se realiza utilizando esquemas paralelos. Con la aparición de los cluster, las máquinas paralelas se han acercado a ambientes más generales; cualquiera que tenga el capital suficiente para tener tres computadoras, esta en la posibilidad de armarse una computadora paralela.

Creo que saber programar en paralelo, será una necesidad en un ambito particular, no necesariamente extendido a todo; pero aquellos que aun se tengan que ver con "los fierros" para obtener el mejor rendimiento de los "nuevos" procesadores. Así por ejemplo, para aquellos que programan interpretes o compiladores, sus productos necesariamente tendrán que contemplar e incluir las posibilidades que ofrecen estos procesadores.

NOTA: Esta es mi apresiación acerca del procesador CELL, si estoy errado, agradeceré los comentarios al respecto.

lunes, mayo 16, 2005

Feria de computo en C. U.

El sábado 14 de mayo tuve oportunidad de asistir a la feria de computo que se celebró en cd. Universitaria, la cual tuvo como propósito que los alumnos de prepas y de estudiantes de la UNAM pudieran obtener equipo de computo a un precio accesible.

He de decir que en cuanto a la organización por parte de los responsables de la feria, tuvo el error de no poner a disposición de los visitantes un lugar para estacionar sus vehiculos, por lo que para aquellos que llevaron automovil, se vieron en la necesidad de estacionarlo sobre la avenidad.

A excepción de este detalle, he de decir que por lo demás estuvo bastante bien organizada, desde los accesos, hasta el acondicionamiento para el evento.

En cuanto a contenido, no se cual fue la causa por la que hubo pocos expositores dentro de la feria; por lo que para aquellos que han ido a otras como la que se celebra cada año en el World Trade Center de la Cd. de México, seguro que se habrán descepcionado. Además de que a los participantes en la tienda no tuvieron oportunidad de llevar inventario, por lo que algunos productos no pudieron ser entregados inmediatamente.

Y a pesar de todo, aquellos visitantes que nos interesó algún artículo y lo pudimos comprar, nos encontramos con la agradable noticia de que los precios eran bastante accesibles, por lo menos en lo que tuve oportunidad de preguntar.

Espero que se realice anualmente, y que en la próxima oportunidad, existan mas expositores y que además permitan que haya almacen, para que esta feria progrese; realmente resulta útil y conveniente para la comunidad academica.

jueves, mayo 12, 2005

¿La gratuidad del software libre?

En la mayoria de los casos, el software libre se distribuye además sin un precio; es posible descargar varias distribuciones de la Internet sin pagar algun precio por el acceso y obtención de dicho software.

Por ello (más aun para la gente de habla inglesa), se ha hecho el mito que el software libre es software gratis.

El software libre no tiene porque ser gratis, en particular, en la GPL, no se estipula que el software que se libere bajo esa licencia, sea sin remuneración alguna. Sin embargo, creo yo que, la razón de que no se cobre por la mayoria del software libre (como por ejemplo el navegador firefox), es porque una de los compromisos que se adquiere cuando se libera bajo la GPL, es que además de la aplicación en binario (un ejecutable), se debe liberar el codigo fuente.

Luego entonces, si yo construyo una aplicación y cobro por ella, que además libero bajo la GPL; es probable que si mi aplicación es de interés, pronto algún desarrollador en alguna parte del mundo, la recompile y comience a distribuir un nuevo binario sin precio alguno. Y es perfectamente válido.

Es importante notar que aunque una distribución es gratuita, si tiene un costo asociado, que se trendría que calcular en función de las necesidades a cubrir, para desarrollar esa distribución en el mismo tiempo, con las mismas funcionalidades.

La gente que coopera en el software libre lo hace por ganancias que son resultado de participar en proyectos de éste tipo. Por ejemplo, yo regalo el software pero la asesoria modificiación y acondicionamiento de la aplicación la cobro. Es decir, hay ganancia derivada de los servicios que se prestan para un adecuado uso del software libre.

Hasta aqui se pudiera pensar que el software libre es entonces un caballo de Troya que genera dependencia, instalo software gratuito, pero luego me cobran por darle mantenimiento. Esto en realidad pasa con cualquier software y genera una dependencia mayor cuando se trata de software propietario.

En el caso del software libre, si no estoy de acuerdo con el servicio prestado por algun individuo o empresa, siempre puedo buscar a alguien más, y en el peor o mejor de los casos, recurrir a los diferentes lugares en la Internet donde abunda información. En el caso del software propietario, estoy atado a lo que disponga la empresa, y no siempre puedo cambiar.

martes, mayo 10, 2005

Un buen editor de texto

Para aquellos que nos dedicamos a la programación, un buen editor de textos es una de las herramientas más necesarias para el desarrollo de programas y aplicaciones.

En particular los IDE's ya traen su propio editor, pero cuando nos dedicamos a trabajar en varios lenguajes, es complicado cerrar un IDE para abrir otro, porque necesitamos trabajar con un lenguaje diferente.

Es cuando conviene tener un editor de textos que resalte sintaxis y que reconozca varios tipos de sintaxis asociados a diferentes lenguajes.

En un sistema operativo tipo *NIX, es común que los desarrolladores, utilicen vim o emacs para sus actividades, con las ventajas que desde el editor se puede invocar al compilador que se necesite; con lo que editas, compilas y corriges.

También existen para otros sistemas operativos