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
21 Eylül 2014

Nasıl Yazılımcı Olalım? – II: Hangi Bölümü Okuyalım?

Akin Kültür, Bilgi ve Düşünce, Yazılım Mühendisliği

Bir önceki yazıya, kaldığımız yerden devam edelim ve “yazılımcı/programcı olmak için bilgisayar mühendisliği okumak gerekli midir?” sorusunun cevabını araştıralım.

Bence üniversite kişiyi, kendini eğitebilir, kendi yolunu bulabilir bir noktaya getirmesi açısından önemlidir. Bir konuda yoğun bilgi ve metot aktarımı dışında ve sistemli çalışma, araştırma disiplini kazandırması, analitik düşünme becerilerini geliştirmesi, belli konuları etraflıca düşünebilme ve tartışabilme yeteneği kazandırması vb. açılardan üniversite okumak önemlidir. Bu konuda “hangi üniversite” sorusu malesef bu ülke için hala çok önemli. Üniversitelerimizin durumunu ve akademisyenlerimizin halini düşününce tabi olarak bu soru öne çıkıyor. Malesef gözlemim o ki ülkemizdeki akademik kurumlar ve akademisyenler, sınıflarındaki insanları heyecanlandırmaktan, onlara liderlik yapmaktan, bilgi kazandırırken beceri ve vizyon da kazandırmaktan uzaklar. Bu durum da en iyi okullarda bile gençleri dersten uzaklaştırıyor. Bunun çok iyi farkındayım. Şimdi bu konuyu kenara koyup “hangi bölüm” konusuna gelelim.

Bence herkes sevdiği ve yetenekli olduğu, adını duyunca heyecanlandığı bölümü okusun. Ama Cem Yılmaz’ın dediği gibi filmlerdekileri görüp itfaiyeci olmaya karar verenler gibi de olmayalım, tercihlerimizin gerçekliğini, bize ne kadar uyduğunu değerlendirelim. Bu konuda yazılımcı/programcı olmanın en temel yolu tabi olarak Bilgisayar Mühendiliği okumaktır. Bunu çok da tartışılacak bir tarafı olduğunu düşünmüyorum. Yani doktor olmak istiyorsan tıp, dişçi olmak istiyorsan diş hekimliği, hariciyeci olmak istiyorsan uluslararası ilişkiler okumak ne kadar anlamlıysa, yazılımcı olmak için BM okumak da o kadar normal bence.

Lakin BM okumak yazılımcı olmanın tek yolu degil. Bunun için bence pek çok farklı yol var. Açıkçası, BM ile ilgili etrafta pek çok yalan-yanlış malumat dolaşıyor. Bunu tartışmak bu yazının konusu değil ama burada örneğin konu ile ilgili güzel bir yazı var.

Ayrıca geç de olsa detayına girmeden yazılımcı olmaktan kastın büyük çoğunlukla yazılım geliştirici yani developer ya da programcı olmak manasına geldiğini düşündüğümü ifade edeyim. Bunun yanında analist, tester, network veya database yöneticiliğini de bu kapsamda ele alıyorum.

Bence matematik-fizik gibi bölümlerde okuyanlar, okul sırasında alacakları ek derslerle kendilerini yazılımcı olarak konumlandırabilirler. Benzer şey Elektrik-Elektronik, Endüstri gibi mühendislikler için de geçerli. Özellikle de günümüzde farklı bölümlerden ders almak, çift anadal ya da minor yapmak kolaylaştığı için, gayretli, disiplinli kişilerin BM bölümlerine giremeseler bile bu yolu tutmaları halinde başarılı yazılımcı adayı olabileceklerini düşünüyorum. Özellikle Endüstri M. mezunlarının yazılım projelerinin iş-business tarafında bulunmamaları için hiç bir sebep görmedigim gibi BM dahil diğer pek çok bölüme göre bu pozisyonlarda daha başarılı olacaklarını düşünüyorum. Bu bölümlerin ortak tarafı son derce yoğun matematiksel soyutlamalarla eğitim görüyor olmaları ve zaten ders programlarında belli bir miktar bilişim derslerine sahip olmaları. Matematiksel yoğunluk açısından düşünüldüğünde makine ya da inşaat gibi bölümlerde okuyanlar da benzer imkanlara sahipler bence fakat sanırım ders programları daha uzak. Bu şekilde yazılımcı olarak çalışan bir sürü isnan bir bu ülkede ve dünyada.

Bu gibi bölümlerden mezun olup, BM ve benzer bölümlerde master yapmak da bence iyi bir fikir. Temel matematiksel bilgi ve düşünme yeteneklerine sahip bir kişi yaklaşık 8-10 ders ile BM formasyonunu rahatlıkla kazanabilir. Bu da bir mastera karşılık gelir zaten. Operating Systems, Algorithms and Data Strutures, Database Managament Systems, Programming Languages, Networking, Compilers vb. dersleri master seviyesinde almak, bu sırada pratik olarak bazı programlama dillerinde kendini geliştirmek bence iyi bir plan olur. Tabi masteri, askerliği geciktirmek için yapılan bir masraf olarak görmememiz lazım.

