Bir programlama dilini bilme ölçüsü nedir ?

0
anonim
LKD listelerinde bir süredir devam etmekte olan bir konu başlığı bu.

Tartışmanın bir yerinde bir arkadaş "Bir programlama dilini bilmek için hiç bir başvuru kaynağı kullanmaksızın program yazılabilmeli " dedi.

Bunun üzerine eski FM'cilerden, Uludag projesi COMAR projesi baş programcısı Serdar Köylü yeni başlayanlar için kılavuz olabilecek nitelikte, makale tadında bir yanıt gönderdi.

Ben de listelerde yazılan herşeyin gayet GPL olduğunu düşünerek kendisine sormadan buraya haber olarak geçiyorum :)
Selamlar...

bir programlama dilini "tam olarak biliyorum" demek için, o programlama dili üzerinde hiçbir kaynaktan (uç kaynaklar dışında) yararlanmadan program geliştirebiliyor olmanız gerekir.


!?...

Bu ezbercilik olup, cogu zaman berbat program yazmanın en iyi yolu olur. 20 Yıl önce bizde böyle yapardık. Ama son 15 yıldır kullandığım C için örneğin, hala "fd = open(...)" yazarken (mesela) mutlaka man dosyasını açıp bakmayı ihmal etmem.. Herhalde ortalama günde 25-30 defaya filan tekabül eder bu..

Kısacası, hıfzı beşer nisyanla maluldur. Önemli olan herşeyi bilmeye, ezberlemeye çalışmak değil, anlamaya odaklanmak, ezber olacak bilgiyi ise nerde bulacağını bilmektir.

Programlama dilini iyi biliyorum diyebilmek için bilinmesi gerekenler bence şunlardır (en azından ilgilenilen mimariler üzerinde):

1. Bellek yönetimini bilmek. Sayılar, arraylar, nesneler vs. nasıl, nerde saklanıyor?
2. Fonksiyon çağrıları nasıl yapılıyor? Stack üzerinden mi? Byval'mı, Reference'mı kullanıyor vs.?
3. Temel komut setini iyi kavramak. Bu komut seti örneğin C için:

if/else/elseif, switch, while, for, break/continue, return olacaktır.

Elbette 1. Maddeye istinaden int, float, struct gibi veritiplerini de bilmek gerekir. "int x" ile "static int x" arasındaki farkı, bu "x" in stack/data/bss vs. nerede tutulduğunu bilmek elzemdir. C özelinde, #define gibi preprocessor komutlarını da bilmek gerekir elbet.

Peki ya printf() yada mmap()? Bunlar dışarıdan referanslardır. Bunların iyi bilinmesi değil, iyi anlaşılması, kodlama boyunca da manuallerinin el altında tutulması gerekir. Kendi adıma hala printf için ? ve %? olaylarını bilmem, ki 15 yıla yakın süredir bunları kullanırım. Bunları ezberlemeye çalışmak hamallıktır, gereksiz kafa şişirmektir.

Aslen, bu fonksiyonlar dilin değil, işletim sisteminin bir parçasıdır. Diller bunları tarif eder, işletim sistemi yerine getirir. Bir diğer husus ise, "Programlama" kavramının "Programlama Dili" kavramından ayrı olduğudur. Diller bilinen direktifleri, işletim sistemine ne istediğinizi söylemeyi sağlayan fonksiyon setlerini ve işletim sistemine erişim hizmetini sağlarlar. Bunları ne yapacağınız sizin sorununuzdur. Elinizde olanda aslen bu kadarıdır. Grid, textbox, veritabanı vs. olayı nedir, nasıl kullanılır kavramları aslolarak programlama konusunun bir parçasıdır. Eğer programlama bilginiz varsa bu olayları herhangi bir dille kolayca aşabilirsiniz.

Programlama, olayın özüdür. Herhangi bir dilde yapılabilir. Eğer programl ama kavramını özümsemişseniz, herhangi bir dil kullanarak bunu yerine getirebilirsiniz. Hatta, bu bunlarla olmaz diyerek kendi dilinizi yazıverirsiniz. Bu şunu demeye çalışıyor: "Dil öğrenmek değil, programlama öğrenmek aslolandır.."

