Yazılım Geliştirmeyi Nasıl Öğrenirim?

savasci

Gerek e-posta ile gerekse sosyal medya üzerinden gelen sorulardan bir tanesi “Yazılım geliştirmeyi nasıl öğrenirim?” ya da bir başka deyişle “Nasıl iyi yazılımcı olurum?”. Ünlü olmadığımdan olsa gerek arada geliyor sorular 🙂 Ama çok sorulan bir soru olduğunu düşünüyorum. Ben de bakış açım doğrultusunda açıklamaya çalışayım.

Bir metafor kullanarak daha iyi açıklayabileceğimi düşünüyorum. Öncelikle Orta Çağ’da yaşayan bir genç olduğunuzu düşünün. Tek hayaliniz iyi bir savaşçı olmak. Ve savaşçı olmanız için de ilk olarak silahınızı seçmelisiniz. Silahınız sizin arkadaşınız olacak, düşmanlarınızı alt etmeniz için ona ihtiyacınız var. Onun her özelliğini tam olarak kavramalı, öğrenmelisiniz. İleride savaş alanında hiç önemsemediğiniz bir özelliği hayatınızı kurtarabilir.

Silahınızı tam anlamıyla tanıdıktan sonra, küçük alıştırmalar yapmaya başlayabilirsiniz. Ama tabii ki bu alıştırmaları savaş alanında ya da gerçek insanlara karşı yapmayacaksınız. Tahta bir hedef ya da bir korkuluk kullanabilirsiniz. Bu sırada diğer savaşçılar sizin hatalarınıza yada yapamadıklarınıza gülebilirler. Kulaklarınızı bu seslere tıkamalısınız. Unutmayın hiç kimse iyi bir savaşçı olarak doğmadı.

Artık silahınızı tanıyorsunuz ve tahta hedeflerle uzun süre çalıştınız. Savaş eğer tahta hedeflerle yapılsaydı belki de en iyi savaşçı siz olacaktınız. Hatta öyle ki, gerçek savaşçılara karşı bile çok iyi savaşabileceğinizi düşünüyorsunuz. İşte tam bu sırada kendinize yanında çalışmak için iyi bir savaşçı bulmalısınız. İyi ya da kötü her savaşçıdan bir şeyler öğrenirsiniz ama ne kadar çetin bir savaşa çıkacağınızı bilemezsiniz, o yüzden imkanınız varsa iyi bir savaşçı bulun. Onun stratejilerini, neyi neden yaptığını takip edin, sorgulayın, öğrenin. Sürekli nasıl ve neden sorularını sorun. Var olan bu stratejilere kendi yorumlarınızı katmaya çalışın. Artık gerçek hedeflerle alıştırma yapıyorsunuz ve savaşlarda küçük de olsa sizin de katkınız oluyor.

Bu savaşlarda yaptığınız işler dikkat çekmeye başladı. Artık daha büyük görevler almaya hatta küçük birlikleri yönetmeye başladınız. Tebrikler, artık siz de bir savaşçısınız. Ama asla unutmamanız gereken bir nokta var. Son katıldığınız savaştaki kadar iyisiniz. Sürekli alıştırmalar yapmaya, yeni stratejiler öğrenmeye devam etmelisiniz. İyi bir savaşçı olarak kalmanın tek yolu, çalışmaya devam etmektir. Eğer silahınızı değiştirmek isterseniz, yeni silahınızın özelliklerini öğrenmeniz çoğu zaman yeterli olacaktır. Sonrasında stratejilerinizi, taktiklerinizi yeni silahınızla kullanmaya devam edebilirsiniz.

Her adım uzun zaman alacaktır ama sonunda istediğiniz gibi iyi bir savaşçı olacaksınız.

Tıpkı bu savaşçı gibi, yazılımcı olmak isteyen birisi de öncelikle kullanmak istediği dili seçmelidir ve bu dilin özelliklerini kavramalıdır. Sonrasında uzun süre alıştırmalar yapmalı, ticari olmayan projeler geliştirmeli. Yazılım geliştirme pratiğini ilerletmelidir.

