A programming competition generally involves the host presenting a set of logical or mathematical problems, also known as puzzles or challenges, to the contestants (who can vary in number from tens or even hundreds to several thousand).
Sebuah kompetisi pemrograman biasanya melibatkan tuan rumah yang memberikan sejumlah masalah matematika dan logika, yang disebut juga sebagai teka-teki, kepada para kontestan (yang jumlahnya beragam mulai dari puluhan hingga ribuan orang), dan para kontestan ini diminta untuk menuliskan program-program komputer yang memiliki kemampuan untuk menyelesaikan setiap masalah yang diberikan.
Judging is based mostly upon number of problems solved and time spent on writing successful solutions, but may also include other factors (quality of output produced, execution time, memory usage, program size, etc.).
Penilaian sering kali berdasarkan jumlah masalah yang diselesaikan dan waktu yang dihabiskan untuk memprogram solusi yang benar, tetapi dapat juga dipengaruhi oleh faktor-faktor lainnya (kualitas dari keluaran yang dihasilkan, waktu untuk mengeksekusi program, ukuran dari program, dan lain-lain).
One of the oldest contests known is the International Collegiate Programming Contest (ICPC) which originated in the 1970s and has grown to include 88 countries in its 2011 edition.
Salah satu dari kontes tertua yang pernah ada adalah International Collegiate Programming Contest (ICPC) yang pertama kali diadakan pada tahun 1970-an, dan telah berkembang hingga menyertakan 88 negara pada ICPC tahun 2011.
From 1990 to 1994, Owen Astrachan, Vivek Khera and David Kotz ran one of the first distributed, internet-based programming contests inspired by the ICPC.
Dari tahun 1990 ke tahun 1994, Owen Astrachan, Vivek Khera, dan David Kotz menyelenggarakan salah satu dari kontes pemrograman pertama yang terdistribusi dan berbasis internet, terinspirasi dari ICPC.
Interest in competitive programming has grown extensively since 2000 to tens of thousands of participants (see Notable competitions), and is strongly connected to the growth of the Internet, which facilitates holding international contests online, eliminating geographical problems.
Minat pada pemrograman kompetitif telah bertumbuh pesat sejak tahun 2000 seiring dengan perkembangan internet karena internet merupakan fasilitas yang digunakan untuk mengadakan kontes internasional secara online, mengatasi masalah geografis.
The aim of competitive programming is to write computer programs which are able to solve given problems.
Tujuan dari pemrograman kompetitif adalah menulis kode sumber dari program komputer yang dapat menyelesaikan masalah-masalah yang diberikan.
A vast majority of problems appearing in programming contests are mathematical or logical in nature.
Sebagian besar masalah yang diberikan pada kompetisi pemrograman bertemakan matematika dan logika.
Problems related to constraint programming and artificial intelligence are also popular in certain competitions.
Masalah-masalah terkait constraint programming dan kecerdasan buatan juga populer di beberapa kompetisi.
Irrespective of the problem category, the process of solving a problem can be divided into two broad steps: constructing an efficient algorithm, and implementing the algorithm in a suitable programming language (the set of programming languages allowed varies from contest to contest).
Terlepas dari kategori masalah di atas, proses menyelesaikan masalah dapat dibagi menjadi 2 langkah utama: membangun algoritme yang efisien dan mengimplementasikannya menggunakan bahasa pemrograman yang sesuai (bahasa pemrograman yang diizinkan pada setiap kompetisi dapat berbeda-beda).
Normally, contest problems have an all-or-none marking system, meaning that a solution is "Accepted" only if it produces satisfactory results on all test cases run by the judge, and is rejected otherwise.
Secara normal, soal-soal dari kontes memiliki sistem penilaian all-or-none, yang berarti kontestan akan mendapat skor jika dan hanya jika solusi yang mereka berikan berhasil melewati seluruh kasus uji yang diberikan oleh judge, dan tidak akan mendapat apa-apa jika ada paling tidak satu kasus uji yang gagal dilewati.
Some other contests only require that the contestant submit the output corresponding to given input data, in which case the judge only has to analyze the submitted output data.
Pada beberapa kontes, kontestan hanya perlu mengirimkan output dari input yang diberikan, lalu judge cukup menganalisis output yang dikirimkan.
Online judges have rank lists showing users with the biggest number of accepted solutions and/or shortest execution time for a particular problem.
Online judge memiliki fitur ranklist yang menampilkan peserta yang memiliki jumlah solusi yang berhasil, dan/atau waktu tercepat untuk menyelesaikan masalah.
These include: Participation in programming contests may increase student enthusiasm for computer science studies.
Sumber daya tersebut termasuk: Partisipasi dalam kontes pemrograman dapat meningkatkan antusiasme siswa terhadap bidang studi ilmu komputer.
The skills acquired in ICPC-like programming contests also improve career prospects, as they help to pass the "technical interviews", which often require candidates to solve complex programming and algorithmic problems on the spot.
Kemampuan yang didapatkan dari kontes pemrograman seperti ICPC juga meningkatkan prospek karier kedepannya, karena kemampuan tersebut dapat berguna untuk mengerjakan soal-soal interview kerja, yang sering kali kandidat diminta untuk menyelesaikan masalah pemrograman kompleks dan algoritma secara langsung.
There has also been criticism of competitive programming, particularly from professional software developers.
Namun ada juga kritik terhadap pemrograman kompetitif yang secara spesifik disampaikan oleh pengembang perangkat lunak profesional.
One critical point is that many fast-paced programming contests teach competitors bad programming habits and code style (like unnecessary use of macros, lack of OOP abstraction and comments, use of short variable names, etc.).
Salah satu poin penting yang disampaikan adalah banyak kompetisi pemrograman serba cepat yang mengajarkan kompetitornya kebiasaan pemrograman dan gaya kode yang buruk.
Also, by offering only small algorithmic puzzles with relatively short solutions, programming contests like ICPC and IOI do not necessarily teach good software engineering skills and practices, as real software projects typically have many thousands of lines of code and are developed by large teams over long periods of time.
Selain itu, dengan hanya menawarkan permasalahan algoritmik yang kecil dengan solusi yang relatif singkat, kompetisi pemrograman seperti ICPC dan IOI tidak serta merta mengajarkan keterampilan dan praktik rekayasa perangkat lunak yang baik, sedangkan proyek perangkat lunak pada dunia kerja biasanya memiliki ribuan baris kode dan dikembangkan oleh tim besar dalam jangka waktu yang lama.
Peter Norvig stated that based on the available data, being a winner of programming contests correlated negatively with a programmer's performance at their job at Google (even though contest winners had higher chances of getting hired).
Peter Norvig menyatakan bahwa berdasarkan data yang tersedia, menjadi pemenang dari kontes pemrograman berkorelasi negatif dengan kinerja pemrogram pada pekerjaannya di Google.