Örneğin ben İTÜ’de Elektronik ve Haberleşme Mühendisliği okudum. Bu bölümde aldığım sağlam matematik dersleri, yüksek matematik olsun, lineer cebir, olasılık vb. dersler olsun hatta nümerik analiz vb. dersler bana matematiksel soyutlamaları öğretti. Bölümüm gereği, elektronik bağlamında aldığım devre analizi ve sentezi, logic tasarım vb. dersler ya da bir diyotun ya da transistörün fiziksel çalışması ve bunlarla ilgili farklı matematiksel modellerin anlatıldığı dersler, matematiğin gerçek dünyada nasıl kullanılabileceği konusunda bana sayısız örnekler sundu. (Tabi İTÜ’nün, anlaşılmasına- özümsenmesine önem vermeden bilgi yığma odaklı sisteminden çok müzdarip oldum. Liseden gelmiş bir genten daha 3. döneminde Maxwell denklemlerini anlamasını beklemek ki sonuçta bu geçmiş senelerde çıkan soruların cevaplarını ezberlemeye dönüşüyor, sanırım bu ülkedeki üniversitelere has bir şey. Nihayetinde iyi ya da kötü, dünya için değil ama bu ülke için iyi bir eğitim aldığımı düşünüyorum. Zaten bu ülkede çok az kimse neyi ne kadar bildiğinle ilgileniyor.)

Sonrasında gittiğim ABD’de masterda BMde algoritmalardan programlama dillerine, veri tabanından dağıtık sistemlere kadar temel dersleri aldım. Sonrasında da çalışırken devam ettiğim Yazılım Mühndisliğinde ihtiyaç analizinden nesne-merkezli tasarıma, proje yönetimine kadar süreç odaklı dersler aldım ve bilgi ve beceri olarak gelişmeme müthiş katkıda bulundu.

Ciddi kaliteli yazılımcı iş gücü açığının olduğu ülkemizde ve dünyada master yaparak yazılımcı olmak bence iyi bir fikir ve değerlendirilmeli.

İki senelik meslek yüksek okullarından mezun olanların mezuniyet sonrası geçişle BM diploması almaları hem bilgi ve yetkinlikleri hem de piyasada bulunmaları açısından bence önemli. Çünkü bu ülkede, özellikle de bizim sektörde bir “dört senelik bölüm” fetişizmi hüküm sürüyor. Bu bölümlerden mezun arkadaşların pek çok yere yaptıkları başvurular daha IK’dan geri dönüyor. Meslek yüksek okullarından mezun, kendini yetiştirmiş ve meraklı gençlerin yazılım sektöründe, İngilizcelerinin olması durumunda, yapamayacakları bir iş olduğunu düşünmüyorum. Ama yukarıda bahsettiğim takıntımızdan dolayı mühendislik derecesini almaları yerinde olacaktır.

Üniversitelerde değişik adlar altında olup da bilişim dünyasına yönelik farklı ağırlıkta eğitim veren bölümler de bence yazılımcı olmak isteyenler için fırsattır. Örneğin Bilkent’deki “Bilgisayar ve Bilişim Sistemleri Teknolojisi” son derece pratik bir eğitim sistemine sahip. “Yönetim Bilişim Sistemleri” (MIS) adı altındaki bölümler, BMe göre daha hafif bir bilişim eğitimi veriyorlar ama buradaki arkadaşların yazılımcılık taraflarını geliştirmek için avantajları çok bence. Nitekim bu bölümlerden mezun olup developer-programcı olarak çalışan olduğu gibi, analist, tester vb. sorumluluklarla çalışanlar muhtemelen daha fazladır. Bu tip bölümler mezunlarının daha iş odaklı ortamlarda bulunmalarına imkan tanıyor. Bu yüzden örneğin BI (business intelligence) ya da veri analizi (data analysis) gibi konularda çalışmaları, bir BM mezununa göre çok daha rahat oluyor. Benzer şekilde ilgili öğretmenlikler de ilgili ve tutkulu ama hasbel kader bu bölümlere puanı yetmiş arkadaşlarımız için fırsattır. BMde master yapma, konu ile ilgili daha yetkin olmak içın yine bir alternatiftir diye düşünüyorum.

Ülkemizde Yazılım Mühendisliği bölümleri de var. Ama malesef gerek yazılım mühendisliği pratiklerinin bu ülkede uygulanmaması gerek ise bu ülkede verilen YM eğitiminin gerçeklikten uzaklıği gibi sebeplerden dolayı, bu bölümlerden mezun olanların işe girmede BMden mezun olanlardan bir farkı olacağını düşünmüyorum. Yani kimse YM mezunlarını bu ülkede use case yazsın, ya da modelleme yapsın diye işe almayacaktır. Ben YM danışmanlığı ve eğitmenliğinden para kazanan birisi olarak bu bölümleri önemsiyorum ama malesef faydaları konusunda çok da umutlu değilim. Hatta YM eğitiminin, MBA gibi yüksek lisans seviyesinde verilmesinin daha doğru olacağını düşünüyorum. Piyasada ciddi bir tecrübe edinmiş kişilerin, yazılım geliştirme süreçleriyle ilgili bir formasyona sahip olmaları bu bölümü liseden hemen sonra okumaktan çok daha faydalı olacaktır.

