dwyl / book

đź“— Our Book on Full-Stack Web Application Development covering User Experience (UX) Design, Mobile/Offline/Security First, Progressive Enhancement, Continuous Integration/Deployment, Testing (UX/TDD/BDD), Performance-Driven-Development and much more!
https://dwyl.github.io/book/
820 stars 134 forks source link

How to teach kids (or other complete beginners) to code? #74

Open nelsonic opened 7 years ago

nelsonic commented 7 years ago

see: https://news.ycombinator.com/item?id=13675268

YvesMuyaBenda commented 7 years ago

If I could travel back in time to give myself advice, I would simple say: look for learning materials that discuss the test-first development approach from the start. The approach includes, design, spec-writing, breaking up the problem into small pieces within a sensible sequence, and thinking before typing.

nelsonic commented 7 years ago

“If you want to build a ship, don’t drum up people together to collect wood and don’t assign them tasks and work, but rather teach them to long for the endless immensity of the sea.” -- Antoine de Saint-Exupery

YvesMuyaBenda commented 7 years ago

An idea came to me within an aha! moment. The way I would go about teaching children and other beginners to code would be approaching programming from a problem-solving angle, relating it to how they already think and act, especially in learning. For example, a thought-process was running in my mind about autodidactism, how to go about learning independently from online resources, and because of my prior experience with programming, I could express the thought as: oh, one needs to abstract the steps within a tutorial to create something different analagous to how one would extract a function from a collection of expresssions with a similar purpose. A lot of self-development psychologies talk about writing down the steps to doing something before one does it ... algorithms: examples abound.

For an approach to teaching children that seems interesting, I found following old Kickstarter, but though the fellow appears to have an interesting approach, to my knowledge, he has not made it available to anyone but the folk who backed the Kickstarter: Computer Science for Your Child

YvesMuyaBenda commented 7 years ago

This book is on point: Computer Science Distilled. It is usable by those that have learnt the basic elements of programming, and would be excellent preperation for SICP. Folk complain about the mathematical background needed for SICP (super grateful for the maths degree right here), but this book puts the use of models, including mathematics one in a greater context. It fills in a lot of stuff that is normally "unsaid" and assumed. It gave me a whole general context to organize what I already know and understand: sometimes, one needs to go back to the very basics and start again, in order to make further headway, and faster too!

YvesMuyaBenda commented 7 years ago

Too, I have this vision that it would probably be best to teach mathematics from the beginning from a computer programming/computer science point of view. It would be super easy (though time consuming) to convert Anthony Wildberger's basically building mathematics up from scratch into code; (data structures and functions that operate on them, could do it functional, object-oriented, imperative. whatever basically) for example, this video on data structures. Programming languages provide a stricter langauge than the formal/semi-formal/intuitive/visual-imagery based language that mathematics is normally taught in.

beardfacebo commented 7 years ago

In my opinion these are two separate things, dependent on the age range of the children. I'm just going to spill a lot of my thoughts/experiences in a stream of consciousness, and hopefully some will be of use.

Smaller children <10 There are some good shorter programmes out there, for example the stuff on code.org, but when working through these with my girlfriends nephew Archie (7), they are very engaging, though lack linkage back to the fundamentals of programming and focus instead on computational thinking at an abstract level. Archie was left wanting more, and so we 'pair programmed' (he told me what to do) a drawing app with canvas, and he really enjoyed that. I'm currently looking at other activities for us to do together along this realm. There are visual editors out there for javascript (I feel like I've seen others as well), but he really didn't engage with them.

Micro-bit and youth uk I'm going to be writing a few of the activities for the Youth UK's generation code, which uses the microbit and attributed javascript block editor. Happy to share learning from this, insights they've gleamed on engaging kids in the programme/using the micro-bit.

Older kids Having spoken to some teachers in passing and mentoring a children at AFC's family school last year, there doesn't feel like enough of a bridge from the beginners stuff to actually getting into programming, where the concepts are more abstract, and the language far less accessible. There is also a gap in teaching programming concepts (e.g. architectures, types of languages).

Beginners I feel that programmes like free code camp are great, but are obviously language specific, and don't focus enough on enforcing learning through projects. They're also a very linear path, and people I've spoke to who are learning at that level would prefer a mix and match approach to how to get to their goal.

Happy to chat more/expand on anything here

YvesMuyaBenda commented 7 years ago

I think this definition of a variable would be useful for all learning and teaching programming. It is rare that I see a basic concept so well explained. Programming texts often use prior experience in algebra to ground the definition of a variable within programming languages, but the prior experience in algebra is hazy as often no sharp clear precise definition was ever given. For one the discussion illustrates why in ES6 there was a need to decompose the var statement into a var and const statement as opposed to conflating them in var.