Programming Skills Every Non-Programmer Should Have

I recently came across Rahul Singh's Non-Programming Skills Every Programmer Should Have Thanks to Aaron Amstutz. The post outlines six important areas of personal development for programmers:

  • Social Skills - Be friendly, helpful, and genuine
  • Design Skills - Think about how things look and function, and their ultimate purpose
  • Business Skills - As an individual, you're a "brand" within your organization and externally on behalf of your organization
  • Startup Skills - Make things you believe in, learn to self-manage and manage others as part of a small team and understand the chaotic nature of a new business
  • Creativity/Drawing - Look at problems from different angles, think outside the box, and have fun while doing so
  • Spiritual - Meditate, clear your mind, and find satisfaction by having a bigger purpose than sitting in front of a computer all day

It's a great post, and as soon as I read it, I flipped the question around and asked myself, "What dev skills and knowledge do I have that benefit me day-to-day working with a bunch of programmers at a digital strategy agency?" Not surprisingly, there are a number of things that come to mind!

  1. HTML & CSS
  2. Content Management Systems & Server-Side Programming Languages
  3. The Inspector
  4. Version Control
  5. Domains & Hosting
  6. A Passion for Knowledge
  7. A Willingness to Break Things

1. HTML & CSS

HTML and CSS have long been at the core of building websites, and conveniently enough, they're the easiest to learn as a complete beginner before jumping into more in-depth programming languages. I'd go beyond saying anyone working with programmers should know HTML and say that EVERYONE could benefit from some basic HTML knowledge. It's key to understanding the underpinnings of the web and how information is presented and designed for the end-user.

Bonus: Browser Scripting!
Once you have your head around HTML an CSS, take a look at Javascript and jQuery. They're the primary building blocks for adding interactivity to websites and integrating 3rd-party services. Javascript syntax is fairly simple, and jQuery provides a concise Javascript library for quick and easy development. As a non-programmer, it's not critical to know browser scripting languages inside and out, but be sure to understand how scripts work and the sort of functionality they provide.

But How?

  • W3schools.com has been a great online resource for a long time when it comes to web languages, and is still a good place to get started. They can teach you the basics of elements, attributes, formatting, and how it all comes together to form a website using HTML. They also lay out CSS and the box model in a way that non-devs can wrap their heads around. With regards to browser scripting, it's a good spot to read through basics of Javascript, AJAX, and jQuery too.
  • Pull up your favorite website and, right click, and "view source" to take a look at it's source code. One of the simplest ways to learn the language is to take a look at the HTML source and the web page next to each other to see how the language translates into output on a page and how CSS styles and classes result in a finished product.
  • DIY - There's no better way to learn than by getting your hands dirty. Build yourself a basic website using nothing more than a text editor (we're fans of Sublime Text) for one of your hobbies or create a personal landing page on the web.

2. Content Management Systems & Server-Side Programming Languages

Once you have a good understanding of the basics around HTML, it's time to blow your mind with server-side languages and functions! Imagine that you have a 50 page website and each page has unique but similar content (say a title, a couple images, and a main content section). It'd be tedious work to manually create each page by writing HTML. Instead, throw all of your content in a relational database, and use server-side languages to dynamically generate content. Essentially what happens is a) a webpage is requested by a user, b) the database returns content which is plugged into the appropriate functions in the server-side language, and c) the server-side language spits our the requested webpage as HTML for your web browser.

Modern CMS solutions like Drupal and WordPress are based on server side languages (PHP, in both those cases). The most important function they play is sitting on top of a database to provide a user-friendly administrative experience for managing content on the site. The modern CMS has revolutionized the way most major websites are built by allowing programmers to create sites that can then be managed and updated by non-programmers. It's worth understanding how inputs on the administrative side of a CMS result in outputs on web pages.

But How?

  • Again, w3schools provides some good basics on server-side languages such as PHP and SQL. There's no need to get to the point where you can write code from scratch, but take some time to familiarize yourself (understand syntax, variables, conditional statements, etc.) and be able to look at a function and understand generally what it does.
  • While Metal Toad generally uses Drupal as our go-to CMS for the large, flexible, and customized sites our clients require, as a beginner I'd suggest sinking your teeth into WordPress. Visit Wordpress.org, download the WordPress files and perform their 5 minute install (which will certainly take you more than 5 minutes the first time). Once you have WordPress installed, choose a free theme and then jump into the PHP code and behold the power of The Loop. Mess with some functions in the header, footer, and customize your theme a bit!

3. The Inspector

Once you've got your head around the basics of web languages, browser inspectors are godsends. My personal favorite is Chrome's Developer Tools. With these tools, you can inspect page elements and see the specific code producing them. Better yet, you can modify the code and see the output in the browser window in real-time! For developers, they're incredibly handy to aid with debugging. For you, they can be important tools for QA, and yet another way to get familiar with code.

But How?

  • This one is easy! In Chrome, right-click on a page and "inspect element" to bring up the tools. Then start messing around - you can't break anything! Additional features include a look at resources, a network request tracker, an error console, and other page speed and performance tools.

4. Version Control

Repositories, branches, merges, pushes, pulls, dev, staging, prod! Web development file management can be a bit confusing at first, but thankfully the GUI file managers of modern operating systems are a good place to start as a basis for understanding the fundamentals; you can move files between folders, make a copy in multiple locations, or overwrite files with newer versions. Version control's purpose is to bring order to the chaos that comes with multiple people working on the same files at the same time and managing multiple copies of those files in different locations. Take the time to learn common workflows for web development with multiple copies of a site and how developers manage to work together without creating conflicts in the code they're writing.

