Yazılım Mühendisliği Röportajı

Yazılım mühendisliği öğrencisi olan sayın Abdullah Gürsoy arkadaşımız benden bir roportaj talebinde bulunmuştu. Biraz geciktirmeme rağmen sonunda bitirebildim. Diğer yazılım dünyası adaylarına da oldukça faydalı olacağını düşünüyorum ve bunun için kendisine teşekkür ediyorum. Diğer arkadaşlarında okuması için kendi sayfama koymanın iyi olacağını düşündüm.Ayrıca yazının son kısmında Abdullah'ın diğer yazılım mühendisi olan arkadaşlarla olan roportajlarını da ilgili linkten bulabilirsiniz. İşte roportajımız..

1- Kendinizi ve Yazılım Mühendisliği ile olan geçmişinizi kısaca anlatabilir misiniz?

Kocaeli Üniversitesi Bilgisayar Mühendisliğinden mezun oldum. Bilgisayarlar ile lise yıllarımda ilk Intel 386 SX25 ve Windows 3.1 işletim sistemli bilgisayarımla tanıştım. Tabi o zamanlar oyun oynamanın ve DOS'da komut yazmanın dışında pek birşey yapmıyordum yazılım anlamında. İlk yazılım ile tanışmamda o zamanlar mahalledeki teknik lisede okuyan bir abinin bana pascal ile yazılmış programlarını göstermesi ile olmuştu. Daha sonra bana bir kitap vermişti ve oradaki birkaç kodu kopyalayıp denemiştim. Ama o zamanlar hiçbirşey anlamadığımı ifade edebilirim. Yazılım ile gerçek tanışmam üniversitenin 1. sınıfında programlama dersinde oldu. O andan itibaren yazılımı gerçekten sevdiğimi anladım. Bu derste ödev olarak ilk yazdığım “Çarkıfelek” oyununu ise ilk yazılımım olarak adlandırabilirim. Piyasaya sürmedim ama hala saklarım ve kuzenlerim oynar arasıra :). Okul bittikten sonrada özel sektörde yazılım mühendisi olarak göreve başladım ve hala özel sektörde çalışıyorum.

2- Sizce mühendisliğin tanımı nedir?

Bence mühendislik bilimsel olarak kanıtlanmış prensiplerin, kuralların doğruların Pratik olarak üretilen çözümlerde,problemlerde kullanılmasıdır.

3- Yazılım Mühendisliği'ndeki “Mühendislik” kelimesinin sebebi nedir? Moda olarak herseyin sonuna”mühendislik” kelimesi eklemekten mi geliyor, yoksa gerçekten “Mühendislik” ile alakası var mi?

Yazılım mühendislik midir yoksa sanat mıdır sürekli tartışılan bir konu. Bir inşaat ya da makina mühendisliği gibi olmadığı kesin. Çünkü onlar kadar kesin kurallar uygulanarak ortaya ürünler çıkmıyor. Ortaya çıkan ürünlerde programcının kendisinden kattığı, kendi stili ile geliştirdiği kodlar, ayrıca projenin yapısına gore değişen çok farklı yazılım tasarımları içeriyor. Aynı işi yapan iki yazılım arka planda birbirinden dağlarca farklı koda sahip olabilirler buda yazılımın içine gore insanın yazdığı koda verdiği şeklin etkisini gösteriyor. Bu bakımdan yazılımı sanat olarak görebiliriz.

Diğer yandan çoğu yazılım projesinde uygulanan ya da artık uygulanması neredeyse zorunlu olan analiz, tasarım, test gibi süreçler var. Problemlerle karşılaştıkça ortaya çıkan patterns, practices gibi kavramlar var. Bunlarda bize yazılımın mühendislik tarafını gösteriyor.

Yani bence yazılım mühendisliği hem mühendislik hemde sanat.

4- Çok yakin gibi görülen Bilgisayar Mühendisliği ile Yazılım Mühendisliğinin arasındaki farklar nelerdir? Bunları iş hayatından örneklerle ve tecrübelerinizle açiklayabilir misiniz?