Saygı ve sevgiler...

Görüşler

0
bm
Buyuk olcude katiliyorum, o bilme tarifi dogru bir tarif degil. Kitaba yahut kaynaga bakmadan ben de hicbirsey yapamam, yapmaya kalkarsam olur belki ama rahat hissetmem kendimi. Yazilisi olan bir seyi deneysel olarak ve kotu bir surpriz seklinde bulma ihtimali de var, zamana yazik. Satiyorsak, ne bicim soforum diye tek gozu kapayip otobus kullanmaya benziyori bu. Geregi yokken isimizi riske sokmak yani.

Son paragrafi tam anlamadim. Malumu ilam mi, daha derin bir bilgelik mi var yoksa cok kabiliyetli oldugunu tahmin ettigim birinin herkesi kendi gibi zannetmesinin tezahuru mu bilmiyorum. Benim isime gelen 'bilen her dilde yapar' yerine 'bilmeyene dil secimi yardimci olmaz' demek kabaca. Ilkinden daha zayif bir ifade tabi. (ikisi de excel'le her gun program yazanlari kapsamiyor tabi, o ayri).
0
Nightwalker
Son paragrafi tam anlamadim. Malumu ilam mi, daha derin bir bilgelik mi var yoksa cok kabiliyetli oldugunu tahmin ettigim birinin herkesi kendi gibi zannetmesinin tezahuru mu bilmiyorum. Benim isime gelen 'bilen her dilde yapar' yerine 'bilmeyene dil secimi yardimci olmaz' demek kabaca. Ilkinden daha zayif bir ifade tabi. (ikisi de excel'le her gun program yazanlari kapsamiyor tabi, o ayri).


Söz konusu yanıtın yeni başlayanlara yol gösterici nitelikte olduğunu düşünürsek, malumu ilan gerekli olabiliyor.
0
roktas
| ... malumu ilan gerekli olabiliyor.

Affınıza mağruren bu dil yâresine işaret etmek isterim. Doğrusu bm'nin yazdığı gibi, yani "ilâm etmek" = "ilm'edilir" ~= "bilinir" kılmak. (Mahkemelerde resmî hüküm duyurularında kullanılır.) Lâtif bir terkiptir. Çünkü "ma'lûm" ve "ilâm" aynı kökten gelir, yani "zaten bilineni bilinir kılmak" :-) Neyse, kaldığımız yerden devam edebiliriz...

P.S. Yoksa taht-eş şuurda "Bilişsel Bilimler Kılavuzu"na yapılan me'yus bir atak mı oldu bu?
0
bm
Bu vesileyle FM'nin herhalde en cok harf hatasi yapan uyesi olarak dusundugumu dogru yazdigim nadir anlarin farkedilmesine ragmen yanlislarim affedildigi icin butun camiaya -- yine e yerine a basmayayim aman diyerek -- tesekkur ederim. (Mozilla'daki metin alanlanlarini gnuclientla emacsa baglayip. orada da o HMM'li deasciifier'in biraz daha bana uyanini calistirma projem ZS-3765 koduyla proje sirasina sokuldu.)
0
bio
ZS-3765

Bu ZS Zihni Sinir'den geliyorsa, proje degil de proce olmasi gerekmez miydi :-)
0
Soulblighter
Bence bir programlama dilini bilmekten çok programlama mantığını bilmek önemlidir. Genel olarak bakıldığında birçok programlama dili birbirine yakındır. Program yazma mantığını öğrenmişseniz bir çok dilde rahatlıkla program yazabilirsiniz. Kod ezberlemek bana göre hamallıktır.

Örneğin program yazarken belli bir durumda dizi kullanmanın veya hangi durumlarda işaretçi kullanmanın daha avantajlı olacağını bilmek gerekir. Nasıl kullanıldığına ise açıp yardımından veya kod referansından bakabilirsiniz. Zaten kod referans belgelerinin amacı da budur.

Kısacası ne yapacağınızı bilmeniz gerekir. Nasıl yapacağınızı ise belgelerden öğrenebilirsiniz...

Yani bence böyle :)
0
jai
Anneannemin 1 metre uzunluğunda bir değneği vardır; yürürken ondan destek alır. Sıradan bir tahta parçası. Anneanneme güzel bir baston verseniz kullanmaz. Çünkü o yıllarca elindeki değneğe alışmıştır, değneğin dengesine hakimdir. Tüm özelliklerini bilir, tanır (kimbilir, belki değnek de anneannemi tanıyordur). Anneanneme "yürümeyi anlat" deseniz, size değnekten de bahseder.
Programlama kavramından bahsederken bizim de elimizdeki değneğe bağlı olmak zorunda olduğumuzu düşünüyorum. Çünkü bir programcı programlama kavramını elindeki aracın biçimiyle tanıyacaktır. Birinin elinde C, birinin elinde Java olan iki programcıya "programlamayı anlat" derseniz eminim ki daha 2.dakikadan itibaren biri C'nin diğeri Java'nın felsefelerini anlatmaya başlayacaklardır. Programlama dillerinin birer çift göze benzediklerini düşünürüm ben.
Serdar Köylü'nün fopen, printf vs. ile ilgili söylediklerine katılmakla birlikte, konunun başlığındaki soruya şöyle cevap vermeyi tercih ederim:
Bir programlama dilini bilme ölçüsü, o programlama dilinin felsefesini tanıma ölçüsüdür.
Ezberle ilgisi yoktur. En temel görülen fonksiyonların kullanımını görmek için her defasında kılavuzlara bakmak ayıp da değildir, günah da. Hatta bakmayan ayıp eder, günaha girer...
0
GaripFakir
Hazir ölçülerden konu açılmışken, Peki bir işletim sistemini bilmenin ölçüsü nedir? özgür yazilim çerçevesinde konuşacak olursak
Mesela ben Debian ya da slackware'i biliyorum demenin ölçüsü ne olur?

0
FZ
Bir Lisp programcısı için bu ölçü "o dil için derleyici yazabilmek" idi. Adam Lisp'i bir Lisp derleyicisi yazarak öğrendiğini ve artık kendini "Lisp bilen insan" olarak kabul ettiğini söylüyordu (Franz için mi çalışmaya başlamıştı yoksa LispWorks'ü üreten firma için mi, şimdi anımsayamadım).

Dokümantasyon meselesine gelince, orada da ölçü herhalde aradığının o dokümantasyonun neresinde olduğunu kolayca bulabilmek olsa gerek. Bir sayfada konuya dair 15 referans olabilir ve siz bunlardan 2 tanesini nokta vuruşu yapıp yakalıyor, diğerlerinin hedefinizle doğrudan ilgisini olmadığını kestirebiliyorsanız zaten kullandığınız ortama dair epey deneyiminiz var demektir. Elbette ki dokümantasyon kullanmamak buradaki diğer deneyimli yazılımcıların dediği gibi çok saçma bir şey, fotografik hafıza sahibi olmamak garip bir şey değil, bilakis fotografik hafıza sahibi olmak yani bir kez gördüğü bir şeyi, bir metni tüm detayları ile günler sonra hatırlayabilmek çok çok ender rastlanan bir beyin özelliği.

Bir de dilin kendisi dışında kullanılan araç da önemli olabiliyor, onda ustalaşmak bambaşka bir şey olabiliyor. gcc derleyicisinin milyar tane parametresinin hangilerini bir araya getirsek optimize program çıkar hadi değişik değişik parametre setleri deneyip sonuçlara bakan ve optimum seti bulmaya çalışan genetik algoritmalara (!) dayanan programlar yazalım diyen, bu tür araştırma yapan bilgisayarcılar var. Görülen o ki artık gcc'ye optimize program ürettirecek parametre setini bulma işi insanları zorlamaya başlayıp yapay zekâ alanına girmeye başlamış [1, 2]. Bu, tabii dilin kendisinden çok farklı bir konu ama günümüzde artık kullanılan araçlardan bağımsız olarak düşünmek de zor olsa gerek!

1- http://liberty.princeton.edu/Publications/jilp_ose.pdf

2- http://www.cs.colostate.edu/~whitley/CS640/metaopt-pldi03.pdf

0
bm
Bir Lisp programcısı için bu ölçü "o dil için derleyici yazabilmek" idi.

