Reklam

Reklamlar

linus torvalds etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
linus torvalds etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Haziran 2010 Pazar

Programlamanın Güzelliği

Program yazmanın beni böylesine büyülemesini tam olarak nasıl açıklıyacağımı bilemiyorum ama bunu deneyeceğim . Bu onunla uğraşan biri işin dünyanın en ilginç işidir .  Daha çok satrança benzeyen ancak kendi kurallarınızı koyabildiğiniz ve sonuçta ortaya çıkana anlam yükleyebildiğiniz herhangi bir şey olduğu bir oyundur .
Yine de dışarıdan bakanlara dünyanınm en sıkıcı şeyi gibi görünür .
Programlamanın içsel heyecanının bir bölümünü açıklamak kolaydır : Bu basit haliyle , bir bilgisayara bir şeyi yapmasını söylediğinizde bunu yapması gerçeğiyle ilgilidir . Hiç yanılmadan . Sonsuza dek . Sızlanmadan .
Ve bu da kendi içinde ilginçtir .
Ama başlangıçta büyüleyici olan körü körüne itaatin , hoşa gidecek bir yoldaş oluşturmadığı açıktır . Aslında işin bu yönü çabucak sıkıcı bir hal alır . Programlamayı öylesine çekici kılan şey , bilgisayara istediğinizi yapmanızı sağlarken onun bunu nasıl yapacağını düşünmek zorunda olmanızdır .
Benim kişisel inancım bilgisayar biliminin fizik ile çok fazla ortak yönü olduğu yönündedir . İkiside dünyanın daha temel düzeyde nasıl çalıştığıyla ilgilidir . Elbetteki fark , fizikte dünyanın nasıl düzenlendiğini anlamanız beklenirken , bilgisayar biliminde dünyayı sizin yaratmanızdır . Bilgisayarın sınırları dahilinde yaratıcı sizsinizdir . Olan biten her şeyin üst düzey denetimi sizin elinizdedir . Yeterince iyiyseniz Tanrı olabilirsiniz . Ufak ölçekte yani .
Ve sanırım bunu söylerek kaba tahminle dünya nüfusunun yarısını kızdırdım .
Ama doğrusu bu . Kendi dünyanızı yaratabilirsiniz ve yapabileceklerinizi sınırlayabilecek tek şey makinenizin ve gitgide artan oranda sizin yeteneklerinizdir .

Bir ağaç ev düşünün . İşlevsel , tabanından açılan bir kapısı olan , sağlam bir ağaç - ev yapabilirsiniz . Ama sadece sağlam yapılmış bir ağaç - evle , daha güzel olan , ağacın yaratıcılığından kaynaklanan avantajı kullanan arasında ki farkı herkes bilir . Bu , sanatı mühendislikle birleştirme meselesidir . Programcılığın böylesine büyüleyici ve ödüllendirici olmasının nedenlerinden biri işte budur . İşlevsellik çoğu kez , ilginç olmanın , güzel olmanın ya da hayret verici olmanın ardından gelen ikinci özelliktir .

Yaratıcılıkta bir terimdir bu .
Başlangıçta beni programlamaya çeken şey bilgisayarın nasıl çalıştığıydı . Keyiflerin en büyüklerinden birisi bilgisayarın matematik gibi olduğunu öğrenmekti : Kendi dünyanızı onun kendi kurallarıyla oluşturmanız gerekiyordu . Fizikte varolan kurallarla sınırlısınız . Ama matematikte tıpkı programcılıkta olduğu gibi , kendi içinde tutarlılığa sahip olan her şey geçerlidir . Matematiğin başka bir harici mantıkla sınırlanması gerekmez ; ama kendi içinde mantıklı olmalı ve kendi mantığına uymalıdır . Her matematikçinin bildiği gibi , üç artı üçün sonuçta iki ettiği bir dizi matematiksel ifade yazılabilir . Gerçekte istediğiniz herşeyi yapabilirsiniz ; ama işi karmaşıklaştırdıkça yarattığımız dünya ile tutarsız kalacak bir şey yaratmamak konusunda dikkatli olmalısınız . O dünyanın güzel olabilmesi için kusur içermemesi gerekir . İşte programlama bu şekilde çalışır .

İnsanların bilgisayarlara bu kadar düşkün olmasının nedenlerinden birisi , yarattığımız kendi yeni dünyamızı deneyimleme olanağına sahip olmanız ve yeni olanağımızı görmenizdir . Matematikte , olabileceklere dair düşünce jimnastiği yapabilirsiniz . Örneğin çoğu insan geometriyi düşünüğünde aklına öklid geometrisi gelir . Ama bilgisayar insanlara başka geometrileride görme olasılığı getirdi ; bunların çoğu Öklid'le bile ilgili değil . Bilgisayarlarla bu önceden yapılmış dünyaları alır ve gerçekten neye benzediklerini görebilirsiniz . Mandelbrot dizisini , benoit mandelbrot'un denklemlerine dayanan fraktal  görüntülerini anımsıyor musunuz ? Bunlar bilgisayarlardan önce asla görünmemiş olan saf bir matematiksel dünyanın görsel sunumlarıdır . Mandelbrot varolmaya o dünyaya dair ihtiyari kuralları öylesine oluşturmuştur ve bunların gerçekle ilgiside yoktur .  Ama bunlar büyüleyici dokular meydana getirmiştir . Bilgisayarla ve programlamayla yeni dünyalar inşa edebilirsiniz ve bazen ortaya çıkan desenler gerçekten güzeldir .