Bugüne kadar iş hayatımda yazılım mühendisliği bölümünden mezun olan bir yazılımcı ile çalıştığımı söyleyemem.Bunu bilgisayar mühendisliğine göre daha yeni bir bölüm olduğu için haliyle mezun sayısının daha az olmasına bağlıyorum.
Bilgisayar mühendisliği mezunu olduğum için önce bu bölümde neler öğretiliyor ya da öğretildi ondan bahsetmek istiyorum. Bilgisayar mühendisliği bölümünde Matematik , Fizik gibi temel mühendislik derslerinin dışında Elektronik,Haberleşme, Donanım, Network, Güvenlik, Programlama, Yazılım alanlarında dersler alıyorsunuz. Bu derslerin içeriği okuluna göre değişmekle birlikte (mesela İTÜ mezunu arkadaşlarım genelde oldukça fazla donanıma yönelik yoğun dersler aldıklarını söylerler) temel olarak yukarıda bahsettiğim alanlardan temel bilgileri alırlar. Sonuçta mezun olanlar Network, Güvenlik, Yazılım ve Donanım alanında çalışabilirler. Bilgisayar mühendisliği bölümünden mezun kendi arkadaşlarımdan örnek verecek olursam çoğunluğu Yazılım mühendisi olarak çalışıyor. Fakat network, güvenlik, elektronik alanında çalışan arkadaşlarım da var.

Yazılım mühendisliği daha yeni olduğu için mezunlarıyla çalışamadım fakat ders programına baktığımda elektronik ve donanım dersleri dışında diğer derslerin çoğunun aynı olduğunu görüyorum. Yazılım mühendisliğinden farklı olarak gördüğüm “Yazılım Mimarisi, Tasarım Kalıpları,Yazılım Süreçleri,Proje Analiz ve Yönetimi” ile ilgili derslerin daha yoğun olması. Bunlarda yazılım mühendisi olmak isteyen birisinin piyasada oldukça işine yarayacak konular.Okulda bu derslerin üzerine ne kadar düşülüp nasıl projeler yapılıyor bilmiyorum ama bu dersler iyi değerlendirilip gerçekten bir şeyler öğrenilerek mezun olunursa piyasada oldukça faydalı olacaktır.

5- Yazılım Mühendisi, sadece uml bilen programcı mıdır ? Eğer değilse tam olarak kimdir ve geliştirilen projelerde nerededir?

Yazılım mühendisi yazılımın gerektiğinde analizini, tasarımını, geliştirilmesini yapabilen kişidir diye düşünüyorum. Bence yazılım mühendisinin programlamayı çok iyi bilmesi gerekir çünkü yazılım projelerinde çalıştığınız programlama diline gore üretilen çözümler , kullanılan tasarım değişebilir. Ama bana gore sadece programlama bilmek yetmiyor. Yazılımın doğru analizinin yapılması, programlanırken ileride bakım maliyetini azaltacak şekilde esnek programlanması, ileriye yönelik varsa eklenti noktalarının düşünülmesi, testi, performans darboğazlarının belirlenmesi bunları düşünerek geliştirme yapılması gerekmektedir. Sadece UML bilmek bunların çok çok küçük bir kısmı. Bu yüzden yazılım mühendisi sadece UML bilen programcı değildir.

Ayrıca programlamanında yazılımın en önemli ayaklarından birisi olup sonucu en çok etkileyen kriter olduğunu bilmek lazım. Programlamayı bu yüzden asla küçümsemeyin. Yazılımı nasıl programladığını geleceğini en çok etkileyen faktörlerden biridir.

Bunları söylerken her işin yazılım mühendisi gerektirmediğinide söyleyebilirim. Her projenin yapısı farklı olduğu için bazı projeler mühendislik gerektirirken bazıları gerektirmemektedir. Kendi geçmişime baktığımda büyük projeler daha çok yazılım mühendisine ihtiyaç duyuyor. Çalıştığım yapay zeka , simülasyon içeren projelerde çok ciddi analiz tasarım gerektirmekteydi. Bu tarz projelerde mühendislik daha fazla uygulandığı için yazılım mühendisine daha çok ihtiyaç vardı. Bununda birlikte sadece veri giriş çıkışı yapan herhangi bir kompleks iş modeli içermeyen işlerde de çalıştım bunlarda mühendislik açısından çok fazla gereklilik göremedim.

En son şunu belirtmek isterim burada konuştuğum Yazılım Mühendisi ve Programı mezun olunan okul ile çok bağlantılı değildir. Yazılım/Bilgisayar mühendisliği mezunu olup programcı olarak çalışan birçok arkadaşım olduğu gibi programlama(ya da diğer bölümlerden) mezunu olup yazılım mühendisi olarak çalışan iş arkadaşlarım oldu. Kişinin kendisini mühendis ya da programcı olarak yetiştirmesi kendisine bağlıdır.

6- Yazılım Mühendisinin bilmesi gereken 5 önemli şey nedir?

5 tane madde çıkarabilirmiyim bilmiyorum ama aklıma gelen önemli bulduğum şeyleri sıralayayım. Bence en önemli şey öğrenmenin asla bitmeyeceğini kendimizi bir konuda veya alanda asla herşeyi biliyor olarak düşünmememiz gerektiğidir. Benim tecrübelerim ve iş hayatında yazılım mühendislerinde gördüğüm en büyük eksikliklerden birisi 3-5 sene sonra çoğu mühendisin artık öğrenecek birşey kalmadığını düşünüp giderek körelmesi ve problemlere yaratıcı çözümler bulamaması. Bu yüzden ilk sloganımız “Sürekli öğrenme”.

Ayrıca yaptığımız işleri bitti diyip bir kenara bırakmamalıyız sürekli nasıl iyileştirebiliriz diye bir yandan kafa yormalıyız çünkü her yazılım belli bir süre sonra bozulma eğilimindedir. Gözümüzün yazılımın tasarımını ve çalışmasını koruyabilmesi için sürekli onda olması ve iyileştirememiz gerekiyor. Kısacası refactoring de diyebiliriz.

Daha sonra yazılım mühendislerinin teknik olarak kendini çok iyi yetiştirmesi gerekiyor. Mühendis adam program yazmaz ya da programcı değildir algısını çok yanlış buluyorum. Yazılım mühendisi üzerinde çalıştığı platformu programlama dilini çok iyi bilmiyorsa problemlere çözüm üretmekte mutlaka zorlanacaktır çünkü her platformun problemlere kendine özgü bir çözümü var bu yüzden teknik programlama ,database vs.. gibi konuları çok iyi bilmelidir.

Programlama iyi bilmelidir dedim yukarıda ama yapılan diğer yanlış ise mühendisliği ya da yazılım geliştirmeyi sadece program yazmak olarak görmek. Yazılım tasarım analiz performans dökümantasyon gibi birçok bölümden ulaşamıyor. İnanın programlama önemli ama sadece bir kısmı. Yazılım mühendisi için yazılım tasarımını iyi bilmek olmazsa olmazlardan. Daha ucuz kaliteli ürünler ortaya çıkarmak için iyi tasarlanmış bir yazılım geliştirmek gerekiyor.

Platformlar problemi çözmek için sadece araçlardır. Yazılım mühendisinin platformu programlama dili olmaz. Problemi çözmek için en uygun platfor var ise o platformda yazılımı geliştirir tasarlar. En çok yapılan yanlışlardan biri takım tutar gibi platform tutup .NET vs Java tartışmaları yapmaktır. Kendimden örnek verecek olursam Java, .NET,Delphi Web, Desktop,Simulasyon gibi birçok platformda yazılım geliştirdim platformlar farklı olsada yazılım tasarımı problemlere çözüm yaklaşımı hepsinde aynı bu yüzden platform bağımsız mühendis olmak oldukça önemli. Sonuçta kullandığımız platformların çoğu 10-20 sene içinde var olmayacak.

