www.packerlx.com Packer for Linux eXecutables
Ana Sayfa
Ana Sayfa
Tux
Linux
Programlama
Programlama
Projeler
Projeler
enginkuzu blog
BLOG
Eskiler
Eskiler
Ben
Ben



Bilgi, Öğrenme ve Algoritma



İtiraf...
Bu yazı size çok basit gelebilir. Basitlik her yaştan insanın anlaması içindir.
Bu yazı size çok karmaşık gelebilir. Düşünmek için zaman harcayın, hazırcı olmayın.

Yazımızın içeriği...
Bu yazı temelde benim bilgiye, öğrenmeye ve sistemetik(yani algoritmik) düşünmeye yaklaşımlarımı anlatan teknik bir çalışmadır. Fakat bunları kolayca anlatıvermek oldukça zor olmaktadır. Bu nedenle ilk iki adımda sizleri şüphelere düşüreceğiz.

Sıradanlaşmış hayat...
Bir insan genelde büyüdüğü çevreden etkilenir. Çevrenin doğrularını doğru, yanlışlarını yanlış bilir. Peki çevre mükemmel midir ki insan da mükemmel şekilde yetiştirilmiş olsun? Yıllardır yanlışı doğru bilmişsek bunu nasıl düzeltiriz?

İnsan hata yapar...
İnsanların en büyük ortak özelliği hata yapmasıdır. Bunun doğal sonucu olarak da insan faktörü olan her yerde hata da vardır. İnsan bilgiyi kullanır. Fakat bilgisi sınırlıdır, sonsuz değildir! Bu problemlere yaklaşımlarımızı gereğinden basit yapar. Problemin hakkını verememek söz konusudur.

Neden öğreniyoruz...
Şu ana kadar neden birşeyler öğrendiniz? İlköğretim dörtte birşeyler öğrendiniz. Beşe geçelim diye mi? Notlarım yüksek olsun da babam bana bisiklet alsın diye mi? Kabul edin bunlar uğraştığınıza değmeyecek işlerdir. Karnede yazan notun size getirisi yoktur. O getiriyi siz zaten bir yıl boyunca kazandınız, o sadece ödüllendirmedir! Ben derim ki: Bir amaç için çalışıyor ve zaman harcıyorsanız o işten en yüksek kar beklentisi içinde olun. Verdikleriniz ile aldıklarınızı karşılaştırın. Bir yıl çalışıp bir adet bisiklet elde etmek çok zararlı bir iştir. Akıllı olan insan bunu yapmaz. Peki dörtte öğrendikleriniz beşe temel oluştursun diye mi öğrendiniz? Güzel bir kaçamak cevap ama yeterli değil. İlköğretim, lise, üniversite... Üniversiteden sonra hayata atılacaksınız, bu bina yapma işi daha ne kadar devam edecek? Ben yerinizde olsaydım işin başından beri şunu amaçlardım: Öğreneceğim, elbette bunları hayatıma uygulayacağım, öğrendiklerimden en iyi şekilde faydalanacağım. Bilginizi hayatınıza uygulayınız. Toplama ve çıkarma yapmayı biliyorsunuz. Bi zahmet bunu para üstü hesaplarken kullanıverin! Elektriğin kalbi durdurabileceğini biliyorsunuz. Bi zahmet elektrikli işlerde yalıtkan kullanın! Asitlerin metalleri erittiğini biliyorsunuz. Bi zahmet bakır kapta sirkeli salata yapmayın! Vucut iç elektrolit düzenini böbreklerin sağladığını biliyorsunuz. Bi zahmet ona yardımcı olmak için su için! Her şeyin en sağlıklısının topraktan çıktığı hali olduğunu biliyorsunuz. Bi zahmet endüstrinin işlediği gıdalara rağbet etmeyin! Uygulamaya geçmeyen bilgi nedir biliyor musunuz? Bir külfettir. Boşa taşınan bir ağırlıktır. Bu sizi bir hamal yapar. Hamal yük taşır ama ondan faydalanmaz. Hayata uygulanmayan bilgi, başkasına öğretilmeyen bilgi bir kuşun uçup gitmesi gibi elden avuçtan uçar gider. Kişiye sorun: Siz bunu görmüş müydünüz? Evet. Peki gerisi... Yok! Sadece görmüştük.

