Code
from rich.console import Console
console = Console()
console.print(
":rocket: Hi! I'm a researcher, teacher, podcaster, and software developer!"
)
🚀 Hi! I'm a researcher, teacher, podcaster, and software developer!
Innovating in technical areas such as software engineering and software testing, I teach courses, conduct research, write papers and a blog, give presentations, create software, and serve organizations. Working as an Associate Professor in the Department of Computer and Information Science at Allegheny College, I am an associate editor for the Journal of Software: Evolution and Process, an academic editor for the PeerJ Computer Science journal, a program committee member for conferences like the International Conference on Software Testing, Verification and Validation and the International Conference on Software Engineering, and a reviewer for journals like Transactions on Software Engineering and the Journal of Software Testing, Verification and Reliability. Along with media appearances on podcasts like Stack Overflow and Talk Python, I interview the world’s leading experts on software engineering as a co-host of Software Engineering Radio. You can learn more about me and my work by reading my biography, downloading my curriculum vitae, and subscribing to my mailing list.
Professional Service
| Venue | Role(s) | Year(s) |
|---|
| International Conference on Software Maintenance and Evolution | Tool Demonstrations Program Committee | 2026 - 2025 |
| International Flaky Tests Workshop | Program Committee Member | 2026 - 2024 |
| International Symposium on Software Testing and Analysis | Program Committee Member, Tool Demonstrations Program Committee Member | 2026 - 2023 |
| PeerJ Computer Science Journal | Academic Editor | 2026 - 2019 |
| Journal of Software: Evolution and Process | Associate Editor, Reviewer | 2026 - 2012 |
No matching items
Software Engineering
Cellveyor: Easily convey reports from Google Sheets to GitHub
Chasten: Configurable linting tool that uses XPath expressions
GatorGrade: Python front-end for the GatorGrader assessment tool
GatorGrader: Automated assessment for source code and writing
SchemaAnalyst: Data generation and mutation analysis for database schemas
Status Updates
In the specific case of mathematics, formalization offers one potential source of selective friction: it requires significantly more effort to formalize a "proof" of an incorrect claim than to formalize the proof of a correct claim. And, as the experience with the Erdos problems has demonstrated, this friction is already sufficient to make the emergence of AI-generated "one-shot" solutions to such problems a net positive, by improving the signal-to-noise ratio of such solutions to acceptable levels.
But the current formalization framework is only set up to apply friction to completed proofs. A newly formed idea to solve a problem often falls well short of a full proof of that problem; it may offer a strategy for reducing that problem to some vaguely defined set of simpler sub-problems, but without the precision needed to be readily expressible in a language such as Lean. One can potentially work around this issue by introducing axioms to formalize any missing steps in such a strategy, or any heuristics or "cheats" that one is implementing to justify the argument, but such devices are also vulnerable for exploitation by an AI that has been directed to generate a formal proof at any cost, and so are not reliable sources of selective friction.
Perhaps a formal (or semi-formal) language for mathematical strategies, as opposed to mathematical proofs, will need to be developed in order to create sufficient selective friction for AI-generated mathematical ideation to be a net win for mathematics. (3/3)
With this model, we see the double-edged nature of AI-generated mathematics: this technology promises to massively increase the total number of new ideas, and moderately increase the total number of *good* new ideas; but at the same time, it will likely lower the average quality of ideas generated, decreasing the signal-to-noise ratio. So the net effect on the quantity (**) could be of either sign, depending on which of the above effects dominate.
So, is there a way to limit the negative effects in this model while retaining most of the positive ones? One possible solution is to introduce _selective friction_, making it harder (or less convenient) to publish a mediocre AI-generated idea than a promising one. One can see this philosophy in the design of programming languages, which often tend to promote a certain set of "good" programming practices by making them easy to implement in the language, while "bad" practices, while not completely prohibited, are made to be inconvenient to adopt in that language. This can be contrasted with the current implementation of AI tools, which are often designed to indiscriminately remove friction when converting an input to an output, regardless of the quality of the former. This indiscriminate frictionlessness will significantly increase (*), but at the expense of worsening (**) (a phenomenon now perjoratively referred to as "AI slop"), as previously unviable extremely low-effort ideas can now be converted into actual outputs. (In particular, many of the aforementioned selective friction features of programming languages are in the process of being erased by the powerful coding abilities of modern AI.) (2/3)
This is an expansion of a point I initially wrote in the context of a MathOverflow question https://mathoverflow.net/questions/487041/collaborative-repositories-on-open-problems/487065#487065, but also has relevance to the role of AI in activities such as mathematics where ideation is important.
It is commonly accepted that one of the impediments to further progress in mathematics is a shortage of new ideas. Naively, one can model this hypothesis by proposing that
(number of new ideas) (*)
is the key factor determining the rate of progress, and then try to support efforts to maximize the quantity (*).
However, in the era of increasingly large amounts of AI-generated mathematics, the _quality_ of these ideas becomes increasingly relevant. Only a small fraction of new ideas tend to be good and fruitful ones; a bad idea can actually impede progress by wasting more time than it saves. So, a more realistic model would be that it is the actually the product
(number of good new ideas) * (signal-to-noise ratio of the idea pool) (**)
that is the important factor which is worth maximizing. (This is still a massive oversimplification - for instance, it assumes a binary classification of ideas into "good" and "bad" - but will serve as a minimal toy model that suffices to illustrate the broader points that I wish to make here.) (1/3)
@lkanies yep. Like I like and get value out of these tools but why we gotta talk such extremes with poor examples