¿Por qué parece haber mucho miedo al elegir el idioma "incorrecto" para aprender? [cerrado]

28

Tal vez soy solo yo, pero como estudiante actual de CS ya me he encontrado con muchas preguntas en este sitio y en otros lugares sobre no solo "¿Qué lenguaje debo usar para x?" pero también "¿Alguien todavía usa el lenguaje Y?" Mi primera clase de CS se enseñó en Scheme, que, si no me equivoco, no se usa ampliamente (al menos en comparación con lenguajes como Java, PHP, Python, etc.). Muchos de mis compañeros de clase se opusieron a la idea de tener que aprender un idioma que nunca tendrían que volver a usar, pero no entiendo de dónde viene tanto miedo a aprender idiomas menos populares. No, no puedo usar Scheme en ningún trabajo que obtengo, pero ciertamente no me arrepiento de haber aprendido a usarlo (aunque sea de manera muy principiante, no muy profunda en ese semestre). Estoy tomando una clase de motores de búsqueda este semestre, lo cual se hace en Perl y nuevamente veo compañeros quejándose de la elección del idioma. Puedo entender que tengo un idioma favorito y que no me gustan los demás, pero ¿por qué algunos se molestan por aprenderlo en primer lugar? ¿Realmente puedes aprender el idioma "equivocado"? ¿Acaso aprender algo como Scheme o Haskell no es un buen ejercicio mental, y nada útil, al menos, para exponerse a diferentes formas de resolver problemas?


fuente
Curiosamente, mis primeros dos años de educación en CS involucraron únicamente C # y Java, ¿y adivina qué terminé usando en mi primera colocación cooperativa? La palabra de cuatro letras comienza con "P".
Anon
66
@Shewbox, tienes razón, están equivocados, obtendrás la ventaja del aprendizaje cruzado, no lo harán. Fin de la historia.
ocodo
77
Están haciendo SEO (optimización de motores de búsqueda) con los gerentes de contratación.
rwong
1
@rwong: y desafortunadamente algunos de nosotros tuvimos que aprender por las malas para no decir "Usé XXX una vez y nunca lo volveré a tocar", porque algunos buscadores de correo no deseado coinciden con las palabras clave.
1
@JB: el 99% de las personas hacen que los demás parezcan besarse.
Michael K

Respuestas:

27

El objetivo de un título de CS no es enseñarle C # y Java, puede aprenderlos por su cuenta. Es para enseñarle sobre programación y computación. El lenguaje es solo un detalle. En el transcurso de una carrera en programación utilizará muchos idiomas. Hoy puede ser Java o C #, pero dentro de 10 o 15 años podría ser Erlang o algo que aún no se ha inventado. Aprender diferentes estilos de programación y diferentes formas de atacar un problema es mucho más importante que aprender cualquier idioma.

Zachary K
fuente
Exactamente: mi título es anterior a C ++ y mucho menos a Java o C #. Aunque nos enseñaron principalmente en Pascal, nos dieron problemas en una variedad de idiomas desde una etapa temprana y en nuestro segundo año tuvimos un curso que equivalía al "idioma del mes", la simula (utilizada para hacer simulaciones) sigue siendo mi mejor recuerdo. aunque no hay posibilidad de que ahora pueda escribir ningún código de simulación, principalmente debido a la POO que me enseñó (aunque no lo sabía en ese momento)
Murph
17

Porque tu primer idioma dará forma a cómo piensas, hasta que aprendas lo contrario.

Si usted es analfabeto computacional (programador por primera vez), y el primer idioma que aprende es demasiado "básico", es posible que no conozca conceptos de orden superior como orientación a objetos, despacho múltiple, herencia, funciones de primera clase, meta programación, etc.

El primer idioma que aprende generalmente está vinculado a su primera incursión en el pensamiento computacional. Si alguien te dice, Jimmy, que el mundo que tienes delante consiste en símbolos A, B y C, todo tu pensamiento estará en términos de A, B y C. Hasta que un día, un nerd elegante se burla de ti por no saber X , Y, y Z conceptos. No hay forma de que supieras esto sabiendo solo ABC.

