Quiero aconsejar a un joven de 14 años. Él está interesado en seguir la programación como una carrera. ¿Qué idiomas debería aprender él mismo este verano que le serían de gran valor como futuro programador?

Lo primero es fácil: JavaScript. Es el idioma más accesible (todo el mundo tiene un navegador) y tiene un mercado absolutamente enorme, si piensan en el futuro. Hay un montón de cosas divertidas que hacer con él (juegos, sitios web, cosas de servidores, etc.), un montón de tecnologías adyacentes para aprender sobre otros aspectos de la programación (bases de datos, servidores, clientes, etc.) y una comunidad de desarrolladores que Es muy vibrante y de apoyo.

Por lo tanto, JavaScript es la primera opción fácil y pragmática.

Mi segunda recomendación es Clojure. Si bien JavaScript tiene que ver con hacer las cosas y aprender las cuerdas de la programación popular, Clojure es un gran lenguaje para presentarle a alguien la belleza de un lenguaje de programación sofisticado y funcional. Puede comenzar fácilmente, es interactivo (a través del REPL), y es un maravilloso contraste con el estilo de desarrollo que encontrarán en JavaScript.

Mi tercera recomendación es Haskell. Mucha gente se asusta, pero honestamente, los conceptos básicos son fáciles de aprender. La mayor ventaja de aprender Haskell en el contexto de JavaScript y Clojure es el sistema de tipos muy sofisticado. Mientras que JavaScript y Clojure lo alientan a desarrollar una mente para las abstracciones en el código, Haskell le ofrece la perspectiva de las abstracciones en los sistemas de datos y tipos. Es una forma increíblemente poderosa de abordar problemas de programación.

Todo eso es suficiente para mantener a alguien ocupado durante décadas, pero todos los idiomas anteriores pueden dar a un estudiante un camino bien transitado desde “hola mundo” a aplicaciones muy sofisticadas. El verdadero valor de aprender los diferentes idiomas es aprender muchas maneras diferentes de pensar sobre los problemas, y esa es la diferencia entre un desarrollador de desarrollo común y un desarrollador extraordinario.

El mayor valor no vendrá de ningún idioma en particular.

Si se las arregla para captar a alguien en particular y encuentra gozo en el proceso de rechazar algo que no entiende y trabajar hasta que lo hace y se vuelve fácil, eso será, con mucho, lo más valioso para él en el futuro.

Python sería mi consejo, ya que es bastante simple de configurar y hacer cosas geniales desde el principio sin mucha molestia. Actualmente hay TONELADAS de recursos disponibles desde donde aprenderlo. Echa un vistazo a la pregunta ¿Cómo aprendo a codificar?

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

Recientemente he estado ayudando a uno de mis Boy Scouts, que se interesó en la programación a través de Minecraft. Comenzó a trabajar con Python en la computadora de su papá, y finalmente llegó al punto en que papá quería que no aprendiera a programar en su propia computadora. Un amigo le dio una Raspberry Pi, así que lo guié hacia Code Academy y le di un buen teclado para la Pi.

No estoy seguro de que dibujaría demasiadas generalizaciones de este ejemplo. Creo que podría ser una buena idea comenzar con un lenguaje interpretado, pero estoy menos que encantado con aprender a depurar programas de Python, y la depuración es al menos una habilidad importante como la programación.

También he encontrado a través de mis más de 30 años de trabajo con otros programadores que los que no conocen al menos un lenguaje ensamblador y que no saben cómo ver en qué código se está convirtiendo su código, tienden a asumir todo tipo de tonterías sobre cómo se ejecuta realmente el código. También tienden a ser relativamente inútiles para localizar problemas difíciles. En algún momento, tendrá que aprender qué es realmente una CPU y qué sucede con el código de “alto nivel” que escribe para que la computadora pueda ejecutarlo. Aprender al menos un depurador realmente bueno es probablemente más valioso que aprender cualquier lenguaje de programación en particular. O, para decirlo más sucintamente:

“La depuración es dos veces más difícil que escribir el código en primer lugar. Por lo tanto, si escribes el código lo más inteligentemente posible, no eres lo suficientemente inteligente como para depurarlo”. – Brian Kernighan

Me gustaría segundo, o tercero la recomendación para python. Hay IDE libres disponibles que están dirigidos a varios niveles de habilidad, por lo que proporciona un punto de entrada fácil.

También diría que lo más valioso, a largo plazo, vendrá de potenciar a través del aprendizaje de algo con lo que no está familiarizado al principio. Mucho valor también vendrá de aprender las diversas construcciones de programación como la estructura de control, la interfaz de archivos, los bucles, las variables, etc. Aunque Python no es el mejor para aprender el uso adecuado de las variables, IMHO, pero aún es un buen punto de partida. El problema es que Python utiliza variables sin tipo.

