skip to main content
10.1145/3377811.3380352acmconferencesArticle/Chapter ViewAbstractPublication PagesicseConference Proceedingsconference-collections
research-article

Here we go again: why is it difficult for developers to learn another programming language?

Published: 01 October 2020 Publication History

Abstract

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? To understand if programmers have difficulty learning additional programming languages, we conductedan empirical study of Stack Overflow questions across 18 different programming languages. We hypothesized that previous knowledge could potentially interfere with learning a new programming language. From our inspection of 450 Stack Overflow questions, we found 276 instances of interference that occurred due to faulty assumptions originating from knowledge about a different language. To understand why these difficulties occurred, we conducted semi-structured interviews with 16 professional programmers. The interviews revealed that programmers make failed attempts to relate a new programming language with what they already know. Our findings inform design implications for technical authors, toolsmiths, and language designers, such as designing documentation and automated tools that reduce interference, anticipating uncommon language transitions during language design, and welcoming programmers not just into a language, but its entire ecosystem.

References

[1]
[n.d.]. Langserver.org. https://langserver.org/
[2]
[n.d.]. Python for MATLAB Users. https://www.datacamp.com/courses/python-for-matlab-users
[3]
[n.d.]. References and borrowings. https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html
[4]
[n.d.]. To Ruby From Python. https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
[5]
2010. Thinking in Clojure for Java Programmers. https://www.factual.com/blog/thinking-in-clojure-for-java-programmers-1/
[6]
2014. Comparison with R / R libraries. https://pandas.pydata.org/pandas-docs/stable/getting_started/comparison/comparison_with_r.html
[7]
2014. Rust for C++ programmers. http://featherweightmusings.blogspot.com/2014/04/rust-for-c-programmers-part-1-hello.html
[8]
2018. New Course: Python for R Users. https://www.datacamp.com/community/blog/course-python-r-users
[9]
2019. Create React App. https://create-react-app.dev
[10]
Deborah J Armstrong and Bill C Hardgrave. 2007. Understanding mindshift learning: the transition to object-oriented development. MIS Quarterly (2007), 453--474.
[11]
William R Aue, Amy H Criss, and Matthew D Novak. 2017. Evaluating mechanisms of proactive facilitation in cued recall. Journal of Memory and Language 94 (2017), 103--118.
[12]
David Badre and Anthony D Wagner. 2005. Frontal lobe mechanisms that resolve proactive interference. Cerebral Cortex 15, 12 (2005), 2003--2012.
[13]
Sebastian Baltes, Christoph Treude, and Stephan Diehl. 2018. SOTorrent: studying the origin, evolution, and usage of Stack Overflow code snippets. CoRR abs/1809.02814 (2018). arXiv:1809.02814 http://arxiv.org/abs/1809.02814
[14]
Titus Barik, Denae Ford, Emerson Murphy-Hill, and Chris Parnin. 2018. How should compilers explain problems to developers?. In Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2018). 633--643.
[15]
Nathaniel Barragan. 2018. My experience with learning Rust. https://medium.com/@nathanielbarragan/my-experience-with-learning-rust-bbcb6b7c1063
[16]
RKE Bellamy and DJ Gilmore. 1990. Programming plans: internal or external structures. Lines of Thinking: Reflections on the Psychology of Thought 2 (1990), 59--72.
[17]
Erik Bernhardsson. 2017. The eigenvector of "why we moved from language X to language Y". https://erikbern.com/2017/03/15/the-eigenvector-of-why-we-moved-from-language-x-to-language-y.html
[18]
Berry, Michael and Kölling, Michael. 2014. The state of play: a notional machine for learning programming. In Proceedings of the 2014 Conference on Innovation & Technology in Computer Science Education. 21--26.
[19]
Gavin Bierman, Martín Abadi, and Mads Torgersen. 2014. Understanding TypeScript. In ECOOP 2014 - Object-Oriented Programming, Richard Jones (Ed.). 257--281.
[20]
Matt Bower and Annabelle McIver. 2011. Continual and explicit comparison to promote proactive facilitation during second computer language learning. In Proceedings of the 16th Annual Joint Conference on Innovation and Technology in Computer Science Education (ITiCSE '11). 218--222.
[21]
Joel Brandt, Philip J Guo, Joel Lewenstein, Mira Dontcheva, and Scott R Klemmer. 2009. Two studies of opportunistic programming: interleaving web foraging, learning, and writing code. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems. 1589--1598.
[22]
Virginia Braun, Victoria Clarke, Nikki Hayfield, and Gareth Terry. 2019. Thematic Analysis. Springer Singapore, Singapore, 843--860.
[23]
Ruven Brooks. 1983. Towards a theory of the comprehension of computer programs. International Journal of Man-Machine Studies 18, 6 (1983), 543--554.
[24]
Julie A Carlson. 2010. Avoiding traps in member checking. Qualitative Report 15, 5 (2010), 1102--1113.
[25]
Luis P Coelho. 2017. I tried Haskell for 5 years and here's how it was. https://metarabbit.wordpress.com/2017/05/02/i-tried-haskell-for-5-years-and-heres-how-it-was/
[26]
Michael C Daconta. 1996. Java for C/C++ Programmers. Wiley New York.
[27]
Holger Danielsiek, Wolfgang Paul, and Jan Vahrenhold. 2012. Detecting and understanding students' misconceptions related to algorithms and data structures. In Proceedings of the 43rd ACM Technical Symposium on Computer Science Education. ACM, 21--26.
[28]
Françoise Détienne. 1995. Design strategies and knowledge in object-oriented programming: effects of experience. Human-Computer Interaction 10, 2--3 (1995), 129--169.
[29]
Benedict Du Boulay. 1986. Some difficulties of learning to program. Journal of Educational Computing Research 2, 1 (1986), 57--73.
[30]
Benedict du Boulay, Tim O'Shea, and John Monk. 1981. The black box inside the glass box: presenting computing concepts to novices. International Journal of Man-Machine Studies 14, 3 (1981), 237--249.
[31]
D. J. Gilmore and T. R. G. Green. 1988. Programming plans and programming expertise. The Quarterly Journal of Experimental Psychology Section A 40, 3 (1988), 423--442.
[32]
Philip J Guo. 2013. Online Python Tutor: embeddable web-based program visualization for CS education. In Proceeding of the 44th ACM Technical Symposium on Computer Science Education. ACM, 579--584.
[33]
Brittany Johnson, Rahul Pandita, Emerson Murphy-Hill, and Sarah Heckman. 2015. Bespoke tools: adapted to the concepts developers know. In Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering. ACM, 878--881.
[34]
Allen Jones. 2002. C# for Java developers. AOL Time Warner Book Group.
[35]
J. Jonides and D.E. Nee. 2006. Brain mechanisms of proactive interference in working memory. Neuroscience 139, 1 (2006), 181--193.
[36]
John Jonides, Edward E Smith, Christy Marshuetz, Robert A Koeppe, and Patricia A Reuter-Lorenz. 1998. Inhibition in verbal working memory revealed by brain activation. Proceedings of the National Academy of Sciences 95, 14 (1998), 8410--8413.
[37]
Lisa C Kaczmarczyk, Elizabeth R Petrick, J Philip East, and Geoffrey L Herman. 2010. Identifying student misconceptions of programming. In Proceedings of the 41st ACM Technical Symposium on Computer Science Education. ACM, 107--111.
[38]
Caitlin Kelleher and Randy Pausch. 2005. Lowering the barriers to programming: a taxonomy of programming environments and languages for novice programmers. ACM Computing Surveys (CSUR) 37, 2 (2005), 83--137.
[39]
Amy J Ko, Brad A Myers, and Htet Htet Aung. 2004. Six learning barriers in end-user programming systems. In 2004 IEEE Symposium on Visual Languages-Human Centric Computing. IEEE, 199--206.
[40]
J Richard Landis and Gary G Koch. 1977. The measurement of observer agreement for categorical data. Biometrics (1977), 159--174.
[41]
Richard C Linger, Harlan D Mills, and Bernard I Witt. 1979. Structured programming: theory and practice. (1979).
[42]
Waren Long. 2017. Analyzing GitHub, how developers change programming languages over time. https://blog.sourced.tech/post/language_migrations/
[43]
Mark Mason. 2010. Sample size and saturation in PhD studies using qualitative interviews. In Forum Qualitative Sozialforschung/Forum: Qualitative Social Research, Vol. 11.
[44]
Leo A Meyerovich and Ariel S Rabkin. 2013. Empirical analysis of programming language adoption. In ACM SIGPLAN Notices, Vol. 48. ACM, 1--18.
[45]
Claus Adolf Moser. 1952. Quota sampling. Journal of the Royal Statistical Society. Series A (General) 115, 3 (1952), 411--423.
[46]
H James Nelson, Deborah J Armstrong, and Kay M Nelson. 2009. Patterns of transition: the shift from traditional to object-oriented development. Journal of Management Information Systems 25, 4 (2009), 271--298.
[47]
H James Nelson, Gretchen Irwin, and David E Monarchi. 1997. Journeys up the mountain: different paths to learning object-oriented programming. Accounting, Management and Information Technologies 7, 2 (1997), 53--85.
[48]
Peter Norvig. 2000. Python for Lisp Programmers. https://norvig.com/python-lisp.html
[49]
Ajay Ohri. 2017. Python for R Users: A Data Science Approach. John Wiley & Sons.
[50]
Dino Paskvan. 2014. Why coffeescript? https://discuss.atom.io/t/why-coffeescript/131/37
[51]
Nancy Pennington. 1987. Stimulus structures and mental representations in expert comprehension of computer programs. Cognitive Psychology 19, 3 (1987), 295--341.
[52]
Bradley R Postle and Lauren N Brush. 2004. The neural bases of the effects of item-nonspecific proactive interference in working memory. Cognitive, Affective, & Behavioral Neuroscience 4, 3 (2004), 379--392.
[53]
Bradley R Postle, Lauren N Brush, and Andrew M Nick. 2004. Prefrontal cortex and the mediation of proactive interference in working memory. Cognitive, Affective, & Behavioral Neuroscience 4, 4 (2004), 600--608.
[54]
Yizhou Qian and James Lehman. 2017. Students' misconceptions and other difficulties in introductory programming: a literature review. ACM Transactions on Computing Education (TOCE) 18, 1 (2017), 1.
[55]
QuantEcon. 2017. MATLAB-Python-Julia cheatsheet. https://cheatsheets.quantecon.org
[56]
Charles Rich. 1981. Inspection Methods in Programming. Technical Report TR-604. MIT. http://hdl.handle.net/1721.1/6934
[57]
Jean Scholtz and Susan Wiedenbeck. 1990. Learning second and subsequent programming languages: a problem of transfer. International Journal of Human-Computer Interaction 2, 1 (1990), 51--72.
[58]
Hari Shankar. 2011. Why learning Functional Programming and Haskell in particular can be hard. https://harishankar.org/blog/entry.php/why-learning-functional-programming-and-haskell-in-particular-can-be-hard
[59]
Ben Shneiderman and Richard Mayer. 1979. Syntactic/semantic interactions in programmer behavior: a model and experimental results. Int'l J. Parallel Programming 8, 3 (1979), 219--238.
[60]
Nischal Shrestha, Titus Barik, and Chris Parnin. 2018. It's like Python but: towards supporting transfer of programming language knowledge. In 2018 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). IEEE, 177--185.
[61]
Nischal Shrestha and Chris Parnin. 2019. Instrument designs for validating cross-language behavioral differences. In 2019 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). IEEE, 205--209.
[62]
Elliot Soloway, Kate Ehrlich, and Jeffrey Bonar. 1982. Tapping into tacit programming knowledge. In Proceedings of the 1982 Conference on Human Factors in Computing Systems (CHI '82). 52--57.
[63]
John Sweller, Paul L Ayres, Slava Kalyuga, and Paul Chandler. 2003. The expertise reversal effect. (2003).
[64]
Alaaeddin Swidan, Felienne Hermans, and Marileen Smit. 2018. Programming misconceptions for school students. In Proceedings of the 2018 ACM Conference on International Computing Education Research. ACM, 151--159.
[65]
Ma Dolores C Tongco. 2007. Purposive sampling as a tool for informant selection. Ethnobotany Research and Applications 5 (2007), 147--158.
[66]
Phillip Merlin Uesbeck and Andreas Stefik. 2019. A randomized controlled trial on the impact of polyglot programming in a database context. In 9th Workshop on Evaluation and Usability of Programming Languages and Tools (PLATEAU 2018) (OpenAccess Series in Informatics (OASIcs)), Titus Barik, Joshua Sunshine, and Sarah Chasins (Eds.), Vol. 67. Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik, Dagstuhl, Germany, 1:1--1:8.
[67]
Benton J Underwood. 1957. Interference and forgetting. Psychological Review 64, 1 (1957), 49.
[68]
Bartosz Walacik. 2018. From Java to Kotlin and Back Again. https://allegro.tech/2018/05/From-Java-to-Kotlin-and-Back-Again.html
[69]
Greg Wilson. 2018. The Tidynomicon: A Brief Introduction to R for Python Programmers. https://gvwilson.github.io/tidynomicon/
[70]
Quanfeng Wu and John R. Anderson. 1990. Problem-solving transfer among programming languages. Technical Report. Carnegie Mellon University.
[71]
Anna Zeng and Will Crichton. 2019. Identifying barriers to adoption for Rust through online discourse. In 9th Workshop on Evaluation and Usability of Programming Languages and Tools. 15.
[72]
Nailong Zhang. [n.d.]. Another Book on Data Science. https://www.anotherbookondatascience.com

Cited By

View all

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
ICSE '20: Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering
June 2020
1640 pages
ISBN:9781450371216
DOI:10.1145/3377811
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

Sponsors

In-Cooperation

  • KIISE: Korean Institute of Information Scientists and Engineers
  • IEEE CS

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 01 October 2020

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. interference theory
  2. learning
  3. program comprehension
  4. programming environments
  5. programming languages

Qualifiers

  • Research-article

Funding Sources

Conference

ICSE '20
Sponsor:

Upcoming Conference

ICSE 2025

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)159
  • Downloads (Last 6 weeks)8
Reflects downloads up to 04 Jan 2025

Other Metrics

Citations

Cited By

View all

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media