Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
09 Ocak 2014

Java’nın Performansı: Java Yavaş mı?

Akin Java Java Performans, Java tuning, JVM tuning, optimizasyon, performans

Uzun süredir yazmak istiyordum Java’nın performans ve optimizasyon konuları üzerine. Nasip 2014 yılının başınaymış.

Java ilk çıktığı andan bu yana genel olarak “yavaş” olmakla suçlanmakta ya da en azından yavaş oluşundan dem vurulmaktadır. Bu tür ifadelerin bir kısmı ciddi tecrübelere dayanmakla birlikte pek çoğunun ezbere edilen cümleler olduğunu ifade etmekte fayda var.

Öncelikle “yavaş” olmak üzerine eğilelim ve “yavaş” olmaktan ne kastediliyor ona bakalım. Java’nın neyi yavaş? Java ile geliştirilen yazılımlar mı yavaş yoksa dil olarak Java mı yavaş olan? Yoksa ikisi de mi? Şunu teslim edelim ki bir yazılım sisteminin performansı hangi dili ya da teknolojiyi kullandığından ziyade, nasıl bir mimari ile kurgulandığıyla ilgilidir. Donanım ve yazılım altyapısının nasıl kurgulandığı, farklı sub-systemler arası haberleşmeler, ön bellek (cache) kullanımı gibi mimari kararlar, çoğu zaman çok performanslı kod yazmaktan daha önemlidir. Çünkü sağlıklı kurgulanmış bir mimari ile çok mütevazi dil ve araçlar kullanarak, son derece performanslı yapılar oluşturulabilir. Örneğin yüzlerce hatta binlerce sunucunun paralel bir şekilde nasıl çok yüksek bir ölçeklenebilirlik (scalability) oluşturabildiğini ya da  ön bellek kullanımının performansı nasıl arttırdığını görmek isterseniz Facebook’un mimarisine bir göz atın derim. Bu amaçla buraya, buraya, buraya, buraya, buraya ve de buraya bakabilirsiniz. Bu şekilde PHP ile yazılmış bir web önyüze, C++ ve Java gibi dillerle yazılmış servis yapılarına ve MySQL üzerinde çalışan bir veri tabanı yapısına sahip dev bir mimarinin, örneğin 2011 sonu itibariyle saniyede 60 milyon sorguyu (query) nasıl karşıladığını, dahası bu sorguların %90’ının daha veri tabanına gelmeden ön bellek (cache) üzerinden nasıl cevaplandığını hayretle öğrenebilirsiniz. Yukarıda verdiğim linklerin sonuncusunda zaten Facebook’dan teknik bir uzman bir strateji olarak, bilenen ve yaygın kurumsal (enterprise) web, uygulama, veri tabanı, dosya vb. sunuculara tonla lisans ücreti ödemek yerine, AR-GE yaparak, kendilerine uygun bir mimariyi nasıl geliştirmeye para ayırdıklarını açıklıyor.

Zaman zaman rastlıyorum. Bir süre önce geliştirilmiş bir uygulama artık performans sıkıntısı yaşamaya başlıyor. Yazılımı geliştirenler biraz sistemi inceleyip, performansını iyileştirici işler yaptıklarında sistemin davranışı çok değişiyor, çok daha performanslı davranmaya başlıyor. Nedir yaptıkları? Muhtemelen dil seviyesinde değil de mimari seviyedeki iyileştirmelerle bu sonuç elde ediliyor. Elbette bu iyileştirmelerin dile uzanan kısımları da var ama çoğunlukla JVM parametrelerinde ya da uygulamanın topolojisine uygulanan değişiklikler, rahatlıkla uygulamanızın performansını çok ciddi boyutta rahatlatabilir.

