Kategori Arşivi canavar’ın sesi radyosu

Bora Gönül ile Fonksiyonel programlama dilleri üzerine bir söyleşi

Fonksiyonel programlama dilleri deyince ülkemizde akla ilk gelen isimlerden olan Bora Gönül ile kısa bir söyleşi yaptık. Bilgi dolu yorumları için kendisine tekrar teşekkür ederim.

  1. Okuyucuların sizi daha iyi tanıması adına kendinizi kısaca tanıtır mısınız?
  2. Merhaba. Adım Bora Gönül, 1974 doğumluyum. Yazılımla ilgilenmeye ortaokul yıllarında Commodore-64 ve Amiga oyun introlarını kırıp kendi adımı yazmak niyetiyle başladım. Daha sonra İTÜ Elektronik ve Haberleşme Bölümü’nde okudum. Buna paralel çalışmaya başladım. Yaklaşık 17 senedir İstanbul’da IT sektorundeyim. Pek çok yerli ve yabancı firmada çalıştım. Şu anda da Software & Solutions Architect olarak freelance çalışıyorum.

  3. Fonksiyonel programlama dilleri aslında çok uzun zamandır ortalardalar. Siz ne kadar zamandır fonksiyonel programlama dilleri ile ilgileniyorsunuz?
  4. Yazılım benim hem işim, hem hobim. Bu yüzden birçok farklı dilde uygulama geliştirdim. Imperative dil olarak Java, fonksiyonel programlama dilleri olarak Scala, Haskell, Erlang ve Javascript favorilerim. Bu tanışıklığımız da yaklaşık 15 sene önce Haskell ile başladı.

  5. Fonksiyonel programlama dillerine olan ilginizin sebebi nedir?
  6. Bu biraz matematiğe olan sevgimle ilgili. Ortaokulda okuduğum ilk kitapta gördüğüm “X=X+1″ beni o kadar rahatsız etmişti ki ( 0=1 ?) kitabı hemen kapatmıştım. Sonra merakım ve arayışım devam etti. Üniversitenin ilk yıllarında Haskell ile tanıştım. Matematiği kullanabileceğim bir yazılım dili bulmak benim için heyecan vericiydi.

  7. Fonksiyonel dillerin diğer dillere(nesne yönelimli, mantıksal, prosedürel) kıyasla temel avantajları nelerdir? Bu dillerin günümüzdeki kullanım alanları hakkında bilgi verebilir misiniz?
  8. Oldukça derin bir soru oldu. En temel fark şu:
    – Imperative dillerde (C, Java, vs) sonuç odaklıyız; değişkenler tutup onları güncelleyerek sonuca ulaşıyoruz.
    – Applicative dillerde (Scala, Haskell vs) olayın kendisini ifade etmek için hesaplamalara (sonuçlara değil!) odaklanıyoruz.

    Şimdi sorsanız kimse fonksiyonel bir dil bilmediğini söyleyecek, halbuki her gün kullandığınız fonksiyonel bir dil var: “Javascript” :) JS’deki “fonksiyon alan fonksiyonlar, fonksiyon dönen fonksiyonlar, closure’lar, callback’ler, vs.” ne kadar güçlüler bir düşünün.

    Diğer bir önemli fark FP(Fonksiyonel Programlama) dillerinde State olmaması. “Y=X+1″. İşte bu, benim bildiğim matematik…

    Bir başka artısı paralel programlama konusunda. Bir örnek vereyim: Yazdığımız kod kendi makinamızda çalışır ama production ortamında aynı şekilde çalışmaz (Benim makinamda çalışıyor sendromu). Peki bunun sebebi nedir? Determinism = State * Parallelism. Bizse non-deterministik; çalışması ortama bağlı olarak değişmeyen kod istiyoruz.

    Nasıl yapacağız?
    - Parallelism istenen bir şey olduğuna göre State’i ortadan kaldıracağız. Bu konuyu okurlara bırakıyorum, başka bir sohbette detaylarını anlatırım.

    Bir başka önemli katkı olarak applicative dillerde business logic kodun içinde kaybolmaz. Örnek:

    Java

    Scala

    Peki neden şimdi FP? FP esasında yeni bir şey değil. Ama bildiğiniz gibi Moore yasası doyuma ulaştı. Çekirdeklere daha fazla transistor sığdıramıyoruz. Bunun yerine çekirdek sayısını arttırıyoruz. Amacımız da bu çekirdekleri daha iyi kullanmamızı sağlayacak dilleri bulmak. FP dillerde state olmadığı için multicore’dan verim almak daha kolay. Elbette ki sürekli değişken yaratmanın yan etkileri var(bellek açısından) ama kullandığımız makinalarda en az 4GB RAM var. Bu konu dediğim gibi oldukça derin. Umarım cevabım biraz tatmin etmiştir sizi. Özetle FP yeni değil, eski ve değerli. Her alanda kullanılabilir. Web programlamadan, data mining ya da real-time sistemlere kadar…

  9. Scala, fonksiyonel programlama dillerinin en popülerlerinden biri olmakla beraber prosedürel ve nesne yönelimli programlama özelliklerini bir arada barındıran C++ diline benzer şekilde nesne yönelimli ve fonksiyonel programlama özelliklerini birlikte sunuyor. C++ oldukça başarılı olsa da hiçbir zaman prosedürel bir dil olan C dilinin önüne geçemedi. Nesne yönelimli diller konusunda zirvenin sahibi ise Java oldu. Sizce Scala bu bilgiler ışığında başarılı olabilecek mi?
  10. Object oriented programlamanın avantajı insan zihninin bir sorun karşısında olayı küçük
    parçalara ayırıp; detayları tek tek çözüp, sonrasında bunları birleştirebilme yeteneğini simgeliyor olması. Örnek olarak bir film sahnesinde cam ekran üzerinde aktörün bir treni tutup pek çok küçük parçaya böldüğünü ve sonra birleştirdiğini hayal edin.

    FP ise apayrı bir dünya. Bildiğiniz tüm tasarım kalıplarını bir kenara koyun, bir de fonksiyonlar ve recursion(özyineleme) ile yapabileceklerinizi.

    Bir soru: bana “while” control structure’ının kendisini OO bir dilde gerçekleyebilir misiniz? Scala’da gayet basit:

    Şu kodda bile High-Order Fonksiyonlar, Currying gibi kavramlar var ve bunlar applicative(kendini anlatıyor). Kısaca Scala ya da FP bir rakip değil aksine bir tamamlayıcı.

  11. Scala hakkında son zamanlarda, özellikle çok karmaşık olduğuna dair olumsuz yorumlar yayınlanıyor. Hatta bu yorumlar adeta bir karalama kampanyasına dönüşmüş durumda. Sizce yapılan yorumlarda doğruluk payı var mı? Scala gerçekten çok mu karmaşık?
  12. Evet Scala zor bir dil çünkü:

    - FP lisedeki biri için kolay, imperative dil bilen (Java, C vs) biri için çok zor.
    - Type oriented programming (Varyans, Covariant, Contravariant) karışık.
    - Implicit conversionlar ilginç.

    Sanki bu yeni bir gezegen bulmak gibi, keşfetmek için biraz zaman gerekiyor. Ama tadını alınca dünyaya geri dönmek istemiyorsunuz. Bir diğer problemse bu dünyada yalnız kalıyorsunuz. Bu açıdan eleştirilere katılıyorum. Düşünsenize ben kime, nasıl Scala anlatacağım, öğreteceğim ve birlikte ortak bir proje yapacağız?

  13. Sizce Türkiye’de gerek üniversiteler, gerekse kurumlar ve şirketler açısından fonksiyonel programlama dillerine gereken ilgi gösteriliyor mu?
  14. Kesinlikle hayır :( Pek çok üniversitede Scala ile ilgili seminerler verdim. Hocalarımızın çoğu dahil FP ne demek Türkiye’de bilinmiyor. Tüm gençlere aynı şeyi söyledim. Yurt dışında çalışmak mı istiyorsunuz? En az bir FP dili öğrenin.

  15. Türkiye’de bilişim sektöründe fonksiyonel dillerin payı ne orandadır? Bu konuda kendini geliştiren bir üniversite öğrencisinin sektörde kendine yer bulma şansı nedir?
  16. Şu anda Türkiye’de odaklanılan konu Web + DB programcılığı. Henüz hatırı sayılır real-time yazılımlarımız bile yok.

    İki örnek;
    - Uçakların inmesini kalkmasını sağlayan, sensor verilerini toplayan merkezi bir real-time sistem. FP ve Message Passing Concurrency (Erlang / Akka) için biçilmiş kaftan.
    - Kredi kartı alışverişi real-time data mining. Kim hangi sektörde ne oranda kredi kartı kullanıyor. Yine FP ve Data-Mining/Data-Flow için ideal.

    Bu konuda gençler Türkiye’yi değil yurtdışını düşünsün. Orada Haskell, Erlang ve Scala çok aranıyor.

    Bir de söyle bir yanlış anlama var. Genişleme daha çok makina demek değil. Aynı makinadan daha iyi verim almak demek. FP’ye bir de bu gözle bakmak lazım.

  17. Nesne yönelimli programlama dillerinden birine yeterince hakim bir geliştirici fonksiyonel programlama dillerinden birinde sizce ne kadar zamanda yeterli hale gelebilir?
  18. Hiç gelemeyebilir. İkisi apayrı, iki farklı dünya. Biri makinaların dünyası(Java, C altında assembly), diğeri matematiğin, kümelerin, monad, monoidlerin dünyası.

  19. Türkiye’de Scala eğitimi verdiğini bildiğiniz üniversiteler ya da kurslar var mı? Sizin bu konuda çalışmalarınız oluyor mu?
  20. Ben Scala ve FP eğitimi vermeyi çok istiyorum. Ama henüz böyle bir oluşuma ihtiyaç yokmuş gibi görünüyor. Keşke olsa…

  21. Play! Framework 2.0 çekirdeği radikal bir şekilde değiştirilerek Scala ile yeniden yazıldı. Bu konuda yorum yapmak ister misiniz?
  22. Evet Play!, Scala ile yeniden yazıldı. Nedenlerini sitesinde bulabilirsiniz. Yukarıda saydığım tüm nedenler orda var. Ayrıca FP ile yazılan kod çok daha basit ve elegant(asil) oluyor. Ne demek istediğimi FP yazınca anlayacaksınız.

    Play şu anda TypeSafe’e katıldı. Martin ve ekibi bu konuda çok iyi yoldalar. Özellikle Akka çok doğru bir şekilde Erlang temellerini Scala’da implement etti. 2000′li yıllarda Spring bir gün defakto standard olacak dediğimde kimse inanmamıştı, bugün herkes CV’sine Spring yazıyor. Aynı şekilde Akka(Message Passing Concurrency), concurrent programlama için defakto standart olacak diye düşünüyorum. Lütfen kayıtlara geçin :)

  23. Son olarak eklemek istediğiniz noktalar var mı?
  24. Ne yazık ki FP ya da Scala’yı Türkiye’de kullanırız diyemeyeceğim. Startup olgusu keşke bizde de oluşsa ve düşük maliyetli, cloud üzerinde çalışan Internet tabanlı uygulamaların sayısı artsa. Oyun sunucuları, bankacılık, sigorta sektorü, realtime engine’ler… Bunların hepsi için doğru adres FP, Scala ve Erlang.

    Teşekkürler.

