Yazılım aşağı, yazılım yukarı... İyi güzel de neyin nesidir, ne mene bir şey bu yazılım dedikleri? Şaka bir yana bazen "Yazılım öğrenmek istiyorum ama nereden başlayacağımı bilemiyorum" diye hem birebir tartışmalara şahit oluyorum, hem bunun hakkında yazılanlara rastlıyorum. Bu yüzden, ben de konuya dilim döndüğünce açıklık getirmek istedim. "Nedir bu yazılım dedikleri" sorusu ilk kafanızda dönmeye başladığında muhakkak Google'a programlama yazmışsınızdır ki şu an o kendisi 'öğrenmek istiyorum' diye tamamlıyor. Bunu geçmişte ben de yazmıştım ama yazıp yazacağıma pişman olmuştum. Velhasıl pek iç açıcı sonuçlara ulaşamamıştım. Şimdi bakıyorum, halen daha durum pek farklı sayılmaz. Çıkan sonuçlara şöyle bir göz atıyorumda... Özellikle forumlar vb. yerlerde verilen cevapların içinde C# öğren, bir kısmı PHP, bir kısmı ASP.NET öğren (hele bu ikisinin apayrı kavramlar olduğunu bilmeden hangisi iyidir gibi amatör bir tartışmaya giren konular tam felaket) gibi cevaplar var. Bir taraftan Javacılar saldırır, "C# öğrenip n'apacaksın Java öğren" diye.smiley Gereksiz fanatizmle bunu söylerken göz ardı ettikleri şey her 2 dilin neredeyse tüm metodolojilerinin çok benzer olduğudur. Yani eğer Java öğrenmeye karar verdiyseniz sakın kararınızı değiştirmeyin. Çünkü grafiklere bakıldığında C++, C# ve Java piyasada ezici üstünlüğe sahiptir. Gerçi bu durum özellikle bizim gibi ülkelerdeki "çokluk" ile ilgili güzide bir atasözümüzü akla getirmiyor değil ama siz de yaptığınız işin ehli olarak o çokluktan sıyrılmayı bilmelisiniz. Yine cevapların içinde çok değil daha 2012'de yazılmış " Pascal öğren" gibi cevaplar bile gördüm ki vah halimize diyorum. İstemesem de girmek zorunda kalıyorum Pascal, Basic, Fortran gibi bazı diller, Yapısal Programlama temelli Yüksek Seviye dillerdir, zamanında küçük çaplı projelerde iş görmüş olabilirler. Her ne kadar nesne yönelimli programlamaya uyarlanmaya çalışılsalar da günümüzde sıfırdan öğreneyim demek için bu diller bence gereksiz eziyetten başka bir şey değildir. Yalnız aynı şekilde yıllarca bir dil üzerinde tecrübe edinmiş birine C# kullanmalısın diye dayatmak da tabi doğru değildir.

Günümüzün geçerli dillerinden birini ele alırsak; örneğin C# öğrenirken introduction bitip nesne yönelimli programlamaya gelene kadar da zaten bu diller ile öğreneceğiniz birçok bilgiyi edinirsiniz ki zaten bu dil de eskiden geçerliliği sayılan birçok dilin kullanışlı özelliklerini bünyesinde barındırdığı ve önceki dillerde bulunmayan esnekliği programcıya sağladığı için bu kadar rağbet görmektedir. Bundan birkaç sene öncesi ile günümüzdeki donanım özellikleri karşılaştırıldığında, C# bütün projeyi programlamak için neredeyse eksiksizdir. Ancak özellikle platforma özel donanım özelliklerinden dolayı halen özellikle C++ tercih edilen projeler de vardır. Fakat bu fark; yazılım öğrenmeye yeni başlayacak biri için henüz fazlasıyla ayrıntı olduğundan bundan burada örneklerle bahsetmem çok boğucu olacaktır. Ancak başka bir açıdan örnek olması için; çoğu bankada yıllar önce COBOL ile yazılmış koca bir sistemi baştan aşağı kayıpsız değiştirmek neredeyse imkansız olduğu için eskiden yazılmış çoğu bankacılık operasyonu halen bu dil ile yürütülmektedir.

