Scala programlama dili ustune

Uzunca bir surec icinde ogrenmeye karar verdigim dildir. Scala;

– Eiffel, Erlang, Haskell, Java, Smalltalk gibi dillerden esinlenilmis.
– Dili yapan Martin Odersky zamaninda Java compiler versiyonlarindan birini yazmis ve Haskell ekibinde yer almis, alaninda cok ciddi bir akademik uzman.
– JVM olan her yerde scala calisabiliyor.
– Scala Ruby benzeri bir sozdizimi ile yaziliyor ama Ruby’e gore daha performansli bir dil ve bytecode derlenip calistirilabiliyor.
– Java kutuphanelerini kullanabiliyor.
– Hem object oriented hem de functional programming icin kullanilabiliyor ve bu ikisini bir arada duzgun sekilde sunabildigi icin ovulmus bir dil.
– Apple dili swift scala’dan esinlenip yapilmis ve onun gibi coklu paradigma ile calisilabilen bir dil olmus.
– Twitter zamaninda ruby ile cozemedigi sorunlari scala ile cozmus.
– Play gibi guzel bir web frameworkuna sahip.

Zamaninda JAVA diline kutuk gibi kitabi ve PHP’de iki satirda yaptigim seyi 10 satir class yazmadan yapamadigim icin bulasmamistim. Ruby’e ise web ortaminda kitlesinin pohpohladigi icin merak salmistim. Ruby gercekten PHP’ye gore cok daha iyi bir komune sahip olsa da, bir Scala degil ve Java gucu arkasinda bir takim java isleri yapmasina ragmen yok. Ruby bir adi cikmis Volkswagen gibi dururken, Scala guvenli ve saglam Volvo gibi bir dil sanki. Performans karsilastirmalarinda ise Scala cok daha iyi.

Bunun da disinda hayatta ne kadar vaktimiz var bilemiyoruz tabi ama uzun bir surec icinde programlama ile ilgili teorik arayislara olur da girecek vakti bulursak o zaman Scala akademik boyutta ciddi arasitirmalar yapildigi icin muhim bir avantajda getirmis olacak. Tabi bunun icin once piyasa denilen ve birsey yapmamaniz icin icat edilmis illetten kurtulacak finansmani da saglamak ayri bir ruya olarak duruyor.

Bir takim kaynaklar

Scala ! – http://www.scala-lang.org/
Oncelikle buyrun burdan yakiniz. Scala’nin kendi websitesi.

Play Framework – https://www.playframework.com/
Web framework icin oldukca basarili buldugum Rails ile kapisan bir framework.

Simply Scala – http://www.simplyscala.com
Hizlica scala denemek icin online calisan bir sistem. Dilin soz dizimine dair harika ornekler var.

Scala Macerasi – https://scalamacerasi.wordpress.com/
Eski bir kaynak olarak kalmis ama en azindan turkce bir scala neymis bakmak isteyenler icin.

Mert Kavi – http://www.mertkavi.com/category/programlama
Daha guncel bir turkce blog kaynagi.

Symfony notlari & sorulari

SORULAR

__construct function nasil kullaniliyor ?

Entity ve mysql baglantisi olmadan formbuilder nasil kullaniliyor ?

Form nesnesi olusturup, sekillendirilip nasil sisteme dahil ediliyor ?

E-posta nasil gonderiliyor ? (swiftmailler)

 

NOTLAR

Cache temizlemeye ragmen cache sorunu ( browserda cache klasoru ile ilgili hatalar) duzelmiyorsa; $

HTTPDUSER=`ps aux | grep -E ‘[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx’ | grep -v root | head -1 | cut -d\ -f1` $ sudo setfacl -R -m u:”$HTTPDUSER”:rwX -m u:`whoami`:rwX app/cache app/logs $ sudo setfacl -dR -m u:”$HTTPDUSER”:rwX -m u:`whoami`:rwX app/cache app/logs

 

Yeni Başlayan Programcılara Tavsiyeler

Yıllardır program yazan birisi olarak bazı tecrübelerimi paylaşmak istedim. Kısa vadeli hızla para kazanmak gibi hedefleriniz varsa bunları okuyarak zaman kaybetmemenizi tavsiye ederim. Mesleğini sevip, amatör ruh taşıyan biriyseniz, umarım bunlardan fayda görürsünüz.

Her Gün İngilizcenizi Geliştirin
İngilizce öğrenin demiyorum. Her gün İngilizcenizi geliştirin. Eski bildiklerinizi tekrar edin. Yeni teknik terimleri mutlaka ingilizcesi ile de öğrenin. Eğer hiç ingilizce bilmiyorsanız sakın oturup bir programlama dili öğrenmeyin. Mutlaka önce ingilizceyi okduğunuzu anlayacak kadar öğrenin. Evrensel anlamda meslek sahibi olmak ve belki de bir gün literatüre katkıda bulunmak için bu mutlaka şarttır.

