Öncelikle, bu ayrıntılı cevabınız çok ama çok teşekkür ederim.
----
Bu yazıda sorularınızı tek tek cevaplamaya uğraşacağım fakat bir nokta üzerinde durmak gerekir. C# ile yazılım geliştirmenin kolaylığı, eğer yazılımcı Visual Studio lisansına sahipse geliyor. Araçlar kolaylık sağlıyor görünüyor fakat konfigürasyon dosyaları ve XAML denen nane işleri o kadar karmaşıklaştırıyor ki, insan kod mu yazacak, yoksa ayar mı yapacak şaşırıyor.
Kabaca,
kodlama / tasarım / veritabanı en az üç kişinin yapması gereken bir iş aslında. Uygulama geliştiricileri genelde tek başlarına veya ihtiyacın çok altında sayıyla uygulama geliştirmeye çalışıyor / zorlanıyor. IDEler mümkün olduğunca işleri pratikleştiriyor ama ne yazı ki bir noktaya kadar.
----
Ayrıca Qt ile daha temiz ve daha az kod ile, daha etkili programlar yazabilirsiniz. Hakkaten de böyledir. Örnek olarak, TCP üzerinden senkron iletişim yapan bir programı, iki farklı ortamda geliştirmeyi deneyebilirsiniz.
Bu nokta çok önemli. Kod ne kadar temiz yazılırsa, debug da o kadar kolay oluyor. Visual Studio'nun sunduğu,
#region ve
#endregion ile kodu bölebilmek çok işime yarıyor. IDEler (Eclipse, NetBeans, IntelliJ v.s.) bu imkanı vermiyor (belli başlı yerlere otomatik olarak koydukları +/- yetersiz).
----
İşletim sistemlerine özel geliştirme yapmak konusunda ise bir ayrım var. Windows üzerinde geliştirme yaparken de, Linux üzerinde geliştirme yaparken de, çoğunlukla kullanılan derleyici ile gelen ve/veya işletim sistemi ile gelen SDK lara bağlısınız. Windows için geliştirme yaparken, Microsoft Windows SDK ve Driver SDK, linux da ise çekirdek geliştirme kütüphanelerine ihtiyacınız olacaktır. Symbian için de aynı şey geçerli. Yeni çıkan versiyonları için konuşmuyorum. Symbian 6 için farklı bir SDK kullanılmakta.
Bu konuda "Türkiye ile Çin arasında mekik dokumak zorunda kalan birinin yaşayabileceği kültür uyum problemi"ni yaşamaktan korkuyorum. Sistemlerin ve programlama dillerinin kendilerine has kültürü olduğu tartışılmaz bir gerçek.
Yepyeni bir kültüre adapte olmaktansa (tamamen taşınmayı planlamıyorum), sahip olduğuma en yakınını tercih etmek istiyorum. Platform Linux olunca da (Windows haricindekiler ya FreeBSD ya da Linux) bu pek mümkün değil. QT sağlam köprü olur gibi geliyor.
----
-Qt' nin geleceği. Qt şu an açık kaynak lisansına sahip olarak geliştirilmeye devam ediyor ve bence geleceği bugün olduğı gibi parlak. Qt geliştirici topluluğu, işlerinde ciddi insanlardan oluşuyor ve kendileri dışında bir çok projeye destek veriyorlar. İlgi seviyesinde hiçbir azalma olmadı. Çünkü bugün python için de kullanılan PyQt modülü oldukça popüler. Microsoft ve google, Qt projesinden bir çok geliştiriciyi kendilerine çekmek için çalışmalar yaparlar. Bu halen de devam etmekte. Windows 8 ile bu girişim boşu boşuna yapılmış olacak. Zaten Qt taşınabilir olsun, olmasın tüm windows sürümlerinde çalışabiliyor. Böyle bir durumda Qt ye olan ilginin azalması pek olası görünmüyor.
Bunu duymak içimi rahatlattı.
Oracle son dönemlerde hırçınlaştı. Java üzerinde lisans baskısı kurdu (haklı da aslında). Linux dünyası da Oracle Java dağıtımı konusunda tedirgin. Ubuntu, sun-java paketlerinin dağıtımını durdurup OpenJDK dağıtımına başladı.
Bu duruma paralel olarak Python kullanımında da artış var (Klasik C/C++ karmaşasından kaçanların sığındığı Java adalarında fırtına kopacak korkusuyla Python'a sarılma durumu değildir umarım). "Uygulama geliştirilebilir" demeye başlayan şirket sayısında da artış var. Python, bildiğim kadarıyla çok pratik ve çok dinamik bir dil. Python dili kullanan geliştiricilerin PyQt tercih ediyor olmaları, Qt'nin pratikliği hakkında önemli bir gösterge oldu.
----
-Taşınabilirlik ve mükemmellik. Qt nokia üzerinde pek de kusursuz değil. Diğer platformlar için de öyle. Örneğin dün QNetworkAccessManager ile çalışırken bir bug buldum ve kontrol ettim. Bug yeni oluşmuş ve bir sürü yoruma sahip idi. Qt ister C++ için olsun, ister diğer diller için port edilmiş olsun çok fazla kullanılıyor. KDE dediğimiz sistem %90 oranında Qt kodundan oluşmakta. Ayrıca Pardus da yapılmış özgün araçların nerede ise tamamı Qt ve PyQt ile hazırlanmış durumda. Hataları var ve bunlar sürekli gideriliyor.
Taşınabilirlik konusu ise başlı başına ayrı bir konu. Sadece ve sadece Qt kütüphanelerini kullanıp bir uygulama yaparsan, aynı kodları başka bir işletim sisteminde derlemen ve çalıştırman %90 oranında mümkün. %10' luk kısım için
http://doc.qt.nokia.com/4.7-snapshot...p-systray.html de verilen örneği inceleyebilirsin. MacOsX için fazladan işler yapman gerekebiliyor genelde.
Hatasız sistem, sanıyorum yoktur. Fakat, Android'in yaptığı hata gibisi de yoktur (API 15 olmuş, hala aynı).
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/TextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/TextView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/Button1" <---- HATA
android:layout_below="@id/TextView1" />
<Button
android:id="@+id/Button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Android uygulaması geliştirmişseniz yukarıdaki kodun ne iş yaptığını (yapmaya çalıştığını) hemen anlarsınız. Geliştirmediyseniz, kısaca açıklaması şu:
Layouta iki
TextView (statik metin) ve bir
Button yerleştiriyor.
TextView1 en üstte,
Button1 en altta,
TextView2 de ikisinin ortasındaki boşlukta olmalı.
@+id,
new something() gibi bir anlama geliyor.
Java Resource Fileda bir
Id yaratıyor, bu
Id ile o
şeye erişebiliyoruz.
@id ise daha önce oluşturulmuş
şeyi gösteriyor.
Bu örnek çalışmıyor.
Button1,
TextView2'den sonra tanımlandığı için
...@id/Button1... satırında hata veriyor çünkü
Button1'in varlığından habersiz. İki çözümü var:
-
TextView2,
Button1'den sonra tanımlanır (bu mantıklı)
- Sıralama aynen kalıyor ama şöyle ilginç bir çözüm:
.
.
.
android:layout_above="@+id/Button1" <---- Button1 Id burada oluşturtuluyor
android:layout_below="@id/TextView1" />
<Button
android:id="@id/Button1" <---- Oluşturtulan Id atanıyor
android:layout_width="match_parent"
.
.
.
şaşırdım. Ayrıca,
Layout,
RelativeLayout. O bunun altında, bu bunun sağında filan denilebiliyor.
android:orientation="vertical" ise
LinearLayouta özel bir
property fakat hata vermiyor.
Anlıyorum. Inheritance / rendering ile ilgili durumlar ama... soğudum. Exception almalıyım (acaba başka almam gereken yerlerde de alamıyor olabilir miyim?).
Bahsettiğiniz hataların, bu kadar temelde olduğunu zannetmiyorum.
----
Devamı gelecek...
--- Mesaj Güncellendi ---
----
-Uygulama geliştirme platformu konusunda kesinlikle ve kesinlikle MacOsX diyorum :D Şaka bir yana tabii ki linux çekirdeği kullanan bir ortam tercih edilmeli. Geliştirici için linux tabanlı işletim sistemleri daha uygun ortamlar sunuyor. İstediğin her türlü araç elinin altında bulunuyor ve kütüphanelerin de yardım sayfaları elinin altında bulunuyor. SSH, tcpdump gibi araçlar, eclipse, emacs çok iş görüyor. Evet bu yazdıklarımın hepsinin windows versiyonları mevcut fakat birden fazla masaüstünü serbestçe kullanmak ve özellikle unity kısayolları bu kadar yerinde iken, windows da fare kullanmak hamallık gibi geliyor.
Şakayla karışık gerçeklik payı da var sanırım. :D
200 civarında video izledim. Android için uygulama geliştirmeyi öğreten videolar.
Yok böyle bi' şey. Hepsi de Apple kullanıyor.
"Imajdan" mı "susuzluktan" mı anlayamadım. :ohmy:
Linux'ta da o kadar çok kütüphane, her kütüphanenin o kadar çok versiyonu var ki... kayboldum.
----
Kod yazarken ben şahsen sadece kod yazmak istiyorum. Ellerim klavyenin üzerinde kalmalı. Qt creator bu boşluğu birnebze dolduruyor. Açıkcası onun kısayollarına da çok alıştım.
İşin zevkli ve kolay yazılım geliştirme yönü farklı, sisteme özel yazılım geliştirme farklı bir olay. Qt ve qmake ile Linux tabanlı bir sistem üzerinde de, windows için program geliştirebilirsin ve bunun için çarpraz derleyiciye ihtiyacın yok. Linux makinaya mingw kurup, direkt devam edebilirsin. Fakat macera aramak ve boşuna zaman kaybetmek gereksiz. Windows için birşeyler yapıyorsan, windows da çalışmalısın.
Aynı fikirdeyim. Microsoft için Microsoft, Apple için Apple, Linux için Linux geliştirici araçları kullanılmalı. Sistemler zaten komplike, port edildiğinde de yeni komplikasyonlar gerçekleşiyor gibi geliyor bana.
Mesela Eclipse. Hakikaten Linux üzerinde daha hızlı çalışıyor. İlginç.
----
-Evet şu anda Qt ile android için ve iOs için uygulama geliştirmek mümkün. Apple firması Qt yi dükkandan kaldırana kadar durum daha da iyiydi. Android uyumluluğu iyi.
Bunu duymak da içimi rahatlattı.
----
-Qt nin Model view controller yapısı (MVC) var. Ayrıca QML diye adlandırılan bir yapı mevcut. Bunun dışında HTML5 i de arayüz olarak kullanabilirsiniz. Qt Creator ile yeni proje oluştururken seçeneklere göz atarsan ne demek istediğimi anlarsın :)
Android de MVC yapısına sahip olduğunu iddia ediyor (nasıl bir MVC yapısıysa).
Çok basit. Üç harf var: M-V-C
Android'te iki. M-VC.
V ve C iç içe girmiş. İlk başta "Ben mi yanlış yolda yürüyüorum?" diye düşündüm. Android geliştiricileri (çeşitli forumlarda, yurtdışında) "bu böyle!" deyince, kabullenmek zorunda kaldım.
----
- Data binding e ne gerek var diye bir soru sorsam beni ayıplamazsın sanırım.
Daha pratik / etkili yöntem var o zaman. :)
----
Araya bi' sürü iş girdi.
Qt-Creator'ı hala tam olarak inceleyemedim.
Tekrar çok teşekkür ederim.