Hacker News new | ask | show | jobs
by samwillis 1262 days ago
This looks really good, going through the first couple of tasks it seems well considered.

I'm introducing my 8yo daughter to programming at the moment, she is beginning to play around with Scratch. I'm keeping my eye out some something closer to proper coding though. I think this may be a little too far at the moment, but I may try her out on it with me sitting next to her and see how she gets on!

Is there any way for users to construct their own multiple stage tutorials? (It looks like we can do single questions)

Currently you have the console output, have you considered having a canvas/bitmap output that could be targeted with the various Python drawing and image manipulation apis?

Incredibly generous of you to make it open source!

5 comments

For 8yo, maybe you can consider bringing her through Hedy:

https://hedy.org/

It's gradual (starts easy but limited, then with progress through levels gets more precise and powerful), and I read that it gets to full blown Python programming.

Theres an excellent talk on the approach by the author:

https://m.youtube.com/watch?v=fmF7HpU_-9k

Edit: +Hedy is designed with kids in mind, as opposed to adults, which I believe future coder and others are more targeted to.

Hedy looks really good, thanks for the tip!

Yes, Future Coder is clearly aimed at adults or older teenagers, and looks really good for them. That was mostly the point of my question about user created tutorials. Using the current tutorial as a basis, but simplifying the language and some of the conceptual stuff would make something that could work for younger kids.

> simplifying the language and some of the conceptual stuff

This might work to an extent, but I think it makes more sense to choose a resource that's actually targeted at kids so that it's holistically and fundamentally designed to be the best thing possible for kids. That means features like simplifying the language itself (like Hedy or Scratch) or a game like https://codecombat.com/ to make it fun.

I'm thinking of going through it with my kids, and then I can explain what they don't understand.
My children were vaguely interested in programming but one thing they got of it was that learning functions in Python helped them enormously with formal functions in math.

This is one of the things I regret with how math is taught in France: it stresses way too much the formal part and this is terrifying for children (and teens and everyone except mathematicians).

We have a religious reverence to maths in France. It is better now but used to be simply ridiculous. Unfortunately it still means that some more advanced topics such as derivatives are introduced through definitions (the chapter starts with "be a function f(x) with x in the domain of real numbers, a derivative is a function such that f'(x) = lim h→0 ...").

My son came to me with a WTF? I told him about average velocity transitioning to instant velocity by reducing dt, or about acceleration - and finished by showing that a derivative is a function factory (a function gets in, a completely different, unrelated function goes out). He was then ready for the definition.

Same with physics which is tainted by chemistry, with terminally boring topics introduced first. No wonder that we have less and less STEM students.

futurecoder was actually translated to French by three teachers working for the French Ministry of Education to use when teaching the maths/programming subject 'NSI'.

I love maths myself but I've made a strong effort to avoid maths in examples/exercises so that the course is approachable to students who don't like maths. The first page is a special exception as it lets users immediately try something familiar (like 1+2) without needing to introduce strings or any other new concepts.

Sorry if I was unclear but this was in no way a criticism of your excellent product. It is truly fantastic.

It was an unrelated comment that popped up in my head when reading "my 8 years old daughter is learning to code". And it was a "yay!" - because programming helps with math concepts afterward.

I am not a mathematician (PhD in physics, long time forgotten) so I see maths as a useful toolbox to solve problems I can describe. Some of the tools are wonderful and I dream of them at night (analysis, mostly), and some are blobs I poke with a stick when I have to (algebra, geometry mostly).

The 'NSI' option in high school is a new one, and one of the modern ones. It is useful later (no matter where you actaully study) so I am glad that someone at the ministry is using futurecoder as a reference. When Python was introduced a few years ago, it was done in the typical "let's put some boring theory first to make them hate us" fashion and it is wonderful this is changing.

> Sorry if I was unclear but this was in no way a criticism of your excellent product. It is truly fantastic.

Thank you! I don't think you were unclear and I didn't read any criticism in your comment, I'm not sure why you thought I did. I was just sharing and adding to the conversation.

This. Mathetmatical functions never reqlly clicked until after I started learning coding. It helps that the approach I've used is very functional-type programming
The other advantage is that in programing you introduce functions with some hand-waving and "black boxes".

I told my children this is something you put data in , it does some magic, and your get some data out. I started with some built-in functions (or functions I wrote and hide) so that they understand the mechanics.

Then they finally asked "can I do my own function?" and, bam, there we were :)

Removing the ceremonial of mathematical correctness helped a lot.

This is also the reason I am sad we do not give children half- (or 3/4-) lies: we tell them something more or less correct so that they can play with it (making sure they do not stumble upon edge cases) and then refine their knowledge.

This is what my math prof on my 3rd year of physics did: he said "I will give you a neat trick I will not explain because it will be super useful to you now. Next year, when you understand it, it won't be of any practical use anymore". I was not traumatized.

Not sure if you have any iOS or Mac devices but I've found the Shortcuts app to be an amazing middle-ground for getting into coding and automation.

Its not technically "writing" actual code but given the fact your Shortcut is almost a program or at least a high-level function and that you can combine them to execute more complex tasks, its fantastic for promoting algorithmic thinking and does so in a visually-compelling colorful way.

Futurecoder looks awesome, if you are looking for something for younger kids that’s more advanced than scratch I made pickcode.io

It’s frame based editing (draggable statements, free form expressions), and you can do turtle graphics and chatbots. I have 4 free tutorials online, if you want more you can email me, my address is in my bio on here

This looks amazing, congratulations!
> Is there any way for users to construct their own multiple stage tutorials?

I really hope some kind of GUI to do that can exist one day, but it's definitely a complicated feature that I'd need help from contributors to build. Same for graphical output.

> (It looks like we can do single questions)

I think you're talking about the question wizard. That's for helping people to write good quality questions about their own struggles to post on StackOverflow and similar sites. It's not for making 'challenges' for others to solve.

> Incredibly generous of you to make it open source!

Thank you! I'm really trying to improve the state of education and make the world a better place. I hope that in addition to directly helping users, I can inspire other educators, raise the bar, and help them build similar products. To this end, futurecoder is powered by many open source libraries that I've created which are designed to also be useful in their own right:

Debuggers: these are integrated in the site but also usable in any environment:

- https://github.com/alexmojaki/birdseye

- https://github.com/alexmojaki/snoop

- https://github.com/alexmojaki/cheap_repr (not a debugger, but used by the above two as well as directly by futurecoder)

Tracebacks:

- https://github.com/alexmojaki/stack_data (this is also what powers the new IPython tracebacks)

- https://github.com/alexmojaki/executing (allows highlighting the exact spot where the error occurred, but also enables loads of other magical applications)

- https://github.com/alexmojaki/pure_eval

You can see a nicer presentation (with pictures) of the above as well as other projects of mine on my profile https://github.com/alexmojaki

Libraries which I specifically extracted from futurecoder to help build another similar educational site https://papyros.dodona.be/?locale=en (which does have a canvas output, at least for matplotlib):

- https://github.com/alexmojaki/sync-message (allows synchronous communication with web workers to make input() work properly)

- https://github.com/alexmojaki/comsync

- https://github.com/alexmojaki/pyodide-worker-runner

- https://github.com/alexmojaki/python_runner

Thanks! FWICS, futurecoder (and JupyterLite) may be the best way to run `print("hello world!")` in Python on Chromebooks for Education and Chromebooks with Family Link which don't have VMs or Containers ((!) which we rely upon on the server side to host container web shells like e.g. Google Colab and GitHub Codespaces (which aren't available for kids < 13) and cocalc-docker and ml-tooling/ml-workspace and kaggle/docker-python and https://kaggle.com/learn )

Also looked at codesters. quobit/awesome-python-in-education: https://github.com/quobit/awesome-python-in-education

Looks like `Ctrl-Enter` works, just like jupyter/vscode.

iodide-project/iodide > "Compatibility with 'percent' notebook format" which works with VScode, Spyder, pycharm, https://github.com/iodide-project/iodide/issues/2942:

  # %%
  import sympy as sy
  import numpy as np
  import scipy as sp
  import pandas as pd
  # %%
  print("hello")
  # %%
  print("world")

Does it work offline? jupyterlite/jupyterlite "Offline PWA access" https://github.com/jupyterlite/jupyterlite/issues/941
I just wanted to say thank you for those libraries. They were a lifesaver when building my own pyodide based project.
Awesome! Can you show me what you built?
Yes, here's a very rough PoC that I plan on integrating with a bigger project at some point https://glittering-narwhal-96bc3e.netlify.app/
Thanks. I tried running code but couldn't see any results/output. I was hoping to see `input()` in action. The dev console just logs `{type: 'error', data: '{}', contentType: 'text/json'}`
Haha yes I think I removed the output component when doing some testing and inputs was something I considered but eventually decided against it. My goal is to provide an app to allow users to "grind" leetcode/tech interview questions with spaced repetition, and I decided that instead of taking on the extra complexity of user inputs, it'd be better to focus on the value proposition of the app.

But this is just codemirror + pyodide, I'm still building the rest of it.