Cómo introducir una computadora analfabeta de 50 años a la programación [cerrado]

10

El otro día mi papá me hizo una pregunta que nunca hubiera esperado de él.

"¿Cómo puedo aprender C ++?"

Mi padre cumple 56 años este año y las computadoras son un concepto distante para él. No sabe cómo usar un teléfono muy bien además de llamar a números (sin marcación rápida ni contactos); aunque ha comenzado a aprender las computadoras un poco mejor, hasta el punto de que sabe cómo abrir Internet (en Windows) y navegar (y ha completado con éxito varias solicitudes de trabajo completamente solo en línea, de las cuales también se le ofrecieron puestos) ) Pero aún así, estas son experiencias demasiado estrechas para significar mucho, en realidad.

Si bien es posible que no tenga los antecedentes, mi papá sabe leer. Y quiero decir que leer es una habilidad, no solo una habilidad. Tiene poca o ninguna educación universitaria (problemas financieros, familiares, etc.) y tuvo la suerte de terminar la escuela secundaria, pero aún así se enseñó a sí mismo a convertirse en un maestro electricista y lo ha sido durante casi 30 años. Hizo lo mismo con la guitarra, aprendió a tocar a un nivel muy profesional y ha sido elogiado por su habilidad. En la escuela secundaria, tomó un libro de levantamiento de pesas, y en ese momento era la única persona en su escuela secundaria que calificaba oficialmente como "atleta" según los estándares nacionales.

En todos los casos, solo necesitaba algo para leer. Algo para enseñarle. Absorbe información como una esponja.

No tengo dudas sobre la motivación o capacidad de mi padre para hacer esto, por lo que mi objetivo general es simplemente:

Llevar a mi padre al mundo de las computadoras y llevarlo a la programación.

Creo firmemente que una vez que lo haga pasar por los fundamentos, su habilidad para manejar y leer lo mantendrá por su cuenta.

Entonces les pregunto a todos: ¿por dónde debería comenzar con todo esto? ¿Y cuáles son los mejores recursos disponibles? ¿Debo hacer que inicie Linux en lugar de Windows? ¿C ++ es una mala idea?

Recuerde, él necesita (IMO) aprender computadoras primero, y luego obtener esa primera comprensión (la experiencia "Hola mundo") de programación.

Por el bien del dinero y con la máxima preferencia, me gustaría obtener recursos en línea gratuitos que pueda leer, pero por supuesto, cualquier buena sugerencia impresa o de pago en línea es bienvenida (que posiblemente podría buscar más adelante para comprar).

Y también, tengo la intención de comenzarlo con C ++ (sin Python, Java, etc.), porque lo sé mejor y podré ayudarlo en el camino con código. (Tengo un conocimiento mínimo en este momento en otros idiomas).

Editar: Recibo muchas sugerencias persistentes para usar Python. La única razón por la que quería hacer C ++ es porque lo sé y puedo estar allí cuando mi padre necesita ayuda. Mi PRIMERA exposición a la programación fue Java. Aprendí Java, y me hice bueno en eso. Me abro a otras sugerencias, pero proporcione una aplicación efectiva de sus sugerencias.

EDITAR # 2: Entiendo que mi enfoque / pensamiento / conocimiento podría faltar aquí. Soy un estudiante de segundo año de licenciatura CS importante. Si no estás de acuerdo con nada en mi publicación, dime por qué, dame ideas, información, es por eso que te pregunto en primer lugar. Para reducir mi objetivo general a objetivos específicos alcanzables.

skippr
fuente
1
Esta pregunta no se relaciona con el desarrollo profesional de software. Aunque en el curso de nuestro día, tenemos que interactuar con otras personas, técnicas y no técnicas, y a veces enseñarles, no somos maestros o instructores profesionales y no podemos brindar buenos consejos sobre cómo enseñar mejor a alguien. Si desea hablar más sobre esto, puede plantear una pregunta en nuestro sitio Meta .
Thomas Owens
@ThomasOwens, ¿cómo sabes que no existen maestros o instructores profesionales en la comunidad? ¿Es el Meta menos visto realmente donde tengo que ir? Supongo que puedo ceder a eso (aunque realmente me gustaría que se quede aquí), por favor, migre por mí. SI hay algo que pueda hacer para que esta pregunta se ajuste a los criterios para que la comunidad de SO / Programadores la vea mejor, por favor ayúdenme a hacerlo.
skippr
1
Que yo sepa, no hay un sitio que acepte esta pregunta. Solo miré la lista y no vi ninguna. Si desea discutir esto más a fondo, haga una pregunta sobre Meta .
Thomas Owens
@ThomasOwens Bueno, no estoy aquí para quejarme o troll, así que haré lo mejor que pueda. Gracias
skippr
Furtivamente mi respuesta en los comentarios ... Contrariamente a las respuestas a continuación, creo que C ++ es en realidad un excelente primer idioma. Especialmente para principiantes. Comienza con la consola trivial IO y C ++ es mucho más amigable para los principiantes que Java o C # en este sentido. Menos código de placa de caldera para confundirlo también. Claro que hay características avanzadas que causarán confusión, pero puedes llegar muy lejos limitándote a algunas características básicas.
Lord Tydus

Respuestas:

13

