Pragmatik Programcı — 9

İbrahim Kürce
6 min readAug 4, 2017

--

Mini-Dil Gerçekleme

En basit haliyle mini-dil, satır bazlı, kolayca ayrıştırabilir(parse) bir formatta olabilir.

Daha karmaşık bir dili, daha resmi bir sentaks ile gerçekleyebilirsiniz. Kendi dilbilginizi tanımladığınız zaman, bunu ayrıştırıcı üretici(parser generator) için bir veri girdisine çevirmek kolay bir iş haline gelir.

Gerçeklediğiz dil, iki farklı şekilde kullanılabilir.

Veri dili, uygulama tarafından kullanılan bazı veri yapılarını üretir. Bu diller genelde yapılandırma bilgisi için kullanılırlar.

Örneğin, sendmail programı dünya çapında İnternet üzerinden eposta gönderimi için kullanılmaktadır. Birçok güzel özelliği ve faydası vardır, ki bunlar binlerce satırlık yapılandırma dosyaları tarafından kontrol edilirler. Bu özellikler sendmail programının kendi yapılandırma dili tarafından yazılmıştır.

Mlocal, P=/user/bin/procmail,
F=lsDFMAw5:/l@qSPfhn9,
S=10/30, R=20/40,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u

Okunulabilirlik, sendmail programının güzel bir özelliklerinden değil gibi ☺

Yıllarca, Microsoft kendi menülerini, eklentilerini(widgets), iletişim kutularını(dialog boxes) ve diğer Windows kaynaklarını tanımlamak için veri dillerini kullanır.

Buyurgan diller bunu biraz daha öteye taşır. Burada, dil gerçekten çalıştırılır, bu yüzden buyurgan diller, ifadeler, kontrol yapıları ve buna benzer şeyleri kapsar. Program bakımınızı kolaylaştırmak için kendi buyurgan dillerinizi oluşturabilirsiniz.

Tahmin Yürütme

Çabuk cevap verin! Savaş ve Barış kitabını 56k modem üzerinden göndermek ne kadar zaman alır? Milyon tane isim ve adres için ne kadarlık disk alanı ihtiyacı olur? Projenizi bitirmek için kaç ay süreye ihtiyacınız var?

Bir seviyede, bu sorular anlamsız sorulardır. Yine de tahminde iyiyseniz, bu sorulara cevap verilebilirsiniz. Tahmin yürütme sürecinde, programınızın yaşadığı dünyayı anlamak zorundasınız.

Tahmin etmeyi öğrenerek ve bu yeteneğinizi, tahminlerin büyüklüğünü içsel bir duyguyla anlayacak noktaya gelene kadar, geliştirerek, bu tahminlerin fizibilitesini kavramak için büyülü bir yeteneğe sahipmiş gibi olursunuz. Kodlama yaparken, hangi alt-sistemlerin iyileştirilmesi gerektiğini ve hangilerinin öylece bırakılması gerektiğini, artık kendiliğinden bilirsiniz.

18. Tavsiye: Sürprizlerden kaçınmak için tahminde bulunun

Ne Kadar Doğru, Yeterince Doğrudur?

Bir dereceye kadar, bütün cevaplar tahmindir. Sadece bazıları diğerlerinden daha doğrudur. Bir kişi size tahmin için soru sorduğu zaman, cevabın verileceği kapsamı sormalısınız. Yüksek bir doğruluğa mı ihtiyacınız var, yoksa kaba taslak bir şey mi arıyorsunuz?

  • Nineniz size ne zaman varırsın diye sorduğu vakit, büyük ihtimalle öğlen yemeği veya akşam yemeğine yetişip yetişmeyeceğinizi merak ediyordur. Diğer tarafta su altında sıkışan ve havası tükenen bir dalgıç için saniyelerin önemi vardır.
  • Pi(π) sayısının değeri nedir? Yuvarlak köşeli bir yatak almayı düşünüyorsanız, 3 büyük ihtimalle iyidir. Okuldayken, 22/7 yaklaşımı iş görür ama NASA’daysanız, belki de 12'li ondalığa kadar almanız gerekir.

