Teach Yourself Coding: How to Get Started Without a Computer Science Degree

Say you’re a liberal arts major. And you want to code. What do you do?

First, know that you are in good company. A common sentiment among college graduates — as well as a demonstrable census finding — is that modern workers seldom directly use skills they learned in their undergraduate majors. Personally, I made my way to the tech industry after receiving a liberal arts degree. I’m far from alone; the ranks of tech workers are filled with migrants from just about every discipline (click the tab "Non-STEM Majors" for a good look).

Why Code?

There are lots of reasons to code — besides its intrinsic fun and the problem-solving opportunities it brings. Here are key aspects of coding that you’ll need to know to get started.

Importance of Computer-Related Technologies

According to the Bureau of Labor Statistics, in the first decade of this century, computer and IT-related occupations were the single largest source of wage and employment growth. The coming decade will likely see a shift toward health care, but computer-related industries will remain near the top. With the increasing pervasiveness of computer and computer-assisted technologies in all industries and areas of life, the importance of IT skills will only continue to grow.

Marriage of Technology and Human Creativity

I’m somewhat skeptical of the oft-repeated claim that “coding is the new literacy.” Instead, I’m more inclined to believe that general technological literacy — specifically, understanding the functional relationships between automated systems and human activity, and how they can complement each other — is actually more directly meaningful in a postindustrial economy.

This is true in both professional and recreational capacities. To use gaming as an example, the world’s best chess players today are no longer sophisticated game artificial intelligences (AIs) like Deep Blue, nor coding prodigies or lone geniuses like Garry Kasporov, but rather composite teams of humans and AIs that marry human creativity with synthetic memory and processing power.

Power and Breadth of Coding

That said, coding confers an ability to create that other tools generally can’t match in power or versatility. At its most basic elements, coding allows for the automation of repetitive tasks, which is what I do at my job when I’m not contributing articles or answering users’ questions on Noodle.

At higher levels of sophistication, coding allows for the development of dynamic and interactive programs, some of which interact directly with the physical world, like software that guides drone flights. Coding is a valuable skill for both professional and hobbyist purposes.

Semantics: Coders, Programmers, Developers, and Engineers

In the realm of software, the words “coder” and “programmer” are catch-all terms for any person who feeds instructions to a computer in a replicable and automated way. Technology blogger Chris Lema has suggested that the difference between a programmer or coder and a developer is only one of degree, as the title “developer” simply suggests functioning in some kind of professional capacity.

The terms “developer” and “engineer” are often used interchangeably to describe people who code or program professionally. Strictly speaking, all engineers “develop,” but not all developers “engineer.” Engineering suggests highly structured and systematized thinking that generally requires a formal and rigorous educational background.

So You Want to Code ... Now What?

Once you’ve decided to take the plunge, you’ll have a new set of exciting challenges before you. Here are key ideas you’ll need to consider as you enter the world of coding.

Choosing a Language

Noodle contributor Cho Kim wrote an excellent overview of various programming languages for beginners. Cho is personally a huge proponent of Javascript for its full-stack Web development capabilities. (In Web development, “full-stack” indicates that a coding language can handle client-side, server-side, and database operations.)

By contrast, a plurality of respondents on a Lifehacker poll preferred Python for its ease of use and versatility, and I’m inclined to agree. Udacity, too, uses Python for its introductory computer science course. Although my personal experience has been Python-centric, what follows should be generally applicable.

Moving From Free Tutorials to Bootcamps

There is a wealth of free online material to get started with coding. My personal go-to as a script kiddie was Zed Shaw’s "Learn Python the Hard Way". Shaw has written tutorials for other languages, as well. True to form, these emphasize rote learning and the repetitive execution of basic concepts as drills. The capstone of the course is the coding of a text-based game, a project that requires students to build a self-contained application.

Unfortunately, “Learn Python the Hard Way” might be both dull and overwhelming for the uninitiated, not least because it is essentially a tutorial in book form.

Udacity’s Computer Science 101 course, on the other hand, is both free and engagingly interactive, as are many of the MOOCs offered by EdX and Coursera.

Other more strictly tech-oriented companies that offer interactive Web-based tutorials include Codeschool, Codecademy, and Treehouse, whose courses are either free or relatively inexpensive.

Other companies, such as Thinkful, are pricier, but they carefully curate their content from a variety of providers and offer in-person help and mentorship.

Beyond the Internet, coding bootcamps like those offered at General Assembly, Flatiron School, and Hacker School also provide in-person instruction and the cross-pollination of ideas.

Learning by Doing

I’m a strong advocate of project- and inquiry-based learning. When you begin, it is helpful to have a realistic and concrete goal for what you intend to develop. Of the examples I cited earlier, “Learn Python the Hard Way” provides the goal in the form of a game, while Thinkful leaves the capstone project open-ended. In Thinkful’s Python course, my capstone project was an app that pulled and counted keywords from think tank publications. (The project, incidentally, could have replaced my college data-entry job, for which I manually pulled research papers from major think tanks.)

Continuing to Grow: Practice, Mentorship, and Motivation

Coding is very much a self-directed and self-paced activity, and ongoing practice is the only way to keep improving. In contrast to Zed Shaw’s advice, though, I would argue that rote repetition will only allow you to scratch the surface of coding, especially given the pace at which technology changes. Continually seeking novel projects and challenges is the only way to stay engaged and current in your skills.

As with other abilities, human feedback is essential, as well. Code reviews — essentially peer editing — are your friend, and it’s valuable to find a community that is welcoming and willing to help. On the Internet, there are question-and-answer sites such as Stack Overflow, which provides virtual communities of experts who are willing to answer questions ranging from the extremely naive to the extremely sophisticated. In the physical world, meetup groups like New York Python and hacker spaces such as NYC Resistor serve a similar function.

Staying Motivated

As a tool and a skill, coding has the potential to be immensely powerful: It can as easily be a force for monetary reward as for positive change. What propels each of us to learn new skills will vary. Personally, nothing motivates me more than the pressing needs of my current job, my own curiosity, and my desire for intellectual challenges. You will, of course, find your own reasons.

Happy coding!