When I first was learning to program, it was overwhelming to me how much there was to learn, and I didn't know how to prioritize any of it. I'm now three years into my role as a developer, and I'm still overwhelmed by how much there is to learn. With hindsight I know what would have been most helpful in the beginning, and hopefully you can benefit.
It is often easy for us to see gaps in technical knowledge, and those deserve focus when trying to improve as a developer. However, there are also many non-technical skills involved in learning and succeeding as a new developer. In this two part blog series I am going to focus on both kinds of skills that will make us better developers overall.
The Technical Skills
Rather than create a post detailing languages or frameworks you should know, I’ve decided to focus on overarching technical skills that are important regardless of your area of emphasis. Most of these fall into the category of “ways to make things as simple as possible for us.” Programming takes a lot of attention, so let's save our brains from some of the overhead by finding ways to streamline the process, illuminate what's actually happening as a result of the code, and save us when we inevitably make a mistake or change our mind. There are shortcuts everywhere, for the development environment you work in, the command line, your laptop navigation, your default text editor — anywhere you frequently spend time. Because there are many different editors, terminals, operating systems, etc., I’m not going to detail all of the options available to you, but rather share some of the places it makes sense to invest your time learning. Be intentional about becoming proficient with your tools by learning their shortcuts and capabilities.
Know your machine
You will spend a lot of time on your computer, so discover what it’s capable of. Learn how to move by more than one space at a time. There are shortcuts that allow you to navigate, create, and manipulate most everything on your computer. Whenever you're using your mouse or trackpad, or pressing your arrow keys repetitively, it's probably worth searching for a shortcut. There are tons of cheat sheets for these. Check out a Mac basics cheatsheet.
Know your tools
Many of you use specialized development environments which enable easy navigation within a file, as well as have shortcuts that take you directly to a method call's declaration, toggle between camel and snake case, find interconnections between different files, jump quickly from part of your codebase to another, and so on. There are numerous websites and tutorials for these, so search for tutorials for the space you work in and begin to memorize the shortcuts. There are a lot, so just pick a few to start with and learn them well, then keep adding on as you find more. Here are a few links I frequently use:
Know the terminal
It's worth knowing how to do basic navigation and text selection within a terminal window. At a minimum, learn how to copy, move, delete, and view files and folders from within the terminal window. Take the time to investigate tools such as aliases and search tools like grep and ack. Your command line is extremely powerful, so find out what you can do with it. Use help sites to get the basics down.
Learn version control
This next suggestion has to do with the actual code you write. And, the inevitability of mistakes. Learning how to control your programming history will save you. Errors will happen. You will change your mind about what you’ve done, you will find mistakes in your past code, and you will want to go back to a different state. This can be overwhelming and difficult to do, but it’s much less so once you know how to use version control (Git and others). Version control allows you to review, modify, squash, revert, compare, etc. any commits, IF you are committing your work along the way.
There is way too much information about version control to go into here, but these links cover largely everything there is to know about Git. If you use Mercurial, Subversion, or another version control system (VCS), they will have similar abilities. If you need to do something, there's most likely a way. The following resources will help you get started.
Create a system
You are learning and paying attention to a lot when you're programming. In the same vein as learning shortcuts for efficiency, make your visual layout efficient for your brain also. The less it has to unnecessarily remember or search for things, the more it can be freed up for other thinking. Here are some ideas I use to lessen the cognitive burden. There is no magic to it; play with what will work for you.
Consistently locate things in the same order/placement: don't make yourself have to hunt or spend unnecessary time thinking about where or what something is. Instead be systematic in how you arrange the spaces you use. For example, always have the same left-to-right arrangement of desktops, workspaces, monitors, terminals, windows, browser tabs, and terminal layout (e.g., server, compiler, console, prompt). Use visual cues to simplify how quickly and easily you can recognize what you're looking at. Make important things stand out by adding color and words. If you have multiple terminal windows open, add a background color that distinguishes one from another. Investigate how to customize your terminal to give you helpful information via colors, words, and symbols included in the prompt. For example, the prompt can be configured to show git status and which branch you are working on.
Learn your browser’s developer tools
The most commonly used browsers have some form of developer tools which allow you to see what is happening in the browser when you run your code. You can observe the state of your data, look at your network requests and responses, view and alter the CSS of any HTML elements, view console logs, and examine way more pieces of information and information exchange than you will probably need. Here are links to cheat sheets for three of the most commonly used browsers:
Learn what makes you better
At this point you may realize that rather than provide you with a neatly organized resource sheet with all the commands you should master, I've shared with you a list of what I think you should investigate and learn more about. That's because the specifics of what will work best for you are just that, specific to you. So spend the time, sift through the suggestions, and learn the parts you feel will be helpful. It's worth the effort now to make it easier for yourself in the long run. Look for my next post to see which non-technical skills I've found to be most valuable for developers. Because no matter how good your technical skills are, if no one wants to work with you, it won't matter.
Kelly de Vries is a software engineer at Lumen Learning and co-founder of the Portland Junior Developer meetup. She continually seeks to create opportunities for entry-level developers to advance their careers, and she has a black pug who has his own Instagram account (@otto_depug)