Ezberci yaklaşım...
Yeni bilgiyi nasıl öğreniyorsunuz? Böyle mi: Hoca anlattı ben de ezberledim, ezberim çok iyidir. Bizim alanımızda (yeni mühendislikte) ezberin bir önemi yoktur. Çünkü ezberlenen bilgi unutulmaya mahkumdur. Çünkü ezberlenen bilgiler bizim için değerli değildir. Problemler hiç değişmiyor olsaydı onları ezberler, bir tablo haline getirir, bilgisayara yükler ve herşeyi çözerdik. İnsana da gerek kalmazdı. Bizler kilit yaklaşımları öğrenir ve bunları önümüze çıkan her probleme uygulayarak kullanmaya çalışırız. Basit bir örnekle ifade etmeye çalışalım.

Ezberci yaklaşım: Apartmanın girişinden birinci kattaki evimin kapısına kadar 6 basamak çıkarım. Kapıya ulaşırım.

Sistemetik yaklaşım: Apartmanın girişinden birinci kattaki evimin kapısı için ard arda gelen basamaklar bitinceye kadar çıkarım. Kapıya ulaşırım.

Sadece basamak durumlarını göz önüne alarak bu yaklaşımları bir robota yüklediğimizi varsayalım. Her iki robot da kapıya ulaşır. Peki başka bir apartmanda basamak sayısı değiştiğinde ilk robotun hali ne olur? Elbette değişen durumlara ayak uyduramaz. Yeniden program yüklenmesi gerekir. Bu iki apartmanda da doğru çalışması istense ne olur? Elbette her iki apartman için gerekli bilgilerin olduğu yeni bir program yüklenmelidir. Peki apartman sayısı 1000 adet ise? İşte ezberci yaklaşımın hayata uygulanmasındaki zorluklar. Fakat tüm durumlar için ikinci robot aynen çalışır. Değişiklik gerektirmez. Değişen durumlara daha iyi uyum sağlar. Kısaca esnek yaklaşımları vardır. Ezberci yaklaşım her özel durum için öğrendiği bilgiyi sadece o özel durumda kullanabilir. Diğer durumlarda o bilginin geçerliliği yoktur. Hamal tarafından taşınan ama kullanılmayan bir yük olur. Sistemetik yaklaşımda ise bire çok ilişkisi bulunur. Bir tane bilgi öğrenir ve bunu birden fazla yere uygular. (Az bilgi, çok iş.) İşte en karlı durum budur.

Soru soramayan insan...
Öğrenmekten öğrenmeye fark vardır. Bir kişi bilir ama onu kullanamaz. Bir kişi bilir ama onu kullanabilir. Çağımızda bilgiye ulaşmak zor değildir. Fakat her bilen onu hakkıyla kullanamaz. Bunu anlamak bilgiyi nasıl öğrendiğimizi anlamaktan geçer. Yeni bir bilgi karşınıza geldiğinde onun hakkında ne düşünürsünüz? Akılsız kafalar onu sadece alır, olay bitmiştir. Aslında başlamamıştır bile. Öncelikle kaynağa güven sorgulanmalı. Siz onu okuduğunuz kitaba veya size onu öğreten insana (öğretmeninize) nasıl güveniyorsunuz? Kaynak daima güvenilir değildir. Kaynağın güvenilirliğini sorgulamak yerine gelen bilgiyi sorgulamak gerekir. Hemen basit iki örnekle olayları ilerletelim.

Size öğretilmekte olan 1. bilgi: Asitler metalleri eritir. (Genelde)
Size öğretilmekte olan 2. bilgi: 1'den n'e kadar olan sayıların toplamı n*(n+1)/2 dir.