Programlama dilleri soyağacı
Programlama Dilleri Soyağacı - Etkileşim içindeki diller

Yalnız öncesindeki birkaç dilde daha yer almasına rağmen, asıl C++ ile Bjarne Stroustrup tarafından öne çıkarılan nesne yönelim özelliği vardır ki neredeyse her kod yazdığımda programlamada çığır açtığını düşünürüm. Haliyle bu yapı C#'ın olmazsa olmazıdır. Öyle ya da böyle bu yazılımcılar da sizler gibi etten kemikten insanlar. Ancak içlerinde birkaçı yaptığı işi tabiri caizse "kitabını yazacak" hale geldiğinde sistemin bütününde bir eksiklik olduğunu ve ihtiyaç haline gelen işin daha da kolaylaştırılabileceğini fark eder ve kendi 'teknoloji'sini üretir.

Burada teknoloji ile dili ayırmak lazım. Bir balta bile insanoğlunun işini kolaylaştırdığı için sonuçta teknoloji olarak kabul görür. Bir teknoloji olmadan da yapacağınız işi yine yaparsınız yalnız aradaki zaman ve iş gücü kaybı su götürmez bir gerçektir. Bu teknolojileri kullanmadan yazacağınız 10.000 satırlık kodu, abartısız 100 satıra dahi düşürebilecek teknolojiler vardır. Onlar olmadan da olur mu olur, ama 6 ayda bitecek gibi gözüken bir işi 3 ayda bitirdiğinizde asıl kıymeti anlaşılır. Aslında arka planda o kod, saçma bir şekilde yazılmış, gereksiz işinizi zorlaştıracak 10.000 satırın yaptığı işi çok daha verimli bir şekilde yapacaktır ama siz yazacağınız 100 satır ile işinizi bitirirsiniz. Bu kimi zaman "Vay be bunu ben nasıl düşünemedim dediğiniz" küçücük bir fonksiyon olur -bunları daha sonra namespace dediğimiz yapılarda toplayarak kütüphane adını verdiğimiz dll dosyalarına çevirir- kimi zaman ORM gibi tamamen yenilikçi bir yapı olur. Ancak bu bazen insanı garip bir ikileme sokuyor. Bahsi geçen bu kadar satır kalkmış oluyor ama yaptığı iş aslında benzer ve mutlaka yapılan işte araya girme ihtiyacı doğuyor. Bunu sizin yerinize başkaları bir nevi "otomatikleştirdiği" için, öğrenmeniz gereken bazı şeyleri es geçmiş sayılıyorsunuz, fakat bunların sonradan önünüze çıkma ihtimali oluyor. Onun için sürekli yeni şeyler öğrenerek kendini geliştirmenin ötesinde, bunun ayrımını zamanla yapabilmek bence çok daha önemli.

Microsoft da, bahsetmeye çalıştığım senelerin getirdiği bu tecrübesi ile yapılan işleri muazzam bir kütüphanede toplayarak .NET çatısı altında toplamış, başında Anders Hejlsberg'un bulunduğu bir ekiple esneklik ve özgürlükler eklediği bir dile entegre ederek adına C# demiştir. Microsoft'un windows işletim sistemi ile dünyanın büyük çoğunluğundaki bilgisayarı elinde bulundurduğunu düşünürsek bu kütüphane dünyadaki hemen her bilgisayarda zaten vardır. Tabi bu söylemim için gömülü sistemler vb. bu ekosistemin dışında tutulmalıdır. Diğer dillerden aldığı bu mirastan ötürü kimileri C#'ı yeni bir programlama dili olarak kabul etmezken, kimileri de tamamen sıfırdan yazılmış bir dil olarak düşünürler. Nesne yönelimli programlamanın ilk temelleri, bundan 50 sene kadar önce Simula programlama dili ile Ole-Johan Dahl ve Kristen Nygaard adlı iki adam sayesinde atılmıştır. Fakat işin aslı nesne yönelim şu an böyle tek bir makalenin bir köşesine sığmayacak kadar geniş bir kavram, kıymeti bilinmesi gereken apayrı bir yaklaşımdır.

