C is easy as pie. It's the most fundamental language.
Forth is a super-cool game. My kid already rocks on
an HP-41 calculator (RPN). When I introduced him to
Forth he literally said: "Wow! I can program in RPN!".
Java, was a short stepping stone as I wanted to give
him a quick taste of OO but not drown him in the
details. He actually wrote a dozen little games with
graphical interfaces and all. Great fun.
Now with Python we are going through the Project Euler
site problem by problem implementing solutions mostly
in Python but then looking at C and Forth where it
makes sense.
That would have been a sound choice ... in 1990. Since then, there has been a lot of progress in language design.
C is fundamental, but calling it “easy as pie”? 90% of C consists of undefined behaviour, just waiting to screw you over.
Forth ... why not some Lisp instead? I don't like Lisps in general, but they are at least not as completely obscure as Forth.
The designers of Java had some good ideas, but the execution of the language itself is terrible. Java is what gives OO a bad name, why not pick a language which is good at OO?
Python, well sounds sort of OK, at least no PHP or JavaScript.
====
I guess my choice would have been something like that:
> 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.
C is fundamental, but calling it “easy as pie”? 90% of C consists of undefined behaviour, just waiting to screw you over.
Forth ... why not some Lisp instead? I don't like Lisps in general, but they are at least not as completely obscure as Forth.
The designers of Java had some good ideas, but the execution of the language itself is terrible. Java is what gives OO a bad name, why not pick a language which is good at OO?
Python, well sounds sort of OK, at least no PHP or JavaScript.
====
I guess my choice would have been something like that:
- Assembler - ML/OCaml/ATS/Rust - Scala - Haskell