The Linux Command Line book on top of rug with pink, black, white and brown triangles

“I think the basic problem is that people learn programming backwards.” – Interview with William Shotts, author of The Linux Command Line

Today we’re interviewing William Shotts, author of the #1 bestselling book The Linux Command Line.

In this interview, William answers perplexing questions like:

Why can Linux be so overwhelming?

Why should you learn the command line before learning a programming language?

And what’s this book The Linux Command Line all about?

With over 30 years of professional software experience, William regales us with tales of adventure, perseverance and the almighty Linux command line.

This post contains affiliate links. We may receive compensation if you buy something. Read our disclosure for more details.

1. Tell us a little bit about yourself.

Well, I’m in my late sixties and live with my very talented
actress/singer/dancer wife of 32 years in the suburbs of Washington, DC. I grew up in a small town in Maryland.

I’ve had a varied career. As a boy of 9 I attended the 1964 New York World’s Fair, and the visions of the future I saw there inspired me to become an industrial designer.

The 1964 World’s Fair inspired William’s dreams of industrial design (image courtesy of History.com)

Even though I was an extremely lackluster high school student, I somehow got accepted into the design program at Syracuse University. I did really well there and graduated with an industrial design degree in 1977.

William was accepted into Syracuse University’s design program (Image courtesy of Syracuse University)

My industrial design education has been very influential to my life because of the many things I learned:

1. Most importantly, it taught me how to identify and solve problems, a skill I use almost daily.

2. I did my first computer work there. The Experimental Studios department offered one of the first classes in computer graphics. They had an IBM System/370 and a Calcomp plotter.

I wrote programs on punch cards and waited hours for the jobs to run and if I was lucky, I would get back a drawing; otherwise I'd get back a stack of printouts filled with error messages.

3. I learned photography and darkroom skills.

4. All the other "ordinary" industrial design skills such as the production processes of metals, plastics, wood, and ceramics, human factors and ergonomics, use of machine tools, drawing, and presentation.
William Shotts commandeering a vehicle he designed in his college years.

My first job out of college was as a teacher at a small private school where I taught mechanical drawing and photography.

During this time I got my first computer, a TRS-80 model 1. The first thing I started doing was computer art.

Recent computer art by William

I eventually had both a plotter and digitizing tablet attached and began writing Microsoft Basic Compiler and Alcor Pascal code.

My work appeared in the July 1981 issue of Kilobaud Microcomputing magazine.

Cover of July 1981 Kilobaud Microcomputing magazine (Image courtesy of Internet Archive)

After 4 years of teaching, I started consulting with a few local clients.

In 1985 I took a job as a technical support programmer with a small software company that developed graphics software for PCs. They sold a popular graphics library and developed the first paint program for PCs.

The company was heavy into developing device drivers for PC graphics hardware, particularly graphics cards and printers. Later they got involved in video capture devices and scanners.

William’s employer from the ’80s developed device drivers for printers like this one (Image courtesy of Click Americana)

By the end of my tour there, I had risen to the rank of Director of Engineering Services.

During this time I became increasingly interested in Unix-like stuff.

First, PolyShell (a collection of Unix utilities for MS-DOS) and later, Mark Williams Coherent (a low cost small model Unix for PCs).

Mark Williams Coherent floppy disk (Image courtesy of Internet Archive)

Around this time (1992) I started using the Internet.

My next role was National Operations Manager for an FBI project that developed, deployed and operated a forensic imaging system used by firearms examiners.

This system consisted of Sun workstations and servers located at various crime labs nationwide, all connected to a private data network.

William spent some time as the National Operations Manager for an FBI project

I managed a team of system administrators and did a lot of configuration management in addition to keeping the network going. I had a Sun SPARCStation on my disk and learned a lot of Unix.

In 1996 I switched my personal systems from Coherent to Linux.

After the FBI gig, I got recruited back to my previous company where I became Vice President of Technical Services.

In this role I led the technical support, quality assurance, documentation, and production teams.

Much of my work involved developing a software quality program for the company.

Since my retirement, in addition to my writing, I have continued my photography and computer art work. I have a fleet of computers that I try to keep busy. I run an all-Linux shop; mostly Ubuntu and Debian.

2. Many consider The Linux Command Line to be a modern classic. What inspired you to write it?

2nd edition of The Linux Command Line on No Starch Press

To understand the story of The Linux Command Line (TLCL), we have to start in the year 2000 with the creation of LinuxCommand.org.

I had been using Linux for about 4 years. At that point, I was really enjoying all the free (as in freedom) software I was using and I felt it would be good to give back to the community and help it grow.

I knew that people outside the Unix world would have a lot of trouble wrapping their heads around how the command line works.

I considered this problem for a while and decided on a carefully sequenced set of tutorials that would lead the reader through a series of experiences to build, layer upon layer, the foundational skills needed for proficiency with the command line.

Using this approach, I wrote the LinuxCommand tutorials. These were divided into 2 major sections: Learning the Shell, and Writing Shell Scripts.

Learning the Shell on LinuxCommand.org

Jump ahead to 2007. LinuxCommand had gotten some traction and some publicity.

I got an email from an acquisitions editor at a major textbook publisher wanting to know if I would like to write a book about shell scripting that would become part of a series they published.

They sent me an example book from the series and I gave it a look.

I didn’t like it.

I countered that I could write a book based on the LinuxCommand tutorials.

They told me to submit a proposal along with an outline of the proposed book.