Ece Çağlayan ile yurtdışında eğitim üzerine bir söyleşi

Hangi ülkede / şehirde / üniversitede / bölümde eğitim görmektesiniz?

Avusturya / Viyana / Viyana Teknik Üniversitesi / Bilgisayar Mühendisliği

Bu ülkeye gelmeden önce Türkiye’de hangi üniversitede eğitim aldınız?

Karadeniz Teknik Üniversitesi / Trabzon

Neden yurtdışında eğitim görmek istediniz?

Yurtdışındaki hayatın, eğitimin nasıl olduğunu merak ettiğim için Erasmus öğrenci değişim programına başvurdum. Diğer bir neden de yabancı dilimi geliştirmekti.

Bu ülkeyi / şehri / üniversiteyi seçmenizin sebebi neydi?

Seçebileceğim üniversiteleri araştırdım. Viyana Teknik Üniversitesi’nin dünyanın en iyi onuncu üniversitesi olduğunu öğrendim ve burayı tercih ettim.

Yurtdışına kendi imkanlarınızla mı gittiniz? Burs aldınız mı? Maddi sıkıntı yaşadınız mı? Geçinmek için çalışmanız gerekiyor mu?

Okulun öğrenci değişim programını kazandığım için burs alarak geldim ancak doğal olarak o burs yetmiyor, ailenin de desteklemesi gerekiyor. Burada TL’nin hiçbir değeri kalmadığı için maddi sıkıntı yaşıyorsunuz. Çalışmak gibi bir imkan yok çünkü kanunen yasak. Ama bazı zamanlarda keşke çalışabilsek diye düşünmedim değil :)

