How do you go about teaching your kids? I don't have kids yet, but if they do have in interest in programming, I'd love to give them a strong head start like you have.
How do you go about teaching your kids? I don't have kids yet, but if they do have in interest in programming, I'd love to give them a strong head start like you have.
Regarding teaching, I understood early that while I can program, I have very little understanding on how to teach it. So first, she underwent two Python courses (basic and advanced) on stepik.org [0], which had automated tests and have her an understanding of the language.
Then, I planned to start throwing tasks of increasing complexity at her until she solves them, giving her a more or less complete coverage of all things programming. So far, she has written such things as
- Tetris, in the console, with keyboard input
- Snake game, with competing snakes which use wave algorithm to find path
- LZW algorithm to learn bits and compression and other things
Next my plan for her follows roughly this path:
- some GUI programming, using GTK and Windows Forms. Calculator or maybe Checkers or something.
- some web programming, backend and frontend. Most likely Django / jQuery
- maybe some neural networks since are all so hot now
- some hardcore assembler stuff, like maybe some simple game or visual demo
- some mobile development, Android or iOS
Once she'll be done with all that, I think she'll have quite a clear picture of most general areas of development and will be free to pursue the area she liked the most.
[0]: https://stepik.org
Demoscene/sizecoding might be interesting, especially if she also likes artistic stuff.
Yes. Bravo to you and your daughter for your perseverance in spite of the looming "disruption" coming for all human knowledge workers.
Regarding Racket, it looks interesting. While I never did anything like it myself back in the day, it looks like it'll be an interesting task for my daughter further down the road.
1) sequence in which you gave her tutorials e.g. first tetris, then snake game, etc.
2) sources that you used to guide her through these tasks? e.g. youtube videos or other links.
Thanks.
Then more advanced Python course [1]
Then we went for Tetris. I did provide her help in getting the initial loop running where you press the key and something happens, then she implemented the game logic by herself. I did ask her to explain the architecture to me in broad strokes prior to development, and gave her some feedback, so the architecture was adjusted a bit.
First version was built in a very direct way, so once it was done I told her about Object Oriented Programming and she rewrote Tetris using objects in a more elegant way.
Then she moved over to Snake game, and mostly did it by herself, reusing parts of the code that were used in Tetris (main game loop thing, mostly), I mostly provided feedback and beta testing. We had some interesting moments debugging the wave algorithm which computer player snakes used to find a target (a simple wave algorithm), and improving performance. Then, we moved on to this LZW thing and, unfortunately, its creators immediately started dying.
The reasoning why I chose these particular tasks is because they are all relatively limited in scope, so a studying task is not enormous in size so you never finish it and actually have a chance to ship a finished product to show it to friends/teachers.
I followed this teaching path: scratch > python > sqlite > javascript (web). I am missing algorithms and OOP, and will look for gradual learning resources in these area.
One recent area I tried was observability. With prometheus and grafana, they got into collecting more data points and creating visualizations for them. Bangle.js is another one.
Maybe Qt instead?
Suggestion that because the Qt docs tend to be much, much better + it's realistically cross platform, thus opens up more possibilities.