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!
- HTML & CSS
- Content Management Systems & Server-Side Programming Languages
- The Inspector
- Version Control
- Domains & Hosting
- A Passion for Knowledge
- 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!
- 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.
- 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.
- 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.
- 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".
- 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!
- Read some Hacker News or find a tech news aggregator you like
- Join Twitter, say hi @adamedgerton, and start following some developers and tech geeks
- Check out Stack Overflow, a popular Q&A website for programmers
- Codecademy is a fairly new startup aimed at making learning to code simple and straightforward.
- Start programming for fun. And then keep programming for fun. Some day you just might find that you've become a programmer!
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.
- 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!