If you ever talk to a great programmer, you’ll find he knows his tools like an artist knows his paintbrushes.Bill Gates*
As programmers, we have thousands of tools available that help us perform our jobs, and choosing the right tool for the job can increase your productivity tenfold. But a lot of powerful tools go underutilized because the programmer doesn’t understand how to use them to their full potential.
Before you can truly be productive as a programmer, you need to develop a deep understanding of the tools at your disposal. You should strive to regularly add new tools to your toolbox, but with each new tool you add, be sure to take the time to learn its advantages and disadvantages so you can know when (and when not) to reach for it. No tool is perfect for all situations, so don’t fall victim to relying on just one tool because you’re comfortable with it. Every tool has its strengths and weaknesses, and a good programmer knows when it’s best to use each one. These are the tools with which you will build great things, but you can’t do that until you know them inside and out.
As programmers, we commonly compare writing code to crafting software. Almost every line of code is handwritten for a specific problem you’re solving, so it feels natural to consider programming as a craft. There are quite a few similarities between programmers and other types of craftsmen like plumbers, electricians, and carpenters. Craftsmen are able to look at a problem, devise a solution, and use their tools to solve the problem. Sounds a lot like programming, right?
If you ever step into a carpenter’s workshop, you’ll immediately notice a myriad of tools they’ve amassed over the course of their career. You’ll find some general-purpose tools such as saws, routers, and drills that can be used for a variety of things. But you’ll also find very specific tools meant to do one thing and one thing very well, such as planers, clamps, custom-built jigs, and hand tools to gradually shape and refine the surface of a workpiece. Each tool in a carpenter’s workshop has a specific purpose to solve a specific problem, and an experienced carpenter knows exactly when each is the best tool to accomplish the task at hand.
Additionally, woodworking is extremely dangerous when you’re working with power tools and razor-sharp blades. To perform their job safely, an experienced carpenter also needs to know the limitations of their own skills and of each tool. If they use a tool incorrectly or are not paying attention, they could lose a limb or possibly their life.
While programming certainly isn’t as dangerous as carpentry or other professions, we too need to know the strengths, weaknesses, and limitations of our tools if we want to do our jobs efficiently and deliver quality software. Thanks to the explosion of open-source software available to us, choosing the right tool for the job is much harder today than it was ten or even twenty years ago. Not only are there thousands of programming languages, frameworks, and libraries to choose from now, their quality is continuously increasing as the industry learns how to build better software.
Modern software development, especially full-stack web development, requires programmers to switch between dozens of languages, frameworks, and libraries across all parts of the software stack. It’s nearly impossible to master all of the tools you work with on a day-to-day basis, so don’t feel pressure to learn every feature, syntax, and pattern. At a minimum though, you should at least have a good understanding of your tools and why you use one over another.
Unlock expert knowledge.
Learn in depth. Get instant, lifetime access to the entire book. Plus online resources and future updates.
So, now let’s look at different types of tools and what you should know about them.
The integrated development environment (IDE) you choose for writing code can have a bigger impact on your productivity than you may realize. Modern IDEs are designed specifically to maximize developer productivity and are incredibly powerful. Your IDE should be considered one of the most important tools in your toolbox.
If you’re only using your IDE as a text editor to write and edit code, you’re likely missing out on powerful features you may not be aware of. Not using the full power of your IDE would be similar to buying an expensive chef’s knife and only using it to spread butter on your toast. That’s not what a chef’s knife is made for, and you wouldn’t be using the knife to its full potential. A good IDE used to its full potential can feel like it’s adding superpowers to your workflow and productivity because it can do a number of things that are difficult for humans.
exampleSo, how can an IDE make you more productive?
Save time by using shortcuts to switch between files quickly without leaving the keyboard.
Save time with shortcuts to open files from paths that were copied from stack traces, logs, documentation, etc.
Save time when needing to look up standard library functions with built-in API references.
Save time when refactoring by using smart find and replace features to search for and rename variables, class names, and file names in individual files or across your entire codebase.
Use code completion to reduce errors and prevent typos when typing variables and class names.
Use the power of debuggers to step through your code to track down bugs and performance issues in your code.
Catch syntax errors early with syntax highlighting; there’s no need to refresh the browser or wait for your code to compile.
Extend the IDE with plugins that offer new functionality, or build your own tools directly into the IDE.
If you haven’t already, I’d encourage you to try a few different IDEs to test drive them and see which one you like the most. Every programmer has their own unique workflow, so I’d recommend you stick with whatever IDE you feel most comfortable working with. After all, you’ll be spending a significant part of your career writing code in an IDE, so it’s worth it to spend the time to find one that works for you and learn how to use it to its full potential.
exampleSome IDEs to consider trying out:
Android Studio. An IDE created by JetBrains that is geared specifically toward Android development.
Visual Studio Code. Created by Microsoft, this has become one of the most popular IDEs used by developers due to its large ecosystem of extensions to add additional functionality and customization.
XCode. Created by Apple, this IDE combines tools to design, code, test, and debug iOS and MacOS applications in one application.
The Command Line
Integrated development environments typically include GUIs, which make them user-friendly and easy to get started with. We’re all familiar with browsers and desktop applications, so a GUI-based code editor seems like a natural first step when it comes to writing and editing code. But there are a lot of things that you cannot do with GUI applications.
Command-line terminals, on the other hand, often seem confusing and intimidating to those who are unfamiliar with them. You’ll probably have some difficulties when you’re first learning how to navigate and run commands on the command line, but over time, these actions will become second nature and easier to remember.
The command-line terminal will become an essential tool on your road to becoming a senior engineer. It’s probably the most powerful tool in your toolbox, even more so than your IDE, so it’s a good idea to get familiar with it as soon as you can. The command line can amplify your skills and increase your productivity by orders of magnitude, but you need to know how to use it to its full capabilities before you can unlock that potential.
exampleHere are some examples of how the command line can make you more productive:
Save time by creating, copying, renaming, and deleting files without leaving the keyboard.
Quickly search for phrases and patterns across your entire codebase or file system.
Chain commands together to pipe output from one program to another, allowing you to create powerful pipelines to process data.
Create your own shortcuts and aliases to speed up repetitive tasks and commonly used commands.
Create your own utilities to extend the power of the command line.
Write and execute scripts to automate larger tasks.
Install dependencies, frameworks, libraries, and other tools with a few commands.
Monitor and analyze current running processes and system diagnostic information on your host machine.
Access remote servers and perform network operations to monitor and analyze network traffic.
There are endless things you can do with the command line—you’re only limited by your imagination. The more you use it and become comfortable with never leaving the keyboard, the more creative you’ll get when it comes to thinking up new ways to solve problems directly from the command line.
Don’t worry about speed when you’re first starting out. We can’t all be as smooth as hackers in the movies are, and the good thing is we don’t need to be. Just focus on learning the command line at your own pace. The speed will come with repetition and practice. The more important thing to focus on is getting comfortable and learning how to solve the problem you’re working on with the commands you have at your disposal. Everything else will come naturally, and you’ll be boosting your productivity in no time.
It goes without saying that if you’re hoping to make a career as a professional programmer, you should strive to have an expert-level knowledge of at least one programming language.
It might sound silly because it’s so obvious, but there are a lot of developers who jump from language to language because they’re chasing the hot new trendy tool that everyone’s talking about. If you’re serious about having a long and successful career as a software engineer, you need discipline and focus to stick with one language long enough to become an expert in it.
Ideally, the language you will pick will pay the bills by enabling you to leverage your expertise into lucrative employment opportunities. Spending the time to become an expert in one language pays off because it goes a long way toward providing job security.
Whatever language you choose early in your career, stick with it until you become an expert in it. Learn the language’s strengths—what problems is it really good at solving? What are its weaknesses? It’s also important to learn its inconsistencies and any pain points so you know when to avoid them.
Only after you feel comfortable writing code at an advanced level in one language should you begin to branch out and learn other languages. While you’ll want to stick with one or two languages in the first few years of your career, learning how to write programs in different languages is an important skill to learn as you gain more experience. You’ll learn new patterns, techniques, and even new programming paradigms by learning new languages. It will force you to become a better programmer as you apply what you’ve learned to the code you write, even if it’s in a completely different language. Solving problems in different programming languages forces you to rely on your knowledge of the foundational concepts of programming rather than the syntax of one language over another.
At some point, you’ll work on a new project and have the opportunity to decide which language to choose. If you have the knowledge about the strengths and weaknesses of different languages, you’ll be able to make better decisions on which to choose. And in some cases, choosing the right language can increase your team’s productivity by an order of magnitude.
Knowledge of the right tools at the right times can unlock amazing opportunities for you and your career.
Some tools and technologies are so common across the software industry that all software engineers should at least have a general understanding of them. Familiarity with these technologies make you a well-rounded engineer.
Tools that every software engineer should be familiar with:
This is just a small list of common tools that are universally used by software developers at some point in their career. You don’t need to become an expert in each tool, but having at least a general understanding of each of them will round out your technical skills.
Once you’ve mastered your tools, the next thing to focus on is your own process for producing software. Every programmer approaches software development differently, and what works for some people may not work for others. There are several development methodologies and ways to solve problems, but I’m going to share a process with you that I’ve found works for a lot of programmers. It’s simple and straightforward, and it helps you stay focused on the important thing—delivering working software. So, here’s the process:
Make it work, make it right, make it fast.
That’s a quote from Kent Beck, the creator of extreme programming and one of the original signatories of the Agile Manifesto. Kent has shaped programming in many ways, and this technique will hopefully shape the way you approach programming. Following this simple pattern will help you manage the complexity of your own solutions and prevent you from trying to do too much all at once.
You’re reading a preview of an online book. Buy it now for lifetime access to expert knowledge, including future updates.