I’m Stacy Prowell, and this is my public site. If something needs to be fixed (or broken), then I’m the guy to do it.
I’ve done extensive work on automated statistical testing, rigorous software specification, and automated verification. I also write a surprising amount of code.
What follows is too much information. Read at your peril. Much of the terminology seems to have been lost to the ages, so there are links to Wikipedia. They determine our reality!
I’ve been tinkering with computers since childhood. A neighbor of ours built his own computer (and I mean with chips, breadboard, and solder), so I figured what the heck? I built a 6800-based computer on breadboard, following the diagram in the front of the 6800 manual. I bought a PROM with a monitor program. It had three commands: D displayed memory 16 bytes at a time, M modified memory, and G started a program at an address.
This is how I learned to program. I would sit down with a spiral notebook and the 6800 manual, and look up opcodes. Clear the screen? Write a space to every location. Easy:
86 20 CE 00 00 A7 00 08 8C 04 00 26 F8
I never learned the mnemonics since I didn’t have an assembler. I would count backward in hex to get branch offsets. Now to put the program in memory and run it! Just start with typing M 0400 86 20 CE … This was fun on the 32×16 character display.
> M 0400 00 86 0403 00 00 0404 00 00 0405 00 A7 0406 00 00 0407 00 08 0408 00 8C 0409 00 04 040A 00 00 040B 00 26 040C 00 F8 040D 00 39 040E 00 > G 0400
Eventually I upgraded the PROM and could save programs to tape. Woo hoo!
Sadly my parents tossed that computer out when I went off to college (and gave away my Star Wars action figures and my Commodore 64). If you ever read COMPUTE’s Gazette, you might have seen a few articles I wrote for them, or used some software I wrote. Real store-bought computers? Yes, I had an APF IM-1 (also 6800-based, with the same monitor program!) and a Commodore 64. I had a friend with a Timex/Sinclair ZX-81 (I think), a Commodore 64, and a Commodore 128. Technology!
At Tennessee Tech I wrote FORTRAN programs on punch cards and waited for printouts. I’ve programmed computers with switches while watching 7-segment displays (that was fun… for a while), and actually had some hardware catch on fire while I was using it (no, not due to the HCF on the 6800 or any negligence on my part – I think).
I’ve worked on real software projects (for money) using: hand assembly, 6502 assembly, COBOL, Ada, Forth, BASIC (of various forms), SML/NJ, C, C++, Perl, Python, and Java. I’ve also written modest-sized programs (not for money, but for academic credit) in BCPL, Lisp, FORTRAN, and VAX assembly. I wrote my own computer language based loosely on Forth and Lisp that ran on the Commodore 64. I’ve tinkered with a huge number of other languages; too many to remember or list. I’m currently working on a personal project in Scala.
I grew up on a working farm, so I’ve gotten to enjoy other pastimes. I’ve repaired tractors (typically because someone else used them), built a shed (or shack, depending on your opinion of my skills), vaccinated cows, chopped wood, welded stuff, shot (at) critters, and blown stuff up. You make do on a farm, such as cutting shims to hang a door that’s the wrong size for an opening. I’ve also collected lots of fun scars.
My parents were antique dealers, so I also had the fun of stripping, repairing, sanding, and refinishing furniture. We raised chickens as well as black angus and had a leaky roof, so I’ve actually been covered in roof tar and feathers, just not at the same time (thankfully).
My mother made porcelain dolls, and this was actually our primary source of income for some time. I’ve poured, cleaned, glazed, painted, and fired various objects because children are a good source of cheap labor. My father worked as a dental technician when I was young, so I’ve actually made a gold crown using lost wax casting. It wasn’t very good, but I had fun with my dad trying. Sadly, it was lost when my mother sold the farm.
I’ve worked somewhere since I was 16, with a short interruption for my first few quarters at college. This was largely to escape from farm work and to make some money. Being a kid on a farm does not pay well.
I’ve worked for Bonanza, Shoney’s, and Wal-Mart. I was a prep guy at Geno’s Pizza when there was one in Knoxville. I sold candy in the Sweet Shop, rented bowling shoes in the rec area, and was a building supervisor for the University Center at the University of Tennessee.
After that, I worked as a consultant on both internal and external development projects at Software Engineering Technology, a company started by Harlan Mills. I reviewed the statistical testing plan for the Darlington Nuclear Generating Plant for Ontario Hydro, consulted on the statistical testing of the GPS simulator, tank software for TACOM, PET scanner software for Siemens, and various other projects I probably still can’t mention. I’ve invented methods for and consulted on the formal specification of large distributed embedded systems.
I was awarded a patent on a method for analyzing statistical models. I’ve only had one course in probability and statistics, and it was only half a semester, but I’ve made good use of it. Really, what more should anyone need?
Teaching and University
I taught classes on rigorous software development at the TI Learning Institute (can’t find a link!). As a professor at the University of Tennessee I taught classes in cleanroom software engineering, software specification, general software engineering, and embedded software development. I co-authored a book on cleanroom software engineering with Rick Linger, Carmen Trammell, and Jesse Poore. At the University of Tennessee, I ran a lab called the Experimentation, Simulation, and Prototyping lab that developed software for model-based testing called the JUMBL. It’s still maintained and in fairly widespread use.
I came to the SEI specifically to work on the function extraction (FX) project and participate in the startup of CERT STAR*Lab. I’ve written significant parts of the operational system, including the structuring engine, extraction logic, and most of the rewriter and MPL infrastructure. MPL is the language that controls the entire system.
This system is being considered for code generation from IDA Pro as the “FX/IDA” project.
In addition to FX, I also work on bulk analysis of malware. It’s forcing me to develop a grudging respect for large and mysterious data sets.
I’m married, have a daughter, a dog, and a messy house near Pittsburgh. I like to take long hikes in the woods. I collect coffee mugs for some reason, and I inherited the remnants of my dad’s knife collection and my mother’s stamp collection. I don’t like to fix things around my house, but I fix things in other houses. I recently did some plumbing for my sister that required some inventiveness due to the patchy nature of the existing plumbing.
I like coffee, and I may be drinking some as you read this. I like Yuengling, and there’s probably a case of it in my basement (not because I drink that much, but because I live in PA). I read a lot, and like to read several books at the same time. I’d post what I’m reading now, but I don’t want to update this page. I really like to attend plays. I can’t swim well, but I enjoy trying.
I’m a U.S. citizen, and I’ve traveled to Europe on several occasions. I’ve never been to Asia or south of the equator.
There. Now you know everything I do.