Netflix has a good, short article on their “journey to asynchronous programming.”
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.”
This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 15.10, “How to create a Twitter client in Scala.”
You want to create a client to connect to Twitter to access the information you want, such as showing timelines and trends.
This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 13.12, “Examples of how to use parallel collections in Scala.”Back to top
You want to improve the performance of algorithms by using parallel collections.Back to top
When creating a collection, use one of the Scala’s parallel collection classes, or convert an existing collection to a parallel collection. In either case, test your algorithm to make sure you see the benefit you’re expecting.Back to top
I’ve read a lot of irrational claims about how functional programming helps with concurrency, but if a compiler can do what this says, at least it’s a clear, rational example of how FP can help with concurrency. It’s taken from an article titled, Functional programming for the rest of us.
In programming, semantics can be important. While in many cases I don’t care too much how developers name classes and variables, in some cases monikers can cause problems. (Perhaps even in that sentence.)
I’m very interested in building scalable applications. I debated about signing the Reactive Manifesto, but I do believe in the general cause, so I just added my name to it. This graphic speaks to the importance of “going reactive”, especially for big applications.
There are a number of ways to work with Scala Futures, and I provide examples of those approaches in the Scala Cookbook.
If you’re new to Futures, a fun exercise is to try to determine what happens in your code when you use a certain technique. For instance, when you look at the following Scala source code, what do you think it will print?