Nihayetinde, ülkemizin iyi yetişmiş, teorik bilgisi sağlam, piyasada doğru tecrübelerle bezenmiş, yetkin yazılımcılara ihtiyacı var. Bu gibi kişilerin hem ülkemizde hem de yabancı ülkelerde önleri çok açık.

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

25 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
17 Eylül 2014

Clean Code Ya da Temiz Kod – Kaliteli Kod

Akin Java, Yazılım Mühendisliği Clean Code, Kaliteli kod, Temiz kod

Clean Code, ya da Temiz Kod – Kaliteli Kod, uzunca bir süredir etrafta dolaşan etkileyici  tamlamalardan birisi. Malum, böyle terimlere “buzzword” diyorlar İngilizce’de.

Google’da “Clean Code” araştırması yapınca karşınıza ilk iki sırada Robert C. Martin’in kitabı ve değişik bir tarzda hazırlanmış “Clean Code” eğitim videolarının bulunduğu Clean Coders sitesi geliyor. Martin’i ben 90’lı yıllarda C++ Journal gibi dergilere yazdığı nesne-merkezli programlamayla ilgili yazılarından tanıyorum. Kendisi bu dünyanın en eskilerindendir, 1964 yılında programlama başladığını kendisi ifade ediyor. Şu anda da “Clean Code” yaklaşımının öncülüğünü yapıyor.

Clean Code’un ne olduğu  ile ilgili bazı kısa tanımlar var. Örneğin Bjarne Stroustrup “elegant and efficient” yani “zarif ve etkin” derken Grady Booch “simple and direct” yani “basit doğrudan” diyor. Michael Feathers ise biraz daha uzun bir şekilde “dikkatli, önem veren birisi tarafından yazılmış görünen koddur” diyor Clean Code için. Bu konuda belki de en uzun tanımı Dave Thomas yapıyor:

“Temiz kod, orijinal yazarından başka developer tarafından okunabilir ve geliştirilebilir. Birim ve kabul testlerine sahiptir. Anlamlı isimleri vardır. Bir şeyi yapmanın pek cok yolundan ziyade tek bir yolunu saglar. Açık-seçik olarak tanımlanmış minimal bağımlılıklara sahiptir ve temiz ve minimal bir API sunar. Kod okunabilir olmalıdır, çünkü sadece programlama diline bağlı kalınırsa, her türlü gerekli bilgi kodda açık bir şekilde ifade edilemez.”

Clean Code’u ben ise şöyle tanımlıyorum:

Yazılım asli yapısı itibariyle karmaşıktır ve yazılımda aslolan geliştirmek değil değiştirmektir. Yazılım geliştirmek zordur, değişebilen yazılım geliştirmek daha da zordur. Clean Code, zaten zor olan kodlamayı, insan yapımı zorluklarla daha da zorlaştırmamaktır. Bu anlamda Clean Code, teknolojiden ve sektörden bağımsız olarak basit, odaklı, tam ve güvenilir kod yazmaktır.

Clean Code ile ilgi bir seminer ve bir de eğitim hazırladım. Seminerleri bedelsiz olarak yazılımcılara, kurumlarında 1,5 saatlik bir sunumda anlatıyorum. Bu sunumun PDF dosyasına buradan ulaşabilirsiniz. Eğer bu semineri siz de almak isterseniz benimle irtibata geçebilrisiniz. Arzu ederseniz sonrasında daha geniş eğitim için de görüşebiliriz.

Clean Codelu günler dilerim 🙂

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

14 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
15 Eylül 2014

ABD Üniversitelerinde Giriş Seviyede Programlama Dili Olarak Ne Ögretiliyor?

Akin Bilgisayar Bilimleri, Java, Yazılım Mühendisliği

“Neden Üniversitede Java?” konulu çalışmam sırasında ABD’deki üniversitelerin Computer Science (CS) bölümlerinde hangi dillerin kullanıldığına bir miktar göz attım. Konu ile ilgili zaten yakın tarihte “Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities” başlıklı tahrik edici bir yazı yayınlanmıştı. Bu çalışma bilgi verici olmakla birlikte verilerin ve sonucun sıhhatı hakkında belli şüpheler de oluşturuyor. Örneğin yazının sonunda ögrenci ve hocalardan gelen pek çok cevapta düzeltmeler söz konusu.

