Enseñando a programar a mi hermano menor. ¿Por dónde empezar?

PlayingDead

((No sé si este tema va aquí o en el foro de Desarrollo, ruego a los moderadores que me disculpen si me equivoco))

Hola mediavideros.

Contexto: Mi hermano tiene 21 años, un año menos que yo, y aunque es una persona inteligente (aunque muy tranquila) no tiene ninguna inquietud sobre estudios ni nada laboral así que ha decidido meterse a DAW, grado superior que yo ya he completado, además de que trabajo en el sector IT y programo desde que tengo uso de razón prácticamente. Yo le he recomendado meterse ya que puede encontrar empleo y me tiene a mí para enchufarle y para enseñarle las bases de la programación. Ya que no tiene vocación por nada, al menos que así elija algo con lo que no le va a faltar trabajo (aunque como no le guste va a sufrir).

La cuestión es que nunca he enseñado a nadie a iniciarse en esto, me cuesta empezar de 0 porque doy muchas cosas por sentado que ya ni recuerdo cómo las aprendí (yo veía código de otros y así empecé)

Le he dado una primera clase donde le he explicado cómo funciona Java por encima, qué es el código, el compilador, y un par de cosas más, enseñándole en acción qué son las variables, los tipos, qué es un if y una función. Nada más. Una pequeña aplicación para calcular tu IMC y alguna cosa más matemática simple.

He elegido Java porque considero que es un lenguaje muy estricto en cuanto a la Orientación a Objetos y me parece importante que la aprenda en condiciones, aunque por el momento le he dicho que no se salga del método main y escriba código procedural para que no se sature (ya me ha preguntado qué es eso de public static, pero creo que por ahora es mejor no explicárselo y que vaya tirando con lo básico).

Me gustaría enseñarle:

  • Estructuras de datos básicas (las primitivas y las hijas de Collection)
  • Más sobre condiciones
  • Bucles
  • Conversiones de tipos
  • Funciones de la clase Math de Java y similares que sean de uso común

Descarto por ahora debido a su complejidad:

  • Nada de orientación a objetos, hasta que se habitúe un poco a escribir código procedural y de la programación estructurada.
  • Nada de patrones de diseño y mucho menos arquitectura.

Pero no sé qué ejercicios ponerle ni en qué orden enseñarle nada de estas cosas, a veces se queda rayado porque no entiende alguna cosa.

¿Alguna sugerencia? ¿Habéis enseñado a alguien alguna vez?

Gracias.

HeXaN
  1. https://htdp.org/2018-01-06/Book/
  2. https://mitpress.mit.edu/sicp/
  3. https://mitpress.mit.edu/books/introduction-algorithms
  4. https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
  5. https://www.amazon.es/Object-Oriented-Design-Heuristics-paperback-ArthurRiel/dp/0321774965
  6. https://www.amazon.es/Design-patterns-object-oriented-professional-computing/dp/0201633612

De aquí a un año le cuentas.

123 5 respuestas
preguntitas

Code combat o algo de eso.

Si no tiene inquietud, meterle unos libros lo va a dejar esta misma tarde.

PlayingDead

#2 Sabía que lo ibas a poner

1
JohnVoiden

Solo he entrado para ver el #2 de HeXaN.

45 1 respuesta
NeV3rKilL

Tu hermano ya es mayorcito, no es tu responsabilidad hacerle un plan de estudios.

4 1 respuesta
HeXaN
#1PlayingDead:

He elegido Java porque considero que es un lenguaje muy estricto en cuanto a la Orientación a Objetos y me parece importante que la aprenda en condiciones, aunque por el momento le he dicho que no se salga del método main y escriba código procedural para que no se sature (ya me ha preguntado qué es eso de public static, pero creo que por ahora es mejor no explicárselo y que vaya tirando con lo básico).

Piensa que en las universidades más punteras del mundo (MIT, Berkelay...) enseñan con Python así que por algo será. Hay que aprender CONCEPTOS y no implementaciones específicas sometidas a un lenguaje.

Si lo enseñas como pretendes vas a tener un mono picateclas típico de FP que se va a pegar en Everis, Indra o cualquier cárnica hasta los 65 años.

3 5 respuestas
AikonCWD

He entrado para recomendar Scratch https://scratch.mit.edu/ pero acabo de leer que tiene 21 años

#7 pero los conceptos los puedes aprender con cualquier lenguaje. Si quieres conceptos de objetos, evidentemente sería con cualquier lenguaje orientado a objetos. etc

2 2 respuestas
PlayingDead

#7 Pienso igual en cuanto a aprender conceptos y no arbitrariedades de un lenguaje, pero Java me ha parecido el lenguaje más estricto para no cometer burradas, aunque igual habría sido mejor ponerle alguno de scripting para empezar, no lo sé.

Como dice #8 , aprendes el concepto de la orientación a objetos mejor con un lenguaje que es estricto con ello y no es multiparadigma como Java.

