Learning programming by immersion
This is translation of post in Ukrainian
I just read article about Stephen Krashen’s theory on second language acquisition and it struck me with similarities which I see in the learning how we build software. Maybe that can be said about any skill acquisition, but given that programming languages and natural languages have some similarities I would try to speculate a bit.
Stehen’s idea is that your learn languages in one way: “When we understand what people say and when we understand what we read”. He distinguish learning and acquiring of the language. Learning is process where person deliberately study grammar rules, phrases and vocabulary and then consciously attempt to apply them as they speak. Acquisition on the other hand is unconsciousness process which naturally happen then person reading and speaking in new language. Acquisition happens when person immerse in the language environment where reading and listening to stories and eventually start to get grammar rules without actively thinking about them. That happens when persons perceive a lot of understandable material when person start intuitively grasp the material.
I would stop explaining Stephen’s works, and suggest read short introduction and his own books and works to get ideas. From this point I concentrate on the similarities which I think interesting.
First obvious similarity is that you never learn any programming language by study its grammar, syntax constructs and base library. Yes, you do study these, but from what we see in the classes it never enough for you to get why things that way. You have to painfully write some amount of code to understand how to apply each single language construct. Same with patterns of programming, even if you read and memorize descriptions you rarely get them from first time. You learn only after you apply them multiple times.
Second observation, is that you never learn second programming language by simply learning syntax rules. You again should immerse into new language, and try again and again study and read other people’s code to get idea what is right. That also hint on acquistion and learning is not substitution to it. Only after you study couple programming languages from same family you may do that trick and just learn syntax. Same as if you know Kazakh, you know Turkish, but you still have to learn idioms from that language, and sometimes your words would sound funny to otherside. Yes, I seen that in programming language too.
Third observation is that winning not most effective technical tools, but languages which have commmunities which have lot of simple stories how to learn language. That hugely helps with immersion into it, and as such people learn language faster. These stories is open-source projects and libraries. People learn from the tools they are using, and the simpler and less sophisticated tools available, that’s the better to understand how they working, and as such language in which they are written.
Forth observation is that we still have disconnect between university education and what mythical industry want on it’s workplace. I think the reason for that, is that university is tailored for learning, and acquistion is not designed to be part of it. You should learn complex constructs and somehow apply them on your own. There not enough similar reference materials probably. I do not say that theoretical education somehow should be easier, not at all, but maybe there some complimentary activities can be intervowen into fabric of it.
All of that is not a new observations. All of that very much part of myths of programming community. What if we should look more closely on the language educators, and attempt to learn from them? I think we have a lot of interesting initiatives which simplify programming acquision, but what if we need even more quality content for novices?
Just thoughts!