📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Tools EVERY Software Engineer Should Know

Tech With Tim11:37

Transcription

In this video, I'm going to run through a quick list of tools that every software engineer should know. So let's get started with your code editor or IDE.

Now, obviously, this is where you're going to write code. You need to know this well, and you may actually use multiple editors. I know that I do from time to time.

Now, I'm talking about things like VS Code, maybe Visual Studio, something like IntelliJ IDE, maybe PyCharm, or even an AI code editor like Cursor or Wind Surf. The point is, you need to know this tool well, and you need to configure it for software development.

First of all, you want to install various extensions. If you're working in Python, for example, I have a video I'll leave right here that walks you through all the ways to set up VS Code for Python development, including various extensions.

Beyond that, configuring things like linters is important. This is something that can run through your code, analyze any issues with type mismatching, stylistic issues, and ensure that the code is clean before you push it up to something like GitHub.

We, of course, have debuggers. Being able to use this powerful tool to step through your code and solve more complex issues is definitely something worth learning. I'll leave a video here that walks you through how to use the debugger in VS Code.

Beyond that, we have formatters, which are incredibly helpful and important, especially if you're working in a messy language like JavaScript or HTML. This will automatically format the code, fix the indentation, make sure lines aren't too long, and can be an absolute lifesaver, especially if you haven't set it up or used it before.

The formatter differs based on the project you're working in or the type of language framework you're using, but definitely install one of these. Lastly, because we are in the world of AI, I'm going to throw coding assistants on here as well. They can be really helpful to configure something like GitHub Copilot or whatever you want to use. There are tons of assistants coming out every single day, and it's probably worth setting one of these up in your IDE.

Now, another tool that you'll want to check out is NordPass, the sponsor of today's video. NordPass provides the ultimate password and credential management solution. In today's digital age, we all have so many passwords, keys, credentials, and credit cards. I'm sure you've experienced the issues of trying to find these and keep track of them all.

To combat this, NordPass not only stores all of this data securely but also lets you sync it across devices, meaning you can use all of your passwords on the go, wherever you are. You can also share these passwords with your friends and family securely with NordPass's encrypted sharing. Not to mention, if there are security vulnerabilities, NordPass's data breach scanner can catch them and inform you immediately.

NordPass also has features like email masking. This means you don't need to give out your private email when you're just trying to access a site or fill in a survey or do something one time.

The average number of passwords that a single person has is nearly 168, which is a 70% increase over the last three years. That just makes it impossible to keep track of them all. For that reason and many others, you need to get your passwords and digital life secure by using NordPass today. Go to nordpass.com/twt and use the code TWTNORDPASS for the best NordPass deal with a 30-day money-back guarantee.

Now, the next tool that is so important to learn is version control. What I mean by this is really Git and GitHub. They are different, so let me break down exactly what this does.

When you're working with multiple developers, it can be very difficult to manage code. Imagine that you didn't have something like version control. If you know what that is and you're working as a team of 10 different developers, constantly sending zip files to each other and trying to share different versions of code, it's just an absolute mess.

What a version control system allows you to do is keep track of the history of a repository or a codebase. You can use this independently without anyone else to keep track of different commits or saves that you've made to the codebase. If something goes wrong, you can always revert back to the previous version.

If you're working with multiple developers, this becomes even more important because you can all collaboratively work on the same code at the same time and keep track of who's changing what. I have an entire in-depth tutorial on Git if you want to learn that, so I'll link that up here.

This meshes with GitHub or another kind of remote repository system. GitHub is obviously the most popular, but this is simply a place where repositories can be stored. Git or a version control system can work completely independently on your own computer. It doesn't need to be connected to the cloud just to keep track of the changes that you've made.

However, if you want other developers to have access to these changes, then you'll typically host this in a remote repository. This means that other people can see the code, they can pull down changes, they can push up changes, and you can work collaboratively.

Those are the main differences: Git is what's actually keeping track of the version control system and all of the saves and commits, etc., and GitHub is really just a website that hosts a remote Git repository and gives you some nice tools to view the code and add changes, etc.

Moving on, I have Linux and terminal commands. This is so important because, as a developer, you're going to need to use the command line or at least be familiar with the various commands. Start off by learning the basics in terms of how to navigate through different directories, create new files, delete files, copy, move, etc. All of these core operations are things you're going to do quite a bit.

Even if you can do them using the mouse, it's going to be significantly easier to just do it in the command line. Beyond that, I recommend learning a little bit about the Linux operating system. What are users and groups? How does the permission system work? What does "sudo" mean? How do you quit a process or SSH into a machine?

The entire internet and really all of software development is rooted in Linux. Everything at some point is usually deployed to some kind of Linux environment, so it's a really good idea to at least be comfortable with this operating system and know some of the basic terminal commands.

Oh, and by the way, another reason you need to know these commands is that a lot of times you're going to be working in a server environment where you don't actually have access to a graphical user interface. It's just going to be a terminal, something you're usually remote accessing into. So you really do need to be comfortable writing commands.