Önce Teoriyi Öğrenin

Bir programlama dilinin komutlarını, söz dizimini öğrenmek sizi kesinlikle programcı yapmaz. Sadece bir kodlayıcı olursunuz. Ayrıca iyisinden bir kodlayıcı ( coder ) da olamazsınız. Bu yüzden Programcı olmaya çalışın. Yani işin analiz, test, gerçekleştirme ve değerlendirme aşamaları gibi teorik kısımlarını, bunlar içerisinde analiz teknikleri, tasarım kalıpları gibi bir takım alt teorik disiplinleri mutlaka öğrenin. Yani yazdığınız kodun ne dediğini bilmek ve bunu bazen uzun bazen kısa ama doğru şekilde söylemek için bunlara ihtiyacınız var. Bu sayede programlama dili içinde ya da programlama dilleri arasında çekiçle çivi çakmak dışında iş yapmamanız gerektiğini de keşfedecek, her aracı doğru yerde kullanarak en çokta kendinizi yıpratmaktan ve hayatınızı kısır döngülere sokmaktan kurtulacaksınız.

Algoritma öğrenin. Algoritma size düşünmeyi ve küçük hataların ya da öngörüsüzlüğün programcılık dünyasında ne kadar büyük sorunlar ortaya çıkartabileceğiniz gösterecektir. Düşünmeden iş yapmamak için algoritma öğrenmeniz gerekir.

Bir programlama dili öğrenmeden önce değişken, fonksiyon, sınıf, aduzayı, soyut sınıflar, bağımlılık enjeksiyonu, annotations öğrenmeniz o dili öğrenirken sadece zaten programlama işlerinin o dilde nasıl ifade edildiğini anlamanız demek olacaktır.

Yaklaşım öğrenin. Dünya bugün pek çok programcının iddia ettiği üzere sadece nesne yönelimli olarak üretilmiş programlar kullanmıyor. Fonksiyonel, prosedürel, cephe yönelimli ya da nesne yönelimli yaklaşımların her birinin farklı büyüklükteki programlarda, farklı şartlar ve imkanlar dahilinde verimli olacağını bilin. Kısa olmayan bir zaman sonra hangisini neden ve nerede kullanmanız gerektiğini çok daha iyi anlayacaksınız.

Proje yönetimi öğrenin. Bu sizi çok daha iyi bir programcı yapacaktır. Hangi proje yönetiminde hangi aşamalar nasıl diziliyor anladığınızda elinizdeki veriler ve imkanlar doğrultusunda amaçlarınıza nasıl daha hızlı ve verimli ulaşacağınızı anlayacaksınız. Öngörüleriniz ve pazara bakış açınız doğru kriterleri kullanan anlamlı bir şekil alacaktır. Bu sayede bilgili ve bilgisiz insanları daha hızlı ayırt edip, olmayacak duaya amin diyen pek çok kişiyi ve projeyi başından öngörecek ve zaman kaybetmeyeceksiniz. CPM-pert ya da agile kullanacağınız projeler MVC, MVVM ya da DCI kullanacağınız projeler ayrıdır. Bunların ayrı olma sebeplerini sahip olduğunuz imkanlar ve hedefleriniz doğrultusunda avantaj ve dezavantajları ile ilişkilendirdiğinizde kendinizi daha güvende hissedeceksiniz.

Dataya Yakın Olun

Bunun anlamı işleyeceğiniz veri ile aranıza koyabildiğiniz kadar az araç, arayüz yani daha az kod koymanızdır. İlla veriye erişim bir takım programlar yani kodlar üstünden olacaksa bu kodların açık kaynak olmasına çalışın.

Sözgelimi SQL komutlarını bir takım arayüzlerle vermeye çalışmayın. Mesela MySQL kullanıyorsanız komut satırında iş yapın. Gerçekten gerekmedikçe araya bir Workbench koymayın, benzeri araçları kullanmayın.

Kullandığınız IDE’ler gereksiz dosyalar oluşturmasın ve mümkünse bazı karakterleri gizlemesinler. Mesela VIM ya da Emacs kullanın ve gerçekten gerekmedikçe eclipse, netbeans, sublime text gibi editörler kullanmayın.

İşletim sistemi olarak mutlaka unix türevi bir sistem tercih etmeye çalışın. Hatta linux tercih edin. Linux üstünde arayüzler, browserlar kullanmak tabi ki zorundasınız. Fakat çok iyi bir terminal kullanıcısı olmayı sakın es geçmeyin.

