Interview with Programming Expert Bertrand Meyer
Question: Can you give us some background on how you got started in software development?
Answer: My first introduction was a Fortran course, which I didn't really understand. I just couldn't figure out what the instructor was talking about. But then, during an internship in industry, where I didn't have much else to do, I got my hands on an Olivetti minicomputera personal computer, reallywith a clearly written manual for its Fortran-like language, and I caught on right away. Back at school, I got interested in speech recognition and for an advanced degree did my first substantial programming, writing a program that separated phonemes in continuous speech. Soon after that, I came across an Algol 60 manual, and it was a revelationthe conciseness, the elegance, the logic. This is when I understood that programming wasn't just a means to achieve other goals, but a scientific topic of its own. It was, I felt, following the same principles of simplicity, style, and beauty, the embodiment of the great scientific tradition that we'd been taught, from Monge and Cauchy and Lagrange and Poisson and Laplace and Fourier and Ampère down to our own teachers such as Schwartz, and now I could find that same spirit again. This became even more attractive when I went to Stanford and took classes from people like Knuth, McCarthy, Floyd, found out about Lisp, about SAIL, about Wirth's Algol W, and started reading the programming methodologists, in particular Dijkstra and Hoare. I also came across Simula, and the same minute knew object-oriented programming was the only way that made any sense. (I thought everyone else knew this too.) Everything was falling into place.
Going to industry, I was in for a bit of a shock, since the techniques used were so different from what I had learned. But this was also a great opportunity. In the company I became, among other things, the resident methodologist, and in the process of building software myself and teaching software principles to my colleagues I quickly realized that competence and understanding were not all on one side. Industry also knew many things that academics didn't. Spending most of my career in industry has been good. I've always kept ties to university research and teaching, but having to solve practical problemsincluding, when I started my own company, having to find effective solutions on time as a very condition of existencehas kept me focused.
I have always felt a special thrill writing software. It's this incredible power of building a machine by just describing it. The description is the machine. If you can just specify what you wantand that's a big "if"then you have it. It's already impressive enough for a small program; if you take something like ISE Eiffel, half a million lines of code developed over a decade, the result is amazing. I have the same passion for programming that I've always had, even if I haven't been able to write anything big myself in recent years, since it's a discipline that demands sedentariness and is hardly compatible with other activities of an entrepreneur-author-speaker. But I remain closely involved in the design of our products and especially of our libraries. One of the beauties of the Eiffel approach is that it breaks down the difference between analysis, design, and programming. The same tools and concepts are applied throughout. So I can use Eiffel to discuss a design pattern or other architectural issue during a whiteboard session at the beginning of a project, remaining very abstract since we're only starting, but already taking advantage of the precision, clarity and expressive power of the Eiffel concepts of data abstraction, genericity, multiple inheritance, and above all Design by Contract. Then if someone else among the people present goes out and actually builds the thing, it simply means adding more details, with the ability to go back and update anything, at any level, at any time. We call this seamless development and reversibility; some people also use the term single model principle. That's the way I see software construction. It's different from the standard view that creates artificial barriers between analysis, design, and implementation, with different notations and toolssay a UML-based CASE tool at the beginning and a programming environment at the end. I have never accepted that analysis should be noble and programming vulgar. The idea is to take advantages of the natural beauty, elegance, and conceptual power of the concepts of programmingto turn them into tools for designing and modeling, tools for adapting and extending previous achievements, and in the end tools for thinking.
Question: Do you view Eiffel as your most accomplished contribution to the industry? Are there any other contributions of which you're also particularly proud?
Answer: Basically, whenever I've found a good idea I've put it into Eiffel, so the question is almost self-answering. But it's important to understand what the word "Eiffel" means here. If it were taken to denote just a programming language, then the answer to your question would be far less clear; the language proper is only part of the solution. As I see it, Eiffel is the combination of a method, a languagenot just a programming language, a modeling and design language as well, a complete development environment, many library classes, and the constant focus on software reliability, on reusable components, on a seamless development cycle, on powerful interactive tools, on openness to the outside world, and in particular many other programming languages, on building software that's easy to change, systems that will stay around for a long time and grow as much as needed. With such a broad definition, it's not surprising that most of what I do falls into the same basket. Even the work into which I'm going nowcomponent certification, developing fully proved classesis part of that general effort.
Question: What brought you to design Eiffel to begin with?
Answer: Necessity. We needed a tool for ourselves, in line with concepts of modern software engineering, and nothing we saw was even remotely close, so we built it. This aspect of Eiffel has always been essential: It has to work for us. There's a big difference between tools that you build for the rest of the world to use, and those that you depend on for your own life. All our software is written in Eiffel. This has forced us to do it right.
Question: Compare Eiffel to other languages, such as C++. How do they differ? Does one offer certain advantages over the other?
Answer: Perhaps the first point to note is what Eiffel and C++ share: a central concern for performance. Like the designers of C++ and authors of C++ compilers, we pride ourselves on generating extremely efficient code. There is no significant difference between the execution time of C++ programs and those compiled with ISE Eiffel. Same thing for memory occupation, except that beyond a certain degree of complexity Eiffel wins, because in the end a computer, through a garbage collector, will inexorably do a better job than a programmer having to optimize manually the memory usage of every single part of a large program.
The more general comparison between Eiffel and C++ has been made many times, but it tends to be misleading since Eiffel pursues different aims. C++ and other programming languages, with all their qualities and limitations, are just programming languagesnotations to express algorithms and specify data structures. Eiffel aims at a broader scope; it's a method for building systemsespecially large, complex, evolutionary systemsand beyond programming it covers analysis and design through its principles of seamlessness and reversibility.
If you take the subset of Eiffel that addresses the same scope as C++that is to say, the programming languagethe differences are clear. C++ is an incremental update of C; it was meant to provide C programmers with object-oriented extensions. As a result, it still carries the C background, which prevents it from offering a number of O-O features that you find in Eiffel; for example, support for automatic memory management and garbage collection, so critical for large programs. The type system is also constrained by the C heritage; for example, you have all these basic typesinteger, float, characterthat sit outside of the class-based type system of an object-oriented language. In Eiffel, all such types are based on classes, providing more consistency and many practical advantages. More generally, Eiffel is not an upgrade to an existing language, but a design of its ownborrowing ideas from others, of course, but emphasizing the coherence of the overall construction, the simplicity of the language, the ease of learning it. The C++ choice of providing a smooth upgrade from C is understandable, and it has certainly helped the spread of object technology. But in the end, after the transition period, I think consistency wins. For example, in Eiffel there is an effort to provide one good way of doing anything that's needed, but not provide two if that can be avoided. In C++, because of the addition of O-O concepts to the C style, you can often hesitate between various styles. So if you want your program to call different functions depending on the runtime context, do you use a C-style array of function pointers, or do you rely on inheritance, overriding, polymorphism, and dynamic binding? In C++ you can do both, and it's not at all obvious, especially for a novice, which one is better. That can be very confusing.
Now, it's not hard to list technical differences. Eiffel has a built-in Design by Contract mechanism, with no equivalent in C++; this plays a key role in the Eiffel method for analysis and design, documentation, debugging, testing, project management. Eiffel's generic mechanism pursues the same aims as C++ templates, but in a simpler, clearer way and without the performance overhead of templates. The Eiffel form of multiple and repeated inheritance is, I think, easier to use and more consistent than the C++ form, which has caused many people to mistrust the very idea of multiple inheritance or even inheritance itself. C++ has C-style global variables; Eiffel instead enforces strict modularity, essential if you want to be able to modify large systems without letting any change anywhere trigger changes all over the structure. Eiffel has a notion of "once routine," providing a simple, effective mechanism for initialization and for sharing objects. C++ retains a number of C mechanisms, with no equivalent in Eiffel where they would clash with O-O mechanisms: type casts, function pointers, pointer arithmetic.
Question: How important is hands-on experience when it comes to learning a language, and how can those who don't have this experience gain it when they're first learning?
Answer: Any serious programming language also carries a certain culture with it, a certain way of solving programming problems. It's easy to identify a C culture, a C++ culture, an Eiffel culture. To learn the language is also to learn that culture, and you do that both by writing programs in the language and by studying good existing code. So, for example, to learn Eiffel, the booksObject-Oriented Software Construction, 2nd edition [Prentice Hall PTR, 2000, ISBN 0-13-629155-4] and Eiffel: The Language [Prentice Hall PTR, 2000, ISBN 0-13-247925-7]are important, but the libraries are just as useful. EiffelBase, the library covering fundamental data structures and algorithms, is the prime source for such learning by example. It's Open Source, by the way, and available for download from www.eiffel.com. Another one is EiffelVision 2, the multi-platform graphical library, providing the ability to design graphical applications with a single source code that will render the native look and feel under Windows, Unix, Linux, VMS. It makes extensive use of Eiffel's mechanisms, in particular agents, and is an excellent source of learning.
Question: 10 years ago, programming was supposed to become much more "object-oriented," and it was going to allow even non-techies to program. It seems that programming (whether in C++, Java, or another language) has become much more specialized. Do you agree? And, if so, how do you feel the evolution of programming is shaping up in terms of the next five years? What are your predictions for the future of programming?
Answer: The object-oriented mode of thinking has won. When it comes to serious, professional development, there is no credible alternative. Now, not everything that claims to be object-oriented implements the ideas well, and there are still major differences between approaches and languages. The Java or C# object models, for example, are different from those of Eiffel. But object technology, as a general trend, is the only game in town.
Programming is both less and more specialized. It's less specialized in that more and more people program, many of whom don't qualify as professional programmers. It's more specialized in that the professionals need ever more skills, if only to justify their status as professionals. This split will increase. The better the tools top programmers produce, the more impressive the results that non-top programmers, or non-programmers, can achieve. The more they achieve, the more they want to do, and the higher the pressure they put on the top programmers to produce ever more advanced tools and components.
As to what's coming next, the advent of the Internet has opened new horizons. We have been heavily involved in the Microsoft .NET technology, which is redefining the game. Most recent announcements from the other major players are mere attempts to catch up. Even the Open Source community is getting excited about it, which says a lot.
Looming on the horizon is the reckoning with the matter of software quality. The going has been so good that the software profession has been able to treat quality as one issue among many. Increasingly it will become the dominant issue. It's interesting to see how security concerns, for example, are bringing reliability problems to the forefront. If your program crashes because of a poorly programmed buffer, that's a reliability issue and so far wasn't sexy. But if a hacker exploits the buffer overflow to hack into systems through the Internet, people start listening. Aside from security, it's inevitable that trouble caused by bad software will make people start thinking seriously about quality.
A more mathematical approach is inevitable. Professional software developmentnot the everyday brand practiced by the public at largewill become more like a true engineering discipline, applying mathematical techniques. I don't know how long this evolution will take, but it will happen. The basic theory is there, but much work remains to make it widely applicable.
Question: Is there anything that's not happening in the programming industry that you think should be?
Answer: The industry as a whole is very cautious of anything that smacks of mathematics. That's very unhealthy. Programming is a practical, hands-on craft, but it's also in some ways a branch of applied mathematics; that inherent duality, a contradiction almost, is part of its charm. Too often we ignore or deny the mathematical part, without which we can't get the kind of quality that modern software will increasingly demand. We need more rigorous approaches. The math involved is not very hardmostly high school or undergraduate leveland it can make a tremendous difference; we need to get rid of the instinctive anti-intellectualism and accept that mathematics, while not the answer to everything, is part of the picture.
Something else that's wrong is the chasm between industry and academiafar bigger, as far as I can judge, than in other disciplines. It's not clear which side is to blame. People in industry often have an instinctive distrust of academic research. People in universities, for their part, have not always contributed enough. In software engineering, most of the innovation over the past 20 years has come from industry. It's a compliment to industry, but it's also a sign that universities are not quite playing their part.
Question: Is programming an art? In other words, can anyone program?
Answer: Is writing an art? In other words, can anyone write? Is mathematics an art? In other words, can anyone compute? The questions and the answers are all more or less the same. Everyone can write, but not everyone can be a writer. If it's still less obvious for programming it's because not so long ago it was such a specialized subject that only a small minority had any idea of it. But today, yes, anyone can and increasingly will learn how to program at a basic level. Professional programming, however, is another story. Knowing arithmetic doesn't mean you're a mathematician. Being able to put together a GUI in Visual Basic doesn't make you a programmer.
The word art is interesting. There's definitely a trend to deny that part, to make everything logical and predictable. The very term software engineering reflects this goal, necessary and laudable. But for good software development, the artistic part is inevitable: the reliance on creativity, on beauty as a criterion of success. This is not necessarily a contradiction. Think of the work of an architect: You need excellent engineering, and you need a sure sense of aesthetics. It's the same for good software.
Question: In your opinion, how do your publications reflect your theories?
Answer: If they don't, thengiven that I'm as much a writer as a scientist and engineerthey're a total failure. Of course there will always be, two days after you've sent a book to the printer, the question that someone asks and that makes you suddenly realize how you should really have explained a particular point, or reveals a key argument you forgot. Indeed, whenever I open one of my books or papers, I can't help thinking of how I could have said some things better. But setting aside limitations and imperfections, my publications are my theories. Tony Hoare wrote, in the introduction to his collected papers, that for him the process of writing is the research. Same for me.
Question: Do you have a favorite book or seminar that you enjoyed writing or teaching for a particular reason?
Answer: This interview. Okay, let me try again. It's very hard for me to teach or write something unless I enjoy doing itI'm afraid that in the fortunately few cases I didn't, the result showed it rather visiblyso an easy answer is that I could name almost anything I've written or taught. But if I had to pick just one, I would cite my course "Object-Oriented Software Construction." It started out as a two-day seminar, and I gave literally hundreds of sessions, all around the world. Never once was I bored doing it. There is an inner beauty to the topic and the progression of the material, starting with a careful analysis of the issues to be solved and then bringing in answers, one by one, each addressing one or more of the previously identified issues, justified by clear logical arguments, and supported by decades of practical software development experience. At the end, it's like having put a puzzle together. Nowadays we give this course less often as a public two-day seminar, since people believe they already know about object technology. In fact they don't, and the seminar is as needed as ever, but of course the first rule of education, as any parent of a teenager discovers, is that you can't teach someone something he thinks he already knows. This is the one absolute, final, incontrovertible, insuperable obstacle to learning. We still teach the course in-house, and also have a five-day version that uses Eiffel as the vehicle and includes a strong hands-on component; at the end of the week people can go out and start designing and implementing serious applications using the full extent of object technology, Design by Contract, multi-platform graphics with EiffelVision, the Eiffel libraries, reusable software construction techniques, and the EiffelStudio environment, including its most advanced capabilities. That we can cover all of this in a week is due to a significant difference between Eiffel and many other approaches: the simplicity and economy of the method. In Eiffel, there's no need for gurus and language lawyers who are the only ones to know intricate detailsbasically because there are no such details. The course is very rewarding to teach because the sense of accomplishment is so palpable. You cover an elegant, consistent theory from beginning to end, and give students a range of practical skills that they can immediately apply.
Question: Of all of your different rolesauthor, consultant, professor, developer, speakeris there one that you enjoy the most or that you find especially fulfilling? What about it do you most value?
Answer: You left out "entrepreneur." Since we started ISE in 1985 it has been the sole focus of my activity, and there is something profoundly rewarding in being able to bring your ideas to market and turn out a profit. There are other criteria of successpapers, books, talks, knowing that people do Ph.D.s based on your work, being high up in the citation indexesbut few in the end are as gratifying as your ability to sell your stuff to someone who feels it's making his life easier and his work better, and proves it by paying you real money. Another great thing about our company is that it's been a family business, with my wife Annie playing a strategic role right from the start, and our children closely involved too. What could be better than spending your life with the people close to you?
I like all the other roles you cite too. Speaker, for example. I've never understood how people can have stage fright. My only forms of stage fright are pre-fright, the fear that the previous speaker might continue talking, and post-fright, the fear that someone, sometime, might take the microphone away from me. But being scared of speaking? That's like being scared of making love. Author, that's something completely different; speaking is pure fun, but writing is work. I have produced lots of articles and quite a few books, some rather big, like Object-Oriented Software Construction, the second edition, thirteen hundred pages densely printed; but I still write painstakingly slowly because I keep correcting again and again. Once in a while, though, I reread a paragraph one more time, and feel that it's about right. That's the reward. One of the rewards, in any case. Good sales are another. Misunderstood genius writing for posterity? Thanks, but no thanks. Sure, I want to please myself, and I hope to please my peers, but mostly I want many people to buy and read my books. If not, why publish? You can just write a diary, or an email to your friends. So maybe that's my answer to "what do you most value about being an author." What I most value about being an author are the readers.
In the end, however, the most important role is related to the software my team has built. Little can compare to the pride of knowing that at any time day and night mission-critical applications are running, written with our technology, the direct result of our long hours at the whiteboard and the keyboard, of constant efforts at analysis, design and implementation in and for Eiffel. The world's leading futures exchange is using a price reporting systemthe nervous system of the institution's operationwritten in ISE Eiffel. Investment management companies manage billions of dollars using software written in ISE Eiffel. Large scale US defense simulations and climate simulations run in Eiffel. TV stations are broadcast with the help of ISE Eiffel. People's health claims for an entire country are processed by Eiffel systems. Projects worldwide use our compiler, our tools, our libraries. It's scary at timesthese people trust their most important projects to us, what if we fail them?but it's the highest reward I can think of for a software professional.
Question: What made you decide to split your time between academia and industry? Do you find it difficult to maintain a balance between your research career and your managerial career? What advice would you give to another person who's trying to do the same thing?
Answer: The relationship between academia and industry is not the same in computing as in other engineering fields. It would be wrong to assume that academia is more innovative than industry. Often, it's the reverse. Companies will take risks; universities are, deep down, fundamentally conservative. For example, one can't hear a professor who justifies a choice of introductory programming language by "everyone else does it" without feeling shameful for him. In the field of object technology, almost all of the innovation in the past 20 years has come from companies, often smaller businesses like ISE. In fact, after the initial ideas that came out of the University of Oslo back with Simula 67, I can't think of a major O-O contribution that originated in universities. That's sad.
And yet I'm becoming a university professor, while of course retaining my links with ISE. The reason is not just the prestige of the university, ETHthe Swiss Institute of Technologyand of the chair, formerly occupied by Niklaus Wirth, the creator of Pascal, Modula-2, and Oberon. It's also that I think the contribution of academia is essential. Although it's hard today to compete with industry for toolswriting a compiler is nice, but who's going to match Visual Studio or ISE Eiffel?universities can do prototypes, show the way.
Industry is concerned with the way things are. Universities should concern themselves with the way things should be. Too often, they don't. In a vain effort to appear practical and industry-oriented, they sheepishly adopt the latest fad or standard, say UML or Java, losing all critical abilities. It's not right. Universities should rise above fashions and devise the best solutions.
One of the reasons I need more time in a university context is to start a Component Certification Center. While the only hope for software engineering is in more reuse, more components, the danger is to get a flood of components with no idea of how good or bad they are. It's critical to establish an independent certification agency. That's what I want to do, pursuing both the "low road" of a Component Quality Model to define the basic properties that components should possess, and the "high road," the more long-term effort of proving components correct, based on the ideas of Design by Contract. Industry collaboration is required, but a university seems like the right place to start such a project.
Question: We know how valuable your time is, but would you humor us by answering some non-traditional questions?
In one sentence, what are the most valuable words you would like to share with your audience?
Answer: To be careful with any deep truth that fits in one sentence.
Question: Who are your mentors, and why?
Answer: I have always had great admiration for the lucidity, intelligence, foresight, freedom of mind, style, wit, simplicity, elegance, depth, and lightness, allied with considerable personal and physical courage, of the great writers of the Enlightenment: Voltaire, Diderot, Montesquieu, Beaumarchais. When I was a child, I venerated great scientists of the past: Pasteur, Darwin, Einsteinwho was both a student and a professor at ETHMendel, and such. In computer science, I've been influenced by some of the pioneering scientists who are also excellent writers: Hoare, Knuth, even Dijkstra. One of the greatest influences has been Jean-Raymond Abrial, the person who came up with, among other things, the Z formal specification language and the B method and tools. For a number of reasons, he's not as well known as his peers, but he has shaped the thinking of many people besides me, and established unique standards of intellectual rigor.
Question: What do you learn from programming that you can't learn elsewhere?
Answer: Very interesting question. Most of the time, since computing is still fairly new, we think of what we can learn from others. But in fact I believe good software engineers know a few things that others could learn from us. They certainly color my dealings with the non-computing world. For example, you can't be a good programmer without constantly bearing in mind the necessity of distinguishing between specification and implementation; but once you get this distinction, you start applying it to many different discussions. The idea of recursion is also a beautiful contribution of programming: not just recursive routines but recursive definitions, recursive data structures, recursive reasoning, recursive proofs. Although this pattern is rooted in mathematics, we've taken it much further in software. Yet another elegant concept is data abstraction. One more thing that you learn in software, sometimes the hard way, is how to cope with change. Change is at the center of our work; anything that we do, we may have to revise. It's not by accident that our field is called soft-ware. Constant, uncontrolled change is lethal, of course, so we have learned to manage change; this transposes to many other areas of life.
More and more, I find myself thinking about non-technical topics using ways of reasoning that I've learned in software engineering. There's a definite risk of nerdinessyou know it's time to stop when you want to precompile your taxes or reboot your spousebut the intellectual modes of operation we've developed in our field can be fruitful elsewhere.
Question: Do you have any interests outside of the industry you work in?
Answer: Actually, no, I'm a total geek. Well, all right, not entirely. I would kill for Mozart, Rossini, Schubert, or Offenbach. I enjoy moving around the worldnot just visiting, but staying. I have had the privilege of living in Paris, Santa Barbara, Melbourne, Zürich, Palo Alto, and Nancy, as well as Milan, Sydney, and Novosibirsk more briefly, and have enjoyed all immensely. I even enjoy the very process of moving. When I arrive I head straight to the opera and, jet-lagged, sleep through the first act, then really enjoy the rest. I've slept at all major houses: the Bolshoi, La Scala, the Met, Covent Garden, Sydney, the Dorothy Chandler Pavilion, the Stockholm Royal Opera. Learning a foreign language and discovering its literature in the original is also an irreplaceable pleasure. I could go on, but I'm not really answering your question, since none of this is "outside of the industry I work in." There's no firm border between inside and outside. What really drives me, other than greed, is beauty. Beauty can be in a geometrical proof, in an algorithm or its Eiffel implementation, in the indentation of an Eiffel class text, in the architecture of a library, in a design pattern, but it's not much different from the beauty of a Verdi chorus, a Mendelssohn finale, a Stendhal paragraph, a Monet landscape, a Japanese temple, a staging by Jean-Pierre Ponnelle, the glimpse of a woman striding at dusk along the Corso Buenos Aires.