AB 17 ve Temiz Kod Kursu

Her yıl düzenlenen Akademik Bilişim 17, Aksaray’da 4 - 11 Şubat tarihleri arasında düzenleniyor.

Geçen yıl olduğu gibi bu yılda Temiz Kod kursu ve RESTFul Web Servisleri semineri ile etkinliğe katılıyorum. Bu yıl ikincisini düzenleyeceğim “Temiz Kod” kursun geçen seneye göre daha verimli olacağını düşünüyorum.

Kurslar ve seminerler tamamen ücretsiz olup herkese açıktır. Katılımcılar dilerlerse KYK yurtlarında uygun fiyatlara konaklayabilirler. Kurs kayıtları https://kayit.ab.org.tr/ üzerinden 2 - 10 Ocak tarihleri arasında yapılacaktır.

Açılan diğer kurslar hakkında bilgiyi buradan bulabilirsiniz. Temiz kod kursuna gelirsek:

Kurs Hakkında

Bir yazılımın bakımını yapmak geliştirmekten daha zordur. Kod altyapısının temiz olması ürünün bakımını kolaylaştırır. Bu açıdan temiz kod akımı yazılımda oldukça önemli ve popüler bir hale gelmiştir.

Temiz kod üretebilmek ve yeniden yapılandırmak (refactoring) için gerekli kurallar ve teknikler Java programlama dili ve araçları kullanılarak uygulamalı olarak anlatılacaktır. Kurs temel olarak temiz kod prensipleri, temel yazılım prensipleri, yeniden yapılandırma teknikleri ve test kavramları konularından oluşmaktadır.

Not: Bu kurs yazılım geliştiricileri veya mühendisleri içindir. Test mühendisliği ile ilgilenen adaylar için bu kurs uygun değildir.

Katılımcılar için Ön Koşullar

  • Temel düzeyde nesne yönelimli programlama (OOP) bilgisi olan
  • Okuduğunu anlayacak düzeyde İngilizce bilgisi olan
  • Temiz kod ve yeniden yapılandırma (refactoring) gibi kavramlara meraklı
  • Herhangi bir nesne yönelimli bir dil ile proje geliştiren,
  • Tercihen Java programlama diline hakim kişiler hedeflenmiştir.

Katılımcılardan İstenenler

  • Dizüstü bilgisayarlarının yanında getirmeleri,
  • Sistemlerine JDK 8 (Java Development Kit) ve Eclipse for JavaEE (Neon) kurmaları gerekmektedir. Dileyenler IntellijIdea’nın topluluk versiyonunu Apache License kullanabilirler.

Kontenjan

Kontenjan 16 kişi ile sınırlıdır.

Kursiyer Seçimi

Katılımcıların seviyesini ve/veya kursiyer seçimi için kurstan önce çevrimiçi bir sınav uygulaması yapılacaktır. Bütün katılımcıların sınava dahil olması zorunludur.

Konular

  • Temiz kod nedir?
  • Kod Konvansiyonu (Code Convention)
  • İsimlendirme
  • Fonksiyonlar / Metodlar
  • Yorum Satırları
  • Kod Stili
  • SOLID
  • Exception / Error Handling
  • Sınıflar
  • Üçüncü parti bağımlılıklar
  • Yeniden yapılandırma (Refactoring)
  • Temel yeniden yapılandırma teknikleri
  • Eclipse ile yeniden yapılandırma
  • Yazılımda Test Kavramı ve JUnit
  • Test Güdümlü Geliştirme
  • Örnek Uygulama: Bowling Oyunu
  • Test prensipleri (FIRST)
  • Örnek Uygulama: Video Store
  • Testlerin temizlenmesi
  • Ürün kodunun temizlenmesi
  • Kodu gözden geçirme (Code Review)
  • Sistemler ve Yazılım Mimarisi
  • Microservice Mimari
  • Örnek Uygulamalar

27 Aralık 2016

Java’da Override Anotasyonu

Merhabalar,

