Vienna, 7pm CET: A lone individual attempts to gain entry to a critical system in the United States via a redirection point in Amsterdam.
This could be the first sentence in a new cyber-espionage thriller. Or it could be the first sentence about regaining the appreciation for a console text editor. Yep, this is definitely about learning to use VI (well really VIM) again.
My first exposure to VI was in the Emory Computer Science program. Emory’s program was all about Unix. All the courses were taught on Sun hardware running the Solaris operating system. Intro classes were mostly in Java, the more advanced in Unix system call heavy C or C++. At a time when Microsoft dominated the business world and the available jobs, this concerned my father. In retrospect Emory’s program was prescient, I haven’t touched a Windows system in nearly a decade.
The heavy Unix focus brought with it a strong emphasis on VI. The classes were taught in VIM, the materials on logging in remotely mentioned VIM, professors that launched Emacs were given stern looks. Of course, students could use whatever text editor they wanted, some switched to Pico, but first they would have to figure out how to exit VI.
At a time when Microsoft dominated the business world and the available jobs, Emory’s Unix focus concerned my father.
I was obviously one of the more advanced students and part of the privileged elite that dedicated themselves to deciphering the output of the
:help command. We not only figured out how to exit VI, but launch VIM (VI iMproved). We discovered
.vimrc and figured out how to configure things like auto-indent and number of spaces in a tab stop. Over the course of the semester, our cohort learned the the ins and outs of the editor. Knowledge we could have gained with a conversation with the very helpful lab assistants or grad students, but I digress.
Armed with this advanced knowledge, it wasn't long before I discovered commands like "split," "vsp” (vertical split), and “=“ (format code). Explaining this in a chatroom to someone who was struggling with what they thought was a silly, cumbersome, and limited editor brought out the exclamation, "wow you're like the VI Jedi." (Immediately entered:
/nick vi_jedi, never changed back).
“Wow you’re like the VI Jedi”
The Road Away
My entire Emory career was in VIM: all my projects, some of my papers, and my entire Master’s thesis. But this was 2002 and the world still ran on Microsoft Windows. We went to the ACM tournament, I sat down in front a Windows machine and was lost. Furthermore, I knew two programming languages, C and Java. I hated C and knew from the Internet that Java programmers used what’s called an Integrated Development Environment (IDE). VIM is powerful, but IDE’s knew what you were doing. They knew the syntax of the language, they could hook into version control systems, and some could even compile as you type (which is like spellcheck for your code).
iPad: The Beautiful VIM Device
iPads don’t have to come out of the bag. An SSH connection, in this case provided by Prompt and a droplet, is all that’s needed to harness almost all the computing power in the world. This is how I found myself fixing a bug early in the evening, 5,000 miles from my computer, while my wife and daughter went out for ice cream.
While the rust slowly wore off, I came to realize that I really missed using VIM and working from the command line. If you think about the life of VIM, for 40 years, hundreds of people have spent countless hours to make it do one thing incredibly well. They way it does things is non-standard, the learning curve is a sheer cliff, but once you know it, it’s great at editing text. Every keystroke has meaning, making it possible to edit a file on a loaded server or through a latent connection. Once you get immersed, you'll find yourself missing its core features in nearly every other editor. Even in my pro-IDE days I would spend time searching for at VIM drop-in that would give me the best of both worlds.
The Way Back
I’m a big fan of using the right tools for the job. When the job is writing code in a verbose, restrictive, and statically compiled language like Java, and IDE is the right tool. Today’s modern terse, dynamically executed, and extremely flexible languages just feel right when used in a similarly focused environment.
If you spend time working on computers, but have not spent much time working in the command line, you should give VIM a try. If nothing else, it’s a way to share in the experience of some of the computing greats. So much of what we build on today exists because of some code that someone wrote in Vi.
So much of what we build on today exists because of some code that someone wrote in Vi.
Beyond nostalgia comes the practical applications. Sure the Dev Ops Sages state that we are in a post-shell-login world, but that’s a little too idealistic. If you’re a software engineer doing important engineering work, you will eventual have to jump onto a server to see what’s going on and any Unix machine is almost guaranteed to have VI installed. Just to prove a point, if you are reading this on a Mac, open
Terminal.app and type
vi. Look it’s there (now type
:q to quit). It’s ubiquitous.
To me, there’s just something that feels right about writing code in VIM. My hands don’t have to leave the keyboard to find the mouse just to move around the file. There is a command to do almost every manipulation that I might want to do. But, mostly, when I’m using VIM, I feel like a programmer building things. When so much of my job is not that, it’s nice to have a dedicated sanctuary of code.
Did you like this? Please share:
On Leaving Startup Life
Musings on the transition from being in a startup to working for a very large company.
Another new Manager Challenge: Managers Have a More Stakeholders
Bad managers never shift from the mindset of an individual contributor. Great managers broaden the number of stakeholders when making decisions.
Self-Evaluating Success as a Manager
In the first part of my series on understanding the difference between management and contribution, I focus on the challenges of evaluating success.