Temel Yazılım Kotarma Becerileri
Önceki Nasıl Hacker Olunur? Sonraki
Temel Yazılım Kotarma Becerileri
Üstat davranış biçimleri önemlidir, ama gerekli becerilere sahip olmak daha da önemlidir. Davranış biçimi, yetkinliğin yerini tutamaz ve sahip olmadığınız müddetçe kimsenin size üstat demeyi hayal bile etmeyeceği bazı temel beceriler vardır:
Teknoloji değiştikçe bu beceri kümesi de zaman içinde değişmektedir. Örneğin önceleri makina dilinde programlama yapabilmek önemli idi ve yakın zamana kadar HTML bilmek önemli bir beceri değildi.
Şu sıralarda, üstat olmak için gerekli temel beceri listesi şunlardan oluşmaktadır:
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.[70] Bu konuyla ilgili "Python' da gelişim" adında daha ayrıntılı bir yazı yazmıştım. 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ı.[71] "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[72]
BSD Unix hakkında yardım alma ve kaynak edinme için www.bsd.org adresine bakın.
Benim yazdığım Unix ve Internet'in Temelleri elkitabına da bakabilirsiniz.
Not
Eğer yeniyseniz, Linux veya BSD'yi tek başınıza kurmanızı tavsiye etmem. Linux için yerel bir Linux Kullanıcıları Grubu (www.linux.org.tr) bulun ve yardım isteyin veya Open Projects Network (Açık Projeler Ağı) ile iletişim kurun. LISC, yardım alabileceğiniz IRC kanalları da sunmaktadır.[73]
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. (Sanaldokuda iyi öğretici belgeler var; biri burada.)
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.
Ana dili İngilizce olan bir Amerikalı olarak, önceleri kültür emperyalizmi olarak anlaşılmasından çekindiğimden bunu tavsiye etmekten kaçınıyordum. Ama, ana dilleri farklı olan bir kaç kişi, üstat kültürünün ve Internet'in çalışma dilinin İngilizce olduğunu ve üstat topluluğunda bulunmak için İngilizce bilmek gerektiğini söylememde ısrar etti.
1991'de, 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 (ben dahil) 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.


[70] Çevirenin Notu: 3D Studio Max' e ciddi bir rakip olan Blender, Python ile geliştirilmiştir.
[71] Çevirenin Notu (ny): Bu denemenin Türkçe çevirisi de bulunmaktadır.
[72] Çevirenin Notu: Linux34.com'u tavsiye ederim.
[73] Çevirenin Notu: Türkiye'de Linux'a ve Açık Kaynak Yazılımlara değerli katkıları olan Fazlamesai.net'in, irc.freenode.net üzerindeki IRC kanalı #fazlamesai de tavsiye edilir.
Önceki Üst Ana Başlık Sonraki
Üstat Felsefesi Başlangıç Üstat Kültüründe Statü
Bir Linux Kitaplığı Sayfası