Pragmatik Programcı — 8

İbrahim Kürce
Jul 30, 2017 · 4 min read

Prototipler ve Yapışkan-Kağıt Notları

Birçok farklı endüstriler bazı özel fikirleri denemek için prototipleri kullanır. Prototipleme gerçek ölçekli bir üründen çok daha ucuza malolur. Araba üreticileri, yeni araba tasarımların birçok farklı prototiplerini yaparlar. Her bir prototip ile farklı açıdan arabanın testi yapılır. Bazı araba şirketleri bu işi biraz daha ileri götürüp, bilgisayar ortamında tam bir modelini çıkararak, maliyetleri daha da aşağı çekiyorlar. Bu şekilde yaparak, yeni bir nesne oluşturmadan, riskli ve belirsiz elemanları deneme imkanları oluyor.

Bizde benzer sebeplerle, riskleri analiz ve ortaya çıkarma veya azalmış bir maliyetle düzeltme imkanı bulma için, yazılım prototipleri oluştururuz. Araba üreticileri gibi, prototip ile projenin bir veya daha fazla özel yanlarını test ederiz.

Prototipleri kod-tabanlı bir iş gibi düşünürüz ama her zaman öyle olmak zorunda değiller. Yapışkan-kağıt notları, iş akışları ve uygulama mantığı gibi dinamik şeyleri prototipleme için çok iyi bir seçenektir. Kullanıcı arayüzü beyaz tahta üzerine çizilerek prototipi oluşturulabilir ya da paint tarzı programlarla fonksiyonel olmayan modelleri çizilebilir.

Prototipler sadece birkaç soruya cevap verilmesi için tasarlanır, bu yüzden üretim ortamındaki bir uygulama yerine çok daha ucuz ve hızlı uygulamalar geliştiririz. Kod önemsiz detayları ihmal edebilir. Grafik Kullanıcı Arayüzünü(GUI) prototipliyorsanız, mesela tam doğru olmayan sonuç veya veriler kullanabilirsiniz. Diğer tarafta, hesaplama ve performans yönünden bir araştırma yapıyorsanız, GUI tarafı zayıf olabilir veya hiç olmayabilir.

Detaylardan vazgeçemediğiniz bir çevrede kendinizi bulmuşsanız, kendinize gerçekten prototip oluşturmaya ihtiyacınız olup olmadığını sormalısınız. Belki de bu durumda, İzli Mermi geliştirme modelini kullanmanız daha doğru olur.

Prototiplenecek Şeyler

Ne tür şeyler prototip ile araştırmak için seçilebilir? Cevap, risk taşıyan her şey.

Daha önce denenmemiş, sistemin son halini etkileyecek kritiklikte, kanıtlanmamış, deneysel veya şüpheli her şey için. Prototipleyebileceğiz şeyler;

  • Mimari
  • Varolan sistemdeki yeni özellikler
  • Dış verinin yapısı veya içeriği
  • Üçüncü parti araçlar veya bileşenler
  • Performans konuları
  • Kullanıcı arayüz tasarımı

Prototipleme, öğrenilen bir deneyimdir. Onun değeri kodda ki azalma değil, alınan derslerde yatar. Bu prototiplemenin asıl amacıdır.

16. Tavsiye: Öğrenmek için prototipleyin

Prototipler Nasıl Kullanılır

Prototip kurgulanırken, ne tür detaylar ihmal edilebilir?

  • Doğruluk. Uygun olan her yerde sahte veri kullanabilirsiniz.
  • Bütünlük. Prototip çok kısıtlı olarak çalışmasını sürdürebilir.
  • Sağlamlık. Hata kontrolü eksik olabilir veya hiç olmayabilir. Önceden tanımlı yolun dışına çıkarsanız, prototip çökebilir, bu sorun değildir.
  • Biçim. Prototip kod, çok fazla yoruma veya dökümantasyona sahip olmayabilir.

Prototip detayları örtbas etmeli, sistemin düşünülen özel bir görünüşüne odaklanmalıdır. Bu yüzden prototip, projenin geri kalanından ayrı olarak daha üst-düzey bir dil(Perl, Python vb.) kullanabilir. Benzer şekilde, kullanıcı arayüzleri için prototip ihtiyacınız varsa, daha üst-düzey geliştirme ortamları kullanabilirsiniz.

Prototipleme Mimarisi