Bu bilgiler doğrudur fakat bunu daha önce hiç bilmediğinizi varsayıyoruz. İlk aşama önünüze konulana güvenmemekle başlar. Ben "Asitler metalleri eritir." cümlesinin doğruluğuna asla güvenmem, n*(n+1)/2 formülüne de. Güvenen insan da ezberleyip geçer. Biz de bunu öylece bırakacaksak yazık bize! Bir bak bakalım doğru mu? (Metod 1: Deneme/yanılma veya deney) Matematikte bu formüllere değerler koyularak işlemin sonucunun aynı çıkması ile anlaşılır. 1+2+3+4+5+6=6*(6+1)/2 Veya aynı sonuca birden fazla yolla eriştiğinizde yeni metodun da doğruluğuna güvenmeye başlarsınız. Eve gider ve tuzruhu ile aliminyum veya çinko parçalarını asite daldırarak değişimi gözleriz. Evet doğruymuş deriz. (Metod 2: Eski bilgilerle destekleme) Matematikte yeni öğrenilen formülü eski formüllerle ispatlayabilirsek buna eski bilgilerle destekleme denir. Burada ise asitlerin kimyasal yapısı ile burada bir kimyasal reaksiyon gerçekleşmiş olabileceği ve ürünlerin ilk girenlerden daha kararlı oldukları ortaya koyulabilir. (Metod 3:Gerçek hayattan destekleme) Bu bilgiyi gerçek hayatta görebiliyorsanız bu onu daima destekler. Bu konular daha çok biyoloji ve kimya ile ilgili olabilir. Gerçek hayatta da asitlerin metalleri yavaş yavaş erittiği doğrudur. Gıdalardaki asitlerin bazı metal kapları eritmesi gibi. (Metod 4:Soru sorma ) Buraya kadar olan metodlar bilginin sizde tutunmasını sağlar. Bir dayanak gösterebildiğiniz müddetçe doğruluğuna güvenirsiniz. Dördüncü metod ise en önemli aşamadır. Sorular çok farklı olabilir. İnsan önce soru sormayı öğrenmelidir. Örnek sorular:

Neden asitler metalleri eritir?
Eritme nasıl gerçekleşir?
Niçin metal erimektedir?
Eriyen metal nereye gider?
Bu işlemi durdurma yolları nelerdir?
Her metal işe yarar mı?
Her asit işe yarar mı?

Soru: n*(n+1)/2 formülü nasıl çıkarılmıştı?
Çözüm: İki sayılanın ortalaması şu şekilde hesaplanır: (sayı1+sayı2)/2 Yani formülümüzdeki (n+1)/2 ifadesi aslında en küçük ve en büyük sayının ortalamasıdır. 1 ile 6 sayıları gibi. Peki 2 ve 5 sayılarının ortalaması da aynı değil midir? Kısaca bu ikililerin ortalamaları hep aynıdır. Ortalama değer elimizdeki sayıları tek başına ifade edebilir. Ortalamayı sayı adedi ile çarparsak sayıların toplamını bulmuş oluruz. İşte böylece yöntemi öğrenmek yanında formülü ezberlemekten de kurtulmuş oluruz. Neden birşeyler ezberleyip de (ilerde unutacağımı bilerek) kendime yük edineyim?

Sorular sormak gerçek bir öğrenme sağlar. Artık o bilgi ile ilgili birçok ilişki göz önündedir. Bazen bu soruları öyle güzel sorarsınız ki onu bulan kadar deneyim sahibi olabilirsiniz. Asıl olan formül değil, ona temel teşkil eden diğer bilgiler ve bunu yoğurabilen kişidir. Eğer bir formülü siz bulmuşsanız onun kullanım alanlarını da en iyi siz bilebilirsiniz. Kişide bu son aşamayı geçen bilgi artık üretken olarak kullanılabilir haldedir.

(Metod 5: Bu işin daha kolay, daha kısa bir yolu var mı? ) Matemetikte bir problemin birden fazla çözüm yolu bulunur. Bazen adım adım gidilerek 5 aşamada çözülen problem farklı bir yaklaşım ile tek adımda çözülebilir. Bunu görebilmek için bazı yetkinlikler şarttır. İnsanın düşünce ufku, bakış açısı geniş olmalı. Size gösterilen hikayenin seyrine kapılmadan olayı gözlemleyebilmelisiniz. Olayın içine girmek yerine biraz uzaktan bakmak farklı şeyler görmeyi sağlayabilir.

