Ian Piumarta

I am a professor at Kyoto University of Advanced Science.

My professional and academic interests include highly-reflective and recursive systems, metalinguistic abstraction, virtual machines, dynamic code generation, and reconfigurable software and hardware. I have also contributed to research work on collaborative systems and non-invasive wi-fi monitoring for estimating population behaviour.

I graduated (with honours) in Computer Science in May 1987 at  the University of Manchester (UK).  In October 1992 I received a Ph.D. in Computer Science from the same institution for my work on code generation techniques for dynamic languages.  During my eight years at Manchester I was involved with the design and development of a wide range of programming systems, from low-level assembly language development tools for the PDP-11 through to implementations of high-level languages such as Scheme and Smalltalk.

I worked for one year on the implementation of the Dylan language, at Harlequin in Cambridge and IRCAM in Paris. From 1995 until 2004 I worked in France at INRIA, on reference-based distributed object systems and garbage collection algorithms, and at the Laboratoire d'Informatique de l'Université Paris VI (LIP6), on a highly-configurable virtual virtual machine.

In 2004 I moved from Paris to Palo Alto to join Alan Kay's Advanced Software Research Group at Hewlett-Packard Laboratories. My work continued along similar lines, building a highly-dynamic execution environment intended to support systems such as Alan's Croquet. During that time I spent two years in Japan, first as a visiting researcher at Kyoto University then as a research fellow with the JSPS based at Ritsumeikan University.

Details of my publications are available in my CV. Below are a few of my thoughts on software, hardware and education, with links where appropriate.


We manage to program in spite of our programming languages.

Every language imposes its designer's perspective and prejudices on its users, erecting often-insurmountable barriers to expressivity and creativity. My work on languages has been a search for the smallest set of fundamental principles that form a self-sustaining programming system, in which artificial limitations are minimised and freedom of expression is maximised [Piu10].

Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retrancher.

[It would seem that perfection is achieved not when there is nothing more to add, but when there is nothing more to remove.]

Antoine de Saint-Exupery

Reconciling an expert user's desires with the language designer's limitations and omissions is best done by letting the user become the language re-designer. For this we need principled mechanisms that blur (or erase) the distinction between user-level metalanguage and the implementation of the language [Piu11]. Mainstream languages have made almost no progress in this direction since the 1980s, and those `boutiqe' languages that have made some progress more recently all fall short of their potential in one way or another.


We manage to learn in spite of our educational environments and systems.

A complete programming manual, circa 1976

Deep learning is a personal, internal process that depends on several factors to be successful. One factor (maybe the most important) is an effective reward function, critical for maintaining motivation and curiosity. At the microscopic level, physical computing projects (e.g., micro-controllers on breadboards) and incremental programming languages (especially those with graphics) provide a compelling reward functions through immediate and tangible results. At the macroscopic level, longer-term projects based in similar environments provide successively greater rewards as learners explore algorithmic thinking, abstraction and hierarchical design, and other powerful mental tools, while gaining practical experience and skills.

40 years ago, much of CS was learned in a hands-on manner. There were almost no text books, and few high-level languages outside of University or Corporate computing centres. Programming was learned incrementally, by entering machine language programs one byte at a time in hexadecimal with the aid of one-page instruction set summaries found at the back of manufacturers' data sheets. Skills were often acquired by building essential tools (editors, assemblers, interpreters, compilers) that were otherwise unavailable; peripherals and interfacing were understood by interacting with hardware directly and writing device drivers; upgrading the computer required digital design skills, a soldering iron, and a scalpel for cutting PCB tracks.

Environments conducive to learning should encourage similar behaviour from the students who inhabit them. It is not enough to supply information (in classes, textbooks, or whatever). Information must be understood, organised, and placed in context before knowledge can result. Experience is gained only when that knowledge is put to practical use. Wisdom forms slowly, by reflecting on the collected successes and failures of experience. Giving this process a tangible goal transforms it from an uphill battle to a rewarding journey of discovery and growth that is actually fun. Conceiving, planning and executing challenging personal projects gives today's students the motivation and opportunity for skills acquisition that were driving the software and hardware ‘hackers’ to their innovations 40 years ago, and a similarly large dose of satisfaction when completed.

Students working on projects in the Ritsumaker space

In 2017 I set up a new Engineering Project Lab for undergraduate students. With help from half a dozen students eager to do something challenging and real, we created Ritsumaker, a “community and open ‘collaboratory’ of like-minded people, interested in creating things for the joy of learning.” The space is intended to inspire curiosity and motivate students to want to create tangible things, for their own satisfaction, that require knowledge and skills a little beyond their comfort zones. It provides equipment and materials for acquiring new knowledge and for completing non-trivial projects. I spend most of my spare time in the space answering questions, sharing knowledge and experience, introducing new techniques or tools that might be useful for a project, or simply being someone to whom they can demonstrate their achievements and progress.

We make not to have but to understand.”

Hardware, programming tools, and configurable computing

The fastest-growing sector of computing is IoT, which may soon be joined by configurable hardware in the service of machine learning. Both domains are in critical need of better tools but it seems the software systems community has little interest in designing new low-level tools, and the low-level programming and hardware design communities have little interest in writing their own new tools exploiting the progress in meta-programming made in the last couple of decades. Opportunities exist for innovation in this area, and will expand rapidly when progress in ML and system optimisation turns to self-modifying hardware for solutions along with new approaches to programming it.

People who are really serious about software should make their own hardware.

Alan Kay, 1982

I think we can now write the corollary to that suggestion, at least as far as tools are concerned: people who are really serious about hardware need to write their own software.


In 1986 “building your own computer” did not mean plugging a few off-the-shelf parts into a Taiwanese motherboard

I have been writing software since I was 12 years old. I was given my first soldering iron at around the same time. My first commercial software was published 1985, just before my 19th birthday. A year later I designed and built an 8-bit microcomputer, based on the 65c02. A year after that I had outgrown 8 bits and built a 32-bit computer, based on the 68010.

I write software, for fun and also as a learning vehicle, publishing some of it as open-source. My code can be found in /usr/bin on every Raspberry Pi (the virtual machine on which the Scratch programming system runs), and has been integrated into DevOps platforms (a parser generator used for implementing domain-specific languages) managing the infrastructure of companies including Deutsche Telekom, Samsung, Panasonic and LinkedIn.

I design hardware, both at the board level (I still really enjoy designing and building microcomputers with students, as well as designing and building my own hi-fi equipment at home) and at the gate level in Verilog. Recent developments in commercial-grade ‘IP unencumbered’ soft cores leave me intrigued at the potential for hardware and software co-configuration and co-evolution, which could become my next development project.