Si analizamos el proceso de desarrollo de software para simulación o cualquier aplicación científica podemos distinguir varias características comunes:
- Son proyectos no demasiado largos y en los que participan un número limitado de personas.
- Lo verdaderamente importante es la relación entre el tiempo completo del ciclo de desarrollo y el esfuerzo dedicado.
- No requieren el uso de bibliotecas exóticas y las aplicaciones auxiliares siempre son las mismas (principalmente las de análisis de datos y representación gráfica)
- Los integrantes no tienen una buena formación teórica sobre metodología o técnicas de programación.
- La documentación del código que se escribe es deficiente o inexistente.
- El jefe del proyecto suele dar libertad a los integrantes en lo que respecta a patrones y estándares.
- Un diseño correcto suele sacrificarse en favor de una aplicación eficaz producida en el menor tiempo posible.
- Necesitan el reciclaje de gran cantidad de código escritos en dialectos obsoletos de lenguajes compilados (Fortran 77, COBOL, Pascal...) y lenguajes no tan apropiados para la programación científica (C, ADA, java...)
Todas las dudas que estas características pueden generar en lo que respecta a la elección del lenguaje se disuelven en el momento en el que el la ejecución requiere un coste computacional exagerado. Es el caso de las simulaciones en mecánica de fluidos computacional o construcción de proteínas. El lenguaje escogido pasa a ser inmediatamente Fortran o C.
Cuando esta limitación no es tan acusada o directamente es inexistente la elección del lenguaje y de las herramientas de programación debe hacerse con un abanico mucho más grande de opciones. El motivo es la entrada en escena de los lenguajes interpretados, mucho más lentos en su ejecución pero con un recorte significativo del tiempo de desarrollo; además de otras ventajas como el hecho de ser más fáciles de aprender.
El lenguaje ideal debe contar con las siguientes características:
- Que tenga una sintaxis clara y estricta que genere pocos errores.
- Que sea un entorno de desarrollo integrado y homogéneo
- Que sea lo suficientemente polivalente como para soportar varios tipos de programación (modular, orientada a objetos...)
- Que posea generadores automáticos de interfaces para comunicarse fácilmente con subrutinas escritas en otros lenguajes de programación.
- Que esté bien documentado, preferiblemente con documentación tanto impresa como online.
- Que sea multiplataforma para que el desarrollo no esté sujeto a un único sistema operativo.
Durante muchos años el único lenguaje que cumplía satisfactoriamente todos los requisitos era Matlab. El problema de Matlab es su alto precio y las grandes inconsistencias de su sintaxis.
1∞. Estos factores unidos a un lenguaje de programación ya de por si limitado y poco polivalente hacían de él la opción menos mala para un entorno de desarrollo científico.
Otras alternativas como Mathematica e IDL nunca han llegado a los índices de popularidad de Matlab. Octave, su alternativa proveniente del software libre, es un proyecto interesante pero con una carencia importantísima de mano de obra, sobre todo para arreglar grandes defectos que lo anulan como opción real en el entorno empresarial
2∞. Sin embargo es software libre y su uso es recomendable en tareas no muy críticas.
Python parte desde un punto diametralmente opuesto al de Matlab. Matlab empezó como una colección de funciones sin un lenguaje de unión mientras que Python es un gran lenguaje que no contaba con funciones para su uso en matemáticas. Primero fue Numerical Python la librería que dio al lenguaje la posibilidad de manipular arrays, luego llegó su fallido sucesor numarray y en la actualidad scipy_core ha tomado el relevo. Con un poco de esfuerzo y cabeza Python puede llegar a convertirse en el lenguaje más utilizado para la programación de pequeñas aplicaciones de simulación.
Esto no siginfica que Python sea un remplazo para Matlab, esta no es ni mucho menos su misión. Python es un lenguaje de programación completamente independiente que aunque soporta muchos tipos distintos de programación debe afrontarse con una actitud abierta. Uno debe ajustar Python a sus necesidades en la misma medida que debe ajustar su estilo a Python.