MakeCode and CODAL: Intuitive and efficient embedded systems programming for education

Abstract Historically, embedded systems development has been a specialist skill, requiring knowledge of low-level programming languages, complex compilation toolchains, and specialist hardware, firmware, device drivers and applications. However, it has now become commonplace for a broader range of non-specialists to engage in the making (design and development) of embedded systems - including educators to motivate and excite their students in the classroom. This diversity brings its own set of unique requirements, and the complexities of existing embedded systems development platforms introduce insurmountable barriers to entry. In this paper we present the motivation, requirements, implementation, and evaluation of a new programming platform that enables novice users to create effective and efficient software for embedded systems. The platform has two major components: (1) Microsoft MakeCode ( www.makecode.com ), a web app that encapsulates an accessible IDE for microcontrollers; and (2) CODAL, an efficient component-oriented C++ runtime for microcontrollers. We show how MakeCode and CODAL combine to provide an accessible, cross-platform, installation-free, high level programming experience for embedded devices without sacrificing performance and efficiency.

[1]  Jeffrey G. Gray,et al.  Learnable programming , 2017, Commun. ACM.

[2]  Mitchel Resnick,et al.  Programming by choice: urban youth learning programming with scratch , 2008, SIGCSE '08.

[3]  Jonathan de Halleux,et al.  MakeCode and CODAL: intuitive and efficient embedded systems programming for education , 2018, LCTES.

[4]  Neil Fraser,et al.  Ten things we've learned from Blockly , 2015, 2015 IEEE Blocks and Beyond Workshop (Blocks and Beyond).

[5]  David Wolber,et al.  Events-first programming in APP inventor , 2014 .

[6]  Eric Rosenbaum,et al.  Scratch: programming for all , 2009, Commun. ACM.

[7]  Vincent St-Amour,et al.  PICOBIT: A Compact Scheme System for Microcontrollers , 2009, IFL.

[8]  J. Dean Brock,et al.  Make space for the Pi , 2015, SoutheastCon 2015.

[9]  Emmanuel Chailloux,et al.  Programming Microcontrollers in OCaml: The OCaPIC Project , 2015, PADL.

[10]  Amanda Wilson,et al.  Evaluating Scratch to Introduce Younger Schoolchildren to Programming , 2010, PPIG.

[11]  Charles R. Severance Massimo Banzi: Building Arduino , 2014, Computer.

[12]  Caitlin Kelleher,et al.  Lowering the barriers to programming: A taxonomy of programming environments and languages for novice programmers , 2005, CSUR.

[13]  John Maloney,et al.  The Scratch Programming Language and Environment , 2010, TOCE.

[14]  Yoshiharu Kato,et al.  Splish: A Visual Programming Environment for Arduino to Accelerate Physical Computing Experiences , 2010, 2010 Eighth International Conference on Creating, Connecting and Collaborating through Computing.

[15]  Jan Vitek,et al.  Concrete Types for TypeScript , 2015, ECOOP.

[16]  D. Dougherty The Maker Movement , 2012, Innovations: Technology, Governance, Globalization.

[17]  Branko Kaucic,et al.  Improving introductory programming with Scratch? , 2011, 2011 Proceedings of the 34th International Convention MIPRO.

[18]  David E. Culler,et al.  TinyOS: An Operating System for Sensor Networks , 2005, Ambient Intelligence.

[19]  Shuvra S. Bhattacharyya,et al.  Java-through-C compilation: an enabling technology for Java in embedded systems , 2004, Proceedings Design, Automation and Test in Europe Conference and Exhibition.

[20]  Paulo Blikstein,et al.  Gears of our childhood: constructionist toolkits, robotics, and physical computing, past and future , 2013, IDC.

[21]  Gareth Halfacree,et al.  Raspberry Pi User Guide , 2012 .

[22]  Thomas C. Schmidt,et al.  RIOT OS: Towards an OS for the Internet of Things , 2013, 2013 IEEE Conference on Computer Communications Workshops (INFOCOM WKSHPS).

[23]  Joel Koshy,et al.  VMSTAR: synthesizing scalable runtime environments for sensor networks , 2005, SenSys '05.

[24]  Massimo Banzi,et al.  Make: Getting Started with Arduino: The Open Source Electronics Prototyping Platform , 2014 .