skip to main content
10.1145/3472634.3472637acmotherconferencesArticle/Chapter ViewAbstractPublication Pagesacm-turcConference Proceedingsconference-collections
research-article

Designing a Course of Programming Language Foundations that Closely Combines Practice

Published:02 October 2021Publication History

ABSTRACT

The Computer Science Curricula 2013 (CS2013) calls for undergraduate CS programs to expose their students to the models underlying different programming languages as well as the principles on which language features are defined, composed, and implemented. Although an upper division “Programming Languages (Foundations)” course is common in many CS programs in United States, such a course is rare in Chinese CS undergraduate programs. This is partly due to the challenge of balancing the breadth and depth of topics covered in such a course. Another common concern is the balance between theory and practice. This paper reports our experience in designing “Foundations of Programming Languages” at USTC. Following the exemplar Programming Languages courses in CS2013, this 15-week course covers scripting, functional, logic and systems languages, presenting their principle features and design/implementation issues. The topics include modern language features (e.g. closures), principles (e.g. lambda calculus and logic), control flow and runtime components (e.g. memory management and concurrency). The paper describes how four selected languages (Lua for scripting, OCaml for functional, Datalog for logic and Rust for systems) work together to provide practical experiences for students on concepts that would be considered too abstract. It also includes discussions of student performance on selected projects.

References

  1. Martín Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Geoffrey Irving, Michael Isard, 2016. Tensorflow: A system for large-scale machine learning. In Proc. 12th USENIX symposium on operating systems design and implementation (OSDI). USENIX Association, USA, 265–283.Google ScholarGoogle Scholar
  2. ACM/IEEE-CS Joint Task Force on Computing Curricula. 2013. Computer Science Curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science. ACM, New York, NY, USA. https://doi.org/10.1145/2534860Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Eric Allen, Ras Bodik, Kim Bruce, Kathleen Fisher, Stephen Freund, Robert Harper, Chandra Krintz, Shriram Krishnamurthi, Jim Larus, Doug Lea, Gary Leavens, Lori Pollock, Stuart Reges, Martin Rinard, Mark Sheldon, Franklyn Turbak, and Mitchell Wand. 2008. SIGPLAN Programming Language Curriculum Workshop: Discussion Summaries and Recommendations. SIGPLAN Not. 43, 11 (Nov. 2008), 6–29. https://doi.org/10.1145/1480828.1480831Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Brian Anderson, Lars Bergstrom, Manish Goregaokar, 2016. Engineering the Servo Web Browser Engine Using Rust. In Proc. 38th International Conference on Software Engineering Companion (ICSE) (Austin, Texas). ACM, New York, NY, USA, 81–89. https://doi.org/10.1145/2889160.2889229Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Thomas Ball and Benjamin Zorn. 2015. Teach Foundational Language Principles. Commun. ACM 58, 5 (April 2015), 30–31. https://doi.org/10.1145/2663342Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Thomas J. (Tim) Bergin. 2007. A History of the History of Programming Languages. Commun. ACM 50, 5 (May 2007), 69–74. https://doi.org/10.1145/1230819.1230841Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. Yves Bertot and Pierre Castran. 2004. Interactive Theorem Proving and Program Development: Coq’Art The Calculus of Inductive Constructions. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-662-07964-5Google ScholarGoogle Scholar
  8. Allan Collins, John Seely Brown, and Ann Holum. 1991. Cognitive apprenticeship: making thinking visible. American Educator 6(1991), 38–46.Google ScholarGoogle Scholar
  9. Gael Curry, Larry Baer, Daniel Lipkie, and Bruce Lee. 1982. Traits: An Approach to Multiple-inheritance Subclassing. In SIGOA Conference on Office Information Systems (Philadelphia, Pennsylvannia, USA). ACM, New York, NY, USA, 1–9. https://doi.org/10.1145/800210.806468Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Kathleen Fisher and Chandra Krintz. 2008. SIGPLAN Programming Language Curriculum Workshop: Workshop Organization. SIGPLAN Not. 43, 11 (Nov. 2008), 1–6. https://doi.org/10.1145/1480828.1480830Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Stephen N. Freund, Dan Grossman, Kim Bruce, Curtis Clifton, Kathi Fisler, Matthew Hertz, Johan Jeuring, Doug Lea, Gary T. Leavens, Andrew Myers, Larry Snyder, and Simon Thompson. 2011. Why Undergraduates Should Learn the Principles of Programming Languages. ACM SIGPLAN Education Board, http://www.cs.pomona.edu/~kim/why.pdf.Google ScholarGoogle Scholar
  12. Robert Harper. 2016. Practical Foundations for Programming Languages(2Nd Edition). Cambridge University Press, Cambridge.Google ScholarGoogle Scholar
  13. Roberto Ierusalimschy. 2016. Programming in Lua. Lua.Org, London, UK.Google ScholarGoogle Scholar
  14. Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes. 2007. The Evolution of Lua. In Proc. 3rd ACM SIGPLAN Conference on History of Programming Languages (HOPL III) (San Diego, California). ACM, New York, NY, USA, 2–1–2–26. https://doi.org/10.1145/1238844.1238846Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Maria Knobelsdorf, Christoph Kreitz, and Sebastian Böhne. 2014. Teaching Theoretical Computer Science Using a Cognitive Apprenticeship Approach. In Proc. 45th ACM Technical Symposium on Computer Science Education (SIGCSE 2014) (Atlanta, Georgia, USA). ACM, New York, NY, USA, 67–72. https://doi.org/10.1145/2538862.2538944Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. John C. Mitchell. 2002. Concepts in Programming Languages. Cambridge University Press, Cambridge.Google ScholarGoogle Scholar
  17. Adam Paszke, Sam Gross, Soumith Chintala, and Gregory Chanan. 2017. PyTorch: Tensors and dynamic neural networks in Python with strong GPU acceleration. http://pytorch.org/.Google ScholarGoogle Scholar
  18. Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, and Andrew P. Black. 2003. Traits: Composable Units of Behaviour. In ECOOP 2003. Springer Berlin Heidelberg, Berlin, Heidelberg, 248–274.Google ScholarGoogle Scholar
  19. CORPORATE The Joint Task Force on Computing Curricula (Ed.). 2001. Computing Curricula 2001. J. Educ. Resour. Comput. 1, 3es (Sept. 2001), 1–es. https://doi.org/10.1145/384274.384275Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Matei Zaharia, Reynold S Xin, Patrick Wendell, Tathagata Das, Michael Armbrust, Ankur Dave, Xiangrui Meng, Josh Rosen, Shivaram Venkataraman, Michael J Franklin, 2016. Apache Spark: A unified engine for big data processing. Commun. ACM 59, 11 (2016), 56–65.Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Designing a Course of Programming Language Foundations that Closely Combines Practice
        Index terms have been assigned to the content through auto-classification.

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in
        • Published in

          cover image ACM Other conferences
          ACM TURC '21: Proceedings of the ACM Turing Award Celebration Conference - China
          July 2021
          284 pages
          ISBN:9781450385671
          DOI:10.1145/3472634

          Copyright © 2021 ACM

          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 ACM 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]

          Publisher

          Association for Computing Machinery

          New York, NY, United States

          Publication History

          • Published: 2 October 2021

          Permissions

          Request permissions about this article.

          Request Permissions

          Check for updates

          Qualifiers

          • research-article
          • Research
          • Refereed limited
        • Article Metrics

          • Downloads (Last 12 months)22
          • Downloads (Last 6 weeks)5

          Other Metrics

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader

        HTML Format

        View this article in HTML Format .

        View HTML Format