Okuduğunuz bölümde bir dönemde ortalama kaç ders alıyorsunuz? Bunların kaçı zorunlu, kaçı seçmeli?

İstediğiniz kadar ders alabiliyorsunuz. Diğer bir deyişle geçebileceğinizi düşündüğünüz kadar ders seçebilirsiniz :)

Okuduğunuz bölümde öğrenci başına düşen öğretim üyesi ve araştırma görevlisi sayısı nedir? Bu sayı sizce yeterli mi?

Bütün bölümlerden ders alabildiğiniz için üniversitenin bütün öğretim üyeleri sizin. O nedenle tam sayıyı da bilmiyorum. Bazı derslerin hem bir hocası hem de iki asistanı var. Hoca derse gelmediğinde dersi onlardan biri anlatıyor. O dersin laboratuvarlarına da onlar giriyor.

Yaşadığınız şehrin eğitim hayatınıza olumlu/olumsuz etkisi var mı? Türkiye’de eğitim aldığınız şehir ile kıyaslar mısınız?

Viyana yaşanılabilir en iyi şehir seçildiği için zaten arada oldukça fark var. Her yere ulaşım çok kolay. En uzak noktaya bile otuz dakika gibi kısa bir sürede ulaşabiliyorsunuz. Otobüs, metro, tramvay bekleme gibi bir derdiniz yok. Ulaşım araçları belli sürede gecikme yapmadan orada oluyor zaten. Diğer yandan teknik müzede çocuklar için (İlgilenen herkes için aslında çünkü benim de oldukça ilgimi çekmişti) bir bölüm var. İlkokul, ortaokul, lise için çok faydalı. Her şeyin mantığını görsel olarak görebiliyor çocuklar. Kendileri yaparak inceleyerek öğreniyorlar hatta. Film, tiyatro, mimarlık için festivaller de oluyor. O bölümlerde okuyan herkes gidip yerinde inceleyebiliyor. Yani mesleklerini gerçek hayatta öğreniyorlar.

Üniversitenin sosyal etkinlikleri özendirici çalışmaları var mı? Bu tür etkinliklere zaman ayırabiliyor musunuz?

Buddynetwork adında yabancı öğrencilerin Viyana’ya ve okula daha hızlı alışmaları için kurulmuş bir topluluk var. Erasmus öğrencileri için kurulmuş olsa da tüm öğrenciler katılabiliyor. Haftada en az dört etkinlik oluyor. Bir de aralarda teknik gezi ya da değişik geziler düzenleniyor. Herkes bence bu tür etkinliklere zaman ayırabilir. Bu etkinlikleri oluşturan ekip genelde yüksek lisans öğrencisi olduğu için onlar çalışıp zaman ayırabiliyorlarsa herkes ayırabilir bence :)

Öğretim üyelerinin öğrencilere yaklaşımını nasıl tarif edersiniz? Resmi mi yoksa samimi mi?

Her zaman “hocam benim bir sorum vardı, şurayı anlamadım” diye kapısını çalamıyorsunuz. Belli görüşme saatleri var. O saatler içinde gidip sorunuzu sorabilirsiniz. Bu da bana biraz resmi görünmüştü en başlarda ama resmiyetten çok hocaların kendi projelerine zaman ayırmak için uyguladığı bir yöntem bu. Soru sorduğunuzda zevkle yanıtlıyorlar, “işim var, sonra gel” demiyorlar. Öğrencileri bilinçli yetiştirmeye çalışıyorlar. Bir şeyler öğrenmek isteyen öğrenciye her zaman kapı açık.

Üniversitenin teknik olanaklarını(laboratuvar, amfi vs.) yeterli buluyor musunuz? Türkiye’deki üniversiteniz ile kıyaslar mısınız?

