¿Cuántos lenguajes de programación debe dominar un estudiante?

Lenguajes de programación que necesita aprender un estudiante
Lenguajes de programación que necesita aprender un estudiante

A la mayoría de los estudiantes universitarios se les enseña, “por lo general”, un solo lenguaje de programación en detalle, con una profundidad “comprensible” y con prácticas que siempre tienen sabor a poco. Eso limita al estudiante cuando se expone a la sintaxis de lenguajes diferentes, y esa limitación también se percibe en el enfoque que adopta respecto a la solución de problemas diversos, en su desempeño como profesional al terminar los estudios. Dicho en otras palabras, cualquiera sea el problema a resolver, la disponibilidad de recursos siempre estará limitada al aprendizaje capitalizado. Cuando la enseñanza intenta abarcar varios lenguajes de manera superficial, la confusión generalizada termina siendo una constante obligada. Por lo tanto, para ti, ¿cuántos lenguajes de programación necesita dominar en profundidad un profesional?

Cada lenguaje tiene un propósito particular

Cada lenguaje de programación fue diseñado, originalmente, para un propósito específico. Por este motivo, tiende a promover una forma de “atacar” los problemas de manera muy propia, muy particular, y del mismo modo esa “manera muy propia” se lleva adelante en la solución de un problema. La comprensión de un solo lenguaje promueve soluciones que solo se acercan a un problema desde una sola perspectiva. Saber varios te permitirá mirar el problema desde una variedad de perspectivas, donde podrás comparar entre múltiples opciones de desarrollo, y la solución para el problema podrá ser seleccionada como la más natural, sencilla y eficiente.

La metáfora del martillo y el destornillador

Imagínate, por ejemplo, que todo lo que tienes en tus manos es un martillo. En este caso, tanto los clavos como los tornillos se insertarán siempre bien con ese martillo, porque aprenderás a hacer eso: a utilizar ese martillo para resolverlo todo. Sin embargo, si también tienes un destornillador, entonces tendrás una solución alternativa para la inserción de los tornillos. De este modo podrás seleccionar la mejor herramienta para cada tarea en particular. Del mismo modo, los lenguajes de programación están diseñados para resolver cualquier clase de problemas mediante una metodología específica, y cada uno alienta a los estudiantes (como tú) a mirar el problema desde una perspectiva particular. FORTRAN, por ejemplo, fue diseñado para ayudar a resolver problemas matemáticos, por lo que puede ser un lenguaje ideal para la solución de un problema puramente matemático. COBOL fue diseñado para ayudar en la forma de almacenamiento de los datos requeridos por cualquier tipo de negocio y su manipulación.

Algunos lenguajes y sus propósitos

El lenguaje C (originalmente) fue creado para ayudar en la implementación de sistemas operativos (UNIX) y, además de permitir construir aplicaciones específicas, tiene características particulares que le permiten acceder o manipular el hardware del sistema de proceso donde se utiliza. C++, por su parte, fue diseñado para resolver problemas específicos dentro del lenguaje C, con el agregado de permitir el soporte de programación orientada a objetos. Es decir, posee una mezcla de capacidades que permiten resolver problemas, además de brindar un apropiado apoyo metodológico. El lenguaje de programación Ada tiene como objetivo proporcionar un funcionamiento fiable, con particular énfasis en las áreas de seguridad, donde se pueda tener una rápida escalabilidad y facilidad de mantenimiento. El lenguaje Java fue desarrollado para proporcionar también apoyo metodológico orientado a objetos y una sencilla portabilidad. Los lenguajes de Script están, en general, diseñados para permitir soluciones muy rápidas a problemas pequeños. De este modo, la lista de lenguajes de programación y sus características propias se podría expandir hasta ocupar toneladas de caracteres. Sin embargo, lo que el artículo intenta reflejar es que aprender en forma eficiente una variedad de lenguajes de programación te permitirá a ti y a cualquier estudiante analizar las ventajas y/o desventajas de cada uno a la hora de resolver un problema específico.

Listas estáticas y listas dinámicas

Un ejemplo muy sencillo para expresar este pensamiento es el de las listas de elementos dentro de un programa (por ejemplo, un listado con todos los microcontroladores que posees). En el universo posible de soluciones a un problema, podríamos considerar todas las listas como un conjunto de objetos estáticos que debe tener un número fijo de elementos, o bien como objetos dinámicos que no tienen límites de cantidad. Cualquiera de estas elecciones podría ser (o no) una solución natural para el problema. Por ejemplo, las listas estáticas requieren que el número máximo de elementos se conozca de antemano. Si el número de elementos es un valor fijo durante toda la ejecución del programa, la cantidad de almacenamiento necesaria y utilizada para manipular esta información será invariable y estará disponible de forma fiable, ya que tendremos un conocimiento previo de su dimensión. Sin embargo, si el número de artículos (o elementos de la lista) no se conoce de forma previa, o sufre variaciones durante la ejecución del programa, el programador tendrá que seleccionar un tamaño máximo que quizás sea mucho más alto que el número probable de artículos. Así, el espacio de almacenamiento puede ser inútilmente gastado en la asignación de una variable demasiado grande, solo por prevención de errores.

Vale decir entonces que las listas dinámicas “se crean en tiempo de ejecución”. Si el número total de elementos que se almacenan no se conoce de forma previa, quizás esa sea la manera ideal de resolver y trabajar el problema. Sin embargo, por su propia naturaleza, las listas dinámicas pueden crecer en tiempo de ejecución y, por lo tanto, los recursos que necesitan siempre son desconocidos; quizás se produzca una condición de error si la memoria disponible se agota durante la ejecución del programa. Este inconveniente, en ocasiones, puede ser imposible de demostrar antes de la ejecución del programa, especialmente para los sistemas integrados con capacidad de memoria limitada, como puede ser un microcontrolador. De este modo, podemos ver que una simple lista de componentes puede originar problemas si los lenguajes que creemos dominar en forma sólida no tienen la posibilidad de ofrecernos las herramientas elementales para realizar el trabajo.

Conclusión: una caja de herramientas

Los lenguajes de programación, por lo tanto, deben considerarse en forma análoga a una caja de herramientas. Cada lenguaje es una herramienta que ayudará a resolver un tipo de problema. Al comparar la solución que ofrece cada herramienta, un estudiante puede seleccionar entre estas soluciones y decidir cuál es el mejor método para resolver el problema en cuestión. Como mencionamos al comienzo, el martillo se utilizará para el clavo y el destornillador para el tornillo. Este ideal de selección de la mejor solución para cada problema solo estará disponible si un estudiante ha estado expuesto a múltiples formas de ver el problema, teniendo la posibilidad de optar por múltiples herramientas de programación. Los estudiantes deben tener la comprensión de una amplia variedad de lenguajes. De este modo, encontrarán soluciones a problemas de diferentes áreas contando con una amplia variedad de herramientas que necesitarán para triunfar en la vida, después de la universidad. Según tu opinión personal, ¿cuántos lenguajes de programación necesita dominar en profundidad un profesional antes de salir al mundo laboral? ¿Existen lenguajes esenciales? Esta realidad, ¿cómo ha sido en tu caso? Cuéntanos.

Fuente: