I asked my old friend (who has worked with codes since the period of Mainframe-Assembler) what is the best field to be invested for the future. He said, "distributed computing". His prediction (which is based on 30-years coding experiences) inspired me to keep learning, investing in knowledge, as he does.
Concurrency, parallelism and distributed computing are related topics. Concurrency techniques are used to allow a computer program to do more work over the same time period or time interval. Concurrency makes software faster, handles larger loads or simply makes software better by increasing the number of concurrent operations. In my understanding, concurrency can be achieved with piece of codes by two basic approaches, parallelized and distributed computing. These two paradigms sometimes intersect and I will let you think "C = P + D" or "P = C + D" by your self.
People exploring concurrency to gain more computing power without Moore's limitation on conventional von Neumann computer. Pacheco calculated that to build a von Neumann computer with 1 trillion instructions per second, we need to fit a single word (2 byte, 16 bits) of memory into a square with length 10e-10 m, which is the size of relatively small atom!!. In other words, it is impossible to build such kind of computer, unless we can represent a 32-bit word with single atom !! Even though Feynman has explained the potential to build a "quatum computer" theoretically, no one can predict how long it will takes from theory to RTM !! 30 years more?
So, how do we build a computer with 1 trillion instructions per second ?? Without quantum computer we should obtain more processors and more memories working concurrently (parallel in time). A parallel computer is simply a computer (or collection of computers) with multiple processors that can work together on solving our problem. I can say my M400 is a parallel computer because it has more than one processor (multi-processors-shared-memory). Or I can combine all PCs in a internet cafe to build a parallel computer (multi-processors-distributed-memory). Parallel computing is a proven way to achieve concurrency (higher performance) at least for today.
"I suspect that concurrency is best supported by a library and that such a library can be implemented without major language extensions" -- Bjarne Stroustrup (father of C++). Many people prefer to follow that statement as we can see parallelism mostly implemented as libraries, not language extensions, not extending compiler features, not application layer, and not extending sequential codes. I hope uncle Joe Duffy also follows uncle Stroustrup way for his Concurrency book.