What did I do and learn last year?
Emacs
Emacs is a Lisp-based operating system which I occasionally use for editing text files. When you type in a text box in a normal application, you are just typing in a little box. When you work in Emacs, the thing you are editing an extension of your mind. After becoming acclimated to this, using a regular editor is incredibly frustrating in that you can feel the lag between what you are thinking and what you are actually capable of doing with your hands.
I taught a class on Emacs last IAP and have been ramping up my Emacs usage since then. Using Emacs leads to a virtuous cycle of productivity: you do your work in Emacs, discover patterns in the things you do, then automate those patterns using macros and code. In Emacs, it's trivial to find out how the keys you press translate into function calls, so unlike most automation languages, you never have to look up some crazy API in order to code an equivalent for what you were already doing.
For coding, some people swear by Eclipse (for Java and C++ work, at least). What I think they don't realize is that time spent refactoring and remembering symbol names is a drop in the bucket compared to the time spent typing and moving text around, and no IDE comes close to Emacs as an editor.
I'd characterize Emacs as having a text UI for input combined with a graphical UI for output, taking advantage of the high-bandwidth link in both directions. Unlike typical GUI programs, Emacs isn't used to whitewash the underlying OS and programs; rather, it augments them. Emacs gives you the full power of command-line tools without the limitations of shell interaction. The biggest of these limitations is what I call "linearity". Once you run a command, you can look at its output, but the output is dead: you can't edit it (unless it occurred to you to save it to a file first), and you can't act on it directly except in very restricted ways. In Emacs, every significant piece of text you see appears in a buffer, where you can bring to bear all your editing skills and execute context-specific commands in the buffer. Read the Emacs guided tour for more of my thoughts on this (with examples).
Git
Git is a versatile content tracker which I've started using mostly as a local VCS and as file synchronization software. It is astonishingly easy to set up and use locally (at least after trying to use CVS and SVN), so I've started using it for managing almost all of my projects.
Git has changed the way I write software. When version control is fast, no change is too small to commit by itself. Smaller and logically coherent changes make it easier to isolate bugs. In addition, always having a nearby baseline version makes it easier to think about what I am trying to do at any particular time. When branching is fast enough to use regularly, taking a detour to try something new and ambitious doesn't interfere with the rest of your work.
Having really easy replication is quite reassuring. I actually trust Git to synchronize my files correctly, regardless of when I modified my files on which hosts since the last synchronization, something which is not true of, say, rsync.
Free software
I came for the power, but I stayed for the freedom.
I think at some point in 2006 I switched over completely to using GNU/Linux. In 2007 I stopped using nonfree software entirely on my primary work computer (now a Thinkpad X61s I got this fall, which works great, by the way).
I love the ethos associated with free software. Astonishingly, some people have software that doesn't allow them to (1) use it in any way they wish (2) share a good thing with their friends (3) learn from it by taking it apart (4) tweak it to suit their needs (or pay someone else to do so). How backwards is that?
What bothers me the most about proprietary software is its use in education. Many proprietary software makers "subsidize" students by offering their software cheaply. In reality, by teaching proprietary software in schools, the education system is subsidizing the software makers: if all I've used in school is Microsoft Word, then I am beholden to Microsoft when I graduate. It goes against the very idea that education is supposed to make people self-reliant, but for public money to be spent this way is particularly horrifying.
Computers are tools of empowerment. That's why free software is important: as we've seen in recent years, if you are running proprietary software on your computer, it is in a sense no longer "your computer". That's why the OLPC project excites me: it's an attempt to empower children rather than to give them a cheap handout (not to mention, it created a market segment where none existed two years ago, but that's another story).
I realize that some people do not respond to arguments like the above in favor of free software, which is why I think it is also important for those among us with the knowhow to make free software as good as it can be. It's not just hackers who benefit from free software, but hackers will have to lead the way.
No comments:
Post a Comment