Artık bir sonraki aşamaya geçebilir. Tecrübesiz bir arkadaş iş arıyorsa benim önerim küçük veya orta ölçekli şirketlere başvurması ya da büyük şirketin yazılım geliştirme konusunda kendisine faydalı olacağına ikna olması. Evet tecrübesiz olmanız sizi çok zorlayacaktır ama gerçekten isteğinizi, yaptığınız çalışmaları – projeleri gösterirseniz şu günlerde iş bulabileceğinizi düşünüyorum. Zor ya da kolay.

Asıl çalışma ise işi bulduktan sonra başlıyor. İş yerinizdeki tecrübeli yazılımcıları, neyi neden yaptıklarını takip etmelisiniz. Bu ‘eski’ çalışanların yöntemlerini yanlış buluyorsunuzdur belki de ama onlar sizden çok daha fazla hata çözdü, çok daha fazla algoritma kurdu ve çok daha fazla çözüm geliştirdi. O yüzden onların söylediklerini dikkate alın ama önerilerinizi söylemekten de çekinmeyin. Unutmayın kimse mükemmel değildir.

Bundan sonrası size kalıyor, her gün kendinizi geliştirmeli yeni teknolojiler öğrenmeli ve çalışmaya devam etmelisiniz. Unutmayın son yazdığınız kod kadar iyisiniz.

Faydalı olması dileğiyle 🙂

 

 

 

 

 

 

Yabancılarla Konuşma! – Law Of Demeter

strangerdangerNesne yönelimli programlamanın kıyısından köşesinden bir ilişkiniz olduysa eğer encapsulation, abstraction, loosely coupling gibi terimleri duymuşsunuzdur. Bu terimler aslında kolay gibi gözüken ama gerçekleştirmesi, özellikle kodlar ve istekler büyüdükçe, o kadar da kolay olmayan şeylerden bahsederler.

Bugün bunların gerçekleştirilmesinde bize yardımcı olan, kimilerine göre bir pattern kimilerine göre bir pratik olan Law of Demeter’dan (LoD) bahsedeceğim. Özetle LoD başlıkta belirttiğim gibi “Yabancılarla Konuşma!” der.  Bu pratiğe göre bir nesneye ait metod aşağıdaki dört şekilde metod çağırmaldır.

  1. Nesnenin kendisine ait metodlar.
  2. Metoda parametre ile gelen nesnelere ait metodlar.
  3. Metodun içerisinde oluşturulmuş bir nesneye ait metodlar.
  4. Nesnenin direk erişimi olan nesne ve özelliklere ait metodlar.

Bu maddeleri kısaca birer kod parçacığı ile gösterecek olursak.

  1. Nesnenin kendisine ait metodlar.
    public class OrnekSinif
    {
    	public void AcikIslemYap()
    	{
    		islemYap(); // Nesnenin kendi metodunu çağırıyor, LoD 1
    	}
    	private void islemYap()
    	{
    	}
    }
  2. Metoda parametre ile gelen nesnelere ait metodlar.
    public class OrnekSinif
    {
    	public void AcikIslemYap(DigerSinif digerSinif)
    	{
    		digerSinif.BaskaIslemYap(); // Parametre ile gelen nesnenin metodunu çağırıyor, LoD 2
    	}
    }
  3. Metodun içerisinde oluşturulmuş bir nesneye ait metodlar.
    public class OrnekSinif
    {
    	public void AcikIslemYap()
    	{
    		DigerSinif digerSinif = new DigerSinif(); 
    		digerSinif.BaskaIslemYap(); // Metod içerisinde oluşturulmuş nesnenin metodunu çağırıyor, LoD 3
    	}
    }
  4. Nesnenin direk erişimi olan nesne ve özelliklere ait metodlar.
    public class OrnekSinif
    {
    	DigerSinif digerSinif = new DigerSinif();
    	public void AcikIslemYap()
    	{
    		digerSinif.BaskaIslemYap(); // Nesnenin direk erişimi olan nesnenin metodunu çağırıyor, LoD 4
    	}
    }

Eğer kodlar içerisinde aşağıdaki gibi zincirleme bir metod çağrımı görüyorsanız. Bazı istisnalar olsa da büyük bir ihtimalle LoD’a uymayan bir kod yazmış bulunuyorsunuz.

nesne.GetirDigerNesne().DigerNesneninMetodu()

Daha anlaşılır olması adına şöyle de yazabiliriz.

hesap.OkuMusteri().OkuIletisimAdresi().OkuIlce()

Tabii LoD’u sadece zincirleme metod çağrımına karşı olan bir pratik olarak düşünmek doğru olmaz. LoD temelde şuna dayanır:

Bir bilgiyi nesnenin dışarısından çekmek yerine nesnenin kendisinden almalısınız.

Yukarıdaki örnek üzerinden düşünecek olursak hesap nesnesi OkuMusteri’den dönen Musteri nesnesi üzerinden dönen IletisimAdresi üzerinden Ilce’ye ulaşıyor. Eğer hesap nesnesinde bir ilçe bilgisi gerekiyor ise dış dünyanın öncelikle müşterinin okunduğunun sonrasında IletisimAdresinin okunduğunun (belki de ileride değişecek, ResmiAdres okunacak) bilgisine ihtiyacı yok. Onlar sadece hesaptaki ilçe bilgisini istiyorlar. Bu durumda aşağıdaki gibi bir kullanım tercih edilebilir.

hesap.OkuIlce()

Yeni OkuIlce metodu kendi içerisinde IletisimAdresini ya da ResmiAdresi seçebilir. Bu değişiklik metod kullanıcılarını etkilemeyecektir.

Tabii, diğer pattern ve pratiklerde olduğu gibi LoD’un kullanımının tercih edileceği ya da vazgeçilmesinin gerekeceği durumlar olacaktır. Bunun kararının verilmesi için biraz acı ve biraz tecrübe gerekecektir. 🙂 Ancak geliştirme sırasında LoD’u göz önünde bulundurmak oldukça fayda sağlayacaktır.

 

 

 

 

CodeBroad

logo-trnsprnt-lnkdin

Önceki gönderilerime bakınca neredeyse 3-4 senedir, senede bir paylaşım ancak yapabilmişim. Artık daha fazla yazacağıma dair söz vermiyorum 🙂 İşlerin ve hayatın yoğunluğu içerisinde çok fazla fırsatım olmuyor. Sadece daha fazla paylaşımı umut edebilirim 🙂

