Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

En İyi Buluş Sonradan Tekrar Yapılan Buluştur


Yıllar önce öğrenciyken yani Fortran IV zamanında hocamız sıralama işlemleri üzerinde durmuştu. Yani günümüzde sıkça kullanılan sıralama algoritmaları bundan 25 yıl önce bile biliniyordu kullanılıyordu. Kısa sürede mesleğinin zirvesine çıkmış yerli bir yazar sıralama algoritmalarını yeniden keşfedip programcılık dünyasına sundu. Bunu yaparken yani yeniden keşfettiği sıralama algoritmalarının kullanımını serbest bıraktı ama programcılık kitabı yazarlarının kitaplarında bu algoritmalardan söz etmelerini yasakladı. Yani anlayacağınız bu yazarımız yeniden keşfettiği bu algoritmalar konusunda insaflı davrandı. Şimdi gelin 2003 yılı içinde keşfedilen bu algoritmalardan Selection Sort adlı olanı 2004 yılında yayınlanan kitabında Memik Yanık nasıl anlatmış bakalım. 

Gerçekte 2004 yılında yayınlanan C# kitabımda Sıralama Algoritmaları diye bir konu yoktur. Öyle bir konu olsaydı en az 5-6 sıralama algoritmasını arka arkaya anlatır değişik bilgileri sıralarken bu algoritmaları kullanırdım. Kitabımda iç-içe for döngülerine örnek olması için Selection Sort algoritmasını kullandım. Çünkü Seçmeli Sıralama diye Türkçeleştirilen Selection Sort algoritmasının özünde iç-içe 2 for döngüsü vardır. Neyse bunun üzerinde fazla durmaya gerek yoktur. Madem kitabımda Selection Sort’un adını bile etmeden kullandığıma göre bu algoritma üzerinde biraz konuşalım. 

İşe bir soruyla başlayalım: Selection Sort algoritması ile ne yapılır? Cevap: istenen bilgiler bir özelliğe göre sıralanır. Yani anlayacağınız bu algoritmadan yararlanmak için elimizde sıralanacak üç beş bilginin olması gerekiyor. Bu algoritmayı geçtiğimiz yıllarda Pascal, Quick Basic, C veya C++ için yazanlar genellikle 2 dizi değişken tanımlayıp sıralayacakları bilgileri ilk dizi değişkene aktarırlardı. Sonra ilk dizi değişkenin içeriğini sıralayıp ikincisine aktarırlardı. En son olarak bilgilerin sıralanmış halini ekrana yani DOS penceresinde yazarlardı. Madem iç-içe for döngülerini pardon Selection Sort algoritmasını C# programlama dilini anlatmak kaygısıyla yazdığım kitapta kullanacağım sıralayacağım bilgileri sizce nereye aktarmam caizdir? 

İşte ilk aklıma gelenler: Bir ArrayList nesnesi hazırlanıp sıralanacak bilgiler bu ArrayList’e aktarılır. Tabi bazılarınız hemen itiraz edip ‘sıralayacağın bilgileri ArrayList’e aktarmak yerine formun üzerinde bize göstereceğin bir kontrol yok mudur?’ sorusunu yönelteceklerdir. Aslında .NET Framework ile gelen kontrollerin içinde bu amaçla kullanılabilinecek kontroller vardır. Örneğin forma bir TextBox yerleştirilip bu TextBox’ın MultiLine özelliği True yapılıp sıralanacak bilgiler bu TextBox’a aktarılabilir. Bilgilerin sıralanmış hali ise başka bir TextBox’a aktarılır. Aşağıda verdiğim ekran görüntüsünde kullanımı yasak olan nesneler yoktur. Bu formun üzerindekiler MultiLine özellikleri True yapılmış 2 TextBox var.



Bu şekilde MultiLine özelliği True yapılmış TextBox’lardan ilkine istenen bilgi aşağıdaki gibi kod yazılarak aktarılabilir. Benzer kod bilgiler sıralandıktan sonra yazılarak bilgilerin sıralanmış hali ikinci TextBox’a aktarılır.

private
void Form1_Load(object sender, EventArgs e)
 {
   textBox1.Text = "Fenerbahçe" + "\r\n" + "Galatasaray" + "\r\n"+ "Beşiktaş";
  }

Gördüğünüz gibi MultiLine özelliği True olan TextBox’lara bu şekilde bilgi aktarmak biraz zahmetlidir. Bu nedenle bu amaçla kullanılabilinecek başka kontrolleri aramak gerekir. TextBox’tan aklıma gelen bir diğer kontrol RichTextBox’tır. RichTextBox’ı kullanmayı ilk akıl edenler yerli bir programcı kitabı yazarı olmadığı için gönül rahatlığıyla kullanılabilir. Ancak ne yazık ki 2004 yılında yayınlanan C# kitabımda bu işlem için RichTextBox yerine boş bulunup ListBox kullanmayı tercih etmişim.Çünkü programcılık kitaplarında bu ve benzeri amaçlar için ListBox kullanmak suç teşkil etmektedir. Çünkü forma ListBox yerleştirip kullanmayı ilk akıl eden mesleğinin zirvesinde olan yerli bir programcılık kitabı yazarıdır. Alın size Selection Sort algoritması yani iç-içe for döngüleri hakkında bilgi vermek için hazırladığım formun şekli.



