(Originally published at ).
I've been working extensively with during the past 12 months. Here I reflect on what I've learnt.
Writing concurrent software is hard, sometimes orders of magnitude harder than single-threaded software. Perhaps the greatest difficulty is that humans are not equipped to reason accurately about concurrency, and this is compounded when there is shared memory involved. Another difficulty lies in the verification of concurrent systems, which is hard even for a machine to do.