Las personas que están más preocupadas por el primer idioma de alguien son probablemente programadores ilustrados que han luchado en la oscuridad. Oh, ahora sé qué es una función de primera clase. ¡Ojalá supiera sobre la inyección de herencia y dependencia hace dos años!

Su primer idioma no es tan importante como su actitud con respecto a los idiomas posteriores. Si puede ver muy por delante de usted para saber que hay un mundo más allá de BASIC / C / Perl / PHP / etc., entonces está muy por delante del juego. Es por eso que muchas personas son fanáticas de los lenguajes funcionales, ya que muchos lenguajes desarrollados activamente están convergiendo hacia ellos.

Mark Canlas
fuente
1
Sin embargo, todos necesitamos comenzar con esos conceptos básicos. Cuando alguien aprende un nuevo concepto (tome los patrones de diseño como ejemplo), tiende a usarlo en todas partes por un tiempo. Si no hubiera pasado los primeros 5 años que programé en la estructura del programa de aprendizaje Básico y cómo pensar como un programador, entonces cuando llegué a OO, habría estado tan ocupado aprendiendo la parte del procedimiento que no podría haberme concentrado en el OO parte. Dicho esto, +1 para 'Tu primer idioma no es tan importante como tu actitud con respecto a los lenguajes y conceptos posteriores' .
Michael K
Pensé en agregar eso. No estaba diciendo que los idiomas básicos no tienen su lugar. De hecho, lo hacen (en las primeras etapas de aprendizaje). Simplemente no lo mencioné.
Mark Canlas
Oh Michael, tu edición es mucho más elegante, jajajaja.
Mark Canlas
Si los compañeros de clase del OP están preocupados, Scheme es el idioma equivocado para aprender, probablemente no estén tan iluminados. :)
David Moles
Algunos lenguajes tienen una sintaxis compleja mientras que en realidad son simples (derivadas de C), otros tienen una sintaxis simple mientras que en realidad son complejos (Groovy). Con eso quiero decir, en C / C ++ u Objective-C, las cosas son bastante declarativas y de procedimiento dentro de cualquier ámbito de código activo, mientras que algo como Groovy tiene muchas cosas "sucediendo bajo el capó" que están "ocultas" por el azúcar de sintaxis. Mi sugerencia para los novatos es, en general, ir con los lenguajes de sintaxis difíciles que reflejan más de cerca cómo funciona realmente una computadora, porque ese conocimiento simplifica el uso de otros idiomas.
dcgregorya
11

Cuando estaba en la universidad, conocía a muchas personas que decidieron especializarse en economía no porque fuera algo en lo que estuvieran particularmente interesados ​​o apasionados, sino porque pensaron que les conseguiría un buen trabajo.

Me especialicé en Estudios de Asia Oriental porque las clases que tomé como efecto secundario de mi interés inicial en la literatura me engancharon. Fui a Alemania porque quería hacer un programa de intercambio, donde pasé la mayor parte de mi tiempo en programas de japonología y sinología. Estudié lo que más me interesaba. Decidí no usar la universidad para estudiar cosas relacionadas con la computadora, ya que había pirateado bastante durante mi infancia, pero pasé un tiempo programando y entendiendo Internet, y eventualmente, quizás de manera improbable. , Conseguí un buen trabajo que logró combinar todos esos intereses.

La diferencia es entre el profesional y alguien que aprende por aprender. The Careerist está preocupado de que hayan estudiado The Wrong Thing y de que se arrepientan porque no será lo correcto para conseguirme un trabajo. La persona que aprende por aprender se da cuenta de que tiene 4 años para dedicar tiempo a explorar todo tipo de campos con presiones relativamente manejables; el profesional piensa que el trabajo de la escuela es enseñarles algo. El alumno resuelve las cosas cuando golpea un territorio desconocido y tiene una mejor oportunidad de encontrar el trabajo adecuado para ellos. The Careerist termina siendo un contador de segunda categoría en una empresa de tercer nivel, paga las cuentas y resiente a su jefe.

Sí, estos son arquetipos, y todos tienen que equilibrar el pragmatismo con sus pasiones, pero esa es la diferencia esencial. De acuerdo, alguien con la estética del programador también puede hacer la pregunta, pero más en el contexto de "cuál será el uso menos derrochador de mi tiempo". Pero supongo que es el impulso profesional hacer esa pregunta, porque el profesional tiene mucho más miedo de cometer un error que el alumno, y el alumno generalmente es un mejor programador porque el alumno no teme los errores. El alumno, como el programador, acepta el fracaso en la búsqueda de la habilidad.

