• Microsoft işletim sistemlerinde çalışacak uygulamaları çok kolay ve hızlı bir şekilde hazırlamaya izin veriyor.
• Geniş bileşen kütüphanesi, modern programcıların sık kullandığı işlerin neredeyse hepsi için hazır objeler ve sınıflar içeriyor.
• Geliştirmeye dair bütün işlemler ve geliştirmeler, tek bir ekranda yapılabiliyor.
• Bulunduğu kulvarda koşan en yakın rakibi Java ile kıyaslandığında daha hızlı çalışıyor.• Programcılara dilden bağımsız bir geliştirme ortamı sunuyor.
• Web, Web servisleri, WAP, mobil cihazlar, masaüstü gibi farklı türdeki uygulamalar çok benzer şekillerde kolayca geliştirilebiliyor.
.NET’in Eksileri
• Java’dan daha hızlı çalışmasına raÄŸmen, sadece Microsoft iÅŸletim sistemlerinde çalışıyor.
• Ortaya çıkarılan uygulamalar MFC özelliÄŸi taşımadığı (yani Visual C++ ile hazırlanmadığı) sürece çalıştırılacakları bilgisayarda .NET Runtime’ın kurulu olmasına ihtiyaç duyuyor.
• Uygulamaları hızlı çalışıyor olsa da, geliÅŸtirme ortamı olan Visual Studio .NET’in güçlü bir bilgisayar üzerine kurulması gerekiyor.
Bu bölümde, kitap boyunca örneklerini inceleyeceğimiz programlama dillerini kısaca tanıyacağız. Eski dostumuz Visual Basic ile neler yapılabileceğinden tutun, hangi programlama dilinin hangi amaçlar için kullanılabileceğine kadar birçok sorunun cevabını hep birlikte göreceğiz.
Aslına bakarsanız, günümüz teknolojisi çerçevesinde programlama dilleri gittikçe birbirine benzemeye başladı. Diller arasındaki fark, daha çok özdeş-leştirilmiş oldukları platformlar arasındaki farklılıklardan kaynaklanıyor. Artık bir programlama dilinin gücü, dilin getirdiği yapısal esneklikten ziyade altında çalışan platformun özellikleri ile ölçülüyor demek sanırım pek yanlış bir ifade olmaz.
Şimdi gelin, hep birlikte günümüzde en çok kullanılan dilleri platformlarıy-la birlikte şöyle bir inceleyelim.
Herhangi bir firmaya veya ürüne öncelik vermiÅŸ olmamak için, diller harf sırasıyla incelenmiÅŸtir. Kitabın geri kalanındaki örneklerde de aynı yaklaşımı sürdüreceÄŸiz.Microsoft’un piyasaya nispeten yeni sürdüğü .NET teknolojisini bir yerlerde mutlaka duymuÅŸsunuzdur. .NET, üzerinde C++, C#, Java, Visual Basic gibi dillerin “imla kurallarıyla” uygulama geliÅŸtirilebilen bir platform olarak karşımıza çıkıyor. Yani bu saymış olduÄŸum dillerin hangisini biliyorsanız, onun kurallarını kullanarak .NET uygulamaları geliÅŸtirebilirsiniz.
C# ise, .NET’in desteklediÄŸi diller arasında programcıların en severek kullandığı dil olma özelliÄŸine sahip. C++’ın bir sonraki kuÅŸağı olarak anılsa da, yapı itibariyle Java ile ciddi benzerlikler gösteriyor.
Peki Ama .NET ISledir?
.NET Framework, Windows veritabanı ve internet programcılığında en çok kullanılan işlevleri standart olarak barındıran devasa bir bileşen kütüphane-sidir. Örneğin, E-Mail göndermek isteyen bir programcı istemci-sunucu arasındaki düşük seviyeli iletişim protokolleriyle uğraşmak zorunda değildir, bunun yerine SendMailO adlı basit bir fonksiyonu çağırması yeterlidir.
Benzer bir mantık çerçevesinde; dinamik Web siteleri, Web servisleri, Win-dows uygulamaları, görsel kontroller, Web objeleri, XML destekli uygulamalar, veritabanı iletişimi, kütüphaneler ve daha birçok şeyi zahmetsizce oluşturmak .NET ile mümkün kılınmıştır.
Dolayısıyla .NET, uygulamalarını yalnızca Windows platformunda çalıştırmayı hedefleyen ve kullanıcıların makinalarında .NET Runtime’ın kurulu olacağından emin olabilen programcıların birinci tercihi olacaktır. Bunun yanı sıra, yalnızca Windows sunucularında çalışacak Web & WAP uygulamaları geliÅŸtirmek isteyen programcılar da .NET’i oldukça cazip bulacaktır.
Gelin ÅŸimdi, .NET’i kullandığım süre çerçevesinde rastladığım ve baÅŸka programcılardan da duyduÄŸum avantaj ve dezavantajlarını görelim.
Microsoft, NET bünyesine de dahil ettiÄŸi Visual C++ ile MFC uygulamaları geliÅŸtirilmesine hala izin veriyor. Visual C++.NET ile geliÅŸtirilen MFC uygulamaları, Windows yüklü herhangi bir bilgisayarda sorunsuzca çalışacaktır. Bilmeyenler için; MFC (Microsoft Foundation Class), Microsoft’un saÄŸladığı düşük seviyeli Windows fonksiyonları bütünüdür.
Yeni nesil programlama platformlarının ve dillerinin temeli, Sun Microsystems tarafından Java ile atıldı. Bir baÅŸka deyiÅŸle Java, .NET’den önce de vardı.
Java; C++ ile ciddi benzerlikler gösterdiÄŸi için, birçok programcı tarafından son derece kolay bir ÅŸekilde öğrenilebilmektedir. Java dilinin bünyesinde C++’ın kullanışlı taraflarını barındırdığını, buna karşılık zor kısımlarını barındırmadığını söylemek sanırım yanlış olmaz.
Neden yeni çıkan dilleri C++ ile karşılaÅŸtırıyorum? C++, görsel geliÅŸtirme araçları ortaya çıkmadan önce kullanılan diller arasında en esnek ve en güçlüsü olma özelliÄŸine sahipti. Windows, Unix, Linux gibi iÅŸletim sistemlerinin dahi C++ ile yazıldığını düşünecek olursak, C++’ın “programlama dillerinin babası” olduÄŸunu ve bunun günümüzde de hala geçerli olduÄŸunu söylemek yanlış olmaz.
Aynen C# ve .NET arasındaki ilişkide olduğu gibi; Java, gücünü altında yatan platformdan alır. Java Virtual Machine (JVM) adı verilen bu platform, yürütülen bir Java uygulamasının ihtiyaç duyabileceği bütün sınıfları, fonksiyonları, vs. içermektedir.
Windows, Unix, Linux, Mac, hatta cep telefonları için yazılmış JVM versiyonları mevcuttur. Java standartlarına uygun olarak yazılan bir uygulama, herhangi bir işletim sistemi üzerinde direkt çalıştırılabilmektedir. Bu yüzden Java; günümüzde Oracle, SAP, IBM gibi büyük şirketlerin ürünlerini geliştirmeyi tercih ettikleri platformdur.
Java ile masaüstü uygulamaları, Web siteleri, Web servisleri, mobil uygulamalar, Applet’ler, veritabanı uygulamaları ve çok daha fazlası geliÅŸtirilebilir.
Platformdan bağımsız olması sebebiyle günümüzün belki de en çok tercih edilen dili olan Java, uygulamalarını birden fazla platformda çalıştırmak isteyen programcıların tercihi olacaktır.
Gelelim Java’nın artı ve eksilerine…
Türkiye piyasasında bir yazılım projesi söz konusu olduğunda; genellikle bir proje yöneticisi, bir grup danışman ve bir grup programcıdan oluşan bir ekip kurulur.Proje yöneticisinin görevi, üst yönetim ile ilişkileri düzenleyerek zaman, kaynak, insan, maliyet gibi faktörleri planlamak ve projenin bir bütün olarak doğru çalıştığından emin olmaktır. Proje yöneticileri, daha önce birçok projede danışman veya programcı olarak görev almış, bunun yanı sıra yöneticilik vasıflarına ve stratejik düşünce yapısına sahip olduğunu ispatlamış kişilerden seçilir.
Danışmanlar, uzmanı oldukları konuda durum ve ihtiyaç analizi yaparak, ortaya bir çözüm planı çıkarırlar. Her bir danışman; finans, muhasebe, insan kaynakları, üretim planlaması gibi konuların birinde uzmanlaşmıştır ve kendi alanının analiz & planlama işlerini yürütür. Bu sırada, diğer danışmanlarla iletişimi kesmez ve sistemi oluşturan öğeler arasındaki bütünlüğü korumaya dikkat eder. Danışmanların yaptığı iş, az önce saydığım sıfatlar arasında analist programcının yaptığı işe yakındır; ne var ki danışmanlar, genelde program yazmaz.
Programcılar ise, danışmanların ortaya çıkardığı plan çerçevesinde gerekli kodlamayı yaparak uygulamaları ortaya çıkarır. Daha önce benzer projelerde çalışmış tecrübeli programcılar, analiz safhasında da yer alırlar ve nispeten tecrübesiz programcılara kendi üzerlerindeki işleri delege edebilirler. Bu noktada tecrübeli programcılar analist programcı rolünü üstlenirken, tecrübesiz programcılar developer rolünü üstlenir.
Ortaya kurumsal bir program çıkartmanın birtakım işi olduğunu ve aslında kod yazmaktan çok daha fazlasını gerektirdiğini her zaman hatırlayın.
Büyük projelerde, proje yöneticisine bağlı olarak çalışan bazı sorumlular da atanabilir. Örneğin büyük bir projenin insan kaynakları ayağıyla ilgilenen 5 danışman varsa, onları yönetmek üzere insan kaynaklarından sorumlu (ve tecrübeli) tek bir danışman daha atanabilir. Bunun gibi, programların doğru bir şekilde yazılmasından sorumlu olarak yazılım ekibinin başına bir takım lideri de atanabilir. Bu takım liderinin yaptığı iş, az önce saydığım sıfatlar arasında yazılım mühendisinin yaptığı işe oldukça yakındır.
Yeni bir insanla ilk kez tanıştığımda, sohbetin bir noktasında bana ne iÅŸ yaptığım mutlaka sorulur. VereceÄŸim cevap ise, karşımdaki kiÅŸinin biliÅŸim sektörüne ne kadar yakın olduÄŸuna göre deÄŸiÅŸiklik gösterir. EÄŸer teknolojiye uzak bir kiÅŸi söz konusuysa, ona “programcı” olduÄŸumu söylemem genelde yeterli olur. Buna karşılık, aynı sektörde yer aldığım bir kiÅŸiye daha ayrıntılı bir cevap vermem gerekecektir.
“Programcılık” kelimesiyle genellenen meslek grubu, aslında kendi içinde birçok farklı bölüme ayrılmıştır. “Programcı” olduÄŸunu söyleyen iki kiÅŸi, gerçekte birbirinden oldukça farklı iÅŸlerle ilgileniyor olabilir.
Peki, “Ben programcıyım” diyen biri aslında tam olarak ne yapıyordur? Programcılık mesleÄŸini seçen biri, masasının başına geçtiÄŸinde nelerle uÄŸraşır? Bu sorunun cevabını, iÅŸ ilanlarında en çok rastlanan sıfatlara göre bir gruplama yaparak vermek istiyorum.
Analyst Programımer (Analist Programcı)
Genellikle ticari ÅŸirketlere yönelik iÅŸ uygulamaları geliÅŸtiren kiÅŸilerdir. Bir analist programcının ilk görevi, müşterisinin iÅŸ süreçlerini takip etmek ve ihtiyaçlarını tam olarak anlamaktır. Bu aÅŸamadan sonra, “olan” ve “olması gereken” durumu analiz ederek, arada köprü görevi görecek çözümü tasarlar. En son aÅŸamada, kabul edilen çözümün programlamasını yapar ve analiz sürecinde ortaya çıkan senaryoların testlerini yürütür.
Korkmayın! Projelerde bu işlerin hepsini birden tek bir kişi yürütmemektedir. îşler, projenin büyüklüğüne bağlı olarak oluşturulan bir ekip tarafından yürütülür.
Genellikle işe yeni başlayan bir analist programcı, analizden ziyade kodlama ve test aşamalarında görev alır. Proje ekibinin ilgili üyeleri tarafından sürdürülen analizler sonucunda ortaya çıkan ihtiyaçlar, programcıya spesifikas-yonlar halinde verilir ve ortaya bu doğrultuda bir program çıkarması beklenir.
Zaman içerisinde tecrübe kazanan bir analist programcı, hem analiz, hem de programlama işini birlikte yürütmeye başlar. Daha ileri aşamalarda programcılık görevini yavaş yavaş başkalarına devreder ve daha çok analiz ve proje yönetimi gibi işlerle ilgilenmeye başlar.