InfoQ

Interview

Recorded at:
Recorded at

A Conversation with Sr. Tony Hoare

Interview with Tony Hoare by Sadek Drobi on Jun 25, 2009

Community
Architecture
Topics
Programming
Tags
QCon ,
Interviews ,
QCon London 2009
Summary
Sir Tony Hoare answers questions about his background, his relationship with Microsoft Research, his interest in "Unifying Theories of Programming," and numerous other topics in the area of programming, correctness, formal analysis of programs, and even type systems. Also addressed: concurrency, null-references, and even buffer overflows.

Bio
Sir Charles Antony Richard Hoare, commonly known as Tony Hoare, is a British computer scientist, probably best known for the development in 1960, at age 26, of Quicksort. He also developed Hoare logic, the formal language Communicating Sequential Processes (CSP), and inspired the Occam programming language.

About the conference
QCon is a conference that is organized by the community, for the community.The result is a high quality conference experience where a tremendous amount of attention and investment has gone into having the best content on the most important topics presented by the leaders in our community. QCon is designed with the technical depth and enterprise focus of interest to technical team leads, architects, and project managers.
I'm Sadek Drobi, I'm here at QCon with Sir Tony Hoare. Can you tell us a bit about yourself and about your long run computer science?
You mentioned Microsoft Research and there were several projects that are based on your own ideas. One of them is the Spec# project, which is about the typing system or the former system of verification for the program that is based on logical wire, which is yours. Can you tell us about these concepts and then tell us about the difference in having it inside the type system or as an independent system that then plugs into the program to verify it?
You mentioned, when you were talking, the null references and the buffer overflow. What are the other things that we want to detect in the program? What are other faults that we could or we should detect in a program?
In languages like functional programming languages they even try to specify effect in the type system, like in Haskell. What do you think of that? Would it be helpful in programming for the Enterprise?
Having this strong type systems could help you do a lot of things, afterwards, when you implement software. There is this project under Microsoft research called The Singularity and we hear that you've been involved in the project in some way or another. Can you tell us a bit about this project?
In some way, in software, we did some assumptions and then we built on top of these assumptions without even trying to rethink about them and that's how it works, anyway. But then, some time, we get to re-question these assumptions. Do you see a lot of assumptions to rethink about in the software stack?
You mentioned the Arianne rocket and as I remember there was also this assumption because it was a module that has been tested for smaller rocket and it was okay in that context and then it was used in this new bigger rocket and the assumptions there and the implementation had been OK, but you didn't think about it could be used in a totally different context. Is it possible at all to make all these assertions to be sure that a program can be 100% not getting into trouble?
For example, when doing any spell check, there are some mechanisms that are based on the grammar theory and stuff like this. In Google, what they actually do is they have a lot of machines with a lot of text and they just try to find the text somewhere and then they do the spell check and the grammatical check this way. There are 2 different approaches to checking grammar, 2 different ways. Also, in the programming languages, there are systems that are based on proof and type system statically typed, like Haskell and there are dynamic languages where it's all about observation of runtime behavior trying to optimize there and trying to make some assumptions at runtime. What do you think of this difference, of 2 different approaches?
You mentioned you have this Bachelor's in the classics. How did you get involved in computing? I know you've studied computer science and computer languages in Russia. Can you tell a bit about your history before you started in the '60s with computing? How you began in this, which was a very young field at that time?
When was that you made this almost artificial intelligence where we are trying to translate in human language by means of computer programs? When was that?
Does that mean that you aspired to be a scientist, but then you had to be an engineer for the Eliot Brothers and work with computers?
Don't you feel sometimes annoyed that certain ideas of research take a whole lot time to get mainstream?
These things we can easily observe in Microsoft, because now we are hearing more and more about commercial products coming out from Microsoft based on a lot of research, like F#, Spec#, Singularity and there is a lot of stuff that might even go see the lights. Do you think this will change the way we perceive software? Will we start having a kind of mind set shift thinking about software? Because we had these assumptions for a long time and now we are starting to see new ideas, new things and it seems that the world of software is changing in some way.
With your time in the computer science field, I'm guessing that you've seen some common trends, things that have remained consistent throughout time since 1960. What are those trends that have remained consistent and how do you think it will continue to the future?
You've made a major contributions to the field of computer science for example in concurrency, with communicating sequential processes, you've been influential with Algol. Which one will you yourself say "This is my favorite child!", if that's possible?
show all  show all

No comments

Watch Thread Reply

Educational Content

ORM, EDM, ESQL, Entity Framework, LINQ to SQL, LINQ to Entities - Confused?

Eric Nelson explains what are ORM, EDM, and ESQL, what is the difference between LINQ to SQL and LINQ to Entities, which one should be used, accompanied by hands on demos showing how to use them.

Web Service Contract Versioning

Today we introduce the book “Web Service Contract Design and Versioning for SOA”, more exactly, chapters 20, 21, and 22 of the book addressing the issues related to service contract versioning.

Making Sense Of It All

Adrian Colyer and Karl Rumelhart discuss the VMWare acquisition of SpringSource, Cloud Foundry, public vs private cloud, virtualization, vSphere, Infrastructure as a Service and vSphere performance.

Pouring Data on Troubled Markets - Quantitative Portfolio Management Technology at BGI

Eoin Woods explains how Barclays Global Investors (BGI) designed Apex to meet the challenges it faces and the Java technologies which were chosen for an architecture with variations on standard J2EE.

John Hughes Contrasts Erlang and Haskell

John Hughes contrasts Haskell and Erlang, outlining features that he finds more attractive in each of them. He also explains how QuickCheck works and what makes it different from unit tests.

Why Agile Adoption Fails in Some Organizations

This article examines and explains the often overlooked organizational reasons that agile fails.

Data Grid Design Patterns

Brian Oliver explains a number of data grid design patters: Command, Functor, Messaging, and Push Replication. He also mentions some traditional patterns used so far and Coherence Incubator.

Thoughts on the Generic vs. Specific Tradeoff

Stefan Tilkov offers guidelines for the architect looking for a solution to his problem. Should it be a generic or a specific one? He compares several such solutions outlining the pros and cons.