Skip to content

Instantly share code, notes, and snippets.

@ustun
Created March 26, 2017 17:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ustun/55c3a61b31152432a2bccc359abf2544 to your computer and use it in GitHub Desktop.
Save ustun/55c3a61b31152432a2bccc359abf2544 to your computer and use it in GitHub Desktop.
<h1>On Yılda Programlama Öğrenin <sup><a href="#footnote1">(*)</a></sup></h1>
<h3>Peter Norvig <sup><a href="#footnote2">(**)</a></sup></h3>
<hr>
<h2>Neden herkes böyle bir telaş içinde?</h2>
Herhangi bir kitapçıya gittiğinizde Teach Yourself Java in 7 Days (7 Günde Java Öğrenin) benzeri,
size birkaç günde veya birkaç saatte Visual Basic, Windows, Internet (vs.) öğretmeyi vadeden
kitaplarla karşılaşırsınız. Amazon.com'da şöyle <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/tg/browse/-/468558/104-5938873-6579160">bir arama yapınca</a>:
<pre>
<a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=%2Bfeaturedrank&amp;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20days%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&amp;sz=25&amp;pg=1/ref=s_b_np">pubdate: after 1992 and title: days and</a> <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=%2Bfeaturedrank&amp;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20days%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&amp;sz=25&amp;pg=1/ref=s_b_np">(title: learn or title: teach yourself)</a>
(1992'den sonra basılmış baslığında gün ve öğrenin kelimeleri geçen kitaplar)
</pre>
karşıma 248 sonuç geldi. Bunların ilk 78 tanesi bilgisayar kitaplarıydı
(79. ise, <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0781802245/">Learn Bengali in 30 Days</a>
(30 Günde Bengalice Öğrenin)). "Gün" anahtar
sözcüğünü <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=%2Bfeaturedrank&amp;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20hours%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&amp;sz=25&amp;pg=3/ref=s_b_np">"saat" ile değiştirdiğimde</a>
ise sonuç benzerdi: ilk 77 bilgisayar kitabını
78. olarak <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0028638999/">Teach Yourself Grammar and Style in
24 Hours</a> (24 Saatte Gramer ve Stil Öğrenin)
takip ediyordu. Gelen toplam 253 sonucun ilk 200'ünün %96'sını bilgisayar kitapları oluşturuyordu.
<br><br>
Birkaç günde, Beethoven, Kuantum Fiziği ya da köpek eğitimi öğreten kitaplar yok.
Bu sonuçlara bakılırsa, ya insanlar bilgisayar hakkında yeni şeyler öğrenmek için
çok hevesli ve aceleci ya da bu iş bir şekilde inanılmaz derecede kolay.
<br><br>
Bakalım <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ISBN=1556225679/4094-7934802-027992">
Learn Pascal in Three Days</a> (3 günde Pascal Öğrenin) benzeri bir başlık ne anlama gelebilir:
<br><br>
<ul>
<li><b>Learn(öğrenin)</b>: İlk olarak 3 gün kayda değer programlar yazarak, yazdığınız
programlardaki başarı ve başarısızlıklarınızdan ders almanıza yetecek bir süre
değildir. Ne tecrübeli bir programcıyla çalışmaya, ne de o ortamın içinde yaşamanın nasıl
bir şey olduğunu anlamaya zamanınız olmayacaktır. Bu durumda sadece yüzeysel bir
aşinalıktan bahsedilebilir, derinlemesine bir kavramadan değil. Kısacası dili
iyi öğrenmeye fırsatınız olmayacaktır. Alexander Pope'nin de söylediği gibi bir
"yarı bilgili olmak çok tehlikelidir".<br><br>
</li>
<li><b>Pascal</b>: 3 gün Pascal'ın sözdizimini öğrenmeye yetebilir (tabii eğer benzer
sözdizimli bir dili önceden biliyorsanız), ama bu sözdizimini verimli bir şekilde
kullanmayı öğrenemezsiniz. Kısacası, eğer bir Basic programcısıysanız, Pascal'da Basic
mantığına dayanan programlar yazmayı öğrenebilirsiniz ama Pascal'ın hangi özellikler için
iyi (ve nelerde kötü) olduğunu öğrenemezsiniz. O zaman ne anlamı kalır ki?
<a href="https://web-beta.archive.org/web/20120314020215/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html">
Alan Perlis</a> "Programla mantığınızı etkilemeyen bir dili öğrenmiş olmanın bir değeri yoktur."
demis. Bir ihtimal, belirli bir işin üstesinden gelmek için biraz
Pascal (yada muhtemelen Visual Basic ya da JavaScript) öğrenmeniz gerekiyordur.
Bu durumda da nasıl programlama yapacağınızı değil, ancak o anki sorunun üstesinden
nasıl geleceğinizi öğrenirsiniz.<br><br>
</li>
<li>
<b>in Three Days(üç günde)</b>: Malesef, ilerki bölümde de göreceğiniz gibi bu süre yetersiz.
<br><br>
</li>
</ul>
<h2>On yılda Programlama Öğrenin</h2>
Araştırmacıların da (<a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0805803092">Hayes</a>, <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/034531509X/">Bloom</a>) ortaya koyduğu üzere,
satranç oynamaktan beste yapmaya, resimden piyanoya, yüzmeden tenise ya da
nöropiskoloji ve topoloji alanlarında araştırma yapmaya kadar bir çok alanda uzman olmak,
on yıl civarında bir zaman alıyor ve bunun bir kısayolu var gibi gözükmüyor. Daha 4 yaşında müzik
dahisi olduğu anlaşılan Mozart bile, ancak 13 sene sonra dünya çapında ses getirecek
bestelerini yapmaya başlamış. Diğer bir tarzda, Beatles, 1964'te sahnelere, ardarda
hit olan şarkıları ve Ed Sullivan'ın programında çıkmalarıyla gelmiş gibi gözükseler de,
aslında 1957'den beri Liverpool ve Hamburg'da küçük klüplerde çalıyorlardı. Başlangıçta
kitleleri çabuk cezbetmelerine rağmen ilk kayda değer başarılarını 1967'de Sgt. Peppers
ile yakaladılar. Samuel Johnson'a göre bu süreç on yıldan da fazla sürmekte: "Herhangi bir
alanda kusursuzluğun, bir ömürboyu o iş için çalışmaktan daha hafif bir bedeli yoktur."
Chaucer de, bir sanatı öğrenmenin çok uzun sürdüğünden, ama hayatın çok kısa olduğundan yakınır.
<br><br>
Benim programcılıkta başarı için tavsiyelerim şunlardır:
<ul>
<li>Sırf ne kadar eğlenceli olduğunu görmek için programcılıkla biraz uğraşın,
programlar yazın. Programcılığın, on sene uğraşmak istemenizi sağlaycak kadar
eğlenceli olan boyutunu kaybetmemesini sağlayın.<br><br>
</li>
<li>
Diğer programcılarla konuşun, başka programları okuyun. Bu herhangi bir kitap veya
kurstan daha önemli ve yararlıdır.<br><br>
</li>
<li>
Programlar yazın. Öğrenmenin en iyi yolu
<a href="https://web-beta.archive.org/web/20120314020215/http://www.engines4ed.org/hyperbook/nodes/NODE-120-pg.html">pratiktir</a>.
Daha teknik bir şekilde ifade
edecek olursak; "Bireylerin performanslarının en üst düzeyine, elde edilen tecrübelerle
erişilemez, fakat çok deneyimli bireylerin bile gelişme yönündeki yoğun çabaları
performanslaını yükseltmeye yeter." <a href="https://web-beta.archive.org/web/20120314020215/http://www2.umassd.edu/swpi/DesignInCS/expertise.html">(s.366)</a>
ve "En verimli öğrenme şekli, bireyin
seviyesine uygun bir konu üzerinde, bilgilendirici geri beslemeler, tekrarlama fırsatları
ve hataların düzeltilmesi gibi çalışmalar gerektirir." (s.20-21)
"<a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0521357349">
Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</a>"
isimli kitap bu bakış açısı için ilginç bir referans olabilir.<br><br>
</li>
<li>
İsterseniz, üniversitede alacağınız dört yıllık bir eğitim ile (veya
yüksek lisans için daha fazlası ile) bazı işler için gereken referansları
elde edebilirsiniz. Ayrıca bu sayede konu üzerinde derinlemesine çalışmalar
yapma şansı da bulabilirsiniz. Ama okuldan keyif almıyorsanız, biraz daha fazla çaba
ile iş ortamında da bu tecrübeyi kazanabilirsiniz. Her iki durumda da kitaplardan
öğrendikleriniz yetersiz kalacaktır. The New Hacker's Dictionary(Yeni Hacker Sözlüğü)
yazarı Eric Raymond "Sadece boya ve fırça sizi iyi bir ressam yapmayacağı gibi bilgisayar
bilimleri eğitimi de, hiçkimseyi uzman bir programcı haline getirmez" der. İşe aldığım
en iyi programcılardan biri sadece lise mezunuydu. Çok
<a href="https://web-beta.archive.org/web/20120314020215/http://www.xemacs.org">güçlü</a> ve çok <a href="https://web-beta.archive.org/web/20120314020215/http://www.mozilla.org">
iyi</a> yazılımlar üretti,
<a href="https://web-beta.archive.org/web/20120314020215/http://groups.google.com/groups?q=alt.fan.jwz&amp;meta=site%3Dgroups">
kendi USENET haber grubuna</a> sahipti ve hiç şüphe yok ki hisse senetleri sayesinde
şu anda benim hiçbir zaman olamayacağım kadar zengin.<br><br>
</li>
<li>
Başka programcıların da katıldığı projelerde yer alın. Bazı projelerde en iyi, bazılarında
en kötü programcı siz olun. Ekibin en iyisi siz olduğunuzda, bir projeyi yönetebilme
becerinizi test edebilme imkanı ve vizyonunuzla takım arkadaşlarınızı etkileme fırsatı
bulacaksınız. En kötü olduğunuz durumda ise, ustaların neler yaptıklarını ve
neleri yapmaktan hoşlanmadıklarını (ki bu size yaptırdıklarıdır) gözlemleme şansı bulacaksınız.
<br><br>
</li>
<li>
Başka programcıların katıldığı projelerde onlardan sonra yer alın. Başka bir programcının
yazdığı programı anlayabilecek seviyeye gelin. Yazılımın yazarı yokken onu anlamak ve
düzeltmek neler gerektiriyor görün. Kendi yazdığınız programları da sizden sonra
üzerinde çalışacakların işini kolaylaştıracak şekilde nasıl tasarlayacağınızı düşünün.
<br><br>
</li>
<li>
En az yarım düzine programlama dili öğrenin. Bunların içinde, sınıf soyutlamalarını
içeren bir dil (Java veya C++ gibi), fonksiyonel soyutlamaları destekleyen
bir dil (Lisp veya ML gibi), sözdizimi soyutlamalarını destekleyen
bir dil (Lisp gibi), tanımlama özelleştirmelerini içeren bir
dil (Prolog veya C++ kalıpları gibi), eşrutinleri destekleyen bir
dil (Icon ve Scheme gibi) ve paralelliği destekleyen bir
dil (Sisal gibi) mutlaka bulunsun.
<br><br>
</li>
<li>
"Bilgisayar bilimleri"nde "bilgisayar"ın da olduğunu unutmayın. Bilgisayarınızın
bir komutu çalıştırmasının, ön ya da ana bellekten bir kelime yakalamasının,
ardıl kelimeleri diskten okumasının ve disk üzerinde yeni bir yer bulmasının
ne kadar zaman aldığını öğrenin. (<a href="#answers">Cevaplar aşağıda</a>.)
<br><br>
</li>
<li>
Dil standartlaştırma çalışmalarından birinde yer alın. Bu ANSI C++ komitesi
de olabilir, yerel programcılar olarak içe kaydırma standartlarınızın seviyesini
belirleyecek bir çalışma da. Her iki durumda da diğer programcıların bir dilde neyi,
ne kadar ve biraz da şanslıysanız neden sevdiklerini öğrenebilirsiniz.
<br><br>
</li>
<li>
Bu dil Standartlaştırma çalışmalarından bir an önce ayrılabilecek sağduyuya sahip olun.
</li>
</ul>
Tüm bunları göz önünde bulundurunca, sadece kitaplardan öğrendiklerinizle ne kadar
ilerleyebileceğiniz tartışılır. İlk çocuğum doğmadan önce, bütün <i>How To (Nasıl) ...</i>
kitaplarını okumuştum ve buna rağmen kendimi hala bilgisiz bir çömez gibi hissediyordum. 30 ay sonra,
ikinci çocuğum doğacakken, bir tekrar için kitaplara geri mi döndüm dersiniz? Hayır,
bunun yerine kişisel tecrübelerime güvendim ve daha sonra gördüm ki bu, uzmanlar
tarafından yazılmış binlerce sayfadan çok daha yararlı ve güven verici.
<br><br>
Fred Brooks <sup><a href="#footnote3">(***)</a></sup>, "No Silver Bullets" isimli eserinde iyi yazılım uzmanları bulmak
için üç seviyelik bir plan tanımlamış:
<ol>
<li>Sistematik olarak ve mümkün olduğunca erken iyi tasarımcıları belirleyin.<br><br>
</li>
<li>Yeni başlayanların kariyer dosyalarını düzenlemesi için onların
gelişiminden sorumlu bir kariyer yöneticisi görevlendirin.
<br><br>
</li>
<li>Yetişmekte olan tasarımcıların birbirlerinden etkilenip harekete geçecekleri imkanlar yaratın.
</li>
</ol>
Bu gösteriyor ki bazı kişiler müthiş birer tasarımcı olmak için gerekli özelliklere
zaten sahipler, iş onları ikna etmeye kalıyor. Alan Perlis bunu daha özlü bir
biçimde "Herkese heykel yapmak öğretilebilir: Michelangelo'ya ise nasıl yapılamayacağı
öğretilmeliydi. Bu çok iyi programcılar için de böyledir." şeklinde ifade etmiştir.
<br><br>
Hadi, şimdi gidip o Java kitabını satın alın; muhtemelen işinize yarayacaktır.
Ama 24 saatte, günde hatta ayda, hayatınızın değişmesini veya programcı
olarak gerçek yetenek ve deneyimlerinizin gelişmesini beklemeyin.
<br><br>
<hr>
<h2>Referanslar</h2>
Bloom, Benjamin (ed.) <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/034531509X">
Developing Talent in Young People</a>, Ballantine, 1985.
<br><br>
Brooks, Fred, <a href="https://web-beta.archive.org/web/20120314020215/http://citeseer.nj.nec.com/context/7718/0">
No Silver Bullets</a>, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
<br><br>
Hayes, John R., <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0805803092">
Complete Problem Solver</a>, Lawrence Erlbaum, 1989.
<br><br>
Lave, Jean, <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0521357349">
Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</a>,
Cambridge University Press, 1988.
<hr>
<a name="answers"><h2>Cevaplar</h2>
2001 yazında, 1 GHz bir bilgisayar üzerinde çeşitli operasyonların gerçekleştirilme süreleri:
<br><br>
<table border="1" cellpadding="2" cellspacing="2">
<tr><td>tek komut çalıştırma:</td><td> 1 ns (nanosaniye) = 1/1,000,000,000 saniye</td></tr>
<tr><td>L1 ön bellekten kelime yakalama:</td> <td> 2 ns</td></tr>
<tr><td>ana bellekten kelime yakalama: </td> <td>10 ns </td></tr>
<tr><td>ardışık disk birimlerinden kelime yakalama:</td> <td>200 ns</td></tr>
<tr><td>disk üzerinde boş yer arama: </td> <td>8,000,000 ns = 8 ms (mikrosaniye)</td></tr>
</table>
<hr>
<h2>Notlar</h2>
T. Capey, Amazon'daki <a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/ASIN/0805803092">
"Complete Problem Solver"</a> isimli kitabın altındaki
"Bu ürünü alanlar bunları da aldılar" bölümünde "Teach Yourself Bengali in 21 days" ve
"Teach Yourself Grammar and Style" kitaplarının da bulunduğuna dikkatimizi çekiyor.
Bence, bu ürünlere bakan kişilerin büyük bir çoğunluğunu bu sayfadan gidenler oluşturuyor.
<hr>
<a href="index.html"><i>Peter Norvig</i> (Copyright 2001)</a>
<br><br>
<hr>
<a name="footnote1">(*) Peter Norvig'in <a href="https://web-beta.archive.org/web/20120314020215/http://www.norvig.com/21-days.html">adresindeki</a>
<b>Teach Yourself Programming in Ten Years</b> isimli makalesinin Çağıl Uluşahin
tarafından gerçekleştirilmiş çevirisidir.
<br><br>
<a name="footnote2">(**)<a href="https://web-beta.archive.org/web/20120314020215/http://www.norvig.com/">Peter Norvig</a>
Google'da Arama Kalitesi Geliştirme bölümünde çalışmakta olup <a href="https://web-beta.archive.org/web/20120314020215/http://aima.cs.berkeley.edu/">
Artificial Intelligence: A Modern Approach</a> kitabının yazarlarındandır.
<br><br>
<a name="footnote3">(***)
<a href="https://web-beta.archive.org/web/20120314020215/http://www.cs.unc.edu/~brooks/">Fred Brooks</a>, IBM 360 projesinde yöneticilik de
yapmış bir bilgisayar bilimcisi ve profesyonelidir.
"<a href="https://web-beta.archive.org/web/20120314020215/http://www.amazon.com/exec/obidos/tg/detail/-/0201835959/104-1701831-4571939?v=glance">
The Mythical Man Month</a>"ın yazarıdır. Burada Brooks IBM'deki adam seçme
metodundan bahsediyor. </a>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment