I hate computers

I hate computers

It amazes me what computers can do nowadays and yet I believe we are just seeing the tip of the iceberg. I can envision complex systems being managed or simulated by computers. Systems like governments (a computer may be elected president in some distant future), or the earth’s atmosphere (leading to extremely accurate weather prediction and perhaps even to forecasts on other planets). Perhaps we can look forward to numerical solutions in geological systems, with immediate benefit to humanity in the accurate prediction of earthquakes. We can even imagine the possibility of simulating a complex organism, allowing us to delve deeper into the secrets of life. In my head the possibilities are endless but no matter how powerful these machines are, it shocks me how hard it is to interact with them, to make them do the things we want them to do. It’s so hard to program them.

It all started back in my college days, maybe a bit before that. I had to take a computer programming class and was told that the class was hell but it didn’t bother me — I was certainly curious about it, and I could see the usefulness of knowing how to program computers. I thought, “It’s probably not going to be that bad: we only have to do three projects, and we have three months to complete them, plus I’m smart.”

I was wrong, it was hell.

The scientific computing language of choice at the time was Fortran. Worse, I had to painstakingly punch every line of code into a separate card, input the program into the computer by means of a card reader (a machine similar to that used today to count bills in banks), and wait for the results — a stack of paper that served as a scrolling screen. I had to read through all the printed lines to get the errors, punch new cards, and repeat the process all over again. A simple program, say 200 lines of code, took at least a week to develop and run without errors.

The next semester the university received brand new IBM PCs. It was quite an event, and the experience was amazing: a new way to interact with the computer with a mouse, keyboard, and a screen — a big leap forward from the punch cards of the previous semester. It was a spectacular novelty and for me it made a big difference. And the change dramatically improved the time of writing a 200-line computer program from a week to maybe a couple of hours. I realized more complex problems may be solved in a fraction of the time and in this case it was mainly due to a change on how we interacted with computers, the way we tell them how to do the things we want them to do, and the way we got feedback from them.

As more complex problems could be solved, I looked for problems involving real physical phenomena. Soon I was applying myself to any partial differential equation that I could get my hands on. Gradually I engaged in more complicated problems like fluid flow, electromagnetic phenomena, and fluid flow through porous media.

I tried many other different things and I fell in love with the visualization possibilities. For example, sophisticated photorealistic rendering algorithms were being developed at the time. I started to use POVRAY and then found Renderman, the engine used by Pixar to produce their amazing animated movies. The world of splines and raytracing was wonderful to me, and I soon realized that the visualization of results was an important part of knowledge communication. Finding good visualization and graphing libraries became essential. And to be clear: by ‘good’ I mean ‘able to produce high quality graphics with the least amount of code’. This search ended with what I call the “scientific programmer’s holy trinity”: Python, Matplotlib and VTK (the Visualization Toolkit). This combination proved to be very powerful when I did my master’s degree on fluid flow through porous media.

At this point I was completely hooked and I was hungry for more — much more.