¿En qué momento puedo decir que he "aprendido" un idioma?

67

En mis pocos años de programación, he jugado con todo, desde Ruby hasta C ++. He hecho todo, desde aprender la sintaxis básica (Ruby) hasta completar varios proyectos importantes (para mí) que ampliaron mis habilidades con el idioma. Dada esta variedad (y el hecho de que el verdadero aprendizaje de un idioma nunca se detiene), ¿cuándo puedo decir que sé (o he aprendido) un idioma?

Algunos gatitos
fuente
12
Creo que la palabra que estás buscando es "dominar" un idioma, "aprendido" en este contexto es un poco extraño.
Pieter B
77
"Las palabras son para el significado: cuando tienes el significado, puedes olvidar las palabras". - Zhuangzi
jfrankcarr
9
cuando no tenga que hacer esta pregunta, habrá aprendido lo que necesita saber ...
1
@JarrodRoberson ¿Es este Zhuangzi quien dijo eso también?
jadkik94
2
Según LinkedIn, hay muy poca barra para poner un lenguaje de programación en su currículum vitae de habilidades ... Según mi gente de LinkedIn que ha visto el código Java antes, aparentemente se siente cómodo al incluirlo en su sección de habilidades.
Chris Dale

Respuestas:

70

¿En qué momento puede decir que ha "aprendido" un idioma como el inglés o el francés? Creo que la mayoría de la gente aceptaría que has aprendido un idioma cuando puedes usarlo para comunicarte. No tiene que saber cada palabra o entender cada idioma, pero debe conocer la mayoría del subconjunto (más bien pequeño) del lenguaje que las personas usan en la conversación diaria. Después de haber "aprendido" un idioma hasta ese punto, puede continuar aprendiendo más a medida que lo usa a diario y exponerse a más y más. Para cuando mueras, todavía no sabrás todo lo que hay que saber sobre el idioma, pero nadie dirá que nunca "aprendiste" el idioma.

Así es, creo, con los lenguajes de computadora. Puede decir que "conoce" un lenguaje como C ++ o Ruby cuando puede escribir programas útiles en él. Si necesita cuantificar el grado en que conoce el idioma, use los mismos términos que usaría para un lenguaje humano. Diga "Sé un poco de C ++" o "Sé C ++ conversacional " o "Tengo fluidez en C ++" para significar que usted sabe lo suficiente para pasar, lo suficiente para hacer cosas útiles, o que es un experto, respectivamente.

Caleb
fuente
15
Los términos conversacional y fluido son bastante subjetivos y, aunque son apropiados para el lenguaje natural, es difícil ver lo que significan cuando se aplican a un lenguaje de computadora. Aunque todavía es subjetivo, funcional e idomático pueden funcionar mejor. Funcional implica que conoce la sintaxis lo suficientemente bien como para escribir constructos útiles, mientras que tener un conocimiento idiomático implica que no solo sabe cómo escribir en el lenguaje sino que también lo sabe lo suficiente como para usar los modismos del lenguaje, como usar usingen C # o b, a = a, by generadores en python. De lo contrario, +1.
Mark Booth
13
@ MarkBooth Cualquier descripción por debajo de una puntuación en un examen será algo subjetiva. El punto es utilizar la familiaridad que la mayoría de las personas ya tiene con los niveles de conocimiento de los idiomas humanos como una guía aproximada para el conocimiento de un lenguaje de computadora, y hacerlo de una manera amigable que invite a una mayor investigación. Conversational C ++ es la abreviatura de "Estoy familiarizado con los conceptos básicos, pero es posible que deba ayudarme con código avanzado, oscuro o complicado".
Caleb
3
Si bien creo que en su mayoría tiene razón, creo que muchas personas suponen erróneamente que han aprendido un idioma natural cuando todavía tienen un nivel miserable. Y se aplica también a las personas que dicen haber aprendido lenguajes de programación.
haylem 01 de
Creo que su respuesta es perfecta, incluso muestra cuánto es imposible cuantificar el conocimiento del idioma. De hecho, aunque con fluidez significa que puede hablar sobre casi cualquier cosa, con tantas explicaciones como requeriría un hablante nativo, esto no aborda el hecho de que la mayoría de los hablantes nativos no poseen una décima parte del conocimiento del idioma que tienen los buenos escritores antiguos (no , no harry potter o dan brown, estilo antiguo muy difícil de leer). ¿Cómo abordaría eso, cuando en realidad nadie se ha molestado en abordarlo por idiomas? y cuando de hecho impacta fuertemente la productividad en la programación?
Morg
1
@Morg. Qué absoluta basura. La programación se trata tanto de comunicarse con futuros programadores (incluido usted mismo) como de decirle a la computadora qué hacer. Claro, es posible que escribir un código simple no necesite comunicarse bien, pero en el mundo real, dejar en claro sus intenciones para los futuros mantenedores del código es mucho más importante que hacer que la computadora haga lo correcto. De todos modos, estos comentarios ya no sirven para ayudar a mejorar esta respuesta, por lo que sugeriría que llevemos esto a Software Engineering Chat si desea analizarlo más a fondo.
Mark Booth
25

