Ask HN: How do I give my son a head start? - <AUTHOR> There are few careers around today that wouldn't benefit from the employee having a better understanding of programming and just IT in general.
As well as the fundamentals such as reading, writing & mathematics, I fully intend to introduce my son to computing from a very early age.
I was thinking that I could introduce him to things like BASIC not long after he masters the art of counting to ten but I would love to hear from you guys.
How would you suggest I give my son a head-start in an IT orientated world? He's 6 months old currently so I have plenty of time! <comment><USER3> I would just forget about computers and programming completely and focus on the building blocks by a _playful_ approach to solving day-to-day problems with logic and reasoning. Like how do we decide which things belong together? You can also play progressively more complicated iteration games like for- each-time-this-happens-let's-do-this-this-and-this! Or make complicated rube goldberg devices out of household objects and then debug why they don't work.

Computers would be just a distraction from the real work of building a foundation in cognitive skills.

<comment><USER4> Learning how to think is much more helpful than any programming language introduction. When you have learned to think and investigate stuff, then programming comes naturally.

Richard Feynman's father spent a lot of time teaching his son how to think and what thinking is. That was more important to Feynman than any mathematical lessons his father could teach him. <http://www.youtube.com/watch?v=695Flhmjmg4#t=2m56s>

Parents need to keep an eye out for what kind of person their kids are. They might not be a carbon-copy of yourself, they might have completely different interests and abilities and learning styles. I did, very much so. Many parents erroneously assumes that their kids are like themselves because "it is their kids", their genes, their upbringing. But neither genes or kids work like copy machines when it comes to personality.

<comment><USER5> Thanks for posting that clip of Richard Feynman, pretty cool - solid response too.

</comment></comment></comment><comment><USER6> Love him. Unconditionally. And make sure he always knows it.

Everything else is just details.

With this, things will inevitably fall nicely into place, no matter what tactics you take.

Without it, he will be fucked up no matter what you do and will be coming to hacker news in 2028 posting, "Ask HN: I'm confused and depressed and don't know why."

<comment><USER7> I'm sorry, I _really_ dislike this answer.

Obviously this guy knows that he should love his kid. He was looking for specific answers on how to introduce the kid to computing. And you gave him this glib, content-less, greeting card answer.

I _cannot believe_ this is the top comment.

<comment><USER8> Why is it obvious? If it was so obvious, there wouldn't be so many parents failing in it (many perhaps unwillingly).

<comment><USER9> And yet, if those parents read that comment, they wouldn't have an overnight change of heart.

</comment></comment></comment></comment><comment><USER10> Read to him when he is young, with him when older. It is the most stupidly effective academic intervention I'm aware of.

<comment><USER11> _Read to him when he is young, with him when older. It is the most stupidly effective academic intervention I'm aware of._

Actually evidence suggests that this is not true. Energy spent reading to kids helps a bit, but what makes a long-term difference is to be seen frequently reading for yourself. Otherwise you wind up in the trap that the kid learns that reading is for babies.

<comment><USER12> Yeah I have parents who, like all good parents would say that it's good to read, but didn't do a lot of reading themselves.

</comment></comment></comment><comment><USER13> I'd be careful in this line of thinking, if I were you. Projecting wishes and expectations onto one's children is common, and counter-productive.

I was very excited when my daughter, around the age of 10, showed interest in programming. I showed her Scratch (from MIT), but I think my enthusiasm scared her off-- and she dropped it quickly. I regret that I didn't play it a bit cooler.

<comment><USER14> Enthusiasm can be shown in several ways. One interesting tidbit from psychological research is that praising children's results often leads to their own paralysis. Instead, parents should praise how hard they tried.

See Berkeley's Half Full blog:

[http://greatergood.berkeley.edu/raising_happiness/post/the_r...](http://greatergood.berkeley.edu/raising_happiness/post/the_right_way_to_praise_kids/)

<comment><USER13> I'm familiar with that research, and agree with the techniques.

In this case, though, it wasn't that I praised her-- just that I got excited about how cool Scratch was. Suddenly, it wasn't that cool to her anymore.

Similarly, she also hates the Beatles. I mean, how is that even possible?

<comment><USER15> I hate the beatles.

</comment></comment></comment></comment><comment><USER16> 1.

Teach him about managing money. Get him into the habit of saving from a very early age. And writing down all the expenses.

(Rockefeller had a rule for his kids. He gave them money for all the chores they did. And they had to donate 10% to the Church. And save 10%. But because they had to donate exactly 10% to the Church - and not 9.5% or 10.5%, they were required to keep an account of every penny they received. This: keeping track of money from an early age is the trick to making sure you never end up poor.)

2.

Teach him confidence. Elocution and public speaking and drama classes.

3.

Make him love reading. Dr. Seuss. Comics.

4.

Teach him how to delay gratification. The trick is to focus on other things.

5.

Teach him discipline in exercising early on. And healthy eating. Sports.

6.

Play all the wonderful board games besides the popular ones like Monopoly. Excellent for math and logic building skills. And figuring out the winning strategy.

These above are the building blocks. Its ok if he learns to code a bit late in life too.

<comment><USER17> Sounds good. Look at boardgamegeek for some inspiration for the board and card games. (And don't bother with Monopoly, it's a game played for nostalgia value only. If at all.)

Games are also good for bartering and other social skills, besides math and logic. Settlers of Catan may be the obvious example in the English speaking world. Though Bohnanza is probably better.

Of course there are also lots of games you can play outdoors. Including just running around with your friends.

</comment></comment><comment><USER18> Get him legos, things he can build with his hands, internalize the process of building, designing, visualizing. Do lots of projects with him. Show him how stuff works. Give him musical instruments to play with and give him lessons.

Honestly programming isn't that hard. If he finds it interesting he can start teaching himself at any age, so I wouldn't focus on that. All that said, IANAD. congrats on being a dad!

</comment><comment><USER19> If you'd like to give him a head start, give him room to decide what he'd like to do.

Don't limit his abilities, or options.

Perhaps he will not be interested in IT? He could be the man to cure Cancer.

<comment><AUTHOR> You're absolutely spot on but speak to any scientist or doctor and they will undoubtedly tell you that they would probably benefit from being ahead of the curve from a technological perspective. All of todays innovators embrace technology and all of todays technology require a distinct understanding of computing and/or electronic engineering.

<comment><USER20> Try to have the confidence that your kid will get to computing technology if they need it.

Your job is to enable them to identify their interests and follow their curiosity. Not so much to direct it.

<comment><USER21> Agreed. Technology is an end. The means to success in the field (and almost any field) are focus, creativity, determination and optimism. Chances are your affinity for tech will rub off, and it's not exactly an uncommon hobby these days.

Good luck, it's always great to see somebody considering child education.

</comment></comment></comment></comment><comment><USER22> This might sound totally narcissistic but here's how I learned programming: Taught to play Chess at an early age; Taught another language (Russian, even though I never finished) at an early age (note that I didn't really like learning Russian, but it helped regardless); Given Legos and Lincoln Logs. Basically, any toy that uses building blocks encourages the kind of thinking used in programming; Read to often (but not about programming); Taught BASIC (the concept of "goto" goes a long way in realizing what is possible.); Got into creating game mods (as previous user recommended)

My parents actually sort of discouraged me from liking programming. If I would have, say, been really interested in chemistry and experimented with chemicals, they would have been less worried than when I would work on the computer for long periods of time.

It's also worthy to note that your son may not be interested in becoming a programmer, so don't try to consciously influence him. Surround him with the tools he needs. He'll find a way from there.

</comment><comment><USER23> The number one thing to do as he grows: allow his curiosity to flourish, even if it means letting him hurt himself a bit. Some learn better through words. Some learn better through visuals. This is mostly rote memory stuff, and it's crap. Everyone learns better through experience, and experience builds both memory and extrapolation. He might only be six months old, but he's already got a keen brain for gathering data and deducing outcomes. It's intrinsic to human nature, and it's commonplace to stifle it with too many boundaries. Don't. I'm not saying you should throw caution to the wind, but don't be as protective as the societal norm says you should be.

Allowed to be curious, he'll get critical thinking skills, passion for exploring the unknown and street smarts out of the deal. He'll immediately be better at anything he sets his mind on than those who have been forced into learning only through written and verbal means.

</comment><comment><USER24> Play the board game Go. It's simple, tactile and astoundingly complex. I've found wrapping my head around that game is a similar experience to wrapping my head around programming concepts.

Your son will come to you to play board games, whereas teaching programming is something where you'd be driving what your son learns.

Building a Go game on the computer is also not that difficult-- but developing AI for it leads deep into math and computer science.

<http://en.wikipedia.org/wiki/Computer_Go>

<comment><USER11> The nice thing about go is the handicap system. You can play mutually fun games when there is a very large skill difference. Western games like chess? Not so much.

Plus the simplicity of the rules is helpful for learning for younger players. The rule of thumb is that if they are old enough to not eat the pieces, they are old enough to try playing.

</comment></comment><comment><USER25> > He's 6 months old currently so I have plenty of time!

You do indeed. Don't forget that. You have at least 8 years left before your kid should start doing this kind of thing. Just let him use a computer in a completely natural way, don't force anything on him. Programming is decidedly different from, say, playing the violin!

Also, less importantly, skip the shitty languages phase. It's not necessary to go through Pascal or BASIC before you can get to the good stuff: Python will do from the very beginning.

<comment><USER26> > don't force anything on him.

This is absolutely true. One of the risks that you take when you have a child is that he'll turn out totally different than you. My father was a farmer, and so we're from basically two different worlds. He could never understand why I wanted to be on the computer on the time, I couldn't understand why he wanted to be outside all the time. But since neither of us tried to force each other on the issue, we got along just fine.

> It's not necessary to go through Pascal or BASIC before you can get to the > good stuff:

<http://hackety-hack.com/>

</blatant-self-promotion>

<comment><USER27> > > don't force anything on him. ... Just let him use a computer in a > completely natural way.

> This is absolutely true.

