“Mühendisler problemleri çözmeyi severler. Eğer çözülecek bir problem yok ise kendi problemlerini yaratırlar.” Scott Adams
“Herhangi biri, bilgisayarın anlayabileceği bir kod yazabilir. İyi programcılar, insanların anlayabileceği kodlar yazar.” Martin Fowler
“Bir değişkene isim verirken, yeni doğan çocuğunuza isim verirken göstereceğiniz özeni göstermelisiniz.” Robert C. Martin
“Gereksinimler ve tasarım olmadan, programlama, boş bir metin dosyasına hata ekleme sanatıdır.” Louis Srygley
“Kötü koda yorum eklemeyin, yeniden yazın.” Brian W. Kernighan
“Kod yazarken, sizden sonra kodunuzu güncellemek zorunda kalacak kişinin evinizin yerini bilen azılı bir psikopat olduğunu düşünerek yazın.” Martin Golding
“Programlamada ilerlemeyi kod satırı sayısıyla ölçmek, uçak yapımında ilerlemeyi ağırlıkla ölçmek gibidir.” Bill Gates
“Haftanın geri kalanını Pazartesi günü yazdığınız kodun hatalarını ayıklamak için harcayacaksanız, Pazartesi günü yataktan hiç çıkmamanız daha anlamlıdır.” Dan Salomon
Yazılımın sürekli olarak canlıya alınabilecek şekilde geliştirildiği yazılım geliştirme yöntemidir.
ThoughWorks’e göre Continuous Delivery (Sürekli teslimat) uygulamak için şu şartlar sağlanmalıdır: 1. Yazılım geliştirme süreci boyunca canlıya alınabilecek durumda olmalıdır. 2. Ekibiniz yazılım canlıya alınabilecek durumda tutmayı, yeni özellik geliştirmeye tercih etmelidir. 3. Herhangi bir değişiklik yapıldığında yazılımın canlıya almaya hazır olup olmadığına dair hızlı ve otomatik geri bildirim alınabilmelidir. 4. İstenildiğinde yazılım tek bir tuş ile istenilen ortama dağıtılabilmelidir.
Sürekli teslimat, ürünün her zaman canlıya alınmaya hazır olmasını, dolayısıyla yeni geliştirmelerin sık olarak canlıya alınmasını sağlamaktadır.
Ancak canlıya alma sırasında sunulan servislerde kesinti olabilmektedir. Kesintiyi en aza indirebilmek için dağıtım işlemini, mümkün olduğunca hızlı yapmak gerekmektedir.
Mavi Yeşil dağıtım kesintiyi en aza indirmeyi bir birinin mümkün olduğunca aynısı olan 2 ortam (mavi, yeşil) ile sağlamaktadır.
Bu ortamlardan sadece bir tanesi canlı hizmet verirken, diğeri dağıtım yapılmaya hazır olarak bekletilir.
Örneğin, mavi ortam canlıya hizmet veriyor olsun. 1. aşamada dağıtımı yeşil ortama yapıp, uygulamanın doğru çalıştığından emin oluyoruz. 2. aşamada yönlendirici (router) üzerinden trafiği yeni dağıtım yaptığımız yeşil ortama yönlendiriyoruz. Böylece mavi ortam bir sonraki dağıtım için bekler duruma geçiyor.
Mavi Yeşil dağıtım, kesintiyi en aza indirirken, herhangi bir sorun olduğunda hızlıca bir önceki sürüme geçmeyi sağlamaktadır.
Nesneye Yönelik Programlamanın 5 temel prensibidir.
1 – Single responsibility principle – Tek sorumluluk prensibi
Bir modülün (sınıf, metod, vb) değiştirilmesi için tek bir nedenin olması, yani tek sorumluluğunun olmasıdır.
Kullanıcıdan sipariş bilgilerini alıp işleyen ve kullanıcıya sipariş alındı mesajı gönderen bir uygulama geliştirdiğimizi varsayalım. Bu 3 fonksiyonu da aynı sınıfta geliştirdiğimizi durumda sipariş alma, işleme ve bildirim süreçlerindeki herhangi bir değişiklik sınıfın değiştirilmesine neden olacaktır.
Bu prensibe uygun olarak SiparisAlma, SiparisIsleme ve Bildirim sınıfları geliştirerek, değişikliğin sadece ilgili modülü etkileyecek şekilde yapılması sağlanacaktır.
2 – Open closed principle – Açık kapalı prensibi
Yazılım varlıklarının (modül, sınıf, metod, vb.) genişletmeye açık, değişikliğe kapalı olmasıdır.
Bir kitap satış sitesi geliştirdiğimizi varsayalım. Kitap listesini alfabetik sıraya göre dönen KitapSorgulama sınıfımızın kitaplariSirala metodu olsun. Alfabetik sıralamaya ek olarak fiyata göre sırlama ihtiyacı gelsin. Sıralama metoduna, sıralama türü parametresi ekleyerek gelen türe göre sıralamayı destekleyecek hale getirebiliriz.
Ancak bu çözüm yeni gelen her sıralama gereksinimi için KitapSorgulama sınıfının ve kitaplariSirala metodunun değiştirilmesi anlamına gelecektir. Açık kapalı prensibini ihlal eden bu çözüm her değişiklikte hata yapılmasını kolaylaştıracak, kodun bakımını zorlaştıracaktır.
Bu çözüm yerine strateji tasarım örüntüsünü (Strategy design pattern) kullanıp, AlfabetikSiralama, FiyataGoreSiralama gibi sınıflar yaratarak her bir sıralama geliştirmesini ilgili sınıftaki sırala metodu içinde yapabiliriz. Böylece KitapSorgulama sınıfı kendisine parametre olarak geçilen farklı sıralama sınıflarının sırala metodunu kullanacak, yeni sıralama yöntemleri için bu sınıfta bir değişiklik yapılması gerekmeyecektir.
3 – Liskov’s substitution principle – Liskov’un yerine geçme prensibi
Türetilen sınıfların, taban sınıfların yerine geçebilir olmasıdır.
Elektronik kitap satan bir internet sitesi geliştirdiğimizi ve sitemizde ücretli kitaplar ile birlikte ücretsiz kitapların da yer aldığını varsayalım. Liste fiyatı ve bu fiyat üzerine indirim hesaplayan metodu olan Kitap sınıfımız, bu sınıftan türeyen ve liste fiyatı her zamn 0 olan Ücretsiz Kitap sınıfımız olsun.
Türetilmiş Ücretsiz Kitap sınıfımızda discounted_price metodunda hata fırlatarak özel bir durumu ele aldık. Ancak Liskov’un Yerine Geçme prensibini ihlal etttik ve alışveriş sepetinin toplamını hesaplayan kodumuz, sepette ücretsiz kitap olduğunda hata fırlatır hale geldi.
Ücretsiz Kitap sınıfını indirimli fiyat hesaplama metodunu, taban sınıfta olduğu gibi değer dönecek hale getirerek, Liskov’un Yerine Geçme prensibine uyup, alışveriş sepetinde Ücretli ya da Ücretsiz Kitap olmasından bağımsız olarak toplamı hesaplayacak hale gelebiliriz.
Bu ilkeye göre bir arayüzü kullanan istemciler, kullanmadığı metodlara bağımlı olmamalıdır. Yazılımı birbirinden bağımsız parçalara bölerek değişiklik ihtiyaçlarını ve yan etkilerini azaltmayı hedeflemektedir.
Kullanıcı işlemlerini gerçekleştiren bir modülümüz olduğunu varsayalım. Giriş, Çıkış, Kayıt olma ve Şifre sıfırlama fonksiyonlarını içeren tek bir KullaniciIslemleri arayüzü tasarlamak yerine,
Bu fonksiyonları aşağıdaki gibi GirisIslemleri, SifreIslemleri ve KayitIslemleri arayüzlerine bölmemiz Arayüz ayırma prensibine uymamızı sağlayacaktır.
5- Dependency inversion principle – Bağımlılığın ters çevrilmesi prensibi
Üst seviye modüllerin alt seviye modüllere bağımlı olamaması, bunun yerine soyutlamalara bağımlı olması ve soyutlamaların detaylara bağımlı olmaması, detayların soyutlamalara bağımlı olmasıdır.
Kullanıcılara eposta ve SMS bildirimleri gönderen bir modülü tasarladığımızı düşünelim. Bildirimleri gönderen KullaniciBilgilendirme sınıfının SMSBildirim ve EpostaBildirim sınıflarına bağımlı olduğu bu tasarım bu ilkeyi ihlal etmektedir.
SMS ve Eposta bildirimlerini Bildirim arayüzü altında soyutlarsak bu bağımlılık ortadan kalkacak ve tasarımımız bu ilkeye uygun hale gelecektir.
Yazılım dünyasında uzaktan çalışma, uzaktan mülakat ve toplantı yapma gibi aktiviteler son yıllarda giderek daha da popülerleşmekteydi. Korona virus salgını, bu süreci oldukça hızlandırdı ve uzaktan çalışma yazılım dışındaki sektörlerde de hızla yayılmaya başladı. Normalde uzaktan çalışmayan bir çok şirket mümkün olduğunca uzaktan/evden çalışmaya başladı, uzaktan yapabileceği toplantıları online yapmaya başladı.
Uzaktan yapılabilecek en temel toplantılardan birisi, mülakatlardır. Dolayısıyla şirketlerin kendi tesislerinde (onsite) yaptığı mülakatlar da uzaktan/online mülakatlara dönüşmeye başladı. Bazı şirketler screening interview adı verilen online mülakatları yapıyorlardı. Ancak içinde bulunduğumuz durum itibariyle bu süreçte iş görüşmelerinin neredeyse tamamı online mülakata dönüşecek, virüs salgını geçtikten sonra da online mülakatlar popülerliğini giderek arttıracak gibi görünüyor.
Bu yazıda online mülakat öncesinde ve sırasında yapmanız gerekenleri, karşılaşabileceğiniz problemlere karşı uygulayabileceğiniz olası çözümleri ele alacağız.
Mülakata öncesinde neler yapmalıyız?
Mülakat online olarak gerçekleşse de gerektiğinde not alabilmek için kağıt ve kalemi yanınızda bulundurmalısınız
Karşınızdaki kişinin sizi net olarak görebilmesi iletişimi kuvvetlendirecektir. Bu nedenle mülakata gireceğiniz odayı ışık alan bir oda olarak seçmeli, masanızı ışığı en iyi alacak şekilde yerleştirlemelisiniz
Hem sizin hem de mülakatı gerçekleştiren kişinin dikkatinin dağılmaması için sessiz bir ortam sağlamalısınız.
Mülakatta doğal olarak uzun süre konuşacaksınız, bu nedenle ihtiyaç duydukça içebileceğiniz bir şise suyu yanınızda bulundurmalısınız.
Mülakat online toplantı araçları (zoom, google meet, sykpe, microsoft teams vb.) üzerinden gerçekleştireceği için bu araçları mülakat öncesinde kesinlikle denemeli ve gerekli konfigürasyonları yapmalısınız.
Mikrofon, hoparlör ve kameranızın toplantı araçları için ayarları yapıp kesinlikle test etmelisiniz.
Mümkünse bir arkadaşınızla kullanılacak toplantı aracı üzerinden deneme görüşmesi yapmalısınız.
Mülakat sırasında kullanmanız gereken programlar var ise mülakat öncesinde kurarak deneme yapmalısınız. Örneğin yazılım mühendisliği mülakatlarında Bütünleşik Geliştirme Ortamı(IDE) kurmanız gerekebilir.
Mülakat sırasında online bir araç (hackerrank codepair, draw.io, awwapp vb.) kullanılacaksa bu aracı incelemeli, denemeler yaparak öğrenmelisiniz
Mülakat sırasında nelere dikkat etmeliyiz?
Mümkünse evdeki internet kullanımının minimumda tutulmasını sağlamalısınız. Bu nedenle mülakat sırasında evdeki diğer kişilere internet kullanımını ile ilgili bilgi vermeli, mümkünse Netflix, Amazon Prime, Youtube, Spotify gibi online video ve müzik sağlayıcılarının mülakat sırasında kullanmamalarını talep etmelisiniz.
Evde yer alan diğer kişilere mülakat süreci ve süresi hakkında bilgi vermeli, mülakat sırasında mümkün olduğunca sessiz kalmalarını talep etmelisiniz.
Cep telefonunu ve bilgisayar bildirimlerinizi kapatmalısınız.
Mülakatı yapan kişi tarafından arama motorlarını ya da internet üzerindeki kaynakları kullanabileceğiniz belirtilmemişse kullanmayı siz teklif etmemelisiniz.
Sözlü sorulara cevap verirken karşınızda birinin olduğunu unutmamalı, mümkün olduğunca video üzerinden göz teması kurmalısınız.
Mülakatı yapan kişinin sesi geçici olarak kesilmişse ya da söyledikleri anlaşılmamışsa, anlamadığınızı belirtip tekrar etmesini istemekten çekinmeyiz.
Tüm mülakatlarda dikkat etmeniz gerektiği gibi online mülakat sırasında da süreye dikkat etmelisiniz.
Oturum aralarında internet üzerinden bir önceki oturumda verdiğiniz cevapların doğruluğunu kontrol etmek yerine, bir sonraki oturum için dinlenmelisiniz.
Online mülakatta, yerinde (onsite) mülakatta dikkat etmeniz gereken tüm hususların da geçerli olduğunu unutmamalısınız.
Olası problemlerle nasıl başa çıkabilirsiniz?
Görüşmeye ilk başladığınızda sesiniz gitmiyor ise bu sorunu çözerken, chat özelliği üzerinden iletişimde kalın ve bilgi verin.
Aldığınız tüm önemlere karşı internette sorun yaşıyorsanızCep telefonunun internetini kullanarak bağlanmayı deneyebilirsiniz.Görüşme yaptığınız kişiye videoları kapatmayı önerebilirsiniz.Hala sorun yaşıyorsanız bazı online toplantı uygulamaları telefon aramasıyla katılımınıza izin veriyor. Bu yöntemi kullanmayı önerebilirsiniz.
En son seçenek olarak görüşmeyi telefon ile gerçekleştirmeyi önerebilirsiniz
Görüşme sırasında bağlantı koparsa stres yapmayın, hemen tekrar bağlanın. Bağlanmanız uzun sürüyorsa, telefon ile arayarak haber vermeniz faydalı olacaktır.
Tüm bu seçenekler uygulanabilir değilse ya da uygulamanız sonuç vermediyse mülakatın ertelenmesini talep edebilirsiniz. Ertelemenin sizin için bir sorun olacağını düşünmeyin. Mülakatı yapan kişilerin sizi duyamadığı anlayamadığı bir mülakat başarınızı negatif etkileyecektir. Mülakat ertelendiğinde sorunun kök nedenini bulmalı, bir sonraki mülakata kadar bu sorunu çözmelisiniz.
Mülakatınız sırasında dikkat dağıtıcı ya da mülakatı yapanları rahatsız edecek seviyede ses olması durumunda, sesi durdurmak için izin istemekten çekinmeyin. Yerinde mülakatlarda ortamı sağlamak şirketin sorumluluğundayken, online mülakatta siz de ortamı sağlamaktan sorumlusunuz.
Yukarıda belirttiğimiz tüm hususlar sadece mülakata katılanlar için değil mülakatı gerçekleştirecek kişiler için geçerlidir. Online mülakat öncesi durumunuzu kontrol edebilmeniz için kontrol listesini ekle bölümünde paylaşıyoruz.
Online mülakatta, yerinde (onsite) mülakatta dikkat etmeniz gereken tüm hususların da geçerli olduğunu unutmamalısınız. Yazılım mühendisliği mülakatlarına hazırlanmak için hazırladığımız “Yazlım mühendisliği mülakatlarına hazırlık” kursundan faydalanabilirsiniz.
Mülakatlarınızda başarılar…
Ek-1 Online Mülakat Hazırlık Durumu Kontrol Listesi
Bu zamana kadar pek çok farklı üniversitede sektör yazılım mühendislerinden ne bekler konulu sunumlar yaptık, binlerce aday CV’si gördük, yüzlerce mülakata katıldık. Bu anlamda, bildiklerimizi, tecrübelerimizi paylaşmak için aylar süren çalışma sonucunda arkadaşım Turgay Çelik ile 47 videodan oluşan 5 saatlik bir eğitim hazırladık. Bu eğitimi hazırlamak için 300 saatin üzerinde bir efor sarf ettik.
Bilginin paylaştıkça çoğaldığına inanıyor, geri bildirimlerle iyileşmeye önem veriyoruz. Sorularınızı ve geri bildirimleriniz bekliyoruz.
Dünyada dijital dönüşümün hız kazanması ile yazılım mühendisliği çağımızın en popüler mesleklerinden birisi haline gelmiştir. Geniş iş olanakları, yapılan işin sonucunu hızlı görmenin keyfi gibi faktörlerin de etkisi ile bu mesleğe olan ilgi her geçen yıl daha da artmaktadır.
Yazılım mühendisliği, temel olarak bilgisayar mühendisliği mezunlarının çalıştığı bir alan olsa da, farklı branşlardaki mühendisler, Matematik, Fizik gibi temel bilimlerden mezun kişiler, hatta Psikoloji gibi tamamen farklı alanlarda uzman olan kişilerden bile bu alanda kariyer yapmak isteyen çok sayıda profesyonel mevcuttur.
Konunun teknik tarafından bakarsak, dijital dönüşümle birlikte geliştirilen yazılımların kullanıcı sayıları giderek artmaktadır. Örneğin günümüzde e-ticaret sitelerinden alışveriş, sosyal medya kullanımı, internet bankacılığı kullanımı on yıl öncesine göre katlanarak artmıştır. Benzer şekilde, geliştirilen ürünlerden beklenilen yetenekler ve hizmet kalitesi de gün geçtikçe yükselmektedir. Bu durum, geliştirilen yazılım sistemlerinin giderek daha da büyümesine ve karmaşıklaşmasına neden olmaktadır.
Karmaşıklaşan ihtiyaçlar doğrultusunda, ülkemizde ve dünyada yazılım şirketleri bulabilecekleri en iyi adayları işe almaya çalışmaktadırlar. Yazılım şirketleri e-ticaret, e-öğrenme, oyun, mobil uygulamalar, savunma sanayii, finans, enerji, telekom gibi farklı alanlarda faaliyet gösterseler de, işe alacakları mühendislerden beklentileri tahmin edilenin aksine çok benzerdir. Şirketlerin mülakat süreçlerinde uyguladıkları yöntemler farklı olsa da özünde tüm şirketler teknik anlamda yetkin ve davranışsal anlamda pozitif kişileri tespit etmeye çalışırlar.
Yazılım sistemlerinin soyutluğu ve dinamikliğinden dolayı yazılım mühendisliği teknik ve felsefi anlamda sanıldığından derin bir konudur, dolayısıyla uzmanlaşması, iyi bir mühendis olması zor bir alandır. Yazılım mühendisliği mülakatlarına şirketlerin ayırabildikleri süre oldukça kısıtlıdır.
Bu anlamda, yazılım mühendisliği mülakatlarına özel olarak hazırlanmak şarttır.
Bu zamana kadar pek çok farklı üniversitede sektör yazılım mühendislerinden ne bekler konulu sunumlar yaptık, binlerce aday CV’si gördük, yüzlerce mülakata katıldık. Bu anlamda, bildiklerimizi, tecrübelerimizi paylaşmak için aylar süren çalışma sonucunda arkadaşım Turgay Çelik ile 47 videodan oluşan 5 saatlik bir eğitim hazırladık. Bu eğitimi hazırlamak için 300 saatin üzerinde bir efor sarf ettik.
Bilginin paylaştıkça çoğaldığına inanıyor, geri bildirimlerle iyileşmeye önem veriyoruz. Sorularınızı ve geri bildirimleriniz bekliyoruz.
Yorum yazabilmek için oturum açmalısınız.