Biraz da dil olarak Java’nın yavaşlığından ya da performansından bahsedelim. Java gerek CPU kullanımı dolayısıyla da zaman, gerekse bellek tüketimi açısından, selefi olan C ve C++ dillerinden daha problemlidir. Dolayısıyla Java temelde C ve C++ ile kıyaslanmaktadır. (Bunun sebebi de Java’nın da temelde bu iki dil gibi genel amaçlı olma ve özellikle iş yazılımları geliştirmede kurumsal ihtiyaçları karşılama iddiasındadır. İşin açıkçası, bu iddiada Java’nın çok önde oluşu su götürmez bir gerçektir.)  Çünkü bu diller, yapı olarak Java’dan çok farklılar. Bir başka deyişle Java, temelde C/C++’tan elde edilen tecrübe üzerine ve web gibi yeni gelişmelere cevap için geliştirildiğinden, tasarımı sırasında alınan örneğin (işletim sistemi ve donanımdan oluşan) platformdan bağımsız olması gibi özelliklerinden dolayı, tabiatı itibariyle daha yavaş çalışmaya meyilli olması normaldir. Burada “meyilli” kelimesini özenle kullandım çünkü, çıkışından bu yana Java derleyicileri (compiler) ve run-time ortamı olan JVMleri ile ilgili o kadar çok çalışma ve yenilik yapıldı ki, bunlar sayesinde kulağınıza inanılmaz gelecek ama Java kodunuzun, eşleniği olan C/C++ kodu kadar hatta daha hızlı çalışması mümkün hale geldi.

Yapısal olarak Java’yı C/C++’tan ayıran dolayısıyla da yavaş kılma ihtimali yüksek olan özelliklerini sıralamak istersek:

  • Platform bağımsız olması sanırım en önde gelir. Java nihayetinde JVM denen sanal bir makine, bir yazılım içinde çalışıyor, dolayısıyla, platformdaki kaynaklara yani CPU, bellek, threadler, hard disk, soketler vs. erişimi dolaylı yoldan olmaktadır. Bu da tabiati icabı bu erişimleri yavaş kılmakta. Tüm bu sıkıntılara Java’nın platformdan bağımsız olması için katlanıyoruz. Böyle bir durum söz konusu olmadığında Java kaynak kodunu doğrudan native koda derleme imkanınız var. Nitekim JVMlerin pek çoğunda bulunan JIT derleyicisi (Just-in-time compiler), kritik kod bloklarını anında-görüntü modunda, native koda çevirir. Bu durum tabi olarak aslında Java kodunun C kadar hızlı çalışabileceği fikrini aklımıza getiriyor. Facebook’un PHP ile yaptığı da bu aslında, PHP ile yazıp, native koda derleyip, native hızında çalıştırmak, eskiden bu yana bilinen bir taktiğin PHP’ye uygulanması, belli ki işe yarıyor.
  • Java nesne-merkezli bir dildir. Dolayısıyla Pascal ya da C gibi yordamsal dillerde int ya da float gibi basit tiplerle ama bölük-pörçük olarak ifade ettiğimiz yapılar Java’da daima çok daha bütünsel ve anlamlı olarak nesnelerle ifade edilir. Basit tipleri manipule etmek, nesneleri manipule etmekten daima çok daha kolaydır. Çünkü nesneler, bir ya da daha fazla basit tipi bir araya getirir ve bu veriler üzerinde çalışan fonksiyonlara da sahip olur. Bu yüzden nesneleri oluşturmak, yönetmek ve sonunda da bellekten silmek kesinlikle çok daha fazla kaynak isteyen bir iştir. Nesneler tabii olarak basit tiplerden çok daha fazla yer kaplar, nesneleri yazılımın katmanları, veri tabanı gibi diğer alt sistemler arasında gezdirmek daha fazla CPU ve belleğe ihtiyaç duyar. Java’da 8 basit tip dışında her şeyin nesne olduğunu, örneğin String’in bir nesne olduğunu, sıra dışı durumların (exceptions), dizilerin, iş alanı kavramlarının, kısaca her şeyin bir nesne olduğunu düşünün. Nesnelerin bir kalıtım hiyerarşisine sahip olduğunu (siz oluşturmasanız bile Java APIsindeki sınıflarda zaten derin hiyerarşiler vardır) ve nesneler üzerindeki metotların polymorphic olduğunu da düşünün.  Dolayısıyla Java’nın özellikle run-time ortamının daha fazla iş yaptığı ve bunun da Java’yı hantal kılacağı söylenebilir.
  • Java’da devamlı nesne oluşturmak zorunda oluşumuz, zamanı gelince nesneleri ortadan kaldırmak gibi bir derde de sebep oluyor. Malum, metotlarla ilgili run-time yapıları stackde tutulur. Yani run-timeda metotlar açıldıkça, JVM, yerel (local) değişkenlerini kendilerine has bellek alanı olan stackde tutar. Metotlarda oluşturduğunuz değişkenler, Java’nın 8 tane olan primitive tipinden ise, bu tür değişkenlere referans oluşturamadığınızdan yani bu basit türden olan değişkenler farklı metotlara ancak değerleri kopyalanarak geçildiklerinden, bu türden olan değişkenlerin ömrü, en çok içinde tanımlandığı bloğun/metodun ömrü kadardır. (Scope kurallarını hatırlayın.) Ama bir metot içinde nesne oluşturduğunuzda, stack sadece o metodun referansını tutar ve metot bittiğinde referansı temizlenir. Eğer nesnenizi, metot bitmeden farklı metotlara geçmişseniz, aynı nesneye yeni referanslar oluşturmuş olursunuz ve bu durumda o nesnenin ömrü, kendisine ulaşan referansların ömrüyle belirlenir. Yani bir nesneye referans olduğu müddetçe o nesne bellekte kalmaya devam eder. Bu durum da çok bilinen memory leak problemine sebep olur. (Bazılarımızın yaptığı gibi nesne oluşturmamak bellek problemine çare olabilir ama bu durumda da “Java görünümlü C” kullanıyor durumuna düşülecektir.) Özellikle iş uygulamalarının bolca nesne oluşturmaya yatkın yapısı, bu tür uygulamaların nihayetinde performans ve ölçeklenebilirlik problemleri yaşamasına sebep olmaktadır. Dolayısıyla bellek yönetimi Java’da ciddi bir problemdir ve bu hem JVM hem de geliştirilen yazılımlar açısından dikkatli bir şekilde ele alınmalıdır.

