Famed programmer Joe Armstrong passed away this weekend. He created the Erlang programming language, based on the actor model, and without using Google, I’m pretty darned sure that Erlang had an impact on Akka, the very cool actor library for Scala. Here’s an article Mr. Armstrong wrote some years ago, titled, Why OO Sucks (OO as in OOP).
“Erlang has single-assignment variables. As the name suggests, they can be given a value only once. If you try to change the value of a variable once it has been set, you’ll get an error.”
(“Single-assignment variables” are the same as
val fields in Scala. Using them can make your code more like algebra.)
“In Erlang, processes share no memory and can interact with each other only by sending messages. This is exactly how objects in the real world behave.”
“Processes interact by one method, and one method only, by exchanging messages. Processes share no data with other processes. This is the reason why we can easily distribute Erlang programs over multicores or networks.”
Joe Armstrong, in his book,
Programming Erlang: Software for a Concurrent World
“In Erlang (Akka), it’s OK to mutate state within an individual process (actor), but not for one process to tinker with the state of another process.”
This is a page from my book, Functional Programming, Simplified
“It takes a wise man to learn from his mistakes, but an even wiser man to learn from others.”
Once you get into FP, you’ll quickly start hearing the terms “lambda” and “lambda calculus.” The goal of this chapter is to provide background information on where those names come from, and what they mean.
One last quote from Joe Armstrong, which highlights how a person looks at something based on their background: “If you’re coming from the Erlang/Haskell world you’ll think, ‘Swift is verbose and a bit of a mess,’ but if you’re coming from Objective-C you’ll think, ‘Swift is concise and elegant.’”
We should grow things (software applications) by adding more small communicating objects, rather than making larger and larger non-communicating objects.
Concentrating on the communication provides a higher level of abstraction than concentrating on the function APIs used within the system. Black-box equivalence says that two systems are equivalent if they cannot be distinguished by observing their communication patterns. Two black-boxes are equivalent if they have identical input/output behavior.
When we connect black boxes together we don't care what programming languages have been used inside the black boxes, we don't care how the code inside the black boxes has been organized, we just have to obey the communication protocols.
Erlang programs are the exception. Erlang programs are intentionally structured as communicating processes — they are the ultimate micro-services.
Large Erlang applications have a flat “bus like” structure. They are structured as independent parallel applications hanging off a common communication bus. This leads to architectures that are easy to understand and debug and collaborations which are easy to program.
~ From this post by Joe Armstrong, author of the book Programming Erlang: Software for a Concurrent World
In the “Maintaining the Erlang View of the World” section of his book Programming Erlang: Software for a Concurrent World, Joe Armstrong writes, “The Erlang view of the world is that everything is a process, and that processes can interact only by exchanging messages. Having such a view of the world imposes conceptual integrity on our designs, making them easier to understand.”