Farz edin ki balta girmemiş bir ormandasınız. Yanınızda sadece 1 çakı var. Sizden bir dağ aslanını avlamanız isteniyor. Aklınıza “Issız bir ormanda dağ aslanının ne işi var?” sorusu gelebilir. Fakat bu sizin odaklanmanız gereken nokta değil. Orada problemi çözmek için varsınız, sorgulamak için değil.
Spor programlama, ingilizcesi ile ‘Sport Programming’ veya ‘Competitive Programming’, insanların, bir önceki paragrafta değindiğim kadar soyutluğa sahip olabilen problemleri belirli koşullar altında çözen bilgisayar programları yazmayı hedeflediği akıl sporudur. Bilinen en yaygın ve eski yarışmalardan biri 1970’lerde başlamış olan ve 2011 yılında 88 ülkede gercekleşen ACM ICPC’dir. 2000 yılından itibaren bu alandaki yarışmalara olan ilgi artmıştır, bu artışta uluslararası online programlama yarışmalarının büyük bir payı vardır. Bu spor dalı sayesinde insanlar programlama yeteneklerini dünyanın her yerinden insanlara karşı test edebilmekte, yarışmalardaki başarılarıyla kariyerlerine yön verebilmektedir.
Spor programlama, yetenekli programlamacıları keşfetmede önemli bir araç olduğundan, Google, Facebook, IBM gibi birçok yazılım şirketi tarafından desteklenmektedir. Destekleyen şirketlerin yanı sıra düzenli olarak programlama yarışmaları düzenleyen Topcoder, Codeforces, HackerRank, Codechef gibi birçok organizasyon bulunmaktadır. Yarışmaların bir kısmı fiziksel olarak katılım gerektirirken, çoğunluğu ise bir internet sitesi üzerinden katılabileceğiniz şekilde düzenlenir. Birçok yarışmada ilk aşamalar internet üzerinden yapılır ve son aşamada katılımcılar belli bir zamanda, aynı yerde yarışır.
Programlama yarışmalarında katılımcılar genellikle çözülen soru sayısı, başarılı programı yazmak için harcanan süre gibi kriterler üzerinden değerlendirilir. Bu yarışmalarda katılımcıların yazdıkları programların verilen problemi başarılı bir şekilde çözmesinin yanı sıra, bu programların önceden belirlenmiş olan belli bir sürenin altında çalışması ve belli bir miktar bilgisayar hafızasından daha fazlasını kullanmaması beklenir. Yazdığınız programı yarışma sistemlerine yüklediğiniz zaman bu sistemler size çeşitli sonuçlar döner; AC (kabul edildi), WA (yanlış cevap), TLE (zaman sınırını aştın), ML (hafıza sınırı), CE (derleme hatası). Her yarışmanın sistemi farklıdır, yine de bu cevaplara eşdeğer sonuçlar alacağınızı söyleyebiliriz.
AC; o problem için önceden üretilmiş olan tüm girdilere beklenen çıktıları üreten bir program yazdığınızı gösterir. WA; programınızın çalıştığını fakat beklenen çıktıyı üretmediğini belirtir. TLE; programınızın, o problem ve programınızı kodladığınız programlama dili için önceden belirlenmiş olan süreyi aştığını gösterir. ML, tıpkı TLE gibi, programınızın kapladığı hafızanın önceden belirlenmiş olan hafıza miktarını aştığını gösterir. CE ise sisteme yüklediğiniz programın ilgili dilin derleyicisinde başarılı bir şekilde makine koduna dönüştürülemediğini gösterir. Bazı yarışmalarda sorulardan kısmi puan alabildiğiniz gibi (örneğin IEEEXtreme), bazı yarısmalarda ya tam puan alırsınız ya da hiç puan alamazsınız (örneğin ACM ICPC). Sıralama sistemi ise yarışmadan yarışmaya değişir.
Yarışmalara hazırlanmak için kullanılabilecek platformları yarışma ve pratik platformları olarak ikiye ayırabiliriz. Yarışarak hazırlanabileceğiniz platformlara Topcoder ve Codeforces örnek gösterilebilir. Bu organizasyonlar düzenli aralıklarla, genellikle iki haftada bir, online yarışmalar düzenlerler, katılımcıların performanslarına göre onlara puanlar verir ve önceden temsil ettiği sıralama aralığı belli olan renk gruplarından birine koyar. Dilediğiniz an girip istediğiniz soruyu çözebileceğiniz, pratik yapabileceğiniz platformlara örnek olarak SPOJ, Project Euler, UVa, USACO, HackerRank verilebilir. İster yarışma, ister pratik yapıyor olun, karşılaşacağınız sorular temel olarak; bir soru metnine, girdi ve istenilen çıktı hakkında bilgiye, zaman ve hafıza sinir değerlerine sahip olur. Her sorunun bir yazarı vardır. Problemi yazmanın yanında, probleme çözüm olarak gönderilen programların sınanacağı girdi ve o girdilere karşılık gelmesi beklenen doğru çıktıları üretirler. Katılımcılar belirtilen şekilde girdiyi okuyan ve istenilen şekilde çıktıyı üreten programlar yazarlar. Programların çıktıları ile problem yazarının çıktı değerleri karşılaştırılarak katılımcıya bir önceki paragrafta belirtilen şekilde bir cevap döndürülür.
Ülkemizde bu spor dalında var olan gelişmelere bakmak gerekirse; son 5 yıl içerisinde IOI’da (lise oğrencileri arasında düzenlenen en prestijli uluslararası programlama yarışması) birçok madalya alan oğrenci bulunmaktadır. Üniversite düzeyinde ise, ACM ICPC yarışmasının Güneydoğu Avrupa Bölgesi elemelerine ( ACM ICPC SEERC ) her yıl düzenli olarak ODTÜ ve Boğaziçi Üniversitesi ağırlıklı olmak üzere çeşitli üniversitelerden takımlar katılmaktadır. ICPC’de IOI’daki kadar başarılı olmadığımızı söyleyebiliriz. Bu durumun önemli sebepleri arasında ülkemizde bu alanda koçluk yapabilecek az sayıda insan olması bulunmaktadır. Son yıllarda bireysel başarılara sahip olan kişiler, bu alana ilgi duyan öğrencilere kış ve yazları Boğaziçi Üniversitesi ve ODTÜ’de düzenlenen programlama kamplarında yardımcı olarak farkındalık oluşturmaya çalışmaktadır. Ülke olarak bu alanda ön sıralarda yer almasak da, ilkokul yıllarında başlayacak bilinçli bir eğitimle en ön sıralarda yer almamızın mümkün olduğunu düşünüyorum.
Okuduğunuz için teşekkür ederim.