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.[55] Bu konuyla ilgili "Python'un gelişimi" adında daha ayrıntılı bir yazı yazmıştım. Python ile ilgili iyi öğretici belgeler Python web sitesinde bulunabilir.

Eskiden Java'yı da öğrenmek için iyi bir dil olarak tavsiye ederdim ama bu değerlendirme fikrimi değiştirdi ("The Pitfalls of Java as a First Programming Language" bölümüne bakın). Artık önce C ve Lisp ardından Java öğrenmenin iyi olacağını düşünüyorum.

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.

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.

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ı. [56] "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. Unix Programlama Sanatı belgesine de göz atmak isteyebilirsiniz.

Bir Linux dağıtımı edinmek için Linux Online! adresi size yardımcı olacaktır. Buradan bir dağıtımı indirebileceğiniz gibi size kurulumda yardımcı olabilecek bir yerel grup da bulabilirsiniz.

Bu NASIL belgesinin ilk on yılında yeni bir linux kullanıcısı için tüm dağıtımların neredeyse aynı olduğunu söyledim. 2006-2007 yıllarında ise en iyi tercih Ubutu olarak görünmektedir. Diğer dağıtımların kendi güçlü oldukları alanlar olsa da Ubuntu Linu'a yeni başlayanlar için açık ara en kolay ulaşılabilir olanıdır.

BSD Unix hakkında yardım alma ve kaynak edinme için www.bsd.org adresine bakın.

Bu suya ayaklarınızı sokmanın iyi bir yolu da Çalışan CD kullanmaktır. Bu dağıtımlar sabit diskiniz üzerinde bir düzenleme yapmadan kullanabileceğiniz dağıtımlardır. CD okuyucuların yavaşlığından kaynaklanan bir yazaşlıkları olsa da sizi zorlayıcı herhangi bir değişiklik yapmadan bu dünyanın imkanlarına göz atmanız için iyi bir yoldur.

Benim yazdığım Unix ve Internet'in Temelleri elkitabına da bakabilirsiniz.

Eskiden eğer yeni bir kullanıcıysanız Linux veya BSD'yi kendi başınıza kurmanızı önermezdim. Günümüzde ise kurulum araçları yeni başlayanların bile kendi başlarına üstesinden gelebilecekleri kadar iyi hale geldiler. Yine de yerel Linux kullanıcı grubuyla iletişim kurarak onlardan yardım istemenizi öneririm.Bunun zararı olmadığı gibi süreci de kısaltacaktır.

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.

Tabi "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. (internette 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.



[55] Çevirenin Notu: 3D Studio Max' e ciddi bir rakip olan Blender, Python ile geliştirilmiştir.

[56] Çevirenin Notu (ny): Bu denemenin Türkçe çevirisi de bulunmaktadır.