Skip to content

Social Network Badges

Posts Tagged ‘yazılım ’

3G vb. teknolojiler, yeni ve daha akıllı cihazlar, sektörün devlerinin pazar paylarını kaybetmemek adına yaptıkları donanım ve yazılım yatırımları mobil Internet’in hızla yayılmasına ve bir mobil yaşam tarzının oluşmasına sebep oldu. Sosyal ağların ve özellikle Facebook ve Twitter’in getirdiği sürekli merak ve takip isteği bu yaşam tarzını iyice yerleştirdi. Artık iş hayatı da, eğlence de avuç içi kadar ekranlarda yaşanıyor.

Yeni nesil akıllı telefonlar hayatımıza “mobil uygulama” kavramını da soktu. iPhone’un çıkışıyla yazılım dünyasının seyrini değiştiren mobil uygulamalar, geliştiricileri ve şirketleri radikal kararlar almaya zorladı. Mobil uygulama geliştirme firmaları kuruldu, binlerce geliştirici kariyerini mobil uygulamalara yönlendirdi, mobil uygulamalara yönelik projeleri yöneten ajanslar ortaya çıktı. Bir çok kurumsal şirket kullandığı finansal uygulamaların mobil sürümlerini geliştirme yolları aramaya başladı. Araştırma kuruluşlarının raporlarında 2015 yılı itibariyle 25 milyar dolarlık bir mobil uygulama ekonomisi oluşacağı tahmin ediliyor.

Serbest ekonominin bir sonucu olarak bu alanda da birden çok alternatif ortaya çıktı. Google’ın ücretsiz Android işletim sistemi telefon üreticilerince tercih edilince, pazar payı hızla Apple platformunun önüne geçti. Microsoft ve Nokia yerlerini kaybetmemek adına güçlerini birleştirip Windows Phone işletim sistemli cihazlar üretmeye başladı. RIM firması iş dünyasında lider olduğu Blackberry cihazlarının özelliklerini ve çeşitlerini arttırarak hakimiyetini koruma derdine düştü. Samsung’un Google’a bağımlı kalmamak adına geliştirmeye çalıştığı Bada işletim sistemi varolma mücadelesi veriyor.

Peki, mobil yazılım işinde yer almak istiyorsanız bunların hangisine uygulama geliştireceksiniz? Hepsine birden geliştirecekseniz; tek tek donanım ve yazılım yatırımları yapıp, her biri için işgücü mü yetiştireceksiniz?

Mobil telefonların yanında, dokunmatik tabletlerin özellikle iş dünyasında kullanımı hızla artıyor. Uygulama geliştirirken tabletlerin boyutlarını da dikkate almanız gerekiyor. Aynı uygulamanın hem telefon hem tablet sürümlerini mi geliştireceksiniz?

Bu sorular mobil işletim sistemi pazarına yeni oyuncular girdikçe daha çok artacak. Dolayısıyla kariyerini mobil alanda devam ettirmek isteyen yazılımcıların, yazılım şirketleri ve kurumsal kullanıcıların doğru yatırımları yapması önemli hale geliyor.

Önünüzde birkaç alternatif var:

  • Sadece bir platform için uygulama geliştirmek: Bireysel geliştiriciler ve küçük yazılım şirketleri için tercih edilebilir bir seçenek… Ama aynı uygulamanın farklı platform için geliştirme ihtiyacı olduğunda bir dezavantaj haline geliyor.
  • Her platform için ayrı uygulamalar geliştirmek: Bu seçenek, Apple iOS uygulamaları için Mac bilgisayarlara ve Objective C bilen elemanlara sahip olmak, Android uygulamaları için Java ve Android SDK bilmek, Windows Phone için C# yatırımı yapmak demek… Eğer işi mobil yazılım geliştirmek olan bir firmaysanız, tercih edilebilir seçeneklerden biri… Ancak maliyeti yüksek…
  • Tüm platformlar için ortak yazılım geliştirmek: Kulağa hoş gelen ancak kendi zorluklarını içinde barındıran bu seçeneğin önündeki en büyük engel, cihaz ve işletim sistemi üreticilerinin ortak bir paydada buluşmuyor olması. Örneğin, Apple 2010 yılı ortalarına kadar Objective C dışında yazılan uygulamaların App Store’da yer almasına onay bile vermiyordu. Ayrıca, cihazlardaki GPS, sensörler vb. donanım özelliklerinin hepsini ve cihaz farklılıklarını desteklemek başlı başına bir problem… Yine, ortak uygulamanın hangi teknoloji ve dillerle geliştirileceği de bir başka sorun…

