Here's a scary thought for you. Every day, hundreds of billions of dollars of financial transactions are driven completely autonomously by computer algorithms. The fate of corporations and nations rests on bits of computer code sent out by their makers to do battle in a high-stakes trading war. And when something goes wrong, it can go spectacularly wrong.
When you think of stock exchanges you probably have a quaint notion of a paper-strewn room full of stressed-out traders yelling to be heard over each other while watching big screen monitors that cover every square inch of the walls. Or maybe you have a more modern picture of an army of white collar workers barricaded in their caves of steel intently staring at computer displays, waiting to pounce on the right news or slightest movement by executing a quick buy or sell order.
In reality, today's markets are largely driven not by bellicose bombasts or educated elites but by algorithms written by programmers like you and me. Programs that are set free to wreak profit (or havoc) in the innards of the world's electronic cyber-market. According to the Financial Times, program trading accounts for about 30% of the total daily activity on the New York Stock Exchange, and a whopping 60-70% of the activity on other markets such as the Nasdaq. In 2008, the total world derivatives market was estimated at nearly $800 *trillion* dollars.
Unsatisfied by the decision speeds of mere humans, huge banks have turned over the keys to the vault to programs to do the trading of stocks and derivatives for them. The idea has a certain appeal: Put in a few billion dollars, push a button, and walk away while the computer does all the work. When you come back, if all goes well, you've made a nice profit. "Leave the driving to us," as the slogan goes. Even a monkey could do it. Right?
Well, if you're not a developer and you're reading this, please take heed. Computers make mistakes, because they just do what their programs tell them to do, and all programs have mistakes lurking in them. "Bugs," we call them. Much of the craft of computer programming is concerned with reducing the number of bugs. When a program controls something really important, like say an X-Ray machine, a fighter jet, a space craft, or a nuclear power plant, extreme efforts are put into eliminating as many bugs as humanly possible. But as a number of high profile cases have proven, it's impossible to detect them all.
Take the case of the NYSE Euronext exchange operator. Recently it fined a trading firm for "failing to control" its trading algorithm. One day, out of the blue, the program decided to send "hundreds of thousands" of messages for faulty orders, clogging up the exchange for everyone for hours. All it takes is a bad "if" statement or a misplaced semicolon, or maybe an array that grows larger than expected or a race condition in multi-threaded code. Let's not even mention what a malicious hacker with an agenda can do.
So what's the fix? Acknowledge that bugs happen, and put in checks and balances to catch and contain them. Don't assume computers are infallible. They're just as fallible as the humans that build and program them. More, because humans have the advantage of common sense. Let's use it.
Photo credit: Walt Dabney