Su guía será muy valiosa para resolver un problema. Tratar de aprender un lenguaje de programación sin un objetivo final se vuelve muy frustrante. Tener una meta te da una dirección y una gran sensación de logro al final del esfuerzo que te lleva al próximo sprint para aprender. Cuando tenía 14 años, no era muy bueno encontrar problemas para resolver. Con tu experiencia en el mundo, podrías darle algo para lo que deseas una solución, que le dará instrucciones para que se aplique.

Antes de recomendar un lenguaje o tecnología, le sugiero que ingrese algunos valores básicos en él. Enséñele a disfrutar del arte de la programación en lugar de repasar una gran cantidad de tecnologías y herramientas. Peter Norvig lo ha dicho mucho mejor aquí: Enseñe la programación en diez años. Solo asegúrate de que entienda cada consejo en este artículo. Además, pídale que lea los clásicos: Programming Pearls de Jon Bentley, The Pragmatic Programmer: From Journeyman to Master, y más tarde, The Art of Computer Programming de Donald Knuth.

Lo anterior fue un consejo para después de que haya pasado seis meses aprendiendo lo básico 🙂 Para empezar, me gustaría ir con la recomendación de JavaScript. Personalmente no me gusta el idioma, pero la gente está trabajando mucho para diseñar bibliotecas y marcos para él, y el lenguaje en sí también está mejorando. La cantidad de plataformas y dominios a los que puede dirigirse con JavaScript es casi increíble, como puede ver en otras respuestas.

Como dijiste, ese joven de 14 años está interesado en seguir la programación como una carrera. Dado que es muy joven para pensar en la perspectiva de la carrera. En este grupo de edad, los estudiantes atraen hacia cada cosa nueva. Pero, después de algún tiempo, comienzan a perder su interés. Por lo tanto, es muy importante mantener su interés en lo que habían interesado anteriormente.
De mis experiencias, en la temprana edad, los estudiantes deben entender los conceptos, la lógica y cómo funciona la computadora. En primer lugar, debes conocer su nivel. Para este propósito, C y C ++ son el mejor lenguaje desde donde pueden comenzar. Si es capaz de entender los conceptos orientados a objetos, comience desde C ++, de lo contrario, puede comenzar solo desde C.
Paso 1:
Para aclarar los conceptos, dele ejemplos pequeños y pequeños de la vida real y problemas para programar. A continuación hay algunas cosas técnicas que deben ser claras:

  1. Tipos de datos
  2. Declaraciones condicionales incluyendo caso de cambio
  3. Bucle
  4. Formación
  5. Clasificación
  6. Cuerda

Tenga en cuenta que: utilice todos estos términos técnicos para resolver ejemplos de la vida real. No los pongas a la moda.
Paso 2:
Después de aclarar todos los conceptos básicos, cambie a Conceptos orientados a objetos.
Paso 3:
Ahora, déle conceptos de manejo de archivos: cómo leer / escribir un archivo. Cree, actualice, elimine diferentes tipos de archivos (.txt, .csv, .xls, .ini, etc.).
Etapa 4:
Conceptos de la base de datos: ¿Cómo se almacenan los datos en el sistema? Cómo manipular esos datos. Debe dar ejemplos reales que está disponible en la vida cotidiana.
Con la ayuda de la base de datos, puede comprender la estructura de los datos (que es una de las partes más importantes y críticas) de la programación de computadoras.

Hay muchos recursos disponibles en línea. Puedes aconsejarle que visite los siguientes sitios web:
academia Khan
Cada niño merece oportunidad
Desbordamiento de pila

Siendo 14, quieres priorizar la simplicidad sobre la “pureza”. Yo diría que Ruby sobre Python desde un punto de vista puramente académico, pero la cantidad de ejemplos que podrá encontrar con Python son tan grandes que no puedo. Ve con Python.

Como estudiante de segundo año de licenciatura en CS que ha estado programando durante la mejor media década, Python tendrá la sintaxis más fácil de aprender y eso es lo más probable que vayan a usar los cursos de primer año. Aprenda Python, luego aprenda el marco de Django para Python y aprenda a administrar su sitio web de Django en un servidor Linux. Sigue construyendo proyectos y aprende sobre la marcha.

Recomendaría que comience con Python, y luego vaya a Java. Podría darle este enlace (Página en mti.edu), para ayudarlo a aprender Java. Explicará muy bien la mayoría de los conceptos básicos y le dará muchos recursos adicionales para ayudarlo a aprender.