Uygulama geliştirme yöntemini ve platformu seçmek tabiri caizse buzdağının görünen yüzü… Eğer oyun ve eğlence uygulamaları geliştirecekseniz, çok kapsamlı bir özellik listesine ihtiyacınız olmayacaktır. Ama iş dünyası ve kurumsal mobil uygulamalar için; normal fonksiyonların yanında Internet’e bağlı olunmayan zamanlar için offline depolama, güvenlik ve erişim yönetimi,  raporlama ve loglama, merkezi veritabanlarına bağlantı yönetimi, web servisleri gibi özellikleri de dikkate almanız gerekiyor.

Bir diğer süreç de geliştirilen uygulamaların yayınlanması… Apple, (kurumsal iç dağıtım hariç) iOS uygulamaları için App Store dışında kuruluma izin vermiyor. App Store’da bir uygulamanın yayınlanması ise ancak belli kriterleri sağlamak ve aşamaları geçmekle mümkün oluyor. Android uygulamaları için resmi mağazası Market dışında bir çok uygulama mağazası var. Ayrıca uygulamaları direkt olarak yüklemek de mümkün… Ama bu durum da versiyon yönetimi sorununu beraberinde getiriyor.

Yukarıda bahsettiğimiz alternatiflerden ilk ikisinden birini tercih edenler, üreticilerin kendi geliştirme araçlarını kullanarak bu sorunların üstesinden gelmeye çalışıyorlar. Daha farklı yöntemler arayanlara yardımcı olmak açısından bir sonraki yazıda “tek uygulama, çok platform” çözümünü sağlayacak uygulama geliştirme çatılarını (framework) inceleyeceğiz.

11 Kasım 2011

Internet | Programlama

Programcıların zaman tahmin yeteneği çok kötüdür. Neredeyse tüm yazılım projeleri tahmin edilenin iki hatta bazen üç, dört ve fazla katı zamanda tamamlanır. Çünkü;

  • Programcılar hesaplama yaparken aslında çok zaman alan toplantıları ve kodlama dışı aktiviteleri dikkate almazlar.
  • Programcılar projede bir değişiklik isteği, bu isteğin onaylanması vb. süreçlerin yavaşlığını hesaba katmazlar.
  • Programcılar her zaman aslında yazılması istenen ürünün ne olduğunu tam anlamazlar. Hatta bazen bir prototip yazıldıktan sonra yaklaşımın yanlış olduğunu, herşeyin baştan yazılması gerektiğini anladıkları bile olur 🙂
  • Eğer geliştirilen proje her zaman yapılandan farklı bir yapıda ya da kategorideyse, programcılar öğrenme ve adaptasyon sürecini hesaplayamazlar.
  • Programcılar, bir ürünün gerçekten hatasız çalışır hale gelmesinin gerektiği süreyi hesaplamazlar. Halbuki bazen hata düzeltme süreci geliştirmeden çok daha uzun sürer.

Programming from the Ground Up (Jonathan Bartlett ) kitabından

5 Ağustos 2008

Programlama

Bu yazı Bilgisayar mühendisi ne iş yapar? adlı çalışmanın ilk bölümü…

Bilgisayar mühendislerinin en bilinen çalışma alanlarından birisi yazılım sektörüdür.

Yazılım geliştirme işi genelde adına “Yazılım yaşam döngüsü” denilen bir süreç içerisinde yürür. Bilgisayar mühendisleri planlama, analiz, tasarım, kodlama, test/kalite yönetimi ve kurulum gibi aşamalardan oluşan bu sürecin her tarafında yer alabilirler.

Bazen aşağıdaki pozisyonlar için ayrı insanlar çalışabildiği gibi, bazen de bir kişi pozisyonlardan birkaçının işini yapar.

Planlama / Analiz

İş Analisti

Müşterilerin ihtiyacını anlamaya yönelik çalışmalar yapan pozisyondur. Şurada anlatıldığına göre;

İş analisti, proje yaşam döngüsünün daha çok proje imza öncesi ve proje başlangıç aşamasında rol alır. Bu kişiler, yazılıma özel gereksinimlerden daha çok yapılacak işe özel ihtiyaçları belirler.

Burada “ihtiyaç” dememin de özel nedeni var. Bunlar müşterinin “ihtiyaç” duyduğu ama hala gereksinime dönüşmemiş haldedir. Şöyle örnek vereyim: Bir kişinin arabaya ihtiyacı olur. İş analisti sadece bu kişinin araba ihtiyacını ortaya koyar. “Adam araba istiyor” der geçer. Sonra gereksinim analisti, bu kişinin hangi marka, ne özelliklerde, ne tip arabaya ihtiyacı olduğunu belirleyerek arabanın “gereksinimlerini” ortaya koyar.

Sistem Analisti