Bilgisayar nasıl çalışır? . Bende dahil yazılım mühendislerinin büyük eksiklerinden biri daha. Bir mühendisin yazılımın,bilgisayarın nasıl çalıştığını en azından temel şekilde bilmesi gerekiyor. Yazdığımız yazılım nasıl derlenir nasıl belleğe yüklenir nasıl CPU tarafından işletilir bu komutlar nasıl elektrik sinyallerine dönüşür vb.. Bunlar çok fazla önemli gelmeyebilir ama problemlere farklı çözümler üretmede üzerinizdeki platformun sınırlarını bilmeniz ve gerektiğinde zorlamanız konusunda çok fazla yardımcı olurlar. Örnek IE 6 Javascript memory leak problemini IE 6 için uygulanmış Garbage Collection algoritmasının nasıl olduğunu bilerek birçok performans problemini çözebilirsiniz.

Oldukça uzun oldu şöyle özetlersek

1. Sürekli Öğrenme
2. Sürekli iyileştirme
3. Teknik olarak bilgili(Programlama, database vb..)
4. Yazılım tasarımı(Patterns,Practices vb..)
5. Platform bağımsızlığı
6. Bilgisayarın doğası.

7- Bir öğrenci olarak bakıldığında, belli dertlerin, belli çözümleri getirdigi, Yazilim Mühendisliği'nin de bu çözümlerden biri olduğu görünüyor. Çözümler uluslar-arası olsada bazen bu dertler yerel oluyor ve bu yerel dertler, çözümleri başka biryerden ithal edenler için farklılıklar arz ediyor. Sizin de yazılım mühendisliği ile ilgili kaynaklarda okuduğunuz fakat Türkiye'de işlerin farklı yürüdüğü şeyler var mi? Var ise bunlar nelerdir?

Aslında geçenlerde yazdığım yurtdışı tecrübelerimden kısaca bahsettiğim yazımdan alıntı yaparak bu soruya cevap verebilirim. 1,5 senelik çalıştığım firmanın bir yurtdışı şubesine ve orda yaptığım projede tecrübem oldu. Hem kitaplardan bolca gördüğüm hemde dışarıda uygulanıp bizde dışarısı kadar ciddi uygulanmayan şeyleri şöyle sıralayabilirim.

  • Ürün çıktımı, tam anlamıyla çıkmış oluyor. En ufak ayrıntısı bile atlanmamış çıkması planlanmış şeylerin font seçimine kadar her şey düşünülmüş çıkıyor.Ürün çıktığında kurulumu, ayarları her şey paket olarak geliyor. Aldıktan sonra kurulum içinde bir 10 gün harcamıyorsunuz.
  • Çok profosyonel Dökümantasyon yapılıyor. Bunu yazılım geliştirici kendi yazdığı özellik için yapması zorunlu. Ayrıca müşteri dökümantasyonu için ayrı bir ekip çalışıyor. Yazılım geliştirilirken dökümantasyon da aynı anda gelişiyor ve özellik bittiğinde müşteri ve yazılım dökümantasyonu hazır oluyor.
  • Test işine çok önem veriliyor. Bizdeki gibi ekrana iki gir çık sonra tamam anlayışı yok. Sistem test, performans test, entegrasyon test ekipleri var. Manuel ve otomatik testler sürekli çalışıyor. Testerlar yeri geldiğinde çıkıcak özellik konusunda yazılımcıdan daha bilgili oluyor.
  • İşin tam anlamıyla bitirilmesi için gerekli zamanı harcıyorlar. Ülkemizdeki gibi acelemiz var yetişmesi lazım diye test aşamasını atlama, dökümantasyonu es geçme gibi birşey kesinlikle olmuyor. Bir şey yapılacaksa ne kadar zaman alırsa alsın kuralına göre herşeyiyle birlikte yapılıyor.

8- Üniversiteyi içerisi, iş hayatını da dışarısı olarak kabul ederseniz,dısarıda yani sektörde işler nasıl yürüyor? Hala içeride bulunan oğrenciler için, dışarı çıkmadan önce neler yapmalarını tavsiye ederseniz?

