Let me supplement physical toys (which are most important for sure) with some additional ideas for building future programmers.
Children ages 3-7 are really just beginning to learn how to think abstractly, which is a pretty core competency for programming. So when you say you want to teach fundamentals of coding, you really aren't even at "coding" yet. You're really at the fundamentals of math, language, reasoning, and problem solving and curious mindsets.
So what are the fundamentals of coding that 3-7 year olds can actually do?
1) Math - I would scour the web for all the different ways you can do basic math with any type of physical object (pencils, fruit, whatever). You may think it's too simple, but if you take a cognitive approach to this, practice must be done at some point with mapping a number of any object to it's linguistic representation in one's mind. Practice counting up/down, sorting stuff into groups and sets, quantity, patterns (2x3, 3x2, are they the same? what's different?) etc, and doing simple arithmetic with actual objects. This is new to them and is fundamental to everything else.
2) Language - have adult conversations with your kids, and no not about adult topics, but with adult words and with adult grammar; no "baby-talk" in other words. And it's not about purposely choosing large and obscure words to obfuscate, but picking accurate words that probably leave little holes in understanding for the child to try and reason about. Hopefully they will ask if they don't know, or may even surmise correctly about word/phrase meaning. This might help with...
3) Reason/problem solving - Encourage experimentation in everything. If they see you constantly trying new things and failing gracefully and focusing more effort on finding solutions then hiding failures, you've taught them one of the most important lessons of all. Try, try, try many times, then go ask someone. You should be unquestionably the expert in some things, and a complete novice that asks questions and learns quickly in other things, and they should watch you in both situations. Seeing role models do both is an immensely powerful thing to observe to young children. It shows that adults can be both powerful professionals and learners. Where do you think they learn to laugh at, criticize, and fear failure? It's cultural. Make failure just another step to mastery.
4) Curious mindsets - in every category above, there are always opportunities to ask "why do you think this is?" or "how do you think this works?". You might get gibberish most of the time but it doesn't matter, they are going through the thought process and will get better with age. They need to be very comfortable with those questions at early ages and keep being willing to answer them. When they stop caring, THAT'S the problem.
So to try and answer your question more concretely, you can buy expensive toys made for programming but I don't see what it will accomplish. LEGOs are the gold standard, but really, every-day objects can do much of the above. Build a fort! Why are we building a fort? How do we do it? Tell me the steps for building a fort so we can do it again someday. How do we improve this fort? Tell me the steps for improving...
I think AI politicians or complex algorithms just risk being a more complicated form of legalese that even less people can understand (legalese in code/math form). With law in code form like that, you need to demand much more of the education system (scary!) to allow people to vote on PRs, if you even do that democratically. Otherwise, even more faith is put in the hands of the designers/core-maintainers as representatives, much like we already have. More ways to obfuscate direct effects and hide side-effects.
I truly think there is something there though, something from the open-source process that can make government more efficient and productive, but it's probably not in the way we are thinking. It probably looks less like software maintenance and more like science, dare I say political science. Crowd-source solutions and organize experiments across counties and states in a way that's data driven, not politics and need-for-reelection driven.
Speaking as a Workflowy user to your concerns, it's the best of all worlds for me:
- nightly export to dropbox as plaintext and a backup as a type of json format with more metadata. If Workflowy goes away tomorrow, I have everything and can continue in an editor if I like. But until then, I use the pretty web interface.
- multiple device support. I am not going to mess with ssh on my mobile devices. I use Workflowy for everything from extended note-taking and long-form writing to quick pre-set searches on the go for reference; and that's on all my various interfaces (and sometimes other peoples too).
- Workflowy is easy enough for laypersons to view and/or collaborate in seconds. No setup necessary on their end.
Of course a well rounded education comes from many sources and factors, both internal and external. But in general I feel that:
STEM training = literacy for the jobs we have now
Liberal arts training = big picture training for innovation that we have yet to do.
Remember this John Adams quote:
"I must study politics and war that my sons may have liberty to study mathematics and philosophy. My sons ought to study mathematics and philosophy, geography, natural history, naval architecture, navigation, commerce, and agriculture, in order to give their children a right to study painting, poetry, music, architecture, statuary, tapestry, and porcelain."
Education has moved in this direction, but our economy has not innovated alongside it to make work for them.
Of the handful of people I know that have bought Tesla's, they are very much not of the hacking mindset. I'm not saying this is forever true, but I think the type of person that can actually afford one usually has the "premium" and "executive" mindsets (if I can makeup some terms). That is, they'd rather pay extra for 98% of everything they want and not have the worry of needing to get their hands dirty (the premium mindset). And if there is a problem? They replace/trade-in/buy more premium services to get what they want. They have "their people" take care of it. These aren't intended to be negative descriptions, but more of an informal observation of how people in executive positions with resources available tend to prioritize their time and effort. But of course you'll eventually get more hackers drawn to the car in time.
For every starry-eyed and future creating technologist, who really does see the best-case scenario for what current and near-future technologies can accomplish, they need to always be shadowed by a team of altruistic business/PR/advertising-savvy advocates who can remind them how the worst among us are going to screw it all up so that our hero-geniuses can bake safeguards into the systems they create from the onset.
Technically, this might be syntax, but as someone who is learning Racket (and programming) in the beginning stages, it's so much less syntax to remember then even python (underscore, double underscore, with, decorators, list comprehensions etc all have their own syntax nuances), the only syntax I see in Racket is the s-expression, the quote, and the dots. Everything else is just the flow of programming logic. It really does free my mind to work on the problem domain itself! Been enjoying SICP so much.
Contracts make sense, and will probably be the first experiments with this. That seems to be what blockchain tech is tapping into first. I would think though that new languages developed for this would emphasize readability. Perhaps a wiki-style top layer for regular human reading where the definitions, terms, and links can be defined and standardized as code underneath and can do things like call to state or federal entities for rates, dates, numbers, or jurisdiction domains etc. upon "enforcement" (runtime).
Now your edit was really interesting. International trade/shipping might be ripe for automation in the future. Boats and drones might be able to simply upload the most recent contract and parse it into actionable rules, or, act on behalf of parameters set via the contract. Maybe delivery drones check local law dynamically on sale of weapons etc. so that it doesn't need to get hard-coded into the operating system.
I grant you the absurdity of enforcing all laws with machines/computers/robots. I don't think I was as clear as intended. But I do feel that there are plenty of processes and certain law domains that are equally absurd when you make humans enforce them. These would be things like financial regulation, taxes, immigration maybe? Domains where our nuance, context, and consideration (read: bias) can actually prevent and corrupt the enforcement of these laws. Now granted, this depends on the availability of data infrastructure among other things, but if I could clarify the question, I'm thinking about what lessons learned and processes from software development can bring about efficiencies in government that we haven't considered yet. Not some type of absolute computer takeover of government.
I heard this interview with the CEO. So Dstillery says they have anonymous but unique identifiers for each phone. They probably then track where people shop at, where they live, where they spend their time, etc, and probably cross reference it with other publicly available data to make profiles of people. I'm pretty impressed by it's capabilities but I am very curious (worried?) about how they get that gps data. Best I figure, it's either through apps installed in the phones (how!?) or, through the cell phone carriers releasing that data either publicly, or through some deal with the firm. Anyone have any insight? Does that seem sketchy to anyone else?
Yes, this is the other side of it. Make the hours you do have as productive as possible. Efficient problem solving and creative design (not just marathon coding) are also about getting your mind and body right. Get on consistent sleep patterns, eat healthy, exercise. Also, don't underestimate the importance of downtime for problem solving and planning. Bouncing off of another post from today, if you get the planning and design part right first, you can save yourself a lot of time in the implementation stages (https://news.ycombinator.com/item?id=10963229). It's also easier to know where your progress is toward a specific goal in concrete terms. That also makes it easier psychologically to take breaks and enjoy life a bit.
I would add to this too, a little life-hacking: Try to design your daily workflow (things that take time such as cooking, dishes, etc.) using the same strategies you use in programming. Modular food strategies so that you can cook once (on the weekend for example) and put together various meals by adding only little things here and there that round out the nutrition and quantity throughout the week with minimal dishes to clean after. Don't underestimate the efficiency of a good blender and protein shakes!
Get the right tools for the job too, maybe a standing desk to improve focus?
Lastly, I would add make sure you are picking projects that you find important and are passionate about. Thinking about them wakes you up. Aim for importance to you, not just # of commits. There will always be people who just work faster then you, or where money is not a problem for them, or where what seems like their hobbies are very tied into their actual work and the two overlap and they just seem more productive. That is where you have to focus on importance and not breadth but depth of where you spend you time.
I've been using this method for years. Very simple, and gets the job done. Most websites and desktop apps default to whites and off-whites which convert perfectly to blacks and off-blacks when enabled. Pocket, Firefox, and FBReader on my Android devices all have dark modes for reading on my mobile devices; takes care of all my use-cases!
I'm going to go out on a limb and say it's not the price of the electronics (which are very cheap), or the availability of them (they are plentiful), or even the knowledge to learn (this is the age of the Internet on mobile devices), but is actually the price of another thing that that is going up: time (and by extension, focus).
I feel that students have to start planning for college earlier and earlier these days, even planning how courses line up as early as middle school. When all academic scheduling decisions (sports, classes, extra curriculars, clubs, etc.) are always viewed through the lens of college admission, there is very little time to turn brains off and just play with the knowledge they've gained thus far. If an activity isn't directly linked to job training of one or two strong focuses that could potentially lead to a major in college and a job afterward, they aren't seriously considered as an activity worth spending time on, and that is a pity.
I would add lastly that as a counterbalance to this extreme need for academic focus, instead of seeking invigorating hobbies to which students at the end of the day will lack the energy for, they instead seek more mindless and passive activities which are readily available on their mobile devices. The harder they work, the dumber they want their hobbies to be.
Reminds me of a Radiolab episode[1] about a similar effort to bring back a specific species of tortoise in the Galapagos islands. The offending infringing species there where goats. What was really interesting was the method used for the eradication program.[2]
I think looking at the presence of the tech alone isn't enough to predict/correlate with broader economic productivity. The bottleneck really is the access to it in a legal (copyright), cost-effective, and scalable (special vs commodity hardware) sense. And those factors have a variety of paths to success depending on the tech in question and on the big business players and government policies involved at the time.
Children ages 3-7 are really just beginning to learn how to think abstractly, which is a pretty core competency for programming. So when you say you want to teach fundamentals of coding, you really aren't even at "coding" yet. You're really at the fundamentals of math, language, reasoning, and problem solving and curious mindsets.
So what are the fundamentals of coding that 3-7 year olds can actually do?
1) Math - I would scour the web for all the different ways you can do basic math with any type of physical object (pencils, fruit, whatever). You may think it's too simple, but if you take a cognitive approach to this, practice must be done at some point with mapping a number of any object to it's linguistic representation in one's mind. Practice counting up/down, sorting stuff into groups and sets, quantity, patterns (2x3, 3x2, are they the same? what's different?) etc, and doing simple arithmetic with actual objects. This is new to them and is fundamental to everything else.
2) Language - have adult conversations with your kids, and no not about adult topics, but with adult words and with adult grammar; no "baby-talk" in other words. And it's not about purposely choosing large and obscure words to obfuscate, but picking accurate words that probably leave little holes in understanding for the child to try and reason about. Hopefully they will ask if they don't know, or may even surmise correctly about word/phrase meaning. This might help with...
3) Reason/problem solving - Encourage experimentation in everything. If they see you constantly trying new things and failing gracefully and focusing more effort on finding solutions then hiding failures, you've taught them one of the most important lessons of all. Try, try, try many times, then go ask someone. You should be unquestionably the expert in some things, and a complete novice that asks questions and learns quickly in other things, and they should watch you in both situations. Seeing role models do both is an immensely powerful thing to observe to young children. It shows that adults can be both powerful professionals and learners. Where do you think they learn to laugh at, criticize, and fear failure? It's cultural. Make failure just another step to mastery.
4) Curious mindsets - in every category above, there are always opportunities to ask "why do you think this is?" or "how do you think this works?". You might get gibberish most of the time but it doesn't matter, they are going through the thought process and will get better with age. They need to be very comfortable with those questions at early ages and keep being willing to answer them. When they stop caring, THAT'S the problem.
So to try and answer your question more concretely, you can buy expensive toys made for programming but I don't see what it will accomplish. LEGOs are the gold standard, but really, every-day objects can do much of the above. Build a fort! Why are we building a fort? How do we do it? Tell me the steps for building a fort so we can do it again someday. How do we improve this fort? Tell me the steps for improving...