(Metod 6: Bunu öğreniyorum ama bu ne işime yarar? ) İnsanoğlu öğrendiğinin artık ne işe yarayacağını da sorgulamalıdır. Geleceği görmek kimsenin yeteneği değil. Ama en azından bilginin kullanım alanını kestirmek mümkündür. O bilgi belki daha önce üzerinde kafa yorduğunuz bir problemi daha kolay çözebilecektir. Siz de kendi kendinize şunu diyebilirsiniz: İşte daha iyi bir çözüm. Farklı bir bakış açısı ise şunu sorgular: Bu bilgi gerçekten de faydalı mıdır? Dünyada bazı bilgiler de vardır ki kişiye sadece zaman kaybettirir, onu oyalamaya yarar. Bunlar boş bilgiler veya boş işler kümesidir. Kişiye maddi veya manevi bir yararı olmayan bilgi veya uğraş değersizdir. Örneğin her gün saatlerce bilgisayar başında oyun oynamak. İktisatçılar der ki: Sınırlı herşey değerlidir. Zamanımız sınırsız olmadığına göre bu değeri verdiğimizde karşılığında daha değerli birşeyi beklemeliyiz. Yoksa bu akılsızlık olur.

Bilgi tutundurma metodları...
Yukarıda bahsedilen sorular ve cevapları bilginin etrafına bir tür örümcek ağı örer. Ne kadar ilişki göz önüne gelirse o kadar karmaşık bir ağ oluşur. İşte bu ağ yeni bilgiyi destekler, ona tutunma yüzeyi sağlar. Ya hiçbir ilişki bulunamamışsa, elimizde hiçbir dayanak yoksa? Bilgi de elimizden uçup gitsin istemiyorsak? Son çözüm ezberin en iyi iki metodunu uygulamaktır. Metod 1: Önceki bilgilerimize benzetme, benzer yönler bulma yöntemi. Metod 2: Bilgiyi resme veya olaya dönüştürerek akıla tutma yöntemi. Burada şu beklentiler vardır: Bilgi bizde kalsın. Biz onu kullandıkça daha da iyi şekilde yerleşecektir.

Kalıplaşma...
İçi boş insan beyni sonsuz olasılıklar kümesidir. Kestirilemeyen keskin bir zekadır. Ne versen alır. Aynı bir karadelik gibi herşeyi kendine çeker. ( Bunu herşeyi soran küçük çocuklarda görebilirsiniz. ) Ya birşeyler öğrenmeye başladıkça ne olur? Kalıplaşma denilen durum ortaya çıkar. İnsan bir süre sonra öğrendikleri çerçevesinde düşünmeye başlar. Artık birşeyler biliyordur ama eskisi kadar geniş çerçevede düşünemiyordur. Artık olasılıklar azalmıştır. İşte bu insanı sabit düşünme yollarına iter. Böyle düşünen insan bazı şeyleri yakalayamaz. Ama o konuda daha az bilgi sahibi insan koşullanma içinde olmadığı için hala olayın farklı yönlerini görebilmektedir.

Merak...
Merak insanı öğrenmeye iten motivasyon parametrelerinden biridir. Kendinize bir soru sorarsınız ve yanıt alamazsınız. Peki cevabı merak ediyorsanız? Bu istek kendinizi yılmadan usanmadan saatlerce bir bilginin peşinde kitaplar ve kütüphaneler arasında zamanınızı geçirmenize yeter. Bir çalışmadaki amatör ruh da bu sebeple çok önemlidir. Merak insanın içinden gelen bir duygudur. Kimse size zorla birşeyi merak ettiremez. İnsanın karşılığında birşey beklemeden sadece kendi isteği ile birşeyleri araştırmak ve öğrenmek istemesi beraberinde daima başarıyı getirir. Bir düşünün zorla yapılan bir ödev mi daha öğretici olur yoksa o ödev kadar zorunu sadece kendi merakınızdan araştırıp sonuçlandırmanız mı? Bir konuyu derste öğrendiğinizde mi konuya daha çok ilgi duyarsınız yoksa ders dışında öğrenirken mi?

Deney...
Öğrenmenin yarısı teori yarısı ise deneydir. Bu kimya için laboratuar ortamına girerek teoride öğrendiklerini gerçek hayatta görmektir. Bir insan teoriyi çok iyi bilse dahi uygulamada daima önceden kestirilemeyen sorunlarla karşılaşır. Bunları da çözmenin insana katacakları büyüktür. Peki bilgisayar mühendisliğinde deney nedir? Artık bu öğrendiklerini uygulamaktır. C programlama dersinde for döngüsünü öğrenmekle yetinmeyip eve gidince for döngüsü ile ilgili bolca örnek yazmak, derlemek ve çalıştırmaktır. Acaba bunu şöyle de yapsak olur mu? Böyle yaparsam ne olur? gibi sorularla for döngüsünü anlamaya çalışmak, onu sindirmektir. Önceden kestiremeyeceğiniz noktalar için deneme-yanılma metodunu kullanmaktır. Amacımız for döngüsü ile ilgili aydınlatılmamış tek bir nokta dahi bırakmamaktır.