Internet’te pek çok yerde Java’nın yavaşlığı hakkında yazılar, benchmarklar ve tartışmalar bulursunuz. Mesela burada ve burada olduğu gibi. Ben, bunca yıllık tecrübemden sonra şunu rahatlıkla söyleyebilirim: Yavaş olan Java programcıları, Java değil. Javacılar olarak, kaliteli ve hızlı çalışacak kod yazmada o kadar geriyiz ki, ben malesef, senelerdir Java kodu yazan kişilerin JVM’in yapısı ya da ne bileyim ArrayList ile LinkedList’in uygun kullanım yerleri hakkında olması gerekenden çok daha az hatta hiç bilgi sahibi olmadıklarına, alışa geldikleri şekilde kod yazdıklarına çok sıklıkla şahit oluyorum. Elalemin saniyede binlerce transactionı başarılı bir şekilde çalıştırdığı Javayla biz yazılım geliştirdiğimizde, çok daha küçük sayılarla ifade edilen yüklerde bile sıkıntı çekebiliyoruz. Facebook’un ön tarafta PHP, arkada MySQL ile sağladığı performansın çok cüzi bir kısmını biz önde Java arkada Oracle DB ile sağlayamıyoruz. Unutmayın, ben bu ülkede “Oracle yavaş” diyenleri bile gördüm.

Şu bir gerçek: En temelde yukarıda saydığımız sebeplerden dolayı, C ve C++ gibi native çalışan dillerin gelişi güzel yazıldıklarında sağladıkları performansı Java’da sağlamak için, Javacıların,  C/C++ yazılımcılarından daha bilgili ve maharetli olması gerekli. Bu anlamda gelişi güzel yazılmış C kodu ile Java kodu arasında performans olarak örneğin 100 kat fark varsa, iyi yazıldıkları durumda bu farkın çok azaldığı hatta Java derleyicilerinin ve JVM’in yapısından dolayı, Java kodunun daha performanslı hale geldiğinden çok sıklıkla bahsedilir. Dolayısıyla Javacılar, mimari, algoritmik karmaşıklık gibi seviylerde çok iyi olmakla birlikte Java dilini de çok verimli kullanmak zorundalar. Aksi taktirde çok sıklıkla karşılaştığımız sıkıntılı durumlara düşmek işten bile değil.

