Bir Robot Uzmanından Programcılara Tavsiyeler

0
FZ
Vakti zamanında Paul Graham ile Viaweb'in geliştirmiş ve daha pek çok proje ile uğraşmış Trevor Blackwell, bu aralar adından geliştirdiği sıradışı Dexter isimli robot [video] ile bahsettiriyor. Dinamik, gerçek zamanlı olarak ağırlık merkezini hesaplayıp yürüyen yani fiziksel olarak insana çok benzer şekilde hareket eden bu iki ayaklı robot epey ses getireceğe benzer.

Blackwell'in web sitesinde programcılara ve geleceğin "hacker"larına tavsiyelerden bir kısmını Türkçeye çevirip paylaşalım istedik:
Hangi programlama dilini öğrenmeliyim?

Python ile başlayın. Temiz, güçlü, estetik olarak hoşlanabileceğiniz ve öğrenmesi kolay bir dildir. Smalltalk'un modern bir sürümü olan Squeak de harikadır ancak bu aralar pek popüler değil. Mutlaka bir gün C programlama dilini de öğrenmeniz gerekecek ancak Python gibi bir dilin üst seviye soyutlamaları cinsinden düşünür ve yazarken bunları C diline çevirirseniz daha iyi programlar yazdığınızı göreceksiniz. Bir ara, Lisp de öğrenmelisiniz.

Teknik detayları bir yana, programlama dilleri aslında programcı camiaları demektir. Seçeceğiniz dilin iyi programcılarla iletişim kurmanıza imkan tanımasını istersiniz çünkü iyi programcılardan çok şey öğrenebilirsiniz. İyi programcılar Python, Lisp, C++ gibi güçlü dilleri tercih ederler. Bu yüzden, örneğin Visual Basic her ne kadar güçlü ve tam bir dil olsa da gerçekten iyi olan programcıların çok küçük bir kısmı VB kullanır. Java programcılarının %99'undan öğrenmeye değer bir şey duyamazsınız.

Diğer yandan, C++ kötü tasarlanmış bir dildir ancak tarihi sebeplerden ötürü pek çok zeki insan bu dili kullanmıştır dolayısı ile akıllı bir topluluk ile muhatap olursunuz.

Benzer prensip işletim sistemleri için de geçerlidir. Her ne kadar Windows 2000 ve ardından gelen işletim sistemleri gayet iyi işletim sistemleri olsalar da gerçekten iyi olan programcıların ancak küçük bir kesimi bu işletim sistemlerini kullanır yani eğer siz bu işletim sistemini tercih ederseniz bunun üzerinden tanıdığınız insanlar da ortalama insanlar olacaktır. FreeBSD ve Linux gibi sistemlerin etrafında ise çok daha iyi bir camia vardır.

Programlama öğrenmeye başlıyorum. Birkaç iyi kitap tavsiye edebilir misiniz?

Pek çok dil için O'Reilly yayınevinden çıkan kılavuzlar yeterince iyi sayılır. Kerninghan ve Pike'ın "The Practice of Programming"i harikadır. Ne sebeple olursa olsun "21 Günde Java Öğrenin" gibi bir kitabı okumamalısınız.

Nasıl daha iyi programcı olabilirim?

Diğer programcıların yazdıkları kaliteli program kaynak kodlarını okumak için vakit ayırın. Maalesef Linux ve GNOME gibi açık kodlu projelerdeki kodların büyük kısmı kötü yazılmıştır. İyi kaynak kodlara sahip olduğunu gördüğüm açık projelerden birkaçı şunlardır:
  • FreeBSD çekirdeği ve yardımcı programları.
  • Bittorrent: Hem karmaşık algoritmalar barındıran hem de güzel bir kullanıcı arayüzü olan, Python ile yazılmış bir program.
  • Squeak: Kendi dilinde yani Squeak ile yazılmıştır. Güçlü grafik kullanıcı arayüzünün kaynak kodu sistemle birlikte gelir ve şimdiye dek gördüğüm arayüz sistemleri içinde temiz, okunabilir ve kolayca müdahale edilebilir tek grafik kullanıcı arayüzü.
  • Python: Hem C ile yazılmış yorumlayıcı kısmı hem de işlev kitaplıkları (bunlar Python ile yazılmıştır)
  • LCC (lightweight C compiler): Bu C derleyicisi, David R. Hanson'ın yazdığı "A Retargetable C Compiler: Design and Implementation" isimli harika kitapla birlikte incelenirse çok faydalı olur. Hayatınız boyunca bir derleyici yazmayacak olsanız dahi bu kitabı okumanız size çok şey öğretecektir.
Eğer saydıklarım dışında iyi kod içeren açık projeler biliyorsanız lütfen burada listelemem için bana bir e-posta yollayın.

Uzman bir programcıyım. Bana birkaç iyi kitap önerebilir misiniz?

Cormen, Leiserson ve Rivest'in yazdığı "Algorithms"; Abelson ve Sussman'dan "The Structure and Interpretation of Computer Programs", Paul Graham'dan "On Lisp" (Lisp kullansanız da kullanmasanız da bu kitabı mutlaka okuyu), Don Knuth'un tüm kitapları (her ne kadar bunun için biraz çaba sarf etmeniz gerekse de). Özel konularda bir iki kitap tavsiye etmem gerekirse öncelikle Stevens'dan "Unix Network Programming", Jones ve Lin'den "Garbage Collection" ve Fraser ve Hanson'dan "A Retargetable C Compiler: Design and Implementation" kitaplarını önerebilirim.

Görüşler

0
osx
Tavsiyeler çok hoşuma gitti, özellikle Python hakkında yazdıkları, okuyunca "evet! doğru dille başlamışım" dedim :) ...
0
anonim
"Maalesef Linux ve GNOME gibi açık kodlu projelerdeki kodların büyük kısmı kötü yazılmıştır."

Bu dogru. Ozellikle Linux cekirdeginin kalitesi 2.0'dan beri cok dustu. Linux, Windows'un kompleksitesine yaklastikca, Linux icin kernel kodu yazan insanlarin ortalama becerisi, Windows icin yazanlarinkinden daha az oldugu icin, kalite dusuyor.

Bu acik kaynak projelerin dogasinda var aslinda. Bir proje uzerine odaklanmis, tam zamanli, yetenekli ve tecrubeli muhendislerin yazdigi kodlar yerine, genelde universite mezunu olmayan siradan bilgisayar meraklilarinin bos zamanlarinda yazdigi kodlar kullanilinca zamanla kalite farklari ortaya cikiyor.

Projenin baslarinda basit problemlerle ugrasirken bu fark cok belli olmuyor. Ancak ilerleyip ugrasilan problemler karmasiklastikca, iki grup arasindaki kalite farki urunlere de yansiyor.

Not: yok 'de' eki ayri yazilir, yok 'Turkce karakter kullan sen' gibi icerige degil bicime yonelik cevaplar yazmayin lutfen. Fikre fikir ile cevap verin.
0
koraypeksayar
Kişisel görüşüm, iyi yazılmış kodla kötü yazılmış kodun birlikte incelenmesi yönünde. Hatta kötü yazılmış kod önemli dersler verir :)

Bir de iyi yazılmış koddan kastin ne olduğuna açıklık getirmek lazım. Yazar söz diziminden bahsediyor olmalı. Yoksa bundan daha öte ekspertiz içeren iyi bellek yönetimi, değişkenlerin tip değişimleri, try-catch cambazlıkları değil.

Öhöm... Linux 2.0~2.6 arası kod kalitesinin düşmesi bence çok çok yanlış. 2.6.x bir sürü yenilikle geldi. Örneğin 2.0.x serisindeki bellek yönetimi becerileriyle 2.6 arasında çok büyük fark var. Uygulamada örneğin güvenlik duvarı uygulamalarında artan performans buna örnek sayılabilir.

Söz Linux çekirdeğinden açılınca, çekirdek modüllerinde kullanılan C söz dizimi biraz kendine özgüdür, hatta tektir. Bu da ilginç dil kullanımına güzel bir örnek olabilir.

Bir kez daha tekrarlamakta fayda var. Linux'la Windows'u kıyaslamamak gerek. Hele geliştiricilerini asla.

Linux çekirdeğini geliştiren çoğunluğun mühendislik öğrencileri olduğunu söylemek de doğru değil. Kendine özgü bir kontrol mekanizması diğer açık kaynak projelerde olduğu gibi çekirdek için de mevcut. Hatta bazen geliştiriciler gruplara ayrılıyor, iki ayrı proje oluşuyor ve iyi çalışan kod kazanıyor. Örneğin Torvalds'ın USB yönetimi (sanırım) Cox'ın USB yönetimi yaklaşımı iki ayrı branch olmuştu bir ara. Uzun sözün kısası, ciddi projelerde saçma sapan kod kendi içinde ayıklanıyor...

Belki Linux çekirdeğini veya modüllerini geliştirenler arasında MS için kod yazanlar bile olabilir. Neden olmasın ?

Son söz: yazarın Linux çekirdeğinden değil bazı uygulama yazılımlarından bahsediyor olması büyük bir olasılık. Zaten bazen bazı kodu karşılaştığınız problemi acilen çözmesi için hemencecik yazıp söz dizimine bakmazsınız. Doğru çalışıyor mu, iş görüyor mu. Cevap evetse problem yoktur :)
0
FZ
Benim yazıdan yani yazarın dediklerinden anladığım, Linux ile kıyaslanan şeylerden biri FreeBSD çekirdeği. Yine anladığım bir başka şey "sözdizimi" gibi dilin değişmeyen, statik olan kısmı değil dilin ne ustalıkta, temizlikte, bakımı kolay yapılabilirlikte kullanıldığı. Hem FreeBSD hem de Linux için C dili kullanıldığına göre dile içkin değişmez şeylerin kıyaslanması gibi bir gariplik yapıldığını sanmıyorum.

Benzer şekilde sadece Trevor Blackwell'den duyduğumuz sözler de değil bunlar. Söz gelimi başka insanlardan da FreeBSD, OpenBSD, OpenSolaris gibi sistemlerin kod kalitesi, mühendislik disiplini bakımından daha iyi, düzgün, temiz ve bakımı kolay yapılabilir olduğuna dair övgüler duyuyoruz.

Kötü yazılmış kodun incelenmesine gelince, evet, belki iyi yazılmış kod iyice incelenip sindirildikten sonra kötü yazılmış kodu görmek anlamlı olabilir. Tersi olması durumunda ise pek faydalı olacağını söylemek güç.
0
anonim
Opensolarisin kod kalitesinden pek emin değilim ben :)

http://www.fazlamesai.net/index.php?a=article&sid=4447
0
majesty
Üniversite mezunu olup, mühendis ünvanı sahip olmanın bilgi ve deneyim sahibi olmak ile alakasını pek çözemedim, yazınızdan.

Mühendis de olmasa, üniversite mezunu da olmasa ama o ünvana ve belgeye sahip kişilerden daha da deneyimli ve bilgili iseler ne olacak?

Tam zamanlı, yarım zamanlı veya hiç zamanlı olması da bilgi ve deneyimle alakasız bir kavram.

Bir proje yerine odaklanmak ya da birden çok projeye odaklanmakta ilgili proje ve programcı için kötü etkisi olmaz.

Umarım rahatsız olduğum şeyleri anlatabilmişimdir.
0
koraypeksayar
Kesinlikle anlatabildiniz. Benim yanlış gördüğüm "Linux çekirdeğinin kod kalitesinin düşmesinin" sebebinin Linux çekirdeğinin sadece mühendislik öğrencileri tarafından yazılmasından kaynaklanıyor olması şeklinde gerçekleşen yanlış kanıya tepkiydi :)
0
bunizz
Bu adamin yaptigi aciklamalar dogru mu acaba ?

