Eşli Programlama

October 07, 2021 4 dakika

Eşli programlama uzun zamandır bilinen ve uygulanan bir yöntem. Birden fazla amaç ve yöntemi var; ancak burada uzman ile aceminin birlikte çalışmasını ele alacağım.

Gözlem

Uzun bir süre tel tedavisi için diş kliniğine gittim ve tedavim bittikten sonra iki kez ameliyat oldum (her şey yolunda). Randevularımda bazen birden fazla doktor oluyordu. Biri nispeten daha deneyimli oluyordu ve normalde kendisinin yaptığı işlemleri, kendisinden daha az deneyimli olana talimat vererek yaptırıyordu. Karşılarında gerçek bir hasta olduğu için, bir uzman doktorun nasıl davranması isteniliyorsa, olabildiğince onu taklit etmeye çalışarak verilen talimatları herhangi bir soru sormadan yerine getiriyordu. Bir süre sonra deneyimsiz doktor artık tek başına randevulara bakıyor, kendisine öğretilenleri uyguluyordu.

Bir diğer gözlemlediğim şeyse her acemi doktorun hep aynı uzman doktorla eşleşmemesiydi. Bu da önemli detay çünkü o uzman doktorların da benzer süreçlerden geçtiğini açıklıyor.

Eşli Programlama (Pair Programming)

Açıkça itiraf etmem gerekirse eşli programlamanın önemini çok geç kavradım. Nasıl olsa code review’lar, dökümantasyon var ve acemilerden yeni sorular geldikçe güncelliyoruz. Acemilere “bana istediğin zaman soru yazabilirsin, müsait olduğumda cevaplayacağım.” demeyi eksik etmiyorum; ama bunların hiçbirisi eşli programlamanın doldurduğu esas boşluğu doldurmuyor.

Yine aynı metaforu kullanarak şöyle düşünelim: Diyelim ki deneyimsiz bir doktor randevunuza bakıyor ve tek başına. Soru sormak için hastayı bekletemez, operasyonu kamera ile kayıt altına alıp, daha sonra uzman doktora gösterip kendisini değerlendirmesini isteyemez. Hasta gelir, o an yapması gerekeni yapar ve hastayı gönderir.

Production’un kalitesini doğrudan etkileyecek kritik bir işi acemiye sözle veya yazıyla yönlendirerek yaptırmak; iş akışını birkaç defa gösterip, sonra onu gözlemleyerek kendi başına yapmasını sağlamak, onun hem takıma adapte olmasını hızlandıracak, hem de takımdaki diğer arkadaşlara zaman kazandıracak.

Gelelim ikinci önemli konuya, yani uzman ve acemilerin her seferinde rastgele eşleşmesi durumuna. Bunun sağladığı birkaç önemli fayda var:

  1. Acemi, tek bir uzmandan eğitim almak yerine birden fazla uzmandan eğitim alıyor. Eğer uzmanlar arasında aldığı bilgiler arasında bir tutarsızlık varsa acemi buna itiraz edecek ve uzmanı uyaracak.

  2. Uzman da bu tutarsızlığı, gerekirse diğer uzmanlarla konuşarak çözecek, nihai kararı bildirecek.

  3. Hem acemilerin birden fazla uzmanla, hem uzmanların birden fazla acemiyle doğrudan bir iletişimi olacak. Böylece kişiler üzerinden değil, pozisyonlar üzerinden ilişki kurulacak.

Özellikle son maddede belirttiğim faydayı ben çok önemli buluyorum. Projelerin kişiden bağımsız olması, pozisyonların sabit ve farklı çalışanlar tarafından idame edilebilir olması çok önemli. Bir projede geliştiriciye kişisel olarak ne kadar az ihtiyaç duyuluyorsa, bu o geliştiricinin o kadar başarılı iş yaptığını gösterir. Bu geliştirici açısından da iyi bir şey çünkü takım veya proje değiştirmek istediğinde o kadar az engelle karşılaşacak ve az rahatsız edilecektir.

Uzmanı Meşgul Etmenin Maliyeti

Eşli programlama olunca, aynı işi yapan iki insanın birlikte harcadığı süreyi iki ile çarpmak gerekiyor. Fakat bu kadar düz mantıkla kişi/saat hesabı yapmak yanıltıcı olabiliyor. Bir aceminin işe alışma ve sorumluluk alma süresini azaltmak için uzun vadede bu maliyet katlanılabilir.

Burada dikkat edilmesi gereken, bir uzmanı haftada en fazla bir veya iki saat meşgul etmek, her uzmanın sorumluluk almasını sağlamak ve adil görev paylaşımı yapmak.

Maliyeti azaltacak en önemli şey, eşli programlama için seçilecek olan iş aceminin değil, uzmanın işi olmak zorunda. Yani uzman, kendi başına yapabileceği bir işi acemiye yaptıracak ki acemi kendisini idame edebilsin. Uzmanın bu durumda tek maliyeti, kendi başına hızlıca yapabileceği bir işi acemiye yaptırarak biraz zaman kaybetmiş olacak. Daha önce de söylediğim gibi, bu maliyet uzun vadede katlanılabilir.

Kaynaklar

Bu konuyu merak edip araştırdıkça, tahmin ettiğimden fazla detaylı bir konu olduğunu farkettim. Bu yazıyı fazla uzatmadan, bazı kaynaklar paylaşarak okuyucuyu bilgilendirmek isterim.