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.