Versiyon yönetim araçları kullanıyorsanız GIT kullanın. CVS ve SVN gerekmedikçe artık kullanmanızı tavsiye etmediğim eski teknolojilerdir. Bu araçları da mutlaka komut satırında olabildiğince orjinal komutları ile fazla alias yazmadan kullanın.

Yazılım Hem Bilim Hem de Sanattır

Bu iki sebepten dolayı yazılım dünyasında evrensel olarak anlam taşımayan hedeflerden uzak durun. Söz gelimi milliyetçi ruhunuza yenik düşerek yerli bir işletim sistemi yapmaya kendinizi adamak yerine, herkesin katkıda bulunabileceği ve bunun sistematikleştirildiği açık kaynak dünyasına katkıda bulunun. Bu şekilde kodunuz değil, bilginizin ne kadar hızlı arttığını görecek, bilmediğiniz şeyleri öğrenmek bir yana belki de bulunduğunuz ülkede henüz farkedilmemiş bilgilere , misyona ve vizyona erişebileceksiniz. Çevrenizde sizden çok daha zeki ve tecrübeli insanların artması bu anlamda güzel bir emaredir. Aynı zamanda çok şanslı olduğunuzu gösterir.

Bu anlamda mümkünse yerel projelere katılmak yerine yerelleştirme projelerine katılmanız çok daha iyi olacaktır. Açık kaynaklı bir programı Türkçe dili eklemek ya da ona bir dil sistemi eklemek bile sadece Türkçe dökümanı olan ve Türkçe bilmeyenlerin anlayamayacağı, geliştirmeye katılamayacağı/katılmayacağı bir sistem geliştirmekten çok daha iyidir.

Esinlenin

Bunu farklı programların muadilini yapmak adına o programlardan özellik ya da kod alın anlamında kullanmıyorum. Fakat bu dediğim de yanlış değil. Eğer açık kaynak ya da kapalı kaynak yazılım yazılım geliştiriyor ve ilgili lisansın ( GNU, BSD, MIT ) kapsamı dışına çıkmıyorsanız kodda alabilir, kütüphanede kullanabilirsiniz tabi ki.

Asıl kastettiğim konu ise farklı disiplinlerden esinlenmeniz. Örneğin bir antivirüs yazılımı yazıyorsanız biyolojik virüslerin nasıl yok edildiğini araştırın. Bu anlamda bir yazılım güvenliği işi yapıyorsanız, bir doktorun nasıl muayene ettiğini, neyi gözönüne aldığını düşünün. Yazılım bilimleri yoğun matematiğe dayansa bile unutmayın ki disiplin olarak pek çok bilim dalından daha genç. Somut ürünler ortaya çıkartan fizik, kimya, tıp gibi alanlar eğer düşündüğünüz üretim senaryoları ya da algoritmalar ile ilgili paralel bir çözüm havuzuna sahipse bunları inceleyin. Özellikle oyun yazıyorsanız oyun teorisini kurmak için masa oyunlarının tavla, satranç hatta monopoly’nin kazanç-rakip ve başarı-başarısızlık gibi kurguları nasıl sistematikleştirdiğini iyi anlayın. Sizin oluşturacağınız teorilerde önünüze ışık tutacak veriler ve düşünüş şekilleri elde edebilirsiniz.

Son Söz

Burada halkımızın pek alışık olmadığı belki de on yıldan fazla sürenizi alacak ciddi uzun bir süreçten bahsetmeye çalıştım. Herhangi bir alanda da on yıldan az uğraşmış birisinin uzman ya da profesyonel olduğunu iddia etmesini pek haklı görmediğimi belirteyim. Bu yüzden mesleğinize sadakat ve vefanız konusunda yanlış yapmamanızı salık vererek, sıra ile takip etmeniz gerektiğini düşündüğüm tavsiyeler halinde verdim. Bu anlattıklarımın Türkiye’de çalışan ve iş yapanların sadece binde birine hitap ettiğini düşündüğümü de belirteyim. Yani bu anlattıklarım işinizi gerçekten sevmiyorsanız ve onunla evli değilseniz sizi mutlu etmeyebilir. Sizi para kazanmak mutlu edecekse lütfen programcı olmayın. Bu işten kısa vadede para kazanmanız çok imkan dahilinde değil. Bunun yerine borsa, emlak ya da taşımacılık sektörlerini denemenizi tavsiye ederim. Emin olun çok daha kolay ve hızlı para kazanacaksınız.

Sürç-i lisan ettiysek affola…

Git log için format tanımlamak

Komut

git log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit

Git alias ile özel komut tanımı

git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit”

git lg

git lg -p