Reference. PLIERS: A Process that Integrates User-Centered Methods into Programming Language Design
Programming language design requires making many usability-related design decisions. However, existing HCI methods can be impractical to apply to programming languages: languages have high iteration costs, programmers require significant learning time, and user performance has high variance. To address these problems, we adapted both formative and summative HCI methods to make them more suitable for programming language design. We integrated these methods into a new process, PLIERS, for designing programming languages in a user-centered way. We assessed PLIERS by using it to design two new programming languages. Glacier extends Java to enable programmers to express immutability properties effectively and easily. Obsidian is a language for blockchains that includes verification of critical safety properties. Empirical studies showed that the PLIERS process resulted in languages that could be used effectively by many programmers and revealed additional opportunities for language improvement.
Cite
Cited by (2)
A FAIR Case for a Live Computational Commons omar-2025-a
Obsidian: Typestate and Assets for Safer Blockchain Programming coblenz-2020-obsidian
Blockchain platforms are coming into use for processing critical transactions among participants who have not established mutual trust. Many blockchains are programmable, supporting smart contracts , which maintain persistent state and support transactions that transform the state. Unfortunately, bugs in many smart contracts have been exploited by hackers. Obsidian is a novel programming language with a type system that enables static detection of bugs that are common in smart contracts today. Obsidian is based on a core calculus, Silica, for which we proved type soundness. Obsidian uses typestate to detect improper state manipulation and uses linear types to detect abuse of assets. We integrated a permissions system that encodes a notion of ownership to allow for safe, flexible aliasing. We describe two case studies that evaluate Obsidian’s applicability to the domains of parametric insurance and supply chain management, finding that Obsidian’s type system facilitates reasoning about high-level states and ownership of resources. We compared our Obsidian implementation to a Solidity implementation, observing that the Solidity implementation requires much boilerplate checking and tracking of state, whereas Obsidian does this work statically.
Cites 98 works (1 here)
With notes (1)
Obsidian: Typestate and Assets for Safer Blockchain Programming coblenz-2020-obsidian
Blockchain platforms are coming into use for processing critical transactions among participants who have not established mutual trust. Many blockchains are programmable, supporting smart contracts , which maintain persistent state and support transactions that transform the state. Unfortunately, bugs in many smart contracts have been exploited by hackers. Obsidian is a novel programming language with a type system that enables static detection of bugs that are common in smart contracts today. Obsidian is based on a core calculus, Silica, for which we proved type soundness. Obsidian uses typestate to detect improper state manipulation and uses linear types to detect abuse of assets. We integrated a permissions system that encodes a notion of ownership to allow for safe, flexible aliasing. We describe two case studies that evaluate Obsidian’s applicability to the domains of parametric insurance and supply chain management, finding that Obsidian’s type system facilitates reasoning about high-level states and ownership of resources. We compared our Obsidian implementation to a Solidity implementation, observing that the Solidity implementation requires much boilerplate checking and tracking of state, whereas Obsidian does this work statically.
External (97)
- Can advanced type systems be usable? An empirical study of ownership, assets, and typestate in Obsidian (2020)
- Common Patterns (Solidity documentation) (2020)
- Smarter Smart Contract Development Tools (2019)
- Blockchains from a distributed computing perspective (2019)
- The End to the Myth of Individual Programmer Productivity (2019)
- Usability Methods for Designing Programming Languages for Software Engineers (arXiv version of this paper) (2019)
- Blockchain for supply chain (IBM) (2019)
- Professional Master's Program (University of Washington) (2019)
- Secure Coding Guidelines for the Java SE, version 4.0 (2019)
- Developer Survey Results 2019 (Stack Overflow) (2019)
- Master's Programs (Carnegie Mellon University) (2019)
- Leveraging Applications of Formal Methods, Verification and Validation. Industrial Practice (2018)
- Interdisciplinary programming language design (2018)
- Making Sense of Blockchain Applications (2018)
- Empirical Evaluation Checklist (beta) (2018)
- Towards Safer Smart Contracts: A Survey of Languages and Verification Methods (2018)
- Assessing user preferences in programming language design (2017)
- Helena: Web Automation for End Users (2017)
- Glacier: Transitive Class Immutability for Java (2017)
- Methodological Irregularities in Programming-Language Research (2017)
- Can we crowdsource language design? (2017)
- A user study to inform the design of the Obsidian blockchain DSL (2017)
- $32 million worth of digital currency ether stolen by hackers (2017)
- The Potential for Blockchain to Transform Electronic Health Records (2017)
- How to Deal With Bad Design Suggestions (2017)
- The practices of programming (2016)
- Formal Verification of Smart Contracts (2016)
- Exploring language support for immutability (2016)
- Step by Step Towards Creating a Safe Smart Contract: Lessons and Insights from a Cryptocurrency Lab (2016)
- Beyond Born versus Made (2016)
- Programming, Problem Solving, and Self-Awareness (2016)
- Programmers Are Users Too: Human-Centered Methods for Improving Programming Tools (2016)
- An empirical study on the impact of C++ lambdas and programmer experience (2016)
- Analysis of the DAO exploit (2016)
- Map: remove and check values (BaseX issue 1297) (2016)
- Thoughts on The DAO Hack (2016)
- Reactive Vega: A Streaming Dataflow Architecture for Declarative Interactive Visualization (2015)
- Searching the State Space: A Qualitative Study of API Protocol Usability (2015)
- How do API documentation and static typing affect API usability? (2014)
- InterState (2014)
- The Programming Language Wars (2014)
- A practical guide to controlled experiments of software engineering tools with human participants (2013)
- A Comprehensive Framework for Evaluation in Design Science Research (2012)
- The jabberwocky programming environment for structured social computing (2011)
- An Empirical Study of Object Protocols in the Wild (2011)
- Benefits and barriers of user evaluation in software engineering research (2011)
- The state of the art in end-user software engineering (2011)
- An empirical comparison of the accuracy rates of novices using the quorum, perl, and randomo programming languages (2011)
- First-class state change in plaid (2011)
- Research Methods in Human-Computer Interaction (2010)
- Typestate-oriented programming (2009)
- Protovis: A Graphical Toolkit for Visualization (2009)
- PL Grand Challenges (2009)
- Scratch (2009)
- Guidelines for industrially-based multiple case studies in software engineering (2009)
- Null References: The Billion Dollar Mistake (talk) (2009)
- PLURAL: checking protocol compliance under aliasing (2008)
- Research Methods for Human-Computer Interaction (2008)
- Impact of CAD tools on creative problem solving in engineering design (2008)
- Effective Java, Second Edition (2008)
- Framework Design Guidelines (Microsoft) (2008)
- Modular typestate checking of aliased objects (2007)
- Object and reference immutability using Java generics (2007)
- Strategies for evaluating information visualization tools (2006)
- Drug Guru: A computer software program for drug design using medicinal chemistry rules (2006)
- Lowering the barriers to programming (2005)
- Natural programming languages and environments (2004)
- Case studies for software engineers (2004)
- Applying attention investment to end-user programming (2003)
- Key principles for user-centred systems design (2003)
- A user-centred approach to functions in Excel (2003)
- Using HCI techniques to design a more usable programming system (2003)
- Software Architectures and Tools for Computer Aided Process Engineering (2002)
- Types and Programming Languages (2002)
- Five Questions about Language Design (2001)
- A Practical Guide to Usability Testing (1999)
- Program understanding behavior during corrective maintenance of large-scale software (1999)
- A study of the fragile base class problem (1998)
- Class.getSigners() returns an array of signers instead of a copy of the array (JDK bug) (1997)
- Usability Analysis of Visual Programming Environments: A ‘Cognitive Dimensions’ Framework (1996)
- Program comprehension during software maintenance and evolution (1995)
- Wizard of Oz studies — why and how (1993)
- A mathematical model of the finding of usability problems (1993)
- Knowledge exploited by experts during software system design (1990)
- Breakdowns and processes during the early activities of software design by professionals (1987)
- Communication Breakdowns and Boundary Spanning Activities on Large Programming Projects (1987)
- Stimulus structures and mental representations in expert comprehension of computer programs (1987)
- Strategies in programming programmable controllers: A field study on a professional programmer (1987)
- A methodology for studying software design teams: An investigation of conflict behaviors in the requirements definition phase (1987)
- Empirical studies of programmers: The territory, paths, and destinations. Empirical Studies of Programmers (1986)
- Beacons in computer program comprehension (1986)
- The Prospects for Psychological Science in Human-Computer Interaction (1985)
- Empirical Studies of Programming Knowledge (1984)
- Protocol Analysis: Verbal Reports as Data (1984)
- Scope marking in computer conditionals—a psychological evaluation (1977)
- Programming by non-programmers (1974)
- The Sage Encyclopedia of Qualitative Research Methods