Once upon a time, in my early days of programming, an instructor in the computer course wanted to help me improve my programming techniques! She asked me whether I would write a program to sort numbers from 0 to 9 given in mixed order. Then, she went. Perhaps she thought it would take too long.

After thinking a second, or two, I run after her and asked if it would make a difference if I correctly display them on the screen. She, confidently, said “no”.

A few minutes later, I called her to see the result. Although she had a shock, she didn’t even wondered how I did it!

Despite it has nothing to do with the logic of real sorting algorithms, there are many lessons behind it. One is that “the result is more important!” You guess the others…

Here is a C# implementation of that funny sorting algorithm. You may read the real stuff in Wikipedia.

 

using System;
using System.Text;

namespace FunnySort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 7, 3, 6, 2, 0, 8, 4, 1, 5, 9 };
            foreach (int number in numbers)
            {
                Console.CursorLeft = number * 3;
                Console.Write(number);
            }
            Console.ReadKey();
        }
    }
}

Tags: ,

Comments No Comments »

Her yaptığımız şeye bir kulp uydurmak yerine, elle tutulur bir sebebe dayanarak işe başlamalıyız. Zira, ameller niyetlere göredir. Yazılım yazmak için de, her zaman geçerli, kendime göre sebeplerim var.

Yazılımcı olarak bir yazılımı niçin yazarsınız? Sormak aklıma gelmedi demeyin! Birileri istediği için mi? Mecbur olduğunuz için mi? Öğrenmek için mi? Yada zevk olsun diye mi? Acaba bir yazılımı yazmanın mesleki açıdan özel bir sebebi olmalı mı? Eğer bir yazılım geliştirme projesinde geliştirici ekibin içindeyseniz ne demek istediğimi anlamışsınızdır.

Bazıları sadece para için yazar. Onlar için bir işin başarılı olması işi bitirip, parayı almaktır. Yanlış anlaşılmasın, yapılan işin tabii ki maddi bir karşılığı olabilir. İş karşılığı bir bedel alınmış olması veya iyi para etmesi, sadece ticari yanının başarısını gösterir.

Yazılımın başarısını, onu alan veya satanın memnuniyeti ile ölçmek de eksiklik olacaktır. Gerçek başarı işin iki ucunu tutan kullanıcı ve geliştiricilerin memnuniyetidir. Neden mi? Çünkü, bir yazılımı iyi kullanamazsanız veya iyi geliştiremezseniz beklenen faydaları ondan elde edemezsiniz.

Onların Niçinleri

Yazılım geliştirme süreci bir ihtiyacın ortaya çıkması ile başlar. Bir yazılım geliştirilmesine karar verildikten sonra, yazılımı alıp kullanmak isteyen müşteri ve geliştirip satmak isteyen yazılımcılar arasında işin ticari boyutu belirir. İlk başta sadece bir cümle ile ifade edilebilen yazılım projesi, müşterinin ihtiyaçlarının belirlenmesi ile canlanmaya başlar. Yazılımcılar da ihtiyaçları toparlayıp ne yapabileceklerine kara verirler. İş karşılığı alınıp verileceklerde anlaşıldıktan sonra da gerçek geliştirme süreci başlar.

Yazmaya başlanacak bu noktada taraflar “Bu yazılım niçin yazılacak?” sorusunun cevabını belirler ve iki kısım doküman hazırlanır.

  • Kullanıcıların ihtiyaçlarını ve yapılacak işlerin kapsamını anlatan gereksinim dokümanı ve
  • Alıcı ve satıcı arasındaki ticari sorumlulukları, yani zaman ve bütçeyi içeren bir sözleşme.

Ya yazılım geliştiriciler?  Onların projeyi yapmak için kendilerine ait sebepleri ve ihtiyaçları olamaz mı? Evet deneyimli ekipler bir tasarım dokümanı ve bir de geliştirme dokümanı hazırlarlar. Ama bunların içerisine yazılımcının sorunları değil, yazılımın çözümleri, yazılımcının öğrenecekleri değil, yazılıma eklenecekler doldurulur.

Bizim Niçinlerimiz

Geliştirme için bilmemiz gerekenler, işi bitirmek için kazanmak zorunda olduğumuz beceriler ise çoğu zaman bize bırakılır. Dahası, bunlar için harcanacak zaman ve para proje planlarında göz ardı bile edilebilir. Projenin diğer tarafları, asıl işi yapan yazılımcı geliştiricilere, açıktan olmasa da içlerinden, belki de şöyle demek istiyorlardır; “Ellerinizin altında bilgisayarlarınız var. Onlara güzel bir analiz ve tasarım verirseniz işinizi en iyi şekilde yaparlar.”

Eğer sizi gözardı etmiş proje dokümanlarına ve planlara uyar, işi zamanında bitireyim diyerek, kendi gereksinimlerinizi karşılamadan yazmaya devam ederseniz, ya proje bitmeyecektir, yada zaman ve para bittiği için proje sonlandırılacaktır.

İşte bu yüzden, bir yazılım projesindeki kendi ihtiyaçlarımı, kendim için birer amaç olarak belirliyorum. Amaçlarım diğer proje taraflarının önceliklerini geçemese de, onları göz ardı etmiyorum. Yazılı olmasa da kendi amaçlarımı mesleğimle imzalanmış bir sözleşme gibi kabul ediyorum.

Başa dönersek, “Niçin bu yazılımı yazacağım?” sorusuna kendi cevabım şunlar olurdu;

  • Müşteri tarafındaki kullanıcıların ihtiyaçlarını karşılamak için.
  • Yükümlülük alanlar benden yazmamı istedikleri için.
  • Yazarken yeni şeyler öğreneceğim için.
  • Bir sonrakine bir adım ilerlemiş olarak başlamak için.

