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

Creator tasarım kalıbı


Bir sınıfın nesnesini (instance) oluşturmaktan sorumlu olacak sınıfı belirlemede yol gösteren GRASP tasarım kalıbıdır.

Bu tasarım kalıbına göre, aşağıdaki koşullardan biri, tercihen birden fazlası sağlanıyorsa B sınıfı A sınıfının örneğini yaratmaktan sorumlu olmalıdır:

1) B’nin nesneleri A’ nın nesnelerini içeriyorsa ya da içererek bir bütünü oluşturuyorsa.

2) B’nin nesneleri A’nın nesnelerinin kaydını tutuyorsa.

3) B’nin nesneleri A’nın nesnelerini yoğun olarak kullanıyorsa.

4) B’nin nesneleri A’nın nesnelerinin yaratılması aşamasında geçilmesi gereken bilgilere sahipse.

Online kitap satışı yapan bir site tasarladığımızı düşünelim. Alışveriş sepetini ifade eden ShoppingCart ve alışveriş sepetindeki her bir elemanı ifade eden CartItem sınıflarımız olsun.

Bu örneğimizde ShoppingCart sınıfı 1,3,4 nolu koşulları sağlayarak, CartItem nesnelerinin yaratılmasından sorumlu olacaktır. Bu sınıfta yer alacak addItem(Book book, int quantity) metodu bu yaratma işleminin gerçekleşmesi için uygun bir metod olacaktır.

Java içinde yayınlandı

Refactoring nedir?


Mevcut bir kod parçasını, basitlik, anlaşılabilirlik, test edilebilirlik gibi amaçlarla yeniden düzenleyerek dış davranışını değiştirmeden, iç yapsını değiştirmeye Refactoring denir.

Java içinde yayınlandı

Canary Release Nedir?


Yazılımın yeni sürümünü canlıya alma riskini azaltmak amacıyla, herkese erişilebilir hale getirmeden önce değişikliği küçük bir kullanıcı kümesine aşamalı olarak sunan tekniğe denir.

Canary release adını henüz karbonmonoksit dedektörleri yokken madenciler tarafından uygulanan bir yöntemden almıştır. Madenciler madene indiklerinde yanlarında kafeste bir kanarya götürürmüş, bu kanarya ortamda insanı öldürmeyecek kadar az bir karbonmonoksit olduğunda öldüğünden, kanaryanın ölümü ile madenciler madenden çıkıp kurtulurmuş.

Java içinde yayınlandı

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.




Udemy kurslarımız için indirim kuponları


Udemy – Yazılım Mühendisliği Mülakatlarına Hazırlık Kursu

https://www.udemy.com/course/yazilim-muhendisligi-mulakatlarina-hazirlanma-teknikleri/?couponCode=YAZI_DEGERLENDIR

Çukurova Üniversitesi CENGA topluluğuna özel 20 Temmuz 2020’ye kadar geçerli
https://www.udemy.com/course/yazilim-muhendisligi-mulakatlarina-hazirlanma-teknikleri/?couponCode=CENGA2020

17 Temmuz 2020’ye kadar geçerli
https://www.udemy.com/course/yazilim-muhendisligi-mulakatlarina-hazirlanma-teknikleri/?couponCode=INTERVIEW2020

13 Haziran 2020’ye kadar geçerli
https://www.udemy.com/course/yazilim-muhendisligi-mulakatlarina-hazirlanma-teknikleri/?couponCode=KUZUBASLI2020

 5 Mayıs 2020 ye kadar geçerli
https://www.udemy.com/course/yazilim-muhendisligi-mulakatlarina-hazirlanma-teknikleri/?couponCode=BILISIM_HAFTASI

Udemy içinde yayınlandı

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…