Duane Rettig olsa gerek. Franz'da calisir.

http://alu.cliki.net/Duane%20Rettig's%20Road%20To%20Lisp
0
paprika
bir programlama dilini bilmenin ölçüsü herhalde, belli programlama konseptlerini özümsemekle ilgili birşeydir. diyelim ki, o çok eski basic'ten bu yana kod yazıyorsanız, ve eski alışkanlıklarınız dolayısıyla, oop'yi kullanmakta çekingen davranıyorsanız siz, c++'ı, php'yi vs. bilmiyorsunuz demektir.

daha kısa ve anlamlı bir ifadeyle, bana göre, bir kodlama dilini bilmek demek, onu "verimli" bir biçimde kullanabilmek demektir. elbette bu demek değil ki, her ifadeyi, her operatörü, her naneyi ezberden kodlamanız gerekiyor. hayır. ama, x işinin "nasıl" yapılacabileceğini sezebilmeniz ve eksik ya da yanlış bir kod yazdığınızda bunu anlayabilmeniz gerekir. örneğin, php için (dil mi tartışmasına girmeden) gerekmeyen yerde çift tırnak kullanmamak php'yi bildiğinizin göstergesidir.
0
Geryon
önce printf'in bir komut olmadığı ve dolayısla C dilininde bir parçası olmadığı konusunda anlaşalım.
eğer printf bir C komutu ise KiQueryIOMap'inde bir C komutu olması gerekir. ObDereferenceObject'inde...

zaten C dilinde komut olmadığı(~) gerçeğini görürsek, C dilinin öğrenmenin 10 dakika alacağını görürüz.

Fakat çoğu zaman insalar PC'i programlamayı bilmekle, kullandıkları dili bilmeyi karıştırıyorlar. "Çok iyi C bilmek" ne anlama gelir ? basitce hiçbir anlama gelmez. Çünkü siz "Çok iyi C bilerek" konsola "Hello World !" bile yazdıramazsınız. Sizin diğer standartları bilmeniz gerekir.

Şimdi kaç kişi Win API'lerin hepsini ezbere biliyor ?
win api'lere ezberlemektense windows'un çalışma mekanizmasını bilirseniz Win32SDK ile tüm api'leri kullanırsız...


Görüş belirtmek için giriş yapın...

İlgili Yazılar

Dr. Cem Say´la Yapay Zekâ ve Doğal Dil İşleme Üstüne

FZ

Boğaziçi Üniversitesi Bilgisayar Mühendisliği öğretim görevlilerinden Dr. Cem Say ile bilgisayar dünyasının popüler ve bir o kadar da zorlu konuları olan yapay zekâ, doğal dil işleme ve kuantum bilgi işlem üzerine söyleştik.

FZ: Hocam, yapay zekânın hangi alanlarında, ne kadar süredir çalışıyorsunuz?

CS: Doktora zamanından beri yapay zekâ (YZ) ile ilgileniyorum. Doktora konum, İngilizcesi "Qualitative Reasoning" olan ve "Nitel Uslamlama" olarak Türkçeye çevirebileceğimiz konu idi, ne olduğunu birazdan açıklayacağım. Demek ki, işte 1980'lerin sonlarından bu yana YZ ile ilgileniyormuşum. Ayrıca yukarıda bahsi geçen konuya ek olarak Doğal Dil İşleme özellikle Türkçe dil işleme ile bir süredir ilgileniyorum. YZ konusunda ilgilendiğim temel iki alan bu ikisi.

CVS ve Dallar (Branches) İle Karmaşık Yazılım Yönetimi

malkocoglu_2

Yazılım sektöründe anahtar teslim projeler için bir derece, ürün ile uğraşmakta olan takımlar için kesinlikle lazım olacak bir kaynak kod deposu özelliği vardır. Dallar, yâni branch kavramı. Branch kullanımı her kaynak kod idare programında farklıdır, ve tabii ki açık yazılımın favori programı CVS'te de branch desteği mevcuttur fakat bazı konularda dikkatli olmak gerekmektedir. Yazılım sektöründe birçok konuda olduğu gibi elde bir "yapılması uygun olan/olmayan" gibi bir liste, önceki tecrübelere dayanarak mevcuttur, bu yazıda bu tür tavsiyeleri toparlayarak, kendi tecrübelerimiz ışığında sunmaya uğraştık.