Bir şeyleri tahmin etmenin en ilginç yanlarından biri, sonucun yorumlanmasında kullanacağız birimlerdir. Bir şeyin 130 gün süreceğiniz söylüyorsanız, insanlar buna çok yakın bir sürenin olacağını beklerler. Bununla beraber, 6 ay süreceğini söylerseniz, 5 ile 7 ay arası bir süreyi beklerler. İkisi de aslında aynı süre gibi ama 130 gün süresi daha kesin bir derecenlendirmeyi işaret ediyor. Zaman tahminlerinizi şöyle gruplayabilirsiniz:

Tahminler Nereden Gelir?

Bütün tahminler problemin modeli üzerine kuruludur. Tahminle ilgili her zaman iyi cevapların olduğu işin inceliklerine geçmeden önce, yapılacak şey basitce şudur, daha önce yapmış birine sor. Modelini kurmadan önce, geçmişte benzer durumda bulunmuş kişileri araştır.

Onların sorunu nasıl çözdüğüne bak. Benzerlikler bulman, sürpriz olmayacaktır.

Ne Sorulduğunu Anlayın

Herhangi bir tahmine geçmeden önce ne sorulduğunu anlamaya çalışmalısın. Alanın kapsamıyla ilgili kavrayışa sahip olman gerekiyor. Genelde bu soruda ima edilir ama tahmine başlamadan önce kapsamı iyi anlamayı, alışkanlık haline getirmelisin. Seçtiğiniz kapsam, verdiğiniz cevabın şeklini oluşturacaktır: “Arabada yakıt varsa ve herhangi bir trafik kazası yoksa, 20 dakika içinde orada olacağım.”

Sistemin Modelini Kurmak

Sorulan soruyla ilgili kendi anlayışından, kaba taslak, hazır, zihinsel bir iskelet modeli kur. Mesela, geri-dönüş sürelerini tahmin ediyorsan, sunucu ve varış trafiğini de göz önüne almalısın. Proje için ise, modeliniz, organizasyonunuzun geliştirme aşamasında kullandığı adımlardan meydana gelebilir.

Model kurma, uzun dönemde, hem yaratıcı hem de faydalı olabilir. Genellikle, model kurma süreci, daha önce yüzeyde gözükmeyen, süreç ve şablonların ortaya çıkmasına yol açar. Orjinal soruyu tekrar gözden geçirmeye ihtiyacın olabilir: “X işinin yapılması için tahmin istiyorsunuz ama X işinin farklı bir versiyonu olan Y, yarı bir sürede yapılabilir ve sadece bir özelliği eksik olur.

Model kurma, tahmin sürecindeki yanlışlıkları da ortaya çıkarır. Bu kaçınılmazdır, hatta faydalıdır. Modelin basitliği ve doğruluğu arasında pazarlık yapıyorsun. Modeli kurarken göstereceğin efortu iki katına çıkartman, doğruluk üzerinde sadece ufak bir artışa sebep olur. Kendi deneyiminiz, yaptığınız düzenlemeler üzerinde ne zaman durmanız gerektiğini söyleyecektir.

Modeli Bileşenlere Ayırın

Model kurduğunuz zaman, bunu bileşenlere ayırın. Bu bileşenlerin nasıl iletişime geçeceği ile ilgili bazı matematik kuralları belirlemeniz gerekebilir. Bazen bir bileşen tek bir değere katkı sağlar, bazen de birçok faktöre.

Her bir bileşenin, tüm modele katkısını etkileyecek parametrelere sahip olduğunu göreceksin. Bu aşamada, her bir parametrenin ne olduğunu basitçe tanımlayın.

Her Bir Parametreye Bir Değer Verin

Parametreleri ayırdığın vakit, her birine bir değer verin. Burada bazı hatalar yapabilirsiniz ama işin püf noktası, hangi parametrenin sonuç üzerine en çok etkiye sahip olmasıdır. Tipik olarak, sonuca etkisi toplanan parametreler, sonuca etkisi çarpılan veya bölünen parametrelerden daha önemsizdir. İletim hattının hızını ikiye katlamak, bir saat içinde alacağınız veriyi ikiye katlayabilir, buna rağmen iletimdeki 5ms’lik gecikme görünür bir değişikliğe neden olmayacaktır.

