Competitive Programming - Where Computer Geeks become Gladiators
Contrary to popular belief, programmers have a life, though mostly bound to their computers. One of the many incentives that make it so is programming competitions. Competitive programming is a popular event for programmers and students alike that tests and sharpens the competitor's knowledge and skill on mathematics and computer programming, and introduces aspiring computer geeks to the world they're stepping into.
WHAT IS COMPETITIVE PROGRAMMING?
Competitive programming is similar to quiz contests. Here a team or individual is given a number of mathematical and logical problems to solve using any programming language allowed by the host. The competition can span from just a few hours to even months. The categories of problems cover many mathematical concepts like data structures, graphs, number theory, dynamic programming, string processing, algebra, geometry and much more. The competitions take place online – on both local and global networks. The team that solves the most problems earliest with the least erroneous submissions wins. There can also be other criteria of point distribution such as the efficiency of the algorithm, size of the code and many more.
HOW DOES IT WORK?
The contest is set up by hosts. Hosts can be educational institutions, tech companies or even an institution of the government. The hosts choose a set of problems. The problems, by tradition, include a short story – often consisting of real world references – that conveys the real world implication of the problem. Following that, the property of the inputs and outputs are specified along with a couple of samples. Sometimes the problems can have hints at the end.
The hosts specify the programming languages that are permitted to code the problem with. They also set the duration of the contest. To verify the submissions from contestants, a built-in compiler is used that compiles the programs, runs them and checks them against given test cases, which are hidden from the contestants most of the time. It also keeps track of the performances by the teams.
The rules can vary from contest to contest. Different contests have different durations, number of problems, problem categories, test cases, scoring and participation criteria.
The longest running and the most prestigious international programming contest is the ACM ICPC, regarded as the "Olympics of Programming Competitions". The contest began in 1977 regionally and gained global popularity soon after. They hold their regional contests over the internet where teams of maximum three students compete from universities around the globe. ACM ICPC's contest consists of 8 problems that need to be solved within 5 hours. They allow the languages C/C++ and Java. Their scoring system is also simple enough. The teams are ranked based on the number of problems solved. If tied, the sum of their elapsed time for successful submissions is taken into consideration.
WHAT'S THE USE?
The key to being a good programmer, like any other profession, is practice. And programming contests pave the way for exactly that. There are numerous programming problems stashed in the internet, collected from all the different competitions held in the past decades; an amount too massive to solve in a lifetime. And it's increasing, with many websites dedicated to competitive programming holding contests every other day. For example, Codeforces.com holds weekly contests with categories for both amateurs and professionals.
These contests also hone the competitor's fundamental knowledge of computing. Since almost all the problems are based on different data structures and algorithms, programmers get a chance to polish the basics, which is hard to come by in industrial works, yet no less important. It's also a great way for students to exercise on the theories they are taught. These give them an idea of the implementations of the many mathematical concepts.
International acclaim is one the key motivations for competitive programming. These contests are no child's play, and any sort of achievement is greatly appreciated. Many contest sites also store a contestant's previous results. Programmers with accounts on those sites use this information as a public record which is not only a great addition to their CVs, but it also works as a reputation meter in the international programming community. For example, the top ranked programmers on Topcoder are called red and yellow coders and are well-respected in the programming community. Programmers with high ranks are also offered to create contents and problems, and volunteer as judges.
Experience and achievements in programming contests make it easier to get a lucrative job at a notable software firm. Many tech companies value competitive programmers and are always on the lookout for high achievers in such contests. Noteworthy of these companies are Google and Facebook who have their own annual contests – Google Code Jam and Facebook Hacker Cup, respectively – both of which were originated for the sole purpose of picking out the best of the lot with a chance of employment. And there's IBM who sponsors the ACM ICPC.
Other than all the worldly motivations mentioned above, there's a whole community of programmers who're into these competitions just for the lulz. Programming contests are like expositions for them where they show off their shining costumes that are their computing skills, and do a performance by coding and solving problems and beating off the competitors with faster and more efficient algorithms. To one day be deft enough in the arts of programming to treat these contests as mere recreation is the dream for many programmers.
HOW'S BANGLADESH DOING?
The popularity of competitive programming in Bangladesh has been on the rise from the late 1990s. It has gained momentum in recent years with the increase of local promotions and contests. Many institutions around the country encourage their students to venture more into competitive programming. There are clubs, housing alumni and aspiring contestants alike, that promote competitive programming, train the newcomers and hold their own contests from time to time. They create a bridge between international communities and their students and help the students to participate in many contests held throughout the year.
Annual science fests held by many major public and private universities are also promoting competitive programming in the country. Aside from software contests and quiz competitions, programming contests steal the spotlight in the Computer Science Fests.
What is driving these recent strides in this field is the successful history of Bangladeshi contestants. For example, Dhaka has been hosting the ACM ICPC's Asian Regional Final since 1997 and at least one team has made it to the World Finals. These finalists have all been established in the field of computer science. Their success fuels the enthusiasm of aspirants of now and the future.
The industrial scene in Bangladesh is also greatly influenced by competitive programming. In the tech sectors of the country where software engineers are employed, applicants are given problems to solve that are similar to or even copied from many online contests. They also take into account the public records from many online contest sites that display the competence and drive of the applicant.
Our government is taking initiatives in improving this sector and attracting the young demographic to the domain of computer science. They've recently arranged a National High School Programming contest where students from classes 6 to 12 participated. University undergrads who volunteered were astonished by the curiosity and skills of the young contestants. They're the signs of better days to come.
HOW TO GET STARTED?
You're all set to go if you have basic knowledge in mathematics and programming and have an internet connection. For beginners, the best online site for practicing is UVA Online Judge that has a compilation of more than 4000 basic problems. There are also sites like CodeForces, HackerRank, LightOJ, SPOJ, CodeChef and many more. It's preferable to stick to one or two sites and climb up their rankings. Regularity is the key. There are plenty of resources on the internet if you ever get stuck, but plagiarism will be beneficial to no party.
To compete in international events, you need to look out for online notices, subscribing to their social network pages. You also need to keep in mind their many rules and restrictions. Many require the verification from the institution you're studying at and a faculty as a coach, like the ACM ICPC. Getting ready for big contests like this require more than solving problems. You need teamwork and persistence to solve for 5 hours straight. Arranging contests for yourselves is a good way to go and clubs can be of great assistance in this regard.
The world of computer science is a vast realm, and it's getting bigger exponentially with each passing day. If you're willing to leave your mark then seize the opportunity that is competitive programming.
Special thanks to Sheikh M. Sarwar, Assistant Professor, Institute of Information Technology, University of Dhaka.