Neden Üniversitede Java?
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ı: 2098
Ali Erkan
15 Eylül 2014 @ 11:39
Akın hocam, ağzına kalemine sağlık, çok güzel yazmışsın yine. İleride üniversitelerde hocalık yapabilirsem, tam da bu şekilde ilerleyeceğim:)
Akin
15 Eylül 2014 @ 11:43
Sagol Alicigim. Valla akademinin senin gibi gercek dunya tecrubesi guclu akademisyenlere cok ihtiyaci var. Hem kafani da dinlemis olursun 🙂
hakan
15 Eylül 2014 @ 13:35
Nesnel bir şekilde bakmaya çalıştığımda belirttiğiniz gibi, java’nın asıl alternatifi C#.net platformu olarak görüyorum. Her ikisi de tabi hem cobol,rpg gibi eski dillere göre hem de forms,reports gibi 4gl dillere göre daha güçlü olduklarını düşünüyorum. Yani sizin tespitlerinize katılıyorum. Ancak şunu eklemek isterim. Özellikle uygulama/iş yazılımları geliştirme işinde sizin de Türkçe’ye çevirip paylaştığınız “Gümüş Kurşun Yok” makalelerindeki asli ve arızi zorluklar meselesi ön plana çıkıyor. Siz Visual Basic 6.0 ile ön yüzü, işlevselliği, iş mantığı güçlü bir uygulama yapıp bunu iş tarafına rahatlıkla pazarlayabilirsiniz. Bunu bir kere not ettikten sonra java mı .net mi kısmına gelirsek bence en önemlisi java.nın drag drop geliştirme mantığından başından beri uzak durup getirdiği yazılım geliştirme disiplininin iş uygulamalarında çok saygın bir yerde olması gerektiğini düşünüyorum(Belki bu dünyada zaten böyledir bilemem ama Türkiye’de yeterince önemseniyor mu? Sanmıyorum). Mühendislik eğitimine geilnce yine java (ikisi arasında) bir boy önde olur en azından. Open source öncelikli ekosistem, bedava ve çok çeşitli ide ve araçlar gibi sizin de belirttiğiniz sebepler javayı öne çıkarıyor bence de… Yalnız .net tarafında da MS.in gençlere yönelik çok ciddi yatırımlarını(yazılım akademileri, yarışmalar), sağladığı bedava çok profesyonel araç desteklerini, msdn.in güçlü desteği vs.. unutmamak gerekir. Ancak benim eskiden beri savunduğum bir görüş var B. mühendisliği eğitiminde. Java ya da .net ‘te en az biri öğrenciye öğretilmeli(Belki de bu ikisinden biri seçimine bırakılabilir). Ama C/C++ daha da öncelikli ve mutlaka öğretilmeli.. İşin temel mantığını, makina seviyesine yakın alt seviyede neler olduğunu ben b.mühendisiyim diyen adam mutlaka bilmeli. Belki iş yaşamında hiç kullanmayacak olsa bile bilmeli. Hata teorik olarak bile olsa Assembly de görmeli.. Bunu çok önemsiyorum…
Akin
15 Eylül 2014 @ 14:56
Hakan bey yorumlariniz icin tesekkur ederim. Microsoft’un bahsettiginiz calismalarindan haberdarim, aslinda taktir de ediyorum. Lakin garip olan sey su: Microsoft’un sagladigi bu imkanalrdan cok daha fazlasi Java içın zaten mevcut, kimsenin saglamasina gerek kalmadan ortalikta dolasiyor. Gerek egitim malzemeleri, gerek araclar vs, hepsi genus Java toplumu tarafindan kullanima sunulmus durumda. Bence buradaki en temel problem bizim hazira alismisligimiz ve tembelligimiz.
C/C++’in ogretilmesi geretigine ben de katiliyorum. Neler ogretilmeli konulu bir yazi yaziyorum, bu konuya orada deginecegim.
Hoscakalin.
hakan
15 Eylül 2014 @ 15:24
Akın Bey, evet tam da doğru tespiti siz yapmışsınız zaten. MS bu java ekosisteminda daha bol olan bilgi ve belgeleri paketleyip sunuyor ve biraz tembellik edenler için erişim daha kolay oluyor. Ama bir de yerel dillerde sunulan bilgiler söz konusu.. Tabi ki bunlar kanaatimce yüzeysel bilgi uzmanlaşmak için yeterli değil. Ama başlangıç veya en azından giriş için derli toplu ve kolay erişilebilir bilgiler..
Akin
15 Eylül 2014 @ 15:34
Universite ogrencilerimiz malesef universite ile liseyi birbirine karistiriyor. Universitede daha cevval, kendi yolunu arastirip bulan, kendi sistemini oturtan ogrenciere ihtiyac var bence.
Tesekkur ederim.
hakan
15 Eylül 2014 @ 16:20
Akın Bey, sizin üniversite dediğiniz yerler hakkında (eğer dinlememişseniz) Prof. Dr. Celal Şengör’ün görüşlerini youtube’da veya benzer platformlarda bularak dinlemenizi tavsiye ederim. Ben bu görüşleri abartılı buluyordum ancak son dönemlerde bazı özel üniversitelerin bm bölümlerinden mezun gençleri yakından gözlemlediğimde hak vermeye başladım..
Zaten bizim temel sorunumuz bilimsel düşünceden, sistematik araştırmadan tamamen uzak bir toplum oluşumuz. Biz üniversitelr de dahil tüm okulları hazır bilgileri veren ezberleten kurumlar olarak görüyoruz.
Akin
15 Eylül 2014 @ 17:08
Tesekkur ederim. Size katiliyorum. Celal Sengor’u biliyorum, ama bahsettiginiz videolari seyretmedim. Bakacagim, soz 🙂 Ama belli ki ayni seyelri dusunuyoruz.