Bu yazıya göre ABD’nin en iyi 39 CS bölümünün programlamaya giriş derslerinde ağırlıklı olarak Python kullanılıyor ve Java bu sıralamada ikinci sırada görülüyor. 39 bölümün 27sinde Python, liseden gelen öğrencilere ilk gösterilen dil. 22 bölümde Java ilk gösterilen dil olarak belirtilmiş. 27 ve 22 sayılarının toplamının 39’dan yüksek olmasının sebebi, bazı bölümlerde programlamaya giriş derslerinin birden fazla olmasi, bazı bölümlerde de iki dilin birden ele alınıyor olmasıdır.

Dikkatimi çeken şey, hatta tuhaf gelen, programlamaya giriş derslerinde Matlab’in de bazı bölümlerde ele alınıyor olması. Çünkü Matlab, bir programlama dili değil, yüksek seviyeli, declarative bir hesaplama ortamıdır. Listede Matlab’i kullanan okullara biraz göz attım. Örneğin UCSD’de listede belirtildiği gibi Matlab okutuluyor ama programlamaya ilk giriş dersi Matlab’in olduğu CSE 7 değil, C okutulan CSE 5A. Listede CSE 5A da görünmekte ama CSE 7’yi ne kadar ilk okutulan giriş dersi olarak görmek mümkündür, bunun daha özelde araştırılması gerekli.

Benzer şey UIUC’de de giriş dersinde Matlab’in okutulduğunun iddia edilmesinde de söz konusu. CS101’de hem Matlab hem de C kullanılıyor ve bu bölümde CS125 nolu “Introduction to Computer Science” dersinde ise Java kullanılıyor. Belli ki pek çok bölümde farklı tipte öğrencilere yönelik farklı giriş dersleri var. Bu karışıklık biraz da bundan kaynaklanıyor.

Açıkçası, Python’un giriş derslerinde gösterilen en gözde dil olması kimseyi şaşırtmamalı. Liseden gelmiş gençlere algoritmik düşünceyi, bilgisayara programlama yoluyla işler yaptırmayı öğretmek kolay şey değil. İşin akademik tarafından daha önemlisi belki de pedagojik tarafı. Ben zaman zaman üniversite öğrencileriyle eğitim yapıyorum, yaşadığım zorlukları biliyorum. Karmaşık kavramları onların anlayacağı hale sokmak kolay bir şey değil. Bunu yapınca açıkçası ben de çok şey öğreniyorum ama yorucu bir iş.

Python’un son derece basit ve yüksek ifade gücüne sahip söz dizimi (syntax), dinamik tipli bir dil olması, yorumlanan bir scripting dili olması belli ki giriş dili olarak ABD’de üniversitelerin çoğunluğu tarafından tercih ediliyor. MIT, Carnegie-Mellon gibi önde gelen üniversitelerde programlamaya giriş dersinde Python kullanılıyor. (Bu konudaki bir yazıya buradan ualşabilirsiniz.)

Python kullananlar, bu dil ile çok daha hızlı bir şekilde program yazmaya başlayabildiklerinden bahsediyorlar. Belli ki bu sebeplerden dolayı Python, sektörde kullanımı açısından ilklerden birisi olmasa da öğrenme açısından pek çok avantajı var. Ülkemizde benzer şekilde Python’u giriş dersinde kullanan bölüm var mı bilmiyorum ama bu dilin alternatif olarak değerlendirilmesi gerekiyor. Dünyada Python’u kullanan okulların listesine buradan ulaşabilirsiniz.

Python ülkemizde pek kullanılan bir dil değil. Üniversitelerin de pek gündeminde değil bildiğim kadarıyla. Lakin ABD’de özellikle finans sektöründe veri işleme (data science) konularında yoğun olarak kullanılıyor. Belli ki Python, veri işleme ve istatiksel programlama konularında ciddi desteğe sahip ve cekirdek programcı olmayan data analistler ve matematikçiler big data ile ilgiliişlerini Python ile gorebiliyorlar. Bu konuda buradaki yazıya göz atabilirsiniz.

Tipik bir CS eğitim planını sizlerle paylaşmak istiyorum. Malum, Stanford Üniversitesi, gerek genel eğitim kalitesi gerek ise CS ve mühendislik eğitimiyle son derece saygın bir yer. SU’da CS eğitimine başlayanlar tipik olarak şu dersleri takip ediyorlar:

  • cs106A Programming Methodology: Java ile programlamaya giriş yapılıyor.
  • cs106B Programming Abstractions: C++ ile daha ileri programlama ve
  • cs106L Standard C++ Programming Laboratory: Bu ders ise cs106B’nin laboratuvar dersi.
  • cs108 Object-Oriented Systems Design: Bu ders ise Java ile derinlemesine nesne yapılarının ele alındığı ders. Bu derste Java Se’nin standart konualrı yanında servlet-JSP gibi web development konuları da ele alınıyor.

Bu liste 2014-15 Sonbahar çeyreği için verilmiş olup buradan ulaşılabilir durumda.

