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.
- 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 Scholar
- 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 ScholarDigital Library
- 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 ScholarDigital Library
- 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 ScholarDigital Library
- Thomas Ball and Benjamin Zorn. 2015. Teach Foundational Language Principles. Commun. ACM 58, 5 (April 2015), 30–31. https://doi.org/10.1145/2663342Google ScholarDigital Library
- 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 ScholarDigital Library
- 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 Scholar
- Allan Collins, John Seely Brown, and Ann Holum. 1991. Cognitive apprenticeship: making thinking visible. American Educator 6(1991), 38–46.Google Scholar
- 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 ScholarDigital Library
- 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 ScholarDigital Library
- 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 Scholar
- Robert Harper. 2016. Practical Foundations for Programming Languages(2Nd Edition). Cambridge University Press, Cambridge.Google Scholar
- Roberto Ierusalimschy. 2016. Programming in Lua. Lua.Org, London, UK.Google Scholar
- 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 ScholarDigital Library
- 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 ScholarDigital Library
- John C. Mitchell. 2002. Concepts in Programming Languages. Cambridge University Press, Cambridge.Google Scholar
- 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 Scholar
- 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 Scholar
- 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 ScholarDigital Library
- 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 ScholarDigital Library
Index Terms
- Designing a Course of Programming Language Foundations that Closely Combines Practice
Recommendations
Designing an Introductory Programming Course to Improve Non-Majors' Experiences
SIGCSE '18: Proceedings of the 49th ACM Technical Symposium on Computer Science EducationDemand for computing courses from students in disciplines outside of Computer Science is growing. This growth has created increasing challenges in offering one-size-fits-all CS1 courses. We found that non-CS majors' experiences and outcomes in our ...
A fundamental computer science course that unifies theory and practice
The papers of the SIGCSE/CSA technical symposium on computer science educationIf computer programming is to become an "engineering discipline," computer science students must acquire the tools for rigorous analysis and evaluation of programs. An early course in the undergraduate curriculum must introduce the fundamental ...
Designing a CIS capstone course: the confluence of business planning and application development: lightning talk
Just two years ago, Wentworth Institute of Technology (WIT) created the Computer Information Systems (CIS) major. This program is a true interdisciplinary major, combining Computer Science and Business Management curriculums. As would be expected, these ...
Comments