Türkiye’de bizim bölümün zaten tek bir amfisi var. Onu da elektrik-elektronik bölümü ile ortak kullanıyoruz. Burada neredeyse bütün bir bina amfi. Dersler az kişilik sınıflarda işleniyor ama her şey yeterli. Neredeyse her dersin kendine ait laboratuvarı olduğu için laboratuvar bulmakta da zorlanmıyorsunuz. Bir tane laboratuvar dersi aldım. Dersin kendi web sayfasından gerekli dosyaları indiriyorsunuz, gruplar belirleniyor, grup arkadaşlarınızla uygun olan günleri ve saatleri seçip randevu alıyorsunuz. Eğer yer yoksa başka bir gün seçiyorsunuz zaten. Gittiğinizde o yer size tahsis edildiği için yer bulamama gibi bir derdiniz yok .

Üniversitenin eğitim yöntemini, başka bir deyişle eğitime bakış açısını genel olarak değerlendirir misiniz?

Bizim üniversitelerimizde alacağımız dersler belli, her şey belli. Hocalar bizi iteliyor. Burada kendiniz karar vermek zorundasınız. Her şeye kendi kendinizi itmek zorundasınız. Yani ne istediğini bilen gençler yetişmiş oluyor en baştan.

Üniversitenin teknik beceriler dışında size kazandırdığı başka beceriler var mı? En azından üniversitenin bu yönde bir amacı bulunuyor mu?

Bir çok spor ve sanat kursları var. Bunlardan istediğinizi seçip katılabilirsiniz.

Öğrenci toplulukları, bunların aktivitesi ve üniversiteden aldıkları desteği değerlendirir misiniz?

Yukarıda da belirtmiştim. O topluluğu zaten üniversite öneriyor ve siz de katılabiliyorsunuz. Burada böyle etkinlikler çok önemli. Bütün hocalar ve üniversite yönetimi de bunu destekliyor. Amfilerin, sınıfların, boş kullanım alanlarının gece 23’e, belki daha da geç saate kadar kullanımına izin veriliyor. Türkiye’de iken amfiler için izni sabah saatlerinde bile zor alabiliyorduk.

Bölümünüzde örnek alabileceğiniz rol modeller var mı? Bölümün rol model üretme konusunda çalışmaları mevcut mu?

Şu an öyle bir rol modelim yok. Bu konuda bir çalışma olup olmadığını da hiç bilmiyorum.

Üniversite – sanayi işbirliği konusunda çalışmalar var mı? Öğrenci iken bu tür çalışmalara dahil olup tecrübe kazanabiliyor musunuz?

Evet. Örneğin şimdiye kadar iki teknik gezi oldu. Her yapılan, öğrenilen şeyin tecrübe olacağına inanıyorum. Yüksek lisans öğrencilerine daha çok imkan sunuluyor ama bu konuda. Örneğin benim oda arkadaşım ekonomi bölümünde yüksek lisansını yapıyor ve Porsche şirketinde staj imkanı sağlandı.

 

Katkılarından dolayı Ece Çağlayan’a çok teşekkür ederim.

Özgür Web Günleri 2011′in ardından

Bu yıl ikincisi düzenlenen Özgür Web Teknolojileri Günleri sona erdi. Geçen yıl da “Hibernate Çatısı ile Kalıtım ve Çok Biçimlilik Kullanılarak Kurumsal Varlıkların Modellenmesi” semineri ile yer aldığımız etkinliğin ardından yazdığım şu yazıyı görünce bu yılki etkinlikle ilgili yazmadığımı anımsadım ve yazmaya karar verdim.

Etkinlikte Umut ile birlikte Play Framework semineri vereceğimizi daha önce burada duyurmuştum. Sunumumuzun ana hatlarını aynı yazıda yayınlamıştım. 15 Ekim Cumartesi günü saat 10:00′da yaptığımız sunumun görüntüleri de ayrıca kaydedildi ve yakın zamanda etkinlik sitesinde yerini alacak.

Oldukça yoğun katılımın olduğu seminerimizin faydalı olduğunu düşünüyorum. Öyle ki seminer sonunda bir izleyici yanıma gelip

“İlk defa bir sunumda bir şeyler öğrendim. Bundan öncekiler çok sıradandı. Teşekkür ederim”