But How?

  • A Visual Guide to Version Control gives a good high level overview complete with a glossary and some handy diagrams.
  • Github is a great place to start. There is ample documentation on it works, and it's generally regarded as the best version control solution available. Plus, GitHub has some GUI file management tools to get you started before you're ready to take the plunge and start using the command line.

5. Domains & Hosting

Domain names technically aren't even necessary to navigate the web. They're essentially just a human-friendly layer on top of IP addresses. That said, they've become a crucial part of the online experience, so it's worth knowing how a domain name works and the purpose of DNS records. If you can figure out nameservers, A records, CNAME records, and MX records, you're golden for all practical purposes.

On the hosting side, you'll want to know enough to talk intelligently about what the software installed on servers generally is and what purpose it serves. It's also worth knowing the difference between shared hosting, virtual versus dedicated hosting, and of course, "the cloud".

But How?

  • Wikipedia has good basics on domain names and DNS
  • What do you know! W3schools has a hosting tutorial.
  • A hands-on approach follows up quite nicely on the task of setting up a WordPress site above. Once you've downloaded the files, purchase a domain name and some cheap shared hosting and use an FTP client to place those files on your hosting. Set up the domain name to point to your directory where the WordPress files are located, and all of a sudden you have a working website address pointing to a live website.

6. A Passion for Knowledge

Learn how to learn and have a passion for ongoing education! A key skill of any good programmer is both the ability to pick up new technologies and languages quickly and the resolve to be dedicated to continued learning. Programming is an ever-changing field, and core languages, technologies, and development methodologies used today may be completely irrelevant in five years. As either a programmer or a non-programmer, be okay with the fact that if you don't stay current on technology trends, you'll fall behind the curve. It's not a particularly profound notion, but If you're not passionate about investigating the latest and greatest in technology, it's going to be hard for you to succeed in the industry. Don't get stuck in a rut relying on decade-old technologies, because someone is coming up with a better solution right this moment!

But How?

7. A Willingness to Break Things

One of the secrets to programming that I think is a major barrier for many people trying to learn is that it's okay to break things. When you're learning, I'd say it's even encouraged behavior. A common response I've seen from less tech-savvy people is that they're hesitant to try something until they have an understanding of all the steps involved. The bad news with programming: you're never going to fully understand all of the steps involved until you've tried them.

There's no better way to learn than by trying to fix some code you managed to break. Delete a line of code and see what happens. Add twelve if statements within each other. Write some messy code. Just experiment until it works. There's no such thing as someone new to programming writing clean, optimized code. If you do, you're not pushing your limits far enough to learn. The good news with programming: it's generally hard to impossible to break things to a point that they can't be fixed.

But How?

  • See the topics above. By the time you get through all of that, I guarantee you'll have a dozen more thing you want to learn more about.

If you're in a position where you interact with programmers (which is an increasingly common occurrence in many modern workplaces), you'll benefit from being able to speak their language to some extent, and they'll appreciate that you're interested in their area of expertise. There's nothing keeping you from developing those skills but time; just jump in and learn how to swim. Consider the advice above your kiddie pool!

Any other programming skills and knowledge you think are important for a non-programmer to possess? Let us know!


You mentioned two of my favorite things in the world.

Learn how to learn. This is intrinsically valuable, and applies to everything, not just programming.

Break things! I've never understood a piece of code until I broke it. Or for that matter, a bicycle part, engine, or any mechanical thing.


Alright, here are some resources off the top of my head. I'm a front-ender, so those are the resources I know. You mentioned some things like the domain name system and stuff, which I really know nothing about. I'm sure there are good resources out there, but I don't know them.

HTML:

CSS:

JavaScript

In addition, I've had very good luck with any books in Peachpit Press' Visual Quickstart Guide series.

About the Author

Adam Edgerton, Director of Project Management & Operations

As the Director of Project Management & Operations, Adam leads Metal Toad's operations and project management teams. That means he's involved with day-to-day operations, big-picture planning and operational projects, company process, managing/mentoring/leading project managers, organization-wide resourcing, and parts of just about every other facet of the business. Previously over several years of project management roles at the Toad, he worked with a number of industry leading-organizations including the Linux Foundation, DC Comics, FEARnet, KEEN footwear, PBS, ABC, Technicolor, and the Philadelphia Philharmonic Orchestra.

When not hard at work at Metal Toad, Adam enjoys cycling, climbing mountains and rocks, hiking, backpacking, running, and generally being active outdoors. With the small bits of time left after work, cycling, and various outdoor adventures, his other hobbies include cooking, traveling, photography, reading and writing, learning new web languages, watching movies, and enjoying music. He's also the founder of PDX Digital PM, Portland's meetup group for digital project managers and producers.

Adam grew up in Alaska and came to Oregon for college. He graduated with double-honors from the University of Oregon with a degree in Business Administration and a concentration in Marketing. After graduation, he spent 6 months working with an event marketing agency traveling the country to marathons and triathlons and explored 44 states in the process, but Oregon still came out on top of his list of places to live, and he is happy to call Portland home.

You can find him on Twitter @AdamEdgerton or on any number of other social networks at adamedgerton.com.

Interested? Let's talk.