TELS: learning text editing tasks from examples
Watch what I do
The mythical man-month (anniversary ed.)
The mythical man-month (anniversary ed.)
Communications of the ACM
Program development by stepwise refinement
Communications of the ACM
Version Space Algebra and its Application to Programming by Demonstration
ICML '00 Proceedings of the Seventeenth International Conference on Machine Learning
Integrating Constraints with an Object-Oriented Language
ECOOP '92 Proceedings of the European Conference on Object-Oriented Programming
A session with Tinker: Interleaving program testing with program design
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
The incremental garbage collection of processes
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
C# Language Specification
Programming by Demonstration Using Version Space Algebra
Machine Learning
Learning programs from traces using version space algebra
Proceedings of the 2nd international conference on Knowledge capture
A diary study of task switching and interruptions
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Labeling images with a computer game
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Programming by sketching for bit-streaming programs
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Combinatorial sketching for finite programs
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Disruption and recovery of computing tasks: field study, analysis, and directions
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
CodeGenie: using test-cases to search and reuse source code
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Sketching concurrent data structures
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Automatic mining of functionally equivalent code fragments via random testing
Proceedings of the eighteenth international symposium on Software testing and analysis
Programming with angelic nondeterminism
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
CAPTCHA: using hard AI problems for security
EUROCRYPT'03 Proceedings of the 22nd international conference on Theory and applications of cryptographic techniques
Falling back on executable specifications
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Automating string processing in spreadsheets using input-output examples
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A test-driven approach to code search and its application to the reuse of auxiliary functionality
Information and Software Technology
Proceedings of the 33rd International Conference on Software Engineering
Unifying execution of imperative and declarative code
Proceedings of the 33rd International Conference on Software Engineering
Always-available static and dynamic feedback
Proceedings of the 33rd International Conference on Software Engineering
Spreadsheet table transformations from examples
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Dimensions in program synthesis
Proceedings of the 2010 Conference on Formal Methods in Computer-Aided Design
Proceedings of the 2013 International Symposium on Software Testing and Analysis
Supporting incremental programming with ghosts
Proceedings of the 2013 International Conference on Software Engineering
Hi-index | 0.00 |
Programming is the process of expressing and refining ideas in a programming language. Ideally, we want our programming language to flexibly fit our natural thought process. Language innovations, such as procedural abstraction, object and aspect orientation, have helped increase programming agility. However, they still lack important features that a programmer could exploit to quickly experiment with design and implementation choices. We propose prorogued programming, a new paradigm more closely aligned with a programmer's thought process. A prorogued programming language (PPL) supports three basic principles: 1) proroguing concerns: the ability to defer a concern, to focus on and finish the current concern; 2) hybrid computation: the ability to involve the programmer as an integral part of computation; and 3) executable refinement: the ability to execute any intermediate program refinements. Working in a PPL, the programmer can run and experiment with an incomplete program, and gradually and iteratively reify the missing parts while catching design and implementation mistakes early. We describe the prorogued programming paradigm, our design and realization of the paradigm using Prorogued C#, our extension to C#, and demonstrate its utility through a few use cases.