**coltonlewis.name: My Journey To Emacs [Org] All L1 (Kernel Hacker Mode) ---

My Journey To Emacs

High School

I started learning Python in high school. Programming seemed cool and I wanted to teach myself how. I tried with a few languages, but Python was the first one simple enough I could make progress without outside help. I remember learning the basics through CodeAcademy and being really proud of myself when I could make a basic game of tic-tac-toe, nothing with a computer opponent, just two people taking turns plugging in numbers and seeing a new grid printed on the screen.

At the time I used Notepad++ on a Dell XPS. I probably knew zero keyboard shortcuts at the time and used a mouse constantly, but it was enough. I still feel some nostalgia for the program. It represented my first steps to becomming a programmer because I had to search it out and install it. It seems basic to me now, but I remember being impressed by all the menu options it had. There were things I didn't understand or know how to use.

College

First Semester

I started my first programming class at Missouri S&T and that class taught C++. I had a Mac by this time and used TextWrangler for our homework. I still mainly used the mouse but picked up some keyboard shortcuts through continued interaction. I think the most common one was find, because the programs I was writing had grown to several hundred lines at least and I couldn't see the whole thing on the screen at once. After editing my files, I would click on the terminal window and manually compile with gcc to run against the small validation test that would often be provided with the homework. Then when I was satisfied with it, I would scp it to the computer lab boxes and run the submit script. I didn't know anything about git yet and class didn't really cover version control besides mentioning it was a thing we should learn.

Besides class with homework, there was also a lab that felt much more high pressure. The tasks were simpler, but we had to ssh into the computer lab machines and do everything from there. It was intimidating. Class was led by a grad student who told use to use jpico to write our programs. It worked alright, but it was terribly slow exiting out of the editor to manually compile and test. It was painfully slow. I took note that the student running the lab used something called Vim and he was much faster. I grew determined to learn Vim.

Later

Seeing that Vim on Linux was the environment of the computer lab, I started trying out different Linux distros on my Macbook. It was not good for my sanity and I lost a lot of sleep because I was constantly trying to dual boot in an era where Mac EFI support was dodgy and MacOS didn't play nice with other OSes on the system. Nevertheless, I perservered and learned a lot about running Linux. I still remember using fw-cutter to get internet access on that computer because the Broadcom chip didn't have an open source driver.

It was second semester by now and I had stopped using TextWrangler started learning more about Vim. It was an alien paradigm at first. Famously Vim is modal. The meaning of keys change depending on the mode. Vim doesn't insert text by default. The default mode is called "normal" mode, where most of the letters are commands to move around. Instead of arrow keys, Vim recommends moving around with the home row keys h, j, k, l. This was a shock. I printed out a Vim cheat sheet and kept it next to my keyboard. Eventually I felt competent with it. I felt fast like how I had witnessed that grad student my first semester and I kept editing my programs in Vim for the rest of college.

First Job

My first job was at a defense contractor, L3 Technologies, and my first project was on the gnarliest old C code I've ever seen. Still my tool of choice was Vim and it seemed to work pretty well for me. I mostly kept to the terminal version too because I was too cool for graphics. I got my work done, though it seems hard to remember how at this stage. Vim is a narrow tool, meant to be used in concert with the other command line utilities. My head filled with bash trivia and more Vim trivia. I would have multiple buffers open or even run a shell subcommand once in a while, but it was still common for me to exit the editor to do other things.

Unemployment

When the company announced a merger and everything I knew was being shaken up, I decided to leave that job. It was a boring job anyway. So began my longest strech of unemployment. With more time to myself, I wanted to improve my work velocity. I focused on not just learning Vim, but customizing it with Vimscript. I think by the end of it my vimrc was about 400 lines long and had a bunch of cool automatic things, some of which I documented in my blog at the time.

This was fun for a while, but eventually I realized Vimscript sucked and Vim was not really meant to have many customizations. I grew curious about the other long time contender of the editor wars, Emacs.

See, I already knew from playing around with obscure languages in college that I liked Lisp, and Emacs was built with Lisp. I knew I could make it what I wanted. Changing editors was not an easy thing because I had to throw away years of muscle memory and learn something else. It felt strange. Where were my movement keys from Vim? Hitting control so often was annoying. I tried evil-mode, but it didn't feel right. I knew I was fighting the tide on that one.

But I kept at it and eventually began to enjoy using Emacs. I appreciated the many fun packages. For a long time I read an RSS feed through the Emacs package Elfeed. It was a very different experience than Vim. While Vim was a narrow tool like a scalpel, Emacs is more like a Swiss-army knife. You can use it for everything!

Second Job

I started my second job at Thales Group using Emacs. That was when I discovered Tramp. That job forced me to use a Windows laptop to use their crappy VPN software to access the corporate network. Emacs could run locally and maintain snappy responsiveness despite network troubles but still edit remote files transparently. I don't think I would have been able to stand doing that job with Vim over ssh.

Now

Eventually I left that job when I got an opportunity to join Google. My first team worked mainly with google3, the internal monorepo. Surprisingly there is a small but dedicated Emacs community inside Google that keeps Emacs compatible with all the company specific behaviors, formats, and extensions and I was able to continue using Emacs without much trouble.

My current team is a Linux kernel team that mainly works outside google3. I spend a lot of time looking at Linux source and mailing lists and here Emacs is very helpful. People often laugh at Emacs being able to read email as a joke about too much functionality, but at my current job it is legitimately useful and I respond to code review on the mailing lists exclusively through Emacs. It is so convenient pull up the code reivew in one Emacs buffer, respond, then switch over to the exact file in a flash to make the requested change.

More than that though, I find the ethos of "Emacs for everything" increasingly useful because I never have to leave the environment I've grown comfortable with. I am always at maximum productivity and not slowed down by my tools. Linux is a huge codebase and it is hard to keep track of all the places you are working. If the files you are working on are closed, it becomes a pain to go back to them. With Emacs I never have to close a file. I can have hundreds of files open and my Emacs uptime can last weeks. It's only interrupted when Google forces a computer update on me that requires restart. Along with that, I have Emacs registers and bookmarks to help me keep my place in dozens of files simultaneously. I don't think I could do this job without Emacs.