A fresh software engineer is often confused with his future career prospects. It's easy to get lost in the sea of technologies which is slowly consuming us all. It's very easy to lose focus and float around and reaching nothing after spending significant time in this field. In this article I will share 4 killer concepts that a fresh software engineer can learn which would definitely benefit him/her further down the road.
People have different opinions regarding this topic and I will not start the debate again. For me, any object oriented language should be fine. As a student, I think learning C helps a lot. You get first hand experience with raw memory. You have to implement lot of data structure on your own and you get to know how things work behind the scene.
But when you work in any company as a software engineer, you need to follow some proper structure, proper design etc. which results in faster project deliveries. So, in the real world, as far as I have seen, object oriented design is a MUST. For all the object oriented languages, the basic principles are almost similar. So, if you gain expertise in one object oriented language, you can switch over to another with minimal effort.
So, for me, language is not important. Design principles are important. You should first master the design principles like Inheritance, Encapsulation, Interface, Abstraction, Is-A, Has-A relationships etc. You should also learn the standard design patterns like Builder, Observer, Adapter, Iterator, Decorator, Singleton, Strategy, Factory etc.
You should learn the basic object oriented principles and design patters as soon as you can as this will make you more mature as a programmer and would definitely boost your thinking process.
Next comes the second important question, which framework shall I learn. Basically there are different frameworks for different languages which helps to to develop your business logic as quickly as possible and saves you from writing lot of boiler plate code.
I think that before you jump to use a framework which support a particular language, you should master that language first. For example, before you jump to use Spring, you should know ins and outs of Java. In that way you would know how the framework is helping you or saving your time. Then only you would respect/love the framework and would enjoy using that.
So, based on your project requirement you can use any good framework. If you pay attention, you would find that all these different frameworks behave very similarly and if you know the concepts of any framework, you would be able to learn the others very easily.
So, don't spend too much of your time thinking about language and frameworks. Spend your valuable time mastering design principles and design patterns.
This is heart and soul of a good developer. You should make a habit of writing test cases for each and every functionality of your application. Test Driven Application is fun to write. I know you would hate it at first but would not be able to survive without it as you walk further down the road. It's like a drug.
Unit Tests and Integration tests are Fun to write and you would love it once you have some experience with these. Get as much test coverage as possible for your code.
Acronym for High Level Design. The sooner you master this, the further you would be ahead in the race.
HLD is the skill of converting a vague statement to meaningful communication between different technologies. To be specific, convert the sentence "How would you implement Google Hangout ?" to meaningful design layouts.
These kind of skills generally come with experience but you can hack your way up in no time. Watch lot of videos on youtube regarding different technologies. Check videos on Authentication, Message Queues, Load Balancing, Microservice, Fault Tolerance, Web Socket, Sharding, CAP theorem, Rest API, Caching, Relational/NoSql database etc.
Check, how big companies like Facebook, Instagram, Netflix etc. have Designed and Developed their highly scalable and Highly available systems. This would give you ton of knowledge and you would be able to find pattern in the designs.
With this knowledge in hand you would be able to turn such vague statements into meaningful communication among the various components I have mentioned above by asking a lot of questions and brainstorming among the team members regarding the exact requirements of your project. Some sample questions are like -
How many users are going to use the application ?
Where are the users located Geographically ?
What is the peak number of users at a given time ?
This kind of questions would help you to understand the load on your application and would help you how much hardware you would need and where they need to be located etc. Then you can dive into the actual application design by using the above mentioned technologies and establishing relationship among them.
Acronym for Low level design. Low level design is the class level design layout for your application. With your knowledge of basic object oriented principles and design patterns, you are expected to come out with the different classes and interfaces and relationship among them.
This looks easy at first but it's often hard to come up with good flexible designs thinking about all future prospects of your application. You should practice designing as many simple applications as possible which would help you to improve your object oriented thinking.
For example - you can design a online chess game, snake and ladder game, parking lot etc.
So, these are the four important concepts a fresh software engineer can learn to quickly climb up the ladder.
Sharing is Caring!
RECOMMENDED POSTS FOR YOU