Bu yazıda ABD üniversitelerinin CS bölümlerindeki derslerde kullanılan dillerden bahsettim ama bu programlara yakından baktığınızda göreceğiniz şey, odak noktalarının dil olmadığı gerçeğidir.

Hoşcakalın.

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

8 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
15 Eylül 2014

Neden Üniversitede Java?

Akin Bilgisayar Bilimleri, Java, Kültür, Bilgi ve Düşünce, Yazılım Mühendisliği

Bir kaç gün önce, Oracle Partner Hub’da, Oracle’ın daveti üzerine gelen üniversite öğretim üyelerine bir dizi seminer verildi. Bunlardan bir tanesi de üniversitelerde neden Java’nın öğretilmesi gerektiği üzerine idi. Bu semineri ben verdim ve yaptığım sunumu da burada yayınladım. Şimdi ise daha ayrıntılı olarak bu konuyu burada ele almak istiyorum.

Aslında akademiye ilgi duyan birisiyim, gençliğimde gerek yurt içinde gerek ise yurt dışında bir miktar akademi içerisinde bulunmuşluğum da vardır. Hatta bir zamanlar iyi bir akademisyen olmak için de hayal kuran birisiyim. Ülkemiz yazılım sektöründe bizzat tecrübe ettiğim noktalardan dolayı da özellikle üniversiterin bilgisayar mühendisliği vb. eğitim veren bölümleri ve müfredatları üzerine de düşünmekteydim. Sağolsun Oracle’dan arkadaşlarımın bu konuda benden bir sunum istemeleri, beni teşvik etti ve biraz araştırıp kendimce bazı sonuçlara ulaştım. Bu yazıda da yaptığım sunumu sizlere açıklamak istiyorum.

“Neden Üniversitede Java?” aslında üniversitelerimizde Java öğretilsin demek değildir. Çünkü akademik açıdan öğretilecek olan şey bilgisayar mühendisliği ile ilgili kavramlar, yaklaşımlar ve tekniklerdir. Programlama dilleri, bunları öğrenirken kullanılması gereken araçlardandır. Yani örneğin, öğrenciye algoritmik düşünce, algoritmik karmaşıklık vb. kavramlar öğretilirken, anlamayı kolaylaştırmak ve nihayetince öğrenileni uygulamak için programlama dillerine ihtiyaç duyulur. Bu durum özellikle liseden yeni gelmiş ve konuya uzak gençlerin karmaşık ve soyut yapıları öğrenmelerini kolaylaştırmak için elzemdir. Benzer şey computer graphics, compiler ya da artificial intelligence derslerinde de geçerlidir. Dolayısıyla aslolan kavramlar ve teknikler ama bunların soyut düzlemden çıkarılıp, uygulanabilmesi için gerekli olan ise programlama dilleridir.

Bahsetmem gereken bir diğer nokta da Java’nın öğretilmesinden kastettiğim şeyin, sdece giriş dersi olarak değil de genel olarak BM öğrencilerinin girişten mezun oluncaya kadar bir kaç derste bir şekilde Java ile uğraşmış olmalarıdır. Çünkü açıkçası bu ülkede BM mezunu olduğu halde Java’yla hiç bir şekilde uğraşmamış kişilerle karşılaşıyorum. Bu konuda sadece Java öğretilsin gibi bir şeyi savunmuyorum elbette ama diğer pek çok dil yanında Java da öğretilmeli diyorum.

Üniversitede Java öğretmenin ya da öğretmemenin pek çok akademik sebebi olabilir. Örneğin:

  • Java, C/C++’a göre çok daha düzenli ve soyut bir dildir.
  • Java, Smalltalk gibi tamamen, saf object-oriented değildir.
  • Python, syntax açısından bir lise mezunu için Java’dan daha basit ve anlaşılırdır.

Tüm bunlar akademik olarak geçerli sebepler olabilir, fakat ben daha çok kalkınmakta olan bir ülke olarak, endüstrimiz açısından, üniversitelerde neden Java’nın da öğretilmesi gerektiğine dair bir kaç sebepten bahsetmek istiyorum. Bu noktada yazılım endüstrisinde de treni kaçırma durumunda olduğumuzu düşünüyorum.

Bu konuya girmeden önce şu noktayı da tespit etmenin faydalı olacağını düşünüyorum:  Ülkemizde sağlıklı ve derin bir programlama ve yazılım geliştirme kültürü malesef yok. Var olan kültürümüz daha çok ya Microsoft teknolojileri (özellikle VB) ya da Cobol-RPG gibi eski diller ve Progress, Oracle’in Forms-Reports gibi dördüncu nesil (4th GL) yapılar ve diller üzerine kurulu. Bu noktada yazılım geliştirme şeklimizi belirleyen çok temel iki nokta şunlardır:

  • Sürükle – bırak, ya da şip-şak programlama (drag-n-drop),
  • Veri merkezli (data-oriented) anlayış.

