Congratulations on taking the first and the most important step towards building a great career in Software Development, that is the curiosity to find out how to build a great career.
With this intent to work hard and build your career in software development, it is extremely important that you work hard in the right direction. The biggest problem faced by the majority of students is the lack of mentorship and lack of direction that leads to very small results of all their hard work. I have personally faced this during my undergraduate time at IIT Delhi and have seen lakhs of students feeling stressed due to the same.
As Coding Ninjas founder and as a teacher, I have seen thousands of students going through this journey and eventually succeeding in their quest. Over the years, there are few questions that keep bothering everyone. In this series of articles, I am going to try and answer as many of these questions as possible. Here is a quick flowchart of how one should prepare and work towards doing well in their tech journey.
In this article let’s talk about the first & the most important step towards building a strong career in Software Development – To build a strong grasp on Programming Foundation, Data Structures & Algorithms. These are the concepts which will train you in how to programme computers to solve problems efficiently & how to store data efficiently, that’s essential for choosing software development as a career.
Programming Foundation, Data Structures and Algorithms (DSA)
What are Data Structures & Algorithms?
While solving various problems and writing code for them, one thing we always have to think about is how do we store the data. We have multiple ways or structures to store data and the right choice is extremely important for us to write optimised code. These various structures are called Data Structures. Unless you know about these and unless you practice a lot of problems using them, you will not be able to think and implement optimised solutions for most of the problems.
The algorithm is just a fancy word for a solution to a problem. An algorithm is a set of instructions or steps that someone needs to follow in order to solve a problem. Data Structures are critical for you to think of optimised algorithms.
Why do I need to start from DSA? Why can’t I start building apps right away?
Like everything else in life, shortcuts don’t pay off in the long run. It’s extremely important that we build the right foundation before we jump into more advanced concepts/technologies. DSA would help build that foundation and it would ensure that we don’t struggle when we try to learn app/web development or even Machine Learning/ Data Science.
- It would teach you the fundamentals of solving problems in general – how to think about any problem and break it into parts and solve it.
- It forms 80% of the first filtering test & the interviews of many big product-based companies like Google, Amazon, Microsoft and the likes. So, eventually for you to crack interviews, DSA is going to play a very important role. You can look at some interview experiences of people at top companies and you will realise the importance of DSA in interviews.
- In DSA, you are taught to write efficient code, think about the time and space complexity of your solution. Goes without saying, efficiency is very important in real-world applications and you need to learn to think about it on a default mode while coding. With a good handle on DSA, you will be writing optimised code and high-quality code, which is extremely important for any real-world application.
- While developing applications, if you do not know the fundamentals of DSA, you would mostly be copy-pasting code from here and there- google, StackOverflow etc. You would not be able to understand what and why behind what you are doing. On the other hand, if you are good at DSA, many things you would do ahead would become more or less commonsensical.
How much time will it take for me to complete this?
Amount of time is completely dependent on a person’s learning pace and the amount of time you would be willing to put in every day to become a software developer. It’s far more important that you stay consistent in your learning journey rather than finishing it quickly. Learning to code and learning DSA requires extensive practice and this requires time. This being said if you are consistent in your work, you can expect to reach a good level in six months.
I have seen some of my students becoming really good in two months as well but these have been exceptionally fast learners and a majority of the people will take around six months. In our courses, we have close to 300 problems that the student writes code for. This level of practice requires time and even if you take 12 months, that is absolutely okay as it is better to be slow and steady rather than quitting midway.
Isn’t this already covered in my college curriculum?
Yes, it is covered in theory- literally and metaphorically. DSA is a part of the standard computer science curriculum in colleges.
But, there are some caveats!
- The curriculum is outdated and is not in keeping with this fast-changing world for which we are preparing. The problem solving oriented real-world approach is missing.
- The other thing that is missing in the regular curriculum is practice. Coding is like Math 2.0. The more you practice, the better you get! To master DSA, you need to practice questions, questions and more questions! Variety of questions! Just like Math, you understand a concept and practice all types of questions around it.
Which language should I start working in?
One common mistake that most students do is that they worry too much about which programming language to choose. One thing that you need to understand is that Computer Language is just a tool for us to solve problems. As long as we can do that it doesn’t matter which language we used to solve it. Once you master your programming skills in one language, it’s not hard to learn any other language. It is more important that you work on your DSA skills than the language in itself.
That being said, we do need to choose a language. I would recommend you to pick either C++, Java or Python. In case, you have been working on one of these you can continue learning in the same language. Otherwise, you can just pick one of these. Few things to keep in mind while picking them:
- Python is the easiest language to learn, so in case you feel a little under-confident just start with Python. Always remember, the language isn’t important but it’s just a tool for us to master DSA.
- C++ & Java are a little harder than Python and C++ is slightly harder than Java. This means that if you pick C++, you will be able to move to any other language very easily.
- Java can be a good middle ground in our choice and it is also very popular in the industry.
Because of the above two reasons, I wouldn’t recommend you to completely rely on the college curriculum and work on upskilling yourself on the side.
How should I learn this skill set?
This is an extremely important and tricky question. You can either learn from a book, learn from YouTube videos, join some offline classes in your city, learn from some free or almost free courses or join an online course. It’s extremely important to get this right, otherwise, you might end up demotivated and would have wasted months of your time.
While we are answering this question, we need to know the important factors which will decide whether we will be able to gain mastery on this skillset or not, in the field of software development.
- Coverage: “Where should I learn from?” We shouldn’t have to answer this question everyday. We should choose a partner who will be able to help us throughout our journey.
- Practice: As mentioned earlier, the only way for you to learn to code is to practice a lot. Ensure that you have a way to practice post understanding each topic and that you get clarity on which problems to work on post completing a topic.
- Doubts Resolution: Not getting help when needed is one of the largest factors for people to quit midway through their learning journey. You will have to answer this question before you start to ensure that you don’t get demotivated midway and you are able to reach the outcome.
- Peer Group: This is a very interesting aspect of learning. Having a peer group who is learning along with you, who you can compete with, who will push you is extremely important and should be an important factor in your decision.
I would recommend you to do a lot of research and read reviews about various options. I would repeat again that this is a very important decision and it’s fine if you spend some time thinking about this.
When is the best time to start learning DSA?
The answer to this question is NOW. Irrespective of what college year you are in, even if you have few years of experience in a non Software Development profile, if you want to build a career in Software Development, learning Programming Foundation and DSA has to be the first step.
Earlier you start is going to be better, as you will get ample time to work on your Competitive Programming profile, Development skills, contribute to open source as well as to do multiple internships etc. We will cover these in more details in the next blogs of this series. At Coding Ninjas, we get hundreds of students who learn DSA right after giving entrance exams that mean they have this skillset even before joining college. This really sets them on the right path to achieve success. It’s never too late to start but earlier is better.
I am also grateful to Vidhi Aggarwal for assisting me in drafting this resourceful blog that can help you all in chalking out a roadmap of your own.
I hope that I have been able to answer most of your doubts on how to start your programming journey for software development. In case you have more doubts, do ask them in the comments and I will ensure that I answer them.
By Ankush Singla