Yoksa reklam mi ? :)
0
majesty
Java ve Java'cılara niye bu kadar yüklenmiş ki? :)
0
yilmaz
yaştandır :)
0
mzffer
Bir programlamacı olmak isteyen biri için güzel bir mekale.Beni en azından C öğrenme yönünde aydınlattı daha önce programlama hakkında araştırmalarda yaptım
fakat bir türlü bir net bir sonuç bulamadım.Anladığım şu ki bildiğimiz dil en iyisidir ama miskinlik yapıp kendimizi VB ye odaklarsak da bir şey elde edemiyeceğiz.Kısacası ister windows olsun ister Linux olsun tüm işletim sistemlerinin programlama dillerini öğrenmek gerekir ve her işeletim sisteminden sadece bizim için önemli olan dilleri öğrenmek gerek.
İMZA:
Çok değişik konularda iş yapmayın,sadece bir işiniz olsun onda da profesyonel olun
0
noyton
Biraz geç bir yorum olacka ama;

Yazının orjinalinde Java ile ilgili tek bir satır yok. Türkçesinde biraz değinilmiş , neye göre acaba?
Ayrıca 21 günde programlama öğrenin gibi bir şeyede rastlamadım orjinalde..
Yanılıyorsam düzeltin.
0
FZ
Bu yazının Internet'teki bir HTML belgesi olduğu ve yazarı tarafından burada çeviri yayınlandıktan sonra bir miktar değiştirilmiş olabileceği ihtimalini göz önünde bulundurdunuz mu? (Müsait bir zamanımızda çeviriyi güncelleyebiliriz elbette.)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

6 degrees of Wikipedia

FZ

"Six degrees of separation" lafı dünyadaki iki kişinin ortak tanıdıkları aracılığı ile düşündüklerinden çok daha yakın bağlantılı olduklarını anlatmak için kullanılır.

Six degrees of Wikipedia da benzer şeyi Wikipedia'daki ansiklopedi maddeleri için denemenizi sağlıyor. Tek yapmanız gereken siteyi ziyaret edip iki kavramı girmek. Eğer bir yönde sonuç çıkmazsa, diğer yönde de test etmek mümkün.

Bilgisayar Müzesi

FZ

Bu videoyu izleyip de duygulanacak insanlar tanıyorum hala! ;-) Evet ben de onlardan biriyim.

Görülen o ki Amstrad NC100, TI74, Radio Shack / TRS-80, Oric Atmos, Philips MSX, Sinclair ZX Spectrum 48K gibi şeyler hala birilerine bir şeyler ifade ediyor ve harekete geçmelerini sağlıyor. Projenin başarılı şekilde devamını diliyoruz.

Kadınlar, Oyun ve Hacker Mantığı

ts

Konuşmalarımda hep söylerim "hackerlık aslında bir bakış açısı ve algılayış biçimidir" diye. Geçtiğimiz dönemde bunu destekler nitelikte bir dizi olay yaşadım. Uzun zamandır bir World of Warcraft oyuncusuyum. Oyunda hemen her karakteri deneyip tecrübe ettim. Şu anda da uluslararası bir guild'de fırsat buldukça oynamaya devam ediyorum.

Sony PSP 2.0 Kırıldı!

Soulblighter

Sony'nin taşınabilir oyun konsolu PSP'nin 2.0 sürümündeki firmware'de bulunan hata, duvar kağıdı olarak ayarlanan resimlerin içine gömülen kodların çalıştırılmasını sağlıyor. Böylece bir resim içine gömülen kodlar, resim duvar kağıdı olarak ayarlandığında, çalıştırılıyor.

Gerçek Hackerlar

anonim

'Hacker'ları site çökerten insanlar olarak mı tanıyoruz? Hayır yanılıyoruz. Hackerlar, keşfedilmemiş ve uzun çalışmalar sonucu elde ettikleri birikimlerini açık kaynak topluluğu ile paylaşan üstadlardır. Asıl dikkatinizi çekmek istediğim konu ise http://www.hackaday.com adresindeki birbirinden ilginç bireylerin, keşifleri çevremizi aydınlatan ve insanlığa yol gösteren bir çerçeve çizmesidir..