language agnostic - programas - ¿Cuáles son los verdaderos desafíos para un desarrollador que migra entre los lenguajes de programación?
que lenguaje de programacion aprender (7)
Muchos desarrolladores afirman que pasar de un lenguaje de programación a otro es relativamente simple, especialmente si los lenguajes se basan en paradigmas similares. Sin embargo, en la práctica, el esfuerzo no proviene del aprendizaje de la sintaxis del idioma sino del desarrollo de una comprensión profunda de los matices del lenguaje y, lo que es más importante, del conocimiento de lo que se ofrece en las bibliotecas del lenguaje. Por ejemplo, cambiar de Java a .Net no es difícil desde una perspectiva sintáctica, pero la eficiencia de programación requiere un buen conocimiento de las bibliotecas disponibles. Cambiar de PHP a .Net podría presentar un obstáculo aún mayor dadas las disparidades lingüísticas.
¿Cuáles son los gastos generales reales para que un desarrollador se mueva a un idioma diferente en el mismo paradigma? ¿Qué pasa si los paradigmas son diferentes?
Al igual que aprender un nuevo idioma humano, para mí el mayor problema reside en las construcciones típicas que debe hacer para resolver un problema.
Sé que tal vez aprender los bucles "while" o "for" en varios idiomas no sea tan difícil, pero cuando su problema sube un nivel de abstracción (iterar a través de este conjunto), se encontrará usando "[" en lugar de " (" y viceversa.
La curva de aprendizaje puede ser aún más pronunciada si, además de aprender un nuevo idioma, debe aprender un nuevo marco. Cuando pasé de ASP.Net típica a MVC (usando NVelocity), me sentí un poco perdido: todo mi conocimiento sobre cómo resolver problemas típicos con el control asp.net tuvo que ser olvidado.
Finalmente, el mayor desafío ocurre cuando cambias de lenguajes con diferentes paradigmas, porque ya no puedes pensar de la misma manera para resolver un problema. Como - al pasar de C # a Prolog, en lugar de pensar en funciones, argumentos, jerarquía de clases, etc. ... tuve que pensar solo en estados, eventos vinculados a cambios de datos y encadenamiento de eventos por recursión, era una locura pero podía terminar mi tarea universitaria
El mayor desafío (para mí) suele ser la API, en lugar del lenguaje en sí (a pesar de .NET). Por ejemplo, he estado usando C ++ y C # de Microsoft durante muchos años (antes Delphi). Pero tengo una gran dificultad para comenzar con Java; incluso proyectos triviales pueden llevarme un tiempo. No porque el idioma sea difícil (no lo es), sino porque las API son diferentes y están organizadas de forma diferente.
Lleva meses obtener la velocidad de una API hasta el punto en que puede usarla con fluidez, y años para convertirse en "bueno" y aprender todos los pormenores del idioma. Eso es desalentador para muchos desarrolladores, porque básicamente tienes que dedicar una cantidad significativa (si no todo) de tu tiempo y esfuerzo a trabajar en el nuevo idioma para convertirte en un experto. Muchas veces, el incentivo para salir de su área actual de experiencia simplemente no está allí.
El mismo paradigma es mucho más fácil porque en realidad se trata simplemente de captar las distintas bibliotecas y ubicarlas rápidamente como lo mencionó.
Si los paradigmas son diferentes a este cambio, es más difícil. Pasar de un lenguaje estático a uno dinámico o de un procedimiento al lenguaje OOP requerirá un conjunto de ideas diferente. Esto llevará más tiempo, pero es posible y sigue siendo un muy buen ejercicio.
Puede ser similar al aprendizaje de idiomas extranjeros. Si hablas inglés, es mucho más fácil cambiar a otro idioma basado en el latín que ir a algo así como el griego.
Moverse dentro del mismo paradigma es relativamente fácil. Considero que el cambio entre Java y .NET es sencillo porque ambas plataformas ofrecen funcionalidades similares y bibliotecas similares. Pero cambiar los paradigmas podría ser un verdadero desafío.
A mis alumnos generalmente les cuesta mucho ir a los lenguajes funcionales y lógicos después de aprender Java, aunque la programación funcional y lógica es más fácil.
Otro problema es cambiar entre tipos de aplicaciones. Por ejemplo, si está acostumbrado a crear aplicaciones de escritorio en Java y de repente intenta construir aplicaciones web en .NET, el cambio es difícil porque no solo está aprendiendo nuevos idiomas sino también nuevos campos de programación.
Otro desafío es el conjunto de herramientas disponibles para un idioma en particular. Java y .NET tienen herramientas similares pero con algunas diferencias. Si aprendió a programar usando Visual Studio, entonces es posible que las características de Visual Studio se confundan con el lenguaje. Veo que los estudiantes tienen este problema todo el tiempo. Cuando se cambia a Java y no hay una opción de menú equivalente de asistente en el nuevo IDE, podría causar problemas.
Abogo por que las personas que aprenden programación aprendan los conceptos básicos del paradigma en lugar del lenguaje específico porque te hace más portátil en el futuro. Una persona que se sienta cómoda con Object Oriented Concepts tendrá más facilidad para alternar entre Java y .NET o Python que una persona que simplemente aprendió a programar en C #.
Para mí encontraría buenos bloggers y sitios útiles sobre el idioma. Después de un tiempo, puedes saber dónde están las mejores personas. Esas personas y sitios son buenas fuentes de información para aprender las sutilezas.
dejando tu zona de confort Creo que esta es una de las principales razones por las que algunos desarrolladores no aprenden nuevos lenguajes.
Pero para otros, esto es lo que los impulsa.
Viniendo de más de 15 años de experiencia en C ++ tuve que mudarme a Java para un nuevo proyecto en el que estoy trabajando, y este es un paso bastante doloroso. Hay herramientas y marcos para casi todo, ¡pero la curva de aprendizaje es enorme! La nueva sintaxis no es nada de qué preocuparse, la API es más difícil, pero el área más difícil es encontrar el camino a través de todos los marcos.
Además, tener que usar Eclipse como IDE es un paso atrás en términos de estabilidad y confiabilidad en comparación con Emacs. Las características de Eclipse son realmente convincentes, pero los errores en el IDE causan molestias constantes.