The three pillars of machine programming

In this position paper, we describe our vision of the future of machine programming through a categorical examination of three pillars of research. Those pillars are: (i) intention, (ii) invention, and (iii) adaptation. Intention emphasizes advancements in the human-to-computer and computer-to-machine-learning interfaces. Invention emphasizes the creation or refinement of algorithms or core hardware and software building blocks through machine learning (ML). Adaptation emphasizes advances in the use of ML-based constructs to autonomously evolve software.

[1]  Richard C. Waters,et al.  The programmer's apprentice , 1990, ACM Press frontier series.

[2]  Ion Stoica,et al.  Opaque: An Oblivious and Encrypted Distributed Analytics Platform , 2017, NSDI.

[3]  Abdullah Muzahid,et al.  Production-Run Software Failure Diagnosis via Adaptive Communication Tracking , 2016, 2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA).

[4]  Adam Chlipala,et al.  Fiat: Deductive Synthesis of Abstract Data Types in a Proof Assistant , 2015, POPL.

[5]  Abhik Roychoudhury,et al.  Angelix: Scalable Multiline Program Patch Synthesis via Symbolic Analysis , 2016, 2016 IEEE/ACM 38th International Conference on Software Engineering (ICSE).

[6]  Armando Solar-Lezama,et al.  Synthesis of Domain Specific CNF Encoders for Bit-Vector Solvers , 2016, SAT.

[7]  Andreas Krause,et al.  Predicting Program Properties from "Big Code" , 2015, POPL.

[8]  Eric Lahtinen,et al.  Automatic error elimination by horizontal code transfer across multiple applications , 2015, PLDI.

[9]  Sanjit A. Seshia,et al.  Combinatorial sketching for finite programs , 2006, ASPLOS XII.

[10]  Alan Edelman,et al.  PetaBricks: a language and compiler for algorithmic choice , 2009, PLDI '09.

[11]  Eran Yahav,et al.  Typestate-based semantic code search over partial programs , 2012, OOPSLA '12.

[12]  Rajeev Alur,et al.  TRANSIT: specifying protocols with concolic snippets , 2013, PLDI.

[13]  Quoc V. Le,et al.  Neural Program Synthesis with Priority Queue Training , 2018, ArXiv.

[14]  Tim Kraska,et al.  MLbase: A Distributed Machine-learning System , 2013, CIDR.

[15]  Isil Dillig,et al.  Synthesizing data structure transformations from input-output examples , 2015, PLDI.

[16]  Pushmeet Kohli,et al.  TerpreT: A Probabilistic Programming Language for Program Induction , 2016, ArXiv.

[17]  José M. F. Moura,et al.  Spiral: A Generator for Platform-Adapted Libraries of Signal Processing Alogorithms , 2004, Int. J. High Perform. Comput. Appl..

[18]  Karthikeyan Sankaralingam,et al.  Dark Silicon and the End of Multicore Scaling , 2012, IEEE Micro.

[19]  Swarat Chaudhuri,et al.  Smooth interpretation , 2010, PLDI '10.

[20]  Steven G. Johnson,et al.  FFTW: an adaptive software architecture for the FFT , 1998, Proceedings of the 1998 IEEE International Conference on Acoustics, Speech and Signal Processing, ICASSP '98 (Cat. No.98CH36181).

[21]  Sebastian Nowozin,et al.  DeepCoder: Learning to Write Programs , 2016, ICLR.

[22]  Tim Kraska,et al.  The Case for Learned Index Structures , 2018 .

[23]  Sumit Gulwani,et al.  Predicting a Correct Program in Programming by Example , 2015, CAV.

[24]  Pavol Cerný,et al.  Synthesis Through Unification , 2015, CAV.

[25]  Michael I. Jordan,et al.  The Missing Piece in Complex Analytics: Low Latency, Scalable Model Management and Serving with Velox , 2014, CIDR.

[26]  Frédo Durand,et al.  Halide: a language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines , 2013, PLDI.

[27]  Fan Long,et al.  Automatic inference of code transforms for patch generation , 2017, ESEC/SIGSOFT FSE.

[28]  Martin T. Vechev,et al.  Programming with "Big Code": Lessons, Techniques and Applications , 2015, SNAPL.

[29]  David Lo,et al.  History Driven Program Repair , 2016, 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER).

[30]  Rishabh Singh,et al.  SPT: Storyboard Programming Tool , 2012, CAV.

[31]  Sumit Gulwani,et al.  Automating string processing in spreadsheets using input-output examples , 2011, POPL '11.

[32]  Miryung Kim,et al.  Systematic editing: generating program transformations from an example , 2011, PLDI '11.

[33]  Swarat Chaudhuri,et al.  Neural Sketch Learning for Conditional Program Generation , 2017, ICLR.

[34]  Miryung Kim,et al.  Lase: Locating and applying systematic edits by learning from examples , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[35]  David E. Bernholdt,et al.  A High-Level Approach to Synthesis of High-Performance Codes for Quantum Chemistry , 2002, ACM/IEEE SC 2002 Conference (SC'02).

[36]  Rastislav Bodík,et al.  Chlorophyll : Synthesis-Aided Compiler for Low-Power Spatial Architectures by Phitchaya Mangpo Phothilimthana , 2015 .

[37]  Alvin Cheung,et al.  Learning a Neural Semantic Parser from User Feedback , 2017, ACL.

[38]  Rishabh Singh,et al.  Qlose: Program Repair with Quantitative Objectives , 2016, CAV.

[39]  Justin Gottschlich,et al.  AutoPerf: A Generalized Zero-Positive Learning System to Detect Software Performance Anomalies , 2017 .

[40]  Rishabh Singh,et al.  Synthesizing data structure manipulations from storyboards , 2011, ESEC/FSE '11.

[41]  Fan Long,et al.  Automatic patch generation by learning correct code , 2016, POPL.

[42]  Sumit Gulwani,et al.  Synthesis of loop-free programs , 2011, PLDI '11.

[43]  Benjamin Recht,et al.  KeystoneML: Optimizing Pipelines for Large-Scale Advanced Analytics , 2016, 2017 IEEE 33rd International Conference on Data Engineering (ICDE).

[44]  Peter-Michael Osera,et al.  Type-and-example-directed program synthesis , 2015, PLDI.

[45]  Jun Yang,et al.  Data Management in Machine Learning: Challenges, Techniques, and Systems , 2017, SIGMOD Conference.

[46]  Manasi Vartak,et al.  ModelDB: a system for machine learning model management , 2016, HILDA '16.

[47]  Justin Emile Gottschlich,et al.  AI programmer: autonomously creating software programs using genetic algorithms , 2017, GECCO Companion.

[48]  Swarat Chaudhuri,et al.  Bayesian Sketch Learning for Program Synthesis , 2017, ArXiv.

[49]  Alvin Cheung,et al.  Verified lifting of stencil computations , 2016, PLDI.

[50]  Mark Harman,et al.  Automated software transplantation , 2015, ISSTA.

[51]  Dawn Xiaodong Song,et al.  SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning , 2017, ArXiv.

[52]  Martin T. Vechev,et al.  PHOG: Probabilistic Model for Code , 2016, ICML.

[53]  Matias Martinez,et al.  Automatic Repair of Real Bugs: An Experience Report on the Defects4J Dataset , 2015, ArXiv.

[54]  Sumit Gulwani,et al.  Learning Syntactic Program Transformations from Examples , 2016, 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE).

[55]  Michael I. Jordan,et al.  Asynchronous Complex Analytics in a Distributed Dataflow Architecture , 2015, ArXiv.

[56]  Sumit Gulwani,et al.  Recursive Program Synthesis , 2013, CAV.

[57]  Fan Long,et al.  Staged program repair with condition synthesis , 2015, ESEC/SIGSOFT FSE.

[58]  Dawn Xiaodong Song,et al.  Towards Synthesizing Complex Programs From Input-Output Examples , 2017, ICLR.

[59]  Rajeev Alur,et al.  Syntax-guided synthesis , 2013, 2013 Formal Methods in Computer-Aided Design.

[60]  Michael D. Ernst,et al.  Automatically patching errors in deployed software , 2009, SOSP '09.

[61]  Shafi Goldwasser,et al.  Machine Learning Classification over Encrypted Data , 2015, NDSS.

[62]  Dawn Xiaodong Song,et al.  Tree-to-tree Neural Networks for Program Translation , 2018, NeurIPS.

[63]  Jiachen Zhang,et al.  Precise Condition Synthesis for Program Repair , 2016, 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE).

[64]  Sumit Gulwani,et al.  From program verification to program synthesis , 2010, POPL '10.