JasonTrue
fuente
9

Sí, aprender lenguajes funcionales como Scheme y Haskell es bueno como introducción a la programación funcional. En lo que respecta a tus compañeros de clase quejándose de Perl, aunque Perl no es tan popular como solía ser, sin duda sigue siendo un idioma muy utilizado en los negocios.

Puedo entender a tus compañeros de clase que desean aprender lenguajes prácticos utilizados en el mundo real, pero creo que pierden el punto de que una vez que eres un programador experimentado y has estado expuesto a varios paradigmas de programación, aprender nuevos idiomas es solo cuestión de aprender La nueva sintaxis. Por lo tanto, siempre que tenga exposición a los conceptos, puede "especializarse" en cualquier idioma que su eventual empleador prefiera sin mucha dificultad.

Zeke
fuente
5

Tal vez porque las personas han sido influenciadas por declaraciones como el clásico troleo de Edsger Dijkstra, "Es prácticamente imposible enseñar una buena programación a los estudiantes que han tenido una exposición previa a BASIC: como programadores potenciales, son mutilados mentalmente más allá de la esperanza de regeneración". ( enlace )

Conduce al miedo de sufrir daño cerebral permanente si aprende el lenguaje "incorrecto". Su ejemplo de Perl no es sorprendente, ya que Perl es uno de esos lenguajes que a menudo invoca críticas como esta de sus detractores.

Carson63000
fuente
5

Su primer idioma debe centrarse en conceptos, no en sintaxis o modismos. Usando eso como una guía:

  • Perl significa mucha búsqueda de variables especiales y sintaxis arcana
  • PHP significa mezclar conceptos debido a su crecimiento orgánico
  • Java significa un poco de confusión ya que no todo es realmente un objeto
  • Ensamblado / C / C ++ significa un montón de cosas de bajo nivel, lo cual es excelente si desea hacer un desarrollo de sistemas integrados, pero resta valor a los conceptos de nivel superior
  • SQL es útil para ver cómo el lenguaje natural puede (y no puede) asignarse a estructuras de código y datos
  • Visual Basic para Aplicaciones se enfoca en cosas desechables de propósito especial y, como tal, hace que sea demasiado fácil omitir conceptos importantes como el manejo adecuado de errores y la refactorización
  • LISP parece una sintaxis simple, pero también tiene demasiadas expresiones abreviadas que son francamente sin sentido sin un conocimiento detallado de sus nombres completos
  • Haskell a menudo se parece mucho a las matemáticas, pero puede degenerar rápidamente en una sopa de sintaxis
  • Python ... En realidad, Python es el único lenguaje al que no puedo encontrar ninguna objeción seria para principiantes. Tal vez simplemente porque es el último idioma que he aprendido, y el próximo idioma me enseñará el error de mis costumbres.
l0b0
fuente
Me di cuenta de que no escribiste nada sobre C # o VB.Net.
HK1
4

Pregúnteles a sus compañeros cómo saben que un idioma está "mal" si no lo han usado. Solo puede descubrir lo que le gusta utilizando una amplia variedad de idiomas.

Muchos de mis compañeros de clase se opusieron a la idea de tener que aprender un idioma que nunca tendrían que volver a usar, pero no entiendo de dónde viene tanto miedo a aprender idiomas menos populares.

Sin conocerlos, no puedo decir con certeza por qué se sentirían así. Quizás son flojos. Tal vez hayan usado el idioma antes y no les haya gustado. Quizás tienen miedo de probar otro idioma. Quién sabe. Lo que sí sé es que, como estudiante de CS, investigador y después de haber trabajado en la industria, conocer una variedad de idiomas, bueno, es una gran ventaja y nunca sabes lo que vas a usar o no. Ejemplo: cuando estaba aprendiendo C por primera vez, mi maestro nos introdujo a los scripts de shell y las utilidades de línea de comandos como grepy awk. Mis amigos no se molestaron en aprenderlos a un nivel de competencia. Ahora los uso en el trabajo todos los días.

