Competitive Programming vs Software Development – Where Should I Invest My Time?
Competitive Programming….what comes to your mind first…? most probably you associate the idea of solving the coding questions on GeeksforGeeks, Codechef, Topcoder, Codeforces, Hackerrank, etc.
What about Software Development…? Most probably you imagine a person building an application, a website, mobile apps, or a person handling some backend or scalability issue of an application.
A lot of sites encourage you to get involved in competitive programming and practice coding questions. After all, it opens so many opportunities for job interviews. Well, that’s true but some of you are also aware that some people are earning very well in software development without having a background in competitive programming. So the question that bothers a lot of people especially students is….where should I invest my time?
Before we dig ourselves into this topic let’s talk about sports first…Take the example of any sports you like….cricket, basketball, tennis, badminton or any other outdoor game.
A lot of good players (Yes!….we are talking about good players), involved in these sports activities, not only practice for basketball or cricket or any other game all the time but also spend time in the gym to stay fit. Well, running on a treadmill, lifting weights, doing push-ups, pull-ups does not guarantee you to be successful in sports but it gives you many advantages compared to those who don’t do them.
The same thing happens in software engineering when you enter the software development world as a competitive programmer…(hope you have got our message that we want to convey through the above example….).
Choosing one is not just a confusing decision for computer science students but also it is a difficult decision for experienced developers who are looking for some better opportunities or growth in the companies. Today we will talk about this topic in detail and we will try to sort out this confusion. Before we give any opinion let’s see what’s the opinion of some engineers working in some big tech giant companies. According to Microsoft Engineer Satendra Verma, “Although it adds to your skills, a good software engineer requires a lot more than what competitive programming has to offer. Competitive programming is not a necessity for being a good software engineer.” If we talk about the opposite side then a lot of engineers also agreed that taking part in competitive programming helped them in grabbing a job opportunity and become software engineers.
Aren’t both the same thing? If it’s not then why do companies give preference to competitive programmers when it comes to hiring for the job role of a software engineer.
Can a competitive programmer become a good developer too?
Isn’t a good developer already a good competitive programmer?
We know that a lot of questions like above are popping up in your mind…the same question again arises…what should I choose and where should I invest my time?
What if we say that you should choose both and you can become both??….. Let’s have a detailed discussion on this topic now…
The biggest advantage of doing CP is that it makes your life easier and cracking the coding interviews becomes a piece of cake for you. You may face rejection in interviews even if you’re a good software developer but not a good competitive programmer. CP makes you a good problem solver which matters a lot in software development.
It’s easy for a good problem solver to work on some challenging and complex projects. When you’re working on a big project it’s important to break the problem into smaller units and solve each of them individually to make the project work for the users. Problem-solving skill comes naturally to a competitive programmer. They can break the problems into smaller units, visualize the solutions in their head easily and convert them into code with very few mistakes. This ability is much needed in software development. A good competitive programmer also writes the correct code and does not make a lot of mistakes which is another advantage of it.
CP builds the basic foundational skills and it’s all about learning the art, and the culture of programming. Solving the coding problems is an exercise for your brain and it’s also a fun game for a lot of people. A competitive programmer has always a good hold on analytical thinking, problem-solving skill, data structures, time, and space complexity of the code. When they solve coding questions on different websites, they enhance these skill sets and in real-world problems, it matters a lot….how?? Read the example given below…
Suppose you’re working on a big project where you need to handle a large-scale database with TBs of data. Here reading and writing will be a time-consuming process and it can slow down the performance of the application. To improve the performance of the application and to save a lot of resources you need to write efficient code. You can improve the time complexity of the function in your code and you can reduce the read calls by storing the most frequented data in a cache. Doing competitive programming helps you to find the most optimal solution in the least possible time. It helps make these trade-offs and in this scenario, this skill is much needed where you need to improve the time and complexity in your code and you need to find the optimal solution for the problem.
Here we can conclude that a competitive programmer can solve problems in a better way using their analytical thinking. They are good at picking up the right data structure for a specific problem. They know which one is best suited for a specific problem.
Read more about the importance of data structure and algorithms from the article Why Data Structures and Algorithms Are Important to Learn?
Ask a software developer and they will let you know how satisfying the journey is to build actual software that end users use.
We have discussed CP and the advantages of CP as well but now we are going to discuss the other side of CP which can not be comparable with software development. People who love CP generally dislike software development. The reason is that most of the time they will have to work on some libraries, frameworks, or some tools to build actual software where things are already implemented. In these cases, they don’t find any use case of their competitive programming skillset.
Being a competitive programmer if you think that software development is all about searching the solution on Stack Overflow or taking the help of some online communities then you’re wrong. Being a developer is a long shot. It takes time. It requires a culture of coding and developing stuff. You will be spending a lot of time on various sites and blogs to learn about all the tools, technologies, libraries to get the things done in your job. You need to figure out on your own which tool, library, or framework is right to pick up to solve your problems (For example, when to use MongoDB, when to use MySQL or when it’s good to use Elastic search). Best engineers are the ones who are smart enough to use the most appropriate tools to solve a specific problem.
A software developer also deals with the complexity of the system, scalability issue, and some techniques to deal with the performance issue of the application (For ex: caching mechanism).
In software development, most of the time you work in a team and your code is not just your code (but competitive programmers are often their masters). So it’s very important in software development to write clean and better code that is easy to read, easy to modify, easy to maintain, and easy to extend. Nobody loves to work on some messy code written by an XYZ developer in a team. You will receive hate from other developers if you leave some messy code in the codebase. So this skill is one of the most important skills a software developer should have. It comes with practice, patience, looking at the other developer’s code, and when you get to indulge in building some real-world projects. Unfortunately, competitive programming can not teach you this skillset.
You also need to be good at design patterns, operating systems. computer networks, distributed systems, and some other fundamental concepts of computer science. Software development improves you in multiple areas. It improves your communication skill because you need to talk to your managers or colleague regarding the product requirement or the tasks in your project. In CP, it’s just you who is writing the code and increasing the rating. There is no involvement of others.
One of the best things about software development is that you make life easier for others and you make a big impact on people’s life. Just look around you, there are so many applications making our life easier. Uber, Zomato, Swiggy, Ola are creating a big impact on people’s life. These things are not possible doing only CP. Software development also opens the opportunity of freelancing which is another good source of income for a lot of people.
What About Job Opportunities?
Yes, we need to talk about this topic…after all in the end it’s all about earning the money.
If we talk about the startups then the requirements are different for them. Most of the time they need a developer who can start everything from scratch. They need to set up and build everything from scratch. Thus, their requirements when they hire are different. They are in the initial phase of development so the numbers of users are limited for their product and hence it sometimes doesn’t require in-depth knowledge of data structure and algorithms. They generally hire some skilled developer who has worked on some projects and can kickstart from day one with minimum to no time to prep up.
A decent coding background is enough for these startups but more than that they prefer someone who already has the knowledge of all the tech stack, coding methodology, tool, library, or framework they need to work with. They care more about launching their product in the market for the users as soon as possible. These startups may need competitive programmers later when they start noticing some speed and scalability issues due to the growing number of users. In that case, making the application faster and efficient will be the preference for them.
If we talk about the big tech giant companies Google, Amazon, Microsoft, Apple, Facebook, Walmart, etc then these companies’ requirements are different. They have a huge number of users across the world and they care much more about the efficiency and the performance of the application. They need some competitive programmers with strong knowledge of data structures and algorithms. Of course, competitive programmers are best suitable for them because they can think and solve difficult problems in a more efficient way. A competitive programmer will be able to pick up the right data structure and algorithms to get things done for them. These companies focus more on the complexity of code. Because everything else is taken care of by specialized personnel already.
Well, a developer can build good software without the background of competitive programming but do you think that without the CP skillset and the knowledge of data structures and algorithms he/she can make the application faster, efficient, having better time and space complexity? Of course not…
The point is… if you’re only in software development you will be missing a few advantages of competitive programming that may help you to build good software. On the other side if you’re only in competitive programming then it would be also difficult for you to adapt to the culture of software development.
Both of them need each other. So better to become both and help yourself. You should spend time in competitive programming and later you should use this gained knowledge in making yourself a good developer. If you’re a student it’s good to spend time in CP to build the foundation but get your hands dirty in building some real project even if it’s a smaller one. For experienced developers, they can take these coding challenges as a hobby and as a fun part of their day-to-day life. Just like hitting the gym can be a part of someone’s daily life to stay fit, solving the coding question should be also a part of the developer’s life. After all, it’s all about your brain exercise.
Even if we have suggested choosing both of them, still you can choose one over another and do what you love to do. It’s all about your satisfaction and it’s completely ok if you only want to keep your focus on one specific thing. There are plenty of opportunities in both of the areas and you will be paid enough if you give your 100% in something which you love to do.