Öğrendiklerini kullanma...
Dedik ya biz mühendisler sadece kilit noktaları öğreniriz ve bunları önümüze çıkan her farklı probleme uygularız. Öğrendiklerimiz basit şeylerdir. Belki tek başına asla bir işe yaramayan bilgilerdir. Bazıları genellemelerden oluşur. Önümüze çıkan problem özel bir durumdur. Bu özel durumu analiz ettikten sonra o tek başına işe yaramayan bilgileri doğru şekilde bir araya getirerek çözüme ulaşırız. Bu lego oyununa benzer. Legoların her biri küçük ve basit parçalardır. Ama onları birleştirerek bir insanın neler yapabileceğiniz tahmin edemezsiniz. Öğrenilenler küçük, basit, tüm ilişkileri aydınlatılmış, tek başına fazla işe yaramayan bilgilerdir. Bizler onu tanır ve en doğru kullanım yeri ve zamanına karar veririz.

Öğretmek...
Öğrenmek 1 ise onu öğretmek 2 dir. Bir insan bir konuyu çok iyi bilebilir. Ama her iyi bilen bunu iyi bir şekilde anlatamaz. Örneğin bir dersten AA ile geçen herkes o dersi çok iyi bir şekilde bir bilmeyene aktarabilir mi? Peki böyle birşeyi hiç denediniz mi? Deneseydiniz şunu görürdünüz: Bir konuyu bir başkasına öğretmek o konuda bildiklerinizin bir bütünlük içinde olmasını gerektirir. Kendi içinde eksikleri veya çelişkileri olan bir konuyu bir başkasına anlatamazsınız. Çok zorluk çekersiniz. Böylece eksiğinizi görürsünüz. Öğrendiği bir bilgiyi bir başkasına öğretebilmekte başarılı olursanız o konuyu daha iyi öğrenmiş olursunuz.

Ödevlere yaklaşım...
Ben üniversitede almış olduğum proje ödevlerini asla bir ödev olarak görmemeye çalıştım. Çünkü ödevleri öğrenciler genelde üzerlerine yıkılmış bir külfet olarak görürler. Bu biraz psikolojik bir durum. Ben ise ödevi de bir araç olarak kullanmayı seçtim. Amaç ödevi yapıp bitirmek olsaydı ben yine az bir kazanç elde etmiş olurdum. Halbuki ben vaktimi ayırdığım işten en yüksek kazancı isterim. Ben bana verilen ödevi kolayca yapabiliyorsam bittiğinde kendime hiçbirşey katmamış olurum. Bunun da benim için bir anlamı olmaz. Ben de çıtayı daha önce hiç denemediğim bir seviyeye, olduğumdan biraz yükseğe ayarlarım. Bunu da hocanın istedikleri yanında o projeye içinde olsa güzel olur diyebileceğim yeni özellikler eklerim. Böylece bittiğinde kendime de birşeyler kazandırmış olacağım. Bu bir de neyi getirir biliyor musunuz? O öğrencilerdeki ödevleri sevmeme duygusunu gidedir. Kimse sevmediği işi yapmak istemez. Ben projeye istediğim özellikleri ekleyerek onu "hocanın verdiği ödev" olmaktan çıkarıp "kendi projem" haline getiririm. Böylece sevdiğim işi yaparım, başkasının verdiği işi değil. Bu da benim projeyi geliştirirken karşılaştığım zorlukları daha kolay aşmamı sağlar. Zevk alarak yaparım. Sonuç elbette ki başarıdır. Bu yöntem bile tek başına büyük bir motivasyon unsurudur. Yoksa kim bir başkasının istediği iş için günde 10 saatini bilgisayar başında geçirebilir ki? Hemen söyleyeyim: Kimse böyle bir işkenceye tahammül edemez.

