A Brief Introduction to Vim

After my initial hazing, I have decided I’m in love with Vim.

It turns out that learning Vim is a lot like learning to type properly. At first, it really slows you down because you have to teach your fingers what to do. Later on, after your brain gets the heck out of the way and lets your fingers take over, the investment really pays off.

I’m not yet to the real payoff stage, but I can see it on the horizon.

Here are a few tips for anyone wanting to learn Vim:

Why should I learn Vim?

Because once your fingers learn the keys, you will be able to move through your programs much more quickly, use shortcut commands for every action you can possibly think of, and understand what’s going on if you pair program with someone who uses Vim.

When should I learn it?

Whenever you can afford to temporarily cut your productivity in half while your fingers learn the movements. In other words, NOT when you are in the middle of learning a new coding language or have a major work or school deadline coming up.

How should I start learning?

1. Try out VimAdventures for a fun adventure-game-style tutorial. I only did the 3 free levels, since I didn’t like the idea of a 6-month subscription. (I go through that kind of thing in a week, so I’d want either a 1-month subscription or a permanent download that I could come back to for review.)

Vim Adventures

Vim Adventures

2. Download Vim and then open the Vim Tutorial. Apparently that’s as easy as typing


on the command line. If you read my last post about Vim, you’ll know that I spent a good long time trying to figure out how to get into VimTutor from inside Vim. Do not try that at home.

3. Get more practice by downloading these excellent Vim Exercises. If you have Git installed, you can run the following command in the terminal:

git clone https://github.com/skilldrick/vim-exercises.git

(If you don’t have Git installed, you would probably be better off investing your time learning Git.)

4. Start coding in Vim. Do some Project Euler problems to some other code exercises using Vim.

What else should I know about Vim?

Vim has several different modes that it helps to be familiar with:

Name Description help page
normal For navigation and manipulation of text. This is the mode that vim will usually start in, which you can usually get back to with ESC. :help Normal-mode
insert For inserting new text. The main difference from vi is that many important “normal” commands are also available in insert mode – provided you have a keyboard with enough meta keys (such as Ctrl, Alt, Windows-key, etc.). :help Insert-mode
visual For navigation and manipulation of text selections, this mode allows you to perform most normal commands, and a few extra commands, on selected text. :help visual-mode
select Similar to visual but with a more MS-Window like behavior. :help select-mode
command-line For entering editor commands – like the help command in the 3rd column. :help Command-line-mode
Ex-mode Similar to the command-line mode but optimized for batch processing. :help Ex-mode

The 2 modes you will probably use most at the beginning are Normal Mode and Insert Mode.

Normal mode is where the keyboard keys are interpreted as shortcuts. For example, the letter “j” would move the cursor down. From here you can move into insert mode with several different key commands, such as typing “i” or “a”. The only difference is where the text is inserted. ‘i” will insert text starting at the current position of the cursor. “a” will insert text starting at the position after the cursor.

Insert mode is where whatever you type is interpreted as text. The letter “j” would just put a “j” wherever your cursor is. To get back to Normal mode, you press Esc.

And that’s it. That’s pretty much everything you need to know to get started.

I got some excellent tips from readers on my last Vim post, and they helped me out a lot.

If anyone else has tips or questions, please leave a comment. Thanks!



I’ve finally decided to learn Vim, which is kind of like saying:

“I’ve decided to learn to fly. Watch closely as I dive from the edge of a high-rise building into a hungry bowl of sharks.”

Vim Sharks

Vim Sharks

The first obstacle is “How do I even open Vim?” Because, apparently, Vim is too good for double-clicking, which is fine, but then…why do you need an Icon?

Luckily my wild guess of

                               vim .

on the command line worked.

Into The Shark Pit!

Voila!    Into The Shark Pit!

Now that is a super-helpful start page.

Looking closely, I see this:

Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec

Ah, that’s good. Press F1 for help.

Whamp!!! (that’s the Mac sound for “Wrong button, dumb-ass.”)

Okay….let’s try typing