Yazımızı, Java’nın temelde “hızlı çalışma” için ortaya çıkmadığını hatırlatarak son verelim. Javacılar için modulerlik, lowly-coupled, highly-cohesive dolayısıyla da daha rahat değişebilen yapılar ortaya çıkarmak, etkin, hızlı çalışan kod yazmaktan pek tabi daha önemlidir. Ama bu Java kodunun son derece yavaş ve hantal olması anlamına gelmez. Gerektiği kadar hızlı ama düzenli bir mimari ve kod yapısı her zaman tercihe şayandır. Biraz bilgi ve gayret ile son derece hızlı ve ölçeklenebilir Java yazılımları geliştirmek çok da zor değildir.

İyi bir performansa sahip Java kodu için aslında aslında yapmamız gereken ilk şey, bu durum hakkında bir farkındalığa sahip olmaktır.

“Hızlı” Java kodlu günler dilerim 🙂

Toplam görüntülenme sayısı: 3280

38 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
07 Aralık 2013

Özcan Acar’ın KurumsalJava.com Kitabı

Akin Java Java, Java EE, kitap, Kurumsal Java

Arkadaşlarımızdan Özcan Acar yine güzel bir çalışma ile Java ve yazılım topluluğumuzu desteklemeye devam ediyor. Sağolsun kendisi www.kurumsaljava.com adresindeki blog yazılarından seçtiklerini PDF formatında online bir kitap olarak bizlerin kullanımına sunmuş durumda. http://www.kurumsaljava.com/ adresinden ulaşılabilecek olan kitabı, Javacıların sevrek okuyacaklarını tahmin ediyorum.

Java üzerine kaliteli Türkçe telif kitaplarımızın sayısının artmasin dileğiyle…

Toplam görüntülenme sayısı: 2390

20 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
21 Kasım 2013

BT Sektöründeki Ulusal Meslek Standartlarımız – I

Akin BT Bilişim Teknolojileri, BT İş Analisti, BT İş Analizi Elemanı, Meslek Standartı, Yazılımcı Geliştirici

Çalışma ve Sosyal Güvenlik Bakanlığı’na bağlı olarak çalışan Mesleki Yeterlilik Kurumu’nun (http://www.myk.gov.tr) öncülüğünde başlatılan Ulusal Meslek Standardlarının Hazırlanması çalışması aynı kurumun Meslek Standartları Dairesi Başkanlığı tarafından yürütülmekte. Bu çalışmalar çerçevesinde Bilgi Teknolojileri sektörü için hazırlanan 9 meslek standardı 5 Kasım 2013 tarihinde Resmi Gazete’de yayınlandı. Yayınlanan standartlar şunlar:

  • Yazılım Geliştirici (Seviye 4) Ulusal Meslek Standardı
  • Yazılım Geliştirici (Seviye 5) Ulusal Meslek Standardı
  • Yazılım Geliştirici (Seviye 6) Ulusal Meslek Standardı
  • Yazılım Uygulama ve Destek Elemanı (Seviye 4) Ulusal Meslek Standardı
  • Yazılım Uygulama ve Destek Elemanı (Seviye 5) Ulusal Meslek Standardı
  • Veritabanı Teknik Elemanı (Seviye 4) Ulusal Meslek Standardı
  • Veritabanı Yönetmeni (Seviye 5) Ulusal Meslek Standardı
  • BT İş Analizi Elemanı (Seviye 5) Ulusal Meslek Standardı
  • BT İş Analisti (Seviye 6) Ulusal Meslek Standardı

Milletimize hayırlı olsun diyorum 🙂 Bu standartlara kısaca göz attım, evlere şenlik 🙂 Nasıl bir şenlik olacağını sonraki yazılarımda açıklamaya çalışacağım.

Bol standartlı günler dilerim.

Toplam görüntülenme sayısı: 952

8 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
21 Kasım 2013

İş Analisti mi, İhtiyaç Analisti mi yoksa Sistem Analisti mi?

Akin İş ve İhtiyaç Analizi, Yazılım Mühendisliği Analist, analiz, İhtiyaç Analisti, İş Analisti, Sistem Analisti, Yazılım İhtiyaç Analisti

2000’li yılların başlarında sıfırdan kurup, hemen her türlü çalışma ve iletişim prensiplerini belirlediğim bir yazılım grubundaki analistlere “requirements analyst”den esinlenerek “ihtiyaç analisti” ünvanını uygun görmüştüm. Daha sonra bir vesileyle farkettim ki ihtiyaç analisti olarak çalışanlardan bir bayan arkadaş, şirket ve proje içi yazışmalardaki emaillerinde isminin altında bu ünvanı kullanırken, dış yazışmalarında, mesela arkadaşlarıyla olan emaillerinde “analist” sıfatını yeterli görüyordu. Bu komik durumun sebebini sorduğumda arkadaşım, “Akın bey zaten kimse ne iş yaptığımıza akıl sır erdiremiyor, bu yüzden “ihtiyaç analisti” deyince hepten komik oluyor, bana “şuna ihtiyacım var, alır mısın?” diyorlar, bu yüzden onlarla olan yazışmalarımda “ihtiyaç” kelimesini çıkardım” şeklinde cevap vermişti 🙂

Evet iş analisti, ihtiyaç analisti ve sistem analisti nedir? Bunlara geçenlerde bir vesile ile duyduğum “fonksiyonel analist” ünvanı da katıldı. Analist-programcı ise zaten çok eskiden bu yana bildiğimiz bir ünvan. Dolayısıyla “nedir bu ünvanlar?” diye sorabiliriz. Aralarında fark var mıdır? Yoksa aynı şeye verilen farklı isimler mi?

Söyle açıklayabiliriz: Evet aslında hepsi az çok farklı roller. Temelde iş analistinin ihtiyaç analistinden farkını bu ve bu yazıda iş analizi-ihtiyaç analizi farkını ele alırken açıklamıştım. Kısaca tekrar edersek iş analisti, herhangi bir yazılım geliştirme söz konusu olmadan bir işin nasıl yapıldığını ortaya koyar, analitik olarak ele alır, sistematik olarak ifade eder ve belgeler. İş analistinin bir işi analitik olarak ele alması, iş süreci ile bu süreçlerdeki iş kurallarını ve kısıtları, süreçlerde yer alan kullanıcıları, entegre olunan, kendisiyle haberleşilen farklı sistemleri ortaya koymasıdır ve işteki

  • Süreçler ve akışları ile kurallar ve aktörler arasındaki ilişkileri,
  • Sebep-sonuç, öncelik-sonralık bağlantılarını, karmaşıklık düzeylerini,
  • Sıra dışı durumları, envai çeşit “what if” senaryolarını,
  • Her türlü girdileri, çıktıları ve raporları,
  • Önemli bilgi öbeklerini (information set) ve ilgili kısıtları

sistemli olarak çıkarıp doğrulaması ve dokümante etmesidir.

Bu anlamda iş analisti bir yazılım uzmanı değildir, işini yapmak için yazılımlardan faydalanan bir iş uzmanıdır!

İş analistinden, var olan süreçlere iyileştirmeler yapabileceği gibi, yeni süreçler de kurgulamasi beklenir. Bu anlamda bir iş analistinin, o işi operasyonel olarak yapandan yani kullanıcıdan temel farkları vardır. Operasyonel çalışanlar, o işin sadece kendine bakan taraflarını, parçalı bir şekilde, senaryo düzeyinde ve kendi bireysel yeteneklerinin izin verdiği ölçüde gözlemlere dayanarak, çoğu zaman gelişi-güzel ifade ederler, muhtemelen dokümante edemezler. İş analisti ise işi bütüncül olarak, her türlü detayıyla, sistemli olarak ele alır, çözümleyici bir şekilde yaklaşır ve formal yöntemlerle tarif edip standart doküman olarak ifade eder. Bu anlamda operasyonel çalışanlar iş süreçleriyle ilgili ufak tefek iyileştirme önerilerinde bulunabilirler ama yeni süreç kurgulayamazlar. Fakat iş analistleri sistematik ölçümlerden faydalanarak iş süreçlerinde iyileştirmeler yapabildiği gibi yeni süreçler de kurgulayabilir.

Bir işin, bir yazılım sistemiyle otomatikleştirilebilecek şekilde detaylandırılmasına yazılım ihtiyaçları analizi (software requirements analysis) ya da kısaca ihtiyaç analizi denir. Bir işin yazılım sistemiyle otomatikleştirilebilmesi için öncelikle o işin iş analizinin yapılmış olması gereklidir. Genel olarak bir işin analizinin sorumluluğu o işi yapan kurumda, yazılım ihtiyaçlarının analizi ise yazılımı geliştirecek kurumda olmalıdır: İster iş bölümü (separation of concerns) deyin ister “kendini bil” (know yourself) deyin, neresinden bakarsanız bakın böyle bir ayırım vardır.

Yazılım ihtiyaçlarını analiz eden kişiye de ihtiyaç analisti (requirements analyst) denir.

İhtiyaç analisti, iş analizi yapılmış bir işin yazılıma konu olacak şekilde detaylarını

  • Bulur ve ortaya koyar (extraction),
  • Çözümler, bileşenlerine ayırır (analysis),
  • Sistemli olarak ifade eder, tanımlar (specification) ve
  • Formal olarak dökümante eder (documentation).

İhtiyaç analizinin, iş analizinden farkı, işin bir yazılıma konu olabilecek şekilde ifade edilmesi, dolayısıyla iş analizinin yazılım ihtiyaçlarıyla donatılmasıdır. Bu farklar şöyle listelenebilir:

  • Performans, ölçeklenirlik, güvenlik, kullanılabilirlik vb. mimari ihtiyaçlar,
  • Kullanıcı arayüzleri, insan-bilgisayar iletişimi (HCI) ihtiyaçları, girilen bilgiler ve kısıtları
  • Bilgi öbeklerinin detayları, tip, doğrulama ve kısıt bilgileri,
  • Artan kullanıcı çeşitliliğinin getirdiği kolay kullanım yetenekleri,
  • Entegrasyonlar, sistemin dışarıdan aldığı ve dışarıya verdiği bilgiler,
  • Sistem ihtiyaçları, gerekli donanım ve yazılım sistemleri,
  • Yazılım standartları, uyulması gerekenler şartlar vs.,
  • Yazılım kalitesi kriterleri, hata sayısı vb.
  • Projenin bütçe, zaman, çalışan, risk vb. faktörleri.

Sistem analizi ise sistemin donanım ve yazılımını geliştirmeye kadar girmese bile, sistemin fonksiyonel çözümlemesi yanında fonksiyonel mimarisini de tasarlanmasına verilen isimdir. Bu anlamda sistem analisti, veri tabanı tasarımı, fonksiyonel bileşenler gibi konularda tasarım yanında sistem testini hatta sistem kurulumunu (deployment) da yapar. Bu sebeple sistem analisti yazılım geliştirme dilleri ve ortamlarına aşina olmalıdır. Bu anlamda sistem analisti 80’li ve 90’li yılların pozisyonudur ve modern zamanlarda sistem analistleri, tasarım sorumluluklarını bırakarak daha fazla müşteri ihtiyacına odaklı analist olmaktadırlar.

Analist programcı ise, geliştireceği iş süreçlerini hem analiz eden hem de kodunu yazan kişidir. Tarihi olarak BT dünyasındaki en eski rollerdendir ve iş süreçlerinin çok karmaşık olmadığı, nispeten daha algoritmik yazılımların geliştirildiği dönemlerde, özellikle de belli büyüklüğü aşmayan projelerde en çok sıklıkla karşımıza çıkan roldür. Ülkemizde malesef hala son derece yaygın olarak kullanılmakta olan bu rol sayesinde iş ve ihtiyaç analizi ile tasarım ve kodlama zaten aynı zihinden çıkmakta ve sonucunda da yazılım çıktısı çok ciddi problemlere sahip olmaktadır.

Dolayısıyla iş analisti, ihtiyaç analisti, sistem analisti ve analist programcı rol olarak farklı oldukları gibi, yazılım geliştirmeye yaklaşım açısından da farklı paradigmaların kavramlarıdır. Aslolan ise iş ve yazılım analizini ayırmak, geçiş noktalarındaki kaçınılmaz durumlar hariç, içlerine tasarım ve kodlama faaliyetlerini olabildiğince sokmamaktır.

Karmaşık olan, gittikçe karmaşıklaşan iş süreçlerini ve kurallarını bilgi yığını olarak ele almak ölümcül bir hatadır. Allah her yazılımcıya, işini bilen müşterilerle, ihtiyacı sağlıklı bir şekilde çıkarılan yazılım projelerinde çalışmayı nasip etsin 🙂 Bir yazılımcı için bundan güzel bir dua olur mu acaba?

Toplam görüntülenme sayısı: 7755

23 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 49 50 51 52 53 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Yazı Kategorileri

Yazı Takvimi

Mart 2026
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2026
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...