Çoğu zaman yaptığınız bu değildir . Belli başlı bir görevi yerine getirecek bir program yazarsınız sadece . Bu durumda yeni bir dünya yaratmıyor , bir sorunu bilgisayar içindeki dünyada çözüyorsunuzdur . Problem üstünde düşünülerek çözülür . Ve sadece belli bir tür insan öylece oturup bir ekrana bakabilir ve yalnızca düşünerek bir şeylerden sonuç çıkartılabilir .  Sadece benim gibi toplumsal yaşamın geri kalanına fazla ilgi duymayan , kendisini iş edindiği şeye aşırı veren , bilgisayar delisi insanlar .

İşletim sistemi makinenin içinde olup bitecek diğer herşeyin temelidir . Ve bir işletim sistemi oluşturmak , en üst düzey uğraşlardan biridir . Bir işletim sistemi yaratırken bilgisayarı yaşama geçirecek tüm programların içinde olduğu yeni bir dünya yaratıyorsunuzdur ; temel olarak neyin kabul edilebilir veya edilemez , neyin yapılabilir ve yapılamaz olduğunu belirleyecek kuralları oluşturuyorsunuzdur . Her program bunu yapar ; ama işletim sistemi en temel olanıdır . Yarattığınız ülkenin anayasısını oluşturmak gibidir bu ve bilgisayarda çalışacak diğer tüm programlar sadece sıradan yasalardır .

Kimi zaman yasalar anlam ifade etmez . Ama anlamı kendisi , uğruna mücadele verdiğiniz şeydir . Çözüme bakabilmek ve doğru yolla doğru yanıta ulaştığınızı görmek istersiniz .
Okulunuzda her zaman doğru yanıtı bilen kişiyi anımsıyor musunuz ? Bu kişi o şeyi herkesten önce yapardı , çünkü bunun için çabalaması gerekmezdi . O kişi problemin nasıl çözülmesi gerektiğini öğrenmek zorunda değildi ; sadece problemi doğru yoldan düşünürdü . Ve yanıtı duyduğunuzda bu size kuşkusuz gelirdi .

Aynı şey bilgisayarlar içinde geçerlidir . Bir şeyi kaba hüç yoluyla , aptalca , problemi artık problem olmayana dek parçalayarak çözebilirsiniz ; ya da doğru yaklaşımı bulur ve problemin ansızın yok olduğunu fark edersiniz . Meseleye bir başka yönden bakar ve şöyle bir sonucun belirdiğini görürsünüz : Bu sadece sen ona yanlış yönden baktığın için problemdi .
Olasılık buna en iyi örnek bilgisayarcılıktan değil , matematikten verebilir . Öyküye göre , büyük Alman matematikçi Carl Friedrich Gauss öğrenciyken , bir gün canı sıkkın olan öğrencilerinden 1 ile 100 arasındaki tüm sayıları toplamalarını istedi . Çocukların tüm günü bununla uğraşarak geçireceğini ummaktaydı . Ancak gelişme çağındaki matematikçi beş dakika sonra yanıtla çıkıp geldi : 5.050 . Çözüm aslında tüm sayıların toplanmasından geçmiyordu , çünkü bu yıpratıcı ve aptalca bir iş olurdu . Gauss 1 ile 100 'ü topladığında 101 'i bulduğunu görmüştü . Sonra 2 ile 99 'u toplayınca da sonuç 101 idi . 3 ile 98 'in toplamıda öyle . 50 ile 51 'in de . Bir kaç saniye içinde anladi ki 50 çift 101 vardı . Öyleyse sonuç 5.050 idi .

Bu öykü sonradan yakıştırılmış olabilir ama verdiği mesaj açıktır . İyi matematikçi uzun ve sıkıcı bir problem çözmez , çünkü sorunun gerisinde ki gerçek dokunun ne olduğunu görür ve bu dokuyu , yanıtı çok daha iyi bir yoldan bulmak için kullanılır . Aynı şey bilgisayar bilimi içinde kesinlikle geçerlidir .
Elbetteki toplamı hesaplayacak bir program yazabilirsiniz . Günümüz bilgisayarlardında bu parmak şıplatmak kadar kolaydır . Ama iyi bir programcı yanıtın ne olduğunu sadece zekice davranarak bilebilir . Problemin üstüne yeni , sonunda doğru olduğu kanıtlanacak bir yoldan gidecek güzel bir program yazacaktır .
Yine de , bir şeyi daha iyi, daha güzel yoldan nasıl çözeceğinizi bilmediğiniz için üç gün boyunca başınızı duvarlara vurmanın nasıl bir çekici yanı olduğunu açıklamak güçtür . Ama o yolu bir kez bulursanız bu dünyanın en harika duygusudur .

                                                                Linus Torvalds (Yalnızca Eğlenmek için)
                                                                Linux'un yaratıcısı
ebook library