c++ - tesoro - sophia schliemann
El método de Schliemann para programar el aprendizaje de idiomas (4)
Antecedentes : el arqueólogo alemán del siglo XIX Heinrich Schliemann fue famoso por su exitosa búsqueda para encontrar y excavar la ciudad de Troya (un sitio arqueológico real para la Troya de la Ilíada de Homero).
Sin embargo, es tan famoso por ser un asombroso aprendiz de idiomas : en el espacio de dos años, se enseñó a sí mismo con fluidez holandés, inglés, francés, español, italiano y portugués, y luego aprendió siete más, incluidos los modernos. y griego antiguo.
Uno de los métodos que usó famosamente fue la comparación de un texto conocido, por ejemplo, tomar un libro en un idioma en el que uno habla con fluidez, tomar una buena traducción de un libro en el idioma que desea aprender y revisarlos en paralelo. (varias fuentes citaron el libro usado por Schliemann para ser la Biblia, o, como el enlace arriba dice, una novela).
Ahora, para la pregunta real.
¿Alguien ha usado (o escuchado) un equivalente del método de Schliemann para aprender un nuevo lenguaje de programación? Por ejemplo, en lugar de basar el uso de referencias y tutoriales, tome un conjunto bastante completo de programas conocidos por tener código de alta calidad en ambos lenguajes implementando algoritmos similares / idénticos y aprenda comparándolos.
Tengo curiosidad acerca de experiencias personales de aplicar tal enfoque, o referencias a algo publicado, o existencia de bases de código que podrían usarse para tal enfoque.
Lo que me hizo pensar en la idea fue el Proyecto Euler y algunos fragmentos de código que vi en SO, en C ++, Perl y Lisp.
Es poco probable que la mejor manera de implementar algo en un idioma siga el mismo patrón en otro. Por lo tanto, es muy difícil encontrar puntos de correspondencia. Tomar este enfoque es probable que le enseñe a programar mal en el idioma que está aprendiendo: mire todo el código malo, similar a Java, escrito en C ++ por personas con Java como primer lenguaje de programación.
Editar: java típico en código C ++:
string * s = new string;
en lugar de la forma C ++:
string s;
Los lenguajes de programación tienen menos que ver con la sintaxis y más con los modismos. Realmente dudo que puedas hacer una comparación lado a lado de decir fuente Apache en C y YAWS en Erlang y realmente aprender cualquiera de los idiomas en cualquier dirección. Supongamos que sabe C, ¿qué hace cuando el idioma que está aprendiendo tiene variables de asignación única o ningún operador ternario? Hay muy pocos mapeos 1: 1 incluso entre idiomas con correspondencia de impendencia como los lenguajes OO. Quiero decir que C ++ no asigna 1: 1 a Java o Python y todos son OO en la naturaleza.
Esperaría que el método de Schliemann funcionara muy mal, porque uno de los puntos para crear un nuevo lenguaje de programación es introducir nuevos objetos de discurso y nuevos medios para transferir el control . En el método de Schliemann para comparar dos textos, los objetos del discurso son siempre los mismos, solo el lenguaje utilizado para hablar de ellos es diferente.
Por ejemplo, el envío de métodos y la herencia son cosas inherentemente nuevas. Así que tal vez si conoces Simula-67 puedes aprender Java, y tal vez incluso puedas esforzarte para aprender Smalltalk o C ++. Pero posiblemente no pueda aprender Tcl o Scheme o ML o Diesel porque la herencia simple y el despacho dinámico simplemente no están ahí.
Del mismo modo, si alguna vez ha visto C o C ++, o tal vez incluso Pascal / Ada / Modula / Clu, nada puede prepararlo para el poder y la expresividad de las funciones de primera clase.
Como otro ejemplo, ¿cómo puede comparar soluciones a problemas de procesamiento de cadenas si un idioma (Perl) tiene expresiones regulares, un segundo (SNOBOL) tiene coincidencia de patrones, y un tercero (Icono) tiene escaneo de cadenas? ¡Tu pobre cabeza explotará!
El método de Schliemann puede tener sus usos si los idiomas en cuestión son muy similares. Supongamos que conoce Java y quiere aprender C #, o viceversa. O cambie entre idiomas en la familia OCaml / F # / SML. Pero en la mayoría de los casos sospecho que el método de Schliemann te hará más daño que bien.
El código de Rosetta puede ser útil. Para citar el sitio: -
Rosetta Code es un sitio de programación de chrestomathy. La idea es presentar soluciones a la misma tarea en tantos idiomas diferentes como sea posible, demostrar cómo los idiomas son similares y diferentes, y ayudar a una persona con una base en un enfoque a un problema para aprender otro. Rosetta Code actualmente tiene 372 tareas y cubre 197 idiomas, aunque no tenemos (ni podemos) soluciones para cada tarea en cada idioma.