Interactive Programming by Example
Total Page:16
File Type:pdf, Size:1020Kb
Interactive Programming by Example THÈSE NO 7956 (2017) PRÉSENTÉE LE 28 SEPTEMBRE 2017 À LA FACULTÉ INFORMATIQUE ET COMMUNICATIONS LABORATOIRE D'ANALYSE ET DE RAISONNEMENT AUTOMATISÉS PROGRAMME DOCTORAL EN INFORMATIQUE ET COMMUNICATIONS ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE POUR L'OBTENTION DU GRADE DE DOCTEUR ÈS SCIENCES PAR Mikaël MAYER acceptée sur proposition du jury: Prof. P. Dillenbourg, président du jury Prof. V. Kunčak, directeur de thèse Prof. M. Vechev, rapporteur Prof. R. Chugh, rapporteur Prof. M. Odersky, rapporteur Suisse 2017 Celui qui pose une question He who asks a question aura l’air stupide cinq minutes. may look stupid for five minutes. Celui qui ne pose pas de question He who asks no questions restera stupide toute sa vie. will remain stupid all his life. Proverbe chinois Chinese proverb To my lovely wife Marion who listened to me and gave me encouraging advice, To my son Leoban for whom I want to be an interactive example, To my parents Laurent and Christine who encouraged me to start this thesis, To my brothers and sister – with whom I always share good times, To my grandparents, my extended family, nephews, uncles, aunts, sisters-in-law, To humanity, and even all living beings. Acknowledgements I thank the members of the jury for their time in preparing the defense of this thesis. For the people I indirectly worked with, and whose conversations undoubtedly had an influence on my research, I would like to thank Philippe Suter, Eva Darulova, Giuliano Losa, Regis Blanc, Etienne Kneuss, Manos Koukoutos, Georg Schmid, Romain Edelmann, Daniel Lupei, Romain Rütschi and Ted Hart. Three students took their time to develop these new technologies with me, so I would like to thank them there: Lomig Mégard, for the amazing work he did at enhancing Pong Designer; Thomas Dupriez, for his work on Web designer, which I had the opportunity to demo each time there was an EPFL open doors; and Elric Milet, for this work on abstracting websites. My research has been made fruitful thanks to the collaboration of my co-authors, and I would like to extend a special thanks to them: Gustavo Soares, for our work on the Microsoft Prose Interface; Alexander Polozov, for his mentoring role in both my integration at Microsoft and for writing; Maxim Grechkin, for helping me with the statistical approach; Ravichandran Madhavan, for so many great projects on enhancing teaching; Jad Hamza, for the incredible time we spent together, even during breaks; Ruzica Piskac, for her pugnacity at defending what is true; Mark Santolucito, for his help on writing English; and for their support I would also like to thank Rishabh Singh, Filip Niksic, Mark Marron, Benjamin Zorn and Vu Le. I also extend my gratitude to our administrative staff, Yvette Gallais, Sylvie Jankow and Fabien Salvi, who were always there to help me. I would like also to thank Holly Cogliati-Bauereis, for her proofreading of this thesis which was very valuable. I would like to thank Sumit Gulwani, my manager and mentor for a full, intensive and productive year at Microsoft Research, which changed my life. He helped me to develop a real vision about customers of these kinds of technologies, mentored me so well that I knew how to continue my thesis. Last but not least, this thesis would have never probably see the day without the tremendous daily collaboration and encouragement provided by my thesis director, Viktor Kunčak. I am grateful to him for sharing his visions and continuously providing feedback and pointers to advance this thesis. Viktor is very passionate and knowledgeable, and it is always delightful to converse with him. I acknowledge the financial support of the European Research Council. Lausanne, 26 April 2017 M. M. i Abstract As of today, programming has never been so accessible. Yet, it remains a challenge for end-users: students, non-technical employees, experts in their domains outside of computer science, and so on. With its forecast potential for solving problems by only observing inputs and outputs, programming-by-example was supposed to alleviate complex tasks requiring programming for end-users. The initial ideas of macro-based editors paved the way to subsequent practical solutions, such as spreadsheet transformations from examples. Finding the right program is the core of the programming-by-example systems. However, users find it difficult to trust such generated programs. In this thesis, we contribute to proving that some forms of interaction alleviate, by having users provide examples,the problem of finding correct and reliable programs. We first report on two experiments that enable us to conjecture what kind of interaction brings benefits to programming-by-example. First, we present a new kind of game engine, Pong Designer. In this game engine, by using their finger, users program rules on the fly, by modifying the game state. We analyze its potential, and its eventual downsides that have probably prevented its wide adoption. Second, we present StriSynth, an interactive command-line tool that uses programming-by-example to transform string and collections. The resulting programs can also rename or otherwise manage files. We obtained the result that confirms that many users preferred StriSynth over usual programming languages, but would appreciate to have both. We then report on two new exciting experiments with verified results, using two forms of interaction truly benefiting programming-by-example. Third, on top of a programming- by-example-based engine for extracting structured data out of text files, in this thesis we study two interaction models implemented in a tool named FlashProg: a view of the program with notification about ambiguities, and the asking of clarification questions. In this thesis, we prove that these two interaction models enable users to perform tasks with less errors and to be more confident with the results. Last, for learning recursive tree-to-string functions (e.g., pretty-printers), in this thesis we prove that questioning reduces the learning complexity from a cubic to a linear number of questions, in practice making programming-by-example even more accessible than regular programming. The implementation, named Prosy, could be easily added to integrated development environments. iii Acknowledgements Key words: Programming by example, programming by demonstration, program synthesis, accessibility, domain-specific languages, active learning iv Résumé Aujourd’hui, la programmation n’a jamais été autant à portée de tous. Cependant, de nombreux utilisateurs rechignent encore à l’utiliser, comme des étudiants, des employés de domaines non techniques, des experts en dehors de l’informatique, et ainsi de suite. Avec sa vocation à résoudre les problèmes rien qu’en recevant des exemples de ce qui rentre et ce qui doit sortir, la programmation par l’exemple était censée mettre des tâches complexes demandant de la programmation à portée de main tous les utilisateurs. Les idées initiales des éditeurs de texte basés sur les macros ont ouvert la voie à des solutions pratiques ultérieures, telles que les transformations de tableurs à partir d’exemples. Le cœur de la programmation par l’exemple, c’est de trouver le programme correct. Cependant, les utilisateurs peinent à se fier à de tels programmes générés. Cette thèse contribue à prouver que certaines formes d’interaction simplifient le problème de trouver des programmes corrects et fiables quand il s’agit de tirer profit d’exemples. Tout d’abord, nous rendons compte de deux expériences qui nous ont permis de conjec- turer quelles étaient les formes d’interaction qui pourraient améliorer la programmation par l’exemple. En premier lieu, nous présentons un nouveau genre de moteur de jeu, Pong Designer. Dans ce moteur de jeu, les utilisateurs programment des règles à la volée, en modifiant l’état du jeu avec leur doigt. Nous analysons son potentiel et finalement ses inconvénients qui l’ont probablement emêché d’être populaire. Deuxièmement, nous pré- sentons un outil interactif en ligne de commande, StriSynth, qui utilise la programmation par l’exemple pour transformer des chaînes de caractères et des collections. Entre autres, ces transformations peuvent aussi renommer ou autrement gérer des fichiers. Nous avons obtenu le résultat que beaucoup d’utilisateurs ont préféré StriSynth à des langages de programmation conventionels, mais qu’ils apprécieraient d’avoir les deux. Pour la suite, nous rendons compte de deux expériences innovantes aux résultats éprouvés, montrant à quel point deux nouvelles formes d’interaction peuvent améliorer quantitati- vement la programmation par l’exemple. Troisièmement, par-dessus un extracteur de données structurées sur un texte brut, extracteur fonctionnant en programmation par l’exemple, nous étudions dans cette thèse deux modèles d’interaction implantés dans un logiciel nommé FlashProg : une vue du programme avec des notifications à propos des ambiguités, et une fenêtre où l’ordinateur peut poser des questions pour clarifier certaines extractions. Dans cette thèse, nous prouvons que ces deux nouveaux modèles d’interaction permettent aux utilisateurs d’accomplir des tâches avec moins d’erreurs, et d’exprimer une plus grande confiance envers les résultats que s’ils n’avaient pas ces v Résumé modèles d’interaction. En dernier lieu, quand il s’agit à l’ordinateur d’apprendre des fonctions récursives transformant des arbres en chaînes de caractères, par exemple pour afficher une représentation claire de données lors d’un déboguage, cette thèse prouve que l’interaction sous la forme de questions casse la complexité d’un nombre de question pas- sant de cubique à linéaire, ce qui fait que la programmation par l’exemple devient même plus accessible que la programmation habituelle pour ce genre de tâches. L’implantation, nommée Prosy, pourrait facilement s’ajouter à des environnements de développement intégrés. Mots clefs : Programmation par l’exemple, programmation par la démonstration, synthèse de programmes, accessibilité, langages spécifiques à un domaine, apprentissage actif vi Contents Acknowledgements i Abstract (English/Français) iii List of figures xiii List of tables xvii 1 Introduction 1 1.1 Examples as Ambiguous Specifications ...................