Yazılım dünyasında sistem analistleri, kullanıcılardan ya da iş analistlerinden gelen bilgileri kullanarak geliştirilecek yazılım veya çözümün yapısını belirler. Gerekli işlem adımlarını ve aşamalarını hazırlar. Yani sadece ihtiyacı değil, ihtiyaca göre çözümü üretir.

Sistem analisti genel olarak ise tüm bir bilgi işlem sistemini tasarlayıp ihtiyaca göre çözümler öneren kişidir.

Tasarım

Yazılım Tasarım Uzmanı

Yazılım tasarımı, altyapı bileşenleri dahil tüm yazılım yapısını planlamak demek. Büyük yazılım şirketlerinde sadece yazılım tasarımı ile görevli mühendisler bulunur. Bu mühendisler kod yazacak kişilere ihtiyaçları olan yapıyı hazırlar. Yazılım geliştirme işini hızlandıran “tasarım şablonlarını” tavsiye eder. Gerekirse yazılımın bir prototipini hazırlar.

Yazılım Modelleme Uzmanı

UML denilen modelleme ve diyagram çizme dilini kullanarak yazılımın işleyişini tanımlar. Hatta programı şekiller (diyagramlar) kullanarak baştan sona yazarlar. Modellemesi doğru yapılmış bir yazılımın hem geliştirilmesi, hem bakımı hem de dokümantasyonu daha kolay olur. Bugün Rational Rose gibi yazılımlar kullanılarak UML diyagramları ile kod parçacıkları kolaylıkla ilişkilendirilebiliyor.

Geliştirme

Programcı / Geliştirici / Yazılım Uzmanı

Programlama dillerini ve teknolojilerini kullanarak ürün geliştiren kişidir. İşin ve firmanın büyüklüğüne göre bazen tüm yazılımı geliştirir, bazen sadece kendisine verilmiş bölümü hazırlar. Programın bütününe hakim olmadığı durumlarda, sistem analistinden ya da proje yöneticisinden destek alır.

Yazılım Mühendisi

Yazılım Mühendisliği aslında genel bir kavram. Bir yazılım mühendisi yazılımla ilgili tüm aşamalarda bulunabilecek özelliklere sahip kişidir. Hem analiz, tasarım hem de kodlama aşamalarının teorisini bilir, uygulamalarını yapabilir. Yöneticilik pozisyonlarına gelebilir, altında programcı ve analistler çalıştırabilir. Sektörde en çok kullanılan ünvanlardandır.

Yazılım Mimarı / Yazılım Danışmanı

Yazılım mimarlarının sorumluluk alanları çok geniş ve zordur. Şurada yazdığı şekliyle;

Projede kullanılacak teknolojileri seçerler, proje metodolojisi ve süreçlerinde tavsiyelerde bulunurlar, uygulamanın genel tasarım ve yapısını oluşturur ve korurlar, projenin doğru tanımlanmasını sağlarlar, tasarımın dökümante edilmesi ve kodlama standartlarının belirlenmesi ile uğraşırlar. Proje yöneticisine teknik görev tahminlerinde, proje maliyetleri ve yararları konusunda yardım ederler. Zor teknik görevlerde programcılara yol gösterirler. Teknik personel seçimi ve işe alımında yönetime yardımcı olurlar.

Her alanda olduğu gibi yazılım alanında da yöneticilik pozisyonları var. Genelde geliştirme ekiplerinde belli bir süre çalıştıktan sonra yönetim kademelerine geçiş yapılır ya da yeteneğe ve politikalara bağlı olarak değişir.

Ekip Lideri / Proje Yöneticisi

Proje Lideri/Yöneticisi yazılım ekibini bir arada tutan ve zaman çizelgelerine uyulması için gerekli motivasyonu sağlayan yöneticidir. Ayrıca yönetim ile proje ekibi arasındaki bilgi alışverişini de sağlar. Bütçe konularında düzenlemeler ve maliyet analizlari konusunda yönetim kuruluna bilgi ve tavsiye verir. Yazılacak modüllerin ve arayüzlerin zorluk derecelerine göre zamanlarını tayin eder ve proje planı içinde yayınlar. Diğer proje ekipleri ile bilgi alışverişini sağlar ve kontrol altında tutar. Projedeki her türlü riski takip eder ve kaynaklarını ona göre tahsis eder. Riskleri belgeleyerek çözümler için onaya sunar. Onay sonucu çıkan kararları işleyerek sonuçları tekrar yönetim kuruluna bildirir. Kaynak

Program Müdürü

Türkiye’de çok fazla kullanılmayan bu terim karşılığını en fazla Microsoft’ta bulur. Program Müdürleri teknik konulardan daha çok yönetim işleri ile sorumludur. Proje yöneticilerini koordine edip raporlar alarak projelerin sağlıklı yürümesini sağlarlar ve üst yönetimi bilgilendirirler.

