ChemEng stuff followers

Lenguajes recomendados para programar (métodos numéricos)

  En la red puedes encontrar, por ejemplo, listas de los 10 lenguajes de programación que deberías aprender o de los 10 mejores, y cosas por el estilo. Desafortunadamente no todo lo que está en la red es oro ni todo lo que te llega es aplicable. En muchos casos, no siempre se responde la principal duda de un novato:

¿Cuál es el lenguaje de programación que debo usar/aprender?

Y no hay respuestas claras, porque cada caso es distinto. Es decir, todo depende. Digamos, si ya sabes hacia donde te dirigirás profesionalmente la elección es más sencilla. En otras palabras, primero debes definir ciertas cosas dentro de tu cerebro.

Caso #1

Si no eres bueno en las matemáticas; pero tienes creatividad y te gusta estar pegado a la computadora con los videojuegos, buscando las nuevas aplicaciones para celular. Es posible que debas orientarte a la programación orientada a objetos. De hecho hay plataformas gratuitas disponibles en la red y tutoriales que te permiten de marea rápida iniciar con algunos ejemplos prácticos, como Android Studio.

Sin embargo, si te vas directamente a Android Studio te darás cuenta que requieres aprender algo de Java. Afortunadamente también hay muchos tutoriales en YouTube por ejemplo y puedes ir buscando como resolver problemas puntuales en diversos foros  como Stack Exchange: Hot questions, por ejemplo.

Por supuesto que hay casos en los que requieras algo de matemáticas; pero lo interesante de esta vertiente es que el campo de aplicaciones es muy amplio y puedes siempre escoger involucrarte en aplicaciones que no usen tanta matemática.

Caso #2

Si eres ingeniero o estudias un posgrado relacionado con la ciencia básica o de alguna otra área; pero tienes ciertas bases de matemáticas y además te gusta programar o deseas involucrarte un poco más; entonces hay algunas recomendaciones que puedo hacer.

La verdad es que hay muchas opciones. Algunas son comerciales y otras son gratuitas. Algunas son más fáciles de usar (mucho mucho) que otras. Entonces, en vez de nombrar los programas y sus características, le haremos a la inversa.

2a Si sabes o has tomado algún curso de métodos numéricos en la carrera y no te fue tan mal, es posible que sepas como implementar uno de estos métodos (casi como una receta) con lápiz y papel. Digamos, sabes o tienes una idea de que resultados esperar cuando aplicas un método numérico; pero no te interesa desarrollar un programa e invertir tanto tiempo en algo que solo usarás quizá unas 20 veces. Si este es tu caso, lo que requieres es aprender un lenguaje de programación de alto nivel como: MAPLEMathematicaMatlab, por ejemplo. 

De estas 3 opciones debe decirse que:

  • todas son comerciales,
  • las primeras dos permiten manejo de expresiones algebraicas (cálculo analítico),
  • Matlab está mas enfocado a cosas numéricas.
Tanto MAPLE, Mathematica como Matlab pueden digamos implementar métodos numéricos sin mayor esfuerzo. Al interior, estos ya tienen subprogramas que hacen todo de manera muy confiable. Por otro lado:
  • son muy amigables (con colores),
  • aprendes a programar muy rápido,
  • tienen una ayuda muy completa y de fácil búsqueda,
  • sus comandos tienen sintaxis parecida.
y su desventaja principal es que ocupan muchos recursos de la computadora. Sin embargo; para cosas simples como:
  • hallar las raíces de un polinomio o de una ecuación trascendental,
  • resolver ecuaciones diferenciales ordinarias (numérica o analíticamente (solo MAPLE y Mathematica))
  • construir programas de cálculos repetitivos, entre otros
estos son muy buenas opciones. En estos programas, también es muy fácil encontrar errores, si los hubiera. También son muy confiables en cuanto al error numérico.

Debo decir que si tus necesidades implican programas extensos que pueden llegar a tardar dias en completar su ejecución y que consumen mucha memoria; entonces una laptop podría llegar a ser insuficiente. En estas últimas situaciones podrías requerir una workstation que esté ensamblada para esos fines.

Un último comentario. Yo sinceramente pienso que el futuro es para programas como MAPLE, Mathematica y Matlab. Digo esto porque cada año, los equipos de cómputo se hacen más sofisticados tal que permiten usar estos programas de rápida programación para aplicaciones más complejas tal que ya sería necesario programar en un lenguaje más cercano a las máquinas.

2B Si tu destino es un posgrado en el que parte de tu trabajo será tratar con ecuaciones algebraicas o diferenciales, seguramente requerirás usar estas experiencias el resto de tu vida profesional. De nueva cuenta, si tienes acceso a un equipo de cómputo robusto; entonces MAPLE, Mathematica y Matlab siguen siendo buenas opciones. Son fáciles de programar, controlan bien el error, puedes depurarlos fácilmente y te ahorras tiempo y esfuerzo.

Las 3 opciones mencionadas tienen buenas capacidades para hacer cálculos numéricos y pueden hacer gráficas muy presentables. Matlab, es el que quizá tenga mejores capacidades para hacer gráficos.

Existen otras situaciones muy particulares:
  • las capacidades computacionales que tienes son escasas y debes optimizar los recursos. Es decir, que tu computadora es un poco obsoleta,
  • MAPLE, Mathematica o Matlab simplemente consumen todos los recursos disponibles y no pueden completar el trabajo,
  • ya tienes disponible un programa que funciona; pero que está en otro lenguaje, por nombrar algunas.
Es posible que requieras entonces un lenguaje de programación de bajo nivel como Fortran o C. Estos programas no son tan amigables, aunque hay disponibles algunos visualizadores o editores (IDE) que ayudan bastante. Hay algunos gratuitos (antiguos) y algunos otros comerciales (los mas nuevos). 

Fortran y C no son fáciles de programar y su curva de aprendizaje está plagada de dificultades. Algunas de estas son:
  • si hay un error numérico, es un poco difícil detectarlo. Debes incluir en el código doble precisión o quadruple, si es necesario, y estructuras que te permitan manejar la propagación del error
  • un programa construido en una computadora podría no funcionar igual en otra
  • requieres usar un compilador cada vez que desees ejecutar el programa
  • debes ejecutar todo el programa y no lo puedes hacer por partes como en MAPLE, Mathematica o Matlab
  • incluso los cálculos más sencillos como el método de bisección por ejemplo, pueden requerir cierto tiempo de programación y aún así fallar o no ser exactos. Esto no ocurre en MAPLE, Mathematica o Matlab.
A pesar de todas estas dificultades Fortran y C son ampliamente usados por la comunidad científica. De hecho existen librerías que garantizan exactitud en muchos tipos de cálculos. De hecho MAPLE, Mathematica y Matlab tienen muchos comandos basados en estas librerías.

En otras palabras. Una vez que se tiene un poco de dominio sobre Fortran y C, estos ofrecen muchas ventajas sobre las 3 primeras opciones.

En la actualidad, el lenguaje de programación Phyton ha estado ganando adeptos. Es un lenguaje de programación relativamente sencillo; pero para cálculos numéricos avanzados depende de librerías construidas en Fortran y C. 

Finalmente, Fortran o C siguen siendo herramientas vigentes para problemas en los que los recursos son escasos y se requiere eficiencia en el tiempo de cómputo.

Si tienes alguna duda puedes dejar tu pregunta en los comentarios y te respondo tan pronto como pueda.

Ildebrando.

No comments:

Post a Comment

Most popular posts