(Bracing self for Whamp sound…) Aha! No whamp!! Making progress.

Dear Lord, what am I looking at? 

Move around: Use the cursor keys, or “h” to go left,
“j” to go down, “k” to go up, “l” to go right.

Okay, let’s try “j” to go down.


What the?! Oh, my fingers are in the wrong place. Why would the keys be “hjkl” instead of “jkl;”? This is not what Mavis Beacon taught me to do!

Scrolling down…


Okay, let’s see…

|tutor|         30 minutes training course for beginners

Oh, great! A tutorial! Not sure why I had to know basic Vim commands to get to it, but at least I’m here. Typing:

 |tutor| Whamp!!

:|tutor| Whamp!!

tutor Whamp!!!

:grep |tutor| (silence)

:cat |tutor| (silence)

:dog |tutor| (silence)

:ostrich |tutor| (silence)

:WTF?!!!!!! (silence…)


Really Vim? Really?

Okay…let me check that Vim book a friend recommended:

 “This book will teach you everything you need to know about Vim…assuming you have already been through Vim Tutor.”

Holds computer above head, prepares to heave it through nearest window…

And then, salvation! I spot a tiny link at the bottom of the page, which takes me to a VimTutor help page. (Yes, there is a Help page for their Help page).

For OpenVMS, if Vim has been properly installed, you can start vimtutor from a
VMS prompt with:


I see. I’m supposed to type “@VIM:vimtutor”.

Because, yes…that is so intuitive.

Thank you, Vim. I have officially been hazed.

Getting Started in Web Development: FAQ For the Absolute Newbie

Not too long ago I decided I wanted to learn to code, and was trying to figure out where to start. I still have a lot to learn, but I’m far enough along to offer some advice to the people who are just beginning their journey.

Here are a few common questions I hear from people wanting to get started in web development, along with my answers.

1. How Do I Get Started?

Start by taking Codecademy’s HTML & CSS course. Then take their Ruby course. This will help you figure out what type of programming you are interested in.

2. How Do I Choose A Focus?

–> What did you enjoy more: moving elements around on the page and seeing the result with HTML & CSS, or working with programming concepts like loops, hashes, and arrays in Ruby?

–> Do you prefer visual things like drawing or design, or do you prefer abstract things like logic problems, puzzles and math?

If you are visual or preferred the HTML & CSS course, you may be interested in Front End Development. This means being the person who develops the part of a website that a user sees.

If you are an abstract thinker or preferred the Ruby course, you might be interested in Back End Development. This means working on the hidden logic that makes complex web applications work. This can be done in many programming languages, such as Ruby or Python.

3. What’s The Next Step?

Codecademy courses give you a good overview of the language, but they don’t give you exposure to some of the tools you will need to know, such as text editors, the command line, and coding documentation. The next step is to do a tutorial that will let you make real, functioning code using the tools that professional developers use.

Front End (HTML & CSS): HTML Dog has some excellent tutorials. Use those as a reference, and build a few websites on your own. Once you feel comfortable with HTML and CSS, try learning Javascript.

Back End (Ruby): Learn Ruby The Hard Way will introduce you to the tools you need, and teach you how to use documentation to solve coding problems. Once you feel comfortable in Ruby, try Hartl’s Rails Tutorial, which will teach you the basics of the Ruby on Rails framework. Ruby on Rails lets you use your Ruby skills to build complex websites.

4. Should I go to a Coding Bootcamp?

That depends: Can you invest the time and money to do so?

If the answer is yes, then a good coding bootcamp is worth the investment. It will keep you on track and give you the opportunity to be surrounded by mentors and other students that can be a great resource for you.

If the answer is no, don’t let that discourage you. It is 100% possible to teach yourself everything you would learn in a bootcamp. You will, however, need to find a mentor (or, preferably, several) who can help you get past roadblocks and figure out where to focus your attention.

5. How can I Find Help From Real, Live Humans?