İzli mermilerin zıddı olarak, prototip sistemdeki hiçbir modülün çalışabilir olmasına gerek yok. Aslında, prototip mimarisi için kodlama yapmanıza bile gerek olmayabilir. Beyaz tahta üzerinde, yapışkan kağıt notlarla veya indeks kartlarıyla bu işi yapabilirsiniz. İhtiyacınız olan şey sistemin, detaylara takılmadan, beraber nasıl çalışacağıdır. Prototipleme mimarisi için bakabileceğiniz bazı özel alanlar şunlar olabilir:

  • Büyük bileşenlerin sorumluluğu iyi tanımlı ve uygun mu?
  • Büyük bileşenler arası işbirliği iyi tanımlı mı?
  • Eşleşme/bağlama(coupling) en aza indirgenmiş mi?
  • Kaynakların çoklanması potansiyelini tanımlayabiliyor musunuz?
  • Arabirim tanımlamaları ve kısıtları kabul edilebilir mi?

Prototipler Nasıl Kullanılmaz

Kod tabanlı bir prototiplemeye atılmadan önce, herkesin çöpe atılabilir kod yazdığınızı anladığından emin olmanız gerekiyor. Açık şekilde bu kodu atabileceğinizi belirtmelisiniz.

Beklentileri doğru şekilde ayarlayamadıysanız, proje yöneticileri, yönetim gibi üst kadrolar, prototip kodun yaygınlaştırılması(deployment) konusunda ısrarcı olabilir. Bu durumda onlara bunun sadece prototip olduğunu hatırlatmalısınız.

Uygun şekilde kullanılırsa, prototip, çok fazla zaman, para, acı ve emek gibi etkenlerden sizi kurtarabilir.

Alan(Domain) Dilleri

Dilin sınırları, kişinin dünyasının sınırları kadardır.

Ludwig Wittgenstein

Bilgisayar dilleri, bir problem hakkında ve iletişim kurma hakkında nasıl düşündüğünüzü etkilerler. Her dil, belirli bir özellik listesi ile gelir ve bu özelliklerin her biri belirli çözümlere öneri olarak gelir. Lisp ile bir çözüm tasarlamak, C-stil ile çözüm tasarlamaktan farklı sonuçlar üretir. Bunun tam tersi de doğrudur.

Biz her zaman, uygulama alanının kelime dağarcığını kullanarak, kod yazmaya çalışırız. Bazı durumlarda ise, bir sonraki aşamaya geçer ve alan dilinin kelime dağarcığını, sentaksını ve semantiklerini kullanarak gerçek anlamda programlama yaparız.

Kullanıcıların önerdiği sistemi dikkatlice dinlerseniz, sistemin nasıl çalışması gerektiğini tam olarak söylerler. Şöyle bir örnek verebiliriz.

X.25 hattı üzerinde ABC Düzenlemesi 12.3 tarafından tanımlanan işlemleri dinle, onları XYZ şirketinin 43B formatına çevir, uyduya doğru yukarı tekrar gönder ve sonraki analizler için kaydet.

Kullanıcılarınızın bu şekilde iyi tanımlanmış ifadeleri var ise, uygulamanın alanına uyarlanmış bir mini-dil uydurabilirsiniz. Şu şekilde;

From X25LINE1 (Format=ABC123) {
Put TELSTAR1 (Format=XYZ43B);
Store DB;
}

Bu kodun çalıştırabilir olmasına gerek yok. Sadece, kullanıcıların gereksinimleri karşılasa yeter. Bu işi ileri götürür ve bunu gerçek dil kullanarak gerçeklerseniz, o zaman çalışabilir kod elde edersiniz.

Kullanıcı size yeni gereksinimler verdiği zaman, aşağıdaki gibi bunu kolaylıkla mini-dilinizde de güncelleyebilirsiniz.

From X25LINE1 (Format=ABC123) {
if (ABC123.balance < 0){
Put X25LINE1 (Format=ABC123)
}
else {
Put TELSTAR1 (Format=XYZ43B);
Store DB;
}
}

Düzgün ve yerinde bir destekle, uygulama alanına çok yakın programlama yapabilirsiniz. Son kullanıcılarınızın bu mini-dillerde programlama yapmasını tavsiye etmiyoruz. Bunun yerine, onların alanına yakın çalışabilmeniz için kendi aletlerinizi kendiniz oluşturmalısınız.

17. Tavsiye: Problem alanına yakın programlama yapın

Her zaman projenizi, problem alanına yakın taşıyabilecek yolları düşünmelisiniz. Daha yüksek seviye soyutlamada kodlama yaparsanız, alanın problemleri çözme üzerine yoğunlaşmada özgür olursunuz ve uygulamanın küçük detaylarını ihmal edebilirsiniz.

Uygulamanızın birçok kullanıcısı olduğunu unutmayın. İş kurallarını ve gerekli çıktıları anlayan, son kullanıcılar var. Operasyon çalışanları, test yöneticileri, sistem destek ve bakım programcıları gibi ikincil kullanıcılar var. Her kullanıcıların ayrı bir problem alanı vardır ve her biri için farklı mini-çevreler ve mini-diller oluşturmak gerekir.


Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade