I'm exploring different posts format. I'm calling this a Notes from Research where I write about the papers I read, highlight some sections I find interesting, and summarize questions that came up while I read the paper.
Paper: "Here We Go Again: Why Is It for Developers to Learn Another Programming Language?" [link]
Once a programmer knows one language, they can leverage concepts and knowledge already learned, and easily pick up another programming language. But is that always the case?
- The paper is challenging assumptions that knowing a programming language makes it easier to learn another on.
For example, a Java programmer who transitioned to Kotlin  reports that differences like reversed type notation and how classes in Kotlin are final by default, made the transition less smooth than expected: “if you think that you can learn Kotlin quickly because you already know Java—you are wrong. Kotlin would throw you in the deep end.” Similarly, a programmer experienced in C++ who switched to Rust  found that Rust’s borrow checker, “forces a programmer to think differently.”
- What's interesting about this passage is that it shows that the internet aphorisms about how languages are related (Kotlin is like Java, or Rust is like C++), while true in certain cases, should not be taken to mean if you know Java, then you know Kotlin, or if you know C++, then you know Rust.
- Interference: when previous knowledge disrupts recall of newly learned information
- Facilitation: when previous knowledge helps retrieval of new information
Based on our interviews, professional programmers primarily learned new languages on their own, using an opportunistic strategy that often involved relating the new language to previous language knowledge; however, this results in interference which harms their learning.
Learning a new language involves breaking down old habits, shifting one’s mindset, dealing with little-to-no mapping to previous languages, searching for proper documentation, and retooling in a new environment. All together, these challenges make learning another language difficult.
Things that don't help when learning a new programming language:
- Assumption about language similarity. The common intuition of thinking this should be the hurts more than it helps.
- Trying to create mental maps and relying onto understanding on previous programming language also hurts.
- New tooling, different development environment also doesn't help.
Based on this table, one can extrapolate and estimate that more than 50% of assumptions about language similarity are incorrect.
When learning a new language, there seems to be 2 camps of learners:
- Those who learned by trying to relate to previous concepts.
- Those who decided to learn the new language concepts from scratch.
One aspect that is not explored: is the second way better?
Section 3.3 explores the questions "what do experienced programmers find confusing in a news language?", and highlights the following items impacting the learning experience negatively:
- Syntax differences (i.e. Python vs. R).
- Differences in indexing for certain types of data structures (how does each languages access common data structures) (i.e. zero indexing versus one based indexing).
- Language specific (i.e. Python objects vs. Julia structs).
- Differences in programming language paradigm (object-oriented, event driven, functional, declarative).
- What you're programming for also makes a difference. UI programming is different from back-end programming.
- Lack of good (and plentiful) documentation does not help.
I liked reading this paper because it identified specific pain points when it comes to the acquisition of a new programming language. There's a lot of debate on whether or not it makes sense for someone to know multiple programming languages. Regardless on who is correct, full stack web developers find themselves on the side of learning more than one language, which means that there is a whole sub-field of software engineering that experiences the issues described in this paper frequently.
I find myself in the position of wanting/needing to learn different programming languages because of the ideas that I want to pursue. Reading this paper gives me a new perspective on learning programming languages and highlights the two important points:
- There is a body of research that explore learning programming. The papers cites several papers that are worth exploring.
- This paper borrows from researches in learning theory (interference, facilitation) to frame the challenges of learning a new programming language. This means that looking at what people do when learning spoken languages could facilitate learning different programming languages.
Feel free to reach out to me if you find this useful, have feedback, or have papers that you've found useful on the topic of learning programming. My email is hello at kwiromeo dot com