← Previous · All Episodes · Next →
Programlamada Alt-Yukarı Tasarım Yaklaşımı (Programming Bottom-Up) Episode 115

Programlamada Alt-Yukarı Tasarım Yaklaşımı (Programming Bottom-Up)

· 08:18

|
"Paul Graham'ın 1993'te yazdığı bu makalede, programlamanın 'alttan yukarı' tasarım prensibini anlatıyor. Graham, geniş programların parçalara bölünmesi gerektiğini ve bu parçaların karmaşıklığı gizlememeleri için ne çok büyük ne de çok küçük olması gerektiğini belirtiyor. Ayrıca, Lisp dilini kullanarak programın dilini de şekillendirebileceğinizi ve böylece kodun daha açık, küçük ve verimli hale geleceğini ifade ediyor. 'Alttan yukarı' tasarımın, küçük gruplar tarafından yazılabilen programlara daha uygun olduğunu, ancak aynı zamanda küçük bir grupla neler yapılabileceğinin sınırlarını genişlettiğini belirtiyor.

---

# Programlamada Alt-Yukarı Tasarım Yaklaşımı (Programming Bottom-Up)

Ocak 1993

(Bu yazı, On Lisp kitabının önsözünden alınmıştır. Kırmızı yazılar, Arc isminin nereden geldiğini açıklar.)

Bir programın işlevsel parçalarının çok büyük olmaması eski bir programlama stili ilkesidir. Eğer bir programın bir parçası, kolayca anlaşılamayacak kadar büyürse, hataları büyük bir şehirin suçluları sakladığı kadar kolay saklayan bir karmaşıklık yığınına dönüşür. Bu tür yazılımlar okuması zor, test etmesi zor ve hataları bulması zor olacaktır.

Bu ilke çerçevesinde, büyük bir program parçalara ayrılmalıdır ve program ne kadar büyük olursa, o kadar çok bölünmelidir. Peki, bir programı nasıl böleriz? Geleneksel bir yaklaşım olan yukarıdan aşağıya tasarım şöyledir: ""Programın amacı bu yedi şeyi yapmaktır, bu yüzden onu yedi ana alt rutine bölerim. İlk alt rutin bu dört şeyi yapmalıdır, bu yüzden kendi içinde dört alt rutine sahip olacaktır,"" ve bu böyle devam eder. Bu süreç, tüm programın doğru bir detay seviyesine ulaşana kadar devam eder - her bir parça, önemli bir şey yapmak için yeterince büyük, ancak tek bir birim olarak anlaşılabilecek kadar küçük olmalıdır.

Deneyimli Lisp programcıları, programlarını farklı şekilde bölerler. Yukarıdan aşağıya tasarımın yanı sıra, sorunu çözmek için dili değiştirme prensibini izlerler - bu prensibi aşağıdan yukarıya tasarım olarak adlandırabiliriz. Lisp'te, programınızı dili doğru şekilde yazmaya çalışırken, aynı zamanda dili de programınıza doğru şekilde inşa edersiniz. Bir program yazarken ""Keşke Lisp'te şöyle bir operatör olsaydı."" diye düşünürsünüz. Sonra gidip onu yazarsınız. Sonradan, yeni operatörün kullanılmasının programın başka bir bölümünün tasarımını basitleştireceğini fark edersiniz, ve böyle devam eder. Dil ve program birlikte evrimleşir. İki savaşan devlet arasındaki sınır gibi, dil ile program arasındaki sınır da çizilip silinir, sonunda sorununuzun doğal sınırlarına, yani dağlarına ve nehirlerine yerleşir. Sonunda programınız, dilin onun için tasarlandığı gibi görünecektir. Ve dil ile program birbirine iyi oturduğunda, net, küçük ve verimli bir kod elde edersiniz.

Aşağıdan yukarıya tasarımın, programın farklı bir düzenle yazılmış olması anlamına gelmediğini vurgulamakta fayda var. Aşağıdan yukarıya doğru çalıştığınızda, genellikle farklı bir program çıkar ortaya. Tek, monolitik bir program yerine, daha soyut operatörlerle daha büyük bir dil ve onda yazılmış daha küçük bir program alırsınız. Tek, monolitik bir program yerine, daha soyut operatörlerle daha büyük bir dil ve onda yazılmış daha küçük bir program alırsınız. Bir kapı üstü yerine, bir kemer alırsınız.

Tipik bir kodda, sadece muhasebe ile ilgili kısımları soyutladığınızda, geriye kalan çok daha kısa olur; dili ne kadar yukarı inşa ederseniz, ona doğru yukarıdan aşağıya olan mesafe o kadar azalır. Bu, birkaç avantaj getirir:
* Dilin daha fazla işi üstlenmesini sağlayarak, aşağıdan yukarıya tasarım, daha küçük ve daha çevik programlar ortaya çıkarır. Daha kısa bir programın, çok fazla bileşene ayrılması gerekmez ve daha az bileşen, okuması veya değiştirmesi daha kolay programlar demektir. Daha az bileşen aynı zamanda bileşenler arasında daha az bağlantı anlamına gelir ve bu da hatalar için daha az şans demektir. Endüstriyel tasarımcılar bir makinedeki hareketli parçaların sayısını azaltmayı hedeflerken, deneyimli Lisp programcıları, programlarının boyutunu ve karmaşıklığını azaltmak için aşağıdan yukarıya tasarımı kullanırlar.
* Aşağıdan yukarıya tasarım, kodun yeniden kullanılmasını teşvik eder. İki veya daha fazla program yazdığınızda, ilk program için yazdığınız birçok yardımcı uygulama, takip edenlerde de kullanışlı olacaktır. Büyük bir yardımcı uygulama tabanına sahip olduğunuzda, yeni bir program yazmak, ham Lisp ile başlamak zorunda kalmadan, gereken çabanın sadece bir kısmını alabilir.
* Aşağıdan yukarıya tasarım, programları daha kolay okunabilir hale getirir. Bu tür bir soyutlama, okuyucunun genel amaçlı bir operatörü anlamasını ister; işlevsel bir soyutlama örneği, okuyucunun özel amaçlı bir alt rutini anlamasını ister.
* Kodunuzdaki desenleri aramak için daima tetikte olmanızı sağladığı için, aşağıdan yukarıya çalışma, programınızın tasarımı hakkındaki fikirlerinizi netleştirmenize yardımcı olur. Bir programın iki uzak bileşeni formda benzerse, benzerliği fark etmenize ve belki de programı daha basit bir şekilde yeniden tasarlamanıza yol açar.

Aşağıdan yukarıya tasarım, Lisp dışındaki dillerde belirli bir dereceye kadar mümkündür. Kütüphane fonksiyonlarını gördğünüzde, aşağıdan yukarıya tasarımın yapıldığını görebilirsiniz. Ancak, Lisp size bu alanda çok daha geniş yetenekler sunar ve dilin arttırılması, Lisp stili içinde orantılı olarak daha büyük bir rol oynar - o kadar ki, Lisp sadece farklı bir dil değil, tamamen farklı bir programlama şeklidir.

Bu geliştirme stili, küçük gruplar tarafından yazılabilen programlara daha uygun olması gerçeği, aynı zamanda, küçük bir grup tarafından yapılabileceklerin sınırlarını genişletir. The Mythical Man-Month adlı kitabında, Frederick Brooks, bir programcı grubunun verimliliğinin, grubun büyüklüğü ile doğrusal olarak büyümediğini önermiştir. Grubun büyüklüğü arttıkça, bireysel programcıların verimliliği düşer. Lisp programlaması deneyimi, bu kanunu daha neşeli bir şekilde ifade etme yolu önerir: grubun boyutu azaldıkça, bireysel programcıların verimliliği artar. Küçük bir grup, nispeten konuştuğumuzda, sadece daha küçük olduğu için kazanır. Küçük bir grup, aynı zamanda Lisp'in mümkün kıldığı tekniklerden yararlandığında, tamamen kazanabilir.""""

---

İlişkili Konseptler: alttan yukarıya programlama, Lisp programlama dili, üstten alta vs alttan yukarıya tasarım, programlama stili, kod yeniden kullanımı, küçük gruplar için programlama, programlama dilini genişletme, programlamadaki fonksiyonel elementler, program bölümü, Lisp tarzı programlama, programlama verimliliği, programlama karmaşıklığı, programlamadaki soyut operatörler, Lisp yardımcıları, kod desenlerinin tanınması, programlama verimliliği."

Subscribe

Listen to Yiğit Konur'un Okuma Listesi using one of many popular podcasting apps or directories.

Spotify Pocket Casts Amazon Music YouTube
← Previous · All Episodes · Next →