I disagree, sort of. I have a 5 yo and an 8 yo. If you let kids use a computer without guidance, they will learn how to use a computer from their friends at school. And what they learn is to fire up a browser (chrome if you've got it, otherwise Firefox) type "<some word> games" into Google and play thousands of really mind-numbing flash games. Go ahead. Try it.

<comment><USER26> We're talking about two different things. I'm trying to say "Don't force Jimmy to program if he wants to be a football player" and you're saying "Help Jimmy to learn about what he's doing."

I'm not an expert on children, by any means, but I'd agree with both you and myself.

Also, I don't think there's anything wrong with playing flash games.

</comment></comment></comment></comment><comment><USER28> Baby Sign Language can jumpstart learning and communication.

The best videos (IMHO) are from "My Smart Hands" at <http://mysmarthands.com/>

The founder has free videos on YouTube, an iPhone app, and a new Android app (which I use).

<comment> a-priori _Baby Sign Language can jumpstart learning and communication._

Is there any evidence that this actually has any benefit?

<comment><USER28> Yes.

Dr. Marilyn Daniels at Penn State University has found that hearing students in pre-kindergarten classes who receive instruction in both English and ASL score significantly higher on the Peabody Picture Vocabulary Test than hearing students in classes with no sign instruction. Her studies demonstrate that adding visual and kinesthetic elements to verbal communication helps enhance a preschool child's vocabulary, spelling and reading skills.

This citation and many more studies are listed on [http://sign2me.com/index.php?option=com_content&task=vie...](http://sign2me.com/index.php?option=com_content&task=view&id=17&Itemid=33)

The most recent meta-study (as far as I know) has this to say...

Doherty-Sneddon concludes by arguing there are three different levels of support for the benefits of baby signing: indicative, if not evidentially strong, evidence from baby signing research; related evidence from deaf sign and hearing gesture/language research; compelling anecdotal support from families who have embraced the approach.

From [http://en.wikipedia.org/wiki/Sign_language_in_infants_and_to...](http://en.wikipedia.org/wiki/Sign_language_in_infants_and_toddlers) Wikipedia has a Daniels, M. (October, 1994). The effects of sign language on hearing children's language development. Communication Education, 43, 291-298.

Daniels, M. (1996). Seeing language: The effect over time of sign language on vocabulary development in early childhood education. Child Study Journal, 26, 193-208.

Daniels, M. (October, 1994). The effects of sign language on hearing children's language development. Communication Education, 43, 291-298.

Daniels, M. (1996). Seeing language: The effect over time of sign language on vocabulary development in early childhood education. Child Study Journal, 26, 193-208.

Other researchers have found evidence that sign language supports early literacy skills.

Felzer, L. (1998). A Multisensory Reading Program That Really Works. Teaching and Change, 5, 169-183.

Wilson, R., Teague, J., and Teague, M. (1985). The Use of Signing and Fingerspelling to Improve Spelling Performance with Hearing Children. Reading Psychology, 4, 267-273.

Hafer, J. (1986). Signing For Reading Success. Washington D.C.: Clerc Books, Gallaudet University Press.

Koehler, L., and Loyd, L. (September 1986). Using Fingerspelling/Manual Signs to Facilitate Reading and Spelling. Biennial Conference of the International Society for Augmentative and Alternative Communication. (4'th Cardiff Wales).

<comment> a-priori _Dr. Marilyn Daniels at Penn State University has found that hearing students in pre-kindergarten classes who receive instruction in both English and ASL score significantly higher on the Peabody Picture Vocabulary Test than hearing students in classes with no sign instruction._

Thanks for providing these articles. I don't doubt that children can learn to sign before they can learn to speak (not a big leap considering that babies can understand language before they can move their vocal muscles well enough to produce it), or that they'd be happier being able to communicate earlier.

What I do doubt is that this has any long-term effects on their development, above and beyond the effect of learning more than one language. In any of the longitudinal studies, do they control by having a second group of infants learn two spoken languages?

<comment><USER29> Anecdotal, I know, but the smartest guy I know (13 courses one semester at Waterloo, qualified to major in CS, actuary science, accountancy, pure math with minors in psychology and business. Currently working on his law degree, actuary tests, and CFA (certified financial advisor) while working full time as a chartered accountant) was taught baby sign as an infant. His younger brother was not. His younger brother is so much more creative and broad thinking whereas the eldest is a Spock like linear thinker. Trade offs.

</comment></comment></comment></comment></comment><comment><USER30> I'd suggest giving them your old iPhone/iPod touch/Android device. My son has been playing with those since he was 1 1/2, and now (2 1/2) he is an expert at the interface. It's quite a testament to the UI to see how well a 2 year old can move around an iPhone. Then, he'll be able to "interface" with computers so much easier. They won't be this foreign thing, they'll be what shows them music videos.

From there, you have plenty of time. I know my dad started me out with BASIC when I was ~5: 10 PRINT "HI DADDY" 20 GOTO 10

After that, I didn't touch code until I was 13. So ultimately, my advice would be to not push them. If he wants to learn, he'll learn.

Just make sure they are familiar with technology, and you'll all be fine. Aside from that... read to him. Now. They pick it up quickly if you keep doing it consistently.

But really, don't worry about it and let him be a kid. The inner geek will come.

</comment><comment><USER31> Reading and Flash Cards. A lot of teachers hate flash cards, but the confidence to do the simple math allows for learning the hard stuff. Never underestimate the value of a good foundation. Learning how to actually use a dictionary might not be a bad idea.

[edit] when the kids old enough: legos - lots and lots of legos

</comment><comment><USER32> I read through almost all the comments and no one mentioned spoken/written non-computer languages.

I would say introduce him to at least one foreign language like spanish, french, german, portuguese, japanese, or chinese. I learned spanish as I learned english, by age 3 I was fluent in both. I had the advantage of having a spanish teacher for a mother, but it gave me the building blocks for understanding the rules and concepts of other languages (on 4 so far, working on 5th). These rules, grammatical, syntactical, etc. can help with picking up things like computer programming later. I mean they are called languages for a reason.

I think that giving your son excellent communication skills will give him a huge leg up on all his peers. Make sure to include reading in both english and another language too if possible.

<comment><USER33> I agree with this completely. This is one skill I don't have that I definitely wish more emphasis was put on when I was younger.

</comment></comment><comment><USER34> 1\. Act rationally. Let him see you making rational decisions, and searching for explanations.

2\. Make him talk for himself. Encourage him to meet and talk to as many different people as possible. This starts early, when he wants to hide behind your legs, and it's probably the most valuable skill he can have.

</comment><comment><USER35> If I may add to the wonderful suggestions listed here. Give guidance - <USER2> course, but then let him go. _Get "into" whatever it is that he is "into"._ Especially if you don't like it (and, it's not like mistreating puppies or some such). I love my parents, and they did the best job they could raising me, but there were some aspects of my childhood that I wish they were more actively involved with.

Mind you - I'm not blaming them - on the contrary I'm fully aware that every step I've made lead me to the point I am at in life and only I am responsible for my position.

</comment><comment><USER36> "Teach yourself programming in 10 years" by Peter Norvig (<http://norvig.com/21-days.html>)? There's Alice and Squeak. Funnily enough, I actually think I was more fascinated by the map editor in Starcraft than the game itself. (Of course, I've only started picking up a little bit of programming recently.) I think for slightly older kids who would have fun building robots and physical things that can do tasks, there's Lego Mindstorm.

Other than that, there are 2 books which cover kid prodigies which might be applicable. "In Code - A Mathematical Journey". [[http://www.amazon.co.uk/Code-Mathematical-Sarah-Flannery- Dav...](http://www.amazon.co.uk/Code-Mathematical-Sarah-Flannery- David/dp/1861972229)] It's the story of Sarah Flannery, who got interested in cryptography at a young age due to her family environment.

Another interesting book is "The Art of Learning" by Josh Waitzkin. [[http://www.amazon.co.uk/Art-Learning-Journey-Optimal- Perform...](http://www.amazon.co.uk/Art-Learning-Journey-Optimal- Performance/dp/0743277465/ref=sr_1_1?s=books&ie=UTF8&qid=1288770961&sr=1-1)] Josh Waitzkin was an American chess champion, before burning out at around 20. He then picked up Taijiquan, becoming the Taijiquan world champion.

</comment><comment><USER37> We learn what we love. Best way to get him to learn computers is to get him to love computers. You'll be setting him up for a life of social awkwardness and little success in the dating game, but you'll be doing the right thing for him. :)

I would start him on games and other "fun" stuff. Teach him to make his own games via BASIC or some equivalent thereof. If it's fun, he'll want to do it on his own. If you're just shoving it at him and it's not fun, he'll resent it and may even rebel against it.

<comment><USER14> My parents challenged my brother and me (when we were kids) by limiting our time on the computer, but only when playing games. The rule was essentially this: you can play games for an hour a day, OR you can try to make your own games on the computer for as long as you want. We were naturally engineering- minded and attracted to the magical black box that could do anything, so we took the challenge.

</comment></comment><comment><USER38> I find my son is surprisingly patient (more so than anyone else) to listen to me talk, even in technical depth, about the problems I'm working on at work. I even let him sit in my lap sometimes and watch me work on some code while I try to explain it to him. He certainly doesn't understand much, but he can see my interest and that makes him interested.

Sometimes you get a gem too.

After explaining something at work I asked him what he thought of my job and he said, "It sounds like your job is hard dad."

</comment><comment><USER39> There are some things that you cannot help BUT teach your children. It's part of who you are, your daily habits, your aspirations, your worldview of what a parent should be.

Just by being your son, he is guaranteed 1000s of hours of practice and exposure to these topics.

For example, for me, it was Chinese math textbooks from an early age. I ended up attending Stanford, but my social skills suffered. For your son, I would guess reading, writing, math, and programming are covered.

Other things are invisible to you, and will be nonexistent to your son unless you identify and pursue those topics despite your unfamiliarity to them. For example, I didn't know what "sports" were, and still do not to this day. It's such a large part of society, but does not exist to me.

You should figure out what's "free" and what's "missing" for your son simply as a result of growing up in your household, and plan your educational priorities with that knowledge in mind.

One last thing: expose him to as many different people and social situations as possible. Camp, church, sports, etc etc etc. Whatever involves heavy interaction with other kids and people. The more the better. You may have to get heavily involved yourself to do this properly. Social skills, just like any other human ability, is simply 1000s of hours of practice.

</comment><comment><USER40> Time. That's it, nothing more - just spend time with him. Reading, playing and doing lots fun things.

I have two kids and had massively complicated plans on how to 'program' them (and I mean that with nothing but respect for what you're trying to do) but you can over-think this. By all means encourage, support and mentor them but try not to project your ideal image of what they should be too soon.

All the little dude needs is your attention and time - things will work out great. Good luck!

</comment><comment><USER41> First and foremost I want to commend you for caring enough as a parent to be thinking about this, but I think you're asking the wrong question. While not a _parent_ myself I believe I can speak from my experience of once being a _child_.

It is my humble opinion that children should be slowly, _slowly_ introduced to technology. The first example that comes to mind is my own introduction to a pocket calculator in the late 1980's. I was given one before I had been exposed to the intermediate concepts of mathematics and looking back it hurt _much_ more than it helped as it immediately became a crutch. I became more interested in getting the problem done than learning from the experience.

A slow and methodical approach to learning is what works best for _me_ , and may not be optimal for everyone. Laying the right foundation is pretty much the only way to excel, and given the perverse incentives that abound in (America's) public schools you need to pretty much accept that it's up to you to make this happen for your child. As someone who didn't have it I cannot stress enough how important it is to have a parent that is intensely interested in helping you build from simple concepts to the advanced, learn how to learn, and how to think critically about everything you encounter. Having someone there to help you cope with the anxiety of being a novice (at life _and_ learning) is worth more than I can express. Making sure your child understands the core of a concept before he or she has access to tools that shortcut and accelerate its use is paramount.

Also, don't be disappointed if they want to write, sculpt, draw, or paint all day. We need artists too.

Good luck.

</comment><comment><USER42> Kids can start programming a lot earlier if their introductory experience really minimizes frustration and time to gratification. Python is probably a good starting language for teenagers, but for pre-teens, who are much less cognitively mature, you'll have a lot more luck sooner if you introduce them to an IDE with great code completion and the power to make a GUI. Obvious candidates are Visual C# and Visual Basic, but I would strongly consider Adobe Flash as well. Children love making animations with Flash, and Flash's scripting language, ActionScript, has all of the features of a full-fledged programming language.

You can start even younger with HTML. HTML isn't programming, but it's relevant training for a developing brain. Balancing brackets, thinking logically, paying attention to detail, and the "write, run, debug" routine are all present when writing HTML.

My path to programming started when I discovered a copy of FrontPage Express (an old WYSIWYG HTML editor) installed on my computer. I quickly went from FrontPage, to HTML, to Flash/ActionScript, to Visual Basic, to C++. Obviously, that isn't the logical way for a teenager or an adult to learn programming, but for a child, it was incredibly natural.

<comment><USER43> C#? My first intro to programming was logo, and im recommending it as a language for small children any chance i get. For older kids, ruby, python and (why not?) scheme are good choices. I remember the day my teachers replaced logo with pascal with dread. Don't do that. I lost interest in programming for about 2-3 years do to that, and had to rediscover my love with python much later.

But looking back, i believe languages don't mater that much, as long as the kid's having fun, you can have fun with C++ even, if it is introduced to you properly.

</comment></comment><comment><USER44> Not a direct answer to your question, but the fact that your son has a father who is asking himself that question already gives him a huge head start.

</comment><comment><USER45> 1\. Restrict TV consumption - help him become selective and not a slave to that time waster.

2\. Play music - it probably does not matter what type.

3\. Think very hard about schooling.

<comment><USER46> Huge supporter of #1 - Around the start of high school my Dad cut the service provider. I thought it sucked for a while, but in the end I realized I was much more productive, and was generally more interested in activities / school.

</comment></comment><comment><USER47> Aside from the good meta points made above, and regarding programming/hacking/IT:

1\. Get him started with Lisp and/or Scheme first, on Linux.

Here's a great story illustrating why (in addition to pg's must-read essays on his site), along with a reference to a great book, The Schemer's Guide (which is out of print, grab one while you can still find one in used stores):

<http://www.trollope.org/scheme.html>

2\. Linux only (or BSD, or Minix, or similar FOSS OS). You learn far more about how computers and computing work using Linux than with Windows or Mac. After he's become proficient with recursive thinking and all the other goodness Lisp teaches, get him K&R, a laptop or PC with Linux on it, and kernel hack with him.

3\. Throw out the TV. 100% trash. Even 'educational' stuff is not really educational in that it is passive learning, which does no one any favors. Learning is doing, analyzing, deconstructing, hacking, making, building, not passively watching.

4\. Second the advice to read to him and with him as much as possible. For all the reasons mentioned above.

</comment><comment><USER48> Here is a good approach: Answer every question he asks. Help him find his interest. And as Patrick says, read to him now. (Just not Knuth).

<comment><USER49> > Answer every question he asks

Louis CK would disagree with you there: <http://www.youtube.com/watch?v=Fdc28bZ90G4> :)

</comment></comment><comment><USER50> This theory seems out of fashion, but I still feel like learning to play a classical musical instrument, like the violin or piano, helps develop both the analytical and creative sides of the brain. Plus, you end up with a skill that you can do outside of using the computer.

Of course he's still a bit young, but it helps to start as early as possible, especially with the string instruments.

</comment><comment><USER51> First, I'd say, be flexible. No learning plan survives first contact with the child.

Reading is critical, but I wouldn't push it till the child is ready. Once they're ready to read, it comes quickly when taught correctly. But both you and they need to be willing to put in 1/2 hour a day, every day, for a few months.

My kids love knowing how stuff works, and as a engineering type, I'm pretty well situated to give them some good answers and point them in the right direction. David Mcauly's books are good, esp. The way things work, and Castle.

Finally, throw away your tv. It makes them do other things that take brainpower, even if it is just playing with dump trucks in the sand box. Also, when there's no tv, the stories come from books (and from their heads), so there much more of a pull to go digging for hose stories in a way that will help them in the long run.

Also,YMMV. Kids are all different, and will respond differently to the same people and stimuli. So you have to change and adapt.

</comment><comment><USER37> Another random thought, though probably for slightly older kids: getting into programming through game modding. Starcraft 2 editor, WC3 editor, XML editing/modding, eventually Python editing, etc.

The bait is the chance to tweak and modify your games to make them more fun and personal for you. Could be a fun and pain-free segue into programming proper.

<comment><USER36> Haha, that's how I got one of my first introductions to programming too, through the Starcraft map editor. It's kind of fun learning through a game.

Many years later, for a group assignment on entrepreneurship, we submitted a custom map in Warcraft III that simulated competitive strategies among startups. We basically played Warcraft III in class while our lecturer was smiling approvingly. One of the most fun lessons in university..

</comment></comment><comment><USER52> I owned a kids toy/developmental products company, be careful not to over stimulate your child. Over stimulation is just as bad as neglecting your child. This is the time to introduce your child to multiple languages, just have them playing in the background. Remember children are just large neural networks that work by recognizing patterns.

Don't focus on the subject or topic as much as the problem solving process. Children learn through pattern recognition until they have mastered language which leads to thought.

Remember children have short attention spans so only have them work on a subject/topic for a brief period or the children will develop a negative connotation with the subject.

A few people have mentioned mobile applications they are awesome. I developed a few apps that have been strongly adopted by organizations that work with developmentally challenged children. The simplicity and interactivity really makes a difference.

</comment><comment><USER53> I have three pieces of advice I wish every parent in the world could see:

1\. Always give your son a new healthy challenge. Let him develop as fast as he can while he is in his prime. If school has a fixed tempo of learning, challenge him in other areas; sports, music, critical thinking, computers, social skills, moral values and ethics, practical skills, helping others, etc.

2\. Read "Outliers" by Malcolm Gladwell. He has a few points that made me realize just how much it means to come from a good background, with parents that realize how their kid should be raised to become a independent and successful person.

3\. Realize that your son will never become exactly what you wanted him to be. You can introduce him to the world of IT, and you can show him how it is fun to produce your own programs or web pages, but he has to take the choice to pursue an IT career by himself.

</comment><comment><USER54> Obviously you need to get him interested in technology as a whole first - things like ipods, netbooks, etc. What first got me interested in programming when I was a wee lad was 'build your own level' tools for video games like age of empires. The first scripting I ever did was for AI behavior in these games, which really got me going. Then my parents got me a visual basic CD (the reeealllyy simple one) and believe my first program was text-based Russian roulette - A bit morbid for a kid, but you get the point. I think the key for children to be interested in making their own things (programming or otherwise) is to incorporate game mechanics so they can have fun in the process!

</comment><comment><USER55> Talk to your child. Share experiences with him and talk about what you've experienced. You'll both learn a lot.

When my daughter was in the early years of elementary school I was just getting started with web development. I was working at home and she showed an interest in what I was doing. I tried to teach the basics of html so she could create web pages. She definitely had the intelligence to succeed at it but it didn't appeal to her. I didn't push it. We found something else to share: reading books and visiting bookstores. She's developed a broad intelligence that is helping her have a fulfilling life without a line of code in sight.

</comment><comment><USER56> This book, "Hello World: Computer Programming for kids and adults" <http://www.manning.com/sande/> might be a good place to start once your child is older. It's written by a father and son and documents his son's foray into programming using Python. I believe his son was 10 at the time.

Personally, my parents got me an Intellivision at the age of 6 and I played it every day. By around 4th grade, I wanted to start writing my own games so they got me a Commodore 64 and a couple of books with game listings in Basic and I started having more fun writing games than playing them.

</comment><comment><USER57> I was thinking on this recently myself:

Throw out the TV (He watches some DVD's on a laptop) Buy Lego/Duplo/Kapla/Puzzles Read to him every night / let him (learn to) read

On a side note: Anybody have thoughts on leveraging KhanAcademy.org ?

</comment><comment><USER58> I've always thought something like turtle graphics (e.g. <http://www.sonic.net/~nbs/webturtle/>) is a neat way to teach kids programming/algorithm basics.

It's simple enough to understand the basics, yet powerful enough to be engaging enough to keep a child's interest, providing them a direct visual output to their 'code'.

I would stay away from the higher level stuff like Visual Basic; there is so much magic going on under the hood that it becomes difficult to really internalize the basic concepts of programming.

<comment><USER26> We actually made a turtle graphics DSL in Ruby for Hackety Hack, because turtle graphics are so awesome. An example:

[http://github.com/hacketyhack/hacketyhack/blob/master/sample...](http://github.com/hacketyhack/hacketyhack/blob/master/samples/Turtle%20Stars.rb)

</comment></comment><comment><USER59> Get an iPad.

We have several apps we use with our 9-month daughter. It's her favorite toy by far--the minute she sees it, she's off like a rocket tugging at the feet of whoever is using it. It has flashcard apps, a cartoon dinosaur that talks to her, books that read themselves to her while highlighting the words, cool fractal displays that respond to her touching the screen, etc. It's well-built and has withstood many baby-related mishaps.

If you can get him to love computers, everything else you're worried about should fall into place.

</comment><comment><USER60> _"I was thinking that I could introduce him to things like BASIC not long after he masters the art of counting to ten but I would love to hear from you guys."_

I was talking with a neighbor about how my son was growing.

I started to say, "Back when he was little..."

Only to be interrupted with, "He's only four weeks old."

In ten years, your son will still be a little kid, even though he leads the league in scoring, has a black belt, and can explain photosynthesis.

As he grows all he will really want is to spend time with you. Don't waste it. You're building a person not a programmer.

</comment><comment><USER61> I attended a TEDx event yesterday and a few parents had their middle-school aged kids there. It was an eye opener for a few of them.

My parents watched a lot of PBS or National Geographic type documentaries with me as a child. It gave me a view of the world outside of mine.

Internships. I did mine in my late college years but if you can start kids in high school, again it gives them a view of the future (possibly THEIR future) and great insight on paths to take.

Best of luck to you!

</comment><comment><USER62> Teaching how to program may be a fun experience, and I think it is valuable, but I don't know if it is such a big advantage. Because programming takes a lot of time, and that is subtracted from other activities that may be more important in the long run, like reading, socializing and playing. In my case, I will show my son the basics, but I don't think it is important that he really learns that at an young age.

</comment><comment><USER63> Teach them how to solve problems, and how to work through getting stuck. I've seen lots of kids (and adults) who give up when they can't figure something out right away or get it to work the first time. Learning how to work through this will certainly help once you are ready to introduce more IT specific knowledge, but will be invaluable in several aspects of their life.

</comment><comment><USER64> Let him be interested in what he's interested in.

</comment><comment><USER65> Just make sure you're ready to accept the fact that he may actually end up disliking programming. And if he does and moves in another direction, encourage him and nurture his passion. I have seen far too many kids prodded by their parents to pursue fields kids have no interest in, myself included. Luckily, my flame never went out, but to others it has.

</comment><comment><USER66> With my 8 years old boy I covered Logo and MIT's Scratch. Now we're getting a pimped up arduino starter kit for us. Oops, I mean, for HIM! ;)

We're also fiddling a bit with Google's App Inventor, which uses <http://education.mit.edu/drupal/openblocks> jut like Scratch.

</comment><comment><USER67> Make it clear from the start that success comes from hard work not necessarily raw intelligence, it took me quite a while to overcome this idea instilled in me by my parents (i.e. when your kid does something good, "well done, you must have worked so hard to do that" opposed to "well done, you're so smart")

<comment><AUTHOR> Not sure why you're being downvoted. I personally think this is pretty good advice.

I never really excelled academically yet I became quite succeessful through pure hard work. Unfortunately I got a lot of bad advice as a kid and it was drilled into me that I would never be as successful as 'smart' people. Had I known that I could counter-act my disadvantage with pure grunt work then I probably would have been more successful from a younger age.

</comment></comment><comment><USER68> Alice and Scratch both look like good learning tools (and have educational research backing them up).

I think it's more important though that there's someone who loves hacking in the child's life. Children pick up on genuine enthusiasm quickly, whether it's from you, your spouse, or someone who's a role model.

</comment><comment><USER69> I would definitely teach 3yr & 1yr a lot of Mathematics & Finance. Flashcard and iPhone apps definitely helped.

IT skills become more of a necessity once they hit school. I see Programming as a form of art, unless you are interested in it. It's not going to be of any interest to them, like it is to me.

<comment><USER70> Finance? I'm extremely skeptical, but my time on HN has taught me to be curious instead. Expand?

<comment><USER69> I would think that giving my some basic finance knowledge would be beneficial to them in the future.

\- like saving up for a rainy day.

\- saving a small amount like $1 a day = $365 saved a year.

\- how compound interests work.

Having started young, they will be money wise when they grow up and not having to work for every pay check.

</comment></comment></comment><comment><USER71> Don't forget about physical development! I think Brazilian Jiu Jitsu is a great martial art for kids. It teaches discipline and because you can spar at 95% without hurting your opponent it is very practical in real life self defense situations.

</comment><comment><USER72> Teach him to think for himself. Being able to think things through will definitely help with a career in programming/IT, but it is also very valuable skill for life itself. This means knowing when to 'baby' him and when not to.

</comment><comment><USER73> In the first few years, I'd say the following three things: LEGO, LEGO and LEGO.

</comment><comment><USER74> just let him be a kid

</comment><comment><USER75> My parents gave me a head start in math. I spent hours solving problems instead of socializing or playing outside. I deeply resent them for it. I hope you don't push your son too hard.

</comment><comment><USER76> Answer every question.

</comment><comment><USER77> > He's 6 months old currently

You're already 15 months too late. If you haven't started on Baby Einstein, do it right now.

In addition, instead of teaching ABCs, teach him to sing Q..W..E..R..T..Y.. . Trust me, it'll make his life a whole lot easier.

You can also buy DVDs where kids sing their multiplication tables. Unfortunately, the ones I have come across is in Mandarin. But why not have him learn a second language at the same time?

If he doesn't have a sister, buy him dolls so that he can pull them apart to see how things work.

You might think I'm jesting, but I'm aware of parents who are doing some of these things.

<comment><USER78> Baby Einstein is crap, like most of the stuff which is forced on parents: <http://www.google.com.au/search?q=baby+einstein+is+crap>

</comment></comment><comment><USER79> head-start in IT is a great thing to do for your kids, but more importantly is providing him a great living environment that cultivates creativity. Let him decide what he wants to be based on his own interest. I know alot of kids grew up learning musical instruments, and developed great skills, won competitions and etc, but never followed up that career after they came out of college.

</comment><comment><USER80> buy Lego. Lots of it.

<comment><USER81> Legomindstorms - once they kids get older.

Don't you find lego is very kit-based (you buy a box and get to build a specific "thing" - wouldn't it be better to buy some building toy which allows one to build whatever they want).

How about meccano? (again not the kit based).

What other construction toys?

<comment><USER51> Sort of kit based, but there aren't that many lego pieces that only work for one type of thing, everything can be repurposed if they have enough other bits and pieces. (though frankly, right now all thelegos in my house are in dump truck form)

Konects are kinda cool, but the variety of what's straightforward to make is lower than Lego.

Plain old blocks are the other big construction thing around here, supplemented with some rough cut rounds from our forest. Overall though, I'd say that the legos are used at least as much as all the other construction stuff combined. Ymmv, I've got three boys, 6,3.5 and 1.

</comment></comment></comment><comment><USER82> You DO NOT have plenty of time! Kids grow up so quickly that before you know it, he'll be 18!

</comment><comment><USER83> Let him make decisions for himself, explore things, and try at something that matters.

</comment><comment><USER84> just let him enjoy the time spend with you, give him problems, not solutions. Give him options, be open to listen and show interest in his activities, you will be surprised of how much you will also learn from him.

</comment><comment><USER85> I was once where you are now. My kids are not yet grown up, but both are older than your six-month old, so I can offer a bit of perspective. I will stick with my eldest here and will detail some of his life at the moment for perspective on what we did. I see this as giving you the benefit of learning from our experience and perhaps (hopefully) improving upon it. Our son is doing a lot better than many children his age, but I am sure there are others who are doing better than he. I, myself, wish I had accomplished half of what he has done by the time I was his age.

My eldest is 8 years old. He knows the basics of computer programming already, but he taught it to himself. Where we are native English speakers, he reads and speaks German without an accent. He also understands some French and a smattering of other languages. He reads at a 10 year old reading level, and has mathematics skills at the same level. His writing level is a bit lower. He is also one of the most affable children in his class, known and loved by all, and is generally thought of as conducting himself well, better than many of his peers. He has a solid grasp of the solar system and the fundamentals of astronomy; last year he found the four Galilean moons of Jupiter himself. On his own, he built his own electronics switch when he was barely six and still plays with electronics. He also has recently finished reading about WW1 and WW2, touching upon the Russian Revolution and the Great Depression along the way. And these were not little kid readings. He read "Im Westen nichts neues" - the German original of "All Quiet on the Western Front" - as well as "The Diary of Anne Frank" and several other works from various angles. I am already getting books for him out of the local university library. I say all this to illustrate that he is pretty far ahead of the game in many ways, and he has enjoyed all of it.

Now this is the tack that we have taken. First, we are big fans of the Mozart Effect on children. So we played Mozart a LOT when he was in utero and when he was a baby. We tended to play one of the major composers (Mozart, Beethoven, Bach) more often than other types of music until he was seven. We took to heart Hitler's observation about the importance the influences up to seven play. Therefore, we specifically kept from him any music that came out prior to about 1965. After that point, the lyrics and music start to become more complicated as protests and the civil strife of the time enter the music and then become "free love" and all that. We will now let him hear some of that, but not until he had a foundation from which to understand it.

One of our major guiding principles is to avoid something that might be abusive. "Abusive" is here defined as allowing something to enter your child's world for which s/he has no or very little framework for understanding it. So we were at pains to give him a framework and help him understand things in life as he encountered them early on.

Finally, we try our best not to say "no" when he wants to explore something. Rather, we do our best to find a way that he can safely delve in. For example, he found out the sixth graders at school were studying WW2. He wanted to learn, too, but the school wouldn't let him because he was in third grade. He approached me, and I cobbled together a reading list and a list of films that he could use to work through WW2. As WW2 makes no sense without WW1, he started there. So the point here is to never, ever, EVER limit your child but to take their curiosity as an invitation to find a way to help them interact with the world in a safe way.

We started playing and speaking French with him when he was two. When he was three, he caught a whiff of German and decided that he would rather learn German than French, so we switched (I speak both). We used Early Advantage's Muzzy program and cannot recommend it enough. It is an award-winning program that was developed by the BBC for teaching foreign languages to children. Combined with doing it at home, we also sought out speakers of the target language to help him learn. Today, my son reads full length novels in German and is yet to watch Apollo 13 in English. When I ask him what they said on Apollo 13, his first reply is "Houston, wir haben ein Problem!"

Finally, we encourage his learning to fight and staying physically fit through judo. This has helped a lot, and my son has consequently taken to reading Sun Tzu and thinking about strategy.

So, to sum it up, don't worry about tech. If you take care of the building blocks of logic and language and foster your child's natural desire to explore, there is no end to what they will do and where they will go.

</comment><comment><USER86> I have a take on this one. Im single right now, but I love programming and wonder how i'd like to pass my trade information to my kids (when I get married and have a family). I see programming at some level in the future as essential - like playing football (or basketball) or bicycling etc. For example, I'm guessing almost every youth will be able to use markdown on a blog post by 2040 or some HTML.

First of all today many people see programming as a career. I think by 2040, every kid will be a programmer at some level. I'm assuming by then, a youth then will need to know how to program to survive - it will be a basic elementary skill like we learn in school. So a school curriculum could be something like: draw a face using ascii characters on the screen using print statements in say grade 5. Use a for loop in grade 6. Function call in grade 7. Recursive functions in grade 8. Grade 9 - Advanced programming - introduction to the x86 CPU (optional - you can drop computers and take some other subject if you want). Grade 10 - put the CPU into 32 bit mode with 5 page tables. Do you think these things are very hard for these age level? I don't think so.

What if by then - kids played football/or hockey on some days of the week and got together with friends and built a website on another day and played with Lego on yet another? I think by the time you reached college then, and you had Physics as a subject, you would probably write a program to simulate 3 billiard balls on a table and someone strikes them with a 4th. Or implementing a problem solver applying Kirchoff's laws to circuits using Graphs traversal algorithms which she learned somewhere around high school. Today I think people see careers in the IT industry as an end, in 2040 I think Programming will be a means to an end - they will permeate every branch of study you are dealing with - be a Psychology, or Physics or Maths or anything else - creating a website will be normal.

A lot of people are saying IT skills may not be necessary because your child won't work in IT; I think basic IT and programming skills will help people in the next generation understand and integrate in the world around them - so for me programming could be right alongside Math that you learn in high school (how many people use factorization of polynomials in day to day life (which we learned in school)? )

So I think you are right about teaching your kids some basic programming.

I'm just wondering what is it that I had difficulties with/enjoyed: 1) Typing - throw out the QWERTY keyboard and start your child on a Dvorak keyboard from day one - and do typing lessons with her 2) I remember in basic you had screen 2 - 640x480 mode graphics. You could do some great drawing stuff with that - like a circle in a for loop whose radius and origin kept changing with each iteration. 3) Writing PC boot code as more advanced stuff (like when your child reaches high school and still wants to learn more other wise you can stop at recursion and let her take it forward from there)

</comment><comment><USER87> Teach your child two things:

How to learn.

How to keep his/her creative in a world that tries it's best to kill it.</comment>


False Cognates and Syntax: The Importance of Syntax in Programming Languages - <AUTHOR> http://www.txt.io/t-2eewd <comment><USER2> I disagree pretty strongly about the specifics of syntax being unimportant. If I had no experience and were speculating based on common sense, I would say "of course the details of the syntax don't matter". Hell, I might have even said that a year ago.

Then I started using CoffeeScript. Now, don't get me wrong; CoffeeScript has lots of little features that are very nice, like concise comprehensions and bound functions, which are not mere details. But if you took away all of that and left only the JavaScript with different syntax details, you would still have something much more pleasant to read and write than JS. -> function syntax, postfix conditionals, unless, on/off/yes/no, @, and "string #{interpolation}" are all tiny "syntax details", and I simply cannot overstress how much nicer they are than the JavaScript they trivially transform into.

</comment><comment><USER3> For anyone who didn't know what if expressions look like in Erlang and had to look it up, apparently they use a series of "guard sequences" and the first one to be true determines the return value. If none of the sequences is true, it creates an error. There's no "else" keyword, so you have to use true as a substitute for it like this:

      is_greater_than(X, Y) ->
        if
            X>Y ->
                true;
            true -> % works as an 'else' branch
                false
        end

(Code from <http://www.erlang.org/doc/reference_manual/expressions.html> section 7.7)

See also: [http://erlang.org/pipermail/erlang- questions/2009-January/04...](http://erlang.org/pipermail/erlang- questions/2009-January/040814.html)

<comment><USER4> You can do something similar in any language that support booleans as keys for dictionaries/hashtables/maps/associative arrays/...

For instance in Lua:

        function abs(x)
            test = {
               [true]=-x,
               [x>0]=x,
               [x==0]=0}
            return test[true]
        end

        > print (abs(-3))
        3

To understand this code, think that `test[true]` is overwritten at initialization time by the last predicate to evaluate to True.

It's not the best way to do this, but maybe it'will help understand the above construct.

<comment><USER5> There's a difference, though. This example evaluates every "branch".

<comment><USER6> Make it even more ridiculous and wrap every branch in a lambda function, then do

        test[true]()

<comment><USER7> That would only evaluate the original [true] key, though, right?

<comment><USER8> No, `test[true]` will be reassigned to the given function each time the condition evaluates to true. Calling `test[true]()` will execute that given function.

</comment></comment></comment></comment></comment></comment><comment><USER9> A programming language designer shouldn't have to make accommodations for users of whatever other languages are popular at the moment. If "return" is the natural name for a keyword, then regardless of its semantics in other languages, that is the best choice in the long term.

Technical note: even in languages where every expression has a value, it is possible to have an `if` form that doesn't require an `else` value: just return nil. See, for example, Clojure: <http://clojure.org/special_forms#if>

<comment><USER10> return was pretty clearly chosen in haskell to make its monadic do syntax look even more like a regular procedural language. Names that better express what return really does would be something like "pack" or "lift" or "pure".

A typical example of a confusing return in haskell is this. Note that this always prints "hi".

      foo bar = do
        if bar > 5
           then plugh
           else do
             xyzzy
             return ()
        print "hi"

Here xyzzy and plugh return different types; since the if statement needs the same type on both if branches, return has to be used to return a dummy value of the same type as plugh (here assumed to be ()). But it only returns it to the outside of the if; haskell's return does not influence control flow.

You do get used to this pretty quickly, but there's also a tendency to move away from that style of haskell. I'd write the above more like this, using guards rather than the if, and using void to force both plugh and xyzzy to return the same type.

       foo bar = go >> print "hi"
         where
           go
             | bar > 5 = void plugh
             | otherwise = void xyzzy

<comment><USER11> I wouldn't say that that's that surprising, when you remember that 'do' in Haskell is sort of analogous to defining and calling a function inline. If you keep that in mind, 'return ()' makes perfect sense.

Return _does_ influence the control flow in the sense that it signals the end of the monad - it's just that Haskell allows you to define and call a monad ('function') inline, which is not idiomatic in most procedural languages.

It's not too far removed from the following Python code:

> (lambda x: 5)(5)

Which, naturally, returns '5'. Lisp, of course, treats lambdas similarly; however, writing a series of statements in Lisp (like progn) is not considered idiomatic/'good' Lisp, whereas writing monads in Haskell is absolutely necessary.

</comment></comment></comment><comment><USER12> What I find to be the most annoying false cognate is attribute accesses which are secretly method calls.

In [ x.y() for x in X], it's immediately obvious that x.y() is doing some work. Not so obvious in [ x.y for x in X ].

This is a very practical concern - in Django code (both mine and other people's), I see lots of unnecessary SQL queries all over the place because of this.

Of course, Ruby, Scala, etc, are not immune to this criticism.

<comment><USER13> The criticism does not apply to Scala because paren-less method calls are the norm, and because () was never intended to distinguish between field access and a method call. To assume x.y is a cheap operation in Scala would be to apply an assumption from other languages that is not valid in Scala. (Using parens for a zero-arg method in Scala communicates something else: by convention, x.y() is used if y has side effects, and x.y is used otherwise. I don't know how widely that convention is observed, though.)

Python is different because the style guide explicitly discourages [1] computationally expensive accessor methods (as well as accessor methods with side effects) specifically so that programmers can treat accessor methods the same way they would treat a data field. Assuming that x.y is a field access in Python is not supposed to lead to problems, and if it does, it's the fault of the class implementer and not the user.

[1] [http://www.python.org/dev/peps/pep-0008/#designing-for- inher...](http://www.python.org/dev/peps/pep-0008/#designing-for-inheritance)

</comment></comment><comment><USER5> > In functional languages, however, where everything is an expression that has > a value, the else block (or its equivalent) is mandatory. You simply cannot > have an empty or missing else block. (Further, in languages with strict type > systems, the else block has to have the same type as the if block, > typically.)

The else clause is also mandatory in C, java, ... in if-expressions:

        int foo = <test> ? <then-clause> : <else-clause>;

They even have to have the same type!

</comment><comment><USER14> AFAIK (as someone who studies programming languages, but not as a "real" Haskell developer) the metaphor of "return" with respect to monads in Haskell is that when you "bind" a function to a monad the result (the "return value" as you might say in a many other languages) must itself be wrapped in the monad (so returning really is putting something "into" the monad).

I personally do not feel like this is squinting and rotating your head 47 degrees: if you look at simple Haskell code examples the "return" function is used in the same way as it would at the end of any normal C function. The author of this article sees it that way, but that is just an opinion in not backed up in the argument by the "false cognates" premise.

<comment><USER15> It's not hard to learn the difference, but the article's point in calling it a "false cognate" is just to note that there _is_ an unexpected difference. I don't believe the author's use of the phrase is correct, though. Cognates don't have to mean the exact same thing in the different languages - they just have to be derived from the same source. So a "false cognate" actually would mean words that appear to have come from the same historical roots but don't really. What makes "return" in Haskell a (true) cognate is something you mentioned - its name was chosen intentionally as a _metaphor_ for return in other languages, though it's not the same thing.

On the other hand, I think the article's point that it's tricky is valid. The way it is usually used makes it appear that it is causing the procedure being defined to exit. If a user thinks that's what it's actually doing (which they tend to do when coming from other languages), they will try to write things like "when (i == 0) (return x)", which does not mean what they think it means.

<comment><USER16> And here we have an example of a similar linguistic problem- polysemy (one expression meaning multiple things) within a single language.

In philology / historical linguistics, "cognate" is a term relating strictly to etymological origins (in which context English and German "gift" really are true cognates). In typical middle/high-school foreign language classes, though, "cognate" is usually used in the related-but-rather-different sense of a word that ought to be easy to remember for the vocab test because it's sound and meaning are both similar to a word in your own language, and a false cognate is a word that looks or sounds familiar but means the wrong thing (in which context English and German "gift" would be considered "false cognates" for pedagogical purposes). Most true cognates in the technical sense would never be presented as cognates to a beginning foreign language class.

<comment><USER17> I have heard the term "false friend" suggested as an alternative for "false cognate" but I've never seen it used except when someone is trying to talk about both.

</comment></comment></comment></comment><comment><USER18> Hmm. Why is he calling them false cognates? False cognates don't share a common origin whereas these words clearly do.

Anyway, for me, a good example of this phenomenon is when people come to C++ from a language like Java. In Java, you have to use "new" every time you want to create an object, so these people tend to go around putting "new" everywhere.

<comment><USER19> I get your point, however Java came after C++, its usage of "new" is however more consistant IMO. In that regard I don't see what either language designers could have done. This post, if I understand it correctly, was a plea to language designers.

<comment><USER18> The usage of "new" in Java is consistent according to the rules of Java and the usage of "new" in C++ is consistent according to the rules in C++. I don't think you can say that one is more consistent than the other. To a C++ programmer, the usage of "new" in Java, on first blush, seems highly inconsistent. Why use it for a String but not an int for example? The answer, of course, is that Strings in Java are objects and ints aren't. In C++, everything is an object.

"new" simply has a different meaning in Java even though the syntax is similar. If I were designing Java, I'd leave out the "new" keyword altogether. I see it as unnecessary to the semantics and confusing to C++ programmers, but that's just me. =)

I agree that the post was a plea to language designers, but such a plea is probably pretty useless and I didn't find it worth discussing. However, it can be fun to relate to his frustrations by sharing a story from your own experience.

Are you a Java developer? What's the most annoying behavior you see coming from converted C++ developers?

<comment><USER19> In C++ everything is an object? Since when? Or are you only calling the added "++" components "C++" but not the included C syntax?

As for me, I don't call myself a [insert language]-developer. I use whatever language suits best to design software. So far I have experience in many common procedural, OO and markup languages (C,C++,Java,Obj C,CUDA C,bash,python,VB,Matlab,Lotusscript,html+css) and I try to get experience in functional languages as soon as I can get some time for that. What's characteristic for me in Java is mainly its VM architecture. This makes it useful when you need the flexibility of a 3rd generation language for easily portable code (e.g. many business applications), however it has some disadvantages that have hindered its success for consumer applications. The main disadvantages IMO are the non-native feel of the GUI, maintenance and compatibility problems of the Java VM and Oracle's business strategy as of late. Java's syntax is just fine, I don't have any grudges about it. Knowing Obj C well, I know what ugly syntax looks like, however I still like that language as well (performance and frameworks are quite good, especially compared to other mobile frameworks).

</comment></comment></comment></comment><comment><USER20> Mathematics also has many false cognates. I agree that they make the subject harder than they should be for beginners by bringing in extra baggage. It takes more effort to dampen an old association and compartmentalize a new one than to form new ones.

A good example I can think of right now is Imaginary numbers and complex numbers. The legendary Gauss said they would have been better named Lateral Numbers.

But for programming languages avoiding false cognates is even harder as they not just naming things, but also deciding structure and must draw from the same pool of words as hundreds of other languages.

<comment><USER9> Not sure I understand your point. Gauss is credited for the term "complex number" as well.

</comment></comment><comment><USER21> A really good example the text doesn't mention is the awful C-like syntax in Javascript. You have curly braces which denote block scope in C-like languages, and yet in Javascript you have functional scope. Also, other things, like the "new" keyword. The syntax hides the true nature of the language.

</comment><comment><USER22> A false cognate in Python is super(). It does something _much_ different than super in other languages -- calls to super may call some class that is _not_ a parent of the class where the call originates.

</comment><comment><USER23> One problem is that there are only so many punctuation characters in ASCII, and in addition to that, there are only so many English words that are general enough to be used as keywords. Take Clojure as an example: assoc, do, and even let are basically false cognates according to the OP, since they differ from the same keywords in Common Lisp and Scheme, both a lot (assoc and do) and a little (let). But if Rich Hickey had picked other words, just for the sake of making it easier on beginners, I think the language would have suffered. This is just another example of optimizing for the experience of beginners, rather than for the experience of programmers who have taken the time to become proficient with the language.

<comment><USER24> > One problem is that there are only so many punctuation characters in ASCII

You can use sequences of punctuation characters, e.g. <:= and =:> for brackets, or =>> for an operator, or :*; for a separator. Or use punctuation characters not in ASCII: there's hundreds of them in the symbols blocks of Unicode.

<comment><USER23> This is certainly true, but I don't think it offers much practically. I would prefer to use a language that re-used or recycled keywords made up of letter than use a soup of punctuation just for the sake of being different.

</comment></comment></comment><comment><USER25> "Stop making things more difficult in the long term just because some whiners are unwilling to learn the trivialities of a new syntax in the short."

The unwillingness of whiners is the number one reason for software to suck. Why does a C11 compiler still compile Ansi C? It is utter crap, and whiners are to blame.

edit: Conservativeness is the reason young developers don't learn C, why C# beat Java and why everyone will have to learn a new language every few years to keep on top of the curve.

If you see a flaw in a language you use, do you report it, contribute to a thread, or do you just learn to live with it?

(sorry I forgot to mention I had added 2 paragraphs)

<comment><USER14> The problem with using this kind of rhetoric is that it is also "utter crap" to require everyone to stop making progress on applications and high-level systems because some "whiners" are "unwilling" to put up with a couple warts in the languages they are using so that we can all instead go through tons of working code to update it to some new syntax or language standard; one might even, then, claim that it is this other set of whiners that "are to blame" for why a lot of libraries in some languages (I'm looking at you, Python) have never been able to get past puberty where they can start to crystalize into high-level perfection, and are instead trapped in a perpetual quagmire of "suck" while they scramble and fight to catch up to a shifting platform (and often just get thrown out and rewritten over and over and over again by new generations of whiners that insist that the old syntax is so unusable that they refuse to touch it anymore and would rather just start fresh).

(edit: The author of the comment I responded to added another two paragraphs.) C# beating Java is not something I think is as clear-cut as you seem to believe (from my vantage, C# is used by Windows developers, and Java is used by everyone else: the dividing line has little to do with syntax preferences and much more to do with the quality of the IDEs and the integration of the runtimes; before MS was legally required to stop distributing it, J++ was gaining ground), but to the extent to which it is true you have to remember that C# also is not making breaking language changes, and in fact didn't even make drastic changes to Java (which one might argue is the legacy that C# continued). In fact, C# was so compelling to a lot of us who adopted it early because it had such amazing backwards-compatibility in the form of interop with native C and C++ code with the ability to nearly natively interact with our existing COM objects.

<comment><USER25> If I have a wart, I go to the GP to have it iced, perhaps it hurts for a little while, but my skin is better off.

If a compiler removes a wart, why wouldn't you s/wart/scar/? Perhaps it's a bit of a pain every compiler release, but in the end isn't your software a bit more future-proof?

There is no need to stop making progress, this is why good software is open source and on github.

New generations of whiners are better judges of what is and what is not useable than old farts. The new generation has a glimpse of the future.

edit: I don't think native code interop is backwards compatibility, that would imply C/C++ is somehow a thing of the past. My point was that as long as C/C++ are being adapted to the future, they will never be legacy and retain relevance where their use is warranted. C# perhaps is not a winner in adoption, but it is gaining ground on linux and osx. My observation that C# beats Java is more in the syntax area.

<comment><USER14> This is a circular definition of "future-proof": if the compiler never changed, then the software would have been future-proof the day it was written, and the only reason it is not future-proof with the shifting compiler is due to the threat that the compiler will eventually stop supporting the feature. However, the assumption is generally and honestly should be (having been proved in the field after decades of engineering) that there will be many orders of magnitude more lines of code that exist outside of the compiler (which is but one program often maintained by a single team of people) than there ever will be in the compiler to maintain the old feature.

As for your comment about open-source... that doesn't help the problem of "all the developers are spending their time updating and re-testing working code rather than writing new code that relies on it", and specifically looking at GitHub makes no sense. Finally, the "old farts" you are now denigrating have more knowledge and experience of the kinds of failures you will run into, and so far in my experience the people rebuilding systems end up learning, the hard way, the same lessons that they could have just inherited (a rather visceral lesson as I've watched my friend Yehuda work on Bundler over the years, as he got to rediscover all of the things that APT solved over a decade ago).

<comment><USER25> I don't think it is circular, if the compiler never changes, a new compiler (for a new language) will come out. New generations might find the unchanged compiler to be obsolete (as many think of C). Thus its future might be mitigated. I don't believe introducing backwards incompatible changes is such a big thing that developers have significantly less time to develop new features. Look at Ruby 1.8->1.9 and Rails 2->3, yes it was a pain to upgrade, for a little while. But the advantages are obvious, and it was not _that_ much work. I was looking at github specifically because of their 'fork me' attitude, which I admire. I don't advocate at all we should develop software without looking at the past, if Yehuda didn't look at APT closely when he was working on bundler, then that was a missed opportunity I agree. Do you think Bundler should have somehow been an (compatible) improvement on APT instead of a separate software? I myself have never used APT the way I use bundler, and I have no idea if that would be possible.

</comment></comment></comment></comment></comment><comment><USER26> I note that the writer has fallen into the trap of a false cognate - or, at least, a near-homonym - by writing "demure" when he/she meant "demur".

</comment><comment><USER27> Any monad is an applicative functor, and any applicative functor provides 'pure', which does the same as return (lifting a value). The argument of the name 'return' in a discussion on syntax doesn't quite seem appropriate to me - it's an API/library problem, not one of syntax in the language. However, maybe I'm in the camp who doesn't believe too strongly in the importance of syntax though, as was mentioned in the opening paragraph...

</comment><comment><USER28> Evaluate_some_stuff() in Prolog? Quaggy ground.

</comment><comment><USER29> I had an idea for how to reduce errors when programming among many languages. You choose a language to 'get in the zone with' (in your profile you have already put all the languages you work with.) So, say you choose "C++". It would flash some code and what it's supposed to do, and you put in whether it's right (compiles and does what the comment says) or wrong (doesn't compile or doesn't do what the comment says).

The key is that the examples it flashes exactly try to cover the code mistakes/syntax errors (even things that don't compile!) that you would normally create in the first few minutes or hours - before you're 'in the zone' when coming from one of the other languages in the list. Things like leaving off a semicolon when coming from Python to C++. You can be an experienced C++ programmer, but after long hours of python, you need a period of adjustment. Isn't this the most dangerous time to code?

So if you put that you want to get in the zone with C++, but in your profile Python is listed, then some of the examples will be missing a semicolon while being indented properly. If you put a language that uses eq instead of ==, . instead of +, this is brought up a couple of times. All the things that separate languages - so that in the first few error-prone hours of transition you leave them out or forget them at times - are brought right to the front so that you can produce much higher-quality code in your 'target language' after 'zoning up.' What do you guys think?

Pedagogically, it may be better not to flash incorrect code, but instead make you write the code. But ask you to write code such that it explicitly tests something that may trip you up coming from one of your other languages.</comment>


The fall of Arthur Andersen (2002) - <AUTHOR> http://www.chicagotribune.com/news/chi-0209010315sep01-story.html#page=1

<comment><USER2> I was working in Arthur Andersen when it collapsed after the Enron scandal. Everything was so fast that nobody knew what was happening. We had a couple of meetings with our partners and they said that everything was fine, that it was serious issue, but we should not worry to much about it.

Few weeks later, Arthur Andersen dissolved and Bearing Point[1] was born.

I left the company 6 months later; not sure how they did.

[1] [http://www.bearingpoint.com/en-other/](http://www.bearingpoint.com/en- other/)</comment>


Show HN: i-mimic the animation made easy... - <AUTHOR> http://www.en.zoomaal.com/projects/imimicv1/1679?ref=3197477

<comment><AUTHOR> I posted this because I thought it was interesting that even in a post-war zone, an entrepreneur in the middle of Basrah, Iraq is still hungry to build stuff.</comment>


'Code for America' Founder: Fix Gov't by Fixing Tech. Development - <AUTHOR> http://longnow.org/seminars/02017/feb/01/fixing-government-bottom-and-outside/ <comment><AUTHOR> Like all the Long Now talks, it's a bit long - but Jennifer Pahlka's analysis of how the government's procurement processes absolutely destroy the effectiveness of those tools was enlightening.

It does feel like there is a lot of low hanging fruit if the right procedures can be put in place for development.</comment>