Flow-based programming is a programming paradigm that defines applications as networks of black-box processes that exchange data through message passing. These processes can be reconnected without internal changes to form different applications. Flow-based programming was invented in the 1970s and has been used continuously in a major bank since. The paradigm promotes writing programs as text streams that communicate, following the Unix philosophy. Flow-based programming can be used in Node.js apps through the NoFlo library, which allows specifying flows as a DSL and running flows in a web-based interface or for integration with external systems.
11. Flow-based programming
“Flow-based programming (FBP) is a programming
paradigm that defines applications as networks of 'black
box' processes, which exchange data across predefined
connections by message passing, where the connections
are specified externally to the processes. These black
box processes can be reconnected endlessly to form
different applications without having to be changed
internally. FBP is thus naturally component-oriented.”
- Wikipedia
13. “Flow-Based Programming was invented by
John Paul Morrison [from IBM] in the early
1970s, and an early implementation of this
technology has been in continuous production
use at a major Canadian bank since that time.”
- Wikipedia
15. “This is the Unix philosophy: Write programs
that do one thing and do it well. Write
programs to work together. Write programs
to handle text streams, because that is a
universal interface.”
- Doug McIlroy
16. “I thought of objects being like biological
cells and/or individual computers on a
network, only able to communicate with
messages (so messaging came at the very
beginning -- it took a while to see how to do
messaging in a programming language
efficiently enough to be useful).”
- Alan Kay
17.
18. send options 'a, u & x' to command 'ps',
send option 'firefox' to command 'grep'
direct standard output of 'ps' to 'grep'
23. DSL for specifying flows
send string 'package.json' to source port of Read
send output of Read to Split (by lines)
send output of Split to Count
send output of Count to Display