One of my great joys in life is computer programming. It also happens to be what I teach at BYU. I’m sure you’ve heard the old saying that ” if do something you love for your career, and you’ll never work a day in your life”.

On a recent cruise, I was programming ”for fun” on one of the ship decks. I kept getting looks from people with the unspoken “buddy, you just don’t get it” message burning towards me. What these people didn’t understand was I was not doing “work”. I was relaxing and enjoying my day at sea by programming. Is building something for fun any less respectable than sitting like lump in the sun on a deck chair? My wife found me and took the picture (ok, pretty nerdy):

ConanLaurelBahamas3

Why do I love computer programming? Here’s a few reasons:

  • It allows me to build, to construct, to organize, to create. I believe that human beings are creators and builders; we are happiest when we are in the process of creating things that we can be proud of. Computer programming is my way of expressing this innate desire and love.
  • Computer programming exists in a virtual world. This means I do not have to abide by physical laws; my limit is my imagination. When one language won’t allow me to express what I want, I can always turn to another or even invent my own (not that I’ve actually invented any languages yet :). Computer programming is also not subject to the law of scarce resources. There’s no limit to the objects I can create or the programs I can design. As long as the computer has electricity, the worlds I can create are unlimited.
  • Computers allow virtually unlimited copies with nearly no cost. This fact plus the Internet distribution system allows me to publish my work as open source, share with others, and stand on things other people have done. It allows me to be part of a larger community of those passionate about my subject.

Languages

I started programming when I was in 3rd grade. My father brought home a TI-99 4A computer, hooked it to our TV, and showed us how to play sounds in the “Advanced Basic” language. My siblings were not terribly interested; I was glued to this new toy.

From that point, I learned many languages and operating systems, including Basic, Pascal, C, C++, PAL, and Unix shell languages. My current languages are Java and Python.

My all-time favorite languages is Python. Python is an excellent combination of strongly-typed, object-oriented constructs and loosely-fitted scripting abilities. I can do anything with Python that I used to do with Java or many other languages. Combined with one of its web frameworks or with wxPython, it is an awesome language.

See my blog posts on Python Ups and Downs and Learning Python for more information on Python.

Operating Systems

My primary machine is a MacBook Pro. It’s a great operating system, especially for programming. I am not a Mac Zealot — I also use Linux quite a bit. I am a big fan of Unix-based operating systems; I prefer the Debian-based distributions. The modern Mac happens to be one of the very best client Unix-based operating systems available. I am not a Windows fan, but I recognize it’s usefulness in many situations, and I’ve even recommended it on a few projects.

The operating system a person uses is not as important to me as the fit to a particular project. What bothers me most is a person who only knows one operating system; some programmers use Windows everywhere because it is all they know. Others use Mac or Unix for the same reason. Today’s professionals cannot be ignorant to any of these systems; they must know each one well enough to use it effectively, even if their personal preferences lead them to choose projects in one or two of them.

Projects

I’ve been involved in many software development projects. My current large project is Picalo, an open source fraud detection toolkit.

See the Software section on the side of this page for more projects I’m working on.

Links

The following are links related to programming:

  • Picalo: My current open source project.
  • XRCed Tutorial: A tutorial I wrote about the use of wxPython for great GUIs in Python.