Programlama Dili

Yukarıda google'ın bize döndürdüğü soruya bakılsa aslında cevap gün gibi ortadadır ama boş yere tartışmalar devam etmektedir. Zaten sorunun içinde "dil" diye bir ibare yok ki olsa bile bunun bir cevabı olamaz. Hangisinin daha esnek olduğu tartışılabilir fakat bu aşamada hangi dil diye bir soru olmaz, her dilin kendince kolaylıkları ve zorlukları vardır. Ayrıca derleme(compile) süreci sonunda hepsi bir şekilde makine koduna dönmek zorundadır. Eğer başta doğru programlamanın kriterlerini öğrenmeye çalışarak başlarsanız, böyle bir soruyu sormamanız gerektiğini zaten anlarsınız.

Kısacası bu işi gerçek manasıyla öğrenmek isterseniz, etraftan duyduğunuz "3 ayda sişarpı komple öğrendim, javayı yedim yuttum, sen kod yazmaya hele bir başla oradan sonra yardırır gidersin" benzeri söylemler sizi uçuruma sürükler. Bu söylemlerin %90'ı, örneğin .NET yapısını kulaktan dolma duymuş ve .NET'in bize sağladığı kolaylıklara atıfta bulunarak "n'olacak ki artık herkes programlama yapabilir" algısından öte gidememiş hayal mahsulü söylemlerdir. "Üç günde site yapılır, 50 liraya istediğiniz yazılımı yaparım" tarzı komedileri hiç saymıyorum bile. Acıdır ki ülkemizde sırf yazılım benzeri sektörler değil, her sektörde olduğu gibi böyle komediler bile ciddiye alınmaktadır. Hatta daha ileri gideyim, programlamanın ne olduğunu bilmeden alacağınız o bildik "C# ile programlama, Java ile programlama" vb. kitapların hemen hepsi direk dile giriş yapar ve siz bilmediğiniz kavramlar içinde bocalar durursunuz. Doğru şekilde öğrenmek istediğinizde ayrıntılara inme ihtiyacı hissettiğiniz yerler gelir, ama bu bilmediğiniz kavramlar bir türlü o ayrıntılara inmenize izin vermez. Sonuçta boşuna zaman ve emek harcamış olursunuz ki bir programcının en büyük sermayesi aslında bu ikisidir. Yani bu ikisinin doğru şekilde harcanması size nakit olarak dönecektir ya da dönmelidir, ah güzel ülkem(!) deyip şimdi başka bir yaraya parmak basmayayım. smiley Ha bu şekilde bodoslama da olsa öğrenilmez mi, tabi öğrenilir ama şuna emin olun öğrendiğinizin adı programlama ya da dili değil, çocuk yaşta ezberlenen şiirlerin bir benzeridir. Programlama dilini geçtim, bir konuşma dilini öğrenmek için bile; dilbilgisinde genel kabul görmüş özne, yüklem, tümleç gibi cümleyi oluşturan öğeleri anlamalı, ardından nerede sıfat, nerede zamir olur gibi ayrıntılara girmelisiniz. Programlamada da bu böyle olmalıdır.

