Yazılım Mühendisliği Özlü Sözler


“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

Continuous Delivery Nedir?


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.

Mavi Yeşil Dağıtım (Blue Green Deployment) Nedir?


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.

SOLID Nedir?


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.

4- Interface segregation principle – Arayüz ayırma prensibi

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.




Tips For Online Interviews


Remote working, online meetings, and online interviews have been getting more popular day by day. Coronavirus pandemic accelerated this process in software development companies and remote working style spread to the companies in other industries. Most of the companies even the ones never had remote work experience, started to work remotely, work from home and have their meetings online.

Online interviews are seen as a kind of meeting that can be held online. As a result, companies started to organize online interviews instead of onsite interviews. Some companies are already familiar with online interviews since they do screening interviews and remote interviews. But the situation that we are in shows that eventually almost all interviews will be done online. Even after Corona Pandemic, online interviews will increase their popularity.

With this short blog post, I want to share some tips for getting ready before the interview, tips for having a smooth interview and tips for handling unexpected problems during the interview.

Tips for getting ready before the interview

  • You should have a pen and paper. The interview is on your computer, you can think to take notes in note-taking applications, this may cause you to lose contact with the interviewer. Using pen and paper will help you to keep in contact with the interviewer and keep focused. 
  • You should choose a room with good light and you should position your table to leverage the light best. Better video quality will improve your communication with the interviewer.
  • You should keep your environment as silent as you can. Noises around will distract you and the interviewer.
  • You should have some water with you. Since you will be talking much during the interview, you will need hydration.
  • You should configure and test the online meeting tool (ie. Zoom, Google Meet, Skype, Microsoft Teams, etc.) that will be used in the interview. 
  • You should configure your camera, microphone, headset in the meeting tool settings.
  • You should have a test meeting with a friend on the tool if possible. If you don’t have a friend available for test, most of the tools like Skype and Zoom have internal test tools for sound input and output.
  • You should install the required applications that will be used in the interview. For example, you may need to install an IDE for software engineering interviews.
  • You should investigate, test and learn online tools (ie. HackerRank CodePair, draw.io, awwapp, etc.) that will be used in the interview.

What should we pay attention to during the interview?

  • You should keep the internet usage at the minimum level during the interview. You should inform the people you live with about the interview and ask them not to use internet connection as much as possible, especially video or music streaming applications (ie. Netflix, Amazon Prime, Youtube, Spotify, etc.) may exhaust your connection bandwidth during the interview.
  • You should inform the people you live with about the plan and duration of the interview and ask them to keep quiet if possible.
  • You should turn off the computer and mobile phone notifications.
  • You should not ask for using search engines or online resources unless the interviewer told you explicitly that you can use them.
  • You should keep eye contact with the interviewer while answering verbal questions.
  • You should ask to repeat the question if you can’t hear the interviewer because of a connection problem or if you can’t understand what is said.
  • Just like on-site interviews, you should use your time carefully during online interviews.
  • You should prefer resting and getting ready for the next session during the breaks rather than checking your answers for the previous session on the internet. 
  • You should not forget that all rules for onsite interviews also apply for an online interview.

How to handle unexpected problems during the interview?

  • If there is a problem with voice, inform the interviewer via the chat in the online meeting tool about the problem and be in contact while solving the problem. 
  • If you are having a problem with the internet
    • You can try to use your mobile phone’s internet
    • You can ask the interviewer to turn off videos
    • You can try to connect to the meeting via dial option if provided
    • If you still having problems, you can ask to continue the interview via phone call. 
  • Don’t stress and reconnect soon if you lose the connection. If it takes a long time to reconnect, it will be nice to inform the interviewer by a phone call.

If none of these are applicable or don’t solve the problems, you can ask to reschedule the interview. Don’t think that rescheduling will be a problem for you. Because if you and the interviewer cannot hear each other, it will decrease your performance. When the interview is rescheduled, you should find the root cause and solve it before the next interview.

If a distracting noise starts during the interview, you should ask for a break to stop the noise if you can. Don’t forget that you are responsible for the interview environment for online interviews, whereas the interviewer is responsible for the environment for onsite interviews. You can find the Online Interview Checklist at the bottom of the post.

All of the topics above are also important for the interviewer. If you are the interviewer you should make your environment ready and you should guarantee a high-quality interview.

Don’t forget that all points that you should be careful during an onsite interview are also valid for the online interview.

Wish you the best for your interviews…

Online Mülakatlarda Nelere Dikkat Etmeliyiz?


meeting-1020144_1920

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

checklıst

Yazılım mühendisliği mülakatlarına hazırlık


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.

Kursa bu linkten ulaşabilirsiniz