Sir Tony Hoare
It would be unwise and useless to try to summarize in a thousand words the immense contributions of Sir Charles Antony Richard Hoare, also known as Tony Hoare (I suppose we are all good friends in this industry) or, with a more Tolkien feeling, as C. A. R. Hoare. I will settle for “Sir Tony Hoare” in this article; familiar yet respectful enough.
I will try to focus here on the concurrency part, and its obvious contribution to the Go programming language. Suffice to say that when you have Quicksort, communicating sequential processes, a billion-dollar mistake, the Hoare Triple, the Hoare program correctness logic, the dining philosophers problem, a knighthood, and a Turing Award in your résumé, you hardly need an introduction, least of all by me.
(To add more gravitas to our feeling of underachievement, let us remember that Sir Tony Hoare spoke Russian, studied with Andrey Kolmogorov in the Soviet Union, helped implement ALGOL, taught computer science at Oxford, worked as researcher for Microsoft, and was named a Fellow of the Royal Society (actually, maybe I should add the “FRS” suffix to the name, too.) Did I mention that he is also thoroughly considered a kind human being?)
Two years before receiving the Turing Award, Sir Tony Hoare published a seminal paper called “Communicating Sequential Processes” commonly referred to as “CSP”. The fact that there is a Wikipedia page dedicated to the concept should give you some context about the “ground-breakingness” of this paper.
In short, and as Hoare himself explains in an interview, the experience of a failed multiprocessing project took him to elaborate on the complete and absolute banishment of shared state as a conditio sine qua non for process communication; instead, he argued, processes should be independent, isolated, but able to communicate with one another in a formal way.
Yes, pretty much what the Go syntax proposes today. It even borrowed the arrow (prominently used all along Sir Hoare’s paper, representing the various exchanges among parties) as a syntactic element, even though the version we got in the language points to the left, instead of pointing to the right (which in my mind still looks odd, but maybe that is because I am a lefty.)
The question that appears in my mind as I read the paper is, why did Go only appear in 2009? Well, Erlang implemented some of these ideas as back as 1986, so clearly somebody at Ericsson was busy reading important computer science papers. Actually, another programming language you might have not heard about, occam, implemented these ideas even earlier, in 1983.
The ideas behind CSP were expanded in the 1985 book of the same name, a book that is freely available to download today.
If you are interested in learning more about Sir Tony Hoare, check the 2021 book “Theories of Programming: The Life and Works of Tony Hoare” by Cliff B. Jones and Jayadev Misra, and published by the Association for Computing Machinery. Sir Hoare’s book “Structured Programming” co-authored with Ole Dahl and Edsger Dijkstra is freely available on the Internet Archive.
You can also read the July 2024 edition of the Newsletter of the Formal Aspects of Computing Science (FACS) Specialist Group, which was dedicated to Sir Tony Hoare in his 90th birthday, featuring articles from various experts who worked with him.
Alternatively, you can also peruse the various papers shown in the cover image of this article:
- “A contribution to the development of ALGOL”, Communications of the ACM, volume 9, issue 6, pages 413-432, 1966, authored with none other than Niklaus Wirth himself.
- “An axiomatic basis for computer programming”, Communications of the ACM, volume 12, issue 10, pages 576-580, 1969.
- “Communicating sequential processes”, Communications of the ACM, volume 21, issue 8, pages 666-677, 1978.
- “The emperor’s old clothes”, Communications of the ACM, volume 24, issue 2, pages 75-83, 1980. This was Hoare’s Turing Award Lecture, delivered at ACM ‘80 in Nashville, Tennessee, USA.
- How Did Software Get So Reliable Without Proof?, FME ‘96: Industrial Benefit and Advances in Formal Methods‚ Third International Symposium of Formal Methods Europe‚ Co−Sponsored by IFIP WG 14.3‚ Oxford‚ UK‚ March 18−22‚ 1996. Proceedings edited by Marie−Claude Gaudel and Jim Woodcock, pages 1-17.
Reading About Go
Satisfying the curiosity of those who came to this page looking for books about Go, here go some recommendations.
- We have already talked about Kernighan’s book in this magazine.
- The Go language website contains a short tour that might be useful to newcomers. There is also a useful “Effective Go” document you might want to check.
- For those looking to learn in a step-by-step basis, “Practical Go Lessons” and “Learn Go with Tests” will prove to be foundational.
- If you already know Go and instead would like to see how to use it in a real project, I can only recommend “Writing an interpreter in Go” and “Writing A Compiler In Go” by Thorsten Ball.
- There is a free chapter about Generics available online, extracted from a classic book that recently got its 2nd edition.
- And if all of this was not enough, there are more and more books for your reading pleasure.
Cover photo by the author.
Continue reading Issue 070: DOS or go back to Issue 071: Go. Did you like this article? Consider subscribing to our newsletter or contributing to the sustainability of this magazine. Thanks!