Depende de quién pregunta

La persona que pregunta propagablemente tiene una cierta idea de qué nivel de habilidad se espera de alguien que dice que ha "aprendido un idioma".

Básicamente, me encontré con dos escalas arquetípicas, por las cuales las personas juzgan la respuesta a la pregunta "¿has aprendido X?"

Para la mayoría de los nerds es una pregunta capciosa para eliminar a los posers. Esto ya está demostrado por las otras respuestas a su pregunta;). Si dices que lo aprendiste, fallas al ver el alcance de la tarea, que es implícitamente "perfección" y, mucho peor: fallas en la humildad.

Para la mayoría de los jefes, "lo has aprendido", si puedes resolver sus problemas , un criterio que muchas veces ya se cumple si tu código se compila. Responder su pregunta de una manera humilde lo llevará a asignar la tarea a un poser que también puede ser un pariente.

Entonces, ¿cuál es tu audiencia?

keppla
fuente
44
En entrevistas, lo sabes si lo sabes. En el lugar de trabajo, lo sabes si Google lo sabe.
asfallows
3
En las entrevistas, es "lo sé" si el entrevistador usa una corbata, y es "defina 'saber'" si no lo hace;). Para ser justos, la mayoría de los entrevistadores preguntan si uno "tiene experiencia con", a lo que me inclino más fácilmente a responder "sí"
keppla
18

Creo que la gente se está enfocando en que la finalidad de la palabra "aprendido" es el tiempo perfecto, lo que significa que has terminado de aprender. Y como todos notaron, los lenguajes de programación son entidades vivientes al igual que los idiomas hablados. Por ejemplo, alguien que tuviera un dominio completo de C # 2 miraría C # 3 con LINQ, Lambdas, varpalabras clave, inicializadores de objetos / colecciones y métodos de extensión y descubriría que mucho ha cambiado de lo que aprendió en la versión anterior. Lo mismo ocurre con C # 4 con await, asyncpalabras clave y otras nuevas construcciones del lenguaje.

Y solo estamos hablando de sintaxis aquí. Olvidamos que la mayoría de los idiomas están emparejados con un marco . C # tiene el marco .NET, Java tiene su propio marco, al igual que Ruby, C ++, PHP y PERL. Piense en el marco para un idioma como el vocabulario y el lenguaje en sí mismo es solo sintaxis. Conocer el idioma significa que sabes cómo hacer una oración en el idioma. Conocer el marco significa que puedes expresarte bien en el idioma. Finalmente, una vez que conozca la sintaxis y el vocabulario, debe aprender los modismos para poder escribir el código como "hablante nativo".

Yo diría que hay varios niveles de aprendizaje.

  1. Hola mundo (puedes escribir los programas más rudimentarios).
  2. Competente (puede escribir programas básicos pero necesita consultar la ayuda en línea regularmente)
  3. Fluido (puede escribir programas avanzados con alguna referencia necesaria).
  4. Hablante nativo (puede escribir programas avanzados con una ayuda en línea mínima, su código es indistinguible del código de otro hablante nativo).
Michael Brown
fuente
3
Nitpick: awaites de C # 5, lo más importante en C # 4 fue dynamic.
svick
Tienes razón ... Sigo perdiendo la noción de qué versión de C # va con qué versión de .NET
Michael Brown
7

Rara vez puedes decir que has aprendido un idioma. Eso implica que has terminado de aprender sobre eso, lo cual es ... tonto.

Decir que sabes que un idioma está bien cuando puedes escribir código que no está rompiendo descaradamente las expresiones idiomáticas en el idioma (tal vez después de una semana de desconfiar del conocimiento) sin hacer referencia a una referencia de sintaxis.

Telastyn
fuente
2
Los modismos cambian, los estilos varían de un lugar a otro, y de hecho los idiomas mismos cambian con el tiempo. Si no puede decir que "sabe" o "ha aprendido" un lenguaje como C ++ hasta que haya terminado de aprenderlo, entonces hay muy pocas personas que puedan afirmar que han aprendido C ++.
Caleb
1
@Caleb exactamente.
Michael Brown
3
Si aprendes así, entonces ni siquiera sabes tu idioma nativo, que también es una tontería (al menos para la mayoría de las personas)
superM
@Caleb, peor que eso, muchas partes de c ++ son mejores cuando se ignoran, como señalaron Carmack y Torvalds, así que ... haber aprendido todo cpp no ​​es exactamente beneficioso.
Morg
3

