Header Ads

Tools/Technologies Every Software Engineer Needs to Know

Tools/Technologies Every Software Engineer Needs to Know

In this article, I'm going to be sharing with you 5 tools/technologies that you need to know to be an effective software engineer. Now, the reason I'm making this article is that back in the summer, I started working for Microsoft as a software engineer intern. Now, while I was there, I realized really quickly that there was a lot more to software engineering than just knowing how to code.

I feel pretty confident in my ability problem solving, writing code, and doing all of that. But there was a ton of tools and technologies that I didn't know how to use. And that really limited me in my first few weeks. I had to pick those things up. I was asking a lot of questions and well, it would have just been a lot better if I knew those before I started working there.

So I figured I can make this article kind of share that information with you guys. And then maybe you can be ahead when you go to your next job.

Few words

So I'll start by mentioning that a lot of the tools I'm going to talk about here are pretty broad, and there's definitely a lot that you could learn about each of these tools. Now, I just want to make the point that it's not super important that you know, everything, it's just about having kind of a basic, fundamental understanding and being able to understand how that tool works.

Maybe have a conversation with someone about it, and just being able to use it with a relative degree of effectiveness. Now, if you're like me, you'll probably learn a lot of these tools just by watching YouTube videos or looking at other resources and will, for me personally, I like to keep track of kind of the best videos and resources that I've found so I can visit them later on. Now, this is pretty difficult for me. I don't like cluttering my bookmark bar and all of that stuff.

So anyway, with that being said, let's go ahead and get started and talk about 5 tools/technologies that you need to know to be an effective software engineer.

1. Git & Github

So the first and in my opinion, the most important tool that you need to know is a version control software or system like ''get and get hub.'' Now I think this is pretty obvious why you need to know this, but if you're working in a team of more than one person, so you're not just working, chances are you're going to be using, get or get hub or some other kind of version control software and you're going to need to sync your local changes.

So the stuff you're actually writing and developing on your computer with, well, the company codebase or the other person's codebase, and you're going to need a way to take other people's changes and we'll update that on your local codebase. So it's very important that you have a deep understanding of how both get and get hub work.

Assuming you're using that software and that you can not only perform commands from the command line on your keyboard, but you also can use the user interface on the get hub website.

Now, the reason I've separated these two things out is because as many people don't know get and get hub are two separate things. Yes, they work very closely together. They're very deeply integrated, but get is kind of the backend actual version control software. It's what's running on your computer. It's what's checking for changes in your repository. It's what's going to do all of, kind of the hard lifting.

When you do say like a rebase command, right? That's what gets will actually do. It's kind of more in the backend. That's the way I like to describe it. Whereas get hub is actually the front end-user interface. It's the famous website that we all know about. So you need to know how to use both of them. You have to know how to use the basic get commands.

So how do I commit something? How do I push something up to the remote repository? How do I pull something down? What does a rebased command do? How do I make a new branch, all of these different things? And then you also have to know how to use the get hub website. So how do I do a code review? Okay. Oh, this is how I approve changes.

This is how I merge something into the branch, all of those different things. So I think I've gone on this long enough that the point is that this is very important and really make sure of all of the tools on the list. You have this down and you have a deep understanding of how Git and GitHub work.

2. Linux Commands

So the second thing is going to be Linux commands and generally Mac and windows commands as well as a software engineer. There's a lot of situations where you are not going to be able to use a graphical user interface and you're going to have to be comfortable navigating a file system using adjust the command line. Even if we take an example where you're on windows, we're on Mac.

There is again to many situations where even though you might have a graphical user interface, the tool that you're interacting with or using is only available from the command line. Now I'm not saying you have to be an absolute pro and you never use a graphical user interface.

You just have to know how to navigate a file system, how to copy a file, move a file, edit a file, do these basic things that are very common and that you'll have to do a lot. If you are ever in a situation where you don't have that graphical user interface or you can't use it for what you're doing now, this will be especially important.