[65]  Vítor Santos Costa,et al.  Inductive Logic Programming , 2013, Lecture Notes in Computer Science.

[66]  Dawn Xiaodong Song,et al.  Learning Neural Programs To Parse Programs , 2017, ArXiv.

[67]  Hari Balakrishnan,et al.  CryptDB: protecting confidentiality with encrypted query processing , 2011, SOSP.

[68]  Dawei Qi,et al.  SemFix: Program repair via semantic analysis , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[69]  Victor Eijkhout,et al.  Self-Adapting Linear Algebra Algorithms and Software , 2005, Proceedings of the IEEE.

[70]  Armando Solar-Lezama,et al.  Program synthesis from polymorphic refinement types , 2015, PLDI.

[71]  Eric Lahtinen,et al.  Targeted Automatic Integer Overflow Discovery Using Goal-Directed Conditional Branch Enforcement , 2015, ASPLOS.

[72]  Eran Yahav,et al.  Programming with "Big Code" , 2015, Found. Trends Program. Lang..

[73]  Claire Le Goues,et al.  Automatically finding patches using genetic programming , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[74]  Henry Lieberman,et al.  Watch what I do: programming by demonstration , 1993 .

[75]  Eran Yahav,et al.  Symbolic Automata for Static Specification Mining , 2013, SAS.

[76]  Armando Solar-Lezama,et al.  Learning to Infer Graphics Programs from Hand-Drawn Images , 2017, NeurIPS.

[77]  Jeffrey F. Naughton,et al.  Model Selection Management Systems: The Next Frontier of Advanced Analytics , 2016, SGMD.

[78]  Regina Barzilay,et al.  From Natural Language Specifications to Program Input Parsers , 2013, ACL.

[79]  Richard C. Waters,et al.  The Programmer's Apprentice: a research overview , 1988, Computer.

[80]  Eran Yahav,et al.  Extracting code from programming tutorial videos , 2016, Onward!.

[81]  Vitaly Shmatikov,et al.  Fix Me Up: Repairing Access-Control Bugs in Web Applications , 2013, NDSS.

[82]  Sumit Gulwani,et al.  FlashMeta: a framework for inductive program synthesis , 2015, OOPSLA.

[83]  J. W. Backus,et al.  The FORTRAN automatic coding system , 1899, IRE-AIEE-ACM '57 (Western).

[84]  Emina Torlak,et al.  Angelic debugging , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[85]  G. Evans,et al.  Learning to Optimize , 2008 .

[86]  Dawn Xiaodong Song,et al.  Making Neural Programming Architectures Generalize via Recursion , 2017, ICLR.

[87]  Catherine Ramsey,et al.  Learning to Learn Programs from Examples : Going Beyond Program Structure , 2017 .

[88]  Jack J. Dongarra,et al.  Automatically Tuned Linear Algebra Software , 1998, Proceedings of the IEEE/ACM SC98 Conference.

[89]  Stephan Günnemann,et al.  Machine Learning Meets Databases , 2017, Datenbank-Spektrum.

[90]  Sumit Gulwani,et al.  Test-driven synthesis , 2014, PLDI.

[91]  Alex Graves,et al.  Neural Turing Machines , 2014, ArXiv.

[92]  Stephen J. Wright,et al.  Hogwild: A Lock-Free Approach to Parallelizing Stochastic Gradient Descent , 2011, NIPS.

[93]  NAVID YAGHMAZADEH,et al.  SQLizer: query synthesis from natural language , 2017, Proc. ACM Program. Lang..

[94]  Eran Yahav,et al.  Deriving linearizable fine-grained concurrent objects , 2008, PLDI '08.

[95]  Shoaib Kamil,et al.  OpenTuner: An extensible framework for program autotuning , 2014, 2014 23rd International Conference on Parallel Architecture and Compilation (PACT).

[96]  Jan Vitek,et al.  DéjàVu: a map of code duplicates on GitHub , 2017, Proc. ACM Program. Lang..

[97]  Xin Wang,et al.  Clipper: A Low-Latency Online Prediction Serving System , 2016, NSDI.

[98]  Yuan Yu,et al.  TensorFlow: A system for large-scale machine learning , 2016, OSDI.

[99]  Sumit Gulwani,et al.  From relational verification to SIMD loop synthesis , 2013, PPoPP '13.

[100]  Martín Abadi,et al.  A computational model for TensorFlow: an introduction , 2017, MAPL@PLDI.