Now, moving on, I have something that's not necessarily a tool, but I still wanted to throw it on this list, and that is environment management.

It becomes so important when you start working on a project that you're actually going to put into production. You need to have various different environments and manage things like your credentials, secrets, environment variables, passwords, and all of those important details that you really need to think about in advance before you start building a massive project.

I'm saying this because I actually ran a tech startup about a year ago, and I remember when we started getting to the point where I wanted to deploy this and actually have it publicly available. I realized, "Hey, I need a different version for development, a different version for staging or testing, and a separate version for production."

This is pretty common. You usually have a development environment, a staging environment, and a production environment. All of those environments have separate databases, separate authentication systems, and a lot of different credentials, keys, or services that are used with them. You need to manage those environments and manage all of the different values, typically those that are secret and that you don't want to expose to the user.

There are various tools that can help you with this environment management, but it really does depend on the language and framework that you're working with, so I'm not going to mention any here. The point is to make you aware that you're typically going to be working with multiple environments, and you need to manage all of the keys and different values for those environments properly.

Moving on, we have testing and testing frameworks. Now, look, testing is a pain, especially for smaller projects, but as your projects get larger, it is so important to have good test coverage and to test all of the critical components of your application.

This means you need to learn about some type of testing framework or at least some type of testing system and be familiar with some of the different types of tests that you can be using, such as integration tests, unit tests, system tests, and end-to-end tests. You're not always going to use all of these, but you should know what they are and be comfortable writing at least some basic tests.

It's good practice to actually write tests before you write your code, and you can do this in various different frameworks. For example, if you're working in Python, you can use something like pytest. If you're working in something like JavaScript or TypeScript, you can use Mocha, Chai, or JUnit. It really depends on what language and framework you're working in, but you need to be familiar with a testing framework and know how to write some basic tests.

Now, moving on, we have CI and CD, or continuous integration and continuous deployment. Typically, this is the role of a DevOps engineer, but a lot of companies kind of throw this on backend developers or maybe even frontend developers or full-stack developers sometimes. So it is a good idea to be at least aware of some of these tools.

CI/CD really just means that you are continually building, testing, and deploying your application as changes are made. You're setting up automated scripts for running tests every single time you make a pull request or change the repository. You're building whatever the production build might be, making sure it works, and then maybe deploying that to some type of cloud environment.

This is a pretty vague term, and it can encompass a lot of different things, but it just means that you're automating all of the tasks that are typically involved in getting something out to production. This can be done quite quickly and robustly because you're running it from some automatic script and not relying on a human to do it.

Some tools specifically that you can look into here are things like GitHub Actions. This is probably the most basic way to do this, where you can write automations that will run on things like pull requests, new branches being made. There are pretty much all kinds of different triggers you can set up, and I actually have a full tutorial on this, which I'll link right here.

Beyond that, some more advanced tools include things like Jenkins, Travis CI, CircleCI, and then if we go a little bit more basic, we even have things like Vercel. If you're deploying a frontend, Vercel can actually set up continuous deployment integration for you, where it will automatically deploy the site anytime you make a pull request or a change to the main or master branch, or however you want to set it up.

Beyond that, you can use things like GitLab. There are all kinds of different tools in this section, but the point is you should be aware of what this is and have a little bit of familiarity with some of these tools.

So, if you made it to the end of the video, I'm going to go through a quick speed run of some other tools that you may consider. Keep in mind there are so many tools in software development. Obviously, you don't need to know all of them, but here are some more that you might want to look into, especially if you knew a lot of the ones on this list.

Excuse me, because I'm going to read from my screen so I don't get it wrong.

Let's start with code analysis. Code analysis includes things like finding dependencies or vulnerabilities. You can use tools like Snyk or SonarQube for that.

Beyond that, we have various database tools, such as pgAdmin and MongoDB Compass. This obviously depends on the database you're using, but understanding how to view and interact with that database outside of just a programming language is important.

Next, we have things like package management. If we're talking about Python, that's something like pip. If we're talking about JavaScript, something like npm. If we're talking about Android, maybe Maven or Gradle.

Next, we have things like testing APIs. A great tool that I use all the time is Postman. You could even include curl here, which is the command line variant of that. It's a lot more basic, but you want to understand how to send test requests to your APIs.

Next, we have cloud platforms. Obviously, you just pick one of these; you don't need to learn them all. But we have Google Cloud, Azure, Amazon Web Services, things like Aami, or more third-party cloud services.

Beyond that, we can get into some more DevOps-specific tools, such as Docker, Kubernetes, Terraform, and understanding containerization.

Lastly, I have monitoring and logging, which really can't be ignored. We have tools here like Prometheus, Grafana, Elastic Stack, and I'm sure a ton of others.

There you go, guys! That is my list of tools that every software engineer needs to know. Let me know what I forgot in the comments down below, and happy coding!