Daha önce Java 8 ile gelen Optional sınıfından bahsetmiştim. Java ile ilgili ufak detay bilgiler vermeye devam edeceğim. Bu yazımızda Java Override anotasyonunun öneminden bahsedeceğim.

Java ile herhangi bir IDE kullandıysanız karşınıza mutlaka çıkmıştır. Bilmeyenler için kısaca açıklarsak Java’da bir sınıfın interface ve ata sınıfında yer alan metodları implement etmek veya değiştirmek için yazdığımız metodu @Override annotasyonu ile işaretleyerek bunu belirtmiş oluruz. Bir sınıf içerisinde Override anotasyonu metodun üst sınıflardan geldiğini bilmek için güzel bir araçtır. Varolmasının en temel amacı da budur.

Fakat Java’da bu anotasyonu kullanmak zorunda değilsiniz. Bu anotasyonu kaldırdığınızda herhangi bir compile hatası almazsınız. Fakat bu anotasyonun sağladığı önemli bir avantajı daha var. Bunun için çok kısa ve kolay bir örnek yapalım. Özellikle yeni başlayanların hata yaptığı konulardan biri:

Basit bir üye sınıfımız var. Bu sınıfın son metodunu incelerseniz bir equals metodu tanımladık. Bu metodu bir test edelim.

Bu testi çalıştırdığınızda ekranda true yazdığını görüyoruz. equals metodumuz çalışıyor. Şimdi testimizde ufak bir değişiklik yapalım.

Referanslarımızı üst sınıfa yani Object sınıfına çektik. Bu testi çalıştırdığımızda da ekranda true beklerken birden false değerini aldık. Anladınız değil mi hatayı? Java’ya yeni başlayanların durumu anlaması biraz zor olabilir.

Object.equals metodunun işaretin(signature)‘e bakalım: public boolean equals(Object obj) Member sınıfında implement ettiğimiz metod ise public boolean equals(Member m) gördüğünüz gibi bu iki metod birbirinden farklıdır. Java’da metod parametrelerini üst sınıftan altsınıflara çekemezsiniz. Yani Object.equals metodunu override etmek yerine yeni bir metod eklemiş olduk.

Burda belirtmek istediğim bir durum daha var. equals metodu Object referansı ile farklı Member referansı ile farklı sonuçlar verdi. Member.equals metodu üst sınıf olan Object in yerine geçemedi. Bu Liskov yerine geçme prensibi(Liskov Subsitution Principle)‘ne aykırıdır.

Şimdi geldik asıl sorumuza: @Override anotasyonu ne işimize yarayacak? Member.equals metoduna bu anotasyonu tanımlayalım.

Bu kodu derlemeye çalıştığnızda , method does not override or implement a method from a supertype hatasını alırsınız. Bu sayede bu anotasyon yanlışı compile zamanında size göstermiş oldu. Bu dikkatsizlik yayında daha kötü sonuçlara sebep olabilir.

Object sınıfı en çok bilinen sınıflardan biri olduğu için Object.equals elzem bir durum oluşturmayabilir. Fakat kendi yazdığınız interface ve üst sınıflar veya kullandığınız framework’lerde bu hatayı yapabilir, uygulamanızı tutarsız hale getirebilirsiniz. Yine yeni başlayanlar için düzgün bir Member.equals örneği de vereyim.

Bu kodu kendim yazmadım. Günümüzde Java IDE’leri bu kodu otomatik olarak üretebiliyor. Bu arada farklı bir yazıda anlatacağım fakat ek bilgi olarak belirteyim. Java’da equals metodu tanımlarken mutlaka hashCode metodunu da tanımlamalısınız. Java 7 ve sonrası için bunu yapmak oldukça kolay:

Bu sebeple bu anotasyonu kullanın, kullandırın!

Başka bir yazıda görüşmek üzere…

4 Ekim 2016

Java 8 Optional ve null dönebilen metotlar

Merhabalar, bu yazıda sizlere Java 8 ile beraber gelen Optional sınıfından bahsedeceğim. Bu yazı ile birlikte Java programlama dili ve teknolojileri konusunda ufak bilgiler paylaşmaya devam edeceğim. Umarım faydalı olur.