Bundan dolayı, uygulama yazılımı geliştirme tecrübemiz çok sığ.  Yazılım geliştirmeyi harc-i alem bir iş olarak görüyoruz. Çoğu zaman yazılım geliştirmekten  anladığımız, kahramanca yöntemlere sahip kahraman programcılarımızla geliştirdiğimiz derme çatma programlardır. Programlama birikimimiz çok sığ olduğu gibi bir mühendislik süreci de işletemiyoruz, dünyada yazılım sektöründe rekabet edemiyoruz.

Şimdi konumuza dönersek, Java üniversitelerimizde öğretilmeli çünkü Java,

  • dünyada ve ülkemizde, pek çok sektörde ana yazılım geliştirme dilidir ve uzun süre ana akımda olacaktır,
  • çok paradigmalı bir programlama dilidir,
  • çok geniş bir ekosistem yaratmıştır,
  • güçlü ve sağlıklı bir yazılım ve programlama kültürü kazandırır,
  • ve açık kaynak kod yaklaşımının destekçisidir.

Bu sebepleri sırasıyla biraz açalım.

Java dünyada ve ülkemizde, pek çok sektörde ana yazılım geliştirme dilidir ve uzun süre ana akımda olacaktır. Java, dünya çapında en büyük geliştirme toplumuna sahip olan dildir, TIOBE indexinde Eylül 2014’de ikincidir ki bu durum Java için en düşük durumdur. LangPop.com’da göre de ikincidir. Dünya çapında var oln 40 küsür milyon civarında geliştiricinin 7 ila 10 milyonunun Java kullandığı tahmin edilmektedir. Bir başka deyişle, dünyadaki programcıların TIOBE’ye göre %17’si, Langpop’a göre ise %15’i Java kullanmaktadır.

Java toplumu, dünya üzerindeki Javacılara, yıllık konferanslar, kitaplar, web üzerinden erişilebilen dergi, blog, forum, tutorial vb. yazılı ve video kaynaklar ile çok zengin bir bilgilenme ortamı sunar. Sayısı 250’nin üzerinde JUG’lar, Javacıları bir araya getiren son derece faal topluluklardır. 9 Eylül’de yaptığım sorgulara göre, Amazon’da Java için 22,710, C++ için 7,322, Python için 3,975, C# için ise 5,016 kitap sonucu gelmektedir. Bu da Java dünyasında öğrenmeyi destekleyen kaynakların diğer programlama dillerine kıyasla nasıl bir zenginlik teşkil ettiğini göstermektedir. Ayrıca Java Community Process (JCP.org), Javacıların Java’nın gelişimini etkileyebilecekleri bir mecradır. Bu anlamda Javacılar için Javanın gelişimini yönlendirmek sözkonusudur.

Böyle büyük rakamlara ulaşmış bir topluluk, Java’nın yaygın kullanımına ve daha uzunca bir müddet de böyle gideceğine işaret ediyor.

Java, çok paradigmalı bir programlama dilidir. Yani Java kullanarak faklı programlama paradigmaları üniversitedeki derslerde ele alınabilir.:

  • Standart prosedürel mekanizmaları ile structured programming öğretilebilir,
  • Güçlü nesne soyutlamaları ile OO programlama
  • Java SE 7 ile gelen fonksiyonel yapılar
  • Scala gibi JVM dilleriyle tam fonksiyonel programlama desteği

Nitekim bazı üniversiteler örneğin programlama ile ilgili ilk derste Java’nın prosedürel yapılarını, ikinci derste ise nesne yapılarını ele alıyor. Bu anlamda Java programlamaya giriş dersinde kullanılabilir çünkü Java

  • statik tiplidir,
  • söz dizimi açısından ne Python kadar çok soyut ne de C/C++ gibi çok aşağı seviyededir, anlaşılması kolay (intuitive) bir yapıdadır,
  • Hem prosedürel hem de nesne yapılarına sahiptir,
  • Greenfoot, BlueJ, Dr. Java, Alice vb. giriş seviyede, etkileşimli öğrenme ortamları ve araçları mevcuttur,
  • Eğitim amaçlı geliştirilmiş, grafik, oyun vb. kütüphanelere sahiptir.

Java, BMnde ele alınan konuları öğretmek için de gerekli bileşen, API vb. yapılara sahiptir Aşağıda sıraladığım konuları ilgili derslerinde öğretirken Java’yı kullanmak mümkün oluğu gibi buna dünya üniversitelerinden pek çok örnek de vardır.

  • Algoritmalar ve veri yapıları.
  • Network-web-mobile programlama,
  • Veri tabanı programlama
  • Grafik programlama
  • İşletim sistemleri, compilerlar,
  • Paralel programlama, vb.

Örneğin pek çok üniversite, computer graphics dersinde C yanında Java’yı da uygulama dili olarak kabul ediyor.

