Yazılım Mühendisliği Nedir?

Rutkay Karabulak
5 min readFeb 26, 2019

--

Photo by: Movade pics

Eskiden uzmanların gelecekte popüler olacak ‘x’ adet meslek makalelerinde okuduğum şimdi ise kendimi bir öğrenci olarak içinde bulduğum Yazılım Mühendisliğini bir 3. Sınıf öğrencisi olarak elimden geldiğince anlatmaya çalışacağım.

Yazımın, bu bölümü tercih etmeyi düşünen ve lise eğitimine devam eden genç arkadaşlarıma (veya mezunlara) yada hali hazırda bu bölüme ilgi ve alakası bulunan, hayatını bu yönde ilerletme isteği içinde olan kişilere yararlı olmasını umut ediyorum.

İsterseniz öncelikle biraz terminoloji ile başlayalım, yazılım ve mühendis kavramlarına hakim olmadan(en azından genel bir fikre sahip olmak açısından) bu derin alana girmenin pek mantıklı olacağını düşünmüyorum. İlgilendiğiniz alanın kökenlerine inmenin her zaman faydalı olacağına inanmış birisiyim bu sayede o alanla aranızda karakteristik bir uyumun olup olmadığını veya o alana ait disiplinleri görme açısından kelimelerin anlamlarının büyüleyici olduğuna inanırım.

Bu bölümde her kesimin anlayacağı şekilde basit ve anlaşılır şekilde yalın bir anlatım yapmaya çalışacağım. Keep it stupid/simple :)

  • Yazılım Nedir?

Son kullanıcının(yazılımı kullanan kişi) isteklerini ve gereksinimlerini karşılayan, beklenen şekilde sonuç üreten ve bilgisayar donanımlarını optimum bir şekilde kullanıp yine o donanımlarla uyumlu bir şekilde çalışan bilgisayar programı diyebiliriz.

  • Mühendislik Nedir?

Tanımı en zor alanlardan biri olarak değerlendirmek mümkün, günümüzde Mühendisliğin sayısız alanının bulunması ve her birinin kendine has disiplinlere sahip olması bu alandaki tanımları biraz zorlaştırmakta. Fakat en genel hattıyla Mühendislik ;

Elindeki kaynakları(Zaman ∞, bütçe €, insan gücü vs) en iyi şekilde kullanmayı hedefleyip bu kaynakları kullanarak sistemli ve programlı çalışma sonucu hayatı kolaylaştırmayı hedefleyen bir ürün ortaya koyma disiplinine mühendislik dememiz mümkün. Eğer planlı ve programlı çalışmayı seven, iradesine güvenen ve emeğinin karşılığında ortaya çıkan ürünle birlikte mutlu olmaktan haz alıyorsanız doğru yerdesiniz. Peki mühendisliği yazılım ile bağdaştırmamız gerekirse? Ne tür bir bağlantı kurabiliriz? Yazılımı programlama mantığından çıkarıp mühendisliğin getirdiği kusursuz yapı ile birleştirmek ? İşte tüm bunların cevabı Yazılım Mühendisliğinde saklı.

Yazılım Mühendisliği ile Biglisayar Mühendisliği arasındaki fark nedir?(Yazılım mühendisliğini alışılmışın arasında yeni çıkan bir dal olarak görebiliriz:)

Sıkça sorulan sorulardan biride, Yazılım Mühendisliği ile Bilgisayar Mühendisliği arasındaki fark nedir?

En genel hattıyla donanım derslerindeki ağırlık diyebiliriz, Bilgisayar Mühendisliği öğrencileri Yazılım Mühendisliğine nazaran daha fazla donanım dersi almakta. Aradaki bu farkı lütfen yanlış anlamayın ne Yazılım Mühendisleri donanım dersi almamazlık yapıyor ne de Bilgisayar Mühendisleri programlama derslerini almamazlık yapıyor. Sadece ikisi arasındaki oran farklı.

Mimari mi? Bildiğimiz mimari mi yahu bu?

Yazılım Mühendislerinin bir diğer gördüğü alanda gördükleri Mimari dersler ve yazılım tasarım prensipleri/kalıpları, yazılım geliştirirken yapılmaması gereken hususlar, yazılım geliştirirken sürecin yönetilmesi, yazılım geliştirirken süreçlerin iyice analiz edilip dökümante ediliş sistemi, yazılım mühendisliği genel ahlakı gibi konular. Buradaki mimari dersler bir Yazılım projesinin mimarisini kapsamakta :) Gerçekten mimarlıkta olduğu gibi bir yazılım projesinde de olmazsa olmaz mimari kurallar vardır bunları bir binanın inşası gibi birbirinden ayrı alanlar gibi görebiliriz fakat bu alanlar birbirlerine bağlıdır ve etkileşimli biçimde sürekli bir veri alış-verişi içerisindedirler. Yazılım Mühendislerini programcılardan ayıran en önemli kriterlerde bunlardır, programcılar spaghetti coding (tek sayfaya tüm programı yazma) edasıyla tek sayfada işi bitirirken Yazılım Mühendisleri sürece plan ve program dahilinde bakar başlanılan/bitirilen her işi dökümante eder, süreçlerin anlaşılabilir incelenebilir olması adına her şeyi kayıt altına alır. Raporları inceler, test mühendisleri tarafından test edilen hataları düzeltir vs… Bunlar sadece verebileceğim bir kaç örnek bu dünyaya girdiğiniz zaman bir Yazılım Mühendisinin sorumluluklarının üzerinde çalıştığı projenin türüne göre sınırlarının olmadığını daha net göreceksiniz.

Kısacası aradaki farkı konuşacak olursak Yazılım Mühendisliği kendini donanımdan tamamen soyutlamadan, odak mantığı Yazılımların geliştirilişi ve bu süreçte yaşanan tüm olayları sistematik bir şekilde ele almaya odaklanmış durumda, bölümde alınan derslerde tamamen bu yönlerde(Yazılım Mühendisline Giriş, Yazılım Yapımı, Yazılım Mimarisi gibi dersler sadece ufak bir kaç örnek)

Genel mantığı okuyuculara aktarabildiğime inanıyorum tekrar bir özet geçelim. Nedir bu Yazılım Mühendisinin olayı ? ►‘PLAN VE PROGRAM’ dahilinde süreçleri iyi analiz ederek müşterinin gereksinimlerini, zamanı, bütçeyi aşmadan yazılımı başarılı bir şekilde hayata geçirmek bizim olayımız !◄

Yazılım hayatınız boyunca ‘bütçe’ ve ‘zaman’ kelimelerini oldukça duyacaksınız çünkü yazılım projelerinin başlıca sorunu sürekli maliyet ve zaman aşımı. Ha tabii birde sürekli değişen müşteri isteklerini unutmayalım :) Eğer bir kaç yazılım şartnamesi inceleme şansınız olursa müşteri şirket ile yazılımı yapan şirket arasındaki kesin şart çizgilerini göreceksiniz. Havada kalmaması adına size bir kaç örnek vereceğim ;

Şirketler ve şartnameler

Verdiğim bu örnekte şirket olası bir arıza durumunda fiyatlandırmanın nasıl olacağını bildirmiş bakalım:

7.3. Destek Şekli ve Zamanlama : YAZILIM ŞİRKETİ, … Üniversitesi’nin mail ve telefon yoluyla arıza bildirimini takip eden 3(üç) saat içerisinde, doğal afet ve benzeri kitlesel engelleyici etkenler dışında; telefon, internetten erişim veya yerinde destek yöntemlerinden, … Üniversitesi’nin ihtiyacına ve problemin şekline en uygun müdahalenin karşılıklı mutabakatla belirlenmesi ile ilk müdahaleyi gerçekleştirecektir. YAZILIM ŞİRKETİ İlk 3 saat içinde müdahale etmezse , geciken her saat için 100 Euro tazminat ödeyecektir. Süresi içinde müdahale edilipte , 24 saat içinde arızanın giderilememesi halinde Orcun her saat başına 10 Euro tazminat ödeyecektir.

İş bu tazminat tutarı 7 gün içinde Üniversiteye nakden ödenir veya YAZILIM ŞİRKETİNİN alacağından mahsup edilir.

Bu örnekte ise ödemeye bakalım :

10. SÖZLEŞME BEDELİ VE ÖDEME

10.1. GELİŞTİRİLEN Sisteminin … Üniversitesi için 10.000 kullanıcılı lisans bedeli 50.000 EURO + KDV’dir. Sözleşme kapsamında eğitimler, veri transferleri ve uyarlama çalışmaları ile tanımı sözleşmenin 7. maddesinde yapılan destek hizmeti verilecektir. Ödemelerin Ytl yapılması durumunda Merkez Bankası döviz satış kuru esas alınacaktır.

10.2. … Üniversitesi, madde 10.1.’de tanımlanan sözleşme bedelinin %30’unu sözleşme tarihinde YAZILIM ŞİRKETİNE nakden öder. Ürünün kabul edilmemesi halinde peşin olarak ödenen bedel 7 gün içerisinde ihtara gerek olmaksızın … Üniversitesine iade edilecektir.

İncelediğiniz gibi yazılım şartnamelerinde kesin çizgiler projeye başlanmadan belirlenir bu sayede olası aksaklıkların önüne geçilir, hem müşterinin hemde yazılımı yapan şirketin mağduriyetinin önüne geçilmesi hedeflenir.

ÖZET

Genel bir yorum ile toparlayıp aklınızda bir modelin oluştuğunu varsayıyor mantığa hakim olduğunuzu kabul edip bir kaç öneri ile yazımı sonlandırmak istiyorum.

Aslında ben hep Yazılım Mühendisliğini her mühendislikten bir dal alıp bunu harika bir şekilde harmanlayıp ortaya kusursuza yakın yaratılmış bir disiplin olarak görmüşümdür.

Programcılardan sıyrılıp yazılım geliştirmeye bir mühendis gözüyle baktığınız gün, bundan kastım yazılım prensiplerini, kalıplarını, yapılmaması gereken tasarım hatalarını, mimari düzeni aldığınız eğitim sonrası benimsediğiniz gün hangi alanda çalıştığınızın hiçbir önemi kalmayacak. İster Web Teknolojileri üstüne yoğunlaşın, ister Mobil Teknolojiler üstüne, ister Yapay Zeka, ister Arayüz Geliştirme, ister Makine Öğrenmesi(Machine Learning) vs. Hangi alana yoğunlaşırsanız yoğunlaşın Yazılım Mühendisliğini benimseyip genel kurallarına hakim olduktan sonra yazılım geliştirmenin aslında aynı mantığa sahip olduğunu sadece teknoloji türünün farklı olduğunu anlayacaksınız.

Umarım yazım bu alanda kendini geliştirmek isteyen veya kariyerini, tercihini bu yönde kullanmak isteyen kişilere yardımcı olmuştur. Her konuya ufak ufak değinmeye çalıştım fakat yazıdaki genel amacım bu işi hayat tarzınızla kişiliğinizle benimseyip yapmanızı vurgulamaktı.

Okuduğunuz için hepinize teşekkür ederim yararlı olması dileğiyle, hepinize iyi çalışmalar diliyorum!

DN: Son kısımda verilen 2 adet sözleşme örneği kaynağı:

CBU Yazılım Sınama Dr. Öğretim Üyesi Emin BORANDAĞ tarafından sağlanmıştır.

--

--