En la mayoría de los trabajos en TI, el idioma más útil de saber es el inglés.

En serio, en este momento Java, Javascript y Python serían opciones seguras, pero los requisitos en el mundo del trabajo están cambiando todo el tiempo, y los requisitos del trabajo son cada vez más especializados.

Usted elige su área de interés y descubre qué idiomas (y otros conocimientos) normalmente necesita

Un área de crecimiento es el procesamiento distribuido en muchas computadoras que utilizan Hadoop y tecnologías relacionadas. Otra es la virtualización que permite que las máquinas virtuales se definan, implementen y pongan en funcionamiento en minutos, en lugar de los días o semanas que se necesitarían para obtener y configurar el hardware equivalente. En el momento en que leas esto, esos podrían ser “sombrero viejo” y algo que no puedo imaginar podría estar a la vanguardia.

Otra forma útil de pensar sobre los idiomas es que se clasifican en diferentes categorías y requieren diferentes formas de pensar, por lo que tenemos:

lenguajes de la 3ra generación, como C, C ++ y Java. Especifican con cierto detalle los pasos reales para realizar el trabajo. Pueden compilarse o interpretarse, y pueden seguir un enfoque de procedimiento u orientado a objetos (o ambos)

lenguajes funcionales (como LISP)

lenguajes declarativos (como SQL) donde establece la lógica a la que deben ajustarse los datos que desea, y deja que el DBMS descubra cómo obtenerlo para usted

y así …

“Qué idioma” es una buena pregunta que no tiene una respuesta clara. (Python está bien. C está bien. Son muy diferentes entre sí.)

“Qué idiomas” significa que estás tratando de hacer demasiado a la vez. Debería aprender un idioma bastante bien antes de aprender más idiomas.

El idioma no importa mucho. Como titular, no debería aprender uno de los idiomas más difíciles.

Los buenos idiomas para comenzar podrían ser:
C # (aplicaciones de Windows)
Python (generalmente se usa como scripts de servidor de Linux, especialmente bueno para programadores más jóvenes en combinación con una pi frambuesa)
Java (puede ser utilizado en cualquier plataforma)
Html / JavaScript (sitios web de construcción)

Comience con Python o Java, le dará los conceptos básicos de programación en una sintaxis más sencilla (especialmente Python), luego podrá pasar a otros lenguajes donde pueda transferir sus conocimientos de programación y aprenderlos más rápido. Además, le sugiero que aprenda a aprender, en el mundo de la programación siempre tiene que actualizarse incluso después de la escuela, por lo que aprender a aprender siguiendo tutoriales y viendo videos y leyendo la documentación ayudará mucho en el futuro.

Sugeriré comenzar con Microsoft SmallBasic.
Es muy sencillo y gráfico. Tiene pocas e instrucciones. Todas las instrucciones tienen “IntelliSense” (Bueno, no exactamente, me refiero a que durante la escritura del programa, las ventanas emergentes guían a un programador sobre cómo se debe usar la instrucción).
También puede “graduarse” a Visual Studio, que es una herramienta de vanguardia / IDE para crear una línea de negocio, aplicaciones móviles, de escritorio y web.

Este es un momento excelente para una codificación de aprendizaje. Hay tanta buena información disponible en la web. Seguí este sitio, es simple. Me ayudó mucho.

( http://www.codecademy.com/learn ) Aprender

La programación se trata de resolver problemas. Si él puede ir a través de los cursos anteriores. Puede comenzar a practicar sus habilidades usando este sitio.

Iniciar sesión | Codewars

  • Recomiendo encarecidamente Python.
  • Es un lenguaje fácil de aprender.
  • Es de código abierto por lo que es gratis.
  • Hay una gran cantidad de tutoriales y recursos para ayudarlo a través del aprendizaje.
  • Es versátil en muchas formas de uso para integración en línea y juegos. Si es un jugador, definitivamente lo atraerá. Una vez que lo descubra, pídale que obtenga el juego Mount & Blade. Está completamente escrito en Python y es modificable para que pueda usar sus nuevas habilidades de una manera que sea divertida para él.

Eventualmente se requerirá C ++ o C # ya que es el estándar en el que se escriben la mayoría de los programas. Sin embargo, un paso ENORME en la dirección correcta es Python.

Yo siempre digo empezar con python. Entonces, quizás algo de java, para obtener una programación orientada a objetos correcta (también debería analizar el concepto)

Debería aprender primero a Forth, no porque necesariamente lo usará más tarde, sino debido a las prácticas de programación requeridas para resolver ciertos problemas en Forth que serán de gran beneficio más adelante.