Friday, September 7, 2012

On Open Source and the Way People See the World

I'm not going to lie. The thing that got me into open source software was the price.

And let's face it - that's a pretty big reason why many people go the FOSS (Free and Open Source Software) route. They download the software, and never contribute, and never donate. I have seen more than one programmer get so frustrated with their users' attitudes that they just abandon the project. Partly, they're right. It's true that too many users like that would be bad for the open source community. But in a lot of ways, they're wrong.

Fortunately, many programmers don't see the community like that. Many of them see the community as a group of excited and enthusiastic hobbyists who love the idea that you don't need a huge corporate budget to come up with quality software. You just need a small group of people who are willing to contribute consistently, who are passionate about problem solving.

I've been programming as a hobby for about 12 years now, mainly because I've always found it kind of fun. I had the privilege of lecturing a programming course to a class of just under 200 second year university students earlier this year, and it opened my eyes considerably - both to the way I view programming, and to the way most other people view it.

What I learned about the students was both pretty disappointing and pretty encouraging, but I'll get to that in a moment. First, I'll share what I learned about the way I view programming. Not surprisingly, I see it more or less the the same way a stamp collector views collecting stamps, or a musician views playing music. It passes the time, and I simply enjoy time passed programming more than I would have enjoyed that time if I had passed it by doing something else. Problem solving comes naturally to me, and overcoming a challenge gives me a unique feeling of accomplishment that you can't get any other way.

When I was in third year student, we had to plot several charts and graphs for our Aircraft Design course. Naturally, being engineering students, most of us were pretty comfortable with a computer, and the majority of the class would plot the graphs in MS Excel, rather than draw them by hand. Our lecturer warned us that one particular graph we needed to be able to plot was incredible difficult to plot on a computer, pointing out that even companies like Lockheed were still plotting them by hand as late as the mid eighties (computers were better at plotting back then than you might think). Naturally, I took it as a challenge. I rearranged all of the equations, looking back at their derivations, and in a single sitting, I wrote a roughly 250 line Matlab script that calculated all of the curves and plotted the graph, complete with labels. The following day, I set about making the script customisable - adding options to turn features on or off. On the third day, I made the whole thing more user friendly - adding separate files for options and parameters, and added plenty of comments explaining how the code worked. Feeling proud of myself, I printed a few charts for half a dozen or so aircraft, and took a selection to show my lecturer. He was impressed, and showed the rest of the class. I was pretty embarrassed about it, and just sat there in the corner, blushing quietly.

Much later in the year, a week or two before our massive design projects were due, someone in my class wanted to know if he could buy my program. Before then, I'd never even considered the possibility that I'd ever sell a piece of software. I thought very carefully about it, and that evening, I hid an obscure line in the code that would print my name in the bottom right corner of the chart, and handed him the entire source code. Later that week, someone else asked me about it, and I emailed them the source code as well. I thought nothing more of it. A year later, another class mate approached me. He had my program, and wanted to know if it was OK to use it to plot charts for his final year project. I said yes, as long as he gave me credit. I thought that would be the end of it.

I have been approached every year since. This year, a student who was almost certainly still in high school by the time I had a bachelor's degree asked me if they could get a copy of the program. It made me realise something fairly important about FOSS. People don't program because they want to make a useful piece of software. They program because they enjoy it, and its the pride that stems from that enjoyment that ensures a high standard of work. And that is exactly what is written in the GNU manifesto.

(On a side note: You probably were not aware that I recently started making plans to release some of the software I've programmed during my life (including the S.E.P chart script (because its just a script, not a program, whatever students want to call it) mentioned in this post). It's not available yet (I need to make some minor changes to the source code before I release it under CPAL or GPL... whichever I decide to use), but you can still see descriptions for some of them.)

That brings me to the way my students see programming. An encouragingly large number (at least 10% of the class) seemed passionate about programming. One student, in fact, told me I'd inspired him to change career paths from Nuclear Engineering to becoming a programmer. That's probably the most flattering thing I've ever heard, even though I think it's most likely the thrill of solving a difficult problem that got him, and not my lecturing. Whatever it was, hopefully I managed to convince him not to change career paths.

The attitudes of the rest of the class scared me a little, and I think its partly because that seems to be the way the rest of the world views programming. Its much the same as what Benjamin Zander says about listening to classical music. It's something most people would enjoy doing if they just sat down and gave it a chance. But they immediately assume that they won't enjoy it. Most worrying, however, is that many of them get too caught up in trying to actually learn certain programs. Not just algorithms, mind you. It's actually quite helpful to have a repository of algorithms to draw from, but there are some things which are merely programming exercises that hardly anyone would ever need to know outside of a classroom. Things like a function to invert a matrix (in practice, the smart thing to do would be to download a matrix math library, with only one exception - that is, if the matrix math library is what you are trying to program). It seems that the students dislike problem solving to such an extent that they will take any measures possible to actually avoid it altogether.

To me, a generic problem solving ability is the most important skill anyone can ever have. Life is just a series of problems, and the better you are at solving those problems, the better you will do at life. If solving challenging problems brings you enjoyment, then you are automatically set to enjoy life. It really is that simple. I think I'm going to have to emphasise that to the next class I teach.

(Another side note: I was going to write a bit about my gradual shift towards using only FOSS, but I got a bit sidetracked. That will have to come in another post.)

If you enjoyed this post, then don't forget to like, tweet, +1, or upvote on reddit. If you have any questions, comments or complaints, post them using the form below.
. . . . . . . . . . . . . . . . . . . . . . . .

No comments: