İçeriğe geçmek için "Enter"a basın

Yazılım Geliştirme ve Bağıntılı Konular

Son güncelleme tarihi 10 Nisan 2022

Konuya başlamadan önce,

Bu yazıya başlarken, başlığı belirlerken ve konu içeriğini kafamda canlandırırken aklıma gelen her konu için sitem edeceğim bir yaşanmışlıkla karşılaştığımdan makaleyi sitemsiz şekilde bitirebilir miyim bilemiyorum. Bu sebepten serzenişlerimi hiç kimse üzerine alınmazsa sevinirim.

Bu yazı kimler için,

Öncelikle bir miktar bilgilendirmeyle birlikte, birkaç tane tanım yapmakta fayda var. Bu makaleyi, hali hazırda Türkiye’de yazılım geliştirme işiyle uğraşan veya bu işe heveslenmiş veya bu işten benim de içinde bulunduğum şekliyle ekmeğini çıkartan, acemisinden uzmanına herkesin okuyabilmesi için yazıyorum.

Biraz daha derine inelim,

Yazılım” kelimesi terimsel olarak hiçbir şekilde tek başına incelenemeyecek kavramlardan bir tanesi benim gözümde. Donanım-Elektronik ile olan bağıntısını, Tasarım ile olan bağıntısını, Mühendislik ile olan bağıntısını, Ticaret ile olan bağıntısını, Talep-Arz ile olan bağıntısını, Analiz ile olan bağıntısını, İstatistik, insani Alışkanlıklar, Eğitim , Yönetim, İletişim … (Gündelik hayatta ihtiyaç konumundaki neredeyse tüm kavramlar ve Bilim başlığındaki tüm alt başlıklar!) ve dahi en önemlisi Matematik özelindeki bağıntısını kavrayamamış zihinlerce kullanıldığında bu kelime, ne yazık ki sağladığı faydadan çok zarara sebep olabilecek sonuçlara gebe.

Nasıl mı?

3. Tekil Şahıs: Abi bana bir fikir geldi
Yazılım Geliştirici: Eeee!

3. Tekil Şahıs: Eeee’si var mı? yap da zengin olayım!
Yazılım Geliştirici: FesüphanAllah!

Yazılım geliştirme işine kenarından kıyısından bulaşmış veya merkezinde denilebilecek günümüz 60 yaş gurubu yazılım geliştiricilerin tümünü kapsayacak şekilde %90 diyebileceğim kitle, yazılım denince yukarıdaki diyaloğun kendisinde bir örneğini yaşamıştır dersem herhalde abartmamış olurum.

Kısa serzenişimden sonra biraz gerçeklik,

Ana konudan fazla uzaklaşmadan bu örneği verişimdeki sebebe geleyim, yazılım kelimesinin ve içerdiği kavramın neresinde olduğumuzdan bağımsız şekilde, bilgi eksikliği ve bağıntılı kabiliyet eksikliği neticesinde başlanılan iş çoğunlukla olumsuz bitmekte. Talep için Doğru tespiti, Doğru ekip, Doğru altyapı, Doğru tasarım, Doğru geliştirme ortamı, Doğru ölçekleme, Doğru proje yönetimi, Doğru zaman gibi birçok doğruyu bir araya getirmek gerek. Mesela Facebook çıkmadan önce de internet üzerinde birçok arkadaşlık sitesi vardı, hem de çok daha işlevsel!

Sistematik ve bilimsel olarak eldeki değeri kullanmak gerek yazılım işinde, bununla birlikte talep eden tarafın da ne istediğini, kimden istediğini biliyor olması gerek zannımca veya tersinir bakarsak duruma, ortaya çıkacak yazılımın hedeflemesi doğru yapılmalı daha en başından. Sahibinden ismindeki ticaret sisteminin geliştirilmesi için harcanan para miktarı, reklam bütçesinin yanında çerez parası kalmıştır şeklinde bir yorumum var site ilk yayın hayatına başladığı dönemde…

Birkaç tane tanım yapalım,

  1. Bilgisayar ve Donanımı :
    Temel tanımının yanında güncel yaşantımızda, akıllı telefonumuzdan hastanedeki yaşam destek ünitesine varana kadar, CPU, RAM, Depolama, Anakart, Monitör (ve daha bir çok çevresel birim) … gibi bileşenlerden oluşan, üzerindeki elektronik ekipman içerisinde gömülü veya çok kullanıcılı işleltim sistemleri ile ihtiyaca göre özellik kazandırılabilen (yazılım genel olarak burada!), cihazdır.
  2. Makine kodu :
    Bir CPU ile işlem yapılabilmesini sağlayan temel komut kümesi, her bir CPU tasarımının kendisine ait bir makine kod kümesi mevcuttur. assembly (6502, x86, x64, mips, arm, riscV, sparc64 …)
  3. Derleyici :
    Bilgisayar bileşenlerinden CPU ile uyumlu şekilde çalışabilecek makine kodu dönüşümünü yaparak o CPU üzerinde yazılan kodun çalışması için gerekli dönüşümü yapan yazılım.
  4. İşletim Sistemi :
    Bir bilgisayarın üzerindeki donanımlar ile iletişim kurabilen ve yazılımsal olarak bunların kullanılabilmesini sağlayan, etkileşimde bulunabilmemizi sağlayan yazılım.
    Ör: GNU/Linux (ve dağıtımları), Windows, Mac, Android, IOS, versiyonları ve bu makalenin konusu olmayan gömülü sistemler için tasarlanmış olan RTOS gibi.
  5. Platform :
    Bir işletim sistemi ve CPU ikilisine göre tasarlanmış bir bilgisayar sisteminin genel adı. Örneğin Mobile Platform, Desktop Platform, Embedded Platform gibi.
  6. Yazılım :
    Bir platform üzerinde, o platformun kapsamında özel bir ihtiyaca göre tasarlanan ve geliştirilen kod kümesi.
  7. Mühendislik :
    Bir işin sistematik, disiplinli ve ölçülebilir yaklaşım sergilenerek yapılması.
  8. Yazılım Mühendisliği :
    Bir yazılımın geliştirilmesi, işletilmesi ve bakımı için sistematik, disiplinli ve ölçülebilir bir yaklaşımın uygulanması; yani, mühendisliğin yazılıma uygulanması.
    [ IEEE : The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. ]

Sorulması gereken soru, yazılım gerekli mi?

pusula

400 yıl önce gerekli değildi, günümüz için nefes almak kadar gerekli. Nefes kadar değerli değil tabii ki ancak gerekli. Basit bir örneklemeyle şu anda kullandığımız internet temelleri ARPANET olarak 1969 yılında temelleri atılmış bir teknoloji, bilgisayarların çalışabilmesi için mini bir elektrik santraline ihtiyaç duyulan günlerden bahsetmeyeceğim merak etmeyin, şu anda 6 adet pil ile yaklaşık bir gün ayakta kalan dizüstü bilgisayarlar ile kullandığımız internet ile Dünya’nın diğer ucundaki bir kişi ile neredeyse zaman farkı olmadan iletişim kurulabilmekte.

Kavram olarak İletişim,

Şahsım adına söylemem gerekirse, geniş bir arazide kendi çiftliğimde yaşama hayali beni oldukça cezbediyor bir gün umarım sevdiklerimle bu hayalimi gerçekleştirebilirim. Hayallerden değilde günümüzden bahsedecek olursak eğer her günümüz ister istemez iletişim kurmakla geçiyor, pandemi sürecinde ise bu ihtiyaç yüz yüze iletişimden çevrim içi iletişime geçiş yaptı. Uyanık olduğumuz her an birileri ile iletişim halindeyiz.

Peki o zaman iletişim ne ve yazılımdaki yeri ne?

Biz insanlar nasıl ki dil ile belirli yöntemler kullanarak iletişim kuruyorsak, bilgisayarlar üzerinde çalışan yazılımlar da bilgisayara elektrik geldiği andan kullanıcı ekranında görüntü oluşmasına kadar her süreçte belirli standartlara bağlı şekilde sürekli iletişim halindedir. Bu iletişimin detayları başka yazıların konusu o sebepten daha sonra devam etmek üzere burada bırakıyorum.

iletişim

Bilgisayar üzerinde iletişime ufaktan giriş yaptık yukarıdaki tanımlar akış sırasına göre tanımlanmış durumda, Yazılım üzerinde çalıştığı platforma göre tasarlanır, kodlanır ve derlenir. Derleme işleminden sonra ortaya çıkan uygulama, geliştirilme amacına uygun şekilde sistem içerisindeki vazifesini gerekli donanımlar ile iletişim kurarak gerçekleştirir.

Kodlama mı? Dil mi? yazılım CPU üzerinde çalışmıyor muydu başkaca diller de mi var?

Bilgisayarlar geliştikçe ihtiyaçlara göre geliştirilen yazılımların çeşitliliği de oldukça fazlalaştı. Bu ihtiyaçlara dayalı olarak herhangi bir görsel ara birime ihtiyaç duymayan basit uygulamalardan, şu anda bu yazıyı bir web tarayıcı üzerinde hazırlayabilmemi sağlayan uygulamalara kadar temeli ve mantığı sabit olmakla birlikte sayısız yazılım geliştirme ortamı türemiştir.

Çok fazla başlık var ama ben 3 ana başlık altında yazılım geliştirme ortamlarından bahsetmek istiyorum,

  1. Masaüstü Yazılım Geliştirme
  2. Mobil Uygulama Yazılım Geliştirme
  3. Web Tabanlı Yazılım Geliştirme

Bu 3 başlığa dayanan bir çok alt başlık var ancak konuyu yüzeysel olarak anlatmak için bu üç başlığı kullanacağım. Detay bilgi de vermeden sadece kategori olarak isimlerini anamak istedim. Server-Client ilişkisi olmadan Web programlamadan bahsedemeyiz aslında ancak başlı başına bu yazıdan daha uzun tutacak bir yazı olduğundan sadece ismini anıp burada bırakıyorum.

Müşteri – Yazılım Geliştirici arası talep-arz,

Sitem etmeden burayı geçersem ne mutlu bana 🙂

Yazılımın temel tanımı ve birkaç bilgiden sonra gelelim ihtiyaç meselesine. Yukarıda 3 adet kategoriyi verme sebebim en çok ihtiyaç duyulan alanlar olması. Günümüzde ofis programları olarak nitelendirilen, metin editörü (word, writer), tablolama (exel, calc), sunum (powerpoint, impress) gibi işleri hızlı şekilde ve basitçe yapmamızı sağlayan masaüstü uygulamalar, Whatsapp gibi mobile uygulamalalar, bu websitesinde bu yazıyı okumanızı sağlayan ve size ulaştıran web uygulamaları gündelik hayatımızın bir parçası ve belirli durumlarda olmazsa olmazı konumunda. Mesela e-devlet parolası olmayan var mı aramızda?

İhtiyaç türedikçe belirli altyapılar kullanılarak uygulamalar geliştiriliyor ve bu uygulamaların belirli bir kısmı artık hayatımıza yön verme konumunda. (Karşılıklı takipleşmedi diye unfollow edenler el kaldırsın 🙂 )

Burada kalkıpta programlama, yazılım geliştirme üzerine dil kıyaslaması yapmayacağım,

Her programlama dili ve etiketleme dili kendine has kullanım alanına sahip olmakla birlikte işin temelinde yatan kavram yakalanırsa sonraki adım dil sentaksını öğrenmekten geçiyor, bir dili uzunca bir süre kullandıktan sonra benim bir zamanlar dediğim gibi ek referansa ihtiyaç duymadan PHP kodlayabiliyorum diyebiliyorsunuz. Son 3 yıldır Linux sistem yönetimi üzerine ağırlık verdiğimden ne yazık ki bu özelliği kaybettim ancak temel sapasağlam yerinde. Kısacası dil fanatikliğine lüzum yok!

Müşteri ne ister, yazılım geliştirici ne verir?

Yazılım geliştirici, talep edileni ürün olarak ortaya koymaya çalışır, genel olarak kullanılan bir örnek var ben de kullanacağım elindeki tek araç çekiç olan birisi her probleme çiviymiş gibi yaklaşır. Böyle arkadaşlar işin başlangıcında çokça bulunmakta, bu durumun ortaya çıkmasında ne yazık ki iki ana etken görüyorum. 1. etken bu arkadaşlar yazılım geliştirme eğitimlerini alırken standardizasyon kelimesinden ve içerdiği kavramdan oldukça uzak yetişmiş kişiler olmakla birlikte,
2. etken olarak kendilerinden yazılım geliştirme isteyen kişilerin, işverenin yazılım geliştirici arkadaşı en basit işte bile, aslansın sen, elinden her şey gelir diyerek toz pembe bir Dünya içerisinde kendilerini geliştirmekten uzak kalacak bir döngüde kalmasına sebep olması (asıl maksat sadece kendilerine ait mekanizmada ufak bir dişli olarak fayda sağlayan çalışan profili) .
Bu etkenler dışında da eklenebilecek değişkenler vardır ancak bunlar benim en fazla karşılaştıklarım arasında.
Tam tersi de tehlikeli olmakla birlikte, “Her işin jokeri olacağına tek işin uzmanı ol!” sözü aklıma geliyor. Burada bahsettiğim “tek iş” ile yalnızca HTML kastetmediğimi anlatabilmişimdir umarım. Yukarıda 8 adet tanımı kafasında şekillendiremeyen kişinin hangi dili kullandığı pek te önemli değil diye düşünüyorum.

Müşterinin isteğini (müşteri ne istediğini bilmese bile) doğru stratejiyle işini bilen yazılım geliştirici(ler) kolaylıkla sonuçlandırıp, teslim edebilir. Teslim edilme kısmının tamamlanması anlaşılan bedelin, ücretin yazılım geliştiriciye verilmesi ile kökten bağlıdır!

Standardizasyon dedik, o ne?

MIL-STD-498
ve bağıntılı standartlar, bu başlıkları içeren kavramlar ve standartları diyorum, IETF (RFC), IEEE, ISO … yeri geldikçe nasipse ek yazılar şeklinde bu kavramlar için de yazı hazırlayacağım, yazıları buradan takip edebilirsiniz, eğer yazı yoksa paniklemeyin taslak halindedir veya planlanmıştır.

Yazılım Yaşam Döngüsü,

Bundan bahsetmezsek olmaz, nedir yazılım yaşam döngüsü başlıklarıyla bakalım,

  1. Planlama :
    Gelen talebe göre yani ihtiyaca göre yazılım, yama veya ek özellik planlanır,
  2. Analiz :
    Planlanan yazılım, yama veya ek özellik kullanılan dil, altyapı, kullanacak kişiler, kullanılacak süre, bunların ölçeklemesi gibi durumlara, senaryolara göre analiz edilir ve geliştirme sürecinin ihtiyaçları ortaya çıkar.
  3. Tasarım :
    Belirlenen ihtiyaçlara göre yazılım, yama veya ek özellik tasarlanır,
  4. İmplemente etme :
    Tasarlanan yazılım, yama veya ek özellik çalışacak şekilde sisteme teslim edilir,
  5. Test & Entegrasyon :
    Sistem üzerinde çalışır durumdaki yazılım, yama veya ek özellik hatalara karşı test edilir ki amacına, talebe uygun çalışıp çalışmadığı tespit edilebilsin, çalışıyorsa 6. adımdan devam, çalışmıyorsa silsile şeklinde bir üst adıma geri dönmek gerek.
  6. Bakım :
    Her şey gibi yazılım da eskir, yazan kişiden dolayı değil kullanılan teknolojiler dikey şekilde gelişmekte bu sebepten yazılan yazılım da sürekli olarak bakıma alınmalı (ihtiyaç olmasa bile!). İhtiyaç olmasa bile kısmını bastırarak söylemek istiyorum çünkü;
    Çok güzel para ödediğiniz ve geçen 5 deadline sonrasında yayına alarak kullandığınız güzelim yazılımınız v1.0.16 olarak tüm ihtiyacınızı görebiliyor olsa da üzerinde çalıştığı sisteme eğer majör 4 versiyon eklendiyse alabileceğiniz tek bir karar kalır o da “hadi sıfırdan yazdıralım” şeklindedir. Bu olayla geçenlerde karşılaştığım için uzatıyorum, Debian 7 üzerinde çok ta güzel çalışan sisteme sahip olan sevdiğim bir tanıdığım yaşam döngüsü bakım adımına pek te değer vermemiş olacak ki Debian 11 versiyon çıktıktan sonra, kullanılan sistemin tüm güvenlik yamaları ve resmi desteği bittikten sonra, sağdan soldan düzenleyerek Debian 9 üzerinde çalıştırmayı başardık, yazılımlarında bir problem var mı? hayır tabii ki.
    Bakım önemli!

Sonuç olarak;

Burada değinmek istediğim ama her biri bu konu kadar hatta daha da uzun olacak birçok konu başlığı aklıma geldi ama o konuları da detaylandırmak istediğim, hakkını vermek istediğim için başka yazılara bırakıyorum.

Yazılım geliştirme hakkında yüzeysel olarak ele aldığım bu yazı, ana başlıklara yüzeysel olarak dokunmaya çalıştığım bir yazıdan ibaret, umarım kafanızda yeni fikirler oluşmasına sebep olmuşumdur.

Hem yazılım geliştirme ihtiyacı olan müşterilere hem de yazılım geliştirme işindeki kardeşlerime ve büyüklerime sevgi ve saygılarımla. Allah’a emanet olun.

Yorumlar kapatıldı.