Java, hem bir dil hem de bir platform olarak, sağlıklı bir programlama ve yazılım geliştirme kültürü sağlar. Bence bu madde belki de ülkemiz açısından en önemlisi. Java kültürü, C++ ve Smalltalk üzerine inşa edilmiş ve kaliteli yazılım üretmeye odaklanmıştır. Bu noktada tarihi olarak Java modern programlama ve yazılım geliştirme teknik ve yaklaşımlarına öncülük eden bir kültüre sahip olmuştur.

Java, hem mimari hem sınıf seviyesinde lowly-coupled ve higly-cohesive yapılar kurgulamayı destekler, APIleri ile “program to an interface, not an implementation” prensibini uygular, katmanlı yapılar, layers-tiers, yoğun design patterns kullanımı, component-based yaklaşım, TDD’dan, continuous integrationa, JavaDoc’a kadar pek çok teknik ve yaklaşım, ya Java dünyasında keşfedilmiştir ya da gelişip yaygınlaşmış ve diğer dillere uygulanmıştır.

Üniversitelerde Java’nın öğretilmesi, ülkemizde yaygın olan ve benim “drag-n-drop” ya da “şip-şak programlama” olarak tasvir ettiğim ve programlama ve yazılım geliştirmeyi harc-ı alem bir iş olarak gören zihniyetin değişmesi açısından çok önemlidir. Ben malesef, üniversitelerin BM bölümlerinden mezun olup, hala yaptığı işin tabiatını dolayısıyla da karmaşıklığını kavrayamamış, hacker modunda, deneme-yanılma yöntemiyle, aşırı zaman harcayarak yazılım geliştiren kişilerle tanışmaya devam ediyorum. “Google programcısı” olarak da nitelenebilecek bu tür yaklaşımların ülkemiz .NET topluluğunda malesef daha yoğun olarak bulunduğunu ama Javacıları da etkilediğini düşünüyorum. Eski VB kültürünün devamı olan bu yaklaşım, ülkemiz .NET topluluğu için de bir sıkıntıdır. Üniversitelerimizin bu durumu düzeltici etkide bulunması gereklidir, çünkü agaç yaşken eğilir.

Java çok geniş bir yazılım geliştirme ekosistemidir. Bu anlamda Java, klasik programlama dili anlayışından çok daha kapsamlı bir yapıya sahiptir.

  • Java SE, standart programlama dili,
  • Java EE, kurumsal ölçekteki uygulamalar için her türlü bileşene sahiptir,
  • Java ME, mobil platformlar için ciddi bir alternatiftir,
  • JavaFX, rich internet applications (RIA) için geliştirilmiştir.

Java ekosisteminde ortaya çıkan ve yazılım ve bilgi teknolojileri dünyasını derinden etkileyen teknolojiler ve yaklaşımlardan bazılarını şöyle sıralayabiliriz:

  • JUnit ile TDD,
  • Hadoop ile big data yönetimi,
  • Android ile mobil işletim sistemi,
  • ve Apache Software Foundation’da pek çok proje…

Java’nın çalışma zamanı yapısı olan JVM, bir mühendislik harikası olarak, sanal bir makinadan çok daha fazlasıdır. JVM son derece yaygındır hatta pek çok veri tabanı ve SAP gibi uygulamayla beraber gelmektedir.

Ayrıca JVM, üzerinde onlarca farklı amaçlarla geliştirilmiş dilin çalışmasına izin veren sanal bir ortamdır. JVM üzerinde 100’den fazla dil geliştirilmiştir. Bu diller Java’nın bazı kısıtlarını aşmak ya da ona bazı yetkinlikler kazandırmak için geliştirildiği gibi, pek çoğu scripting dili olarak bir sistemin değişik yerel bölgesinde, çok özel sorunların üstesinden gelmek üzere kullanılacak şekilde konumlandırılmaktadır.

  • Groovy: Dinamik tipli bir dil
  • Scala: Fonksiyonel destek
  • Jython: JVM’deki Python
  • Closure: Fonksiyonel Lisp dialekti
  • JRuby: JVM’deki Ruby

Java, kendini açık kaynak kod kültürüne elveren bir yapıya sahiptir. İnternet’teki açık kaynak projelerinin bulunduğu ortamlarda Java çok yoğun bir şekilde kullanılmaktadır. Java JDK’in kodu bile Mayıs 2007’den bu yana açıktır. OpenJDK tamamen açık kod felsefesiyle geliştirilmekte olan bir çekirdek Java ürünüdür. Java, standardlar üzerine bina edilmiştir ve bu standartlar diğer dillere göre programcı topluluğunun yönlendirmesine çok daha açık bir şekilde JCP (JCP.org) yapısında belirlenmektedir.

Java’nın ve bileşenlerinin ve araçlarının ticari lisansa tabi olanları kadar açık kaynak kod lisanslarına tabi implementasyonları da mevcuttur. Uygulama sunucuları, veri tabanları, bileşenler, araçlar, iş yazılımları, vs. hepsi açık kaynak kod anlayışına uygun olarak gelişitirilmiş Java uygulamalarıdır.

