I'd have to wonder if this is essentially that you learn to think then more about function than syntax for getting things done. Whereas if you just learn one language, you've learned perhaps how to do something- not what it really means to do that, or even have that functionality. In learning to think about a problem multiple ways- you really strengthen your knowledge of why over just how.
I think this hits the nail on the head. You learn more about the concepts of programming itself, rather than just about a single set of syntax and procedure.
At my school, they downplayed specific languages entirely and I think it was very beneficial. We were expected to learn the basics of a language for a class in the first week, whether it be Java or Python or whatever else. Obviously details would always come up later on, but the attitude was always "don't worry about the language, you can learn it as you go, worry about the concepts" and in that mindset, I definitely think the learning was more effective.
I see this story differently. I see a fairly common, two-stage approach toward programming enlightenment.
In the first stage, you simply go forth and try. And you drown in complexity. This stage is important, because it's what motivates the second stage. And we shouldn't underestimate the sheer volume of useful trivia that seeps into one's head here.
In the second stage, you shift focus to the longer-term project of mastering the underlying concepts.
Many people get stuck in stage 1, though some of them manage to have careers in programming anyway.
Other people try to skip straight to stage 2, but they often lack the context to understand why the concepts are important, and so they struggle. I think many people who get frustrated in introductory computer science classes fall into this group.
> I think many people who get frustrated in introductory computer science classes fall into this group.
Which is often, to be fair, at least partially the fault of the professor, who structures the course in too much of a jump-straight-to-the-abstraction sort of way. (I include myself in this category---guilty!) I know I've had to learn the hard way just how important it is to take my students through concrete things first and work into the concepts, rather than telling them about a concept (when they're totally unprepared for it) and then expecting them to just do it.
Even now that I'm very aware of the problem, I still relapse when I'm not paying enough attention; and I think a lot of CS professors aren't even aware of the problem.
This is an interesting approach for a beginner, but eventually one must commit in order to have subconcious command of the syntax. It could be argued that multilingual children have greater command over the essence of language.
While this isn't how I learned programming in the first place, I found learning Haskell and Scheme at the same time as a freshman really helped me become a far better programmer. Moreover, the two languages made learning each other--and associated concepts--far easier, so I was certainly better off learning both at the same time than I would have been learning them in sequence.
This is the way I teach programming. Do the same simple thing in ruby, python, c, awk ... now another slightly less simple thing.
I use standardized terminology for each language feature and explain how languages are optimized for certain kinds of tasks but often have essentially the same features.
It makes the learner start with the question of "how does the syntax work for language feature x?" rather than asking "what do I type to get the computer to do x".
I think the cross language approach is generally what LPTHW tries to do but it uses python and English.
I went through an almost identical tour, getting to the point where I learned basic syntax of Java, PHP and Ruby, until a friend finally convinced me to give python a try. It was only in python, and then javascript, I got a little further.
yeah, and i'm sure that when you where reading about python or javascript you were like.. ohhh so that's why i was doing this and that on php or java.. that's what i mean, comparing and relating helps to learn :D
Yes this was how I learnt programming. When I was learning programming I found some concepts easier to learn in one language than the other. It wasn't about mastering any language at that stage, it was about understanding different concepts. Some languages implement certain ideas better than others.
I started with QBASIC, then went to PASCAL,C,C++. When Java came out it made me understand C++ a lot better. Java had a cleaner implementation of the concepts.
Since I started programming in Ruby, it has made me understand Javascript in a way I never did before.
...still better then my "getting raped on your first date" type of intro to programming: starting with C on windows before I knew what a "function" was, and being exposed to the win32 api just after learning to write a for loop and before I understood what a pointer really was :) ...and a seep of Perl after all of this to sooth me up ;)
...things seem much easier if your first experience is "hardcore" ...I guess exposing your mind to a "gang rape" of PHP, C++, Javascript etc. is similarly mind opening :)
You're supposed to make a mental note that rape analogies make some people feel uncomfortable, reminding yourself to think twice before using them in future.
As SquareWheel also said, the rape analogy is pretty tasteless. If you look a little harder, I'm sure you can find a parallel that isn't so cheap and crass.
...geezz ...no rape jokes, no telling people to go and kill themselves? ...I can't even imagine what's next ...where's the fun in life without all the sick & twisted humor and a dash of offensive :)
(I know, this particular metaphor I used is quite lazy-minded and unimaginative, I agree, so point take for this...)
I only really understood my native language syntax until I studied foreign languages. "English Grammar for Students of German" was probably the best thing that happened to my English skills.
Same here. Had no idea why English grammar worked until I studied German. Then I suddenly had solid mechanics backing up my knowledge of English, not just immersion-driven intuition (which is inscrutable, deep-down-- "cuz 'to whom' sounds better, I guess, maybe.").
This is definitely one of the reason to go to university, where they teach you these concepts very well. There's no reason you can't learn concepts sequentially though; I wouldn't advocate trying to learn a million languages at once, just that you are taught the theory of OOP, the theory of concurrency solutions like locks, the theory behind communication protocols, etc.
I was trying to learn cl and haskell t the same time, and it seriously helped me. I think I learned it way faster.
I think it's kind of like science class: seeing two different models, and their flaws, helps you understand the phenomena being modeled in a much stronger manner.
One of my profs in undergrad had been programming since the 1950s (no joke). He'd start writing something on the board in, say, C, and by the time he was finished with the code it would have FORTRAN and Lisp in it as well.
you are right, and i still don't master any language. my point is that for someone trying to learn by himself, it may result useful to use several languages, because making comparisons and relating concepts helps to understand things. at least it helped me.