Artık her yerde rastlıyor olmalısınız. Yazılım şöyle, yazılım böyle... İyi güzel de neyin nesidir, ne mene bir şey bu yazılım dedikleri? Bu soru kafanızda ilk dönmeye başladığında Google'a programlama yazdığınızı varsayalım ki ben bu yazıyı yazarken şu an kendileri 'öğrenmek istiyorum' diye tamamlıyor. Ben de geçmişte bunu yazmıştım ama pek iç açıcı sonuçlara ulaşamamıştım. Şimdi bakıyorum, durum halen pek farklı sayılmaz. Çıkan sonuçlara şöyle bir göz atıyorum... Ö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ötesi' 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 kararınızı değiştirmeyin. Çünkü son yıllardaki 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 deyişimizi 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 şu dili kullanmalısın diye dayatmak da tabi doğru değildir.

Öncelikle bu yazı ile ilgili bir konuya direk açıklık getirmek istiyorum. Eğer halihazırda bir yazılımcıysanız ve ömrünüz boyunca sadece tek başınıza kod yazacaksanız -bu neredeyse imkansıza yakındır- bu yazı size hitap etmemektedir. Yok yazılımcı değil, olmak isteyen biriyseniz öncelikle şunu söyleyeyim, sorgu dili dışında yazılımda bir isteği karşılamanın onlarca değişik yolu vardır. Bu yollardan en doğru olanını seçmek, belli bir bilgi ve birikim sonucu oluşan bir mekanizmadır. Aslında ne demek istiyorum? Ölümüne kod yazmakla yazılımcı o-lun-maz! Yani ömrünü bilgisayar başında tüketip, bir günde ezbere 10.000 satır çöp yığını kod blokları yazmak bir insanı yazılımcı yapmaz. Hasbelkader bu şekilde çalışan bir program ortaya çıkarılmış olabilir ama onda bir değişiklik istendiğinde, bahse konu arkadaşımızı afakanlar basacaktır. Çünkü kurduğu -daha doğrusu kuramadığı- yapı buna uygun değildir. Bunun dışında yazılımın bir sanat mı yoksa zanaat mı olduğu konusu konusunda farklı görüşler vardır. Bunu şunun için söylüyorum. "Her yiğidin bir yoğurt yiyişi vardır" atasözü yazılımda pek sökmez. smiley Hatta özellikle söktürülmemelidir diye düşünenlerdenim. Örneğin uzun yıllardır denenip sınanan network topolojilerini düşünün. Bunlar ilk denendiğinde, bilgisayarlar sınırlı sayıda ve sadece ofislerde kullanılan makinelerdi. Daha sonra bir sürü farklı donanım, farklı işletim sistemi... Birbirleriyle bırakın anlaşmayı tanışık bile değillerdi. Zamanla bu tanışıklığı ilerletmek için NetBEUI, TCP/IP, FTP, HTTP gibi protokoller oluşturulmuş ve dünyadaki broadcast geçirmeyen en büyük network olan internette de doğru çalışabilmesi için bu protokollere uyma zorunluluğu getirilmiştir. Yoksa ilk zamanlarında olduğu gibi hiçbir cihaz birbiriyle anlaşamaz bütün yapı arapsaçına dönerdi. Buradan hareketle; şahsen bunun açık kaynak dışındaki yazılım dünyasında da böyle olması gerektiğine inanırım. En basit örneğiyle, kodlamanızda bir standart getirilmez ve herkes kafasına göre yazarsa ki bizde durum çoğu yerde maalesef halen böyledir, kodu baştan yazmak bir gün alacaksa onu düzeltmek gereksiz yere 1 hafta sürer. Hatta çoğu zaman hiç düzeltmeye değmez. Yukarıda örneğini verdiğim protokoller gibi yazılımda da böyle standartlar getirilmesi için çeşitli mimariler ve yaklaşımlar ortaya çıkmıştır ki bence Nesne Yönelimli Programlama bunun için biçilmiş kaftandır. Çünkü kimse bir başkasının kapısının önüne attığı çöpleri temizlemek istemez! İşin aslı bu yazı, kısmen bahsettiğim vurdumduymazlık üzerine, naçizane birkaç satırdan ibarettir.

Şimdi, 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 ve aşırı maliyetli 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

Ayrıca yukarıda bahsettiğim, ö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 büyüyen projelerden soğumamanız için çığı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. Açık kaynak dünyası ve Linux benzeri sistemler dışında, 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. Yalnız yine üzerine basa basa söylüyorum, 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 "Sişarpda ne varki ben herşeyini 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 demişken aklıma şöyle bir örnek geliyor. İnsanın kendinden örnek verelim. Bir bebeğin büyüyerek tam anlamıyla konuşmaya başlaması; öncesinde taklit ettiği kelimeleri bir zaman sonra anlamlandırıp cümle denen kalıba dökmesinden ibarettir. 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. 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

Bilindik bir örnek vereyim. 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. Bu yüzden bilinen dil sayısının bence bir anlamaı yoktur.

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. 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...