Most Important Things to Learn other than Coding...
Tags: linux, git, beginners, programming
Published: 2022-04-23 20:22:36

> The quintessential skills...

![FreePik Vector](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kbxydwifz2eche5xz1cz.jpg)

## Introduction
Out of all the people I’ve seen who start their journey of becoming a programmer, they usually begin by attending a 6 month Bootcamp, getting a CS degree, or simply just going through sites like Udemy, FreeCodeCamp, and Youtube. The options are countless and all are great resources to learn. People usually start by learning programming languages and that’s how it should be. But in doing so, they get into a cycle of learning new languages, frameworks, etc and it keeps going on and on. They miss learning the essential stuff that is as important as learning that first language.

One thing that I noticed that was common in all of these learning methods was that none of them were teaching the students the tools and methods that almost every developer should know. I was also one of these students. I started with Python, HTML, CSS, and Javascript and went ahead applying to jobs way before I had any idea about **Version Control, Linux, Shell, Scripting, etc.** All of these are crucial tools that immensely help programmers in solving complex problems fast. This stuff is practically a requirement for getting a job as a developer. Not learning these tools and getting comfortable with them is like running with your shoelaces open; you can do it for sure but sooner or later you’re going to fall.

I have seen a lot of developers in the industry who aren’t even comfortable using the **Terminal!** There is a change now in some of the courses that teach students to have a basic understanding of these tools but there are still a lot of courses and boot camps out there that skip over this stuff. A university CS degree will teach you everything from **Data Structures and Algorithms to Machine Learning** but usually spends very little time on these topics.

My motivation to write this article came when I was thinking of new ideas to write about and I recalled my situation when I started working professionally and how I had no idea about Linux commands or **“What is a Shell?”** and my personal favorite, **“Yeah, of course, I know Version Control…hehe”.** I thought I can’t be the only one who was in this situation. So read on ahead about the tools and other tech stuff that you must know while you’re starting to learn to code and after a few weeks, you can “feel” like this:

![Hackerman Meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7gyn97g4o67ntwuozdp6.jpg)

**Note —** There are certain tools I have listed at the end of this article that you can go ahead and skip for now as a junior developer or if you’re just starting to learn to program but the four that I have mentioned below are non-negotiable in the sense that you absolutely must learn them to be more efficient and expand your bag of skills. I’ve also mentioned a **_list of resources_** for every tool to learn it easily and many of those are the ones that have helped me greatly and they would be my recommendations.

**1. Linux OS**

![Linux - WallpaperFlare.com](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jajvi0sazbiw0kplhbyh.jpg)

This one is non-negotiable, the king of all the Operating Systems, especially for developers. There are dozens of reasons why you should use Linux but even if you don’t want to use it, learning it is a great asset for developers because most of the servers run on Linux, it’s the most secure and stable OS out of all the popular ones out there, it’s highly customizable for personal use, it has a great community for Linux users out there. Apart from all this, my two favorite things about it are that encourages people to solve problems on their own and it’s open-source and free!

⚙️**Resources to learn Linux:**