Üniversite hayatında gerçek dünyada işler nasıl yürüyora dair çok az şeyler öğrenerek mezun oluyoruz. Dışarıda projeler büyüyor, zaman kısıtı içine giriyor, müşteriler , hergün değişen ve kullanılan farklı faklı birçok teknoloji vb. Listeyi uzatabiliriz. Kısacası işler dışarıda daha kompleks.
Yapılan projeler açısından dışarıda işler haliyle üniversitelerden daha büyük oluyor. Dolayısıyla üniversitede yazılan programlarda “maintainability” yani yönetilebilirlik çok fazla önemli olmuyor. Ama dışarıda projeler üniversiteye gore oldukça büyük olduğundan yazılım kalitesi oldukça önemli.Özellikle sonradan hatalar geldikçe yazılımı ne kadar iyi yazdıysanız size o kadar zamandan tasarruf sağlıyor. Bununda birlikte dışarıda da malesef işlerin çok amatör yürüdüğü birçok şirket var.

Üniversitede iken işin teorisini iyi öğrenmek size ileride problem çözmede çok yardımcı olacaktır. Belki iş hayatında birebir kullanılmasada problem çözmede işlerin arka planda nasıl yürüdüğünü bilmek oldukça ufkunuzu açıyor. Örnek olarak yukarıda da bahsettiğim temel garbadge collection algoritmasını bilmek, IE6 da nasıl uygulandığına bakmak Javascript yazarken memory leak problemlerini çözmeme çok yardımcı olmuştu.
Benim yeni mezun olarak arkadaşlar için tavsiyem asıl öğrenmenin dışarıda başladığını bilerek bu sektöre atılmalarıdır. Kendinizi sürekli güncel tutup yeni şeyler öğrenmezseniz bir sure sonra paslanıyorsunuz. O yüzden “Ben mezun oldum, olay burda bitti.” şeklinde sakın düşünmeyin asıl macera iş hayatında başlıyor. Zaten adım attığınızda bilmediğiniz ve öğrenilecek ne kadar çok şeyin olduğunu anlıyacaksınız. Yılmadan öğrenmeye ve çalışmaya devam ederseniz başarıya ulaşacaksınız. Çevremde sene olarak 10 seneden fazla tecrübesi olup yeni mezun arkadaşlar kadar gerçek tecrübesi olan birçok mühendisle çalıştım.Bu yüzden yeni mezun arkadaşlar eğer kendilerini okulda iyi yetiştirdiyse kendilerine güvenerek çok iyi işler yapabilirler. Önemli olan sürekli ÖĞRENMEK ve ÇALIŞMAK .

Diğer Yazılım Mühendisliği Roportajları

765qwerty765

4 thoughts on “Yazılım Mühendisliği Röportajı

  1. Seval

    Sorular çok komik, ben olsam ciddiye almazdım sizin kadar, git Google’dan araştır gel derdim. Hele hele “yazılım Mühendisi, sadece uml bilen programcı mıdır?” sorusuna koptum :) Bir bilgisayar mühendisine sorulacak soruları insanlar bilemiyorlar bence.

  2. Murat

    Sayın Seval, 10 senelik bir bilgisayar/yazılım mühendisi olarak belirtmeliyim ki sorular özenle seçilmiş ve cevapları da sorunun soruluş amacına göre çok açıklayıcı ve aydınlatıcı olmuş.. Eğer ünlü bir şarkıcı ile yapılan bir röportajda “Sizce şarkı söylemek biraz güzel bağırmak mıdır?” diye sorulsa, burada soranın doğrudan bunu sormadığı, bilakis bunun yanlış bir düşünce olduğunu bildiği ve şarkıcıyı bu yanlışı düzeltmeye yönlendirmeye çalıştığını anlarsınız. Buradaki sorunun amacı da bu..

  3. Şerife

    Cihat Bey, tüm sorular karşısındaki cevaplarınıza imzamı atıyorum. Gerçekten çok profesyonel cevaplar vermişsiniz. Sizin gibi gerçek mühendislerle çalışmak herhalde ayrıcalık olur.
    İş hayatınızda başarılar diliyorum…

  4. Emre

    Sorular ve cevaplar gayet başarılı bence sektörden çoğu insan ve hali hazırda mühendislik öğrencileri için güzel bilgilendirmeler olmuş.Emeğinize sağlık.

Comments are closed.