¿Es cierto que una persona con fundamentos bastante buenos en programación puede aprender fácilmente cualquier lenguaje de programación?
Bueno, cuando digo lenguajes de programación, me refiero a los lenguajes ágiles y dinámicos como PHP, Perl, Ruby, etc., pero no a los lenguajes de programación anteriores del pasado distante.
He trabajado solo en Java, Groovy y Flex hasta cierto punto. Entonces, considerando el hecho de que soy un programador aficionado pero que aprende rápido, en términos generales, ¿cuánto tiempo se necesitaría para establecerse en cualquiera de estos idiomas?
programming-languages
learning
Vamsi Emani
fuente
fuente
Respuestas:
Si, con reservaciones.
Hace cuatro semanas, diría que tenía habilidades de nivel profesional en C y C ++, y habilidades de nivel amateur en Java. Mi jefe me pidió que escribiera algún software en JavaScript, con el que no tenía experiencia, y me fui.
Durante las siguientes dos semanas, leí muchos fragmentos de código de muestra, encontré todas las geniales bibliotecas y escribí mi programa. Está hecho y funciona. Luego, la semana pasada compré un libro de JavaScript, y lo he estado leyendo, y no sabía lo que estaba haciendo. Ahora entiendo por qué mis objetos estaban actuando de manera tan extraña.
Entonces ahora digo, sé un poco de JS. Puedo leerlo y trabajar con él, pero estoy seguro de que lo que estoy escribiendo es ineficiente, difícil de leer y no sigue las mejores prácticas.
En general, un aprendiz rápido puede tomar una semana y comenzar a producir productos de baja calidad en un nuevo idioma. Si conoce Java, puede aprender rápidamente C, C ++, PHP, Python, JavaScript, pero solo lo suficientemente bien como para modificar código o escribir funciones bien definidas. (Perl puede ser más difícil porque las expresiones regulares son complejas). Para poder diseñar correctamente un sistema en un nuevo idioma, es probable que desee un año de desarrollo profesional con mentores experimentados.
fuente
Básicamente, la respuesta es sí ... y no ... depende de lo que entiendas por fundamentos y dominado fácilmente .
HECHO
Conocer los fundamentos de la programación ayudará independientemente del lenguaje. Por fundamentos aquí quiero decir cosas que no son específicas de un paradigma dado. Cosas como algoritmos, niveles de abstracción, aislamiento, etc.
Conocer bien los fundamentos de un paradigma dado (POO, funcional, etc.) facilitará el aprendizaje de idiomas que admitan el mismo paradigma. Se podría decir que conocer bien un idioma le permitirá aprender rápidamente los idiomas de la misma familia.
Con todos los idiomas aprendidos en la misma familia, el próximo me será mucho más fácil, no me sorprendería si esta curva de aprendizaje fuera exponencialmente más rápida a medida que sepa más.
MITO
--- editado la última sección basada en comentarios ---
Hecho...
pero
Mito
fuente
para cualquier idioma similar , sí
para idiomas con paradigmas radicalmente diferentes, no tanto
ejemplo: conoces C ++, quieres aprender Java, pan comido; ya sabes VB.NET, quieres aprender Prolog ... todo el pastel, posiblemente tres o cuatro pasteles
fuente
Creo que la respuesta breve es: "cierto pero difícil de verificar". Es muy difícil aprender la API, los usos, las expresiones idiomáticas y los paradigmas (OO, funcionales, etc.) estrechamente asociados que la sintaxis real de un lenguaje. Creo que el lenguaje en sí mismo es fácil de conquistar si tienes un gran conocimiento y experiencia en los fundamentos de programación y algunos conocimientos de compilación, pero es difícil de dominar debido a cosas auxiliares.
Un claro ejemplo sería ir de un idioma a otro; C a Java. La sintaxis del código se parece mucho a los programas de estilo C, pero también debe conocer los api de Java (genéricos, recolección de basura, etc.) y, muy probablemente, en nuestro "panorama de TI" actual, algunos marcos de terceros (Spring, jUnit , Hibernate, etc.) para hacer algo útil para las empresas. Entonces, si ya has hecho C, la sintaxis del lenguaje no sería el problema, es el resto.
Esto viene de mí, que conoce Java, C #, Javascript, HTML, CSS, Delphi, etc. Es posible que no conozca todos los rincones y grietas sobre los marcos o bibliotecas que uso, pero conozco mi camino y puedo aprender rápidamente debido a mi experiencia usando diferentes de antes. Para un "aprendiz rápido" es todo pensamiento lateral realmente.
fuente
Los fundamentos de la informática que necesita saber incluyen no solo la base matemática (teoría de conjuntos, lógica, teoría de grafos, álgebra, teoría de la información, teoría de la información algorítmica, etc.) sino también varios lenguajes de programación, al menos uno de cada grupo - es decir, un imperativo (posiblemente con OOP, pero ese bit no es obligatorio), uno funcional ansioso, uno funcional perezoso, uno lógico, uno concatenante o basado en pila.
Con esta base, podrá aprender fácilmente cualquier idioma nuevo en poco tiempo. Si faltan algunos bits, puede terminar enfrentando una resistencia severa.
Y la mejor manera de aprender el idioma de adentro hacia afuera es implementar un compilador o intérprete de juguetes para un subconjunto significativo (por supuesto, sin una biblioteca estándar, esa es la parte más complicada y aburrida de cualquier idioma).
fuente
Creo que el consenso aquí es que tener buenos fundamentos ayudará en cierta medida, y no estoy en desacuerdo con eso. Sin embargo, un punto que falta en las otras respuestas es la cuestión de captar las expresiones idiomáticas del idioma, y creo que para dominar un idioma debes escribirlo idiomáticamente.
Por ejemplo, puede escribir resmas de C # completamente correctas sin usar la
using
instrucción para deshacerse automáticamente de los objetos, pero en C # idiomático bien escrito veráusing {...}
mucho. No conozco ninguno de los idiomas .Net que tienen esta construcción (aunque conozco muy pocos y mi Java está bastante oxidado, así que podría estar equivocado), por lo que incluso un experto que viene de otro idioma que no tiene esto La función tendrá que aprender este idioma desde cero por así decirlo.fuente
Es una declaración verdadera para alguna definición de "bastante bueno" y "fácilmente".
Cuanto mejor comprenda los fundamentos, más fácil será la transición de un idioma a otro. Si es un programador experto en Java que tiene una sólida comprensión de los lenguajes orientados a objetos, por ejemplo, las diferencias de sintaxis básicas entre Java y C # deberían ser relativamente fáciles de dominar en una o dos semanas. Tomará más tiempo comprender cómo se mapea la funcionalidad en todas las bibliotecas asociadas de una a otra, pero probablemente tendrá un manejo decente en las bibliotecas básicas en un mes o dos. Luego, se trata de descubrir aquellos casos en los que el enfoque estándar de un problema en el lenguaje A no se traduce directamente al enfoque estándar en el lenguaje B (es decir, desea usar LINQ en C # en lugar de JPA en Java) y sentirse cómodo suficiente en el nuevo idioma que tú ' pensar en ello en lugar de pensar en el idioma antiguo y "traducir". Probablemente tomará entre tres y seis meses, dependiendo de qué tan bien la funcionalidad que usas habitualmente tenga los mapas. A los seis meses, el programador experto de Java probablemente sería un desarrollador de C # razonablemente eficiente y competente. Pero como con cualquier cosa, puede pasar años aprendiendo todos los detalles intrincados, dominando varias bibliotecas y complementos que no son parte del lenguaje, pero son parte del ecosistema circundante, y generalmente se mejora como desarrollador en ese idioma. el programador experto en Java probablemente sería un desarrollador de C # razonablemente eficiente y competente. Pero como con cualquier cosa, puede pasar años aprendiendo todos los detalles intrincados, dominando varias bibliotecas y complementos que no son parte del lenguaje, pero son parte del ecosistema circundante, y generalmente se mejora como desarrollador en ese idioma. el programador experto en Java probablemente sería un desarrollador de C # razonablemente eficiente y competente. Pero como con cualquier cosa, puede pasar años aprendiendo todos los detalles intrincados, dominando varias bibliotecas y complementos que no son parte del lenguaje, pero son parte del ecosistema circundante, y generalmente se mejora como desarrollador en ese idioma.
fuente
Yo diría que depende completamente del entusiasmo de una persona para aprender el nuevo idioma. Cuando los fundamentos son sólidos y si él puede entender cómo el nuevo idioma interpreta algo, entonces es bastante fácil aprender cualquier idioma.
El mejor ejemplo es mi yo. He trabajado con bastantes lenguajes a pesar de que he hecho la mayor parte de mi trabajo en C #, pero comencé mi carrera desde C y luego aprendí C ++, Java, VB, PHP, lenguajes de secuencias de comandos, perl, etc. En cualquier lugar a lo largo de este término nunca sentí que no puedo aprender este idioma.
fuente
Nunca me resultó difícil aprender un nuevo lenguaje de programación, por el contrario, fue muy divertido la mayor parte del tiempo. Sin embargo, hay idiomas que miré pero que nunca entendí, porque no podía comprender la idea detrás de ellos, si es que los había. Un ejemplo es COBOL, nunca entendí qué tenía que ir en qué DIVISIÓN y SECCIÓN y por qué. Otros ejemplos son PHP y Groovy. Con PHP traté de entender por qué uno lo necesitaría en primer lugar, dado que hay perl. Quizás alguien pueda explicarlo. Con Groovy tampoco entiendo un poco los conceptos detrás de él.
fuente
Todo depende.
Sé que esa es a menudo la respuesta ...
Pero, ¿qué significan los fundamentos ? Muchas personas que tienen fundamentos para un paradigma (como OO) no los tienen para otros paradigmas (como funcional).
Mucha gente que viene de OO y conoce todos los patrones de diseño, podría no tener pistas de patrones de diseño funcionales o cosas como la comprensión de listas, curry, recursión de cola, cierres ...
Entonces SÍ: si los fundamentos significan los fundamentos de todos los paradigmas.
En este caso, el problema es que javascript usa muchos paradigmas, como procedimental, OO y funcional, y tiene un alcance extraño proveniente de java, c ++, ...
Por lo tanto, los fundamentels no ayudan en este caso, pero aprender más aspectos básicos aquí y aún convertirlos a otro idioma puede ser cada vez más fácil cuanto más patrones tenga en su caja de herramientas.
fuente
No olvide que el arte de la programación de computadoras es el arte de mantener EXACTAMENTE lo que quiere decir. Entonces, cualquier medio para decirle a la computadora qué hacer, desde Java a Access a Excel a Visual Fortran, es un lenguaje de programación.
Y algunos idiomas son simplemente malos. En mi humilde opinión, Excel y Basic son malos lenguajes; Java y C ++ son buenos lenguajes. El script de FileMaker es un lenguaje terrible. HTML puede ser excelente si no eres descuidado.
¿Puedes aprenderlo? Si es bueno, si. Si es malo, depende del umbral de disgusto. Las cosas que te dan ganas de vomitar son difíciles de aprender.
No se comprometa a usar el lenguaje X en un proyecto a menos que ya haya visto y jugado con el lenguaje X.
fuente
La respuesta es "¡Esto es un hecho, no un mito!"
Soy igual que tú, también he trabajado en varias tecnologías, a saber. Java, .net y recientemente trabajó con iPhone, Android y Blackberry.
La red está llena de recursos, solo revise la información, comprenda eso, implemente eso y avance.
De hecho, "la tecnología está hecha para desarrolladores, no los desarrolladores están hechos para tecnologías, las tecnologías cambian pero los desarrolladores no".
:)
fuente