Yazılım Mühendisliği ve Bilgisayar Mühendisliği çok mu farklı?

Kubilay Örcün
5 min readDec 27, 2020

--

Günü çok sıkışık olup da yazıyı tamamlamaya vakti olmayanlar için önden cevap verelim; farklı ama çok değil.

Hiç mi fark yok? Biraz var.

İkisinin de olduğu bir okuldaysan bu fark önemli mi? Hayır.

Herhangi birini okusam format atmayı öğrenir miyim? Hayır.

Yazının kalan kısmında da aslında bu sorulara verdiğim cevapların arkasını doldurma çabama şahit olacaksınız, sonuncusu hariç. Format kırmızı çizgimdir. Her şeyden önce kavram karmaşasını biraz olsun ortadan kaldırmak için wikipedia’daki tanımları biraz kurcalayalım.

Yazılım mühendisliği, yazılım geliştirmeye yönelik mühendislik yaklaşımlarının sistematik uygulamasıdır.

Bilgisayar mühendisliği, bilgisayar donanımı ve yazılımı geliştirmek için gerekli olan çeşitli bilgisayar bilimi ve elektronik mühendisliği alanlarını birleştiren bir mühendislik dalıdır.

Buradaki tanımlardan yola çıkarak ilk soruya verdiğim cevap biraz daha anlam kazanıyor aslında. Görüldüğü gibi bilgisayar mühendislerinin de yazılım mühendislerinin mesleklerinin ortak noktaları yazılım yapmak ve geliştirmek. Fark olarak bilgisayar mühendisliği tarafında lisans eğitimi donanım (“hardware”) dersleri ile soslanmışken, yazılım mühendisliği tarafında yazılım süreçlerinin geliştirilmesi ve iyileştirilmesi gibi dersler ile soslanmış. Birazdan bu derslerin ne tür avantajlar ve dezavantajlar yarattıkları konusuna daha detaylı örneklerle değineceğiz ama günün sonunda sos dedik, ana yemeği güzel kotardıktan sonra diğerini öğrenmek de bir seçenek.

Hazır lisans eğitiminden ve derslerden bahsetmeye başlamışken bunun üzerinden biraz daha ilerleyebiliriz. Benim bilgisayar mühendisliği lisans eğitimimi tamamladığım üniversitede iki bölüm de vardı. Buradan sonra biraz daha veri ile konuşmak adına mezun olduğum İzmir Ekonomi Üniversitesinin bilgisayar mühendisliği ve yazılım mühendisliği bölümlerinin ders programlarından örnekler ile devam edebiliriz.

Bilgisayar

  • EEE 215 Bilgisayar Mühendisleri için Elektrik Devrelerine ve Elektroniğe Giriş
  • CE 342 Mikroişlemcilerin Temelleri
  • CE 325 Bilgisayar Ağları

Yazılım

  • SE 216 Yazılım Proje Yönetimi
  • SE 321 Yazılım Belirtim ve Tasarımı
  • SE 322 Yazılım Sınama ve Doğrulama

Evet, yazılım mühendisliğininki daha havalı duruyor ben de farkındayım. Eğri oturup doğru konuşmak gerekirse, proje yönetimi ve benzeri alanlarda rol almak gibi hedefler söz konusu ise yazılım mühendisliği dersleri sayesinde bu alanla ilgili daha fazla fikir edinilebilir.

Öte yandan bilgisayar mühendisliğinde ise bilgisayarın ve bilgisayar parçalarının çalışma prensiplerine dair bilgi birikimi sağlamak adına türlü dersler görüyoruz. Ne yazık ki bu tarz donanım ile ilgili bilgileri doğrudan kullanma ihtimaliniz epey düşük. Mesela ben yukarıda örnek verdiğim “Bilgisayar Ağları” derslerinden birinde ethernet kablosu yapmayı öğrenmiştim. Şu an ethernet kablosuna ihtiyacım olduğunda evde kendim mi yapıyorum? Tabii ki, boşuna okumadık.

In case of a broken ethernet cable

Sektörde donanım odaklı bilişim firmalarının sayısını düşündüğümüzde de neden böyle söylediğim bence daha da netleşecektir. Çünkü donanım odaklı işler genel itibari ile daha fazla yatırım ve meyvesini yemek için daha fazla zaman gerektirmekte.

Ders bazında özetle şunu söyleyebiliriz; biri yazılım geliştirme ve yönetim süreçleri ile ilgili 1–0 önde başlamanızı sağlarken, bir diğeri bilgisayar ve bilgisayarın çalışma prensipleri noktasında 1–0 önde başlamanızı sağlayabilir. Günün sonunda lisans eğitimi henüz yolun başı olduğu için, bu iki bölüm arasındaki farklar lisans eğitiminiz sırasında veya daha sonrasında, gerek akademide gerekse iş hayatında bir miktar efor sarf ederek kapatılamayacak farklar değiller.

İkisi de olan bir okuldaysam fark eder mi?

Etmez, yazı tura vakti.

Yazı tura biraz abartılı olmuş olabilir ama derdimi anlatabildiğimi düşünüyorum. İki bölümün de olduğu bir okulda lisans eğitimimi aldım, fark etmez deme sebebim daha önce bahsettiğimiz dersleri hangi bölümde iseniz bir diğerinden seçmeli olarak çok yüksek ihtimalle birçok okulda alabileceğiniz.

Örneklemek gerekirse, yazılım mühendisliğini tercih ettiniz ama hayatınıza renk gelsin diye -getirmeyebilir- bilgisayar bölümündeki elektrik derslerini de almak istiyorsunuz. Bölümünüzün kredi limiti içerisinde size sunulan seçmeli ders tercihlerinizi bu derslerden yana yaparak bu dersleri de alabilirsiniz.

Ya da benim yapma fırsatı yakaladığım gibi bilgisayar mühendisliği okuyor olursanız, yazılım mühendisliğinden x, y ve z derslerini almanın sizin çalışmak istediğiniz alan için sizi daha iyi hazırlayacağına inanıyorsanız yine seçmeli derslerinizi yazılım bölümünden alarak ilerleyebilirsiniz.

Kod yazmadan olur mu?

Bu durumu ünlü düşünür Şeyma Subaşı’nın izinden giderek pizza analojisiyle açıklayalım.

Hamur açmadan pizza olur mu? Kuvvetle muhtemel olmaz.

Bir defa hamur açmayı öğrenince hep hamur açarak mı para kazanmak zorundasın? Hayır.

Pizzaların nasıl yapılacağına ve kime nasıl satılacağına karar versem, hamuru başkası açsa olmaz mı? Bu kararları verebilecek yetkinliğe erişirsen neden olmasın.

Lisans eğitimi sırasında ne olursa olsun bir noktada her iki bölümde de oturup kod yazmanız -hamur açmanız- gereken bir dönem olacaktır. Gerek proje bazlı derslerden ötürü olsun gerekse direkt kodlama odaklı derslerden dolayı olsun günün sonunda elleri kirletmekten başka çareniz kalmayabilir. Bunun iyi tarafıysa kodlamaya karşı yalnızca ön yargılı mısınız yoksa gerçekten de beklediğiniz kadar eğlenceli veya sıkıcı bir iş mi görme şansı yakalamış olursunuz.

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

Lisans eğitimi sonrasında belki de yazılım geliştirme sürecinde minimum oranda kod geliştirme kısmında yer alarak başka süreçlerde yer alacak şekilde bir kariyer planlaması yapılabilir pek tabii. Yukarıdaki görselden de görülebileceği gibi “implementasyon (implementation)” diye isimlendirilen ve ağırlıklı olarak kod yazılan kısım bir yazılım ürününün yaşam döngüsünün yalnızca bir parçası. Olmazsa olmaz parçalardan biri mi peki? Evet, ancak aynı şekilde diğer aşamalar da bu sürecin olmazsa olmaz parçaları.

Sadede gelinen kısım

Her şeyi madde madde koşullar şeklinde kabaca özetlemek gerekirse aslında şu şekilde sıralayabilirim sanırım:

  • İkisinden birini seçmek kariyerim üzerinde kalıcı ve geri döndürülemez etkilere sahip olabilir mi? Sanmıyorum.
  • İkisinden biri diğerinden daha derin veya daha iyi bir mühendislik bölümü mü? Hayır.
  • Hangisini seçersem seçeyim sonrasında kariyer planlarıma göre kendimi geliştirmem istediğim sonucu bölümden bağımsız elde etmemi sağlar mı? Kuvvetle muhtemel.
  • İkisinden birini bitirsem, günün birinde “Biz yazılım mühendisi arıyorduk, sen bilgisayar mühendisi olduğun için seni işe alamayız.” diyerek bölüm ırkçılığı yaparlar mı? Yapabilirler, bahane arayan işver(mey)ene bahane çok.

İyi dilekler ve kapanış

Buraya kadar bütün acemiliklerime göz yumup yazıyı kapatmadan gelebildiyseniz, her şeyden önce teşekkür ederim vaktinizi ayırdığınız için.

Elimden geldiğince bu bölümlerin farkları konusunda fikirlerimi yeni yetme bir bilgisayar mühendisi olarak aktarmaya çalıştım.

Bu seçimi yapma noktasına kadar geldiyseniz eğer, hangisini seçerseniz seçin hakkını verdikten sonra her birinin devamının güzel yerlere gidebildiğini gönül rahatlığıyla söyleyebilirim. Her türlü meslektaş oluyoruz, belki de çoktan öyleyizdir. En nihayetinde içerisi şampiyonlar ligi gibi, herkesi bekliyoruz.

Olumlu olumsuz geri bildirimlerinizi sabırsızlıkla bekliyorum, özellikle benim gibi yeni yazmaya başlayan birinin kendini geliştirebilmesi ve üzerine koyarak ilerleyebilmesi için hepsi çok kıymetli, şimdiden teşekkürler.

Son olarak, sürçüklavye ettiysek affola.

--

--