Çocuk deyince şu an birden şöyle bir örnek geldi aklıma; mesela bir bebeği düşünün. Bildik agular falan dışında, anne baba arasındaki tatlı çekişme sonrası muhtemelen söylemeye çalıştığı ilk kelime anne ya da baba olacaktır. smiley "Anne" kelimesinin etimolojisini bilmesine ya da anlamını kavramasına gerek olmadan bir ihtiyacı olduğunda anne demesi yeterli olduğunu sadece bilir. Bebeğimizin büyüyerek 3-4 yaşlarına geldiğini, artık onun için lüks sayılabilecek isteklerinin karşılanmadığını düşünün. Bazı isteklerinin yerine getirilmeyeceğini anladığı o ilk an; hayata küstüğü o ilk an. smiley Bu şekilde anne ya da baba için beyninde yeni anlamlar yüklemeye başlar. Her ne kadar yetişkin bir insanın bile bizim için saçma gelen bir düşüncesine "düşünmeden konuşmak" deyimini kullansak dahi, maalesef saçma da olsa bir düşüncenin örneği olduğu ortadadır. Artık anadilini öğrenerek açıklayıcı bir kompozisyon yazmaya başlaması bir bebeğin yaklaşık 10-15 yılını alır. Bebeğimiz büyüyerek 5-6 yaşlarında bir çocuk olup tam anlamıyla konuşmaya başladığında ise artık taklit ettiği kelimelerin yerini, anlamlandırıp birleştirdiği kelimeleri cümle denen kalıba getirmeyi öğrenmiştir. Yani konuşmanın öncesinde düşünmesi gerektiğini beyni zamanla öğrenmiştir ki bu mekanizma artık neredeyse motor beceri haline gelmiştir. Beynimiz, en kaba tabirle zorlanmadıkça vücudumuzdaki diğer kaslar gibi hantallaşır. Çocuk kelime haznesi veya dilbilgisini geliştirmezse öylece yerinde sayacaktır. Bu benzetmemi şöyle düşünün; biz öğrendiğimiz dil ile sadece "konuşmayacak", onu doğru bir şekilde kullanarak sayfalar dolusu metinleri de bir ansiklopedik bilgi gibi doğru yazmak zorunda kalacağız. Kısaca 'düşünmeden konuşmak' istiyorsanız bodoslama programlama diline dalabilirsiniz.

Albert Einstein
Belki Albert Einstein kelimeleri daha çocuk yaşta fazlasıyla anlamlandırmaya çalışmış; bu sebeple 4 yaşından önce konuşamadığı için ailesi tarafından geri zekalı sanılmıştır. smiley

Bir örnek daha vermek istiyorum. B sınıfı bir sürücü belgeniz var diyelim. Sürücü belgesinde isim vb. bildik şeyler dışında "Kullandığı cihaz ve protezler" bölümü bulunur. Ama "Kullanabileceği marka" diye bir ibare olmaz. Bir marka aracı kullanabiliyorsanız, hepsini kullanabilme beceriniz zaten vardır... Kullanım esnasında küçük farklılıklarını öğrenirsiniz. Ayrıca kursta ve ehliyet sınavında motorla ilgili sorular da olduğunu bilirsiniz. Mesela kontağı çevirdiniz 'tık yok'. Gidip ne bileyim endüksiyon bobinine, bujilere falan bakmazsınız değil mi? Önce akünüzden başlar, marş motoru falan öyle gider kontrol edersiniz. Her ne kadar ehliyet için bunun ne kadar gerekli olduğu tartışılabilir olsa da biz programcılar için bunun tartışılacak bir yanı yoktur. Biz motoru da en az aracı sürecek kadar bilmek zorundayız. Kodu yazdınız, derlediniz bir hata gözükmüyor ama çalışma zamanında(runtime) kodunuz patladı, işte o zaman kaputu açmak zorundasınız. Paşa paşa o kaput açılır, koda satır satır hata ayıklama(debugging) yapılır.

Algoritmanın önemi

Kafanızda "Programlama bu kadar zor değil, sen bizim kafamızı neden karıştırıyorsun" gibi bir algı oluşuyor ise sayfayı direk kapatabilir programlama diye bildiğiniz şeyi öğrenmeye devam edebilirsiniz. Zaten ben de bu iş zor demiyorum. Aksine ne kadar basit düşünürseniz o kadar kolay öğrenirsiniz. Yalnız basit düşünceden kastım, işin özünden bunu uygulayıp hiçbir yeri kaçırmadan anlarsanız ne ala! Tersi durumda, öğrenmeniz gereken bir konu, önceki başka bir konu ile bağlantılı ve siz onu bilmiyorsanız istediğiniz kadar basit düşünün içinden çıkamazsınız. 3 günde öğrenebileceğiniz bir şeyi 3 ayda öğrenir ya da öğrendiğinizi sanırsınız. Şunu da söyleyeyim, bunlar benim kişisel düşüncelerim ve kesinlikle bu böyle olmalıdır diye bir iddiam yok. Üstüne üstlük programlama geçmişim de uzun değil.

Bu işi layıkıyla yapan her programcı, doğru programlamanın iyi bir algoritmadan geçtiğini zaten kabul edecektir. Benim de asıl amacım algoritmanın önemini vurgulamak, onun da önemini kavramak için biraz mantık bilgisi gerektiğini düşünüyorum. Yazılım dediğimiz kavramın bence bir ucu mantıktır. Yazılım mantık bitmeden çok önce, işte öyle aralarda bir yerlerde son bulur. Diğer ucunu tam olarak bulabilmek içinse, bence adına Albert Einstein dedikleri insan ötesi bir öngörüye sahip olmanız gereklidir. Yalnız dikkat edin, bunu tabi yazılım için söylemiyorum. Bu söylemim mantık için. İnsan beyninin kendine has "özel yazılımı" hariç, bildiğimiz yazılım sıkışıldığı yerde yeni çözümler üretilerek ilerleyen, görece sınırlı bir teknolojidir.

Neden mantık üzerinde bu kadar durduğuma gelelim. Aslında gerçek müslüman alimlerin islamın altın çağını yaşattığı devirden kalma bu Arapça söz, yine Arapça konuşma anlamına gelen nutuk sözcüğünden türemiştir. Batı dillerine ise; akıl, düşünmek gibi anlamlara gelen Grekçe logos sözcüğünden geçmiştir. Felsefe "güzel" düşünülmesi gerektiğini anlatırken, mantık "neyi, nasıl" düşünülmesi gerektiğini nicel bir şekilde ele alır bence. Şahsen, insanlığın en eski bilim dalı olduğunu ve şu an kabul gören çeşitlerine sığdırılamayacak kadar çeşidi olduğunu düşünürüm. Mantık üzerinden biraz daha içlere doğru gidersek, şahsen pek tutarlı bulmasam da son yıllarda epey bahsi geçen doğrusal olmayan karmaşık sistemler ve bulanık mantık dışında kalan bir önermenin doğru kabul edilebilmesi için; özdeşlik, çelişmezlik ve doğru-yanlış durumlarından başka bir duruma ihtimal vermemesi gerekir ki bunu anlatmaya kalkarsam işte o zaman gereksiz yere ayrıntılarla boğuşmuş oluruz. Ama günümüzün modern bilimi dahi halen buna benzer bir model üzerinden vücut bulur. Yalnız bizler ne bilim insanı ne de filozof olmadığımıza göre kimseyi gereksiz ayrıntılarla boğmak niyetinde değilim. Bunlar benim şahsen, yüzyıllar önce nasıl sınanıp bulunduğuna dair merak duyduğum konular. Mantık bahsini birazdan bağlayarak daha fazla ayrıntıya girmeyeceğim.

Biz de yazılım dillerinde programlama yaparken bu mantık üzerine kurulan, bilgisayar denen alete doğru-yanlış ve çelişmeyen önermelerimizi bildiririz. Eğer makineye verdiğimiz önermede çelişki durumu varsa işte o zaman asıl macera başlar. Bilgisayar makinesi, çoğumuzun da bildiği gibi aslında düşünme yeteneğinden yoksun bir cihazdır. İster yapay zeka, ister deep learning, isterseniz "Kasparov yenildi ya işte daha ne!" deyin eğer siz ona ne yapması gerektiğini söylemezseniz öylece vereceğiniz emri bekleyecektir. Bunu mantığın en basit haliyle açıklamaya çalışırsak; kodlayarak verdiğiniz önermede eğer sizin düşünemediğiniz ( Bunu bilgisayar makinesine bıraktığınız(!) ) ihtimaller açık kalmışsa önermeniz bir yerde mutlaka çelişkili olmuş demektir. Bu devrede imdadımıza algoritma yetişir.

Programcılığın en basit konusu olan karar yapılarından if-else yapısını ele alalım. Siz bir if-else bloğu yazarken 2 durumu karşılaştırırsınız. Eğer bunun dışında, "Bu doğru olabilir, eğer bu seçenek doğru değilse bir yere kaçma aşağıdaki seçeneğe atla, hiçbiri değilse zaten yanlıştır" diyeceğimiz zaman ise if-else if bloklarından oluşur yapımız. İşte bu yapıyı öğrenirken aslında yazılım diye bizlere öğretilen ama yüzyıllar öncesinde bulunan mantık biliminin özünü öğrenirsiniz ve o da bizi, bir kolu olduğunu düşündüğüm algoritmaya götürür. Eğer buraya kadar okudunuzsa, aslında çok zorda kalmadıkça kafa karıştırıcı teknik açıklamalar kullanmaktan kaçındığıma özellikle dikkat ettiğimi söyleyeyim. Haliyle algoritmayı da zaten bilimsel terimleri ile binlerce kaynaktan bulabilirsiniz onun için burada tanımından bahsetmeyeceğim ama şunu özellikle belirtmek istiyorum. İlk defa duysanız bile aslında algoritmanın ne olduğunu biliyorsunuz. Çok ciddiyim, şu an bu yazıyı okurken dahi "algoritma motorunuz" zaten çalışıyor. Bu kısma gelene kadar açıkladıklarıma belki hak verdiniz, belki saçma buldunuz. İşte bunun kararını size verdiren, yazıyı okurken beyninizin size milisaniyeler içinde verdirdiği kararların bütününe algoritma diyoruz.

Her gün içinde olduğumuz bir örnek vereceğim: Trafik ışıkları. Motorlu araçların ilk çıkış yıllarındaki düşük hızları düşünün. Trafik diye bir şey yok. Oh mis gibi bir dünya! Birkaç yıl sonra biraz hızlandığımızı ve araçların bir şekilde kontrol edilmesi gerektiğini düşünün. Bu algoritmadaki problemdir. Ortada araçları belli noktalarda durdurma ihtiyacı oluştu ve bu da bir problem tanımı. O yıllarda çeşitli yöntemler düşünülmüş olmalı ve bunlar da algoritmadaki çözümdür. Çözüme birçok yoldan ulaşılabilir. Ama ortak akıl ve zeka bunların içinde en doğrusunu filtreleyip sunmamıza yardımcı olur. Biz şu anlık en basit çözümü ele alalım. Çözümüzde; kırmızı dur, yeşil geç demek olsun. Çözüm yollarını görsele dökmeye akış şeması, bu şemada belirtilen, araç hızı-yaya hızı, ortalama hava şartları gibi öğelere girdi-çıktı birimleri denir. Örneğimiz üzerinden devam edersek; aracın hangi şartlar ve hangi girdi-çıktılar ile hangi mesafede duracağı matematiksel olarak hesaplanır. Buna çözümü deneme diyoruz. Bu esnada kurulan algoritmanın doğruluğu da bir yandan denenmiş olur. Gereksiz tekrar edilen ya da eksik bloklar varsa bunlar düzeltilir. Ardından araçların azami hızının daha da yükseleceğini düşünerek, şoförün yavaşlamasını kolaylaştırmak adına bir de sarı ışık ekleyelim. İşte çözümü geliştirme. Algoritmanın doğruluğundan emin olunduğunda da akış şeması üzerinden gidilebilir ya da bu şema sözde koda (pseudo kod) dökülebilir.

