How C++ powers Adobe Document Cloud with Gordon Dow, senior computer scientist
Adobe Document Cloud transforms old-school pen-and-paper processes into efficient digital transactions. From PDFs to electronic signatures, Document Cloud keeps businesses moving, no matter where people are, or which devices they’re using. And much of it is built on C++.
We talked to Gordon Dow, Adobe Acrobat lead and senior computer scientist, to find out why a programming language with its roots in the 1970s is still the smartest way to build today’s most powerful business tools.
C++ powers a lot of the Adobe Document Cloud architecture. Can you tell us why it’s the right programming language for the job?
The things that jump to mind for me are: zero-overhead abstractions, strong typing, the ability to cleanly separate data structures from algorithms, the ability to push computation to (and find errors at) compile time, and deterministic finalization.
“C++ has evolved continuously over the past thirty years, so a code base tends to reflect the sensibilities, experience, and constraints of its engineering team at the time of its inception.”
Gordon Dow, Senior Computer Scientist, Lead, Adobe
If one were to sit down today and try to design a programming language with all of these features, I don’t think anyone would come up with anything that much resembled C++. C++ started from C, which was little more than a lingua franca for assembly languages, and somehow managed to evolve into its present state, all while maintaining backwards compatibility.
That backward compatibility is precisely what gives C++ its staying power. I can write brand new, modern C++ that directly calls an interface that was written in 1993 and it will just work. That said, it’s not necessarily easy. When you’re interoperating with older code, you have to know, for example, where you can and can’t throw exceptions, and when you have to do your own resource management as opposed to letting RAII do its job.
At some point this has to give. I give occasional talks on C++ to my team and every once in a while, I’ll want to step into standard library or Boost code, and that code—which has to be truly generic—is incredibly hard to read. I’m still waiting to wake up some morning and discover that everyone switched to Rust or D while I was sleeping. And we’re all writing in Esperanto on our Dvorak keyboards.
Why is Adobe the place to be if you’re a C++ developer? Any tips for someone considering a role in C++ at Adobe?
C++ has evolved continuously over the past thirty years, so a code base tends to reflect the sensibilities, experience, and constraints of its engineering team at the time of its inception. When modifying an existing code base, it’s a healthy instinct to write new code in the style of the old code, so these different coding styles tend to ossify and you wind up with very different “dialects” of C++ throughout the organization.
That said, the exciting stuff is happening in the modern codebases, and necessarily so because the modern style, if used well, gives you all the features I mentioned. So stay up to date! Watch C++Now and CppCon videos on YouTube. Read Eric Niebler’s, Andrzej Krzemieński’s, and Herb Sutter’s blogs, and anything Sean Parent writes. And also remember the important rules that are true regardless of language: Try to make it easy to reason about your code. Keep your functions and classes small. Use regular types.
Above all else, remember that C++ is an enormous, sprawling, evolved ecosystem, with more than its share of quirks, and that nobody knows everything about it. Go ahead and ask questions. There’s almost certainly someone else out there to whom the answer is useful, and it’s possible the question hasn’t even occurred to them.