Gördüğünüz gibi bu form başka kitaplardan esinlenmeden tasarlanacak gibi değildir. Çünkü eldeki beş on bilgiyi kullanıcıya formun üzerinde göstermek ListBox kullanmak öyle herkesin aklına gelebilecek bir şey değildir. Yani Memik Yanık C# kitabını yazarken sıralamak istediği bilgileri formun üzerinde nasıl gösteririm diye günlerce düşünmüş ama aklına bir çözüm gelmemiştir. Sonra mesleğinin zirvesindeki bir yazarın kitabından esinlenip bu işlem için ListBox’ların kullanılabileceği gerçeğini fark etmiştir. Her ne kadar Memik Yanık 15 yıl önce yayınlanan programcılık kitaplarında forma ListBox yerleştirmeyi akıl etmiş olsa bile 2004 yılı şartlarına göre forma ListBox yerleştirme fikri yerli bir yazar tarafından register edilmiştir. 

Memik Yanık kitabı için hazırladığı örnekte forma 2 ListBox yerleştirerek aynı suçu ikinci kez işlemiştir.  ListBox kullanma suçunu 2 kez işlemin ötesinde forma yerleştirdiği Button nesnesinin Name özelliğini “Sirala” ve Text özelliğini “Sırala” olarak ayarlamıştır. Hal bu ki Selection Sort algoritmasınından yararlanıp sıralama yaparken yazılacak kodu işletirken kullanılacak Button nesnesinin başlığını Sırala olarak ayarlama hakkı yerli bir yazarın inhisarındadır. Memik Yanık bu düğmeye başlık metni seçerken başka C# kitaplarından esinlenmemiş olsaydı en azında bu düğmenin başlığına “Sort Et Kardaş” veya “Boy Sırasına Sok” gibi akılda kalıcı olmayan bir şeyler aktarabilirdi. 

Şimdi gelin yazının başlığında işaret edilip yeniden sonradan yapılan buluştan biraz söz edelim. 2003 yılında yerli yazarımız gece gündüz çalışıp Selection Sort algoritmasını geliştirip bir kitabı aracılığıyla bilişim dünyasına hediye etmiştir. 25 yıl aradan sonra tekrar geliştirdikleri bu algoritmaya “En Hakiki Selection Sort algoritması” adını vermelerini teklif ediyorum. Çünkü yıllar önce geliştirilen Selection Sort algoritması artık eskimişti. Bu buluşu yazılım dünyasına hediye etmelerine hediye etmişlerdir de bu buluştan programcılık kitaplarında söz etme, anlatma hakkını kendilerine saklamışlardır. Bakalım Memik Yanık kitabında sıralama yapmak üzere nasıl bir kod yazmıştır.

p
rivatevoid Sirala_Click(object sender, EventArgs e)
   {
       int[] dizi;
       int i, j;
       int gecici, eleman;
       eleman = listBox1.Items.Count;
       dizi = new int[eleman];
       for (i = 0; i <= eleman - 1; i++)
         dizi[i] = Convert.ToInt32(listBox1.Items[i].ToString());
       for (i = 0; i <= eleman - 1; i++)
          {
            for (j = 0; j <= eleman - 1; j++)
              {
                 if (dizi[j] > dizi[i])
                  {
                      gecici = dizi[i];
                      dizi[i] = dizi[j];
                      dizi[j] = gecici; 
                  }
              }
          }
          for (i = 0; i<=eleman - 1; i++)
             listBox2.Items.Add(dizi[i].ToString());    
        }
    }

Şu koda bakın ki baştan sona esinleme kokuyor. Dakka bir gol bir misali Memik Yanık bu kodda "dizi" adında bir dizi değişken tanımlayıp başkalarına ait olan bu değişken adını kullanmıştır. Çünkü dizi’yi değişken adı olarak kullanmak bu buluşçu yerli yazarımızın kitabı çıkmadan önce kimseye nasip olmamıştı. Her ne kadar daha önce yayınlanan çok sayıda programcılık kitabında "dizi" adında dizi değişken tanımlanmış olsa bile bu hak 2004 yılından itibaren bu algoritmayı yeniden bulan yerli yazara geçmiştir.