Problemin analizi...
Karşınıza gelen bir problemi bilgisayar üzerinde çözmeniz istensin. Ne düşünürsünüz? Başkaları bunu nasıl yapar? Bence boşverin başkalarını, diğer insanlara ihtiyacınız yok. Kendi metodlarınızı geliştirin. En iyisi budur. Derler ya: Her yiğidin bir yoğurt yiyişi vardır. Kısaca her insan farklıdır, sonuçta her insan aynı probleme aynı bakmaz. 100 kişiden basit bir uygulamayı yazmalarını isteseniz elinize 1 adet uygulama değil 100 farklı uygulama geçer. İnsanın kendini tanıması da çok önemlidir. Derler ki: İki tip programcı vardır. Biri fonksiyonları ve ne işe yaradıklarını öğrenir sonra da programını yazar. Ama hazır olarak kullandığı o fonksiyonların ayrıntılarını, içerde dönen işleri merak etmez. Bu tip programcılar daha çok yüksek seviyeli dillerden başlamayı seçerler. Diğer bir programcı tipi daha vardır ki bunlar işin temelini öğrenmeden yüksek seviyeli dillere geçemezler. Kullandıkları fonksiyonların tüm ayrıntılarını hatta arkada ne işler yaptığını da merak eder, sorgulamadan içleri rahat etmez. Bu tip programcıların üretken olmaları diğer tipe göre daha fazla zaman alır. Yavaş yavaş yüksek seviyeli dillere doğru ilerlerler. Fakat bu tip programcılar işin temelini ve ayrıntılarını iyi bildikleri için diğer tip programcılara göre daha kaliteli uygulamalar ortaya koyabilirler.

Bir problemi bilgisayarda uygulamadan önce elbette ki öncelikle siz bunu çözmüş olmalısınız. Eğer uygulama çok basit ise ve tüm ilişkileri aynı anda aklınızda oturtabiliyorsanız bu sizin için çok kolay bir uygulamadır. Hemen bir programlama dilinde yazmaya başlarsınız. Ama çoğu problemde bu böyle olmaz. Problemi çözmeyi bırakın anlamak bile zor olabilir. Problemi iyice okuyun. Anlamadıysanız yine okuyun. Açıkta kaldığını düşündüğünüz noktalar için sorular sorun ve yanıtları edinin. (Problemi size anlatan kişi bazı noktaları zaten bildiğinizi sanmış olabilir.) Problemi anladıktan sonra onu çözmek için yeterli teknik bilgiye sahip olup olmadığınızı sorgulayın. Örneğin konu matematiksel işlemler gerektiriyorsa problemi çözecek kadar matematik öğrenin. Bilgiler de tamam ise bir kalem ve boş birkaç A4 kağıt edinin. (Mümkünse çizgisiz olsun) Problemi aklınızda düşündüğünüz gibi adım adım kağıda dökün. Böylece probleme dair tüm ilişkiler gözünüzün önünde olur. Daha sonra yine kağıt üzerinde o problemi çözün. Çözüm de göz önünde olsun. Öncelikle çözüm için çok temel bir akış diyağramı oluşturabilirsiniz. Bu diyagramda çok yüksek seviyeli adımlar olabilir. (Bu veritabanında, şunun transpozesini al, mesajları izle, şu olay olduğunda bunları kaydet ... gibi) Bu yüksek seviyeli adımlar insan için anlaşılır fakat genelde bilgisayar ve programlama dili için anlaşılır olmaktan uzaktır. Bunları da ayrı bir yerde daha basit adımlara indirgeyin. Ta ki gördüğünüz bir adımı kağıda tekrar bakma ihtiyacı olmadan bilgisayarda yazabileceğiniz kadar küçük bir adım olsun. İşte bu aşamadan sonra bilgisayar başına geçip istenilen bir programlama dili ile programı geliştirmeye başlarız.

