Twelve years ago, at my first job at a University, my supervisor told my colleague and I: “I am writing a book about finite state automata. I want an interactive tool to show people what I’m doing.” So my colleague and I built Vaucanson.
During that project I discovered a host of algebra and theoretical computer science, and I sharpened my skills at using C++ templates. My colleague and I even published a new design pattern .
As requested by our supervisor, we had to make our C++ code interactive. Initially, I tried to implement my own dynamic language in C++, which quickly turned into a poorly implemented LISP clone. Soon after, I followed up instead with “Vaucanswig,” a set of SWIG modules that enabled the use of the Vaucanson API within existing dynamic languages, in particular Python where it was first used.
Vaucanson and Vaucanswig ended up being quite successful, not only for teaching and presenting the book’s ideas, but also to help other people discover new results in automata theory. Over the course of the years, Vaucanson slowly evolved so that most of our initial code was eventually replaced, and Vaucanswig was deprecated in favor of another library wrapper  followed by simpler command-line wrappers . Meanwhile, my experience with Vaucanson taught me to be a better programmer and problem analyst. Science-wise, I “produced” a new design pattern, potentially reusable outside of Vaucanson. In contrast, my supervisor and my peers were (and are still) primarily interested in using Vaucanson to play with finite state automata, for which I have only a superficial interest.
You can still ask me how Vaucanson works, you can probably still ask me how to improve its core and make it run better / faster, but I still have little clue — even after all these years — of which theoretical problems it has helped solve and where it can be applied in the future.
I am proud and quite happy to have participated in this project, but eventually I had to realize it was not really my community. Had I stayed in that field, I would have painted myself as a mere technology provider: although I would probably have stayed quite competitive, I would have lacked the fundamental insight in that field necessary for scientific success.
|||Regis-Gianas, Y., and Poss, R. On orthogonal specialization in C++: dealing with efficiency and algebraic abstraction in Vaucanson. 2003. In Proceedings of the Parallel/High-performance Object-Oriented Scientific Computing (POOSC; in conjunction with ECOOP), Jörg Striegnitz and Kei Davis, Darmstadt, Germany, July. http://science.raphael.poss.name/pub/regisgianas.03.poosc.pdf|
So what do you think? Did I miss something? Is any part unclear? Leave your comments below.