Here is an actual situation we were asked to help non-technical| The Brown PLT Blog
Lightweight Diagramming for Lightweight Formal Methods| blog.brownplt.org
Forge: A Tool to Teach Formal Methods| blog.brownplt.org
Finding and Fixing Standard Misconceptions About Program Behavior| blog.brownplt.org
Sharing is Scaring: Why is Cloud File-Sharing Hard?| blog.brownplt.org
Privacy bugs are deeply problematic for software users (“once it’s out there you can’t take it back”), legally significant (due to laws like the GDPR), and difficult for programmers to find and to keep out. Static program analysis would therefore appear to be very helpful here.| The Brown PLT Blog
Practical Static Analysis for Privacy Bugs| blog.brownplt.org
Practical Static Analysis for Privacy Bugs| blog.brownplt.org
Formal methods tools like Alloy and Forge help users define, explore, verify, and diagnose specifications for complex systems incrementally. A crucial feature of these tools is their visualizer, which lets users explore generated models through graphical representations.| The Brown PLT Blog
Traits are a source of bewildering error messages in the Rust community and people have spent money and time trying to improve the resulting diagnostics. We took a different approach. We analyzed a community suite of difficult-to-debug trait errors and formed hypotheses about why they were difficult for engineers to debug. Then, we built an interactive debugger that developers can use in the IDE to debug trait errors. Find more details about our process, the tool, and our paper in our Cogniti...| The Brown PLT Blog
A mashup is a webpage that mixes and mashes content from various| The Brown PLT Blog
We have been engaged in a multi-year project to improve education in Linear Temporal Logic (LTL) [ Blog Post 1, Blog Post 2]. In particular, we have arrived at a detailed understanding of typical misconceptions that learners and even experts have. Our useful outcome from our studies is a set of instruments (think “quizzes”) that instructors can deploy in their classes to understand how well their students understand the logic and what weaknesses they have.| The Brown PLT Blog
Over the past three years and with a multi-national group of collaborators, we| The Brown PLT Blog
We’ve had a few projects now that address this idea of teaching students to plan out solutions to programming problems. A thus-far missing but critical piece is feedback on this planning process. Ideally we want to give students feedback on their plans before they commit to any code details. Our early studies had students express their plans in a semi-formalized way which would’ve allowed us to automatically generate feedback based on formal structure. However, our most recent project hig...| The Brown PLT Blog
For multiple decades we have worked on a the problem of differential analysis. This post explains where it comes from, what it means, and what its consequences are.| The Brown PLT Blog
For the past decade we have been studying how best to get students into formal methods (FM). Our focus is not on the 10% or so of students who will automatically gravitate towards it, but on the “other 90%” who don’t view it as a fundamental part of their existence (or of the universe). In particular, we decided to infuse FM thinking into the students who go off to build systems. Hence the course, Logic for Systems.| The Brown PLT Blog
A large number of modern languages — from Java and C# to Python and JavaScript to Racket and OCaml — share a common semantic core:| The Brown PLT Blog
Thesis: Programming languages would benefit hugely from telemetry. It would be extremely useful to know what people write, how they edit, what problems they encounter, etc.| The Brown PLT Blog
Programmers profile programs. They use profiling when they suspect a program is not being as effective (performant) as they would like. Profiling helps them track down what is working well and what needs more work, and how best to use their time to make the program more effective.| The Brown PLT Blog
For the past several years, we have worked on a project called Examplar. This article summarizes the goals and methods of the project and provides pointers to more detailed articles describing it.| The Brown PLT Blog
Document languages like Markdown, LaTeX, PHP, and Liquid are widely used to generate digital documents like PDFs and web pages.| The Brown PLT Blog
In two| The Brown PLT Blog
Here’s a summary of the full arc, including later work, of the Examplar project.| The Brown PLT Blog
The advent of large language models like GPT-3 has led to growing concern from educators about how these models can be used and abused by students in order to help with their homework. In computer science, much of this concern centers on how LLMs automatically generate programs in response to textual prompts. Some institutions have gone as far as instituting wholesale bans on the use of the tool. Despite all the alarm, however, little is known about whether and how students actually use these...| The Brown PLT Blog
Rust is establishing itself as the safe alternative to C and C++,| The Brown PLT Blog
What happens when students learn a second programming language after| The Brown PLT Blog
Dozens of languages today support gradual typing in some form or another.| The Brown PLT Blog
We also have| The Brown PLT Blog
Here’s a summary of the full arc, including later work, of the Examplar project.| The Brown PLT Blog
What do computer science students entering post-secondary (collegiate)| The Brown PLT Blog
Building on our| The Brown PLT Blog
There is a long history of wanting to examine planning in computing| The Brown PLT Blog
Stacks are central to our understanding of program behavior; so is| The Brown PLT Blog
It is now virtually a truism that every dynamic language adopts a| The Brown PLT Blog
Model-finders produce output to help users understand the| The Brown PLT Blog
Property-Based Testing (PBT) is not only a valuable sofware quality| The Brown PLT Blog
Tables are Everywhere| The Brown PLT Blog
Here’s a summary of the full arc, including later work, of the Examplar project.| The Brown PLT Blog
CODAP is a wonderful tool for data transformation. However, it also has important limitations, especially from the perspective of our curricula. So we’ve set about addressing them so that we can incorporate CODAP into our teaching.| The Brown PLT Blog
Higher-Order Functions (HOFs) are an integral part of the programming| The Brown PLT Blog
Adversarial Thinking (AT) is often described as “thinking like a| The Brown PLT Blog
Property-Based Testing (PBT) sees increasing use in industry, but lags| The Brown PLT Blog
Here’s a summary of the full arc, including later work, of the Examplar project.| The Brown PLT Blog
A large number of computer science education papers focus on data| The Brown PLT Blog
In computer science, a large number of students get help from teaching assistants (TAs). A great deal of their real education happens in these hours. While TA hours are an excellent resource, they are also rather opaque to the instructors, who do not really know what happens in them.| The Brown PLT Blog
Here’s a summary of the full arc, including later work, of the Examplar project.| The Brown PLT Blog
We routinely rely on automated assessment to evaluate our students’ work on programming assignments. In principle, these techniques improve the scalability and reproducibility of our assessments. In actuality, these techniques may make it incredibly easy to perform flawed assessments at scale, with virtually no feedback to warn the instructor. Not only does this affect students, it can also affect the reliability of research that uses it (e.g., that correlates against assessment scores).| The Brown PLT Blog
How do you learn a new language? Do you simply read its reference| The Brown PLT Blog
This is the final post in a series about resugaring.| The Brown PLT Blog
Pyret has beautiful error messages, like this one:| The Brown PLT Blog
Programming languages are user interfaces.| The Brown PLT Blog
For decades, we have neglected performing serious user studies of| The Brown PLT Blog
For decades, formal-methods tools have largely been evaluated on their| The Brown PLT Blog
In the last post, we talked about| The Brown PLT Blog
This is the second post in a series about resugaring.| The Brown PLT Blog
This is Part 2 of our series on helping users manage app permissions. | The Brown PLT Blog
This is Part 1 of our series on helping users manage app permissions. | The Brown PLT Blog
We need better languages for introductory computing. A good| The Brown PLT Blog
This is the first post in a series about resugaring.| The Brown PLT Blog
JavaScript is a crazy language. It’s defined by 250 pages of English| The Brown PLT Blog
We ought to give students opportunities to practice code review. It’s a| The Brown PLT Blog
This post is part of our series about tierless network programming with Flowlog:| The Brown PLT Blog
This post is part of our series about tierless network programming with Flowlog:| The Brown PLT Blog
This post is part of our series about tierless network programming with Flowlog:| The Brown PLT Blog
This post is part of our series about tierless network programming with Flowlog:| The Brown PLT Blog
This post is part of our series about tierless network programming with Flowlog:| The Brown PLT Blog
Written by Jesse Polhemus, and originally posted at the Brown CS blogImagine a first-year computer science concentrator (let’s call him Luis)| The Brown PLT Blog
Programming languages' syntax choices have always been cause for| The Brown PLT Blog
Manipulating HTML via JavaScript is often a frustrating task: the | The Brown PLT Blog
All modern browsers now support a “private browsing mode”, in which | The Brown PLT Blog
Much has been written about MOOCs, including the potential for its| The Brown PLT Blog
(This is the fourth post in our series on Android application permissions. Click through for | The Brown PLT Blog
(This is the third post in our series on Android application permissions. Click through for | The Brown PLT Blog
(This is the second post in this series. Click through for | The Brown PLT Blog
(This is the first post in our series on Android application permissions. Click through for | The Brown PLT Blog
Software artifacts are hard to get right. Not just programs, but| The Brown PLT Blog
Attention, privacy-conscious Firefox users! Firefox | The Brown PLT Blog
Though this was posted on April 1, and the quotes in this article should| The Brown PLT Blog
How do we teach students the essential ideas behind garbage| The Brown PLT Blog
This post picks up where a | The Brown PLT Blog
In a previous post,| The Brown PLT Blog
In an earlier post, we| The Brown PLT Blog
Adding types to untyped languages has been studied extensively, and with good | The Brown PLT Blog
In previous posts, we’ve talked about our group’s work on| The Brown PLT Blog
See the discussion| The Brown PLT Blog
GENEVA -| The Brown PLT Blog
We've been studying scripting languages in some detail, and have| The Brown PLT Blog
Gary Bernhardt's Wat| The Brown PLT Blog
This post comes from the keyboard of Matt Carroll, who has worked with us for| The Brown PLT Blog
Getters and setters (known as accessors) are a new feature in ECMAScript 5| The Brown PLT Blog
The JavaScript language isn't static―the ECMAScript committee is working| The Brown PLT Blog
Back in 2008, the group decided to really understand JavaScript. Arjun had| The Brown PLT Blog