En primer lugar, incluso si conoce personalmente bien C ++, es un primer idioma horrible, horrible para principiantes, y no puedo recomendar lo suficientemente fuerte como para mantenerlo lo más alejado posible si quiere aprender a escribir código con éxito. La programación de aprendizaje no se trata de un lenguaje, se trata de aprender a expresar requisitos abstractos en lógica formal. C ++ hace que sea difícil enfocarse porque constantemente estás tropezando con problemas específicos del idioma.

Si quiere aprender a expresar ideas en lógica formal, busque algo que lo haga simple. Mis opciones serían Pascal (para el desarrollo a nivel de aplicación) o Python (para el trabajo a nivel de script) porque ambos están diseñados con ser intuitivos y fáciles de aprender como prioridades centrales. Una vez que realmente conoce los principios de cómo escribir código, entonces si realmente le importa C ++ específicamente, puede aprenderlo.

Por la misma razón, no lo inicie en Linux en lugar de Windows, porque entonces tiene dos problemas en los que centrarse: ¡aprender Linux y aprender codificación, al mismo tiempo! Mantenga las distracciones al mínimo.

En cuanto a los recursos de programación reales, es bastante fácil encontrar tutoriales en línea, pero he descubierto que la mejor manera de aprender a programar es mediante la programación. Encuentre algo que le gustaría hacer y luego comience a descubrir cómo hacerlo.

Hace varios años, vi un juego y pensé: "Podría hacer esto, y podría hacerlo mejor". Así que encendí a Delphi y comencé a descubrir los principios involucrados. Todavía estoy aprendiendo cosas nuevas de ese proyecto personal, y en el camino, ¡me he convertido en un muy buen programador! Así que intenta eso; pregúntale a tu padre qué le gustaría hacer si pudiera programar, y asegúrate de que sea posible, y de un alcance razonablemente pequeño ya que aún no tiene experiencia, y luego siéntate con él y comienza a descubrir cómo hacerlo. eso.

Y si tiene alguna pregunta, consígale una cuenta StackOverflow. :)

Mason Wheeler
fuente
4

Creo que el interés de su padre en C ++ es definitivamente bueno, pero no sería mi elección para un primer lenguaje de programación, a menos que tenga un requisito muy específico de que le interese cumplir. (Incluso entonces, aprender C ++ después de aprender otro lenguaje más simple podría ser mucho más fácil).

Hay un puñado de cosas que son importantes para la programación:

  • La capacidad de resolver problemas abstractos.
  • La capacidad de descomponer problemas en piezas lo suficientemente pequeñas para resolver problemas
  • La capacidad de construir soluciones de forma iterativa y en piezas lo suficientemente pequeñas como para avanzar es posible
  • La sintaxis y la semántica de lenguajes específicos.

En muchos sentidos, la sintaxis y la semántica de lenguajes específicos está cerca del final de las habilidades necesarias para la programación. Después de todo, si estás cerca de la derecha, la mayoría de los compiladores te dirán qué error has cometido, aunque se necesita experiencia para decodificar lo que los compiladores específicamente están diciendo.

Entonces, sugeriría que su padre aborde un lenguaje de programación mucho más simple al principio: Ruby, Python, C, C #, Haskell, etc. (Haskell es definitivamente difícil para las personas que han programado solo lenguajes imperativos, pero yo ' sería curioso saber si los novatos completos sufren la misma sensación de "pez fuera del agua").

Seguir con un lenguaje más simple por adelantado significa que tu papá tendrá más éxito antes y será más fácil "jugar". El bucle REPL interactivo de muchos idiomas es un excelente lugar para aprender.

Una vez que su padre esté familiarizado con las funciones, clases, objetos, métodos, las minucias y los matices de C ++ no se sentirán tan abrumadores. Diablos, incluso comenzar con C sería más fácil: no es indulgente , pero hay menos características confusas de las que preocuparse.

Tienes curiosidad sobre Linux vs Windows; No estoy seguro de que la distinción importe mucho. Si ya está familiarizado con uno u otro entorno, el cambio es solo otro obstáculo. Si él no sabe ninguno de los dos, sugeriría Linux, pero principalmente porque instalar buenas herramientas es ridículamente fácil: apt-get install <foo>funciona en la mayoría de las distribuciones, y las distribuciones que no son compatibles a aptmenudo proporcionan algo similar. Un minuto después, se instala su nuevo paquete, a menudo más rápido de lo que me llevaría encontrar una fuente de descarga confiable para los binarios de Windows precompilados que no apesta a caballos de Troya.

sarnold
fuente
Mi papá definitivamente tiene esa "capacidad de pensar" que es tan vital para los programadores. Veo su sentido común e inteligencia en las cosas que hace ahora, y sé que puede aplicarse en la programación. Supongamos que tenemos un candidato óptimo para el aprendizaje. Mi pregunta es: ¿cómo los llevamos allí?
skippr
Hmmm, dividí las habilidades en diferentes categorías para señalar que empantanarse con la sintaxis y la semántica puede nublar el desarrollo de las otras habilidades: un lenguaje con menos reglas de sensación arcana permitirá que la abstracción fluya más fácilmente, pero yo parece no haber dicho bien ese punto.
sarnold
1
De los lenguajes sugeridos, ciertamente preferiría Python. Pero, si su papá tiene una inclinación visual, el procesamiento (ver www.processing.org) podría ser una introducción interesante (aunque hay muchos tipos de problemas para los que no es adecuado).
James Youngman
@James: je, no creo haber visto nunca la frase Programas interactivos que usan ... salida PDF antes. :)
sarnold