

Ask HN: Which programming languages teach learners the most? - faizshah


======
faizshah
In my opinion each "family" of languages provides interesting lessons for
programmers who learn them.

For learning the high level concepts of programming I think that languages
like Clojure, Haskell, Python and Ruby are best. They allowed me to easily
play around with complex libraries and technologies. This helped me learn
about how to evaluate and integrate others code into my own, they also
introduced me to many concepts that I don't think I would have studied had I
not chosen to learn the language.

For learning the elegance of programming I honestly think Javascript is the
best. Some might disagree, but because of Javascript's weirdness and
inconsistencies when I came across a really elegant solution, it really made
me rethink the process I use to program solutions. I also learned a lot about
"elegant" programming from reading and learning about Haskell and J.

For learning about the lower level mechanics of programming, I think that the
C/C++. The languages are less forgiving and it forced me to think about the
repercussions of my sloppy code.

I'm curious to know what others think.

------
mpstreeter
I teach high school computer science near Stanford. Depends on the age of the
learners. For kids in school, programs like Alice or Scratch are a fun way to
start because they're more visual. Lego Mindstorms are a fun step up b/c you
also get to build something that moves based on your code. After that Python
is great. Then HTML/CSS/JS/Ruby on Rails so they can build their own web
portfolio or web app. MIT has a program called App Inventor
([http://appinventor.mit.edu/](http://appinventor.mit.edu/)) that is similar
to Scratch and lets you make Android apps using drag and drop code pieces.

~~~
faizshah
I agree with you on the other languages, but I have to disagree on Scratch(I
have not tried Alice). I found it was more difficult to teach basic
programming concepts in Scratch than it was to teach those concepts in
Processing, which also provides a very visual programming experience, as well
as the instant satisfaction of seeing a solution. I also found that once those
that I was teaching were proficient in Processing it was easier to transition
to other languages like python, ruby, and java.

I also think that Processing gets learners interested in programming much more
than other languages because they see how easy it is to make their ideas come
to life. Granted it's the same idea as Scratch, but the transition from
Processing to "more difficult" languages is much easier than from say Scratch
to Python.

Thanks for the App Inventor recommendation, I'll have a look.

------
elviejo
Smalltalk - Teaches what OOP should look like what is to leave with "objects
all the way down" What is the difference between a class method and an
instance method. How an IDE and syntax aware source control looks like

~~~
faizshah
That's interesting, so you would say that Smalltalk is more enlightening than
other languages on the ideas of OOP? Could you expand on how Smalltalk
achieves that?

I have never programmed in Smalltalk before, but I found Java and Ruby taught
me the most about OOP concepts, I might have to take a dive into Smalltalk
now.

------
elviejo
Haskell Teaches what functional programming really looks.

------
elviejo
Eiffel Teaches Design By Contract and really good object oriented programming.

~~~
faizshah
Can you expand on what makes Eiffel a particularly good language to learn
these things?