If you're someone who's working on any kind of web development, if you're going to be interacting with any servers, uh, if you're needing to SSH into saying a remote machine if you're going to be working with a lot of machines learning related stuff, we're really specific pieces of technology or programs I can tell you firsthand, especially in Python, there's a lot of stuff that only runs on Linux, right? It just doesn't work on Mac or it doesn't work on windows.

So even having the ability to say boot up a virtual machine and get in and just really quickly kind of spin-up in Ubuntu box or some kind of Linux box and start working on that is really important. And I can tell you firsthand at Microsoft, almost all of my coworkers had access to a virtual machine that was running Linux and that never had a graphical user interface on it.

It was simply a command line and they would use that when they needed to task really specific proprietary pieces of software. And well, if they didn't know how to use Linux, it was going to be a huge pain every time they needed to go in there. When they're looking up, Hey, how do I copy a file? How do I edit a file? How do I save something?

Just some basic things that you should know. And I would highly recommend you have a fundamental understanding of how to navigate a file system and perform some basic commands related to permissions on Linux, Mac, and Windows.

3. Debugging

How to use a debugging tool and understanding how to go about debugging a complex program. Now, this is really important because in a lot of situations, especially if you're working for a company, you're going to be dealing with files that have, you know, tens of thousands of lines where you're going to be dealing with tens of thousands of different files

And it's just not going to be viable to be able to use a print debugging kind of style when you're debugging. Sure. You could use that for maybe some small things, but you're going to have to know how to use a debugger, which means you have to know how to play Sprake points.

What stepping over, stepping out of, and stepping into does, and kind of just the general process and strategy of how you debug a program. Now it's hard for me to give you that strategy because of course, that's going to be specific to what you're doing, but my point is just that you're going to be working in huge codebases with lots of files, lots of lines, and just tons of stuff going on.

So being able to isolate your problem, first of all, is the most important thing you have to kind of practice debugging and understand how to use those tools. It's just as important to understand how to debug and you should know how to use a professional debugger to be an effective software Engineer.

4. IDE's & IDE Features

Now what I mean by this is really just how to set up a coding environment for yourself and how to take advantage of some of the cool features that are in IDs. Now, some features I can think of off the top of my head that I think you should use are things like formatters, debuggers, finding, replace refactor, duplicate line, just all these kinds of different things.

I think you're getting the point now, of course, this is important because you want to be as fast as possible when you're writing code. And if you can use these cool tools, well, it's going to be really useful now, especially if you're working in a large codebase, understanding how to navigate a ton of different files and go to say the definitions, different functions, or methods or classes is really important.

So just having a good understanding of the development environment that you're using and being able to take advantage of a lot of these core tools that are involved in these IDs is really important. And I'll just specify quickly here that I'm not really recommending using an IDE if you're just an absolute beginner and you're still learning how to code, this is more of a recommendation for people that really want to become software engineers that already have the basics of coding down.

And that are totally fine with getting a bit of aid from the computer. Another thing I'll quickly mention here is using a really good IntelliSense that will save you a significant amount of time. Just know how to use an IDE know about the features that are in it and take advantage of that.

5. Networking Basic

Now, what I mean by this is just having a really basic understanding of how computers communicate with each other, how maybe a distributed system might work, why you may need to use, say asynchronous programming or multiple threads due to the networking operations that you're using.

And then of course having an understanding of each HTTP protocol and, you know, maybe the difference between something like a get request and a PO post request or how you could send those kinds of requests or send a response from code.

Now, of course, there may be a set of software engineers that don't actually need to understand this, but I would say in a lot of situations having this knowledge is really good. And it just allows you to understand a lot more about what's happening in a system.

If you have kind of that underlying knowledge and information about how networking actually works again, I'm no networking pro you know, I can't talk about this a ton, but I've found, especially when I'm writing programs that deal with any kind of networking-related thing, just having that little bit of knowledge has helped me a ton and made it a lot more clarity into why I was writing specific blocks of code, you know, kind of based on that understanding.


So with that being said, that is all I wanted to share with you. So do you guys agree with me? Did I miss anything or any of these tools, something that maybe you don't need to know, please do let me know in the comments down below.

No comments

please do not enter any spam link in the comment box.

Powered by Blogger.