Yesterday I watched these two videos: The Free Software Movement and the GNU/Linux Operating System, which is a speech given by Richard Stallman, and Revolution OS, which is a documentary of GNU/Linux.
Below is a quote of Bruce Perens from the Revolution OS video. Bruce Perens created the Open Source Definition. I thought this was pretty funny:
Well I announced open source to the world on the Internet. I did a lot of the early administrative work of starting the open source inititiative. And I think six month later I was reading the words "open source" in the news all the time. I was totally astounded. And a year later I believe Microsoft was talking about releasing some source code. And someone in the press asked Steve Ballmer if they were going to open source their code and Steve Ballmer said "well open source means more than just releasing the source code." And I realized that he had read my document and understood it and was now telling the press about this. Now if you're like just a guy on the net who's not doing this for a job at all and you sort of write a manifesto and it spreads out through the world and a year later the vice president of Microsoft is talking about that, you'd think you were on drugs, wouldn't you? But that's what really happened.
My father was in the third Selma March led by Martin Luther King in 1965. He recently wrote up the experience and I put it on the web: The Selma March Remembered
Ian Lance Taylor has a good piece on why people work on free software.
Vlad Dolezal has a good piece on the real reason we use Linux.
It's interesting to think that all the things you see computers doing is occurring because someone wrote code to make them do it. A parallel world behind the world of applications, email, websites, phones, animation, graphics, systems, processing, transactions, video games -- you name it, is a world of code and programmers.
I think I was originally interested in programming because I was amazed at learning how to make computers do little things. It can be an amazing experience to first understand how to make a computer do something you had no idea about before.
Programming is not a purely mechanical, and analytical activity. It's similar and related to the arts. Sometimes I like to think of it as like writing a story. And when you're done a computer can execute your story, assuming the characters you describe in your code and bring the story to life.
After awhile of programming I learned something about programming even better than being able to make computers do things. I learned this: Like a book that's better than its movie, the code of a program is better than its execution.Your code is a better thing than its execution. It presents a funny picture. It's funny because so much of the world sees the side effect of code being executed by computers. People see the results of computers executing code. They don't see the code. Sometimes it can make one think that the world only cares about programming and code for what it makes computers do.
Well, let me ask you something. What do books do? What does music do? They don't do anything. You like them for themselves. You might like a good book because it is written really well, or you like the characters or the story line. A computer program is the same idea, you can write it well: have perfect indentation, have good variable names, write concise but expressive code, use the best functions and tools for what you're writing, and use them in the best way. Give your code structure and organization and express it in such a way that the ideas of one section of code flow easily into the next. Write documentation. Have great ideas and express them in your code. In other words write your code so that it is well written and has a great story. If you did this and really cared about it, you might end up really liking your code and realize that its beautiful and a piece of art itself. Perhaps one day you'll snicker when someone demands to know and only cares about what your program DOES.
Of course there's side effects for cared about code. It's easier to understand and maintain, less bugs, its interesting, easier to extend, you actually want to work with it etc.
Of course you are writing code for its execution. I am. I just like and care more about the code than its execution. It's like why you have job. Of course you're doing it for money, but are you doing it only for the money?