Bilgisayar için uzay kavramı...
Hepimiz biliyoruz ki bilgisayar aptal bir cihazdır. Teknik deyimi ile de bilgisayar = Donanım + Yazılım'dan ibarettir. Donanım elle tutulabilen, var olduğunu bildiğiniz her parçasıdır. Örneğin yaşlı bir teyzenin televizyon zannettiği monitör bunlardan biridir. Yazılım ise işte bu olayın kilit noktasıdır. Ne kadar güçlü bilgisayarlar yaparsanız yapın onların içinde yazılımlar olmadan, yani onlara yazılım geliştirecek yazılım mühendisleri olmadan, yani insanlar olmadan o bilgisayar hiçbir işe yaramaz. Bilgisayar boolean matematiği üzerine kurulu olduğu için insana basit gelen işler bilgisayar için çok karmaşık olabilir. Bilgisayar neyi bilir? Neyi bilmez? Bunu öğrenmeliyiz. Aklınızın bir köşesinde boş bir uzay oluşturun. Programlama dilini öğrenirken bu uzayın içine öğrendiğiniz her fonksiyonu atın. Biz bilgisayara program yazarken aslında onun dilinden konuşuruz. İşte bu uzay içindeki fonksiyonlar onun dilidir. Bu uzay dışındaki hiçbir şeyi bilgisayar anlamaz. Bu bizim arada bir çevirici rolü üstlenmemizi zorunlu kılar. (Örneğin bir sayıyı 5 ile çarpacaksınız fakat bilgisayarda çarpma fonksiyonu yok. Ne yaparsınız? Toplamayı biliyordur, siz de toplama işlemleri ile çarpma sonucunu bulursunuz.) İnsanın anladığı şeyleri basitleştirip bilgisayarın uzayı içindeki fonksiyonlarla onu anlatmaya çalışmak. İşte yazılım geliştirenleri tüm uğraşı budur.

Algoritmada kalite...
Algoritma nedir? Bu kelimenin tanımını google'da aratıp bulmak kolaydır. Kısaca şuna dikkatinizi çekmek isterim. Ben evimden çıkıp dolmuşlara ulaşıncaya kadar istediğim her yoldan gidebilirim. Ama insan en kısa yoldan gitmek ister. Biz de problemi bilgisayarda en kısa yoldan çözmek isteriz. Bu matematikte bir problemin çözümünün birden fazla olması durumu gibidir. İşinize en uygun olan yolu seçersiniz. Bir kişi program yazarken onun üzerinde farklı istekleri olabilir: Çalışsın ama az yer kaplasın veya az bellek kullansın veya hızlı olsun. Sizin yönteminiz ne kadar iyi ise bilgisayarın çıktıları da o kadar iyi olur. İşte burada olduğu gibi daima bilgisayarlar biz insanlara bağımlı olacaklar.

Yapanlar ve yıkanlar...
Bir kemiğin durumunu bilir misiniz? Onun içinde bazı hücreler onu devamlı kemirir başka hücreler ise onu devamlı yaparlar. Bu devamlı bir denge içinde böyle sürer gider. Siz de bir problemin çözümüne yönelik bir algoritma ortaya koyarsanız aklınızdaki olayları iki bölümde gruplayın. Yapanlar ve yıkanlar. Yapanlar algoritmayı bina etsin. Yıkanlar ise acımasızca yapılan binayı eleştirsin. Kısaca olay şudur: Kendi eksiklerinizi görerek daha güzel ürünler ortaya koyun. Hatayı başkasının görmesini beklemeyin. Onu eleştiren de siz olun, kanıtlayan da. Böylece algoritmadaki hatalarınızı siz ayıklamış olursunuz. Elbette bu iki durumu aynı anda düşünmek zaman isteyebilir...

Mesleğini sevmek...
Mesleğini sevmeyen bir insan çuvalla para kazansa dahi mutlu olamaz. Mutlu olamayan insan için ise paranın bir önemi yoktur. Eğer hayatta mutluluğu ve başarıyı diliyorsanız daima sevdiğiniz işi yapın. İşte başarı öncelikle sevmekle başlar. Kimse istemeyerek yaptığı işte başarılı olamaz. Kimse istemeyerek geldiği derste birşey öğrenemez. Kişinin içindeki isteksizlik tüm yolları kuşatmıştır, artık aynı yeri on defa da tekrar etseniz sonuç aynıdır. Bu bir iç dirençtir.

Peki bir işe karşı ne sevmek ne de sevmemek söz konusu ise, idare ediyorsak ne olur? O zaman da hiçbir zaman en iyi olamazsınız. Çünkü işini gerçekten seven insan gecesini gündüzüne katar yine çalışır. Ama bu motivasyonu başkaları gösteremez. Bu sebeple işinde en iyiler genelde işini çok sevenlerden çıkar.