dedi. Bizden önceki ve sonraki sunumların pek çoğuna ben de katıldım. Kendi adıma hepsinin faydalı olduğunu düşünüyorum. Yine de etkinliğin son seminerlerinden biri olan Bora Gönül’ün verdiği Scala ve Fonksiyonel Programlama Dilleri seminerini diğerlerinden ayırmam gerekli. Hem anlatım tekniği hem de bilgi yoğunluğu açısından seminerin bence açık ara en iyi semineri buydu. Seminerin son dakikalarında servise yetişmek için çıkmak zorunda kalsam da Bora Gönül’e buradan tekrar teşekkür ederim.

Scala seminerini de izledikten sonra Play Framework geliştiricilerinin neden 2.0 sürümünde çekirdeği Scala ile yeniden yazmaya karar verdiklerini daha iyi anladım. Genel olarak sorunların doğru adreslendiği ve orta vadede Play Framework’ün geliştiriciler arasında kendine sağlam bir yer edineceği artık açık olarak görünüyor.

Diğer sunumlardan edindiğim bazı izlenimler ise şöyle.

  • Play Framework varken Django ile web uygulaması geliştirmeye çalışmak tam anlamıyla gereksiz.
  • Ruby on Rails konusunda yeterli bilgi edinemedim ama büyük ihtimalle aynı durum bu framework için de geçerli.
  • Pentaho Kettle çok başarılı bir ETL aracı.
  • Hantal JEE framework’leri ölmeye mahkum.
  • Scala ve fonksiyonel diller yoğun şekilde asenkron işlemler ve concurrency sorunları içeren önümüzdeki döneme hükmedecekler.

Bu arada 16 Ekim Pazar günü İstanbul’da Play Framework geliştiricileri buluşması düzenledik. Eğlenceli 1-2 saat geçirdik. Katılımcılara buradan teşekkür ederim. Bundan sonraki etkinlikler için Play Framework Türkiye Google Grubu‘nu takip edebilirsiniz.

Özgür Web Günleri 2011 – Play Framework Semineri

Bu yıl ikincisi düzenlenecek olan Özgür Web Teknolojileri Günleri‘nde Umut Fikret Gürkavcu ile Play Framework konulu bir seminer vereceğiz. Seminerimiz 15 Ekim Cumartesi günü saat 10:00 ile 10:45 arasında gerçekleşecek. Daha önce hazırlamış olduğum Play Framework videolarına buradan, etkinlik programının tamamına ise şuradan erişebilirsiniz.

Seminerimizin anahatlarını şu şekilde belirledik:

- Mimari
  * Durum bilgisiz sunucu taraflı mimari
  * Servlet API neden kullanılmıyor?
  * Dahili uygulama sunucusu
  * Temel proje yapısı

- Konfigürasyon ve bağımlılık yönetimi

- Tümleşik web çatısı
  * MVC
    a. HTTP Routing
    b. Controllers
    c. Template motoru
  * JPA
  * Asenkron işler
  * E-mail
  * Önbellek
  * Play libs
  * Logging
  * I18N
  * Selenium ve JUnit testleri

- Modüller
  * MongoDB, Search, ElasticSearch, Excel, PDF, CRUD

- Cloud
  * playapps.net, Google AppEngine, Heroku

Etkinlik boyunca bizim seminerimiz dışında da oldukça güzel sunumlar yer alıyor. Benim dikkatimi çekenler ve katılmayı planladıklarım şunlar:

  • SCRUM ile Yazılım Projesi Yönetimi
  • OpenKM Özgür Doküman Yönetim Sistemi
  • Özgür Haritacılık Atölyesi
  • Güvenli Kod Geliştirme ve Kaotik Yaşam Döngüsü
  • Web Uygulama Güvenlik Testleri
  • Ruby on Rails
  • Django nedir? Yenir mi?
  • Google Native Client nedir, ne işe yarar?
  • Scala ve Fonksiyonel Programlama Dilleri

Etkinlik sonrasında bir de İstanbul Play Framework Buluşması planlıyoruz. Gelişmeler için Play Framework Türkiye Google Grubu‘nu takip edebilirsiniz. Etkinlikte görüşmek üzere.