Akış Şeması Örneği
Akış Şeması Örneği

"Hangi dili kullanayım?" sorusu bu aşamada sorulabilir mesela. Elinize psuedo kod geldiyse yaşadınız. smiley Bu aşamada yapacağınız, bir çevirmenin yabancı bir metni çevirmesi gibi oturup elinizdeki sözde kodu seçtiğiniz dile dökmek olacaktır. Bu arada hadi sözde kodu da geçtim, eğer küçük bir problemde bile bir çözümü mantıklı bir şekilde kağıda dökemiyorsanız hiç dil öğrenmeye uğraşmayın. Algoritmanızı geliştirmelisiniz. Bu da çok fazla tekrarla olur. Kağıda dökebiliyorsanız kodlamayı bir şekilde zaten yaparsınız. Benim burada verdiğim en basit algoritma örneği, tabi çok çeşitli gelişmiş algoritma modelleri var. Ha 'sen bu anlattıklarını ne kadar uyguluyorsun' derseniz tabi küçücük bir masaüstü uygulamasında bile bunu yapın demiyorum. Programlamaya başlandığında yazılabilecek en sade uygulamalardan birini, hesap makinesini ele alalım. İlk defa bir hesap makinesi yazacaksanız bunu kağıda dökün, o zaman demek istediğimi daha iyi anlayacaksınız ve emin olun 10 kişi çıkarsak her biri ayrı şekilde dökecektir bunu kağıda. Bunların doğrusu ya da yanlışı olmaz çünkü yapacağı iş belli. Ama kimi tek bir blokta bütün 4 işlemi yaptırırken, bir diğeri her işlem için ayrı bloklar tanımlayabilir. Biri hesabı hafıza alma gibi ek özellikler koyarken bir diğeri hiç koymayabilir. Birisi işlemleri küsuratlı hesaplatırken diğeri hesaplatmayabilir. Sonuçta bu yanlış değil ama bu ufacık uygulama için bile büyük eksiktir. Bu küçücük eksik bile ısrarla tekrar edilirse muhasebe vb. hesaplamaların yaptırıldığı programların, çevirme işlemlerinde eksik olmaktan çıkar; yanlış raporlamalar, pozitif yerine negatif sayıları hesaplamaya sokmak gibi ölümcül hatalara sebep olur. Yani sadece ceketi alıp çıkmak yetmez, bilmem anlatabildim mi? smiley

Sonuç olarak daha önce benzeri şeyleri doğru olarak uyguladınızsa tekrar etmezsiniz. Algoritmanın güzelliği de burada zaten. Tabi gelişimi ayrı ama daha önce çözülmüş bir problem için tekrar bir algoritma kurmanın gereksiz olduğu aşikar. Kısacası insanız işte, ayrıntıları unutabilir, yazdığımız uygulamanın eksiklerini ilk yazışta göremeyebiliriz. Bu yüzden, yazdığınız uygulama ile ilgili her zaman elinizin altında bir algoritma şart olmasa bile kodlamaya geçmeden önce, adına her ne derseniz deyin bir ön hazırlık her zaman avantajdır. Bu arada birebir aynı olmasa da, bu döngü benzeri bir döngünün yazılım projelerine uyarlanmış haline de yazılım geliştirme modeli diyoruz. Yazımın başında mantık üzerindeki vurguma şimdi gelirsek; algoritmalarda karşılaşılan en sık hatalar mantıksal hatalardır. Çözüm aşamasında yapılacak ufak bir mantık hatası zincirleme hatalara neden olabilir ve en basit algoritmayı bile bir süre sonra içinden çıkılmaz bir hale getirebilir. Bu yüzden mantık, mantık, mantık!smiley Herkese kolay gelsin...