I spent a few weeks writing the outline, expanding greatly on the ideas in LinuxCommand. I submitted the proposal and… crickets. 🦗

I never heard back.

Somewhat disgusted, I decided “Heck, I have this outline, I’ll just go ahead and write the book, self-publish and post it free on LinuxCommand.org.”

So I spent the next 2 years writing a page a day until I had the complete book.

I unleashed The Linux Command Line, First Internet Edition on the world in December 2009.

Over time, the Internet Edition became increasingly popular and, in the fall of 2010, I received an email from an editor at No Starch Press asking if I would like to commercially publish the book.

After negotiating a publishing agreement and a lot of editing and technical review by the excellent people at No Starch Press, the first edition of The Linux Command Line: A Complete Introduction was released in March 2012.

The rest, of course, is history.

3. That book sold over 100,000 copies. What’s drawing people to it?

The book has turned out to be wildly popular, something I never expected.

When I wrote the book, I didn’t plan on it becoming a commercial product; it was going to be something I just gave away.

Not only has the print edition from No Starch Press sold over 100,000 copies, the book has been translated into 7 languages and the Internet editions (5 of them so far) have been downloaded well over a million times.

The printed book is also available in over 1000 libraries world-wide.

I think the reason the book has found an audience is that it solves the problem of effectively teaching how to “live” on the command line.

The book tries to teach not only the dry technical aspects of the subject but also the history and technological context of the Unix culture.

I try to relate to someone coming into the subject cold, so I start at the very beginning and teach a bunch of computing concepts in addition to the shell commands.

I also tell a few jokes.

4. Why does Linux seem so overwhelming for the typical new programmer?

I think the basic problem is that people learn programming backwards.

By this I mean if someone’s first experience is learning a modern language, say Python, they will be able to write code but they still won’t know how to “run” the computer.

That’s what the command line is for. People should learn the command line first so they can get control of their programming environment.

Moving from a modern, well-ordered programming language to the shell is a very jarring experience because of the shell’s ancient roots and its dual role as both a command line interface and an interpreted scripting language.

To many new users, the shell is very arcane and doesn’t make any sense.

This is compounded by the way many people learn the command line — in little bits and pieces. Doing it this way never gives one the big picture of how the command line works and how it all works together.

This is where my book comes in. It tries to present a complete view and make it sensible.

5. What’s your favorite Linux command line hack?

I’m not sure I have a favorite; they’re all good.

I do have a lot of aliases and shell functions in my .bashrc file. These are great for creating shortcuts for operations I perform frequently.

For example, since I install software updates almost daily, I made this for my Debian-based systems:

alias update='sudo apt update && sudo apt upgrade'

A silly little hack I recently added to my .bashrc was this:

alias man='MANWIDTH=75 man'

This alias takes advantage of the shell feature where you can set a temporary environment variable at the beginning of the command. In this case, setting the MANWIDTH variable when the man command is run.

This tells man to set the line length to 75 characters which makes man pages easier to read on wide terminal displays.

6. Tell us about LinuxCommand.org.

It soldiers on. For those who are unfamiliar with the site, it’s kind of the book in miniature.

It has tutorials that are brief versions of some of the chapters in the book as well as other command line resources.

It also contains a newer section called “Adventures” upon which my second book, Adventures with the Linux Command Line, is based. This collection of tutorials is provided as a sequel/supplement to TLCL.

Screen layout for Midnight Commander, a character-based directory browser and file manager

It covers topics I consider both fun and interesting. I am continuing to add to this.

During the early months of the pandemic, I gave LinuxCommand.org a major freshening to update the text and bring the site up to modern web standards. It’s now mobile-friendly.

7. As someone who has been in the business for over 30 years, what advice can you give to aspiring programmers?

This is a tough one.

On a basic level, I would suggest that you work hard, save your money, and retire early.

Programming is really a young person’s game, so have an exit strategy.

If your job involves making a rich person richer, make sure you get your cut.

With that bit of mercenary advice out of the way, I would say this:

  • I think that your work and your life should be connected.
  • You should do something you love and while you’re at it, try to do something that will make the world a better place.
  • Use your powers only for good.
  • Stay flexible. There is enormous churn in the tech world.
  • Over the years, whole technologies come and go. What’s hot today won’t be hot tomorrow, so be ready.
  • But beware, there are lots of fads too.

Sometimes something really important happens and creates what I call a “wave.” I have ridden 3 waves in my career to great effect.

I rode the PC wave in the mid-1980s, the Internet wave in the late-1990s and finally, the Linux wave in the mid-2000s.

Right now we’re finishing up with the mobile/social wave and people are looking for the next one.

AI and machine learning is hot and will probably remain so for a while.

Information security is always a good bet.

Quantum computing is on the horizon, but it still seems a way off.

Whatever it turns out to be, hop on and enjoy the ride, but realize that all waves come to an end, so always have your eyes out for the next one.

8. And here’s our last question for William Shotts – Is there anything else you’d like to add?

I often get asked what the difference is between The Linux Command Line, Internet Edition (the freely distributable version on LinuxCommand.org) and The Linux Command Line: A Complete Introduction, published by No Starch Press.

The answer is that they are almost identical.

In terms of content, the only difference is that the Internet Editions have “Further Reading” sections at the end of most chapters whereas the No Starch Press editions do not. That’s about it.

In terms of edition numbers, the first No Starch Press edition aligns with the second Internet edition and the second No Starch Press edition aligns with the fifth Internet edition.


Readers of this William Shotts interview may also be interested in: