In my last post, I said that this one would cover my background in Monte Carlo methods, and how I came to think that I (of all people) should write a tool for it. I think that for the sake of pithiness, I'll split this up into several different posts.
I am not particularly skilled in mathematics or statistics. I have almost no formal training as a software developer. And this mustachioed gentleman is not me.
"Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris."
Perl was not the first programming language I learned, but it was the first one I used to accomplish anything worth talking about. I absorbed some of Wall's philosophy and sense of humor during the fall of 1997 as I taught myself Perl. When I started, I had never written anything fancier than static HTML with some tables, but I had a copy of Wall's book, a copy of the Apache Server documentation, and a login account on the Northwestern Library's HP-UX web server.
I wrote a tool that allowed a professor to serve up a series of video files to his class, then administer a little quiz to ensure that they'd watched them, all of which was access controlled by interfacing with Northwestern's NetID system. And it worked. It may not sound like much now, but keep in mind, this was only about three years after Netscape Navigator was released to the public in beta, and about eight years before YouTube was released on a world that had never yet dreamed in Gangnam Style.
So, yeah, despite my almost total lack of formal training in computer science, I believe I can write a tool that others will find useful, because I have the three virtues on my side.
Laziness is what drives you to expend great effort to reduce total energy expenditure, and makes you realize that the computer should be doing something for you that it currently doesn't do. Impatience means that you aren't going to wait around for someone else to solve this problem. Hubris is thinking that you are capable of doing a good enough job on this problem that maybe your solution will be useful to others.
It's been my experience that broadly educated people (that is, people with broad interests and knowledge in areas other than computer science) often become good software developers, provided that they also possess the three virtues that Wall spoke of. I greatly enjoy the company of smart people, and some of the smartest developers I've worked with had degrees in music, or African history, or library science, or whatever. To be fair, I also know a lot of very smart people with advanced computer science degrees, but that level of formal training is neither necessary nor sufficient to enable great work.
Up next: Itchiness.