Cualquier lenguaje de programación se puede dominar fácilmente si los fundamentos de la programación son sólidos. ¿Un hecho o un mito? [cerrado]

33

¿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?

Vamsi Emani
fuente
1
Reemplace "Cualquiera" con "La mayoría".
44
¿Qué hace que un lenguaje sea "ágil"? Pensé que ágil era un proceso de desarrollo .
oosterwal
17
Dominado fácilmente? No. ¿Aprendiste fácilmente? Sí. El dominio implica un nivel de experiencia que requiere años de uso en cualquier idioma. Aprender a usar cualquier idioma una vez que sus fundamentos estén en su lugar debe ser un hecho.
Joel Etherton el
1
No, es cierto para idiomas similares. Conocer Java no lo ayudará a aprender Haskell, pero lo ayudará a aprender C ++, etc. Conocer PHP no te ayudará a aprender ensamblaje, pero te ayudará a aprender Ruby.
iveqy

Respuestas:

46

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.

Puntilla
fuente
18
Me atrevería a decir que lleva dos años. El primer año debería dejarte relativamente competente, el segundo año debería dejarte relativamente eficiente.
Tim Post
44
Tuve esta experiencia hace muchos años (después de aprender una docena de idiomas) ... tuve que trabajar en Ada. Escribir código en Ada tomó unos días. Llegar realmente al espacio de cabeza de los diseñadores de sistemas de lenguaje / tiempo de ejecución y escribir BUEN código, eso tomó un año.
rapid_now
1
Para ser sincero, también aprendí Java de esta manera. Actualmente estoy en la marca de 1 año, y diría que "relativamente competente" es exacto.
Brad
1
La razón es que sus fundamentos, incluso fuertes, tal vez, simplemente donde no son amplios. Si hubiera conocido otros idiomas, con cierres, comprensión de listas, otras estructuras de datos y reglas de alcance antes de jscript, podría haber tenido menos problemas.
Peter
Tuve una experiencia similar con VB.net, hasta que leí el código que mi jefe (con varios años de experiencia en VB) había escrito ... oh querido. ¡El código huele a código duplicado y tiende a trascender los idiomas!
DisgruntledGoat
28

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

  • Al pasar a un nuevo paradigma diferente, conocer bien un idioma del primer paradigma no será tan útil como aprender un idioma en la misma familia. De hecho, dependiendo de la diferencia entre ellos, es muy posible que primero tengas que desaprender algunas cosas antes de poder avanzar y realmente asimilar el nuevo paradigma.

--- editado la última sección basada en comentarios ---

Hecho...

  • Conocer un primer Paradigma puede ayudarte a aprender el próximo ...

pero

Mito

  • No seas arrogante, puede ralentizarte o no ser de ninguna ayuda para el tercer paradigma.
Newtopian
fuente
todo bien excepto el último. anecdóticamente, conocer un lenguaje de programación de procedimientos como C no fue de ninguna ayuda al tratar de aprender un lenguaje lógico como Prolog, y en mi caso se interpuso, por ejemplo, "P: ¿cómo codifico un bucle en prolog?" ==> "A: no lo haces".
Steven A. Lowe
2
La evidencia anecdótica que he escuchado aquí y allá sugiere que puedes comenzar a programar un novato en Scheme con bastante facilidad, pero que es mucho más difícil si han estado programando en BASIC o C # o algo así primero.
David Thornley
1
@ Steven y David: No estaba muy seguro de eso último. Pasé de procesal a Object a funcional, pero aún no he intentado la familia lógica. Lo encontré más fácil con el tiempo y la experiencia, pero no me atreví a generalizar. Modificaré la respuesta en función de tu comentario.
Newtopian
14

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

Steven A. Lowe
fuente
1
Estoy de acuerdo. Hay algunos idiomas que simplemente siguen una filosofía completamente diferente; por lo tanto, no es trivial cambiar, por ejemplo, de un lenguaje imperativo como C a un lenguaje de programación lógico como Prolog sin poner un poco de esfuerzo.
sakisk
4

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.

Spoike
fuente
Estoy completamente de acuerdo con esto. Aprender las mejores prácticas / apis / bibliotecas populares / etc. lleva mucho, mucho más tiempo que aprender la sintaxis de los lenguajes de programación, y es donde el verdadero desafío radica, y algo que solo se puede adquirir al pasar un tiempo trabajando con el lenguaje y su lenguaje. ecosistema.
jviotti
3

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).

SK-logic
fuente
2

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 usinginstrucció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.

Steve
fuente
Hay modismos similares ampliamente utilizados en Lisp y Scheme, por lo que no será nada nuevo para uno que provenga de ese contexto, y uno buscará deliberadamente esta característica en cualquier idioma nuevo.
SK-logic
Sí, pero si vienes de, digamos, Pascal o ADA, sería un idioma completamente nuevo que ni siquiera sabrías tener en cuenta hasta que lo veas.
Steve
Esa es exactamente la razón por la que creo que uno debe saber al menos un idioma de cada grupo para poder aprender cualquier idioma nuevo y elegir las herramientas con prudencia.
SK-logic
@ SK-logic: cuando vi cosas como "usar" y "intentar ... finalmente", no tuve ningún problema en entenderlas como el equivalente aproximado de Common Lisp "relajarse-proteger". Sin embargo, las características del lenguaje de este tipo pueden no aparecer en una selección de idiomas con varios paradigmas.
David Thornley
1

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.

Justin Cave
fuente
1

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.

JPReddy
fuente
3
Y los idiomas que ha descrito son más o menos similares entre sí. Para un desafío, intente aprender Haskell, o Scheme, o Forth, o Prolog.
David Thornley
1

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.

Ingo
fuente
1

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.

Peter
fuente
0

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.

Andy Canfield
fuente
0

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".

:)

necixy
fuente