Competitive Programming vs Software Development — Where Should I Invest My Time?

Tegar Satria N
IT Paragon
Published in
7 min readApr 19, 2022

As software developers, we need software development skills for work. But many job opportunities used competitive programming as a technical test before being hired, and in some conditions. We need to optimize our code complexity in the project handled. So the question for some software developers or some people finding a job, especially students is…. Where should I invest my time?

source: www.geeksforgeeks.org

Overview

Competitive Programming

Competitive Programming (a.k.a. CP) is activities to solve coding problems using algorithms and data structures. More specifically, competitive programming is a competition to solve a problem with an algorithm by writing a computer program. The computer program must be able to produce answers within a certain period and with certain memory limitations. Who can solve the problem faster and with less memory will be everyone’s goal (competitive programmer’s goal)

The focus of competitive programming is the ability to find problem-solving algorithms and implement these algorithms into a computer program. Thus, other programming aspects such as graphical interfaces, networks, databases, etc. usually do not need attention. Competitive programming no needs human aspect like UI / UX or Clean Code, it likes a black box when getting the input or test case it can solve by code, and only aware of this problem could be solved by this algorithm.

Software Development

Software development is the development of software that is run systematically to produce a good quality product. The development is dedicated to the process of creating, designing, deploying, and supporting software.

In the world of developers themselves, this term is often referred to as the Software Development Life Cycle (SDLC). SDLC is the life cycle of software development. The purpose of using the SDLC itself is to build an information system that is well planned to meet the target product to be released. Instead of CP, Software Development not only focuses on developing software, but also focuses on human aspects like interface, experience, usability, and granularity

Example platform for Competitive Programming and Software Development

Where Should I Invest My Time?

The Confusion

Most software engineer who comes from university learns how to build apps with some framework, some of them ever tried CP whether in competition or not. Let's see some opinions from software engineers from big tech giant companies:

“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.” Satendra Verma, Software Engineer at Microsoft

If we talk about the opposite side then a lot of engineers also agreed that taking part in CP helped them in grabbing a job opportunity to become software engineers and make it easier for them at work.

“Competitive programming helps to crack the interviews of Google, Microsoft, Amazon. It helps me to improve code quality, but is in no way necessary” — Goutham Harsha, Software Engineer at Google

Before we discuss this further let’s take an example of sport athlete

Many successful athletes, besides they take their training seriously, they keep their body fit by doing gym. Indeed, running on a treadmill, lifting weights, doing push-ups, pull-ups, etc does not make athletes win in sports, but it provides many positive things compared to those who do not do it.

Cristiano Ronaldo at Gym, source: Okezone.com

“We do a lot of sprinting drills in training and they can be incorporated into your workout whether you are in the gym or outdoors,” Ronaldo says. “Try and add it to every workout you do”. Workouts keep me fit and make me play football maximally, though. “Fit in exercise wherever you can,” he adds.

The same thing happens in software engineering when you enter the software development world as a competitive programmer…(hope you have got the message that we want to convey through the above example….).

Are competitive programming skills useful when working in the tech industry?

Almost all answers in Quora for the question above or related question, the answer is definitely yes. Here are some aspects of competitive programming that are useful for working in the tech industry:

  1. Knowledge of algorithm complexity (Big-O notation), both time complexity and space complexity. This is useful for making sure you know how efficient the code you are writing is relative to the size of the input. This analytical skill will be needed in large companies that deal with many users or big data.
  2. Careful attention to edge cases. The fewer and faster delivery trials we do in programming competitions, the more points we get. That is, competitive programmers have been trained to find edge cases in the problem in a fast time so that their code can solve all cases (test cases). In the world of work, this means that he is good at doing defensive programming
  3. It develops your creative thinking. Once you fail to accomplish the goal, you try to think differently, you try to learn from others' mistakes/success, and in a nutshell, you practice a lot. Practicing creates patterns in your mind, so whenever you face a particular situation, for which either you’d made a mistake or someone had, you quickly get the solution
  4. It builds up your confidence and channelizes your energy. For starters, you will fail a lot, but if you can positively take the failure, and can channel it towards success, and do more practice, you will after some time, be unbeatable.
  5. Readiness for technical interview (technical interview). In some technology companies, one of the stages of recruitment is a technical interview, where the job candidate will be given problems to solve. This is also a great material for a resume and easier to get online certification which can be kept on Linkedin

Does being proficient in competitive programming mean that we are 100% ready for the world of work?

Unfortunately not either. Here are some aspects of professional software development that I don’t think are acquired directly through competitive programming:

  1. Ability to write clean code. Code written for competitive programming is single-use code to solve only one problem, so it makes sense to write everything in one big main function with one-letter variable names. In the workplace, the code we write is likely to have a longer lifespan and will be read by others in the future, including yourself. So, it is a must that the code that we write must follow the rules that make it easy to understand and change, such as the concept of loose-coupling and high-cohesion, the existence of documentation, and the existence of tests.
  2. Ability to deal with open or ambiguous problems. Programming competition questions are generally closed questions that have clear descriptions and boundaries. In the professional world, this is often impossible — most of the problems we face are ambiguous, and our programs must be able to anticipate the changes that ambiguity causes. This means we must be able to collect data that can break the ambiguity and assumptions that we may have had before.
  3. Ability to design a system on a large scale. A system consists of components that interact with each other. In competitive programming, we create a component (code) that solves a specific small problem. One of our jobs is to combine such components to solve bigger business problems in the workforce.
  4. Understanding SLDC and tools used in the professional programmer. For example agile methods like scrum, version control systems like Git, DevSecOps cycle, continuous integration tools like Jenkins or TravisCI, project management tools, dependency management tools, and so on.

Conclusion

It’s not only fun to solve competitive programming type problems, but it’s also good practice when trying to master a language and learn how to think programmatically. To put it all together, competitive programming enhances our skills. It makes you sharper and a better programmer overall. However, one cannot rely solely on competitive programming to be a good developer/engineer. For students and job seekers learning Competitive Programming will help get jobs faster because most software engineering positions require technical interviews, for software engineers it will be better if they run together, improve software development skills and workout our brains with competitive programming.

Last but not least, Competitive Programming helps us to become more reliable Software Developer, but that’s not all it takes. So, how about your feeling ?

Thank you for reading, and also thank you for the following references that have inspired this article:

--

--