Esto es más un factor basado en la opinión. En todos los términos técnicos "Aprendizaje" significaría tener un conocimiento completo de, ya que se espera que usted sepa TODO el idioma.

Sin embargo, en el mundo de la programación, creo que se trata más si puedes programar con fluidez en el lenguaje para completar un objetivo / tarea. Probablemente también signifique si te sientes cómodo con el idioma. Claro que podrías salir y obtener un título después de años y años de universidad, pero ¿eso es solo para que te den cuenta? Usted define cuándo puede decir que ha aprendido un idioma.

Alec
fuente
2

Cuando comienzas a notar sus defectos. Una vez que comienzas a aprender un idioma, por lo general, todavía estás ocupado aprendiendo a hacer cosas o estás muy involucrado en él para notar dónde falla (por supuesto, esto es a menos que comiences a aprenderlo desde un punto de vista negativo solo para ver cuán peor es se compara con tu idioma favorito hasta ahora). Yo diría que realmente no sabes un idioma hasta que estés muy consciente de las áreas donde falla.

Ivan Voras
fuente
No puedo estar de acuerdo con eso. Puede ser cierto para el primer idioma o los dos que aprende; es posible que simplemente no sepa qué buscar, por lo que incluso las fallas de diseño más peligrosas son indistinguibles de la forma correcta de hacer las cosas. Una vez que haya aprendido algunos idiomas, debería poder ver los defectos del idioma poco después de comenzar a aprender uno nuevo. Pero luego, durante un tiempo en su desarrollo, equiparará erróneamente "diferente" con "incorrecto". Hasta que aprenda algunos idiomas de cada tipo principal (de procedimiento, OO, funcional, declarativo ...) sus juicios inmediatos serán sospechosos.
Warren Young
2

Mi respuesta personal para esto es cuando,

  1. Sé lo básico para escribir un programa simple de nivel de producción.
  2. He pasado al menos 3 horas seguidas resolviendo un problema que parecía simple pero no lo era.

A partir de ahí, no lo llamaría aprendizaje, sino dominio.

dukeofgaming
fuente
1

En el momento en que su aplicación o componente puede leer el correo, es decir, la ley de Zawinski , que establece:

“Cada programa intenta expandirse hasta que pueda leer el correo. Esos programas que no pueden expandirse son reemplazados por los que sí pueden ”. Acuñado por Jamie Zawinski (quien lo llamó la“ Ley de desarrollo de software ”) para expresar su creencia de que todos los programas verdaderamente útiles experimentan presión para evolucionar hacia kits de herramientas y plataformas de aplicaciones (el Lo del correo electrónico, dice, es solo un efecto secundario de eso).

Esto se actualizó cuando RSS se hizo popular para "... puede leer las fuentes RSS" y probablemente podría actualizarse en estos días a "... puede leer las fuentes de Twitter". ;-)

dodgy_coder
fuente
0

Creo que has aprendido un idioma cuando no lo ves. No ve los ciclos y los accesos a los datos, sino el flujo de trabajo del algoritmo.

No juegas trucos con el paso de parámetros y el procesamiento de matriz, macros mágicas. No piensa en su código como un material de auto marketing para mostrar a sus amigos y maestros, sino para expresar su comprensión de un problema y su voluntad a la computadora de la manera más legible.

Tiene hábitos que le ayudan a evitar muchos errores simplemente siguiéndolos, como: use bloques de código {} y () en expresiones incluso si está absolutamente seguro de que "será solo una línea" o "No soy tonto y sé orden de precedencia del operador ".

Dejas de contar cuántas clases, patrones y API de framework conoces. Esto es para lo que intellisense, las referencias y tutoriales, y para qué sirve Google Pero cuando observa un problema, inmediatamente sabe qué partes se pueden dividir y con qué herramientas y algoritmos lo resolverá.

Lo que haces funciona , es elegante y pequeño . Disfruta codificando y encuentra fácilmente sus errores. Sí, los maestros también hacen errores porque son humanos, pero los encuentran rápidamente porque su estructura de código los lleva al lugar correcto.

Y finalmente, date cuenta: has aprendido a pensar, analizar y resolver problemas; en comparación con ellos, el lenguaje real es secundario, solo el cuadro actual de reglas y herramientas.

Lorand Kedves
fuente