Do you need to be a Competitive Programmer?
Tags: computerscience, graduate, beginners
Published: 2024-01-20 22:45:24

For people who need the short answer, the answer is: no. But, if you stop reading here, you will be greatly misunderstood.

The fact is, you do need "some thing" to convince the world that you have the potential to stand out from the crowd. For some, it is CGPA, and for others, it is competitive programming. In our country, these two are the most mainstream paths to prove someone's potential. So, going with the flow is easier since there is lack of guidelines in other sectors. But, aside from these two paths, there is another kind of students, who does not actually feel themselves fit in either of the two paths. And if I am not wrong, this group is the largest one. So, what about them? Is choosing Computer Science was a mistake for them? Are CGPA or competitive programming only 2 parts to build career in computer science? Of course not.

I am not going to brag about how to learn web development/machine learning/android app development/backend/frontend etcetera. It is easy to learn about these technologies and check what suits you. Just one thing to add for people who ask "What should I choose as career?" My answer is, why do you have to choose? Try all a little and find out for youself what suits you. Nobody knows how you feel better than you. Just take the learner mindset first, read the docs, get your hands dirty and try. The life is all this is: Try, fail and try again.

Now, here comes my main point of discussion. Before you learn some fancy computer tech, you have to build patience. And a lot of it. Patience for learning something by yourself, patience for reading a lot of documentations, patience for trying again after failing, patience for thinking about the solution for a long time (and failing again), and above all, patience for sitting in front of your monitor screen and just staring at your code (sometimes it helps 😛 ). Take my word, you do not need contest programming, but you need patience.

And to build that patience, problem solving is the best friend. Now, please do not contradict problem solving with contest programming. In Bangladesh, these two go side by side but you have to realize first that, problem solving is not all contest programming. For contest programming, you have to solve the problem, you have to be fast, you have to take the pressure onsite and be thorough while feeling the pressure. These are what makes contest programmers different from others. But, if you do not like it, you do not have to try it, but even though, you can try to solve problems on your own. You do not have to be successful all the time, you do not have to learn number theory, combinatorics and all, you do not have to be good at it, you even do not have to enjoy it a lot. You just have to try. Read the problem, try to undertand, if you can't, check the solution and try to understand, try to write the code for yourself, if you can't, read someone else's code and try to understand (this goes a mile in improvement by itself), then try to implement by yourself. Just try and solve anyway. that is all. you do not have to be fast about it, you do not have to be the solver, you just need to try to understand the solution and the problem. You also do not have to memorize/remember the problem. Do not take it as your enjoyment if you cannot, just take it as an investment for your career. Just like how you study all those 30 pages of class lectures on the road before your class test. You do not do it for enjoyment, right? Or does that last minute learning gives you some kind of adrenaline rush? 😛

The thing is being consistent with the practice of problem solving, you will grow a lot of patience and good thinking process and it will just help you to keep your brain warmed up. Software Development dulls your brain and burns you out. Thinking about new problems is what keeps the brain fresher.

Now, if you feel that you are comfortable writing code, reading the docs and you have the patience for sitting with a problem for a long time, now you try to explore your world. Try JavaScript, build some good web interfaces. Learn about design patterns and try to write code following them. Learn about software architecture, state management, compilers, database,networking, how they work, how database stores data, how compiler compiles code, how network packets know where to go, just try to understand the fundamentals. Question the technologies. Why do we need jQuery, why do we need node.js? What is node/goLang runtime environments? How are they different from compilers/interpreters? Ask questions and connect the dots. If you do that, you will feel a eureka moment down the road some day, when you will realize that you can connect the dots of the technologies and you do not blindly write `fetch("data.json")` and some jeany comes and gets you the data from the database. Try to understand the core concepts. Now, learn at least one technology. If you choose some javascript framework like React/Vue/jQuery, please learn why they exist first. Why do we need them on top of JavaScript?
If you choose Machine learning/AI, please learn the linear algebras behind the neural network models first. do not just blindly learn tensorflow/pyTorch and change the bias a little and pray to God to give some perfect classification and regression. Do the Andrew Ng course first. Clear up your basics, the world will open itself up to you.  Do not go with the flow, question the flow, why it flows in this direction?

So, the summary of this writing is to make your understand that, you do not need competitive programming, all you need is to be curious enough to ask questions. A lot of questions and find the answers for those questions.

Finally, if you are a student, please cut-off some of your chill time and invest in asking these questions. Make memories for sure, but do not only live in the moment for 24/7. The world will turn upside down in coming years. Soon you will realize that you are just another person on the earth. You will not have the shadow of your university campus to boast about something. So, just invest some time for that lone future of yours where your friends will not be a part of it to share. It is not their faults either. Everyone will face the same struggle that you are facing, so they will struggle as well with you, but not for you. So, just take control of that future and get your hands dirty early on. You have to do it anyway down the road.