Technical skills software engineers must have
Sharafat Ahmed Sabir
Posted on December 25, 2019
Software engineering is one of the hottest types of jobs in the market right now. One of the beauties of software engineering is, you can be a successful software engineer without a formal degree. Skill is all that matters in software engineering.
A good software engineer needs various types of skills. But, technical skills are by far the most important ones. These are the skills that help you to get your tasks done in the workplace.
In this blog, I am gonna talk about tech skills which are must-have for software engineers.
Disclaimer: If you are fresher who is trying to land a job, this article is not for you. You do not need to learn everything mentioned here to land a job. You need to read the book: 'Cracking the coding interview'. Practice on Hackerrank, Leetcode, Geeks for Geeks, etc.
Data Structure (For every software engineer)
Data Structure is one of the most important subjects for software engineers. Data structures are some specific formats for storing data. Each data structure is efficient in some cases and inefficient in other cases. So, as a software engineer, you must have the skill to pick the right data structure.
The following data structures are a must for every software engineer:
- Array
- Linked List
- Trees
- Trie
- Stack
- Queue
- Map
- Graph
- Hash Tables
If you want to learn more about data structures, you can visit Geeks for Geeks.
Algorithm (For every software engineer)
A software engineer's main job is to solve problems. Algorithms are step-to-step instructions to solve a problem. So, algorithm is a must-have skill for every software engineer. Good knowledge of algorithms helps him/her to solve problems.
Here are some important and basic algorithms:
- BigO Notation
- Depth-first Search
- Breadth-first Search
- Dijkstra's Algorithm
- Searching
- Sorting
- Divide and Conquer
- String Matching
- Pattern
- Greedy
You can learn algorithms in Khan Academy, Geeks for Geeks and many other places.
OS (For DevOps Engineers)
Every program runs on an operating system (OS). So, knowing the underlying OS will help software engineers to write more efficient and better code.
Here are some fundamental concepts a software engineer should know:
- Process
- Memory Management
- Thread and Concurrency
- Scheduling
- I/O Management
- Inter-Process Communication
- Virtualization
After learning these fundamentals, learn about distributed systems and cloud.
Networking and Communication (For DevOps Engineers)
Most of the software engineers work on web technologies. And you should have a good understanding of networking and communication to excel at web technologies. Especially if you are interested in DevOps, networking and data communication is very important.
The followings topics are must for software engineers:
- IP
- Private/Public Network
- Router
- Switches
- LAN/WAN
OSI Model
Protocols
P2P communications
Mesh, Ring, Star, etc.
If you want to be a DevOps engineer, this can be a starting ground for you.
Programming Language (For every software engineer)
As a good software engineer, you need to learn at least one programming language very deeply. Also, I recommend software engineers to try new programming languages frequently. This helps us to learn about good things about that language. This also helps us to learn new technologies and languages quickly.
Learn at least one of the following languages deeply:
- C
- C++
- Java
- Python
- JavaScript
- C#
- PHP
Also try to learn at least one scripting language like JavaScript, PHP, Python, etc.
OOP (For every software engineer)
Object-oriented programming is one of the most used paradigms in the software industry. a software engineer should know the following concepts:
- Encapsulation
- Polymorphism
- Inheritance
- Abstraction
- Association
- Aggregation
- Composition
Database (For back-end engineers)
Software engineers have to deal with data every day. Structured data are stored in Databases. So, you should have a good understanding of databases.
You should learn at least basic CRUD operations, joining, grouping, etc.
Learn at least one of the following databases:
- PostgreSQL
- MySQL
- Maria DB
- Oracle DB
- MS SQL Server
- MongoDB
- Cassandra
- Neo4j
Git (For every software engineer)
Version controlling is very important in software engineering. This helps us to collaborate with others. It also enables us to roll back to any previous version easily.
Git is the most popular version controlling system now. You should learn at least the basics of git.
Learn how git works. Also, learn basic commands like add, commit, push, pull, fetch, merge, etc.
IDEs and Editors (For every software engineer)
IDE stands for Integrated Developer Environment. IDEs give suggestions while coding, check for errors before even compiling code and do a lot of other things. IDEs like Intellij Idea, Eclipse, Visual Studio, PyCharm, etc. are capable of doing a lot and saves a lot of time and energy of developers. Editors are simpler. But, editors like VS Code, Sublime Text, Atom have changed the game. They are capable of doing much more than editing nowadays. You have to know your IDEs and editors to unlock these potentials which can help you to be more productive.
Mentality (For every software engineer)
This part is not purely technical. But, I want to add it anyway. To acquire these technical skills, you have to be prepared. If you find things complex, do not lose hope and keep on trying. You do not have to be a genius to acquire these skills. You just need to work hard. I have seen several students who thought they could not be good at programming contests. But, after going through a rigorous training program at university, those who did not drop out of the training program, excelled at competitive programming. Some of my colleagues thought they would not be able to keep up with all these new technologies. But, those who worked hard, excelled in this industry where a new technology is being introduced every fortnight.
Conclusion
In this article, I have talked about the basic skills that software engineers must-have. These are starting ground. For your specific task, you will need to learn topics beyond this article.
N.B: If you think I missed something or if you have any opinion about this article, leave a comment below.
This article was originally written in Wget Blog
Posted on December 25, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.