Estoy tomando una clase de motores de búsqueda este semestre, que se realiza en Perl y nuevamente veo a compañeros de clase quejándose de la elección del idioma.

Perl es muy poderoso y si sabes cómo usarlo, puede hacerte la vida mucho más fácil. También es similar a Python y Python se usa mucho en uno de los principales reclutadores de estudiantes de CS: Google. Tus compañeros de clase deberían estar comiendo esto. FWIW, sé que Perl y Python a un nivel intermedio (no es un principiante pero no un experto).

Puedo entender que tengo un idioma favorito y que no me gustan los demás, pero ¿por qué algunos se molestan por aprenderlo en primer lugar?

¿Joven y vanidoso? Yo también fui así. Pero mi "molestia" estaba más en el ámbito de las matemáticas. Entonces, a partir de esa experiencia, apostaría a que están nerviosos porque no les gusta aprender cosas nuevas o que les resulta difícil aprender nuevos idiomas. (Pero entonces, cualquier cosa que valga la pena saber no va a caer en tu regazo, digo)

¿Realmente puedes aprender el idioma "equivocado"? ¿Acaso aprender algo como Scheme o Haskell no es un buen ejercicio mental, y nada útil, al menos, para exponerse a diferentes formas de resolver problemas?

A la primera oración: No, pero definitivamente puedes aprender idiomas que preferirías no tener + tos + Lisp + tos + =)

Al resto: ¡sí! Debes aprender tantos idiomas como sea posible para descubrir lo que te gusta y ampliar tus horizontes. No es necesario dominarlos a todos, pero tener un conocimiento práctico siempre es útil. Usted nunca se sabe cuando un idioma que pensé que sería una pérdida de tiempo para aprender es muy útil.

agua
fuente
1
¿Qué le pasa a Lisp?!?! :)
Michael K
1
+1 para "aprender tantos idiomas como sea posible". Si conoce una variedad de idiomas, se vuelve trivial elegir uno para una tarea determinada.
Michael K
1
@ Michael: Además, facilita el aprendizaje de uno nuevo, ya que ya conocerá la mayoría de los conceptos.
David Thornley
@ Michael: No hay nada malo con Lisp =). Simplemente no soy un tipo de lenguaje de programación funcional. Además, ¡muchos paréntesis! Sin embargo, he visto algunas soluciones MUY elegantes implementadas en Lisp. Respeto a los gurús de Scheme y Lisp.
aqua
3

Debido a que la contratación de programadores es un proceso tan arbitrario y caprichoso, el simple hecho es que si elige la tecnología incorrecta, es posible que siga el camino del dodo

En la portada en cualquier momento, verá un fervor religioso cercano en creencias tales como:

  1. Un título universitario en informática es necesario para ser un buen programador.
  2. Una maestría en informática hace que las personas sean malos programadores.
  3. Las certificaciones son absolutamente necesarias para avanzar en su carrera.
  4. Las certificaciones son una bandera roja que indica un mal programador.
  5. Un título universitario en un campo que no sea informática tiende a resultar en los mejores programadores.
  6. No eres un buen programador a menos que también programes las noches y los fines de semana.
  7. y sigue.

La única constante a través de todo esto es que el 99% de las compañías quieren que tengas X años de experiencia con la tecnología Y ... Y dado que una persona solo tiene tantos ciclos disponibles, lo que gastan esos ciclos es muy importante.

tierra roja
fuente
2

Creo que el miedo a elegir el lenguaje "incorrecto" para aprender se debe principalmente a la falta de información y falta de orientación , como por ejemplo:

  • Falacia de bala de plata . La idea errónea de que existe el lenguaje adecuado para el trabajo, el entorno o el proyecto. Y si eliges el equivocado, estás tostado.
  • Sin entender que la programación trasciende los lenguajes . El lenguaje es solo una herramienta, como una máquina de escribir o una computadora para escribir. No se trata de aprender los matices de la herramienta (sintaxis), sino de lo que la herramienta le permite (conceptos, abstracciones, etc.) crear.
Maglob
fuente
Por eso, por ejemplo, Scheme es un lenguaje de enseñanza tan bueno. La programación se trata de dos cosas: abstracción y reutilización. El esquema tiene exactamente dos características: abstracción de funciones y llamada a funciones (es decir, reutilización). ¡Diablos, ni siquiera tiene sintaxis!
Jörg W Mittag
2