Not: Makale, GNU Emacs ve LaTeX ile yazılmıştır.

İnsanlarda, hayvanlarda ve bilgisayarlarda zekâ

FZ

Bilim ve Gelecek dergisinin Mayıs sayısı bayilerde. Kapak konus: İnsanda, bilgisayarda ve hayvanda zeka.

Bilim ve Gelecek son sayısında, akıl, bilinç, zekâ, anlama, uslamlama, zeki davranış, beceri gibi kavramlara değiniliyor ve hayvanlarda, insanda ve bilgisayarda zeki davranışların olup olmadığını tartışılıyor. "İnsan, bilgisayar ve zeki davranış" başlıklı makalesinde Ulaş Başar Gezgin, bilişsel bilimlerin çerçevesini açıkladıktan sonra bilgisayar ve insan taraftarlarını tartıştırıyor. Bir testten yola çıkarak şu soruya yanıt arıyor: İnsan ussal bir varlık mı? Tuğrul Atasoy ise, soyut zekâmızın evrimsel köklerini en yakın türlerden başlayarak hayvanlarda aradığı makalesinde, hayvanlar dünyasında bilinç ve zekâya ilişkin çarpıcı örnekler veriyor.

Her Nesil Kendi Filozofunu Yaratır

barbaros

Richard Stallman'ın kitabı için Stanford Hukuk Fakültesi Hukuk Profesörü Lawrence Lessig tarafından yazılan giriş bölümü...

Her nesil kendi filozofunu yaratır-bir yazar, ya da zamanın görüntüsünü yakalayan bir sanatçı. Kimi zaman bu filozoflar böyle tanımlanır; çoğu zaman bu tespitin doğrulanması nesiller alan bir zamanda gerçekleşir. Tanımlansın ya da tanımlanmasın, tarih ideallerini konuşan insanlar tarafından şekillenir. Belki bir şiirin fısıltısında, belki de politik bir hareketin haykırışlarında.

Bizim neslimizin de bir filozofu var. O bir sanatçı ya da profesyonel bir yazar değil. O, bir programcı.

Doğru Düzgün Soru Sormanın Yolları

yalcink01

FM Forumda açılmış bir konu altında oluşan doğal süreç, bizi forumlarda ve e-posta listelerinde nasıl soru sormak gerektiği konusuna götürdü. Dernek listelerinde zaman zaman dalgalanmalar yaşanmakla birlikte, genelde ortanın üstü diye tabir edebileceğimiz bir ileti yazım tarzı var. FM Forum'un durumu da pek farklı değil. Yeni katılan arkadaşlar haricinde, acayip ve garip tarzda soru soran pek çıkmıyor. Bununla birlikte, söz konusu forum konusunda görülebileceği üzere, bazen iyi bir kılavuza ihtiyaç duyuluyor. Diğer forumlarda ise durum içler acısı :( Türkçe, Türkçe olduğuna bu kadar pişman edilebilir. İmla ve yazım kurallarındaki boşvermişlik bir tarafa, kelimelerde bile acayiplikler "var way!", "ajaip şeler oljek amma bnm sormk isterim...", şeklinde devam eden ucubeler etrafta cirit atmakta. Elbette ki tek bir kılavuz ile bütün bunları sonlandırmak ve insanları doğru yola sokmak mümkün değil -zaten ahir zaman peygamberliği gibi bir derdimiz de yok :)- ama bir yerden de başlamak gerek, değil mi? Peygamber olamadık diye hayatı tamamen boşvermek de olmaz.

Osman Yüksel'e, bu kadar işinin gücünün ve dahi Debian .po çevirilerinin arasında bu işe vakit ayırdığı için teşekkür ederim.

Türkçe çeviri için ilk sürüme http://www.geocities.com/yalcink01/smart-questions.html adresinden ulaşabilirsiniz. Her türlü geri beslemeye kapımız açıktır. Eklemek istediğiniz bölümler var ise, lütfen çekinmeden bildirin.