TL; DR:
- Depende del individuo y de su situación.
- ¿Para qué están más motivados?
- ¿Con qué puedes ayudarles y cuánto?
- ¿Qué usan sus amigos o un club en su escuela?
- ¿Qué es práctico, dada su situación?
- Tal vez el lenguaje no importa. Las herramientas de conmutación te dan perspectiva, etc., etc.
- No creo que el “ideal” exista. Si lo hace, por favor dígame y explique.
- Enséñales a usar Google …
Estoy en una posición similar, ya que recientemente he estado presentando a la hija de 13 años de mi primo a la programación. Realmente quiere poder programar. Estamos usando Python en este momento, pero también estoy considerando cambiar a Scheme, JavaScript o Ruby .
Al principio sugerí Learn Python The Hard Way, pero eso era demasiado tedioso para él. Aún no está en el punto en el que pueda sentarse solo con un tutorial y resolverlo por su cuenta. Quizás otros niños puedan proceder solos, pero él necesita a alguien que le hable a través de las cosas. Así que empezamos a usar un sitio RexTester para tener colaboración en vivo en tiempo real usando Python (pero ese sitio también admite otros idiomas). Las lecciones en persona son mejores, pero estoy en Canadá y él en Finlandia , así que eso no es posible. Lo hemos estado haciendo completamente a través de mensajes de texto y quiero remediar esto al tenernos conversando en Skype o Google Hangouts o algo así.
También quiero probar este otro sitio para la colaboración en tiempo real, ya que muestra un modelo de lo que sucede a medida que se ejecuta el código: PythonTutor (visualización de ejecución de Python, Java y JavaScript). Tengo que decir: odio el negocio de la interfaz de usuario de ese sitio. Parece que lo más difícil de comprender ahora mismo es lo que sucede a medida que se ejecuta su código . Estoy tratando de transmitirle cómo hay un intérprete que sigue las reglas y que necesitamos resolver estas reglas para que podamos hacer lo que queremos. Alguna herramienta que proporcione una visualización podría ayudar. (Sin embargo, hay una compensación con “facilidad” : cuanto más ayuda recibas, menos puedes hacerlo tú mismo. De alguna manera, siento que es mejor no tener una visualización. Ayudaría a forzar a tu cerebro a desarrollar esa habilidad más. No estoy seguro.)
Hay otras cosas que se interponen en el camino. Sus padres no viven juntos y uno tiene un mac, el otro tiene ventanas, y él mismo tiene un iPad. Como alguien que tiene una idea un tanto vaga de que una línea de comando * nix es un buen lugar para llegar, un sitio como Terminal.com parece increíble: tienen cajas virtuales de Linux para usted a las que puede acceder a través del navegador. Esto sería realmente genial para él porque: le permitiría acceder a sus cosas desde cualquiera de las 3 máquinas e incluso me permitiría ayudar a arreglar las cosas cuando las cosas salen mal. Muy conveniente cuando estamos a 7 zonas horarias aparte. En este momento, esto cuesta $ 0.006 / hora y te dan 5 horas gratis cuando te registras.
Casi puede lograr la interacción en tiempo real con ese sitio, pero requiere que vuelva a cargar los archivos manualmente. (Hay otros sitios que brindan colaboración en tiempo real para la codificación, que se comercializan como excelentes para realizar entrevistas de programación, como CoderPad, pero son muy caras para mí en este momento, a $ 50 por mes).
Pero eventualmente, necesito que cambie a otra fuente de información: tutoriales o libros o algo en lugar de mí . Para JavaScript, estoy considerando las lecciones de programación de la Academia Khan. Estos te permiten crear imágenes y animaciones e incluso compartirlas. Mi hermano dijo que estos tutoriales eran más útiles para él que Learn Python the Hard Way. Para Scheme, estoy considerando cómo diseñar programas, pero tengo que investigar más para ver si esto es realmente apropiado para él. El sitio web de Udacity tiene cursos de introducción para Python, JavaScript y Java, pero sus cursos varían en términos de calidad. No me malinterpretes: me encanta Udacity. Pero un curso como el de programación de juegos de JavaScript va a estar por encima de la cabeza de mi estudiante. edX y Coursera también tienen cursos de introducción, en su mayoría Python, y probablemente vale la pena echarles un vistazo.
Lo que pasa con los cursos en línea es: hay muchos videos para sentarse. Tal vez esto sea bueno. Tal vez no lo es. Lo digo porque creo que la mayor parte del aprendizaje (especialmente con la programación) ocurre cuando en realidad estás practicando la habilidad y no pasivamente “absorbiendo” las lecciones. Tienes que cantar si quieres ser cantante. Debe patear una pelota de fútbol si desea jugar fútbol (o “fútbol” para aquellos de ustedes que no están familiarizados con el término). Alguien va a decir “pero no puedes simplemente programar en un vacío, ¡necesitas ser introducido a las cosas!” Por supuesto que sí. Solo digo que si sigues cursos en línea, tu proporción de codificación para ver videos puede ser muy baja y entonces no estás aprendiendo .
También estoy considerando a Ruby porque a mi me parece que en la comunidad de Ruby, es más fácil adquirir ciertas “normas” de programación, como una buena actitud hacia las pruebas y los patrones de diseño, y una comprensión de la importancia del código abierto. También podría darse el caso de que la comunidad Ruby sea más útil, en promedio, con muchos tutoriales y cosas que enseñan las buenas prácticas paso a paso. No es que los otros idiomas no tengan esto, solo que podría ser un poco más fácil de encontrar en el mundo de Ruby. (No estoy seguro de esto porque, por desgracia, soy un forastero de la comunidad de Ruby. Tal vez alguien más informado podría compartir una opinión.)
El siguiente párrafo es probablemente vale la pena saltarse
También ignoro otros lenguajes, como PHP, C, C ++, Perl. Al leer otras respuestas de Quora, he desarrollado un temor a PHP basado en su reputación de causar “malos hábitos” (pero esta es probablemente una actitud un tanto exagerada, y estoy seguro de que algunos quorans de PHP me pueden decir eso. Seguro que hay tutoriales / comunidades PHP por ahí que enseñan excelentes hábitos). He probado Java y Objective-C (en la escuela). He navegado por los libros de C ++. Tengo salida Scala, Clojure, ML, F #, vaya brevemente. Haskell todavía está en mi lista … ¡tanto que hacer!
He trabajado principalmente con C # y JavaScript, y aunque Visual Studio hace que sea realmente fácil ponerse en marcha, para algunas personas puede ser como una muleta: lo usas tanto que no desarrollas la fuerza para hacer las cosas por tu cuenta. . Todavía no he probado todo el asunto de Mono. Recientemente, usando Linux, Node.js, realmente aprecio la línea de comandos y me gusta entender más sobre lo que sucede cuando “configuras” cosas, etc.
Al final, un lenguaje de programación es una herramienta que se utiliza para completar una tarea .
Lo que será de mayor valor en el futuro será:
- Experiencia completando tareas .
De hecho, incluso puede ser beneficioso no quedarse con una herramienta para siempre, porque es posible que no obtenga la perspectiva disponible al aprender diferentes herramientas.
Lo que quiero ver es:
- ¿Cuáles son las tareas que le obligan ?
En este momento, parece que está más motivado para “hacer aplicaciones” para dispositivos móviles. Por lo tanto, es posible que tenga que tomar mis decisiones como “¿qué le permitirá a los 13 años hacer aplicaciones o creaciones similares?”
Si no lo impulsaran a hacer alguna cosa en particular, me gustaría encontrar una fuente de desafíos que pudieran impulsarlo . Consigue esa motivación intrínseca burbujeante. Tal vez tener amigos que programen esto lograría esto. Además, tal vez pueda ver si hay algún tipo de programación o club de computadoras en su escuela. Entonces él podría simplemente elegir cualquier tecnología que estén usando. Tal vez algo como los problemas fáciles de TopCoder serían divertidos para él. No sé si TopCoder es “ideal” para comenzar la programación, pero ¿qué es? (La gente podría afirmar que la programación al estilo de TopCoder le enseñaría a alguien “malos hábitos”. Esto es posible, pero también es posible que las personas aprendan buenos hábitos más adelante).
Para una persona de 13 o 14 años, las tecnologías que aprendan importarán menos que la habilidad más general de pensar como un programador. En cualquier lenguaje, eventualmente se encontrará con los problemas eternos de la programación: modularidad, legibilidad, pruebas, desacoplamiento, complejidad algorítmica, etc., etc., etc.
A veces, siento que debería enseñarle a usar Google. Puede ayudarlo a convertirse en un “aprendiz activo” que puede buscar sus propias respuestas . (Por otra parte, para algunos, puede ser una muleta en la que aprendes indirectamente a no buscar tus propias respuestas. Como cuando alguien busca en Google un mensaje de error y luego sigue ciegamente la solución provista sin intentar comprender lo que realmente está pasando …) . Tal vez no sea “lo más eficiente” o “ideal”, pero existen otros beneficios, como la forma en que realmente puedes ver lo que hay.
Estoy totalmente abierto a la posibilidad de que estoy equivocado e ignorante acerca de las cosas de las que he hablado anteriormente. Por favor informame educadamente en los comentarios.