15 Questions: John D’Errico
Our next interview in the MATLAB Central 15th Anniversary series is with John D’Errico. He is a Community All-Star who actively participates on File Exchange and MATLAB Answers. He has been using MATLAB for over 30 years.
John spent much of his career at Eastman Kodak writing toolboxes for mathematics. He is now retired living in upstate New York.
Thanks to John for agreeing to do this virtual interview.
John D’Errico: I recall I had a very early release, going back to somewhere around 1984-85. That was back when my Mac had 128K of RAM, and ran on 3.5 inch floppy drives. At the time, I did not look at MATLAB in too much depth beyond a quick glimpse, as my current clients were all using APL tool sets that I had developed. So my very first exposure to MATLAB was really very brief. I do wish I had kept that original floppy though. It would be an antique now!
JD: Around 1986-87, I started working more heavily with the color science organizations in Kodak. They had problems that required large scale linear algebra solutions. (In fact, this is when I first developed the ideas on which my File Exchange tool gridfit is based.) So I decided to write the same code in Fortran which took me weeks to write and debug. Around then, I also began working with Kodak’s ColorSense program, a group who was working entirely with MATLAB. So, naturally, I decided to re-write the tool but do it in MATLAB. The re-write into MATLAB took virtually a single day to get running, and for a given size problem, it ran way faster on my desktop machine in MATLAB than on the mainframe. This was all running version 3.2 or 3.5, just before the sparse matrix capability was even introduced in MATLAB. Anyway, the ease with which I was able to build tools, get them running, and the speed I could do my computations converted me immediately to MATLAB. And of course, when I was able to get those ideas running with sparse matrices, they flew along blindingly fast. We were suddenly able to solve what had been huge problems to us, getting answers in seconds.
JD: Our group working on ColorSense was a fun group that taught me a lot. Every Friday afternoon, we had a meeting where we did peer review for any tools we had built that week in MATLAB. Before any code we had written was allowed to be moved into a common area for the rest of the group to use, our code had to pass a scrupulous peer review, both on the numerical aspects as well as the documentation. It could be tough to get your code passed, but when it did pass judgment the code worked perfectly, and the documentation was crystal clear. This may be the reason why I can sometimes appear tough to people who post tools on the File Exchange. I want their code to work well, but also to be usable. You can learn to write great software, but if nobody ever tells you how, that won’t happen.
JD: My entire career at Kodak was that of the guy people came to from anywhere in the company, when they needed to use splines, or optimization problems, etc. And Kodak was a big company back then. Sometimes I’d see an interesting problem that had a nice solution, so I’d write another tool, or a complete toolbox. The trick is to pass that accumulated knowledge on to others. That is what sites like Answers offers, a way to pass along the knowledge base, building it one question at a time.
JD: Years ago, our group at work had a weekly football pool. every week you put in a dollar, and marked which team would win their games against the spread. So as the math guy, I decided to build a model every week, that was gradually built up from all statistics I could gather (strength of schedule, home field advantage, etc). The person with the most correct picks won the pot (so maybe $15-$20). By the last week of the season, I had not won a single week, but I had the best record for the season against the spread. My cumulative statistical model was 58% against the spread, but I’d never won a cent. The very last week, I took the picks from the model as it said, except for the Cowboys/Giants game. I was a Cowboys fan at the time, and I simply could not pick the Giants. So I swapped that ONE pick, went against my model prediction. That week I lost again, but had I gone with the prediction made by my model, I would have finally won for the week.
JD: When I retired from Kodak, I decided that I wanted to do something useful, to do some volunteer work. The logical thing seemed to offer tools for others to use, because I’ve always been a tool-maker at heart. And I’ve been trying to answer questions for many years before Answers existed.
JD: As in my career as a mathematician, every once in a while a question pops up where it suggests an idea I’d never seen before, to solve some problem I’d never have looked to solve otherwise. Those often innocent questions can be the seeds that give me an idea for a new tool. Tools like interparc, Surface Fitting using gridfit, distance2curve, fminsearchbnd fminsearchcon, inpaint_nans, Adaptive Robust Numerical Differentiation, nearestSPD, Inverse (integrated) gradient, consolidator, Partitions of an integer, etc.
JD: For me, it is the File Exchange. A beauty of a language like MATLAB is extensibility. Every individual has different problems to solve. And while MATLAB tries to do lots of things, offering large variety of solutions to all sorts of problems, there are limits, things never envisioned. So if someone needs to solve problem X, they can look on the File Exchange, often finding that someone else has already had the same problem.
JD: I love to see when someone can take something I’ve posted, and take it a step further, to expand an idea that I found, then improve on it. Because that means I was able to trigger a moment of creative insight by another person. Together we managed to make something that was better than either of us might have made on our own. That is what makes me proud.
JD: Look at your software as if you were a completely new user of that code, someone who has no idea how to use the code, what it does, how to run it, what inputs it takes, what does it produce as output. BE UNBIASED. Pretend this is not your work, but that you found it, and now you need to use it. How easy would it be to get running to solve your specific problems?
JD: Chebfun. It is a beautiful idea that allows you to solve a huge set of problems, but under the hood it works in a completely different way compared to some classic solutions to those same problems.
JD: That so often something someone posted to solve some specific problem, can be used in completely other, unexpected ways. This forces me to build lots of alternative options into the tools I provide, since I know that others will use tools I’ve posted in ways I have not foreseen.
JD: I love to see a question on MATLAB Answers that shows a person cares about the answer, about understanding the problem. Every once in a while, I get to see that I was able to trigger an “a-HA!” moment for a person. I also love to hear from someone who may be using one of the tools I’ve posted on the File Exchange in their work, or as some important part of their thesis or a paper.
JD: Kathy and I like to stay home. Our problem is, why would we want to go anywhere when this is our sunset? (From our deck.)
This is one of my all-time favorite sunrises – a winter shot essentially out of the window next to my computer.
And our little Amy, at the top of the stairs.
So we seem to stay home a lot. :)
JD: I love to play bridge (long ago I wrote a bridge hand simulation tool in MATLAB.) I also enjoy woodworking and woodturning. All of the lamps in our house are handmade. I’ve turned bowls, goblets, plates, pens, clocks, tables, etc. Essentially anything out of wood, metal or plastic can be fun to make. But even in my shop, one thing I enjoy doing is making woodturning tools themselves. I’m a toolmaker at heart.
Thanks to John for taking the time to answer my questions. It has been a lot of fun interviewing these MATLAB Central All-Stars. Be sure to check out my other interviews with Chad Greene and Grant Cook III.
Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.