“İyi bir sebebiniz yoksa, sonucunuz da iyi olmayacaktır.”

 

Comments No Comments »

While writing a post (in Turkish) I recalled the old days. This is the C# (or modern) version of one of the sample codes, I made in a computer class, years ago. The original one was in BASIC and had four lines, though.

using System;
using System.Text;

namespace TimesTable
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.Clear();
      for(int i = 1; i <= 10; i++)
        for (int j = 1; j <= 10; j++)
        {
          Console.SetCursorPosition(
            ((i - 1) % 5) * 16,
            ((i - 1) / 5) * 11 + (j - 1));
          Console.Write(string.Format(
            "{0,2} x {1,2} = {2,3}", i, j, i * j));
        }
      Console.ReadKey();
    }
  }
}

Comments No Comments »

Yazılımcı, yazılım geliştirmeye istekli veya bu yola girmiş genç arkadaşlardan sürekli aldığım bir istek, sonunda bu boş bloga bir kaç kelime eklemek, yıllanmış giriş yazısından kurtarmak konusunda beni iyice zorladı. İnşallah okuyanlara bir faydası olur.

Geçenlerde bir kardeşim, rutin yazılım işlerinden sıkılarak “yazılımcılık bumuymuş?” diye sormuştu. Halen üniversite 2. sınıfta okuyan bir arkadaşımız da mail atarak özetle şöyle bir istekte bulundu;

…nasıl bir çalışmayla, nasıl bir vizyon izlediniz…geliştirme noktasında mümkünse sizden bir yöntem, bir ipucu bekliyorum… en azından beni tetikleyecek bir kaç söz söylemenizi birkaç tecrübe paylaşmanızı…

Kendimi anlatmak amacıyla değil, biraz sorumluluk hissettiğim için… Bizim meslekte (!) öğrenecek şeylerin, yapılacak işlerin bir sınırı yok. Neleri yapmadığımın farkında olarak, yapabildiklerimden bahsetmek… Öncelikle yapılanların ne olduğundan da değil, yapabilmek için nerelerden geçildiğinden bahsetmek istiyorum. İnşallah bu çizgide bir kaç söz söylemeye muvaffak oluruz.

Bir hatıra ile başlayalım;

Ders Almak

Bir zaman, Halk Eğitim Merkezinde bilgisayar dersi veriyordum. Yazılım geliştirmekten sıkılıp, değişiklik olsun, hem de insan içine çıkalım diyerek yaptığım bir iş.

Hafta sonları, İstanbul için kısa, Bursa için uzun, bir iki saatlik bir mesafeye gidiyorum. Yer Bursa’nın MustafaKemalPaşa ilçesi. Tek bir sınıfım var. Değişik yaş ve mesleklerden yaklaşık 20 kişi. Öğlen yemeklerinde ise çoğunlukla kemalpaşa köftesi, üstüne de kemalpaşa tatlısı yiyorum.

Konular o zamanlar için genel; önce bilgisayarın tarihçesi anlatılır, işletim sistemi olarak biraz DOS öğretilir, ardından bir yazı programı, sonra da Basic ile programlama. Tarihçe ezber işi, kolay geçer. DOS, ilk adım, ne var, ne yok, o da bir şekilde öğrenilir. Yazı yazmak herkesin yaptığı şey zaten…

Programlama mı? Ona kadar herşey gayet iyiydi. Çoğu içi tamamen yeni bir konu. Bir problemi ele al, yapılacak işleri belirle, iş adımlarını yaz, ve çalışsın!

Basit bir kaç programı beraber yazdık. Hatta bir çarpım tablosu hazırlama programını, analizin ve programlamanın bakış açısına göre değiştiğini gösterebilmek adına farklı boyutlarda, üç farklı yöntemle yaptım. En kısa olan sadece dört satır ve dört komut; bir satır ekranı silme, iki satır döngü, bir satır da yazma için.

Sonra da küçük bir programı kendilerinin yapmasını istedim. Bir ders boyu bekledim fakat kimseden çıt yok. Herkes nereden başlasak diye düşünüyor, gözler bana bakıyor ama yardım etmemekte kararlıyım.

İkinci derse başladık. Anlatılan onca şeyden sonra bir adım ilerlemediklerini görünce, biraz da kızarak, uzun bir çay molası için sınıftan çıktım…

Ders sonuna doğru sınıfa dönünce herkesi bilgisayar başında, faal bir vaziyette buldum. Programlarını yazmaya başlamışlar, kimisi programını bitirmiş, yüzler gülüyor.

Meğer beni çok üzdüklerini düşünmüşler.

Halbuki benim aldığım ders farklıydı; “Kendin düşünmedikçe, nasıl yazılacağını bilemezsin!”

Ya da, “İşin içinde olmadıkça, işin içinden nasıl çıkacağını bilemezsin!”

(Meraklısına: Bahsi geçen kodun modern C# versiyonu burada.)
 

Comments No Comments »

Nooo, I did not work too hard to make the header image!

  1. Be there, at the Windows Vista and Office 2007 Launch Event in Istanbul.
  2. Before the show, take some shots to check the lighting.
  3. Crop it, resize it.
  4. Publish it!

 

Tags: , , , , ,

Comments No Comments »

I finally started blogging!

Why?.. I had to! There are so many things in my mind that needs to be read. In this blog, I will try to discuss things that I, my colleagues, friends and you would find useful.

But, there is nothing today! I’m busy with this WordPress thing. I’ll check some themes, plug-ins, widgets… whatever needed for a blog.

I will begin writing soon. By that time, you may check my resume. Some generic information is there.

To my Turkish friends: Sorry, the main language of this blog will be English. It is for everyone. But I will write in Turkish, if you request a specific topic.

Have fun!

 

Tags:

Comments No Comments »