Bu seferki paylaşımın sebebi hayatımdaki köklü bir değişim. Yıllardır devam eden bordrolu çalışma hayatıma geçtiğimiz aylar itibari ile son verdim. İstifam sonrasında yıllardır hayalini kurmuş olduğum şeyi gerçekleştirdim ve CodeBroad (http://www.codebroad.com)’u kurdum. Ve en azından şimdilik her şey çok güzel devam ediyor.

Bundan sonra teknik konularda paylaşım yapmaya devam etmeyi umuyorum. Ama bunun dışında iş tarafında da paylaşımlarım olacaktır muhtemelen. Umarım az da olsa birilerini faydası olur.

 

 

Action, Func ve Predicate Delegeleri

Delegeler metodları işaret eden ve işaret ettikleri metodlarla aynı imzaya sahip olan yani aynı tipte parametrelere ve dönüş değerlerine sahip olan yapılardır.  Delegeleri event tabanlı programlamada, asenkron programlamada, thread programlamada vb bir çok yerde kullanırız. Makalenin asıl amacı genel olarak delege yapısı olmadığı için detaylarına girmeyeceğim.

Pekala yazımızın konusu olan Action, Func ve Predicate neyi temsil eder? Başlıktan da anlaşılacağı üzere bunlar da .Net framework içerisinde bulunan, bizler için önceden hazırlanmış olan delegelerdir. Çok fazla kelimelerle uğraşmadan kod üzerinde görelim.

Action delegesinin imzasına baktığınızda aşağıdaki gibi bir kod göreceksiniz.

public delegate void Action<in T>(T obj);

Burada Action delegemizin T tipinde yani herhangi bir tipte parametre alan sonrasında da void dönüş yapan metodları işaret edebildiğini görüyoruz.

Örneğin normal delegeler ile aşağıdaki şekilde yazdığımız bir kodu

        delegate void NormalDelege(long sayi);

        private void button1_Click(object sender, EventArgs e)
        {
            NormalDelege karesiniAlDelegem;
            karesiniAlDelegem = karesiniAl;
            karesiniAlDelegem(3);
        }

        private void karesiniAl(long sayi)
        {
            MessageBox.Show(Math.Pow(sayi,2).ToString());
        }

Action delegesi ile aşağıdaki gibi yazabiliriz.

        private void button1_Click(object sender, EventArgs e)
        {
            Action<long> actionIleKaresiniAl;
            actionIleKaresiniAl = karesiniAl;
            actionIleKaresiniAl(3);
        }

        private void karesiniAl(long sayi)
        {
            MessageBox.Show(Math.Pow(sayi,2).ToString());
        }

Action delegesi olduğunun farkına varmasak da kodlarımız içinde lambda ile birlikte bu delegeyi oldukça fazla kullanmaktayız. Örneğin aşağıdaki kodda (kodun anlamsız olduğunun farkındayım amaç net şekilde gösterebilmek 🙂 )

sayilar.ForEach(x => MessageBox.Show(Math.Pow(x, 2).ToString()));

ForEach methodunun tanımına gittiğimizde Action tipinde bir parametre aldığını görebiliriz.

public void ForEach(Action<T> action);

Yani aslında biz ForEach içerisine long tipinde bir değer alan ve içerisinde bu değerin karesini alıp MessageBox ile gösteren bir fonksyion yazdık.

Func delegesi Action’a benzer bir yapıdadır ama Actiondan farklı olarak bir dönüş değeri vardır. Func delegesinin tanımlarına baktığımızda iki farklı kullanım görebiliriz. Hiç parametre almadan bir değer dönebilir.

public delegate TResult Func<out TResult>()

Ya da bir parametre alıp bir değer dönebilir.

public delegate TResult Func<in T, out TResult>(
	T arg
)

Aşağıdaki kod örneğinde butonun click eventinde öncelikle Func delegesi parametre almayıp string dönen bir metodu işaret ederken, sonrasında delegemiz string bir değişken alıp, string bir değişken dönen bir metodu işaret etmektedir.

        private void button1_Click(object sender, EventArgs e)
        {
            Func<string> stringDonenFunc;
            stringDonenFunc = merhabaDe;
            MessageBox.Show(stringDonenFunc());

            Func<long, string> longAlipStringDonenFunc;
            longAlipStringDonenFunc = karesiniAl;
            MessageBox.Show(longAlipStringDonenFunc(3));
        }

        private string merhabaDe()
        {
            return "Merhaba";
        }

        private string karesiniAl(long sayi)
        {
            return Math.Pow(sayi, 2).ToString();
        }

Func delegesini de farkında olmasak da linq sorgularımızda kullanmaktayız.  Listeler üzerinde çalıştırdığımız Select , Where vb komutlarında tanımlarına baktığımızda Func tipinde parametre aldıklarını görürüz.

Predicate delegesi ise tam olarak Func<T, bool> parametresinin yaptığı işi yapar. Yani herhangi bir tipteki değişkeni alır ve geriye boolean bir değer döner.  Kullanımı da benzer şekildedir.

        private void button1_Click(object sender, EventArgs e)
        {
            Predicate<long> predicateDelegesi;
            predicateDelegesi = ikiHaneliMi;
            if(predicateDelegesi(55))
                MessageBox.Show("Evet");
            else
                MessageBox.Show("Hayır");
        }
        private bool ikiHaneliMi(long sayi)
        {
            return sayi < 100 && sayi > 9;
        }

Kısa bir şekilde Action, Func ve Predicate delegelerini ve kullanımlarını anlatmaya çalıştım. Eğer herhangi bir sorunuz, eleştiriniz, öneriniz varsa yorum yazarsanız sevinirim.

Çevik Kalın 🙂

 

NUnit System.ArgumentException (w/ Entity Framework)

 

Entity Framework ile veritabanı işlemlerinizi yaptığınız projelerinizi NUnit ile test etmeye kalktığınızda aşağıdaki gibi bir hata alacaksınız.

System.ArgumentException: The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

Bu hatadan kurtulmak için bağlantı bilgilerinizin yer aldığı App.config dosyasını NUnit projeniz ile aynı yere kopyalayıp ismini NUnitProjenizinIsmi.config şekilde değiştirmeniz yeterli.

 

Cep Anahtar vb Nasıl Çalışır (Olası)

İş bankasının Cep Anahtar’ını duymuşsunuzdur. Telefonunuza bir Java uygulaması yüklüyorsunuz ve o size internet şubesine girerken tek kullanımlık şifreler veriyor.  Neredeyse diğer tüm bankalar farklı isimlerle aynı çözümü sunuyorlar.  İki gündür kafayı ciddi anlamda Cep Anahtarın nasıl çalıştığına takmıştım.  İşleri karmaşıklaştıran sadece ilk seferinde online çalışması, siz şifre üretirken bankayla herhangi bir irtibat kurmuyor. Yani siz şifreyi oluşturduğunuzda bankaya bu şifre iletilmiyor, ya da bu şifre direkt bankadan gelmiyor. Peki banka bunun doğru şifre olduğunu nerden biliyor. Google’da arama yaptığımda başkalarının da aynı soruyu sorduğunu gördüm.  Ama verilen cevaplar beni tatmin etmedi. Kendim de tam olarak net bir cevap veremeyince biraz daha araştırmaya karar verdim. Ve çok basit bir mantıkla çalıştıklarını gördüm.  Tabii kesin olarak bu mantık diyemem ama büyük ihtimalle birazdan bahsedeceğim şekilde çalışıyorlar.

Bu işlemin yani tek seferlik şifre verme işleminin gerçekleşmesini sağlayan algoritma Leslie Lamport‘a ait. Buna göre öncelikle bir değer belirliyorsunuz. Bu sizin ilk, çekirdek değeriniz. Ve bu değeri bir fonksiyona sokuyorsunuz. Daha sonra bu fonksiyonun sonucunu da aynı fonksiyona sokuyorsunuz ve bu şekilde belirlediğiniz bir üst sınıra kadar devam ediyorsunuz. Bu fonksiyonların çıktıları sizin olası değerleriniz.  Matematik diliyle şöyle ifade edebiliriz.

Ç1=çekirdek, Ç2=F(Ç1), Ç3=F(Ç2), Ç4=F(Ç3), ...Ç[n]=F(Ç[n-1])

Bir örnek ile açıklamak gerekirse bizim fonksiyonumuz F(x)  = 2x olsun. İlk değer olarak 2 verelim. Bu durumda

Ç1=2,   Ç2=f(Ç1)=4,  Ç3=f(Ç2)=8 …

şeklinde değerlerimiz ilerler. Bu algoritmada değerleri kullanırken hep en son değerden başlayarak kullanılır. Yani yukarıdaki örnekte üst sınır 8 belirlemiş isek, uygulamanın size vereceği ilk şifre 8 olacaktır.

Hala bankanın nasıl doğru şifreyi bildiğini açıklamadık. Uygulamayı ilk yüklediğinizde bir kereye mahsus sizden ilk üretilen şifreyi internet şubesi üzerinden girmenizi ister. İşte işin can alıcı noktası burası siz üretilen ilk şifreyi bankaya tanıttığınızda, artık banka fonksiyonu(f=2x) ve dolayısıyla tersini(f^−1=x/2) bildiği için bir sonraki gelecek değeri yani yukarıdaki örnekte 4 bilecektir. Bu fonksiyonlar gerçek hayatta çok karmaşık olduğu için fonksiyonun tersini ve dolayısı ile bir sonraki şifreyi bulmak çok zorlaşıyor. Uygulamada çok fazla şifre üretip kullanmazsanız bir süre sonra tekrar senkronizasyon yapmanız yani, hali hazırdaki son şifreyi bankaya tekrar bildirmeniz gerekiyor. Çünkü oluşturduğunuz şifreleri kullanmadığınız için banka son şifreyi bir süre sonra takip edemiyor ve ipin ucunu kaçırıyor.

Şimdi örneğimizi netleştirebiliriz. Uygulamanızın fonksiyonu bu kez f(x)=3x-1 olsun. Başlangıç değeri de 3 olsun. Üst değerimiz ise 1823 olsun

Uygulamanız fonksiyonumuza göre değerleri oluşturuyor.

3    8    23     68    203    608     1823

Elimizde uygulamamız var, bankada fonksiyon. Banka fonksiyonu bilmesine rağmen son değeri bilmiyor. O yüzden ilk kullanımda bizden 1823 değerini istiyor. Bunu son değer olarak kaydediyor.

Daha sonra biz internet şubesine giriyoruz. Ve tek kullanımlık yeni şifremizi uygulamamız aracılığı ile oluşturuyoruz. 608 Bu değeri bankaya gönderdiğimizde banka hemen fonksiyonun tersinde [(x+1)/3] ilke kendisine verdiğimiz 1823 değerini koyuyor ve (1823+1)/3 işlemi ile 608 i buluyor. İki değer aynı o zaman şifremiz doğru.

Gerçekten güzel bir yöntem, offline olarak nasıl yaptığı sorusu kafamı ciddi anlamda yemişti. Şimdi gönül rahatlığı ile uyuyabilirim. 🙂

 

Kolay Para Kazanma Yolları

Bugün bir yazı okurken kafama takıldı ve “Kolay Para” ne kadar aranıyormuş diye baktım.  “Kolay Para Kazanma” kelime grubu ayda ortalama 2500 kere aratılıyormuş, içinde “Kolay Para” geçen sözcük grupları ise toplamda ortalama 27000 kere aratılıyormuş. Gerçekten garip! Özellikle facebook, twitter, youtube gibi internet fenomenlerinin ortaya çıkmasından ve onlara biçilen fiyatlardan sonra acar Türk girişimcisinin bu alana yönelmesine şaşırmadım. Ama Google’da kolay para yazarak para kazanmanın yollarını bulacaklarını, aydınlanacaklarını düşünen insanların olması beni şaşırttı. İşin enteresan tarafı ise bunun kolay olacağını düşünmeleri.

Ben üniversite yıllarımdan başlayarak sürekli bir şeyler denedim. İster adına girişim densin ister proje, birçok çalışmada bulundum. Dönemlik kazançlarım olsa da istediğim gerçek başarıyı hala elde edemedim. Bir yandan teknik bilgimi geliştirmeye çalışırken, bir yandan da teknik olmayan ama faydalı olacağını düşündüğüm alanlarda sürekli kendimi geliştirmeye çalıştım. Şu an başlangıç noktasındayım bile diyemem. Küçük adımlar attığımın farkındayım ama bu adımlarım bile dediğim gibi başlayabilmek için. Nasıl düşünemedim Google ve Kolay Para.. Boşunaymış bütün çabalarım.

Peki aslında daha önceki ve şu an süre gelen uğraşlarım Kolay mıydı? Kesinlikle değil. Bu uğraşlarımın bir sonuca ulaşıp ulaşmayacağını, ulaşırsa ne zaman ulaşacağını bilmiyorum. Ama bildiğim tek şey Google’da Kolay Para yazarak aratıp istediğim şeylere ulaşamayacağım. Muhtemelen bu yazıma da Google’da Kolay Para diye aratıp gelecek arkadaşlar olacak. Sevgili arkadaşım gördüğün o ışıltılı projelerin hiçbirisi kolay ortaya çıkmadı. Amiyane tabirle o çalışmaların hepsi kan ve gözyaşıyla hazırlandı. Seni de burada oyaladığım için özür dilerim. Şimdi elinde mavi ve kırmızı haplar var. İster geri tuşuna basar ve Google’ın sana kolay para kazanma yollarını göstermesini bekleyebilirsin ya da hemen şimdi çalışmaya başlayabilirsin. Seçim senin.

Hep denedin. Hep yenildin. Olsun. Yine dene.Yine yenil. Daha iyi yenil.   Samuel BECKETT

YKB POSNET Entegrasyonu

Son zamanlarda online alışverişteki potansiyeli gören birçok kullanıcı sanal mağazalar açmaya başladı. Tabii ki bu alışveriş sitelerinin de olmazsa olmazı kredi kartı ile ücreti tahsil edebilme.

Türkiye’de bankalar 2 Sanal Pos altyapısından birini kullanmaktalar.  EST ve POSNET. POSNET’in entegrasyonu biraz daha karışık gibi. Bana da bu sanal pos’ların alışveriş sitelerine uyarlanması ile ilgili sürekli soru sorulmakta. Bunun üzerine ben de EST ve POSNET entegrasyonu üzerine küçük bir kütüphane oluşturmaya karar verdim.

Sitelerinde EST veya POSNET entegrasyonunu gerçekleştirmek isteyenler metkor@gmail.com adresine Sanal POS Entegrasyon başlığı/konusu  ile bir mail atarlarsa yardımcı olabilirim.

 

Android İçin Uygulama Geliştirmek

Son zamanlarda IPhone üzerine geliştirilen uygulamaların ulaştığı inanılmaz satış rakamları uygulama geliştiricilerin dikkatlerini biraz daha mobil uygulamalar üzerine yoğunlaştırmalarına sebep oldu.

IPhone uygulama geliştirmek için Mac bilgisayar ve MacOS gibi gereksinimlerin olması Iphone için uygulama geliştirmek isteyenleri bu isteklerinden alıkoyuyor. Ancak amacınız sadece Iphone için değil de, yaygın bir platform için mobil uygulama geliştirmek ise birçok kişi tarafından gelecekte mobil cihazların işletim sistemi olarak gösterilen ve şu an bile ciddi aktivasyon rakamlarına ulaşan Android için uygulama geliştirebilirsiniz. İşin en güzel yani Android üzerine uygulama geliştirmek için yüksek maliyetli gereksinimlere ihtiyacınız olmaması.

Android için yazdığınız uygulamaları https://market.android.com/ üzerinden satışa sunabilirsiniz. Bu adreste ücretli ve ücretsiz birçok uygulama bulabilirsiniz. Şu an Türkiye’den geliştiriciler bu adresten uygulama satamıyorlar ancak diğer ülkeleri göz önüne aldığımızda yakında zamanda Türkiye’nin de listeye dahil edilmesini umuyorum. Şu an ise uygulamanızdan para kazanmak için yapabileceğiniz tekşey uygulamalarınıza reklam koymanız. Bunu daha önce Google’ın satın aldığı admob aracılığı ile yapabilirsiniz.

Peki uygulama geliştirmeye nasıl başlayabilirsiniz? Bunun için öncelikle makinanıza JDK kurmanız gerekiyor. Çeşitli uygulamalarla geliştirme yapabilirsiniz ama en kolay şekilde uygulama Eclipse vasıtasıyla geliştirilebildiği için, Eclipse tavsiye ediliyor. Eclipse Classic versiyonu buradan indirebilirsiniz.

Eclipse’i kurduktan sonra ikinci olarak Android SDK‘yı indirip kurmamız gerekiyor.  Android SDK kurulumu sırasında bilgisayarınızda JDK kurulu olup olmadığına bakacaktır. Eğer kurulu değilse kurulum sırasında da indirip kurabilirsiniz.  Kimi zaman JDK kurulu olmasına rağmen Android SDK kurulum sırasında bunu algılayamayabiliyor. Bu durumda Androdi SDK kurulumunu iptal etmeden JDK’yı tekrar kurabilirsiniz. Daha sonra kurulumu bir adım geri götürüp devam ettiğinizde sorun ortadan kalkacaktır.

Bir sonraki adım da Eclipse üzerine Android Development Tools eklentisini (ADT Plugin) kurmamız gerekiyor. Bu yüklemeyi yaparken öncelikle Eclipse’i açmamız gerekiyor. Daha sonra Help > Install New Software menüsünü açıyoruz ve Add butonuna tıklayıp eklentiye bir isim veriyoruz ve adres kısmına da

http://dl-ssl.google.com/android/eclipse/

adresini yapıştırıyoruz.  Aslında normalde gösterilen adres https protokolü üzerinden ama ben de o şekilde sorun çıkardığı için http üzerinden kurulumu yaptım. Daha sonra OK’e tıklıyoruz ve çıkan ekranda Developer Tools’u seçip Next adımlarıyla işlemi tamamlıyoruz.

Bu işlemden sonra Eclipse’de Window > Preferences menüsünü açıyoruz. Sol kısımdan Android’i seçiyoruz ve sağ kısımdan az önce kurulumunu yaptığımız Android SDK’nın yolunu gösterip, Apply ve OK butonlarına basıyoruz ve eklentinin kurulumunu tamamlıyoruz.

Geliştirmeye başlamadan yapmamız gereken son işlem gerekli komponentlerin indirilmesi. Bunun için yine Eclipse içinde Window > Android SDK and AVD Manager menüsünden SDK Manager’ı çalıştırıyoruz ve Available Packages kısmından kullanacağımız komponentleri seçip Install Selected butonuna basıyoruz. Kimi zaman bu kısımda da https protokolü yüzünden sorunlar yaşayabiliyoruz. Böyle bir durumla karşılaşırsanız.  SDK Manager’da Settings kısmında Force https://… sources to be fetched using http:// seçeneğini işaretleyip ilgili komponentleri yükleyin.

Artık Android Uygulaması geliştirmeye hazırız.  Artık Eclipse içerisinde File > New Project > Project Menüsünde Android seçeneği altında Android Project’i seçerek projenisi hazırlamaya başlayabilirsiniz.