The Brown PLT Blog
Sharing is Scaring: Why is Cloud File-Sharing Hard?
Practical Static Analysis for Privacy Bugs
Lightweight Diagramming for Lightweight Formal Methods
Argus: Interactively Debugging Rust trait Errors
LTL Tutor
Misconceptions In Finite-Trace and Infinite-Trace Linear Temporal Logic
Iterative Student Program Planning using Transformer-Driven Feedback
Differential Analysis: A Summary
Forge: A Tool to Teach Formal Methods
Finding and Fixing Standard Misconceptions About Program Behavior
Privacy-Respecting Type Error Telemetry at Scale
Profiling Programming Language Learning
The Examplar Project: A Summary
A Core Calculus for Documents
Observations on the Design of Program Planning Notations for Students
Conceptual Mutation Testing
Generating Programs Trivially: Student Use of Large Language Models
A Grounded Conceptual Model for Ownership Types in Rust
What Happens When Students Switch (Functional) Languages
Typed-Untyped Interactions: A Comparative Analysis
Little Tricky Logics
Identifying Problem Misconceptions
Performance Preconceptions
Structural Versus Pipeline Composition of Higher-Order Functions
Plan Composition Using Higher-Order Functions
Towards a Notional Machine for Runtime Stacks and Scope
Gradual Soundness: Lessons from Static Python
Applying Cognitive Principles to Model-Finding Output
Automated, Targeted Testing of Property-Based Testing Predicates
A Benchmark for Tabular Types
Student Help-Seeking for (Un)Specified Behaviors
Adding Function Transformers to CODAP
Developing Behavioral Concepts of Higher-Order Functions
Adversarial Thinking Early in Post-Secondary Education
Teaching and Assessing Property-Based Testing
Students Testing Without Coercion
Using Design Alternatives to Learn About Data Organizations
What Help Do Students Seek in TA Office Hours?
Combating Misconceptions by Encouraging Example-Writing
The Hidden Perils of Automated Assessment
Mystery Languages
Resugaring Type Rules
Picking Colors for Pyret Error Messages
Can We Crowdsource Language Design?
Crowdsourcing User Studies for Formal Methods
User Studies of Principled Model Finder Output
A Third Perspective on Hygiene
Scope Inference, a.k.a. Resugaring Scope Rules
The PerMission Store
Examining the Privacy Decisions Facing Users
The Pyret Programming Language: Why Pyret?
Resugaring Evaluation Sequences
Slimming Languages by Reducing Sugar
In-flow Peer Review: An Overview
Tierless Programming for SDNs: Differential Analysis
Tierless Programming for SDNs: Verification
Tierless Programming for SDNs: Optimality
Tierless Programming for SDNs: Events
Tierless Programming for Software-Defined Networks
CS Student Work/Sleep Habits Revealed As Possibly Dangerously Normal
Parley: User Studies for Syntax Design
Typechecking Uses of the jQuery Language
Verifying Extensions' Compliance with Firefox's Private Browsing Mode
From MOOC Students to Researchers
Social Ratings of Application Permissions (Part 4: The Goal)
Social Ratings of Application Permissions (Part 3: Permissions Within a Domain)
Social Ratings of Application Permissions (Part 2: The Effect of Branding)
Social Ratings of Application Permissions (Part 1: Some Basic Conditions)
Aluminum: Principled Scenario Exploration Through Minimality
A Privacy-Affecting Change in Firefox 20
The New MOOR's Law
Essentials of Garbage Collection
(Sub)Typing First Class Field Names
Typing First Class Field Names
S5: Engineering Eval
Progressive Types
Modeling DOM Events
Mechanized LambdaJS
ECMA Announces Official λJS Adoption
Objects in Scripting Languages
S5: Wat?
Belay Lessons: Smarter Web Programming
S5: Semantics for Accessors
S5: A Semantics for Today's JavaScript
The Essence of JavaScript
ADsafety