> 90% of C consists of undefined behaviour, just waiting to screw you over.

I've been coding in C for thirty years. Anything from mission critical embedded to system code. I've never been screwed over by the language. So it is reasonable to assume that I just don't get it because I haven't had the experience. Is it because I started at a very low level and have a solid foundation? Don't know. I've seen people comment on C being horrible and hard to learn and I can't find any scenario in my life where I, even remotely, had that opinion of the language. It is easy. Very easy.

> Forth ... why not some Lisp instead?

I wanted to expose him to the ideas of TIL's. They are very powerful, particularly if you think embedded.

Yes, I'll teach him Lisp too. I can't throw everything at him right now. Remember, he's only 14.

So, C laid the foundation. Java doesn't look too weird. It's easy to make the transition from C to Java at a basic level. I am not having him do anything massive in Java so he isn't running into the ugliness. This is more about teaching conceptually than anything else. I used Java to teach him about basic OO. For that purpose it worked just fine.

Forth was a trip in a different direction. The concepts from C can be applied in that conditionals, looping, arrays and other constructs can still be executed in Forth. It's an interpreted language, which makes it different and fun. I made sure I got him rocking on an HP41 calculator first. He used the HP41 in school for a year before I revealed Forth to him. After being comfortable with C and the HP41 the transition to RPN programming was easy. The interpreter made it fun for him to experiment and learn. I saw huge value in this.

As for Python, well, I like it.

PHP, JavaScript. He will learn those if we push in the direction of web design. They are easy. Perhaps my point is that with a solid foundation in programming all languages are easy. I have yet to run into a language where I stop cold and say "Wow, this is hard. I don't understand it. It will take ages to learn.". Quite the opposite, there's a huge ecosystem of languages that are C/C++ like. Easy to learn. In most cases you spend more time learning libraries and "the way of..." but that's it.

Take something like Objetive-C. Once you get past the notation/syntax quirks it's all about knowing what's available to you in the libraries and off you go. There's nothing hard about O-C. If you have a solid foundation in memory allocation through C it is easy to understand memory allocation in O-C.

The last age survey on HN showed that the site is dominated by folks in their twenties. Perhaps this is the reason things are seen as "hard" or "horrible". Not enough experience. Or, what could be worst, not enough experience solving difficult problems. Not to get political, but our youth lives within a level of entitlement and "I want it easy and now" mentality that I can see someone looking at C and saying "It's hard, I want it easy" in a five year old voice.

As an older engineer I stopped seeing things as hard a long time ago. There's nothing I cannot do given the time, dedication and the right mental attitude. I've walked into territory I knew nothing about many times over the years. After you do that a few times your approach and your view of things changes.

It's like the first time my oldest kid had to swim in murky lake water to enter our local Junior Lifeguard program. He was freaked out. A life of swimming in a clean pool. Now you jump into water where you can't see the fingers on your hand. He was kicking and screaming for half an hour. I didn't let him quit. He eventually passed the test and got into the program. Now, a couple of years later, we went for a swim in the ocean. His demeanor was completely different. Instead of being afraid of the waves he asked the right questions: How do we approach this? What's the best entry/exit technique? What can go wrong?, etc. We had a great time.