Hayattan beklentiler...
Hayattan neyi beklersiniz? Herşeyi mi? Peki herşeyi bekleyen ama beklentilerinin karşılığını alamayan insanın hali ne olur? Siz de aynı duruma düşmemek için makul beklentiler içerisinde olun. Bu konuda tek bir duruma değineceğim. Her yıl bilgisayar mühendisliği bölümüne 50 öğrenci alınıyor. Bunların çoğu da bölümü kazandım, büyük şeyler öğreneceğim beklentisi içindedirler. Bir bilgisayar mühendisliği bölümü size programlama dillerini çok iyi şekilde öğretmek için çabalamaz. Burası bilgisayar programcılığı bölümü değil! Burada size asla her konunun son noktası gösterilmez. Onu ilerletecek olan sizlersiniz. Bilgisayar mühendisliği size asla bir ürüne yönelik ders vermez. (Visual Studio, Borland...) Daima genel konular ve bazı temeller verilmeye çalışılır. Burası üniversite, burada size şunu yazın denmez, isteyen not tutar isteyen tutmaz. Artık bunları kendiniz ayarlayabilecek durumda olmalısınız. Son nokta ise şu: Bilgisayar mühendisliği sizi asla dışardaki iş hayatına hazırlamaz, bunu yönelimlerinizle siz yapacaksınız.

Çalışkan ve ısrarcı olmak...
Bir işe yeni başlayan insan (örneğin yeni bir programlama dilini öğrenen) ilk başlarda birçok problemle karşılaşacaktır. Bu doğaldır. Herkes aynı yollardan geçmiştir. Kişide konudan soğuma oluyorsa ondaki motivasyon eksikliğine, işi sevmemesine, sabırlı veya çalışkan olmamasına bağlayabiliriz. Asla bir insan çalışmadan, üzerinde çaba sarfetmeden bir hedefe ulaşacağını sanmamalıdır. Yoksa hayatı bir hayalin peşinde geçer. Bir insanın kolay kazandığı yine kolay olarak elinden uçup gider. Bir işin kolay olması önceden onun temelini iyi yapmış olmakla veya deneyimli olmakla olur. Bir kişi bir işi sizden daha kısa sürede ve daha iyi olarak bitirebiliyorsa bunu kendinize üzüntü vesilesi yapmamalısınız. Siz de geçmişte onun kadar çalışmış olsaydınız belki ondan daha iyilerini yapacaktınız. Asla tembel ve kolay yoldan başarıyı istemeyin. Bu sonunda size üzüntüden başkasını vermez. Bir işi çok iyi bilen de kendini asla rahat içinde görmesin. Çünkü esas olan yerinde saymak değildir!

Kendine güven...
Bir konuda başka insanların başarıları kendinizde güvensizlik telkin ediyor mu? Yoksa başkaları size sizin o işin üstesinden gelemeyeceğinizi mi söylüyor? Kimseye aldırmayın! Başarıyordur çünkü çalışmıştır. Siz de başarabilirsiniz fakat çalışarak. Yanında kendinizi küçümsediğiniz kişi de bir insandır, siz de. Öyleyse nedir bu tembellik? İsterseniz size şöyle bir hikaye anlatayım: Bir boks maçında iki kişi karşılaşacaklar. Biri çok deneyimli ve güçlü. Güçlü olana gelinir ve rakibi o kadar çok övülür ki o da karşılaşmadan çekilir. Halbuki karşısındaki adamın ilk maçıdır. Peki bana söyler misiniz, maçı nasıl kazanmıştır? Hakkıyla mı? İşte en büyük yenilgi budur. Kendisi güçlü olduğu halde onu kolunu bile kaldıramayacağına inandırmaktır. Siz de kendinize güvenmezseniz sonunuz işte böyle acı olur. Artık üstünüzden bunu atın.

En yüksek kar...
Daha önce dedik ya bir işten en yüksek karı hedeflemek gerekir. İşte dünyada elde edilebilecek en yüksek kar şöyle olur: Bir işi yaparsınız (yardım etmek, öğretmek, ürün ortaya koymak...) ama bunun için kimseden bir istekte bulunmazsınız. Bir beklentiniz olmaz... ... ...



İlk yayın tarihi : 29.10.2006
Bu dökümanın orjinal adresi http://www.enginkuzu.org/bilgi-ogrenme-algoritma.php dir.