- Youtube — **[“Linux Operating System — Crash Course for Beginners”](https://www.youtube.com/watch?v=ROjZy1WbCIA)** and **[“50 most popular Linux Terminal Commands”](https://www.youtube.com/watch?v=ZtqBQ68cfJc&t=7853s)** by Colt Steele from freeCodeCamp. These are more than enough if you are learning from Youtube. If free resources are what you’re looking for then youtube is the way to go.
- **[edX](https://www.edx.org/course/introduction-to-linux), [Coursera](https://www.coursera.org/courses?query=linux), [Pluralsight](https://www.pluralsight.com/browse/it-ops/linux)** — Many online popular platforms have a ton of courses and full-fledged Bootcamps.
- **[Colt Steele's Linux Course](https://www.udemy.com/course/the-linux-command-line-bootcamp/)** - I learned Linux from this course because I like Colt’s method of teaching. It’s clear to understand and it’s at a healthy learning pace along with great exercises that challenge your skills. His Web Development course was the first course I ever enrolled in and it taught me a lot of things when I started so I am a little bit biased towards his teaching.

**2. Version Control**

![Vasil Enchev - Dribbble](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/et1fnm2ocohy30okk777.png)

Once again, a non-negotiable thing to learn. Version Control is an extremely important tool to manage, work and collaborate in a professional environment. There are a lot of tools out there, the most popular being **Git** and its online counterpart, **GitHub**. Sometimes also known as source control, it helps the developers to keep track of their codebase, create multiple repositories and just revert to the original changes if and when mistakes have been made. And mistakes are made a lot.

Version Control provides a way for developers to fix their mistakes and minimize confusion among different teams. People use it for their projects and big organizations which continuously update their products use version control among their teams to avoid any future disasters. And GitHub is being used by not just developers but artists, lawyers, business people, and even writers to manage their works. So, it just goes to show how invaluable this tool is. Many other tools can be used for source control but we are going to stick with Git and GitHub here. Other popular examples are **Bitbucket, Mercurial, Beanstalk, Gitlab, etc.**

⚙️**Resources to learn Version Control:**

- Again, Youtube is the way to go for learning Git. A myriad of videos teaching the basics as well as advanced git commands to make you more productive is readily available. **[“Programming with Mosh”](https://www.youtube.com/watch?v=8JJ101D3knE)** and **[“freeCodeCamp’s Git Tutorials”](https://www.youtube.com/watch?v=RGOj5yH7evk&t=35s)** are some of the top searches for learning Git. Shoutout to Fireship’s **[“Advanced Git Tricks”](https://www.youtube.com/watch?v=ecK3EnyGD8o)** video if you’re already familiar with Git and want to become more productive using it.

- I learned Git from **[Colt Steele’s GitHub Course](https://www.udemy.com/course/git-and-github-bootcamp/)** as well. I bought the Linux and GitHub course at a discount as a package deal. But I would recommend the Youtube videos for this.

**3. Command Line and Terminal**

![Terminal - Macpaw.com](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4kr9m6794ejxpiduij42.jpg)

This one is kind of connected to my first and second points. If you already know Linux and Git then you have no problem navigating around the Terminal. Apart from Linux, if you’re using Windows or Mac which most developers do, you should know at least 10–20 commands for their respective command lines to make your lives easier. Windows has the **PowerShell** and the Mac has its own **Terminal**.

The reason to learn the command line is that developers can have greater control of their machines and their operations and it improves the general workflow. Some of the other obvious reasons are that all the popular tools I mentioned above use the terminal, so it's like a win-win. Many tools like **Docker, Vagrant, Kubernetes**, etc run on command-line environments.

⚙️**Resources to learn Command Line:**

- These are mostly the same as the stuff for learning Linux but if you want to learn Powershell or the mac terminal, there are a lot of free documentation and videos available highlighting their most-used commands daily for a developer.

- **[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/about)** and the **[Windows Terminal](https://github.com/microsoft/terminal)** are also great tools for windows users who want to use Linux environments on their laptops. These are the ones that I use mainly while working on projects.

**4. Data Structures and Algorithms**

![Freecodecamp DS Algo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ia12w6v207zzfjv8x0o.jpg)

There is not even a question about this one. All the top tech companies in the world require their developers to get **comfortable with Data Structures and Algorithms**. You need them to solve complex problems, you need them to handle billions of units of data, and you need them if you want to work at the Big 5 which are **MANGA (Meta, Amazon, Netflix, Google, Apple)** though there are many more other giants in the industry. No wonder their engineers stand out from others because they are phenomenal at solving algorithmic problems.

Learning DS and Algorithms makes you a **better programmer**, a persistent one, and gives you the ability to **think logically**. There are always multiple ways to solve a problem and every engineer has a different thought process.

_Even if you don’t get the correct answer the interviewer is looking for in the interview but the way you approached the problem was logical and efficient, chances are that you will be considered for the job. So to conclude, learn data structures and algorithms, end of the story._

⚙️**Resources to learn DS and Algorithms:**

This is the one thing that I still haven’t learned but am planning to do this year. So I have compiled a bunch of resources which I will refer to while learning it and you guys can also take a look at it.

- I am in no way a book learner. I like to watch videos and follow along with the courses. But I found **[Grokking Algorithms by Aditya Bhargava](https://www.manning.com/books/grokking-algorithms)** interesting because it teaches you all the core concepts of programming through visualizing them. Visual medium for learning is my preferred choice and this book manages to do that by interesting diagrams and doodles explaining the fundamentals. So, if there is any book that I’ll ever read for learning purposes, this would be the first one.

![Grokking Algos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hx04uksaecwl0gdzhy1y.png)

- Apart from the book, there are dozens of video resources, the popular ones including **[Edx](https://www.edx.org/micromasters/ucsandiegox-algorithms-and-data-structures)**, **[MIT OpenCourseWare](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/)**, and the **[Coursera Algorithms Series](https://www.coursera.org/learn/algorithms-part1)**. My go-to youtube resource will be **[NeetCode](https://www.youtube.com/c/NeetCode)**, and **[Colt Steele’s Data Structures Course](https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/)** on Udemy. (Yes, I know and this is the last time that I’ll mention him, I promise.)

The above are the four main things that every developer MUST learn or know when they are starting or are junior developers, at least according to me.

**_Important Note_** — If you want to learn Linux, Shell, Git plus some extra things along with them all from one single place, then MIT has a great set of videos titled “**[The Missing Semester of your CS education](https://missing.csail.mit.edu/)**” which focuses on all the topics that I have discussed in this article except Data Structures.

Just remember that **there is always something new to learn**, it can be a new framework or a library, maybe a new language. The use of them may vary from role to role and also whether someone wants to learn that technology personally just for fun. Here are some of them that I think can aid developers depending on their roles in the organization but are not “necessary” requirements to get entry-level jobs in the industry:

- **CI/CD Workflows**

![CI/CD 3D Vector](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0qe7hmgwozqrofr74r4.png)

The **DevOps** industry has picked up a lot of pace in the past decade and with the introduction of popular software like **Docker, Kubernetes, Jenkins**, and many more new CI/CD tools, the roles and responsibilities of software developers have also changed a little bit. These days, every developer is expected to know a little bit about DevOps methodologies and how CI/CD works with some knowledge about the tools utilized in the process.

- **Data Science and Machine Learning**

The concepts and fundamental ideas of data science and machine learning are very thought-provoking. But they also depend on the type of job that you’re applying for and it doesn’t hurt to know the basics. Most popular courses usually use Python for Data Science and the R programming language.

- In addition to all of the above, there are a huge number of relevant computer science topics ranging from cryptography and security to system architecture, system design, and computer networking. No one can study all of them obviously and every field of computer science has its experts researching new technologies every day. At the end of the day, it all comes down to an individual's personal choice.

I am also listing a bunch of **_bonus resources_** down below that in my opinion can help a newbie in the field of Computer Science become a complete software engineer. These include enough resources and materials that range from periods of **3 months to 4 years worth of study!**

But not all of us have the time to follow along with an undergrad degree’s level worth of study and that’s why you can pick and choose whatever you want to learn after you clear up the core concepts. Check them out here:

- **[John Washam’s Coding Interview University](https://github.com/jwasham/coding-interview-university)** — Over 215k stars on GitHub.

- **[TeachYourselfCS](https://teachyourselfcs.com/)** — A high variety of subjects ranging from Math for CS, Distributed Systems, and Architecture.

- **[OSSU](https://github.com/ossu/computer-science)** — Another popular GitHub repo mimicking an undergrad CS degree with over 2 years of helpful content.

- **[Harvard’s CS50](https://cs50.harvard.edu/college/2022/spring/)** — Harvard University’s most popular course and it's free! Need I say more?

- **[The Odin Project](https://www.theodinproject.com/)** — A highly successful resource for learning Web Development.

- **[freeCodeCamp](https://www.freecodecamp.org/)** — Everyone in the software industry is familiar with this organization as well. With over 3000 hours of content on their website and more than 1000 videos on their **[Youtube channel](https://www.youtube.com/c/Freecodecamp)**, it’s my go-to resource for learning something new.

And that was it for this one! Hope you guys found it helpful. Let me know if I can make some additions or changes to this article or if I missed some other important tools that every developer should know. My objective for writing these articles is always to give back to the community which has aided me tremendously to become a good programmer.

Connect with me on **[GitHub](https://github.com/thepiyushmalhotra)**, **[Twitter](https://twitter.com/Ipiyushmalhotra)**, and **[LinkedIn](https://www.linkedin.com/in/thepiyushmalhotra/)**. Ciao!