Dropping a newbie into Eclipse or MonoDevelop makes them feel like
they are walking around in a byzantine museum, afraid to touch
things, while DrRacket feels closer to old-school personal computers
where you felt like you were in command of the machine.
I think this is a very important observation. As with most things, it's extremely important to get in during the humble beginning stage and then tracing your way up to grok more complicated systems. Similar to the "first principle" approach.
My 7 year old is learning on a Raspberry Pi that does not load X by default. She gets around the terminal pretty well (changing, dirs, calling python scripts, etc.). The GUI is just overwhelming at this point. She prefers the terminal. In fact, she will boot it up and type:
nano story.txt
To start writing simple stories (she loves doing that). And yes, she saves it by pressing Ctrl-x, y, and enter. :D
> And yes, she saves it by pressing Ctrl-x, y, and enter. :D
As a child there is no bias as to 'oh it must be hard doing that because I am use to clicking X in Windows' they just learn stuff and get on with it. We should all remember to be like children sometimes. Explore ... not language wars!
Never used Go and have no plans to in the near future either. I have found C to be a useful training language but it can get tricky once you get to pointers.
We tried scratch, but it bored her for whatever reason. Its a nice environment, though. Python is something she is slowly learning through command line games like rock, paper, scissors. Go, well, I don't want to have her suffer through Go's syntax just yet. BASIC is outdated and too verbose. She has typed C code before and found it fun. Dunno, I don't want her to be anything but herself. This is just a way to spend time together.
I do plan to introduce her to GPIO stuff. Maybe mix it in with a video game of sorts. She does have experience with the Arduino, so the concept of sensors is not new to her.
There is nothing harder to understand about indentation levels than curly braces, if you haven't already developed a preference for curly braces. Go is really not designed as a tool for new programmers, you are just projecting your preferences onto kids.
>There is nothing harder to understand about indentation levels than curly braces //
At the start of this year I finished a first course in Python to learn in anticipation of [possibly] using it for home learning with my kids (it seems widely used for education). As I'm familiar with programming I searched for an IDE as I started. It told me when I had dropped a space or used a tab by accident. I tried several different environments including my standard editor choices - nano and Kate - revealing non-printing characters was a clear advantage. Others (primarily adults) who were starting fresh in programming had lots of problems with errant spaces.
With braces you can see more clearly when there is an error of addition or omission, not so much with spaces. Like I tried to say above: this is clearly tractable with the right tools but the demarcation - I feel - of braces can be a more clear and obvious sign of separation than whitespace. For younger people with less spatial reasoning and less accurate perception of text lining up it rather seems it could be pretty much harder to use whitespace structuring.
Personally I like the overall "clean" appearance of Python compared to PHP (say), debugging with tools is fine, when I was testing different environments and tripped on whitespace problems it was a nightmare rather reminiscent of trying to debug HTML tables some years back.
My intuition is that indentation is more readily apparent. You can tell that a group of lines or an individual line is indented or not at a glance. It's natural to see that they are grouped. With braces, you have to search for the opening and closing brace, and furthermore you must search within those braces to ensure another brace set isn't being opened, in case you missed one. You have to learn both -- about how to designate a set of statements as grouped using opening and closing braces, and how to detect a common class of errors related to nesting braces.
The thing is, those of us who prefer braces or other syntax elements also indent. It's not either/or. I want the redundancy. I can more easily see how things line up.
> With braces, you have to search for the opening and closing brace
It's probably been 20-30 years since I used an editor that couldn't highlight the matching brace, and that wouldn't show me which opening brace the closing brace I just put down matches up with.
But it's just been a day since the last cut and paste "accident" left me with a badly mis-indented piece of code... which I happily could auto-format back to sanity with a couple of keystrokes because the indentation was not all the editor had to go by.
Python can be a handful due to the weird whitespace rules. Its one of the things I hate about the language, and I use it every day. Dunno if I'd put curly braces in it, but the Hy language (a pseudo lisp in pythonish) really feels good to these old eyes.
Never used Go although I've used a lot of C style languages that use braces and line terminators. I also use Python and like it a lot.
My hesitation for using it with kids comes from anecdotal evidence (both written and in person). Kids seem to have trouble with significant whitespace (such as with Python ifs/loops/functions).
It may be better to use BASIC or Ruby. This way you avoid many of the braces and semicolons. You can still end a line with just a CR/LF but it makes it obvious where statements, functions and loops end.
One very good option that I haven't seen mentioned yet is Love2D. It is basically Lua with solid game libraries wrapped into very simple interfaces. load sound, play sound. load image, display image, etc. while under the hood is SDL, DevIL and other libs that make it run fast.
I started putting together a "book" when I was teaching my 6 year old a bit about coding. It uses a BBC Micro emulator and BBC BASIC as the intro language. Never got around to finishing it... http://c4k.rabidgremlin.com/
However it did encourage him to want to make games... this is the first one: http://ackson.nz/
I did the coding but it was his concept, he did all the graphics (scanned pictures he drew), the font (generated from his handwriting) and sound effects (that's him making all the sounds).
He also built the levels and used a music generator to create the background music (not in the version that is on the website yet). This was all done in Unity with a lot of prefabs to make it easy for him to build the levels.
I'm totally going to introduce him to PICO-8 (see link below) next to see how he gets on :)
Nice game! Its super fun. Wll be playing it with my kid when she gets home later today. May you share the source code? I haven't dabbed in unity and it would be nice to see how you built it (and maybe hack it a bit).
Totally.. he even invented the company "Ackson" (for Ackerman & Son) and the company logo you can see in the corner of the main screen (him and I holding hands).
She has an iPad, but treats it like I used to treat a TV back when I was her age in the 80s. The RPi is to her what the C64 was to me. Tablets and phones are entertainment (read music, video and games) gadgets. The RPi is more like something to tinker with. However, just like Carmack's son, the environment where she learns is heavily biased towards technology. Having designed and built her own little robot at age six because I build robots myself. She also breadboards for fun because all the required parts are at her reach. If I had a quarter for every LED she has burnt...
I had one of those "I must be getting old!" moments (I'm not that old, but still!). My niece is four and she's had iPads pretty much forever, so it was funny watching her sit at my desktop machine and immediately start swiping at the screen trying to drag things around and having the most puzzled look on her face of "why isn't this doing anything?".
I was a keyboard only user back in the day, but I've spent too long on touch screen laptops, and now find myself getting frustrated every time I'm dropped behind a non touch laptop. Every single time I find myself tapping the screen to dismiss a dialog. I guess it's what you're used to that determines what you find user friendly.
Its happened to my kid, too. What really shocked me is telling her that books were what existed before the internet. Her response? "There was no youtube?"
I can't wait to get home from work to try this, looks awesome!!
I've been looking for something that gives a modern, live-coding-ish experience similar to how you used to program in BASIC on the Commodore 64. No clutter, a fullscreen immediate editor/REPL in one window, nice big text, etc.
The closest I've found to what I'm after (until now that is) is (fluxus) (http://www.pawfal.org/fluxus/). Would really really love to hear of any others.
How widespeard of a belief is this in the teaching community? I happen to completely agree with it, but I've also heard the opposite -- suggestions that dropping kids into professional coding environments would give them the feeling they were doing something "for real" and help motivate them. I feel that the cognitive load of these kinds of environments is so high, and the possibility to click something that breaks everything unexplainably so great, that introducing kids to programming using systems whose environment they could completely comprehend seemed like a no-brainer. Was wondering if there was evidence to this intution (or contrary to it).
The school where I work at is incidentally piloting a intro to computer programming course that uses Blender and Python for completely green 10yr olds. I don't see this turning out well; how doesn't it just devolve into a CTRL-C/CTRL-V bonanza?
This is just a personal anecdote, but my first experience with programming was in an introductory CS course where Visual Studio was the default (but not mandatory) dev environment. Naturally, I used it instead of any CLI because I was an absolute beginner.
This is coming from someone who loves VS, but it is not something beginners should have to deal with. Some of my questions that distracted me from actually solving problems (note the technically incorrect usage of certain terms; this is intentional):
- Why is the options menu so huge?
- What the hell is a project?
- Oh my god I clicked in the thing and this red ball popped up and now the code won't move past it!
- Why do I need to build the project? Can't I just run my code in the file?
- Why do new menus pop up when I click "Run"?
- What the hell does "step into" and "step over" mean?
I think that a CLI or super basic IDE with minimal options and capabilities is the way to go when dealing with people who are beginners. On that same note, I do find it disheartening that many upper-division courses at college never bother with IDEs, and teachers tell students to just "figure it out on your own".
SmallBasic is probably a good idea for young students working through these problems.
I'm a big fan of VS for C# and IntelliJ for Java. Neither of these are Babby's First IDE, but once you have mastered the basic ideas of working in an IDE they pretty much work the way you would expect.
JetBrains' other IDEs and plugins have also been uniformly excellent, in my experience. The VC++ parts of VS are a lot rougher, but I suppose that's to be expected.
Same. Seriously, it's a fantastic example of "user interface designed by an engineer". It's not that I don't understand how to use Eclipse - sadly, it's an editor I have spent all too much time working with in various incarnations/skins. It's incredibly powerful and extensible (which unfortunately leads to it being used as a base for further IDEs built on top of it), it's just incredibly painful and unintuitive to use. You can do literally anything, it'll just be buried five menus deep inside some control panel.
Today I fired up Android Studio for the first time, and I literally cracked a smile and did a fistpump when I saw IntelliJ staring back at me instead of fucking Eclipse.
The only evidence I have is that game for adults called `Word'. I strongly believe they would be much better players if they sticked to Wordpad for a year or two before switching to Word (they might then realize they don't need it 99.9999% of the time).
I've switched to markdown for most of my personal stuff. In Word my typing content to formatting content was around 60/40. In markdown I format as I type and it's maybe 5% tops.
I personally was introduced to programming as a hobby when I was 10y old, in an after-school class, where we used visual basic for applications. This was early 2000's and VBA editor bundled with every Office was suprisingly decent, and I remember quite fondly creatin random poem-generators spamming endless streams of message boxes :D
So, if they manage to make their way around some thing ordinary but complex such as spreadsheet/presentation editor, I don't think bloated IDE's would be too much of a hinderance.
So even though in principle, I like the simplicity of repl for teaching somebody, my afternoon class 15 years ago didn't have problem with the "high cognitive load" :)
Regarding blender ... If you want to teach them basics of graphics/3d modeling first and then showcase the basic, and make them interactive with its drag&drop/node-based actor model ... it might be fun. But I haven't used blender in more than 5 years, so I don't really know, how much it supports the "game-dev-teaching" angle.
My experience TA'ing a classroom full of CS110 (introduction to programming for CS majors, taught in Java) was that the cognitive load of Eclipse was indeed very high. Most people preferred Netbeans. The people who did prefer Eclipse were the high-flyers who had done programming or worked in it previously.
Unfortunately I have found that NetBeans is often missing some functionality around the edges. For example, it doesn't support parameterized JUnit tests (they run, they count towards success/failure, but don't display in the GUI). That's not exactly new functionality either, they've been around since what, 2010? It's a shame because Netbeans is definitely a more polished environment.
I would suggest that you check out PyCharm and see if it suits your needs. Everything I've tried by JetBrains has been absolutely fantastic.
I don't understand the appeal of learning programming without the beginning programmer being in charge of control flow.
Attaching scripts to things is useful for people with skills in using 3D tools, but now you have to introduce them to the concept of writing functions to be executed repeatedly in a loop without them being able to see the loop.
Student: How does it know to keep running my script?
> suggestions that dropping kids into professional coding environments would give them the feeling they were doing something "for real" and help motivate them
People that say this have almost never actually tried to teach kids programming from scratch. Throw someone in the ocean and they will drown. Build up starting in a kiddie pool and after practice, they could be a life guard.
The same thing happens with computer science all the time. The very first thing taught is C++. I can't think of anything worse for someone who hasn't ever seen an if statement or a loop than to burden them with a deluge of functions whos motivations aren't clear until programming a large project for two years.
> Dropping a newbie into Eclipse or MonoDevelop makes them feel like they are walking around in a byzantine museum
I tried really hard to use and like free/open source IDEs like Eclipse, Aptana, and Netbeans. They all felt clunky, didn't work, or worse took away features in later versions. I finally forked out the money for PHPStorm, PyCharm, and IntelliJ and it's been the best money I've ever spent. Trying to learn the internals of indefero using vi was a challenge (with file_put_contents as a debugging mechanism...) - but once I figured out how to use xdebug in PHPStorm it's just been amazing. It has the feel of Visual Studio without the extra bloat.
Haha. You began listing off the IDEs, and I was going to post suggesting the IntelliJ line. There are still some clunky annoyances and bloat in the software, but overall it is the best line of editors I have ever used.
You say you've forked out money for both PHPStorm/PyCharm and the expensive IntelliJ. I thought IntelliJ automatically supports all the language addons, so why separate copies of the language-specific bundles? Am I wrong about IntelliJ, or did you just happen to buy that one last?
Well I have a mix of their free licenses (for open source projects) and paid licenses. I did pay for PyCharm and PHPStorm (and upgrades). Needless to say I do use commercial versions of all of them on an almost daily basis and I couldn't use anything else.
I could be wrong - but the way I understand IntelliJ language plugins is just really code autocomplete/syntax highlighting. PyCharm and PHPstorm have strong integration with the languages (debugging, inspectors, etc).
As an aside - for an individual license for IntelliJ $200 isn't a lot. Totally not rubbing it in but I've spent thousands of dollars on Visual Studio subscriptions (and I think they gave me a lifetime subscription of $50/month to Azure...). Check out bizspark - I definitely recommend it. Microsoft even waived the graduation fee for me.
I think of it as "hockey-stick difficulty". You need to start super easy so you know you're set up correctly, and then you can ramp as hard as you can to launch.
Works really well with systems built from many simple parts, too. Learn the bag of small pieces (linear) then jump in and go crazy with the combinations (exponential).
I imagine this sentiment is going to be very unpopular here, but as a parent of a ten-year-old, I find this kind of fetishizing of the accomplishments of ten-year-olds to be disturbing. I think it's great that Carmack's son has taken an interest in programming at such a young age, but why need this be so public? Not only does this do his son a disservice (who, despite his precociousness, is not old enough to understand how cruel the internet can be -- or how long its memory), it also does other children a disservice by implicitly encouraging absurdly aspirational parenting. Witness this comment, found in this HN discussion:
I am so jealous when I hear these damn stories. Another 5 or more years to go. Does anyone have a book about the method they develop? I bet that, following it to the T or not, it would sell here with the HN crowd.
It's great to inspire your kids to program (computational thinking is literacy, after all), but it's deeply misguided to believe that normal ten-year-olds exhibit the kind of intense interest that Carmack's son seems to display here -- and indeed, believing that a "method" can yield this kind of interest in a child can result in the kind of paternal (or maternal) disappointment that does lasting emotional harm.
Good on Carmack's son for showing such interest and talent, but let's encourage that to be fostered relatively privately -- and thereby allow him to be what he is first and foremost: a ten-year-old kid.
I am glad you have vocalised this sentiment. I have been feeling vaguely uneasy about this whole thread, and honestly i had put it down to plain jealousy (“if only my childhood environment hadn't consisted of accountant parents but programmers”). I think it's more than that though, this morning i already had an offline chat with someone about it, and came to the conclusion that it was perhaps setting up unreasonable expectations for those kids who don't have rockstar and/or programmer parents. You've hit the nail on the head, in my humble opinion.
Let the kid decide. Maybe he wants to become an astronaut instead, or a penniless country musician. We'll see, all in good time.
I discovered programming as a ten year old because I grew tired of the games I had for my C64. After all C64 BASIC was there all along, behind the scenes, just waiting for me. Today when kids grow tired of the games they have, they open the App Store and download another one. There's no programming language "behind the scenes" waiting for to be discovered by a bored ten year old.
I totally agree that kids should decide and that as parents we should never force them to fulfill our dreams. But at the same time as adults we still need to show them what options there are, guide them through obstacles and push them a little when it's boring or scary in order to make them grow.
Far too often today I see parents (myself no exception though I try no to) treat their children as small adults, as if they already possess all the knowledge and skill to make informed decisions about what's best for them. When I take the time to really listen to my kids it always strikes me how much their view of the world differs from mine. It's easy to think that a certain event we experience together has the same impact on us, but a lot of the things I consider trivial has a lasting effect on my kids.
I guess what I want to say is that it's easy to say "if the kid wants to program, she will program" but it doesn't always work that way if she doesn't know that you can program.
Wow. I think you missed the point there. He is extolling the virtues of Racket and Dr. Racket. I agree with him, and I think it needs a lot more evangelizing.
My son is 6 tomorrow and is also using Dr. Racket to learn programming. I post on twitter and Facebook about it. I'm proud of my son. But more than that, I'm amazed at Racket as an environment for learning and teaching programming.
Is it considered a racist stereotype if it is true though? My wife is Chinese and most of her stories do corroborate what parent said. In big cities the school system is very demanding and if you want to land in a good college you have to land in a good high school and so on. With an extremely competitive job market it is not unconceivable that parents push their kids very hard.
Sure, but there is still a difference between, say, "as someone living in a certain section of a highly competitive environment", and "as a Chinese", since the latter could at least be read to imply that it's a genetic trait, which would be obviously silly. Of course it can also be a shorthand for the more verbose way to put it, but I suspect people here are talking more about descent than the society they are most tightly integrated into.
If you make your kids learn something from a very early age, I think it's reasonable to assume that they'll become pretty good at it. Look for example at Laszlo Polgar's daughters [1]. Most violinists that I know where also forced by their parents to learn the instrument.
Wow, I hope you're not serious -- this kind of intense parental pressure is much more likely to detonate in early adulthood than it is to generate whatever the hell it is you're trying to generate. There are many examples of prodigious kids that have profound struggles in adulthood, but one particularly poignant example is Todd Marinovich[1], who has since become an excellent speaker on the peril of pushing youngsters too hard.
If you are forced to learn something at a very early age, you will drop it like a hot potatoe the day you get free choice.
If you are forced even more, that Resistance to the "system" attitude and the results, might even become part of the core personality.
Force is used by those who can not encourage by example. If you can encourage by example, all that force will lead to someone who is very good at circumventing bigot rule-systems. Who will then pass that attitude to his son/her daughter.
Ah! That constant realization. It is hard, but the "what now" feeling I get after polishing a small stupid sideproject of mine until there is really nothing left to do but adding features I don't need or want. I like to think it is teaching me good habits, but that is really not very comforting.
This week I revisited my scheme automounter I have running on my raspberry pi that I wrote when I first learned scheme. I made the code half as long and made it not suck and now I am struggling with not starting an ever-growing project of replacing systemd with it...
My point was that he's more likely to work for himself, whether for increasing his wealth or for some other goal, than care about how employable he is to somebody else.
My 11 year old son submitted his first LudumDare Jam game this morning. It's a Javascript / HTML5 clicker/incremental game (think Cookie Clicker) built on a game engine I created. He's been getting so much better at coding all summer long. I had to help a lot at first, but now he's implementing everything on his own, and only comes to me when he can't hunt down a bug - which 99.9% of the time is a missing end-quote, ) or }
I'm not sure I want him to have a public website though with photos and an email address posted :/ I guess I'm not as trusting of... well... the entire world. Then again, maybe it's a good idea. I don't want him to leave the house at 18 and be surprised at how nasty the Internet can be.
Thinking back to my own learning curve, I'm not sure if a linter would be helpful or harmful. On the one hand, it makes him think about the little details, on the other hand, not having to think about it frees him up to move on to thinking about bigger things.
> DrRacket feels closer to old-school personal computers where you felt like you were in command of the machine.
This motivates the design of my Scheme IDE, Glass Table [https://github.com/bitwize/glasstable], which is modelled on old-school micro BASICs (notably from Microsoft).
GT is implemented as a series of hooks into the REPL, which listen to all typed input for variable, procedure, or macro definitions and log them in a "workspace" which can then be saved as a Scheme file. Individual definitions in the workspace can then be edited with an inferior editor (or, if you are working from inside emacs, with emacsclient).
Not to take anything away from DrRacket of course. Any programming tool that puts direct, immediate command of the machine at your fingertips is a good thing.
I love scheme, though at first I definitely thought I would hate it. The big issue that I have with it is the difference between interpreters and how things that work in Petite won't always work in Gambit.
A bit off-topic here, but still related I guess. I have a 1 year old daughter and I keep wondering what would be the right time to introduce her to computers and programming in the future?
I have always thought that she should spend time reading books, playing in the backyard and lego before she delves into computers.
Have any other programmer parents thought about this as well? Or any other experiences on how they introduced programming to their kids?
I've tried introducing my son to Scratch (and one other language - it was a long time ago so I forget), and it was hard to keep him motivated without a meaningful sense of forward progress.
A class provides better structure with an end goal in mind. We enrolled him in several "make a game" camps that I think he enjoyed more than open-ended exploration.
These days, he takes CS courses in high school and enjoys them, I think getting them into programming at a young age is fine but not a necessary condition if you would like them to have it as a skill later in life.
As a parent, I'd say to introduce them to many different sorts of experiences and indulge them if they show interest, and be willing to let them change their mind. Be interested in what they do.
One of the more valuable things I've found when teaching is to always establish "the path forward". I wish that the CS Ed community had more established paths that I could share out. It's easy to point people towards CodeCademy, for instance, but I don't always have a glib answer after that.
Agreed. When I started learning to program around 12, I was very motivated by what I wanted to make, not follow some bland tutorial ala CodeCademy.
From my experiences in university so far (Comp Sci), this experience seems to be pretty rare. If I ever have kids, I hope to be able to guide them in a similar way I learned as a kid. If they want to mod Minecraft, sure, let's start with that and not a boring tutorial for TodoApp#5034.
What you say about Minecraft rings true. I've been trying to get my 12 year old brother into programming for a while, never really succeeded. Today I setup Forge and taught him how to make an item for Minecraft. That got him excited about programming (or at least what one can do with it) more than anything else.
It's a bit less polished, but far, far better when it comes to hacking. I found it significantly easier to create a mod for Minetest than to use a mod in Minecraft. Once my kids grasped the idea that they could add whatever items and behavior they could dream up, they really took a shine to it. The Lua coding used is very approachable.
That does actually seem like it might be better, I admit Forge and Java would probably seem quite daunting to someone new. I'll see what he thinks!
The only issue though, is that I think a lot of his motivation stems from potentially sharing what he has made - pretty much everyone his age has a copy of Minecraft.
There is a bit of a network problem with it; sure.
One advantage that may help is not needing a license; if you have siblings that have to share a Minecraft account they can play Minetest on as many machines as they have without bugging their parents to pay for a new account. Plus it can run on much older machines.
But yeah, it can be a tough sell just because people don't want to bother.
My oldest daughter is 6. I introduced her to programming by letting her type in a full-screen emacs buffer with large letters. We'd change the colors, make a "rainstorm" or "snowstorm" (fill the screen with '/' or '*'), type words together, etc., and for a while she had a notebook with commands like "M-x set-foreground-color" listed in it.
My youngest daughter prefers to rip the keys off my laptop, so she gets to do less typing....
I have a 2 year old and I'm not sure, but she's definitely not ready :) I think we're talking 4-5 year old at least to start introducing the concepts, then I'm guessing 7-9 to start doing some programming.
I have a 2 year old, and we play Minecraft, and I'd say we've started with 'concepts' already.
Simple things, but things like make a switch that turns on and off a lamp or opens a door. Or simply building larger things out of smaller things.
I mean programming is really a matter of logic and composition. Something like "This switch will turn off all of the lights, but these switches will turn on and off individual lights." is a sort of "If (mainswitch is on) then {lights settings is the same as its switch} else {light is off}"
Apart from some pretty simple logic, it's really just composition. A turing machine is comprised of some really simple functions, and apart from that it's just a matter of understanding how to compose those into more complex ones, and understanding programming is just recognizing the processes of breaking down those complex compositions into simpler ones.
Boardgames might be an activity with some cross over. Whether you are programming or figuring out the best track for your railroad in Ticket to Ride, you are manipulating a set of rules to do your bidding.
Not only John Carmack but Mathias Felleisen in one thread? How cool is that!?
I had the same impressions as Carmack, I think, about the suitability of the DrRacket environment for young programmers. It's nice seeing that it can work for young, motivated programmers.
I have never done any game development and my primary programming experience for the last few years has been JavaScript.
My 10 year old daughter has a lot of ideas for games, but since I have no game programming experience I literally have no idea where to start with her. Does anyone have any suggestions for a good framework / toolset to get started for a simple game?
Game Maker[0] has a pretty intuitive UI and comes with a very basic (albeit proprietary) scripting language, so making 2d games at least is quite simple. Although the scripting language may be too simple for more than a rudimentary introduction to programming languages. Better than Alice though.
Construct 2[1] is a game framework for HTML5 and javascript, and Unity[2] has tutorials[2a] for basic games and it uses javascript, C# and "boo" (basically python) for scripting.
[2a] for versions prior to 5 - I don't know how many tutorials for the current version of Unity there are - you may want to check first and consider an older version.
I'm a big fan of processing for learning. It does just the sort of things you want out of the box, it comes with lots of examples, there are books available on it, the time to get set up and running your own programs is practically nil, and it runs the same way regardless of the platform you put it on. All great stuff for a "toy."
I am beginning my second time of teaching out of HtDP/2e at the high school level. My experience last time I taught it (3 years ago) was similar to what Carmack describes. There are many advantages to the DrRacket environment and the Racket language (or BSL teaching language) for teaching beginners, and I think HtDP teaches some valuable design techniques and disciplines.
I also felt that the approach to drawing taught in HtDP became awkward as things got complicated, so I appreciate some of the advice given in the thread. I may try some of these things this semester. I may also try jumping out of BSL into full Racket at some point so that we can use some more advanced features.
That's great to see that John Carmack's son has a similar passion for programming as his father. However, what if his son turned out differently and didn't have it in his blood? Would John Carmack still pursue it?
That's a good question. Speaking from experience: I am a programmer like my father, but my older brother is not. My dad and I discuss programming all the time, but he doesn't take much interest in my brother's hobbies. For what it's worth, he tried to steer me towards programming from a young age, but it never really stuck; we never built anything interesting. I did, however, write some simple games for my TI-83+ calculator, and finally I rediscovered serious programming in college.
My guess is that Ryan is primarily interested in programming as a means of making games. And since his father basically wrote the book on that topic, he's in a perfect position to nurture that interest. If John instead wrote, say, the world's best accounting software, I think Ryan would be more likely to pursue a different hobby.
At 10, it may not be a passion for programming as much as a passion to do something with his father.
I think back to my past, my dad is obsessed with baseball statistics. He would spend hours studying everything baseball... honestly I don't get why he likes it, but it's where he spent ALL his time. I was also interested in computers and video games, he found no value in either so he would never participate. If I wanted to spend time with him (and every boy does) i'd have to go to baseball games with him. So for several years I did. Honestly though, I hate baseball.
Hopefully he will eventually share the source code. I showed it to my son who was very interested to see how it was made. We go back and forth between Racket and Lua Love; he thinks Love is easier, but seeing examples of Racket that other kids had made might encourage him to explore it further.
I would love that since Racket is obviously a much better language than Lua for learning, but Love is still a bit more approachable for graphics than Racket's universe library.
For anyone interested in yet another opinion, I've had good experiences with my young daughter using the Wonder Workshop robot as an early programming introduction. It has pretty solid hardware and relatively flexible programability: https://www.makewonder.com/
FRP notwithstanding, the comment about UIs is important in that OOP was originally developed around the needs of user interface components with their inherent "mutable state" and single-threadedness (ever find yourself needing to use two mice at once?)
> (ever find yourself needing to use two mice at once?)
Yes. I tried to get that working in GNOME once, naively expecting that because it's trivially easy to state well-defined behavior for multiple mouse cursors, it must also be possible to have multiple mouse cursors. But no. I'm still bitter that this seemingly obvious concept seems to be so thoroughly precluded at very basic levels.
I would love two nice for pair programming. Also for playing/making a first person shooter for two people where each player controls one arm/gun. A third player would control the legs and head. It would be amazing!
Aside from the more obscure use cases in sibling comments, multitouch implies potentially having a large number of "pointers" at once. Usually combined to make a single gesture, but the OS is supposed to do the right thing if the user tries to scroll multiple views at the same time or whatnot.
> but I’m not sure that the functional drawing paradigm ever really sank in while my son was working with it, rather it felt like you just drew everything backwards with missing parenthesis at the end
Can someone explain this? How are things drawn in functional programming?
As someone that volunteer to share computer literacy to kids, I can assure you that kids are underestimated by a big margin. I saw a lot of kids adsorbing concepts more easily than some adults. I'm not obviously talking about Monads; but the concepts are still fundamental to programming. Kids can get sufficient results to do something on their own and to really enjoy it.
The thing that I see most, and in this activity, the thing that displease me most is: parents that work as programmers and they pretend that their children must be programmers too. They bring them because they tried in all ways to make them interested and didn't succeed. One parent, a programmer, was worried with the quality of the teaching and wanted to be present a day. After the end of the meeting(I like to call them meeting. Kids see school as prison rather than joy, and I don't want to make them feel uneasy) the programmer seemed pleased of the experience and made a praise about the kids being happy and interested. He told me that he would send his son, in the hope that this time he would listen and asked about the price. I told him the truth and true nature of that meeting: they are all kids that really wanted it: When I am the new batch I usually try to talk of other things and wait something that makes me happy: a kid asking me when we begin. This is the clear sign that there is something in the room that is happy to learn. The programmer looked a bit puzzled and I told him my opinion. Are you sure that this is what your son want? If you imprison your son in something, he will totally hate it, wasting an activity that he could have enjoyed at a later time. I finished the speech saying that I'm doing it for free. My reward is making them have a good time and hopefully, giving them a better future.
Kids in front of other people can have problems and feel anxiety. So, Carmack, I'm worried if having an entry bar of all the Internet watching your son, could be a burden too high. Are we sure that this is what he wants? Is he ready to compete?
Kids are precious, they will be the mark of our efforts and their mirror. I think that your son should enjoy as much as he can what he is doing and be kept away from the Internet consumerism for now ...
OK, grumpy person here. Awesome work for a young person, but. I launched the mac version and pressed enter. Just as I was forming the thought, oh, flappy bird, the flying thing went down into barrier. My macbook emitted a very loud and unpleasant sound. Then I decided I didn't want to play, so hit cmd-q. Nothing. cmd-q cmd-q. Nothing. Ctrl-click on the dock icon, oddly, "force quit" isn't there. Three-finger salute, select program, force-quit. Delete.
Not really complaining about this specific game's lack of a port.
More of a general complaint about software that leverages other open source software but cannot run on Linux.
I've never used Racket, maybe it doesn't even run on Linux.
Racket programs runs on many platforms including Linux.
In DrRacket you can choose the "Create Executable..." to package your Racket program with the files needed to run the program (without the user installing Racket).
Since this is a just-for-fun project, they just made installers for Windows and OS X.
I can understand that, but a discussion about a kid's first project wasn't really the best place to post such a complaint. Probably better save it for some commercial project where they actually have a budget that could be used for doing ports and suchlike.
I think if he was doing this for real (for profit) even than it would be questionable to target linux since its market penetration is pretty low while the effort to make you game running on linux is pretty big. I am saying this after spending some time trying to make a popular game running on linux. The lack of common API that _all_ of the linux distros support equally and easy to use for game developers does not help.
[Valve stats show] an accumulated 0.89% market share for all the linux distros combined.
that's a self-fulfilling prophecy. i begrudgingly bought a windows license for the family gaming box only because we couldn't play some games we wanted otherwise.
The lack of common API that _all_ of the linux distros [...]
every single AAA game i've installed from Steam has its own copy DirectX and base libraries (Redistributable Runtime), which leads me to believe there is a lack of common API that a few recent versions of Windows would support equally, yet they ship. this approach, btw, is exactly what most proprietary software for UNIX or UNIX-like systems i've seen has done: static linking or bundling your own copies. is there something i'm missing that precludes applying this to games for GNU/Linux?