I just discovered IRC

On Monday night I was trying hard to understand the nuances of processes and shared memory so that I could finish it early and move on to other things. I had been working on it since Friday afternoon and though I had gotten parts of it working (thanks to my professor), there was still some parts that were failing utterly. I read the man page and googled around (which quite often brought me back to the man page) and just as I was about to throw my hands up and wait to ask my professor again, I decided to ask on IRC.

I hopped on the C channel at Freenode and within minutes I had not only found out why program was misbehaving, but I also got two separate suggestions on how to fix it. I may have bent the rules a little bit, but I trust my professor will understand that I actually did learn something and not just steal code of the Internet. I still don’t really know how to implement one of the suggested fixes, but I implemented the other. The fix I didn’t understand is probably the cleaner of the too and I plan on asking my professor more about it.

I repeated the experience yesterday, but with JavaScript and the canvas element (while trying to use Processing.js). I did IRC in the past, but never really to solve problems. I went on channels (mostly #archlinux and #python on Freenode) mainly to interact with the community. Whenever I had problems, I generally googled my way to a solution. In some ways, asking on IRC could be considered the easier path: instead of searching for material, you simply go ask someone who knows. While that may be true to some extent, it’s certainly not what happens all the time. When asking the C question, the other channel members made it perfectly clear to me that I needed to go read more (which I totally agree with). They also helpfully pointed me to resources. IRC channels aren’t “cheatsheets” by any stretch of the imagination. I got the feeling, on both the C and Processing.js channels, that the people on them are very well-versed in what they do. They’re willing to help you, but only if you help yourself (some make this point more forcefully than others).

IRC is a good example of a way to learn Computer science (or at least programming) in a master-apprentice fashion. It’s different from learning from a tutorial or reading the man page. I hesitate to call it “teaching” because it’s more of a free form Q&A. Instead of having someone give you the information up front (a typical classroom setting) or going out and hunting it down yourself, you get to pick the brains of people who have already internalized the knowledge that you’re after. To get to it, you have to ask the right questions and that means knowing the problem well enough to figure out what questions are worth asking. And that requires some thought.

It’s not exactly master-apprentice because you aren’t learning under the tutelage of a single master. I think a more apt analogy would be spending some time at a monastery. You don’t have a very strong connection to the people there, but you share some things in common. You can go with a purpose or without one. But you will benefit more if you do have one. There are some basic rules, mostly concerning respect and etiquette. If you break them, you will be asked to leave and in extreme circumstances, removed. The experience you have is very much up to you and could leave with a profound sense of enlightenment and a strong desire to return and learn some more.

Ok, so I’m embellishing a bit and programmers aren’t really monks (except maybe if you’re Richard Stallman). IRC certainly isn’t solution to all questions and you could easily come away being more confused than when you started, but that could happen with a book or a normal class. IRC is another resource, but it’s a good one. No matter how good search technology may be or how well-written technical docs may be, sometimes it’s good to be able to be walked through problems by a human being. And yes, I do still have questions for my professor.

It’s my choice dammit

Anybody who tells me I can’t use a program because it’s not open source, go suck on rms. I’m not interested. 99% of that I run tends to be open source, but that’s my choice, dammit.

I got my shiny new iPod Touch yesterday and even though I really like it for a number of different reasons, I can’t help but feeling a little bit guilty. I like Apple in general, but the iPod is pretty much as closed as a system gets and I don’t feel too good about giving my hard money to something that is rather opposite to what I think computing should be like.

Though I can’t shake off the feelings of guilt (and am concerned by the direction in which popular computing is going), I let practicality take the upper hand in this case. The reason I bought the iPod Touch is that there is no other device on the market that lets me do just what I want to with the Touch. I needed a light, mobile internet connection device that could connect via Wi-fi and fit in my pocket. Also, I didn’t want to spend a small fortune (for a college student). I didn’t want a phone with a plan (I hate phones) and I didn’t want to shell out $500+ for an unlocked Nexus One.

What I needed was basically a web-ready PDA for the modern day and the iPod Touch pretty much fits the bill. The calendar and mail apps work wonderfully with Google services and there are some good to-do list apps available cheap. If there was an Android equivalent to it (say the Motorola Droid without the phone part) I would buy it instead in a heartbeat. But there isn’t and I need something that gets the job done today.

Though I am very much an open source advocate, I’m not fanatical about it. I use OS X on a regular basis because I think it looks good and the UNIX underneath lets me do most things I need it to do (except perhaps package management, but I haven’t really tried that). On the other hand, I went completely Microsoft-free last week. I stopped using proprietary formats long ago, preferring plain text, HTML and PDF. But I nuked my Windows partition simply because I didn’t use it any more. I was back up and running with a beautiful fresh, 64 bit Arch Linux install in about an hour.

Having a philosophy and values and ideals is awesome, but in the end I choose technology that serves me best. If that means I have to spend a few dollars lining a closed giant’s coffers, then so be it. The reason I grew to love Linux was because it was so easy to tinker with and because I could write programs very easily. I never quite figured out how to write serious code in Windows and I’ve never been a big IDE guy. If Windows had let me program and tinker as easily, I would have probably stuck to Windows. Some would argue that Windows will never be that way because of its closed nature. I’m not sure I agree, but then again, I can’t say I’ve tinkered enough with proprietary systems to tell what can and cannot be done.

And of course no conversation on openness today can be complete without some mention of the iPad. I think it’s an interesting piece of tech, but it’s not something I will buy because I don’t have a plausible use case for it. I either want something I can carry in my pocket (the iPod Touch or iPhone) or I want a full fledged computer. However, I also understand that I’m not the iPad’s target audience. The target audience is people who don’t do a lot of typing and are more digital consumers than they are proper computer users. And though the iPad may be unimpressive from a technical perspective, it will almost certainly sell like hot cakes (as my friend puts it). And no doubt Google will push out an Android-based competitor to it within the year.

Part of my misgivings about buying the Touch has to do with the fact that at heart, I am a tinkerer. I like cracking things open to see what the parts do and then putting the parts back in a slightly different just to see what will happen. Seeing a mass market popular device that is so tinkerer unfriendly does unsettle me. But there are also things that I have no interest in tinkering with. I don’t want to jailbreak my Touch or run my own “unauthorized” programs on it, because there are far better things for me to do with my time. Computer technology is at the point of maturity where you don’t have to tinker to get things to work the way you work and I think that in general is a good thing. I care more about users having a good experience and getting their job done than I do about running a completely free software stack. If that means I need to throw a little proprietary into the mix, so be it.

Linus Torvalds does sum it up really well for those open source users who aren’t primarily motivated by morals or ideals: most of what we run is open source because it works and gets the job done. And most importantly, it’s my choice.