Üstat Felsefesi
Üstatlar, problemleri çözer, yeni şeyler yapar, özgürlüğe, paylaşıma ve yardımlaşmaya inanırlar. Üstat olarak kabul edilmeniz için bu felsefeye uygun davranmanız gerekir. Davranışınızı bu felsefeye tam anlamıyla uygun hale getirebilmek için ise, bu felsefeye gerçekten inanmalısınız.
Ama bunu sadece üstat olarak kabul edilmek için gerekli bir şart gibi düşünürseniz, asıl noktayı kaçırmış olursunuz. Çünkü, bu felsefeye inanmak sizin açınızdan önemli olacaktır – sizin öğrenmeniz ve motive olmanız için gereklidir. Bütün yaratıcı sanatlarda olduğu gibi, ustalaşmak için en etkin yol ustaları taklit etmektir - sadece entellektüel olarak değil, duygusal olarak da.
Eğer üstat olmak istiyorsanız şunları, inanana kadar tekrar edin:
Dünya çözülmeyi bekleyen hayranlık verici problemlerle doludur.
Üstatlık çok eğlencelidir. Ama bu eğlence, çaba ister. Çaba da motivasyon gerektirir. Başarılı atletler, vücutlarını formda tutmak için fiziksel sınırlarını zorlayan şeyler yaparlar ve bundan zevk alırlar. Böylelikle motivasyonlarını da korumuş olurlar. Benzer şekilde üstat olmak için, problem çözme, becerilerinizi şekillendirme ve zekanızı geliştirmekten haz duymalısınız.
Eğer bunu doğal yollarla yapamıyorsanız, kendinize bir zorlayıcı etken bulmalısınız. Aksi takdirde, üstatlık potansiyelinizin seks, para ve sosyal olaylar gibi dikkat dağıtıcı şeyler tarafından yok edildiğini göreceksiniz.
(Ayrıca kendi öğrenme yeteneğinize karşı bir güven geliştirmelisiniz. Bir problemi çözmek için ihtiyacınız olan herşeyi bilmeseniz bile onun bir parçası ile uğraşarak öğrendikleriniz sıradaki parçayı çözmenize yetecektir. Böylece problemin tamamını çözebilirsiniz.)
Hiçbir problem iki defa çözülmemelidir.
Yaratıcı beyinler değerli ve sınırlı kaynaklardır. Çözülmeyi bekleyen birçok problem varken, tekerleği yeniden icat etmekle harcanmamalıdırlar.
Üstatlar gibi davranmak için, diğer üstatların da zamanlarının değerli olduğuna inanmalısınız. Bilgiyi ve çözülen problemlerin çözümlerini paylaşarak, diğer hacker’ların eski problemler yerine yeni problemler üzerinde çalışmalarını sağlamak sizin için ahlaki bir görev sayılır.
Bununla birlikte "Hiçbir problem iki defa çözülmemelidir" demek varolan çözümlerin tümünü kutsal kabul etmelisiniz ya da verilen bir problemin sadece bir doğru çözümü vardır diye düşünmelisiniz anlamına gelmez. Genellikle problemin çözümünü öğrenmeye çalıştığımızda problem hakkında daha önce bilmediğimiz şeyler öğreniriz. Daha iyisini yapabileceğimizi düşünmek normaldir ve hatta gereklidir. Normal OLMAYAN ise yapay teknik, yasal veya kurumsal engellerin (kapalı kaynak-kod gibi) iyi bir çözümün yeniden kullanılmasına engel olması ve insanları tekerleği yeniden icat etmeye zorlamasıdır.
(Diğer üstatlardan daha fazla saygı görmek için bütün yaratıcı ürünlerinizi vermeye mecbur olduğunuza inanmanız gerekmiyor. Ürününüzü satarak geçiminizi sağlamak üstatlık değerleri ile çelişmez. Sanatınıza ve diğer üstat arkadaşlarınıza sadakatinizi unutmadığınız sürece yazılım kotarma yeteneklerinizi kullanarak ailenizi desteklemek ve hatta zengin olmak üstatlık değerleriyle çelişmez.)
Sıkıcı ve tekrar eden işler günahtır.
Üstatlar (ve genelde yaratıcı insanlar), sıkılmamalı ve tekrar eden aptal ve can sıkıcı işlerde çalıştırılmamalıdır, çünkü bu tür işleri yaparken asıl yapmaları gereken işi; yani problem çözme işini yapamayacaklardır. Bu israf herkese zarar verir. Bu yüzden sıkıntı ve gereksiz can sıkıcı işlerde çalışmak hoş değildir ve gerçekten israf ve hatta günahtır.
Üstat gibi davranmak için, küçük sıkıcı şeyleri, otomatikleştirerek sizden ve diğer insanlardan (özellikle diğer üstatlardan) olabildiğince uzaklaştırmak istemelisiniz.
(Bu konuda bir istisna vardır. Üstatlar bazen, dışarıdan sıkıcı veya tekrar eden işler gibi görülen şeyleri, kafalarını boşaltmak, yeni bir konuda beceri elde etmek veya başka türlü kazanamayacakları bir deneyim kazanmak için yaparlar. Ama bu seçime bağlı birşeydir. Düşünme yeteneği olan hiç kimse, bu tür şeyler yapmak zorunda kalmamalıdır. )
Özgürlük iyidir.
Üstatlar doğaları gereği otorite karşıtı kimselerdir. Size emir verebilen kişiler, sizi, büyüleyici bulduğunuz bir problemi çözmekten alıkoyabilir – ve bunun için de pek çok garip sebep bulabilir. Bu nedenle otoriter tavırlarla mücadele etmek gerekebilir, aksi bir durum siz ve diğer üstatlar için solunacak özgür hava kalmaması demektir.
(Bu bütün otoritelere karşı savaşmak ile aynı şey değildir. Çocuklar korunmalı ve suçlular zaptedilmelidir. Bazı zamanlarda, bir üstat, emirleri yapmak için harcayacağı zamandan daha çok önem verdiği bir şeyi elde etmek için otoriteye boyun eğebilir. Fakat bu sınırlı ve bilinçli bir anlaşmadır, otoriteler tarafından arzulanan türde kişisel teslimiyetler önerilmez.)
Otorite, sansürcülük ve gizlilik sayesinde yaşar, gönüllü işbirliği ve bilgi paylaşımından hoşlanmaz. Tek sevdiği şey kendi kontrolü altında gerçekleşen “işbirlikleri”dir. Bu nedenle, üstatlar gibi davranmak için; sansüre ve gizli kapaklı işlere, sorumlu yetişkinleri aldatmaya yönelik eylemlere ve zorlamalara karşı içgüdüsel bir kin geliştirmeli ve bu inanç doğrultusunda çalışmaya gönüllü ve arzulu olmalısınız.
Yaklaşım biçimi, yetkinlik demek değildir.
Üstat olmak için bu yaklaşım biçimlerini geliştirmelisiniz. Ancak, sadece bir yaklaşım biçimini alıp uygulamak sizi üstat yapmaz, tıpkı şampiyon bir atlet veya bir rock yıldızı yapmayacağı gibi. Üstat olmak aynı zamanda zeka, deneyim, kendini adama ve ciddi çalışma gerektirir.
Bu yüzden karşınızdakileri sadece davranışa bakarak değerlendirmemeyi ve yetkinliğe saygı duymayı öğrenmelisiniz. Üstatlar, içi boş kişilerin vakitlerini harcamasına izin vermez fakat her konuda yetkinliğe saygı duyar. Zor öğrenilen ve az kişinin sahip olduğu becerilerde yetkin olmak iyi; akıl gücü, hüner ve konsantrasyon gerektiren zor becerilerde yetkinlik en iyisidir.
Eğer yetkinliğe saygı duyarsanız, yetkinlik kazanmaktan zevk alırsınız – bunun için gereken çalışma ve kendini adama süreci sıkıcı olmaktan çıkar, kendi başına bir zevk unsuru haline gelir. Bu yaklaşım, üstat olabilmek için hayati derecede önemlidir.
Program yazmayı öğrenin.
Bu, elbette ki üstat olmak için temel önşarttır. Eğer bir programlama dili bilmiyorsanız, size Python ile başlamanızı öneririm. Python, tasarımı temiz, belgelendirmesi iyi yapılmış ve yeni başlayanlara kolaylık tanıyan bir dildir. Öğrenebilecek ilk dil olarak iyi bir seçim olmasına rağmen, oyuncak değil, güçlü ve esnek bir dildir ve büyük projeler geliştirmek için de çok uygundur. Python ile ilgili iyi öğretici belgeler Python web sitesinde bulunabilir.
Java da programlamayı öğrenmek için iyi bir dildir. Python’dan daha zordur ama ürettiği kod daha hızlıdır. İkinci dil olarak öğrenebilecek en iyi dil olduğunu düşünüyorum. Ne yazık ki, Sun’ın referans uygulamaları hala tescillidir. Bu Java dilinin kendisiyle çok fazla ilgili bir konu değildir; yüksek kaliteli, açık-kaynak kodlu Java yorumlayıcılar mevcuttur, esas problem Java ile birlikte gelen sınıf kütüphaneleridir. Açık kaynak kodlu sınıf kütüphaneleri Sun’ın kütüphanelerinin gerisinde kalmaktadır. Eğer Java öğrenmeye karar verirseniz bunu Sun’ın tescilli kodlarına bağımlı kalmak yerine açık-kaynak kodlu uygulamalar ile yapın.
Ancak, sadece bir veya iki dil öğrenerek tam bir programcı olamayacağınızı ya da üstat seviyesine ulaşamayacağınızı da bilmeniz gerekiyor. Herhangi bir dilden bağımsız olarak programlama problemleri hakkında düşünmeyi öğrenmelisiniz. Gerçek bir üstat olabilmek için, yeni bir dili, el kitabında yazanlarla, bildiklerinizi bağdaştırarak bir kaç gün içerisinde öğrenebilir durumda olmalısınız. Bu, birbirinden çok farklı bir kaç dil bilmeniz gerektiği anlamına geliyor.
Eğer ciddi programlamaya girecekseniz, Unix’in ana dili olan C’yi öğrenmelisiniz. C++, C ile alakalıdır; birini öğrenirseniz, diğerini öğrenmek zor olmayacaktır. Her iki dil de, ilk dil olarak öğrenmek için uygun değildir ve C programlamasından ne kadar kaçınırsanız, veriminiz o kadar artar.
C, kaynak kullanımında tutumlu ve verimli bir dildir. Maalesef, C, bu verimliliği, pek çok kaynağın (bellek gibi) yönetimini doğrudan size bırakarak elde eder. Bu düşük seviyeli (donanıma yakın) kodlama karmaşık ve hataya açıktır ve hata ayıklamak için pek çok zamanınıza mal olur. Makinaların güçlü olduğu günümüzde, makinanın çalışma verimliliği yerine sizin çalışma verimliliğinize öncelik tanıyan bir dil ile program yazmak daha akıllıca olacaktır. Sonuç olarak Python’u tercih etmenizi öneririm.
Perl ve LISP gibi bazı diller üstatlar için özel bir önem taşır. Perl öğrenmek pratik sebeplerden dolayı önemlidir. Dinamik web sayfalarında ve sistem yönetiminde çok yaygın bir şekilde kullanılır. Hiç Perl kodu yazmayacak olsanız dahi okumasını öğrenmelisiniz. C’nin makine verimliliğine ihtiyaç duyulmayan işlerde C kullanmaktan imtina eden birçok kişi, size Python’u önerdiğim nedenlerle Perl’ü kullanır. Onların yazdıkları kodları anlamanız gerecektir.
LISP öğrenmek başka bir sebepten dolayı önemlidir - sonunda anladığınız zaman elde edeceğiniz aydınlanma deneyiminden dolayı. Bu deneyim, bir daha hiç LISP kullanmasanız dahi, hayatınızın kalan kısmında çok daha iyi bir programcı olmanızı sağlayacaktır. (Emacs metin düzenleyicisi için basit düzenleme modları yazarak ya da varolanları değiştirerek veya GIMP için Script-Fu eklentileri yazarak küçük LISP deneyimleri kazanabilirsiniz.)
En iyisi, bahsettiğim bu beş dilin (Python, Java, C/C++, Perl ve LISP) hepsini öğrenmektir. Bu diller, en önemli kotarım dilleri olmalarının yanında, programlamaya farklı yaklaşımlarıyla size önemli bir eğitim kazandırır.
Google’ın en önemli üstatlarından ve yaygın olarak kullanılan AI kitabının yazarlarından biri olan Peter Norvig On Yılda Programlama Öğrenin başlıklı harika bir deneme yazdı. "Programcılıkta başarı için tavsiyeleri" dikkate değerdir.
Size burada nasıl programlama yapılacağına dair tam bir yönerge listesi sunamam ama, bunu kitapların ve kursların da vermeyeceğini söyleyebilirim (en iyi üstatların büyük çoğunluğu kendi kendine öğrenmiştir). Dil özelliklerini -- bilginin küçük bir kısmı -- kitaplardan öğrenebilirsiniz, ama o bilgiyi yaşayan bir beceri haline getiren şey, pratik yapmak ve çıraklıktır. Bunu da, program okumak ve program yazmak ile edinirsiniz.
Programlamayı öğrenmek, bir doğal dilde iyi yazmayı öğrenmek gibidir. En iyi yöntem, bu işin ustalarının yazdıklarını okumak, kendiniz bir şeyler yazmak, biraz daha okumak, biraz daha yazmak... Ve yazdıklarınız, örnek aldıklarınızda gördüğünüz kuvvet ve iktisadı gösterene kadar tekrar etmektir.
Önceleri okumak için iyi kod bulmak zordu, çünkü üstatlık yolunda ilerlemek isteyenlerin kaynak kodlarını okuyabileceği ve üzerinde deneme yapabileceği az sayıda büyük program vardı. Bu durum dramatik bir şekilde son buldu: Açık kaynak kodlu yazılımlar, programlama araçları ve işletim sistemleri (hepsi de üstatlar tarafından geliştirilmiş) artık yaygın bir şekilde bulunabilmekte.
Açık kodlu Unix’lerden birini edinin, kullanmasını ve çalıştırmasını öğrenin.
Bir kişisel bilgisayarınızın bulunduğunu ya da kullanabileceğiniz bir tane olduğunu varsayıyorum (zamane çocuklarının hayatı kolay :-)). Yeni başlayan birinin ustalık yolundaki en önemli adımı, Linux veya BSD Unix’lerden birinin kopyasını edinmesi, kurması ve çalıştırmasıdır.
Evet dünyada Unix’ler dışında başka işletim sistemleri de var ama, onlar ikilik düzendeki (binary) kodlarıyla dağıtılırlar -- kodlarını okuyamaz ve değiştiremezsiniz. Windows, MacOS veya başka bir kapalı kaynak sistemde ustalaşmaya çalışmak, üzerinizde zırh varken dans etmeye benzer.
Mac OS X altında ustalaşmak mümkündür ama sistemin sadece bir parçası açık kaynak kodludur – pek çok duvarla karşılaşırsınız ve Apple’a ait sahipli kodlara muhtaç duruma düşmemek için özel gayret sarfetmeniz gerekir. Eğer Unix’ e yoğunlaşırsanız, kaportanın altına girerek işe yarar şeyler öğrenebilirsiniz.
Unix, Internet’in işletim sistemidir. Unix’i bilmeden Internet’i kullanabilirsiniz ama Unix’i anlamadan bir Internet üstadı olamazsınız. Bu nedenle, bugün hacker kültürü yoğun olarak Unix merkezlidir. (Bu her zaman böyle değildi ve bazı eski zaman üstatları bundan halen hoşnut değil, ama Unix ile Internet arasındaki ilişki, bugün Microsoft’un bile diş geçiremeyeceği kadar güçlüdür.)
Bir Unix edinin -- ben şahsen Linux’u severim ama başka yollar da var (ve evet, Linux ve Windows’u aynı makinede çalıştırabilirsiniz). Öğrenin. Çalıştırın. Kurcalayın. Internet’e bağlanmakta kullanın. Kodlarını okuyun. Değiştirin. Linux ile herhangi bir Microsoft işletim sisteminin sunmayı hayal edebileceğinden çok daha iyi programlama araçlarına (C, LISP, Python ve Perl dahil) sahip olacaksınız. Hoş zaman geçireceksiniz ve günün birinde bir üstat olarak geriye baktığınızda farketmeden pek çok şey öğrenmiş olduğunuzu göreceksiniz.
Unix öğrenme ile ilgili daha fazla bilgi için The Loginataka’ya bakın.
Linux kopyası edinmek için "Nereden Linux Bulurum?"’a bakın
BSD Unix hakkında yardım alma ve kaynak edinme için www.bsd.org adresine bakın.
World Wide Web’i kullanmayı ve HTML kodu yazmayı öğrenin.
Üstatlar tarafından üretilen pekçok şey, üstat olmayan insanların hayatına yaptığı etkiler doğrudan görülmeyecek şekilde, arka planda, fabrikaları, iş yerlerinin ve üniversiteleri çalıştırmakta kullanılırlar. Buna tek istisna, dünyayı değiştirdiği politikacılar tarafından bile kabul edilen, parlak üstat oyuncağı sanaldokudur (’web’). Sadece bu bile (pek çok başka nedenin yanısıra) sanaldokuyu çalıştırmayı öğrenmenizi gerektirir.
Tabii "sanaldokuyu çalıştırmayı öğrenmek" den kasıt, bir sanaldoku istemcisini kullanmayı öğrenmek değil (bunu herkes yapıyor) sanaldokunun dili olan HTML’i öğrenmenizdir. Programlamayı bilmiyorsanız, HTML kodu yazmak, programlamayı öğrenmenize yardımcı olacak düşünce alışkanlıklarını kazanmanızı sağlayacaktır. Dolayısıyla, kendinize bir ev sayfası hazırlayın. Klasik HTML’den daha temiz bir dil olan XHTML’i kullanmaya çalışın.
Bir ev sayfasına sahip olmak sizi üstat yapmaz. Sanaldokuda zaten birçok ev sayfası var. Bunların çoğu içeriği sıfır, amaçsız sayfalar – pek çoğunun görüntüleri güzel, ama bu, bomboş oldukları gerçeğini değiştirmez (daha fazla bilgi için The HTML Hell Page adresine bakabilirsiniz).
Sayfanızın kaydadeğer olabilmesi için içeriğe sahip olması gerekir -- diğer üstatların ilgisini çekebilecek veya onlara faydalı olabilecek bir içerik. Bu da bizi bir sonraki konuya götürür:
İngilizce bilmiyorsanız, öğrenin.
2006’da, ikinci dil olarak İngilizce bilen üstatların, ortak bir başka ana dilleri olmasına rağmen, birbirleriyle yaptıkları teknik tartışmalarda İngilizce kullandıklarını öğrendim. Bu bana İngilizcenin diğer dillerden daha zengin bir teknik sözlüğe sahip olduğu ve bu yüzden bu iş için daha iyi bir araç olduğu anlatılırken söylenmişti. Benzer nedenlerle İngilizce yazılmış teknik kitapların çevirileri de genellikle tatmin edici değildir.
Linus Torvalds, kod açıklamalarını İngilizce yazan bir Finlidir. Kendisinin İngilizceyi kullanım kabiliyeti, Linux için dünya çapında bir geliştiriciler topluluğu oluşturmasında önemli etken olmuştur. Bu İngilizce bilme ile ilgili önemli bir örnektir.
Anadilinizin İngilizce olması bir üstat için yeterli dil becerilerine sahip olduğunuzu garanti etmez. Eğer yarı okur-yazar gibi; gramere uymadan yazım hatalarıyla dolu yazarsanız üstatların çoğu sizi görmezden gelecektir. Özensiz yazmak değişmez birşekilde özensiz düşünmek anlamına gelmese bile genellikle aralarındaki ilişkinin güçlü olduğu görülmüştür - ve özensiz düşüncelilerle işimiz olmaz. Yeterince iyi yazamıyorsanız, öğrenin.