HeXaN

#8 Los conceptos, cuanto menos boilerplate tengan detrás para ser desarrollados, mejor.

1 1 respuesta
AikonCWD

#10 En ese caso creo que sería mejor aprender conceptos en un lenguaje de tipado estático.

2 respuestas
PlayingDead

#11 Efectivamente...

HeXaN

#11 ¿Por qué? ¿Porque el compilador te pita cuando te equivocas con el tipo? Ahí está el problema: estás aprendiendo implementaciones específicas en vez de conceptos.

Sólo hay que ver que ya le está preguntando por toda esa parafernalia que el IDE que estará usando de JAVA le está metiendo a la fuerza. Se está distrayendo de lo realmente importante que son los conceptos.

Papel y boli.

3 respuestas
PlayingDead

#13 Mira que yo prefiero el tipado dinámico y el estático me parece un coñazo a estas alturas.

Pero para aprender a optimizar código (el tamaño de cada tipo de dato importa) y a no hacer auténticas cagadas con las conversiones creo que hay que empezar por el estático, hay que pensar que él en un futuro usará hasta arrays de bytes y chars y el conocer todo eso de forma explícita creo que ayuda.

No obstante, entiendo tu punto de vista, a veces el mismo lenguaje te limita a la hora de poner en práctica conceptos

1 respuesta
HeXaN
#14PlayingDead:

Pero para aprender a optimizar código

Estás pensando en un futuro tan lejano que carece de sentido. ¿Por qué? Porque estás pensando en implementaciones atadas a un lenguaje.

Enséñale conceptos que cuando entre a DAW ya los tenga aprendidos y sólo tenga que ver cómo se implementan en el lenguaje de turno.

2
Iselio

#13 Qué le está preguntado del IDE? qué problema hay con que haya fail fast si estás metiendo un gambazo con el tipo? exactamente qué concepto se está perdiendo con eso? no te sigo la verdad

B

.

Fyn4r

Empieza por el lenguaje más "sencillo" que te encuentres, es decir, aquel que te permita utilizar la menor cantidad de caracteres posible para ejecutar algo (es decir, olvida java xD) y enséñale a pensar. Pero a pensar en algoritmos, a recorrer listas, matrices y demás, no a pensar en el IDE me dice esto, en esto da un segmentation fault porque te has cargado el puntero y demás. Olvídate de tipos porque no debería pensar en nada más que números durante los primeros meses. Todo lo que venga a partir de ahí, que si tipado fuerte/debil, estático/dinámico, OO, más adelante.

2 1 respuesta
PlayingDead

#18 También es que en el primer año de DAW empiezan con Java, con lo que... también pienso en que entre con esa ventaja respecto a sus compañeros.

1 respuesta
Lexor

lo que tiene que conseguir es el cambio de paradigma de como se debe dialogar, los acentos y las comas son importantes pero no lo son tanto como la forma de estructurar la conversacion
yo estoy empezando y no me cuesta (por ahora, obvio) adivinar que es lo que se me pide y como deberia hacerlo, el problema es saber adaptarme a ese lenguaje y poder comunicarme
Enseñale a cambiar su forma de pensar y lo demas vendra rodado

AikonCWD

#13 Sigo pensando que hay muchos conceptos complicados de entender con lenguajes dinámicos. Todo el tema de la memoria, como se estructuran los datos, punteros, la pila, el call stack. Además al tener el tipado dinámico es más sencillo que se olvide de declarar las cosas correctamente.

1 1 respuesta
HeXaN

#21 Todos esos conceptos son agnósticos al lenguaje y se enseñan sobre el papel. Reitero una vez más: separar conceptos de implementación específica es la clave para no ser un masilla.

1 respuesta
isvidal

Imaginate que el primer lenguaje que te enseñen sea Java, yo creo que me hago camarero.

1 1 respuesta
AikonCWD

#22 Pues ya me explicarás como enseñas como funciona la pila, la memoria y los punteros con python + papel y boli.

1 respuesta
PlayingDead

#23 Pues a mí me gusta... no entiendo tanto hate xd

HeXaN

#24 No hace falta Python ya que eso, como digo, se enseña sin importar el lenguaje. En primero de grado se enseña, por cierto.

2 respuestas
PlayingDead

#26 ¿Cómo sobrecargas la pila en Python?

1 respuesta
AikonCWD

#27 con papel y boli

Aidanciyo

https://code.org/
Programación para niños

Earh

Yo le enseñaría Python, me parece mucho más accesible para empezar y luego si en DAW da Java pues eso que se lleva... además como a programar se aprende programando puede pasar los ejercicios que le manden en Java a Python o los que que haya hecho contigo en Python a Java y practicar.

Yo empecé con C# y cuando le pillé el puntillo me parecía la hostia en patineta, pero es que desde que me puse con Python en serio me parece de lo puto mejor, me da hasta tirria tener que usar en el trabajo PHP.