Bu kritik parametreleri hesaplarken, yönteminiz gerekçelendirilebilir olmalıdır. Aslında, çoğu kez tahminlerinizi başka tahminler üzerinden baz alarak yaptığınızı görürsünüz.

Cevapları Hesaplayın

Sadece en basit durumlarda, tahminin tek bir cevabı olur. Şunu kolaylıkla söyleyebilirsiniz, “Beş blok sonrasına 15 dakikada yürüyebilirim.” Bununla beraber sistem karmaşıklaşınca, cevaplarınızı garantiye almak isteyeceksiniz. Birçok hesaplama çalıştırarak, kritik parametrelerinin değerini farklılaştırarak, modeli hangisinin hareket ettirdiğini anlamaya çalışırız. Bir tablonun bu durumda büyük yardımı olabilir. Sonra bu parametrelerin terimleriyle cevaplarını ifade et. “Eğer sistemin SCSI yolu ve 64MB hafızası olursa, cevap süresi saniyenin dörtte üçü kadar olur.”

Hesaplama fazı aşamasında, cevapları almak tuhaf görünmeye başlayabilir. Onları açığa çıkarmak için acele etme. Aritmetiğin doğruysa, problemi anlaman veya modelin büyük ihtimalle hatalı olabilir. Bu bile değerli bir bilgidir.

Tahmin Etmedeki Başarılarınızı Takip Edin

Ne kadar yaklaştığınızı anlamak için tahminlerinizi kaydetmek iyi bir fikir olabilir. Tahminleriniz yanlış çıkınca, hemen omuz silkip uzaklaşmayın. Kendi varsayımınızdan neden farklı olduğunu öğrenmeye çalışın. Belki de seçtiğiniz bir parametre, problemin gerçekliğine uymuyor. Belki de modeliniz hatalı. Sebep her ne olursa, ne olduğunu ortaya çıkarmaya zaman ayır. Böyle yaparsan, bir sonrakine işler daha kolay olur.

Proje Zamanlamasını Tahmin Etme

Tahmin etmenin normal kuralları, aşırı büyük ve karmaşık geliştirme durumlarında yıkılabilir. Artışlı bir geliştirme pratiğinde, aşağıdaki adımları takip etmeniz, çelişki olmaz.

  • Gereksinimleri kontrol et
  • Riski analiz et
  • Tasarla, gerçekle, birleştir
  • Kullanıcılar ile geçerli kıl(validate)

İlk olarak, kaç tane çevrim(iteration) olacağı veya ne kadar süreceği ile ilgili belirsiz bir düşünceniz olabilir. Bazı metodlar, sizi bu ilk plana çivileyebilir ama bu büyük bir hatadır. Aynı takımla, aynı teknojiyle, öncekine benzer bir uygulama yapmıyorsanız, aslında sadece tahmin ediyorsunuzdur.

İlk fonksiyonalitenin kodunu ve testini tamamlayın ve bunu ilk çevrimin bitişi olarak işaretleyin. Bu deneyime dayanarak, ilk tahmin ile kaç çevrim olarak şekilde tekrar gözden geçirin. Arındırma işlemi her seferinden daha iyiye gidecektir ve proje zamanı konusunda kendinizden daha emin tahminler yapacaksınızdır.

19. Tavsiye: Zamanlamayı kodla beraber çevrimlere bölün

Proje daha başlamadan hızlı ve sert bir giriş yapmayı isteyen, yönetimler için bu popüler olmayabilir. Bu tür yönetimlere, takımı, takımın verimini ve zamanlamayı belirleyen çevreyi anlamaları için yardımda bulunun.

Tahmin İçin Biri Sorduğunda Ne Demeli

Kısaca, “Size dönüş yapacağım.” diyebilirsiniz.
Bu bölümdeki adımları takip ederek ve işleri biraz daha yavaştan alarak her zaman daha iyi sonuçlar elde edersiniz. Kahve alma sırasında yapacağınız tahminler, kabus gibi peşinizden gelecektir.

--

--

No responses yet