I'm Adam M. Smith, computer scientist, design researcher, and software artist. A few people have read my dissertation, many have listened to my music, and many many many have played with my software toys. The hand-typed the HTML of this page has been in low-effort maintenance mode since in 2015-ish. Someday I'll reboot the whole thing.
I do technical games research for enriching the way we create, distribute, consume, and reflect on interactive media like apps and games. My dissertation, Mechanizing Exploratory Game Design, built a design automation practice in the interdisciplinary space between game design, design studies, computational creativity, and symbolic AI. I often employ answer set programming in the service of exploratorily posing and automatically solving high-complexity analysis and synthesis problems arising in creative design domains. As as a grad student and postdoc, I applied these ideas to deep design automation for educational games played by millions of students around the world. As a consultant and a random internet person, I've advised applications of ASP in several industries (from playlist generation for DJs to software package management tooling). Now (writing in 2021), as an academic, I'm experimentally integrating design automation into my teaching while I train my own graduate students to develop new uses for artificial intelligence in the design of interactive media. We still use ASP once and while, but we often use that deep learning stuff too.
In 2014, I had a vision for a way of making the kind of search-intensive automation I was doing with ASP available to programmers invested in domains outside of artificial intelligence. By implementing support of a kind of nondeterministic programming at the level of machine instructions, programmers could use familiar tools for familiar languages like C to define and solve interesting search problems. A snapshot of the behavior of my prototype is archived on the long-abandoned website for my consulting company: Quasilinear Research. In the modern day, this is mostly replaced by the KLEE Symbolic Execution Engine. The particular efficiency hack referenced in the company name (a quasilinear-space encoding of the state reachabilty problem for sequential boolean circuits) has been mostly superceded by recent work on the formulation of Planning as Quantified Boolean Formula (QBF), but there's still a key optimization for the case of modeling machines with large memories that I haven't seen covered in the open literature yet. Meanwhile, no one has yet mashed up QBF solving with symbolic virtual machines, so maybe you'll run with the idea?
Getting my head out of the clouds, I took a research engineer position at Microsoft in 2015. In an attempt to synthesize the "20-percent time" from Google's culture with Microsoft's legitimate customer obsession, I stayed late at work exactly one time to prototype something that might have been a direct solution to a problems that I had discovered during a weeks-long customer development training problem. Upon sharing the prototype one step beyond my immediate team, I was told that I need to control my communication with other teams so that they don't get the wrong idea about what we were working on. It turns out that I really value autonomy in project selection and the ability to freely communicate with project stakeholders. I made some contributions to programming by examples (learning a ranking functions from examples of expert solutions) while I was there, but it was quite easy to leave Microsoft for a lesser-paid, higher-stress academic job less than a year later. A lot of challenging family stuff was happening that year as well.
In 2021, I was diagnosed with attention deficit hyperactivity disorder (ADHD). Treatment has helped me immensely, but just understanding the condition better has had impacts too. What's the experience like? It's like, depending on diet/exercise/weather/whatever, sometimes I can only do high-intensity learning activities (and any attempt to do something not like that painfully falls apart). I can sometimes cover long distances in personally and professionally important directions in very short periods of time, but I can't quite control it. I'm lucky to have a job that only checks on my performance every few years because I can go pretty far off the rails when viewed on shorter timescales.
In addition to the serious stuff above, I like to explore generative visual art and music, recreational programming all the way down to the hardware/RF level, and infinitesimal-thrust spacecraft design and orbital dynamics. Hyperfocus on certain hobbies leads to lots of tasty food from around the world for my wife and daughter. I'd like to be able to speak many different languages, but it is difficult to balance this with other priorities.
Laughably out of date professional overview:
Curriculum Vitae (pdf) (2015) |
Artistic Portfolio (pdf, 7.3MB) (2013)
Ultimate goal: (according to 2012-me) Dramatically increase the creative resources available to our civilizations by using machines to amplify the creativity of those facing complex design problems (particularly those involving the self-improvement of civilization, e.g. education and research). Ten years later, I want to replace this this with something rooted in decolonization.
I am deeply passionate about teaching technical topics, particularly where I can steer them to overlap with creative and aesthetic endeavors. I regularly volunteer to give guest lectures, design new projects, and consult on the curriculum for new classes. I provide lifetime support to my students on selected topics and delight in hearing the challenges they encounter in industry and grad school elsewhere. Where possible, I work to legitimize self-teaching outside of established institutions.
as a Professor: (before I stopped updating the list two years into the job) Game Platforms (UCSC CMPM164 Winter 2017); Applied ASP (UCSC CMPM 290A Spring 2017); Procedural Content Generation (CMPM 179); AI in Games (UCSC CMPM 244); Game Design Studio III (UCSC CMPM 172)
as Lecturer: AI in Games (UCSC CMPM146 Spring 2015); Android Tablet Programming.
as a Teaching Assistant: introduction to computer graphics; scientific visualization and computer animation; game engine architecture; fundamentals of game design; game design studio; advanced analysis of algorithms; computer literacy.
as a Guest Lecturer: game programming with python; the spectrum of game engine architectures; designing a simple game framework; image compositing; non-photorealistic rendering; programmer-oriented tools for creativity in graphics; livecoding for music, sculpture, and poetry; overlapping notions of time in programming languages and software engineering.
Awards: 2006 Outstanding Teaching Award (School of Engineering); 2007 Excellence in Teaching Award for Teaching Assistants (UCSC Grad Division)
Some of these don't exist anymore: