Another good news for Bangladesh!
NSU Student Ahmad Faiyaz has made it to Amazon! He has joined as a Software Development Engineer there.
Throughout his NSU life, Ahmad Faiyaz was a very dedicated problem solver. He was part of the legendary team NSU BugLovers, who made it to the world final of ACM ICPC 2016.
We would like to congratulate him and wish him the very best for the future!
He talked about his journey from competitive programmer to software engineer –
From Competitive Programmer to Software Engineer
If you don’t know what is competitive programming, please check this Wikipedia article. Basically, competitive programming is a programming contest where participants try to solve some well-defined problems (not like hackathon) by coding efficient algorithms in general
In this article, I am going to talk about how competitive programming helped me to become a better software engineer and how I had to adapt during the transition from competitive programming to software engineering.
I was a regular competitive programmer during the period 2011–2016, when I participated in many national, international level online and on-site contests.
My achievements are not quite big though, my team became Champion in SUB Inter-University Programming Contest 2015, Runners-up in National Collegiate programming contest 2016,
2nd Runners-up in ACM ICPC Dhaka Regional 2015 and was qualified for ACM ICPC World Finals 2016.
Currently, I am working as a Software Engineer-Machine Learning at Traveloka Singapore. Before that, I worked in tech companies like NewsCred, Augmedix at Dhaka.Many key things you can take from competitive programming career to your software engineering career. I have pointed out some of them below
One of the key ingredients of a successful competitive programmer is being a continuous learner.
You have to learn and implement new algorithms, new paradigms and techniques to improve your contest rank. The same thing is required for the software engineering as well.
You have to learn new technologies, techniques like libraries, frameworks, design patterns to build better software.
As a competitive programmer when we are going to submit a code for judging we usually make sure we covered all the corner cases.
This habit is quite useful for the software engineering as well. Writing tests is very important in software industry as it helps you to refactor, to redesign code base without having a fear of losing software’s integrity.
Writing efficient algorithms
Writing efficient algorithms is one the main goals of competitive programming. And when you are a software engineer and working on a large system, you definitely need efficient algorithms.
For example, you have a 100,000 random data points on your machine and you need sort them with a custom compare function, will you choose bubble sort?
If yes, then please stop reading my article now and go learn about algorithm complexity.
As a human, its not always possible to write bug free codes for us, right? We will do mistakes, but as a competitive programmer you need to resolve these mistakes specially the bugs on your code.
So as a competitive programmer, when you find out that the online judge is saying other than “Accepted”, you start finding the bugs on your code, right?
In short, you start debugging. And debugging is the basic component of a software engineer.
Whenever you find a problem on your production software/application, you should have the patience and the skill to find out that bug and resolve it.
So make sure you grow your debugging skill during the competitive programming career, which will be really helpful in future.
Pair programming and team member collaboration
As a competitive programmer on a team based contest you have to participate with a team consisting of 3 members.
And during the contest, you collaborate with your other members to make sure you have the right solution and the bug free code.
Usually one member writes code, another member helps with the coding and the 3rd member usually looks for another problems’ solution.
These whole collaboration and pair programming are hugely needed in software industry.
As a software engineer, you have to talk and collaborate with other technical or non-technical team members.
You might need to do pair programming with software engineer to make sure the code is readable, maintainable and production ready.
There are many other key things you can take from competitive programming to your software engineering career but above are the most important in my understanding.
When you are starting your career as a software engineer you might need to change some of your mindsets if you are coming from the competitive programming background. Some of them are like
Open ended problems
The problems given on the programming contests are usually well defined. Problem setters will provide sample input and output, you have to match it.
And you have to come up with the most efficient solution. But for the software engineers, problems are open ended.
You have a goal to solve a problem, but you might not be able to come up with the best solution before the deadline.
Or you might not be able to solve whole problem at one go.
Which is OK. Generally software engineering process is iterative. You may improve your solution on next release.
Competitive programmers write code only, they don’t need to write any documentation about their code.
Its simply because no one is going to reuse their code.
But for the software engineers, one should write documentations of one’s code, API so that other users/developers can understand the code and code’s responsibilities.
That’s all for now. Hope this article will help you to understand how its like being a software engineer from a competitive programming background.
If you like this article, recommend us. And if you have any question, just comment below. Thanks for reading.
Join us for sharing your experience