10 Things Every Software Developer Should Know
Tags: programming, javascript, webdev, beginners
Published: 2019-05-04 08:48:04

---
title: 10 Things Every Software Developer Should Know
published: true
description: If you have been self-teaching programming to yourself then this list will help you what to learn to become a software developer
tags: programming,javascript,webdev,beginner 
---
*Disclosure: This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.*

![](https://thepracticaldev.s3.amazonaws.com/i/nweeqf97l2md3tlqkjyt.jpg)
If you have been self-teaching programming to yourself and wondering what are some of the most basic things every software developer or programmer should learn or know, then, here is a list of some of the fundamental things you can learn to do well as a programmer.

Being an author of a [Java blog](http://javarevisited.blogspot.com/), I often receive questions from my readers, particularly beginners that what can a computer science graduate do to prepare for a career in software development? what can I learn to become a good programmer? or What is expected of a junior developer?

These are mostly college students, junior developers, and people [learning to code](https://javarevisited.blogspot.com/2020/05/how-to-learn-to-code-in-2020-best-books-courses-and-tips.html) who have access to a wealth of information thanks to the internet and eager to learn things in advance to prepare for their [programming job interviews](https://www.java67.com/2018/05/top-75-programming-interview-questions-answers.html).

In this article, I'll share **10 things that I believe every software developer should know or learn**.

This includes a programming language like [C++](http://www.java67.com/2018/02/5-free-cpp-courses-to-learn-programming.html) or [Java](https://javarevisited.blogspot.com/2018/05/top-5-java-courses-for-beginners-to-learn-online.html), essential computer science concepts like [data structures](https://javarevisited.blogspot.com/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html), [algorithms](https://javarevisited.blogspot.com/2018/11/top-5-data-structures-and-algorithm-online-courses.html#axzz5fKHU123K) and computer networking basics, essential tools like [Git](https://javarevisited.blogspot.com/2018/01/5-free-git-courses-for-programmers-to-learn-online.html), Microsoft Word and Excel, skills like [SQL](https://javarevisited.blogspot.com/2018/05/top-5-sql-and-database-courses-to-learn-online.html) and [UNIX](http://www.java67.com/2018/02/5-free-linux-unix-courses-for-programmers-learn-online.html), editors like Eclipse or Visual Studio, and text editors.

This list is by no means complete and I have not included some of the more advanced things like [regular expression](
https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Flearn-regular-expressions-in-online-regex-course%2F) but it does provide you a good starting point for things a programmer should know.

> If you are aiming for a career in software development and looking for a programming job then these are things you can learn and improve to stay ahead of your competition.




##10 Things Every Programmers and Software Developer Should Know

Without any further ado, here is a list of things which I personally believe, every programmer should know, irrespective of the job he is doing. These are [basic skills](https://dev.to/javinpaul/11-essential-skills-software-developers-should-learn-in-2020-1bio) and will serve you for a long time.

Any investment made into these skills in terms of time, money, and effort will reap rewards throughout your career.


### 1. Data Structures and Algorithms
If you want to become a programmer then you ought to know data structure and algorithms well; there's no way around it.

This is one of the important topics of any [programming job interview](https://javarevisited.blogspot.com/2011/06/top-programming-interview-questions.html) and without you knowing basic data structures (e.g. [array](https://javarevisited.blogspot.com/2015/06/top-20-array-interview-questions-and-answers.html), [linked list](http://javarevisited.blogspot.sg/2017/07/top-10-linked-list-coding-questions-and.html#axzz4xXS86IVo), [map](http://www.java67.com/2017/08/top-10-java-hashmap-interview-questions.html), set) it's not possible to write a real-world application.

That's why every programmer should put serious effort to learn data structures and algorithms during their computer science course.

Even If you are self-teaching programming yourself, then also you must know data structures and algorithms; in fact, many programming boot camps will teach you data structures and algorithms as the first thing.

If you want to learn it by yourself then [**Data Structures and Algorithms: Deep Dive Using Java** ](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structures-and-algorithms-deep-dive-using-java%2F)is a good place to start.

[![](https://cdn-images-1.medium.com/max/800/0*gjXbzR2ikWIPwtlz.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structures-and-algorithms-deep-dive-using-java%2F)

And, if you need some free alternatives, then this list of [free Data Structure and Algorithms courses](https://medium.freecodecamp.org/these-are-the-best-free-courses-to-learn-data-structures-and-algorithms-in-depth-4d52f0d6b35a) can also be useful. 



### 2. Source Control (Git)
Source control is used to store your code and helps programmers to collaborate within a team. For example, if many programmers are working in the same codebase but on different feature then source control tools like Git helps them to collaborate without overriding each other chagnes. In short, if you want to become a coder or software developer, you must know version control tools like Git or SVN.

Thankfully [Git](https://dzone.com/articles/top-5-free-courses-to-learn-git-and-github-in-2019) and [Github](https://hackernoon.com/top-5-free-courses-to-learn-git-and-github-best-of-lot-2f394c6533b0) have streamlined the market and now more than 70% of organizations use Git, so you can probably get away by just learning Git.

By the way, you should put some effort into [learning Git](https://medium.com/javarevisited/7-best-courses-to-master-git-and-github-for-programmers-d671859a68b2) on the command line as well, and you should be comfortable with advanced version control concepts like branching and merging as well as the tool itself using both the command line and GUI.

I recommend, [**The GitHub Ultimate: Master Git and GitHub**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fgithub-ultimate%2F) course to all people who wants to learn Git online.

[![](https://cdn-images-1.medium.com/max/800/0*RT6jF2VYVSVJIYEN.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fgithub-ultimate%2F)

But, if you need more choices, you can also check out this list [free courses to learn Git](https://dev.to/javinpaul/5-free-courses-to-learn-git-and-github-in-depth-jpp) online. 


### 3. Text Editors (Vim)
There is not a single day when I have not used a text editor like Vim while working as a programmer or Software developer. It's one of the most essential tools even for non-programmers like DBAs and System Admins, and anyone who works with computers.

I have mostly used NotePad on Windows and VIm in [Linux](http://www.java67.com/2018/02/5-free-linux-unix-courses-for-programmers-learn-online.html), but you have a lot of choices available in terms of advanced editors like Sublime and NotePad++, which provides IDE-like functionalities.

I suggest you spend some time learning your favorite editor and keyboard shortcuts, productivity tips are something you can learn. If you like Vim then [Vim MasterClass](
https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fvim-commands-cheat-sheet%2F) is one of the best course to start with and if you are a Windows guy then you can check [Sublime Text for Rapid Web Development](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fsublime-text-for-rapid-web-development%2F) to learn Sublime, another powerful text editor. 

[![](https://cdn-images-1.medium.com/max/800/0*pKsyFV5LxL3JosFu.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fsublime-text-for-rapid-web-development%2F)


### 4. IDEs (IntelliJIIDEA or VSCode)
When I started software development, I need to code in Notepad or DOS Editor, and then save the file, run the compiler from the command line, create a package by running an ANT script. Activities like Debugging and Profiling were a distant dream but the advent of IDEs like [IntelliJIDEA](https://medium.com/javarevisited/7-best-courses-to-learn-intellij-idea-for-beginners-and-experienced-java-programmers-2e9aa9bb0c05) and Visual Studio has completely changed how modern programmers develop software. 

In other words, IDEs like IntelliJIDEA or AndroidStudio is the single most important tool for any programmers. For [C](https://medium.com/javarevisited/10-best-c-programming-courses-for-beginners-2c2c1f6bcb12), [C++](https://javarevisited.blogspot.com/2020/07/top-10-courses-to-learn-c-in-depth-best.html), and [C# programmer](https://medium.com/javarevisited/5-best-c-c-sharp-programming-courses-for-beginners-in-2020-494f7afc7a5c), the choice is clear: Visual Studio. And for Python developers, Jupiter Notebook is getting better and better every day.

For Java programmers, there are three major IDEs to choose: [Eclipse](http://www.java67.com/2018/02/5-free-eclipse-and-junit-online-courses-java-developers.html), NetBeans, and [IntelliJ IDEA](https://javarevisited.blogspot.com/2018/09/top-5-courses-to-learn-intellij-idea-java-and-android-development.html).

While Eclipse is my favorite, IntelliJ IDEA is probably the most powerful of them. If you happen to be an IntelliJ IDEA fan, then I suggest you go through [**IntelliJ IDEA Tricks to Boost Productivity for Java Devs**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fintellij-idea-secrets-double-your-coding-speed-in-2-hours%2F) to learn your IDE better.

[![](https://cdn-images-1.medium.com/max/800/0*sxKCdjLgG0d9glAD.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fintellij-idea-secrets-double-your-coding-speed-in-2-hours%2F)

If you need more choices, you can also check this list of [free Eclipse courses](http://www.java67.com/2018/02/5-free-eclipse-and-junit-online-courses-java-developers.html) and this list for some recommended [IntelliJIDEA courses](https://itnext.io/top-5-intellijidea-and-android-studio-courses-for-java-and-android-programmers-afcc27309b60). 


### 5. Database and SQL
SQL is a classic and probably the most valuable skill for any software developer. It's been around for more than 30 years and I think it will be around for another 30 years. Given the omnipresence of the [database](https://javarevisited.blogspot.com/2019/01/top-6-free-database-and-sql-courses-to-learn-online.html), it's expected from a programmer that he is familiar with essential database concepts like normalization and table design along with [SQL](https://javarevisited.blogspot.com/2018/05/top-5-sql-and-database-courses-to-learn-online.html).

There are many databases like [Oracle](http://www.java67.com/2018/02/5-free-oracle-and-microsoft-sql-server-online-courses.html), [Micrsoft SQL Server](https://javarevisited.blogspot.com/2018/12/top-5-free-microsoft-sql-server-and-transact-sql-online-courses.html#axzz5hG3koJem), [MySQL](https://javarevisited.blogspot.com/2018/05/top-5-mysql-courses-to-learn-online.html), [PostgreSQL](https://medium.com/javarevisited/7-best-free-postgresql-courses-for-beginners-to-learn-in-2021-3bf369d73794), but knowing just one is enough. The key point is that you should be familiar with the database. You should know how to insert/update/delete data and [write SQL queries](https://javarevisited.blogspot.com/2017/01/a-better-way-to-write-sql-queries.html) to retrieve it.

Knowledge of advanced concepts like joining an aggregate function is a big bonus and if you want to get that then [**The Complete SQL BootCamp**](http://bit.ly/2yoX0mI%20https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fthe-complete-sql-bootcamp%2F) is a great place to start with.

[![](https://cdn-images-1.medium.com/max/800/0*FiPXQ-pumHmPAhFQ.jpg)](http://bit.ly/2yoX0mI%20https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fthe-complete-sql-bootcamp%2F)

And, if you need some free alternatives, here is a list of [free courses to learn SQL](http://www.java67.com/2018/02/5-free-database-and-sql-query-courses-programmers.html) for Programmers and Software developers. 


### 6. UNIX or Linux
Like SQL, UNIX also has withstood the test of time. It's also been around for more than 30 years and I hope it will be there for many more coming years.

Since most programmers have to work in Linux machines at some point, good knowledge of [Linx command line](https://hackernoon.com/top-5-free-linux-courses-for-programmers-4a433b4edade) goes a long way.

It allows you to work effectively. You can search files, know what's going on with the system by checking its CPU and memory usage, and perform basic and advanced tasks.

If you want to learn Linux commands I suggest going through [**Learn Linux in 5 Days and Level Up**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=562016.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Flearn-linux-in-5-days%2F)Your Career course on Udemy.

[![](https://cdn-images-1.medium.com/max/800/0*gGL3e6yT_WQzdd4b.jpg)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=562016.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Flearn-linux-in-5-days%2F)

If you need some free alternatives then you can also check out this list of [free courses to Learn Linux for Beginners](https://dev.to/javinpaul/5-free-courses-to-learn-linux-for-beginners-367f) here on Dev.to. 


### 7. Microsoft Excel
I may get a lot of flaks for including Excel in this list but I still think that Excel is one of the king tools for programmers, software developers, project managers, traders, and business guys. It's much more than just spreadsheet software.

It provides many useful features and functions to perform sophisticated data analysis. I have used Excel to track progress, reconcile data, [data science](https://dev.to/javinpaul/10-data-science-and-machine-learning-courses-for-programmers-looking-to-switch-career-57kd), data quality checks, and for project planning.

It has several uses and that's why I urge every programmer to learn Excel in depth. Instead of just copying and pasting data, you should know basic functions like searching, sorting, filtering, and VLOOKUP to compare stuff.

If you want to learn Excel from scratch or want to improve your knowledge, [**Microsoft Excel --- Excel from Beginner to Advanced**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fmicrosoft-excel-2013-from-beginner-to-advanced-and-beyond%2F) is a great course to start with.

[![](https://cdn-images-1.medium.com/max/800/0*lzFgfh0SAWn4wnp1.jpg)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fmicrosoft-excel-2013-from-beginner-to-advanced-and-beyond%2F)



### 8. Programming Languages
Of course, if you want to become a programmer than you must know a programming language: [C++](https://hackernoon.com/top-5-free-c-courses-to-learn-programming-in-2019-d27352277da0) or [Java](https://javarevisited.blogspot.com/2018/08/top-5-free-java-8-and-9-courses-for-programmers.html), or maybe [Python ](http://www.java67.com/2018/02/5-free-python-online-courses-for-beginners.html)or [JavaScript](http://www.java67.com/2018/04/top-5-free-javascript-courses-to-learn.html). You can choose whatever you want to but my personal suggestion is that you should at least know Java.

It's very easy to start with and that's why a good choice for beginners. It's also immensely powerful and allows you to virtually anything.

It has got libraries from doing basic stuff like web development to more complex tasks with Big Data and so on. If you decide to learn Java then [**The Complete Java MasterClass**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fjava-the-complete-java-developer-course%2F) is probably the best place to start with.

[![](https://cdn-images-1.medium.com/max/800/0*KOoo4eNDlDLI6UHy.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fjava-the-complete-java-developer-course%2F)

If you need more options and if you don't mind learning from free resources, then you can also check out this list of [free Java Programming courses for Beginners](https://javarevisited.blogspot.com/2017/11/top-5-free-java-courses-for-beginners.html#axzz5mwZJhPHT) and these [free websites to learn Java](http://javarevisited.blogspot.sg/2015/06/2-websites-to-learn-coding-in-java-online-free.html) as well. 



### 9. Networking Basics

Today's world is an inter-connected world and anywhere you go, you will find computer networks, starting from your home, where you are using Wi-Fi across many devices, to schools, colleges, and offices which use Local Area Network (LAN) to the Internet.

Most of the applications you will write like Web applications or Mobile apps will also not be standalone but client-server kind of application where the request will go through the network to a server. Clients will access your application from anywhere in the world.

The bottom line is that you must understand the networking basics to understand, develop, and support your application. If you want to learn more then I suggest you join [**The Complete Networking Fundamentals**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fcomplete-networking-fundamentals-course-ccna-start%2F)course on Udemy. It's a good starting point for beginners.

[![](https://cdn-images-1.medium.com/max/800/0*6RlfsBW4q9GSUDeB.jpg)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fcomplete-networking-fundamentals-course-ccna-start%2F)


If you need another option, then [Introduction to Computer Networks for Non-Techies](
https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fintroduction-to-computer-networks%2F) is also a good starting point. 



### 10. Scripting Languages
In point #8 I have asked you to learn a programming language, and yet here I am asking you to learn a scripting language? Why? Can't the same programming language be used as a scripting language?

Well, there are certainly some Programming languages that are good for both [OOP coding](https://javarevisited.blogspot.com/2018/07/10-object-oriented-design-principles.html) and scripting like [Python](https://javarevisited.blogspot.sg/2018/05/10-reasons-to-learn-python-programming.html), and that's why I asked you to learn them at least. 

But if you happen to choose [C/C++](https://hackernoon.com/top-5-free-c-courses-to-learn-programming-in-2019-d27352277da0) or [Java](http://www.java67.com/2018/08/top-10-free-java-courses-for-beginners-experienced-developers.html) then you can't whip out something as quickly as a [Python](https://medium.com/swlh/5-free-python-courses-for-beginners-to-learn-online-e1ca90687caf) or Perl developer can do.

That's why I suggest every programmer learn Python and If you agree, [**The Complete Python Bootcamp**](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fcomplete-python-bootcamp%2F) is a great course to start with.

[![](https://cdn-images-1.medium.com/max/800/0*UbraE8q1vts0-YfG.jpg) ](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=634352.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fcomplete-python-bootcamp%2F)


The scripting language makes it easy to create tools and scripts to solve common problems in the programming world. If you have a good command of a scripting language like Python then you can automate mundane stuff easily.

Once again, I suggest you [learn Python](https://dev.to/javinpaul/why-every-programmer-should-learn-python-in-2019-157i) kill two birds in one stone, and if you need some more resources, these lists of [free Python courses](https://javarevisited.blogspot.com/2018/12/10-free-python-courses-for-programmers.html) are also very helpful

Computer science graduates and all people who want to become Programmers or want to go into Software Development or Web Developers can use this list to find out about things, tools, and skills to become a successful programmer.

Other **Programming Articles** you may like to explore:

-   [The 2021 Java Developer RoadMap](https://javarevisited.blogspot.com/2019/10/the-java-developer-roadmap.html)
-   [Top 5 Courses to learn Spring Boot in 2021](https://www.java67.com/2018/06/5-best-courses-to-learn-spring-boot-in.html)
-   [10 Programming languages to Learn in 2021](http://www.java67.com/2017/12/10-programming-languages-to-learn-in.html)
-   [10 Tools Every Java Developer Learn in 2021](https://www.java67.com/2018/04/10-tools-java-developers-should-learn.html)
-   [10 Books Java Developers Should Read in 2021](http://www.java67.com/2018/02/10-books-java-developers-should-read-in.html)
-   [20 Libraries Java developer should know](http://javarevisited.blogspot.sg/2018/01/top-20-libraries-and-apis-for-java-programmers.html)
-   [10 Frameworks Java and Web Developer Should learn in 2021](http://javarevisited.blogspot.sg/2018/01/10-frameworks-java-and-web-developers-should-learn.html)
-   [10 Scala and Groovy Frameworks to learn in 2021](https://javarevisited.blogspot.com/2020/09/top-10-scala-and-groovy-frameworks-java.html)
-   [My favorite free courses to learn Java in depth](https://medium.com/javarevisited/10-free-courses-to-learn-java-in-2019-22d1f33a3915)
-   [Top 5 courses to learn Spring Framework in Depth](https://javarevisited.blogspot.com/2018/06/top-6-spring-framework-online-courses-Java-programmers.html)
-   [10 Free courses to learn Maven, Jenkins, and Docker  for Java developers](https://medium.com/javarevisited/top-10-free-courses-to-learn-maven-jenkins-and-docker-for-java-developers-51fa7a1e66f6)
-   [10 Free Spring Boot Courses for Java developers](https://medium.com/javarevisited/10-free-spring-boot-tutorials-and-courses-for-java-developers-53dfe084587e)
-   [10 Advanced Spring Boot Courses for Java Programmers](https://medium.com/javarevisited/10-advanced-spring-boot-courses-for-experienced-java-developers-5e57606816bd)
-   [Why Java Developers learn Docker in 2021](https://javarevisited.blogspot.com/2020/11/why-devops-engineer-learn-docker-kubernetes.html#axzz6dXsEfLvJ)

>P.S. - By the way, if you are interested to learn more about things programmers should know, there is a lot of guidance available on the Internet like the [**97 Things Programmer should know**](https://www.amazon.com/Things-Every-Programmer-Should-Know/dp/0596809484/?tag=javamysqlanta-20) book, a must-read for every serious Programmer.