Memik Yanık kitabında dizi adında dizi değişken tanımlama kabahatini işlemekle de yetinmemiştir ve kısacık kodda başkalarına ait olan i ve j’yi değişken adı olarak kullanmıştır. Memik Yanık’ın bu kodda tanımladığı "gecici" ve "eleman" adlı değişkenlerin adının sahibi var mıdır yok mudur henüz belli değildir. Bu değişkenlerin sahipleri ortaya çıkıp açıklama yaparlarsa insanlar başkasına ait değişken adlarını kullanıp kul hakkı yemezler.

Memik Yanık bu kodu yazarken dizi, i ve j değişkenlerinin adını başka kaynaklardan çaldıktan sonra bir yerlerden esinlenip formdaki ilk ListBox’ın elemanlarını bu dizi değişkene aktarmayı akıl etmiştir. Tanımladığı dizi değişken int tipinde olduğu için dünyadan yalnızca bir programcılık kitabı yazarı tarafından bilinen Convert sınıfının ToInt32() metodu ile ListBox’ın elemanlarını int tipine dönüştürüp dizi adlı dizi değişkene aktarmıştır. Sizce Memik Yanık bu işlemi başka yazarların kitabından esinlenmeden yapabilir mi? Bence yapmazdı.

Memik Yanık yazıp kitabında kullandığı kodun devamında yerli yazar tarafından 2003 yılında yeniden geliştirilen Hakiki Selection Sort algoritmasını izinsiz bir şekilde kullanmıştır. İşte size bu algoritmanın sıralama yapan asıl satırları:

gecici = dizi[i];
dizi[i] = dizi[j];
dizi[j] = gecici; 
 

Boşuna aramayın yerli yazarımızın kitabından yararlanmadan bu 3 satırı yazacak kimse dünyada yoktur. Dolayısıyla Memik Yanık kitabında bu 3 satıra yer verdiyse kesin esinleme yapmıştır, izinsiz alıntı yapmıştır. Her ne kadar Memik Yanık kitabında yukarıda verilen kodu verme nedeni iç içe for döngülerinden söz etmek olsa bile biraz akıllı davranıp sıralama işlemini iç içe for yerine iç-içe while döngüleriyle yapabilirdi. Tabii başkalarına ait i, j, dizi gibi değişken adlarını kullanmamak şartıyla.

 private void sirala_2_Click(object sender, EventArgs e)
  {
     int[] dizi;
     int i = 0;
     int j = 0;
     int gecici, eleman;
     eleman = listBox1.Items.Count;
     dizi = new int[eleman];
     for (i = 0; i <= eleman - 1; i++)
       dizi[i] = Convert.ToInt32(listBox1.Items[i].ToString());
     i = 0;
     while (i <= eleman - 1)
        {
          j = 0;
         while (j <= eleman - 1) 
          {
             if (dizi[j] > dizi[i])
                {
                   gecici = dizi[i];
                   dizi[i] = dizi[j];
                   dizi[j] = gecici;
                }
               j = j + 1;
         }
          i = i + 1;                                    
       }
      for (i = 0; i<=eleman - 1; i++)
          listBox2.Items.Add(dizi[i].ToString());    
     }
  }

Memik Yanık’ın kabahatinin hem başkalarına ait değişkenleri hem de 2003 yılında yerli bir yazar tarafından keşfedilen Selection Sort algoritmasını C# kitabında kullanmakla sınırlı olduğunu sanıyorsanız yanılıyorsunuz: Memik Yanık bu algoritmayı ve birileri tarafından kapatılmış değişkenlari Delphi 7 kitabında da kullanmıştır. Alın size Memik Yanık’ın Delphi 7 kitabından alınma bir ekran görüntüsü.



Gördüğünüz gibi Memik Yanık bu kitabında da iç içe for döngülerini anlatmak için yine Selection Sort algoritmasından yararlanmayı tercih etmiştir. Ancak bu kez forma düğme yerleştirmeyip düğme başlığı metnini başka kaynaklardan çalmamıştır. Bu durumda sıralamayı yapacak kodu formun Click olayını temsil eden metoda yazmıştır. Verilen kodu yakından incelediğinizde Memik Yanık yine "dizi" adında bir dizi değişken yine i ve j adında 2 integer tipinde değişken tanımlamıştır.



Bu yazıyı bitirmeden buradan size bir çağrıda bulunmak istiyorum: Bu algoritmayı geliştiren yerli yazarlara destek olmak için bu algoritmanın dünyaya ilk duyurulduğu C# kitabından üçer beşer adet satın almanızı öneriyorum. Bu sayede Türkiye bilişim alanında çağ atlama şansı yakalar. Hem bu buluşun dünyaya açıklandığı kitaptan 3 tane alanlara i’yi, j’yi ve dizi’yi değişken adı olarak kullanma hakkı elde ediyorlar.

Genel 16.05.2009 19:12:19

1 YORUM


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com