The Best Places to Get Help:

  • CodeNewbie Weekly twitter chat, podcasts and discussion board (FREE!)
  • CodeMentor Paid individual mentoring.
  • Local Meetups: You may have to try several before you find one that welcomes and encourages newbies. Read the descriptions on http://www.meetup.com, and see how the attendees describe themselves. Look for meetups with a good mix of experience levels.
  • Exercism Work on practice problems and get feedback on your code from other developers. (FREE!)

Have more questions that I haven’t answered? Leave a comment and I’ll do my best to answer.

Why I love To Code

I’ve always had a hard time explaining why I love to code. For other coders, it requires no explanation.

“Because coding is awesome.” (nod at each other for several minutes). “Yep.” (nod some more)

Explaining it to someone who doesn’t code is where it gets complicated.

In fact, when you’re talking to a non-coder, it’s difficult even to explain what coding is

I remember trying to tell one of my coworkers what it’s like to teach yourself programming from scratch. After a lengthy attempt-at-explanation, she said:

“Oh, so it’s kind of like doing a puzzle.”

Kind of… if you were doing that puzzle blindfolded, and your only source of assistance was a studio audience of 100+ puzzle enthusiasts who had never seen your puzzle, and were using their vast knowledge of completely-unrelated puzzles as a reference.

“Try the green piece!”

“What green piece?! I can’t see color!”

“I’m pointing right at it!”

“I can’t see your finger!”

(distant voice) “No, the red piece! Try the red piece!”

All of this, of course, only makes it harder to explain why I love it.

The closest I can come is this:

Because it’s magic!

With coding, if you can imagine it, you can conjure it. You may turn a few people into toads along the way, but it is possible.

Yes, it’s incredibly frustrating at times. Yes, my brain hurts at the end of each and every day. Yes, I have made many, many more toads than princes. 

But–when something finally works….

When I finally find that perfect puzzle piece…and it fits….


HOLY F-ing F, it fits!!!

I am a GD wizard.

How To Choose: Rails, Mobile, or Front End Development


Once you decide to learn to code, the next decision is “What programming languages should I learn?”

It’s a lot like choosing a major in college. How can you choose a concentration, when you have too little experience to understand the different paths?

My code school, The Iron Yard, currently offers 3 coding courses: Ruby on Rails, Mobile Engineering (iOS), and Front End Engineering.They all offer excellent job prospects, but each course appeals to a unique type of student with differing goals.

Here are a few of the differences I have noted:

  Rails iOS Front End
What you can build Complex websites, such as Twitter or Groupon, which handle large amounts of data (including large numbers of users). Fully functional mobile apps. The side of a website that users interact with. You will be able to make visually stunning websites with interactive features, like spinning graphics and interactive features that run in the browser (meaning the page doesn’t have to reload or redirect).
What you won’t have the skills to build This course won’t give you the skills to make your websites pretty. To have pretty websites, you will need to learn more HTML, CSS and Javascript than this course has time to teach you. You also won’t be able to make mobile apps, but your “backend” skills can be used to support the data of a mobile app. This course won’t give you the skills to make apps that require storing a lot of data or apps that run on a desktop or laptop rather than a mobile device. This course won’t give you the skills to make mobile apps or websites that store large amounts of data. It does not focus on the “backend” skills to make an app that can store user profiles and content that needs to be saved (like “tweets”).
Personality Traits that are Common in this Course Likes abstract concepts, not very visual, cares what the app does but doesn’t care how it looks. Perhaps a little more social than the other classes. I hear this group goes out to non-networking events together more often than the other classes.  More visual, more likely to have a design background. Would rather have a website that looks great than one that has complex features.
Who You Might Build For Start-ups and small, established tech companies are the most common customers (either as an employee or freelancer). Non-technical companies probably won’t understand what you do. You can charge the end user directly (by charging for downloads), but it is difficult to make money this way. It’s generally more profitable to freelance or work for a consultancy company that makes apps for start-ups. Can work for a start-up or freelance. Non-technical companies may hire you to make websites.


If you know Rails, iOS, or Front End Development, what do you like or dislike about your specialty? What common characteristics have you seen among the people who enjoy it?