Test / Kalite Güvence

Yazılımda kalite güvence, kısaca yazılım projesinin standardlara uygunluğunu ve ihtiyaçları karşıladığını denetleyen çalışmalar demektir.
Bilgisayar mühendisleri bu alanda da çeşitli görevler alır.

Yazılım Kalite Uzmanı

İhtiyaçların ve geliştirilen çözümün doğru belirlenip belirlenmediğini, yazılımın belirli standardlarda olup olmadığını denetleyen kişidir.

Yazılım tasarımı ve/veya yazılım testi konularında bilgi sahibidir. Genel kalite yönetim sistemi standartlarını, uluslararası yazılım mühendisliği standartlarını ya da süreç olgunluk modellerini (CMMI, SPICE, v.b.) bilir. Geliştirilen yazılımın bunlara uygun olarak yürümesini sağlar.

Test Uzmanı / Test Mühendisi

Test uzmanı/mühendisi yazılımın test edilmesinde fiilen çalışan kişidir. Yazılım hatalarını tespit etmek, hataların sebepleri ve sonuçları ile ilgili süreci yönetmek, test kapsamının oluşturulması, test senaryolarının hazırlanması gibi işleri yürütür.

Birim testi, sistem testi, entegrasyon testi, kullanıcı kabul testleri gibi kavramları bilir ve uygular. Sonuçlara göre dokümantasyon hazırlar.

Test mühendisliği hakkında şurada güzel yazılar var.

Test Yöneticisi

Test yöneticisi test ekiplerini koordine eden, gerekli kalite standartlarının sağlanması için çalışan, yazılım geliştirme ve diğer ekiplerle koordinasyonu sağlayan pozisyondadır.
Yazılımın testi geçip geçemediği, kabul edilmeye hazır olup olmadığı kararlarını verir.
Test sürecini kolaylaştıracak, otomatize edecek çözümleri uygular.

Konfigürasyon Yöneticisi

Yazılım geliştirme süreci boyunca üretilen bütün dokümanların, kodların, web uygulaması ise web sayfalarının, test scriptlerinin versiyonlarının kontrol edilmesi gerekir. Yazılım sürümleri içerisinde hangi hataların düzeltildiğinin hangi değişikliklerin yapıldığının izlenmesi gerekir. Ürün haline gelmiş projelerin satışa hazırlanan versiyonlarının belirlenmesi ve yönetilmesi gerekir.

İşte konfigürasyon yöneticisinin işi bunları takip etmektir.

  • Günümüzdeki bilgisayar mühendisliği dersleri yeterince sıkı değil, iyi düşünme ve problem çözmeyi teşvik etmiyor. Aksine derslere katılımı kolaylaştırmak için içerik daha da basitleştiriliyor.
  • Baba mı, Java mı

  • Mesela, ilk dil olarak Java’nın öğretilmesi bu süreci hızlandırıyor. Özellikle de grafik arayüzlerinin kullanımı öğrencileri arka plandaki kaynak kodu anlamadan sürükle bırak kolaycılığına itiyor.
  • “Matematik eğlenceli değil, derslerdeki oranını düşürelim. Algoritma zor, gerek yok. Hazır kütüphaneler zaten var. Sonra insanlar görsel güzelliğe önem veriyor. Komut satırını boşverin” anlayışı yerleşiyor.
  • Eski yazılımcılardan biri yeni mezun olmuş çalışanına hatayı bulmak için “call stack” a bakmasını söylediğinde “böyle bir şey duymadım” dediğini anlatıyordu.
  • Bir Java kitabı alıyorsunuz, 1200 sayfa. Ama içinde 300 sayfa komutlar kalan 900 sayfa hazır kütüphaneler… Bu yazılım mühendisliği değil, tüketici düzeyi programcılık…
  • Eğer öğrenciler okula gelip, Java’yı, hazır kütüphaneleri ve web programcılığını öğrenip bırakacaklarsa, bu bir işe yaramaz. Yetenek gerektirmeyen işleri, daha ucuza çalışılan ülkelere kaydırırsınız, olur biter.
  • Yani, bugünün hazır kod programcısı, yarın pizzacı olur.
  • Yazılım mühendisi olacak kişinin zor problemlerle uğraşmaktan zevk alması, ilginç algoritmalar üretmesi, zekice veri yapıları oluşturabilmesi lazım. Problem çözmekten sıkılan adam bizim aradığımız adam değil.

Kısaltarak çevirdiğim bu yazıda, New York Üniversitesi’nin kıdemli profesörlerinden Robert Dewar Amerikan öğrencilerinden bahsediyor. Ancak sanki yazılanlar bize pek yabancı değil. Ne dersiniz?

25 Ocak 2008

Programlama