4 ms·
I would recommend Racket as a first language. It's tiny, can do a bunch of things, and has a reasonable intro to programming book here: http://www.htdp.org/200
by anonymoushn 15y ago
I would recommend Racket as a first language. It's tiny, can do a bunch of things, and has a reasonable intro to programming book here: http://www.htdp.org/2003-09-26/ http://www.htdp.org/2003-09-26/.
If he passes on that, Lua would be a good option. It has all of the goodies we'd expect with JS or Python (other than being the only language you can run in someone else's browser), but lacks a great deal of bloat, unintuitive scoping rules, and gotchas associated with weak typing/falsiness/that's-a-unicode-when-i-wanted-a-str.
Above all else, though, he should probably pick something other than Java.
My rationale here is that Racket or Lua will make it easy for him to learn programming because the language will be so simple as to require almost no time to learn. Then, ideally, he can use his established knowledge of programming with whatever other language he likes. Learning some larger language like Python or Ruby first would be more difficult, but is not a bad idea. Learning Java first will be even more difficult and may cause long-term damage depending on the amount of OOP koolaid he ingests.
- jasondrowley 15y agoCan I ask a really dumb question? (I myself have only been programming for about 9 months, so take this into account.) >>Learning Java first will be even more difficult and may cause long-term damage depending on the amount of OOP koolaid he ingests. What kind of long-term damage are you talking about? Are you saying there's anything wrong with OOP as a paradigm, or something wrong with Java w/r/t OOP? Or am I missing your point entirely?
- anonymoushn 15y agoOOP is a good idea some of the time, and Java's OOP is good enough a lot of the time. The problem I have with Java is that the programmer must use OOP in all sorts of situations in which it isn't really the right thing to do to make up for deficiencies in the language. Particularly, the language does not have first-class functions or closures, and the boilerplate necessary to fake these features is so big that I would seriously consider solving a problem in a worse way. The danger is that a person may think that the way things must be done in Java is actually a worthwhile way of doing things in general. Such a person would be in a state of permanent confusion in which the meaning of the question "How will I solve the problem?" has become "How will I partition the behaviors and data involved in a solution to the problem?" This second question is a good thing to think about, but not before the first one, and certainly not instead of the first one. I don't think it was a dumb question. I didn't actually encounter any people like this for a long time.