Two years ago, Jacob (then 3) and I built his first computer together. I installed Debian on it, but never put a GUI on the thing. It’s command-line, and has provided lots of enjoyment off and on over the last couple of years. I’ve written extensively about what our boys like to do, and the delight they have at learning things on the command line.
The looks of shock I get from people when I explain, as if it’s perfectly natural, that my child has been able to log in by himself to a Linux shell since age 3, are amusing and astounding. Especially considering that it is really not that hard. Instead of learning how to run an Xbox, he’s learned how to run bash. I like that.
Lately, Jacob (now 5) hasn’t been spending much time with it. He isn’t really at a stage where he wants to push his limits too far, I think, but yet also gets bored with the familiar. So I thought it was time to introduce a GUI in a limited fashion, perhaps to let him download photos and video from his Vtech toy camera (that takes real low-res photos and videos which can be downloaded over a USB1 link). He’s familiar with the concept, at least somewhat, having seen GUIs on Terah’s computer (Gnome 2) and mine (xfce4 + xmonad).
So last night, Oliver (age 2) and I went down to the basement on a mouse-finding expedition. Sure enough, I had an old PS/2 mouse down there that would work fine. The boys both helped string it through the desk up on our play room, and were tremendously excited to see the red light underneath it when the computer came on. Barely able to contain the excitement, really. A bit like I remember being when I got my first mouse (at a bit of an older age, I suppose.)
I helped him them in as root for the very first time. (Jacob typed “root”, and I typed the password, and provided the explanation for why we were telling the computer we were “root”.) Jacob and Oliver alternated typing bits of some apt-get command lines. Then while we waited for software to download, I had to answer repeated questions of “how soon will the mouse work?” and “what does ‘install’ mean?”
Finally it was there, and I told Jacob to type startx. I intentionally did not install a display manager; more on that later. He pressed Enter, the screen went blank for about 5 seconds, and then X appeared. “Excited” can’t begin to describe how they acted. They took turns playing with the mouse. They loved how the trash can icon (I started with XFCE) showed trash IN the trash can.
But they are just learning the mouse, and there’s a lot about a typical GUI that is unfriendly to someone that isn’t yet proficient with a mouse. The close buttons are disappointingly small, things can be too easily dragged on and off the panel and menus. When I sat down to think about it, the typical GUI design does not present a very good “it always works the same” interface that would be good for a child.
And then it occurred to me: the perfect GUI for a child would be simply xmonad (a tiling window manager that can be controlled almost entirely by keyboard and has no need for mouse movements in most cases.) No desktop environment, no file manager in the root window. Just a window manager in the classic X way. Of course!
So after the boys were in bed, I installed xmonad. I gave Jacob’s account a simple .xsession that starts a terminal and xmonad.
Today, Jacob informed me that he wanted his computer to look “just like yours.” Playing right into my hands, that was! But when he excitedly typed startx, he said it wasn’t just like mine. Uh oh. Turns out he wanted the same wallpaper as my computer uses. Whew. We found it, I figured out that xli(1) loads it in the root window, and so I added a third line to .xsession. More delight unlocked!
Jacob mastered the basics of xmonad really quickly. Alt-Shift-C to close a window. Alt-Shift-Q to quit back to the “big black screen”. Alt-Shift-Enter to get a terminal window.
We launched thunar (the XFCE file manager) and plugged in his camera. He had a good deal of fun looking at photos and videos from it. But then I dropped the true highlight of the day for him: I offered to install Tuxpaint for him. That’s probably his favorite program of all time.
He watched impatiently as apt-get counted down 1m30s for tuxpaint and its libraries. Then we launched it, and he wanted to skip supper so he could keep playing Tuxpaint on “my VERY OWN COMPUTER!”
I’d been debating how to introduce GUIs for a very long time. It has not escaped my attention that children that used Commodores or TRS-80s or DOS knew a lot more about how their computers worked, on average, than those of the same age that use Windows or MacOS. I didn’t want our boys to skip an entire phase of learning how their technology works. I am pleased with this solution; they still run commands to launch things, yet get to play with more than text-based programs.
At bedtime, Jacob asked me, very seriously:
“Dad, how do I start tuxpaint again?”
“First you log in and type startx. Then you can use the mouse.”
Jacob nods, a contemplative look on his face..
“Then,” I continue, “you type tuxpaint in the terminal, and it comes right up.”
Jacob nodded very seriously a second time, as if committing this very important information to long-term memory. Then gave a single excited clap, yelled “Great!”, and dashed off.
143 thoughts on “I introduced my 5-year-old and 2-year-old to startx and xmonad. They’re DELIGHTED!”
My kids just use Windows 7 like normal people.
No offence, but they’ll be normal and not extraordinary..
They are already not normal. The shear fact the author runs linux and exposed them to a command line already sets them ahead of the pack.
These foundations being taught at this age are exactly what will separate them from the majority of folks who chose tech for many vs choosing tech because they have a passion about it. The shear notion of using “all those other keys” will forever be with them and give them a deeper understanding of computers.
These kids will be citizens of the digital world…
The OP’s kids will be, yes. The commenter you replied to, however, was responding to another commenter who said that their own kids just used Windows 7 like “normal people”.
The implication of the comment you replied to was that the kids of the commenter who used Windows 7 like normal people would, themselves, be normal and not extraordinary.
Also, you replied to a comment from 2013. Although it’s nice to see another HN reader here too. :)
you must be very proud…
i would be proud…
Using the command line doesn’t require you to be a genius or anything like that. Understanding basic math, reading and writing is the focus for our kids of similar age. Ofcourse they use a lot of TV/ipad/iphone/mac but they can learn more useful and profound things than just sitting in the shell.
Don’t limit them to one OS/technology just because you feel that way – it is stupid.
Too awesome. :) I’ve been letting my 5yo play on my original Atari 1200XL computer. We did some BASIC one evening. So far I think he’s more interested in using the control-characters to make big ATASCII letters on the screen. Chip off the ol’ block!
Glad you guys are enjoying Tux Paint! :)
This article was fantastic!!! I grew up on DOS and have been a Windows guy my whole life, but have learned linux over the last 8 years. My children(11,6,4) are already well versed in Windows. I’m thinking it may just be time to dig out an old unit and teach the kids some good ole CLI. I find professionally, that IT admins who grew up or learned some cmdline first, are far better at the job than the crop of window server admins who never have heard of DOS. That is the real value in teaching kids CLI. Well if they choose to work in IT that is. In IT, admins who can ride the fence of linux and windows will find more and better paying job opportunities. Teaching kids some form of linux is a no brainer, it ought to be taught in schools to all kids!!!
This is very much how I grew up. Great write up.
When my son was about two he climbed up on my computer and he punched in some keys on got on MS Windows and brought up a command box I have never seen before, read about or still have not accessed again. Today at 15 I got him a laptop that had Win 7 on it. In 24 hours he had switched it to Linux Mint on his own. Guess those toddler years count most ;-)
I am curious when you plan on introducing them to something like Python or Haskell.
I mean, I’m curious exactly what they do with Bash, but I would think that C64/Apple II basic was a nicer introduction to algorithmic type things. Still, your thesis may well prove to be correct.
This sounds like a story from the ’80s… An Android tablet should be much more interesting for kids nowadays.
Definitely not so.
As John states, this way gives a sense of ownership which beats nice user interfaces any day.
You are probably projecting what YOU think is more interesting. AFAIK and have seen, kids do not have a particular fancy for nice graphics, they even pick up sticks from the ground and have a field day.
How do you explore a so called “smartphone” or a tablet if you are 3-5 years old? Those devices reduce you into a consumer, they do not invite to exploration. Especially if you are not tech savvy.
For the record I tried tuxpaint with my 8 month old child, definitely not ready for it. Nor ready for the command line, we are in literal bash (everything with your hands) mode. :-)
boom, nailed it. ;)
I think that teaching your kids the command-line interface is good; that’s likely to foster more creativity and independence than simply teaching them to point and click. But I think you might want to switch to an X display manager soon. Having them use startx every time might send the message, “Your computer is a stubborn, intractable thing that won’t do what you really want unless you continually repeat some arcane steps.” Better to show them that a computer serves its human user, not the other way around. Set them up with a display manager that will give them xmonad as soon as they log in. Who knows, maybe this will be all the more effective in demonstrating the malleability of computers now that they’ve been starting X manually for a little while.
One question: Which X terminal are they using? The one from Xfce, or something simpler like rxvt?
Also, you should check out the MARY speech synthesizer (http://mary.dfki.de/). It requires Java, so it’s more memory-hungry than eSpeak. But the cmu-bdl-hsmm voice is very nice, and it’s free software. The default client is a GUI app, but it’ll be easy for you to whip up a command-line client once you learn the HTTP interface (you’ll be running a server on the local machine). Too bad MARY isn’t in Debian.
They’re using the XFCE terminal emulator right now, but I may switch them to xterm since it doesn’t have a menubar with pesky persistent settings. (Less to accidentally mess up).
They have no problem with running startx. It is a command like any other to them.
But then you should use ncurse based programmes. Like elinks (webbrowser), htop (fancy top). mutt (mail client), midnight commander (filemanager).
You my friend are an awesome commenter!
Watch your slurs and generalisations. I was a Mac user from 86, when I was 7, had only used computers which booted to basic, and here i am a linux nerd, because I was curious.
It’s more important to instil the curiosity into learners than indoctrinating them in some mad keyboard only world, in which the rest of the real world don’t live.
Feel free to make your kids different (remember kids can be cruel and always look to the different), but make them different by building on the norms. Let them use windows/mac/linuxgui, and let them experiment with everything else, its a complete non-sequitur that a GUI user cannot be as educated as a terminal user.
I don’t know what you’re referring to with “slurs and generalizations”. I think you are reading a lot more into what was said than there is. You may have missed the part where we hooked up a mouse (thus it’s not a “mad keyboard-only world”).
While I made no such claim, nevertheless it seems that in general, people familiar with the command line — any command line — have a better understanding of computing than those that don’t. Causation – maybe not. Perhaps correlation. I don’t intend to withhold GUIs or Windows or whatever from them. Just introduce them to a broader world.
“People familiar with the command line — any command line — have a better understanding of computing than those that don’t.”
That’s because someone who is familiar with command line has obviously studied computing enough to learn the importance and usage of command line and how it was used to build what we have today. It’s comparable to this scenario:
I want to teach my kids to cook but I don’t want them to use the oven because knowing how fire works and how to make fire was how we learnt how to cook in the first place. So you’ll spend hours and hours explaining how fire works and discussing what are the most efficient ways to make fire while everyone else is learning the best and most efficient ways of actually making the cake. In the end your kids will know how to make a fire but the quality of their cake will be lower because they spent too much time on figuring out how fire works instead of figuring out how to make a tasty cake.
The problem with that analogy is that modern GUIs intentionally hide and even limit access to how things really work.
To take your analogy farther, it’s like telling someone the only way to make a cake is to use a pre-made mix. They’ll get a cake, but many delicious options will be hidden from them.
I am delighted to read about your kids’ experiences and how playfully they progress into what scares off most Windows users so easily. I admire your skill of not pushing them towards anything, yet letting them progress in their proficiency with the basics of computing instead of choking their sense of curiosity with the kind of stimulus overkill that gaming consoles and “modern” GUIs present. Carry on and write about it. Please.
If you’re looking for more text based games, try nInvaders, it’s a console based space invaders.
lovely. so inspiring. :)
Brilliant! I remember a similar excitement programming my zx spectrum as a child.
You may like this physics game:
Thanks for the article.
Very interesting – thanks for the link, I’m taking a look.
One of your prior articles got me to introduce Debian to my son. Got him an old Apple PPC clamshell to load it on. gave hime a login and let him go. wurm and snake are his favorites (per your other post, I installed bsd-games), but he likes “dad not found” “mom not found” etc too. He can name most of the keys as he hits them, even semi-colon and equal sign. Pretty good for 3yrs 2 mths imo.
Thank you for doing this, it was inspirational to me.
That’s cute and great! My son has loved producing various error messages too.
A clarification for someone wondering – I never said he’s never seen a GUI. (In fact, I mention that he’s seen them before.) He had simply never had a GUI on *HIS* computer.
You should install the ‘sl’ command if you haven’t already, a kid would love that I reckon. Basically an ASCII train comes across the terminal if you mistype ‘ls’ as ‘sl’.
Hey there. I just stumbled upon this completely randomly, whilst looking for some xmonad resources, and I just wanted to pop in and tell you that this was awesome. I think I will raise my kids like that myself.
This is asked out of complete, genuine curiosity, so I hope you don’t take offense: is there no part of you that feels like you are perhaps forcing some interests upon the kids, though? I mean, I can see both sides of the argument here. On one side.. they’re 2 and 5. How do they know what they think is interesting?
Maybe they’ll just grow out of it if they really don’t like it.
Anyhow, thanks for the read!
It’s a chicken and egg problem, isn’t it? They will discover what’s interesting as they go along. It might be computers, it might not. I’ve provided them an option. I don’t see xmonad as being particularly different from Windows in that regard. Everybody with kids that use computers makes some choices for them about operating system and software, and it’s that way here too. I’m not sure that’s precisely what you asked, but I hope it helps.
They certainly have many non-computer interests as well, though.
I’m a little mixed about what you’re doing with your kids here. On the one hand I have the same command line background as you and I would like my kids to have the same joy of learning about computers as I had. I’m hoping I can do something like that with my Raspberry Pi. But on the other hand I don’t think young people will think of a computer as being a box with a keyboard, mouse and screen like you and I do. I think tablet computing is the future of computing for the masses. I’m not saying traditional computers are going away. They’ll just be for those that need something beefier. For the vast majority a tablet will be all they need and more.
So it’s great that your kids are learning the fundamentals, and I hope to teach my kids some of that too. But just as I know about punched cards but never use that knowledge I feel our kids will probably know about command lines but never ever use them.
One person on Lifehacker responded to this article this way: “The point is that in order to be a master of technology, and not a slave to it, you must know how and why it works. And the best way to understand computers is to run them starting with the console.”
My first computer was a TRS-80 CoCo II running BASIC. I haven’t touched BASIC in many, many, many years. The *tool* became obsolete but the *knowledge* and problem-solving skills didn’t. I learned about the fundamental logical nature of computers, about loops and commands, about moving data from disk to RAM and such.
Kids love to explore. They don’t start out with preconceived notions of what’s good or bad. Linux isn’t the only thing, and computers aren’t the only thing. The boys have plenty of other activities and will encounter other operating systems. But somebody that only ever uses a tablet will have no idea how to write software to run on that tablet!
I enjoyed reading every bit of this, simply amazing.
The first thing I had (born in ’78) was an Atari VCS. I’ll always be grateful for my dad. Now IT is my life, make a lot of money, and enjoy it as much as ever. I’m keeping one from when the time comes; later I’ll get a Mac II which had an awesome mouse tutorial and lots of educative games were available (more than any other plattform). Obviously the net is out of the question maybe until he’s 9 or so… I hope. I’ll have to assess if I’m not crippling him as time comes. Meanwhile will do the same; start as I did so he’s able to get it as I did.. Hope so.. Very inspiring article!!
regarding the vtech toy camera, we had also considered it, but then decided to give our 5-year old daughter a GE DV1 camera which is easy to use, makes HD video, decent 5 MP photos (but no flash and no macro), is shockproof and water-resistant, and reasonably priced at 85$. The only disadvantage: she won’t let me borrow it unless she gets chocolates ;)
You are really a very successful father.
Thank you everyone for the kind words!
I found this on lifehacker and I was just so happy all the way through, while also filled with immense jealousy. I am 17 now and just got into programming. I had used the terminal on my mac (messed around opening programs, deleting files, and making my mac say things to me. Also to hack into macs FOR GOOD REASONS – says every criminal ever) a few years ago. But i felt confused at the meaning and syntax of it all. This is all me explaining why you, sir, are an awesome father.
So anyways, I was wondering what you chose for them, and why.
First, thank you for the kind words. I appreciate it!
Don’t think that 17 is too late to start programming. There’s still a lot of years left and a lot of time to pursue your dream, whatever it may be. I might suggest you take a look at diveintopython.net. It’s a way to help you get started hands-on.
I’ve actually written a number of posts about what they’re doing; you can see them at: http://changelog.complete.org/archives/category/technology/children-computing
Yeah thanks! I actually just started an Intro to Programming class and I think that was one of the resources we are going to use!
And good luck with the kids! I have heard the teenage years can be difficult ;)
Grin… you might be on an excellent position to giveME some advice to remember there… any tips?
Instill in them the importance of honesty while you still can, never overlook the option of bribes, and remember that we can be very irrational creatures that sometimes need updates and recalibration. But I am sure your two boys will be perfect children. I NEVER have problems with my brother. *sarcasmsarcsmsarcasm*
Thumbs up to you! This was a very nice read – it was just what I needed to brighten up this cold and dark winter morning.
Linux, CLI and xmonad for your two young sons = awesome. You sound like a pretty darn cool father. :)
Today my 3-year old wanted to join me while I was reading through my
email. And sitting on my lap she started to ask me which keys she could
press. Obviously she wanted to share my activities.
Because I couldn’t think about anything better to provide her with some
reaction to pressing keys, I started vim in an xterm, scaling the font
size up to very easy readable. And she happily started to type while I
introduced the to the arrow keys, the dot, and the two different delete
buttons (“the buttons that eat up letters”). It turned out that the
ability to produce something on the screen was enough to guarantee an
hour of excitement).
She probably did not realise the erratic behaviour of automated line
breaks, but I wanted to prevent confusion by computer actions without
active input and set the textwidth to zero very fast. I don’t think that
this would have been an issue, but I am happy that she didn’t stumble
upon the strange jumps that would have occurred up and down arrow-keys.
It would be much more friendly if I could get vim to more directly move
up and down visible lines instead of logical. There probably is
something somewhere in some documentation.
For now: Your article, albeit quite dated, is very inspiring and I think
I am motivated to give it a try here. I very much like the idea that my
kid would explore the computer in a way that provides real knowledge
about that tool instead of being provided with some colourful
And she reacted very well when I showed her that it is possible to fill
the screen very fast by letting the computer do the counting for you.
The large numbers that the infinite list [1..] displays very fast seemed
to impress the little girl that delightfully counts all the things that
she is able to count. (We were later able to count the first ten entries
of the infinite list (take 10 [1..]).
Nonetheless, the Haskell interpreter is probably not yet the right tool
if you are not yet able to read or write syntactical structures. But it
is never to early to be curious.
If you want further inspiration, take a look at John Goerzen’s blog
article on how his kids have been raised by CLI and liked it:
[The Changelog, I introduced my 5-year-old and 2-year-old to startx and
After all, isn’t shellcoding the biggest text-adventure there is?
> It would be much more friendly if I could get vim to more directly move up and down visible lines instead of logical.
:nnoremap j gj
:nnoremap k gk
You’re welcome. :)
install Xeyes my kids loved it!!!
Now sure how crazy it is in 2020, but Dos is the thing when I started playing with computer. changelog.complete.org/archives/7562-…