Estamos expuestos a más opiniones.

En comparación con la forma en que se hicieron las cosas en el pasado, hay más dudas acerca de cómo estamos gastando nuestro tiempo porque estamos expuestos a más opiniones: todos tienen su opinión sobre cuál debería ser el primer lenguaje de programación y dado que es Un tema tan complicado, cualquiera puede justificar cualquier cosa .

Debido a nuestro estilo de vida rápido, todos tienen un miedo innato a perder el tiempo. El miedo acentuado de aprender el idioma equivocado es simplemente el resultado de que las personas se exponen fácilmente a una multitud de opiniones.

JK
fuente
1

Es la aversión general de aprender algo que tiene una utilidad cuestionable. Puedo ver que la picadura aquí es aún peor, ya que esta es la clase que la gente quiere tomar y todavía están aprendiendo algo que piensan que es inútil. Sé que si fuera a hacer collage me gustaría aprender algo que pueda usar en el mundo real.

La única parte en la que podría estar en desacuerdo con esas otras personas es cuando un idioma se usa mucho y simplemente no quieren salir de su burbuja para aprenderlo. Solo entonces la queja no tiene sentido.

TheLQ
fuente
1

¿Por qué es "miedo"? Yo lo llamaría animosidad de haber sido alimentado a la fuerza con algo que no desea o no siente que es importante. No hay lenguaje incorrecto, pero tenemos un tiempo limitado para concentrarnos en las cosas. Tenía que hacer mis clases de CS con Java y no estaba contento con eso. No porque temiera que Java fuera el lenguaje equivocado, sino que ese no era el enfoque de mi carrera.

Ahora Java es útil ¿verdad? LOL Todos aprenden Java. Eso es en lo que no quieres competir. Tu currículum estará en una pila de 1000 con el título Graduado de CS reciente que conoce Java. En realidad, probablemente sea mejor utilizar el esquema de aprendizaje inteligente, ya que esa es la señal secreta de que fuiste a una universidad de élite y no a un pequeño colegio comunitario.

También diría que este tipo de animosidad es mucho más amplia que la CS en general, pero indicativa de la educación superior en general. Estoy seguro de que el instructor eligió a Perl porque conoce a Perl y puede calificarlo fácilmente, y teme aprender idiomas más nuevos que los estudiantes preferirían aprender. Creo que es tu propia educación y deberías poder trazar las tecnologías que consideres necesarias para tu propio éxito.

(PS MIT renunció a Schema y cambió a Python)

nate c
fuente
Algo triste de que Mit se dé por vencido en Scheme, SICP es algo que todo programador debería leer. Tiendo a promocionarlo en cada oportunidad.
Zachary K
Esto me recuerda mis días de universidad. Unos años después de haber comenzado, el departamento de CS cambió de C ++ a Java como el principal lenguaje de enseñanza. Un par de años después (cuando intentaba enseñar tutoriales de estructura de datos), estaba claro que ninguno de los estudiantes entendía nada sobre la asignación de memoria (por ejemplo, se perdieron por completo en la pila frente al montón). En consecuencia, no comprendieron las operaciones básicas en las estructuras de datos que intentamos enseñarles. No mucho después, C ++ se convirtió nuevamente en el lenguaje favorito.
smithco
En la práctica, aprender nuevos idiomas es fácil una vez que comprende la programación. La gente recomienda lenguajes como C porque requiere que declares punteros y asignes memoria y protejas el acceso de escritura a tus punteros ... cuando piensas en estos términos todo lo demás es bastante fácil porque ya consideras todas estas cosas. Es más difícil hacer lo contrario: comenzar con un lenguaje más abstracto y luego construir la experiencia para comprender todas las cosas subyacentes que están sucediendo.
dcgregorya
1

El tiempo es el bien más raro de todos, una vez que salgas al mundo real, y nadie quiere perder el tiempo en habilidades que no les darán ningún beneficio real.

Dicho esto, no creo que haya un lenguaje 'incorrecto' para aprender, pero desearía haber descubierto Ruby hace años en lugar de luchar para hacer cosas avanzadas en PHP ...

sevenseacat
fuente