Maybe you are following a Computer Science-related degree and wondering what things you can start learning even before going into the industry, or you are just wondering what type of tools commonly used in the software industry. From this post, I will try to fill that gap for you.
But before that, the first piece of advice I want to give you is, all the theoretical and fundamental stuff you are learning in your university courses is going to help you a lot. Maybe you don’t realize that now, but having a sound knowledge about operating systems, computer architecture, digital design, computer networking, programming methodology, software design patterns, computer security, data structures, and algorithms going to help you if you want to design and implement resilient systems.
Having said that let’s see some of the skills/technologies/tools that you can learn by yourself before going into the industry. I thought it would be intuitive to categorize them into the following 4 sections.
- Software Design
You will have to create design documents a lot. Usually, companies use private Wiki spaces to maintain the design documents and related documents. To create diagrams we use software tools like Drawio. So having sufficient written skills is a must for a software engineer.
You will have to design and create relational databases during the design or development process. Dbeaver is one of the great tools you can use for database management (Dbeaver is something like PHPMyAdmin for MySQL).
Integrated Development Environments (IDEs)
The widely used IDE is the Intellij IDEA. Some engineers prefer to use just the Visual studio code as well. You can just use any IDE that you are comfortable with. Make sure to familiar with not just coding and building programs but debugging using the IDE as well.
Git is the widely used version controlling system among software companies. Every software engineer must be comfortable with working git. Try to maintain your codes in Github or Bitbucket. Have a look at this article to learn more about git workflows.
Programming Languages & Full-stack Understanding
The programming concepts that matter the most rather than knowing few languages. My personal openion is as a learner, it’s better learn C language first. Because, you can map with the things you learn in Operating systems, computer memory in Architecture while writing C programs.
Learn about different software architectures. Apply your computer networking knowledge to understand what’s really happening underneath. Learn about REST API fundamentals.
Most of the software engineering teams follows Agile Scrum methodology. Learn and understand how it works, what are the benefits of following Agile?
Unit Testing, Performance Testing and Code Quality
You need to write unit testable and maintainable code. Try writing unit tests while doing your university projects as well. There are many libraries out there for unit test writing for every programming language. Junit and Mockito are few examples for Java and unittest is an example for Python.
Meantime, getting familiar with JMeter tool. It’s widely used for performance testing and report generation.
You must write programs adhering to certain programming standards. The quality of the code is analyzed by tools like Sonarqube. Get familiar with Sonarqube as well.
Usually, separate deployment environments are maintained for Development, Testing, and Production. To make the development and deployment smoother CICD (Continuous Integration & Continuous Development) pipelines are used. Usually, these pipelines are created using Jenkins. So it is good to have a basic understanding of how to use Jenkins.
Companies tend to use Cloud services to create their infrastructure for a number of reasons. If you can utilize cloud services in your university projects that would be beneficial for sure. Amazon Web Service (AWS) and Microsoft Azure are widely used cloud service providers. Read the documentation, watch youtube videos and try to map the things you learn in courses with their services.
You will see containerized applications a lot. So getting familiar with Docker.
You will most probably use Linux operating system for development and also in the deployment environments. Therefore, getting comfortable with using Linux.