Optional sınıfının kullanımına bir örnek vererek anlatacağım. Doğrudan anlatabilecek kadar basit bir sınıf olmasına rağmen örnek üzerinden gitmenin daha kalıcı olduğunu düşünüyorum. Örneğimizde bir UserRepository sınıfı tasarlayacağız. Interface’imiz şu şekilde:

UserRepository interface’inde getByUsername() metodunun tanımlandığını görüyoruz. Adından da anlaşılacağı üzere kullanıcı adı ile veritabanında kayıtlı bir kullanıcıyı bulmak istiyoruz. Basitçe aşağıdaki implementasyonu yapabiliriz.

Herhangi bir persistent api kullanarak kullanıcı listesini aldık. Eğer liste boş dönerse girdiğimiz kullanıcı adına sahip bir kullanıcı olmadığı anlamına geldiğinden null object döndük. Eğer kullanıcı varsa listenin ilk elemanını dönüyoruz. Kullandığınız api’nin ne olduğunun bir önemi yok. Bundan farklı bir implementasyonda olabilirdi. Burda dikkat etmemiz gereken eğer veritabanında kullanıcı yoksa ne döneceğimiz. Bu tasarımda null dönmüş olduk.

Başlangıçta tasarım kusursuz görünse de null dönmenin dezavantajları var. Bu sınıfı kullanan istemciye bir sorumluluk yükledik. İstemci kullanıcıyı sorguladıktan sonra ayrıca bir de nulldönüp dönmediğini kontrol etmek zorunda. Aksi takdirde NullPointerException’a sebep olur. Ayrıca bu aslında bir implementasyon detayı. İstemci açısından interface’e baktığınızda aslında null bir değer bekleyemeyiz. Basitçe bir metot var ve kullanıcı adı verip kullanıcı nesnesi alıyoruz. Yani interface de null obje gelebileceğine dair herhangi bir tanımlama yok. Javadoc veya yorum satırı mı geldi aklınıza? Burdaki javadoc veya yorum satırı kötü koda sebep olur. Ayrıca kod açısından yine istemciyi bağlayan birşey yok. Bir diğer sorun ise null dönülmesi bir implementasyon detayı. İmplementasyon yüzünden defensif programlama yapmak zorunda kalıyoruz.

Burdaki durumda aslında kullanıcı nesnesinin null gelebileceğini tahmin edebiliriz. Mantıken baktığınızda kullanıcı veritabanında yoksa ne olur diye düşündüğünüzde null dönebileceğini anlayabilirsiniz. Fakat her durumda bu kadar basit bir durumda olmayabilir. Daha karmaşık bir implementasyonda istemci olarak bunu görmek daha zordur. null dönmek yerine exception kullanarak bir tasarım yapabiliriz:

interface’i de şu şekilde değiştiriyoruz:

Bu implementasyon yukarıda bahsettiğim sorunu çözüyor. Burada basit bir şekilde kullanıcı yoksa UserNotFoundException’u fırlattık. Ayrıca checked exception olduğundan istemci bu metodu çağırırken exception’u handle etmek zorunda veya bir üst katmana bırakabilir. Sonuç olarak implementasyona bakmadan interface bize exception fırlatabileceğini tanımlar.

Bu tasarımın da yine dezavantajları var. İstemci taraf ya bir try-catch bloğu yazmak zorunda. Yani exception mekanizmasını bir istisna durumu için değil normal akışın bir parçası olarak kullandık. Burada örneğin veritabanı bağlantısı kesilirse exception atabilirdik veya istemci geçersiz bir kullanıcı adı gönderdiğinde IllegalArgumentException gibi bir exception fırlatabilirdik. Fakat burdaki durum ne istemciye bağlı bir input hatası ne de beklenmeyen bir durum. O yüzden bu tarz yapılarda Exception kullanmamalıyız.

Çözüm olarak yine ilk tasarımımıza dönüp User entity’si dönmek yerine bir Result objesi dönebiliriz.

User entity’sini doğrudan dönmek yerine araya başka bir sınıf yerleştirerek ilk durumdaki sorunu çözmüş oluyoruz. Artık kullanıcının veritabanında olmayacağını daha net bir şekilde ifade ettik. Bu tür Result sınıflarını immutable tanımlarsak daha iyi bir tasarım yapmış oluruz. Constructor’lara isim veremediğimiz için burada static metod kullanmayı tercih ettim. UserResult sınıfı’da aşağıdaki gibi.

İstemci taraf doesUserExist() metodu ile kontrol edip gereken işlemi yapabilir. Bu şekilde tasarımımız daha stabil oldu. Àyrıca bunun büyük bir proje olacağını düşünürsek UserResult sınıfını daha generic olarak tasarlayabiliriz.

UserRepositoryImpl sınıfımızı da düzenleyelim.

EntityResult gibi result objeleri farklı implementasyonlar da içerebilir. Burda nulldönme problemini için kullandık. Özellikle katmanlar arası iletişim bu şekilde yapılmalıdır.

Java7 ile geliştirme yapsaydık eğer muhtemelen bu şekilde geliştirme yapacağız. Fakat Java 8 de bunun için java.util paketinin içerisinde Optional diye bir sınıf eklendi. Kendi EntityResult gibi sınıflar yazmak yerine null dönebilen metodlar için return type’ı Optional olarak tanımlayabiliriz.

Optional yine tasarladığımız EntityResult gibi generic ve immutable bir sınıf. Yine Optional.empty() aynı şekilde boş bir result dönüyor. null dönebilen yerlerde bunu kullanmalıyız. Optional.of() metodunu da kullanırken dikkatli olmak gerekiyor. Eğer parametre olarak verdiğiniz objenin değeri null ise NullPointerException alırsınız. Eğer bir nesne null olabilirse `Optional.ofNullable metodunu kullanın. Diğer metodlarına da kısaca değinirsem:

  • isPresent() : eğer empty ise false diğer durumda true döner. İlk tasarımımızdaki null kontrolü yerine kullanılabilir.
  • get() : Empty olmayan durumlarda Optional içerisinde tanımlanan nesneyi döner. Mutlaka get den önce isPresent() ile kontrol edilmesi gerekiyor. Aksi takdirde değer empty ise NoSuchElementException alırsınız.
  • orElse(T value) : Eğer varsayılan bir değeriniz varsa kullanabilirsiniz. empty ise verdiğiniz değeri, değilse tanımlanan değeri döner. Örneğin null almak istiyorsanız orElse(null) şeklinde nesneyi alabilirsiniz.

Bunun gibi birçok metodu var. Aynı zamanda fonksiyonel özellikler de taşıyor. Java 8 ile beraber gelmesi bir raslantı değil :) Başlangıçta metodları kullanırken mutlaka javadoc ile inceleyin. get() metodunda olduğu gibi exception alabilirsiniz. Ayrıca eğer Java 8 de Stream Api ile tanıştıysanız muhtemelen Optional sınıfını kullanmışsınızdır. Stream Api’de oldukça fazla kullanılır. Primitive tipler için de OptionalInt, OptionalDouble gibi sınıfları da kullanabilirsiniz.

Bu yazımda örnek bir tasarım ile Optional sınıfını anlatmaya çalıştım. Umarım faydalı olmuştur.

Bir sonraki yazıda görüşmek üzere…

3 Haziran 2016

WordPress’i Neden Bıraktım

Birkaç ay önce yeni tasarımla beraber hugo’ya geçtiğimi duyurmuştum. Bu yazıda’da neden artık wordpress kullanmadığımı anlatmaya çalışacağım.

Uzun süredir yazı yazmadığımı farkedince bunun nedenini araştırmaya başladım. Tabiki kişisel problemlerin de buna büyük bir etkisi var. Yeni bir blog tasarımının beni bu konuda daha çok motive edeceğini düşündüm ve yeni bir tasarıma karar verdim. Bununla beraber farklı bir yapıya geçmeyi düşünürken GoLang ile yazılmış Hugo’yu bir arkadaşımın tavsiyesi üzerine inceledim ve denemeye karar verdim. Sonrasında bu site ortaya çıkmış oldu.

Wordpress’i kendi sunucumda host ediyordum. Yoğunluk içerisinde bunun bakımını yapmak, sadece wordpress dışında PHP ve MySQL’in güncellemelerini takip etmek vs gibi işler beni bunaltıyordu. Bir güncelleme ile web sayfasının çevrimdışı olduğu zamanlar bile oluyordu.

Kullanımıma göre Wordpress’in yazı yazmak dışında hiç bir özelliğini kullanmadığımı farkettim. Bunun dışında markdown oldukça sevdiğim bir format. Markdown kullanırsam herhangi bir html editorü kullanma zorunluluğumu da ortadan kaldırıyordu. Başlangıçta Wordpress’i markdown ile kullanmayı düşünüyordum. Fakat sonradan bu kararım da değişti. Önyüz tasarımını değiştirmek zaten zamanımı alacaktı. Bu yüzden kullandığım sistemi de değiştirmek istedim. Ayrıca tüm yazıları markdown’a çevirerek aynı zamanda yazıları da tekrar inceleme fırsatım olacaktı.

Hugo’yu incelediğimde gereksinimlerimin nerdeyse tamamını karşılıyordu. Jekyll’da olduğu gibi markdown ile yazıyorsun. Basit bir command-line ile html üretiyor. Özellikle yapısı ve özelliklerini beğendim. Jekyll daha önce kullanmadım ama okuduğum kadarıyla birkaç problemi beraberinde getiriyor. Hugo’nun da beğenmediğim bir çok özelliği olmasına rağmen gereksiminlerimi bir şekilde karşıladım.

Hugo bir komut-satırı (command-line) aracı sunuyor. Hızlı bir şekilde derleme işlemini yapabildiği gibi değişiklikleri canlı olarak görmek için bir sunucu da ayağa kaldırabiliyor. Ayrıca komut satırından Web sayfa tamamen statik dosyalardan oluştuğu için istediğiniz yerde host edebilirsiniz. Github, Gitlab, Amazon S3 gibi.Yeni bir yazı yayınladığınızda otomatik yayınlanması için de ücretsiz servisler bulunmakta fakat ben Jenkins ile bunu yapmayı tercih ettim. Yeni bir yazıyı bir git deposuna gönderdikten github üzerindeki başka bir depoya yüklenmesini sağlıyorum bu şekilde yeni yazı yayınlanıyor.

Eğer bir basit blogunuz varsa, git vb gibi kavramlarla aranız iyi ise ve sadece içerik üretmeye odaklanmak istiyorsanız hugo’yu tavsiye ederim.

https://gohugo.io/

Bir sonraki yazıda görüşmek üzere…

18 Mayıs 2016

Kitap Listesi

Merhabalar

Her yazılımcının olduğu gibi benim de bir kitap listem var. Bu kitap listesini sizlerle paylaşmak istiyorum. Yazılım konusunda kendini geliştirmek isteyenler bu kitapları okuyabilir. Bazı kitaplar Java teknolojilerine özgü bazıları ise genel kitaplar. Zaman zaman bu listeye yeni kitaplar ekleyip bazı kitapları çıkartabiliyorum. Böyle bir durumda bu sayfayı da güncelleyeceğim. Kitap listesini seviyeye göre sıralamaya çalışacağım. Bazı kitaplar için altta açıklamalar bulunmaktadır. Kitap listesine gelirsek:

  • Head First Java*

  • Head First Design Patterns*

  • JUnit in Action 2*

  • Test Driven Development by Example*

  • Clean Code*

  • Refactoring - Improving the Design of Existing Code*

  • Effective Java*

  • Pojo in Action*

  • Code Complete*

  • Domain Driven Design

  • Clean Coder

  • Effective Unit Testing

  • Java Concurrency In Practice

  • Working Effectively Legacy Code

  • Pratik Agile

  • Pratik Spring

  • Design Patterns Elements of Reusable Object-Oriented Software (GoF)*

  • Implementation of Design Patterns

  • Agile Software Development

  • Extreme Programmin Explained

  • Patterns of Enterprise Application Architecture

  • Functional Programming for the Object Oriented Programmer

  • Object Oriented Analysis and Design

  • Object Oriented Software Engineering

  • Structure and Interpretation of Computer Programs

  • Modern Operating Systems

Head First Java: Bu kitabı okumadım ama detaylı inceledim. Java’ya yeni başlayanlar için tavsiye ettiğim bir kitap.

Head First Design Patterns: Özellikle yeni başlayanlar için tasarım desenlerini akılda bırakan bir kitap. Mutlaka tavsiye ederim.

JUnit in Action 2: JUnit4, Mocking, stubbing gibi konuları güzel anlatıyor. İlerideki konuların teknolojileri eski kalmış olabilir. Neticede bir in Action kitabı.

Test Driven Development by Example: Yine yeni başlayanlara tavsiye edebileceğim bir kitap.

Clean Code: Her yazılımcının mutlaka okuması gereken bir kitap.

Refactoring - Improving the Design of Existing Code: Clean Code gibi bu kitap da herkesin okuması gerekenler arasında

Effective Java: Her Java’cının mutlaka okuması gereken bir kitap. Joshua Bloch tarafından yazılmış Java ile ilgili önemli detayları anlatıyor. Kitabın Java 8 için olan hatta Java 9 için bir yeni baskısı olsa güzel olurdu.

Pojo in Action: Chris Richardson tarafından yazılmış, tasarım ve mimariye giriş niteliğinde bir kitap. Kitap kullandığı teknolojilere göre eski kalsa da teorik bilgiler her zaman tazeliğini korur. Yine bu kitabı da herkese tavsiye ederim. Özellikle mimari konularında yeni olanların ufkunu açacaktır.

Code Complete: Bu kitabı okumaya başladığımda bu kadar iyi olacağını tahmin etmiyordum. Bir tavsiye üzerine okumaya başladım. Kitap çoğunlukla teorik bilgiler üzerine ve herkesin mutlaka okuması gereken bir kitap olduğunu düşünüyorum.

Effective Unit Testing: Ben bu kitabı bir AnkaraJUG etkinliğinde kazandım. Listemde ama henüz okumadım. AnkaraJUG ve Manning Pub.‘a teşekkürlerimi sunuyorum.

Design Patterns Elements of Reusable Object-Oriented Software(GoF): O meşhur Design Patterns kitabı, mutlaka herkes okumalı

22 Mart 2016

Yeni Tasarım Yeni Blog

Merhabalar

Uzun zamandır blog yazmıyordum. Bunun en büyük sebebi iş hayatı vs dışında yeni bir yapıya geçmek istememdi. Bu yüzden öncelikle öncelikle hem tasarımı hem de blog altyapısı değiştirdim. Yoğunluğun da verdiği etki yüzünden gecikmeli de olsa bugün yeni tasarımı yayınladım.

İlk blogumu 2008 yılında yayınlamıştım. O zamanlar bloglar popüler olmaya başlamıştı. Bense sadece kendim için bir web sayfası oluşturmak istedim. Daha sonra yazılım mühendisliği ile ilgilenmem ve üniversite ile birlikte birçok içeriği çöpe atıp tekrar tekrar yeni yazılar yayınladım. Bu arada birçoğunun tasarımını da kendim yapıp front-end implementasyonlarını da kendim yaptım. Bu blog da öyle :)

Önceki tasarımı yaptığım zamanlar, mobil cihazlar popülerleşmeye başlasa da mobil siteler henüz popüler değildi. Bootstrap CSS framework’u o zamanlar hatırlıyorum. Fakat genelde kendi stillerimi oluşturmayı tercih etmiştim. Benim ilk front-end’le uğraştığım zamanlarda tablo ile yapılan sitelerin sayısı az değildi. Mezun olduktan sonra o temayı yeniledim fakat yine mobil cihazlar için uygun değildi. Önceki temayı geliştirdikten sonra tamamen back-end teknolojilerle ilgilendim. Uzun bir aradan sonra tekrar front-end e girdim. Normalde daha koyu renkleri seviyordum bu tasarımda Sadık’ın da baskısıyla daha açık renkleri tercih ettim. Yine aynı şekilde sade bir tasarım tercih ettim. Tamamen yazıyı okuma odaklı bir tasarım oldu. İlk defa bir CSS framework’u Semantic UI’yu tercih ettim. Artık günümüzde bu araçlar başarılı ve kesinlikle kullanılması gerekiyor.

Bu değişimde altyapı da değişti. Şu an bu web sayfası tamamen statik dosyalardan oluşuyor. Evet Wordpress kullanmayı bıraktım. Bir daha da kullanmayı düşünmüyorum. Php ile ilgili tek bağım da ortadan kalkmış oldu. Statik dosyalardan oluştuğu için birçok yerde host edebilirim. Şimdilik github ile devam edeceğim. Bu arada gitlab’ın da bu konuda başarılı olduğunu ve ücretsiz private depo verdiğini de söylemeden geçmeyeyim. Bu arada statik sayfaları üretmek için de hugo kullandım.

Bu arada içeriklerin bir kısmını da restore ettiğimi söylemeliyim. Bazı yazıları tamamen kaldırdım. Bazıları ise yenilenmek üzere bekliyor.

Bu benim yeni blogumda ilk yazım. Bundan sonra yazılımla ilgili birçok konuda paylaşımda bulunacağım. İlerde video da paylaşmayı düşünüyorum. Çok yoğun bir insanım ama zaman buldukça paylaşım yapmaya devam edeceğim. Aynı şekilde bu tasarımda farklı farklı değişikliklere uğrayabilir.

Bir sonraki yazıda görüşmek üzere

15 Mart 2016

Hakkımda

Merhabalar.

Ömer Özkan Bu site kendi duygu ve düşüncelerimi aktarmak için oluşturduğum kişisel bir web günlüğüdür. Bu sitede yazılım ile ilgili (özellikle java ve açık-kaynak teknolojileri) bilgiler, yazılım geliştirmenin derinlerine inerken yaşadığım olaylar, katıldığım etkinlikler ve diğer konulardaki kişisel düşüncelerim hakkında bilgiler bulabilirsiniz.

Kendimden kısaca bahsedersem:

  • 1990, Ceyhan doğumluyum,
  • Yazılım mühendisiyim,
  • Mümkün olduğunca “Özgür” ve açık kaynak yazılım kullanırım ve geliştirmeye çalışırım.
  • 2014 yılında “Bilgisayar Mühendisliği” bölümünden mezun oldum.

Programlama dilleri ve teknolojiler arasında ayrım yapmamakla beraber favori ortamım Java’dır. Daha çok kurumsal uygulamaları severim. Clean code akimi, refactoring, çevik yöntemler benim için oldukça önemlidir. İmkan buldukça TDD uygularım. Yazılım geliştirme ile beraber yazılım mimarisi konusunda da uzmanlaşmaya çalışmaktayım. Düzenli olarak kitap okumaya ve kendimi geliştirmeye çalışırım. Öğrenmenin yanında öğretmeyi de severim. İmkan buldukça etkinliklerde konuşmacı ve eğitmen olarak yer alırım.

Özellikle Robert C. Martin (Uncle Bob), Martin Fowler, Kent Beck gibi ustaları takip eder, onların görüşlerini savunurum.

Müzik benim en sevdiğim hobilerimden biridir. Bir başlangıç serisi Ibanez gitarım ve Vox VT20 amfim var. Zaman buldukça öğreniyorum.

Bu web sayfası 2008 den beri yayınlanmaktadır. Fakat bugüne kadar birçok değişikliğe uğramıştır. Bundan sonra tema dışında bir değişikliğe uğrayacağını sanmıyorum. Yazılar hakkında düşüncelerinizi yorum yazarak veya e-posta atarak bana iletebilirsiniz.

16 Şubat 2016

AB 16 Temiz Kod Kursu

Merhabalar

Bu yıl Sadık Çetin ile beraber, 30 Ocak – 2 Şubat arasında Aydın’da düzenlenecek Akademik Bilişim konferans öncesi kurslar kapsamında Temiz Kod kursu vereceğiz. Kurs tamamen ücretsiz olup herkese açıktır. Katılımcılar dilerlerse KYK yurtlarında da konaklayabilirler. Kurs genel olarak clean code, refactoring ve test driven development konularını içermektedir.

Kayıt için: https://kayit.ab.org.tr

Kurs hakkında detaylı bilgiyi yazının devamında bulabilirsiniz.

Kurs Hakkında

Bir yazılımın bakımını yapmak geliştirmekten daha zordur. Kod altyapısının temiz olması ürünün bakımını kolaylaştırır. Bu açıdan temiz kod akımı yazılımda oldukça önemli ve popüler bir hale gelmiştir.

Temiz kod üretebilmek ve yeniden yapılandırmak (refactoring) için gerekli kurallar ve teknikler Java programlama dili ve araçları kullanılarak uygulamalı olarak anlatılacaktır.

Katılımcılar İçin Ön Şartlar

  • Temel düzeyde nesne yönelimli programlama (OOP) bilgisi olan

  • Okuduğunu anlayacak düzeyde İngilizce bilgisi olan

  • Temiz kod ve yeniden yapılandırma (refactoring) gibi kavramlara meraklı

  • Herhangi bir nesne yönelimli bir dil ile proje geliştiren,

  • Tercihen Java programlama diline hakim kişiler hedeflenmiştir.

Katılımcılardan İstenenler

  • Dizüstü bilgisayarlarının yanında getirmeleri,

  • Sistemlerine JDK 8 (Java Development Kit) ve Eclipse for JavaEE (Mars) kurmaları gerekmektedir, (Dileyenler IntellijIdea’nın topluluk versiyonunu kullanabilirler.)

Kontenjan

Kontenjan 16 kişi ile sınırlıdır.

Konular

1. Gün

  • Temiz kod nedir?
  • Kod Konvansiyonu (Code Convention)
  • İsimlendirme
  • Fonksiyonlar / Metodlar
  • Yorum Satırları
  • Kod Stili
  • Nesneler ve Veri Yapıları

2. Gün

  • Exception / Error Handling
  • Sınıflar
  • Üçüncü parti bağımlılıklar
  • Yeniden yapılandırma (Refactoring)
  • Temel yeniden yapılandırma teknikleri
  • Eclipse ile yeniden yapılandırma

3. Gün

  • Testler ve JUnit
  • Temiz Testler
  • Test Güdümlü Geliştirme
  • Örnek Uygulama: Bowling Oyunu
  • Test prensipleri (FIRST)
  • Örnek Uygulama: Video Store
  • Testlerin temizlenmesi
  • Ürün kodunun temizlenmesi

4. Gün

  • Kodu gözden geçirme (Code Review)
  • Sistemler
  • Temiz Mimari
  • Eşli Programlama (Pair Programming)
  • Eşli Programlama Uygulaması: Roma Rakamları, Tenis Oyunu

2 Ocak 2016

Gradle ile Proje İnşası Semineri

Özgür Yazılım ve Linux Günleri 2015, İstanbul Bilgi Üniversite’sinde gerçekleşti.

Bu etkinliğe ben de “Gradle ile Proje İnşası” başlıklı sunumum ile katıldım.

Konu Özeti

Gradle, Java dünyasının popüler inşa sistemlerinden biridir. Popüler inşa sistemleri Ant ve Maven ile uyumlu olmakla beraber, bir programlama dili Groovy ile yapılandırılması sağlanarak esnek bir sistem sunar. Gradle’ın getirdiği yenilikler, bağımlılık yönetimi, derleme ve paketlemenin nasıl yapıldığı, esnek yapısı, maven ve ant ile kıyaslanması, task’ların nasıl yazıldığı, avantajları ve dezavantajları konular örneklerle anlatılmıştır.

Sunum dosyasına aşağıdaki bağlantılardan ulaşabilirsiniz:

Slideshare

9 Nisan 2015

WP Twitter Auto Publish Powered By : XYZScripts.com