Preface

WRITING SOFTWARE IS HARD—AT LEAST, WRITING SOFTWARE THAT STANDS UP UNDER TESTS, TIME, and different environments is hard. Not only has the software engineering field struggled to make writing software easier over the past five decades, but languages have been designed to make it easier. But what makes it hard in the first place?

Most of the books and the papers that claim to address this problem talk about architecture, requirements, and similar topics that focus on the software. What if the hard part was in the writing? To put it another way, what if we saw our jobs as programmers more in terms of communication—language—and less in terms of engineering?

Children learn to talk in their first years of life, and we start teaching them how to read and write when they are five or six years old. I don’t know any great writer who learned to read and write as an adult. Do you know any great programmer who learned to program late in life?

And if children can learn foreign languages much more easily than adults, what does this tell us about learning to program—an activity involving a new language?

Imagine that you are studying a foreign language and you don’t know the name of an object. You can describe it with the words that you know, hoping someone will understand what you mean. Isn’t this what we do every day with software? We describe the object we have in our mind with a programming language, hoping the description will be clear enough to the compiler or interpreter. If something doesn’t work, we bring up the picture again in our mind and try to understand what we missed or misdescribed.

With these questions in mind, I chose to launch a series of investigations into why a programming language is created, how it’s technically developed, how it’s taught and learned, and how it evolves over time.

Shane and I had the great privilege to let 27 great designers guide us through our journey, so that we have been able to collect their wisdom and experience for you.

In Masterminds of Programming, you will discover some of the thinking and steps needed to build a successful language, what makes it popular, and how to approach the current problems that its programmers are facing. So if you want to learn more about successful programming language design, this book surely can help you.

If you are looking for inspiring thoughts regarding software and programming languages, you will need a highlighter, or maybe two, because I promise that you will find plenty of them throughout these pages.

Federico Biancuzzi

Organization of the Material

The chapters in this book are ordered to provide a varied and provocative perspective as you travel through it. Savor the interviews and return often.

Chapter 1, C++, interviews Bjarne Stroustrup.

Chapter 2, Python, interviews Guido van Rossum.

Chapter 3, APL, interviews Adin D. Falkoff.

Chapter 4, Forth, interviews Charles H. Moore.

Chapter 5, BASIC, interviews Thomas E. Kurtz.

Chapter 6, AWK, interviews Alfred Aho, Peter Weinberger, and Brian Kernighan.

Chapter 7, Lua, interviews Luiz Henrique de Figueiredo and Roberto Ierusalimschy.

Chapter 8, Haskell, interviews Simon Peyton Jones, Paul Hudak, Philip Wadler, and John Hughes.

Chapter 9, ML, interviews Robin Milner.

Chapter 10, SQL, interviews Don Chamberlin.

Chapter 11, Objective-C, interviews Tom Love and Brad Cox.

Chapter 12, Java, interviews James Gosling.

Chapter 13, C#, interviews Anders Hejlsberg.

Chapter 14, UML, interviews Ivar Jacobson, James Rumbaugh, and Grady Booch.

Chapter 15, Perl, interviews Larry Wall.

Chapter 16, PostScript, interviews Charles Geschke and John Warnock.

Chapter 17, Eiffel, interviews Bertrand Meyer.

Contributors lists the biographies of all the contributors.

Conventions Used in This Book

The following typographical conventions are used in this book:

Italic

Indicates new terms, URLs, filenames, and utilities.

Constant width

Indicates the contents of computer files and generally anything found in programs.

How to Contact Us

Please address comments and questions concerning this book to the publisher:

O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)

We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at:

http://www.oreilly.com/catalog/9780596515171

To comment or ask technical questions about this book, send email to:

For more information about our books, conferences, Resource Centers, and the O’Reilly Network, see our website at:

http://www.oreilly.com

Safari® Books Online

When you see a Safari® Books Online icon on the cover of your favorite technology book, that means the book is available online through the O’Reilly Network Safari Bookshelf.

Safari offers a solution that’s better than e-books. It’s a virtual library that lets you easily search thousands of top tech books, cut and paste code samples, download chapters, and find quick answers when you need the most accurate, current information. Try it for free at http://my.safaribooksonline.com.

Get Masterminds of Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.