Açık kaynak kod kültürü, malesef ülkemizde ciddi bir şekilde ihmal edilmektedir. Halbuki, açık kaynak kodlu ürünler, kaynakları kısıtlı ve girişimcilik ruhu yetersiz olan ülkemizde çok rahatlıkla bize yardımcı olabilir, açık kaynak kodlu yapılarla geliştirilen yazılımlar, lisanslı ürünler kullanan yazılımlara karşı piyasa avantajına sahip olabilir. Ülkemizde pek çok ticari iş uygulamasının, belli kritiklik seviyesine gelinceye kadar, açık kaynak kodlu ürünlerle geliştirilebileceğini ve piyasaya sunulabileceğini düşünüyorum. Bu büyümekte olan girişimler için çok ciddi maddi avantajlar sağlayacaktır.

Açık kaynak kodlu ürünler, pek çok projenin başlangıç, AR-GE safhasında kullanılabilir. Ayrıca açık kaynak kodlu projeler, çok güzel bir öğrenme ve yardımlaşma ortamı yaratmaktadır, örneğin Apache Software Faundation’da (ASF) yüzlerce projede 3000 civarında gönüllü çalışmaktadır. Bu gönüllüler dünya üzerindeki değişik coğrafyalardan katılmakta ve çoğu kez gerçek ortamlarda biraraya gelememektedirler.

Tüm bunlardan dolayı, açık kaynak kod kültürünün, ülkemiz için de stratejik olarak önemli olduğunu düşünüyorum. Bu noktada malesef üniversittelerimizde bu kültüre yeterince destek verilmediğinin, hatta bu kültürden tamamen uzak bir anlayışa sahip olunduğunun da farkındayım. Bu durum yazılım sektörümüzde de aynen devam etmektedir.

Tüm bunlardan sonra ülkemiz üniversitelerindeki duruma kısaca değinmek isterim. Bu konuda bir araştırmaya rastlamadım ama tecrübem şunu gösteriyor ki .NET ve C# kullanımı, ülkemizde çok yüksek boyutlarda. Üniversitelerimzde .NET ve C# gosterilmesin diye bir düşüncem yok. Hem dünyada hem de ülkemizde Java’nın en temel alternatifi olarak bu dil ve ortamın da tabi olarak öğretilmesi gereklidir. Fakat hem bu platformun yukarıda bahsettiğim kültürü hem akademik ihtiyaçlara çok elveren yapıda olmaması hem de son derece kapalı tabiatından dolayı, özellikle ABD üniversitelerinde çok az oranlarda ele alınırken, ülkemiz üniversitelerinde bu kadar yüksek oranda kullanılması bana ters geliyor. Bunda muhtemelen Microsoft’un ülkemiz üniversitelerine daha fazla ilgi göstermesi, VB kültürünün bir devamı olarak “Java zor, .NET kolay” şeklindeki bir algının yaygın olması ve nihayetinde ünivesitedeki hocalarımızın tembelliği rol oynuyor.

Geniş kullanım alanına sahip olması, sağlıklı bir programlama ve yazılım kültürü kazandırması, üniversitede öğretilebilecek/kullanılabilecek yapıda olması ve açık kaynak kod kültürünü desteklemesinden dolayı üniversitede Java öğretilmeli!

Bir uygulayıcı olarak, tutkulu, kavram ve teknikleri iyi bilen ve Java ile uygulayan mezunlara ihtiyacımız var diyorum.

Kaynaklar

  • Olin Shivers, “Why Teach Programming Languages”, 2008 SIGPLAN Workshop on Programming Language Curriculum , May 29–30, 2008, Cambridge, MA, USA (http://www.ccs.neu.edu/home/shivers/papers/why-teach-pl.pdf)
  • Avinash Kak, “Teaching Programming”, Purdue University, (https://engineering.purdue.edu/kak/TeachingProgramming.pdf )
  • David Gries, “Teaching Java –with OO first”, (http://www.cs.cornell.edu/gries/programlive/oofirst.pdf)
  • Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext 
  • What programming languages do the top tier Universities teach? http://stackoverflow.hewgill.com/questions/644/099.html
  • http://en.wikipedia.org/wiki/List_of_educational_programming_languages
  • http://javarevisited.blogspot.com.tr/2013/11/java-vs-python-which-programming-laungage-to-learn-first.html
  • Using Java in CS Education http://www.cs.rit.edu/~ncs/Uppsala97/
  • TIOBE Index http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
  • Programming Language Popularity http://langpop.com/
  • https://plumbr.eu/blog/how-many-java-developers-in-the-world ve http://java.dzone.com/articles/how-many-java-developers-are
  • Seven Java projects that changed the world http://radar.oreilly.com/2011/07/7-java-projects.html
  • Java Is A Dead-End For Enterprise App Development http://blogs.forrester.com/mike_gualtieri/10-11-23-java_is_a_dead_end_for_enterprise_app_development

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

8 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 34 35 36 37 38 >»

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...