Neden C++ öğrenmeliyim ?

Bu minvalde bir yazı yazmayı uzun zamandır düşünüyordum ki, Krzysztof Szatan’ ın bloğunda bu konuyla alakalı çok iyi bir şekilde ele alınan bir blog yazısı gördüm. Kendisinden izin alarak yazısını türkçeye çeviriyorum:

“C++ artık ölü mü ?”

Bunu 10 yıldır üniversiteye gittiğim günden beri duyuyorum. Java şu anda zaten enterprise yazılımlarda tercih edilen programlama dili, en azından ABD için bunu söyleyebilirim. Eğer programcıysanız az çok Joel Spolsky’ nin JavaSchools undan haberiniz vardır. Bu 2005 aralığındaydı. 2000 de ortaya çıkan C# ise Microsoftun Javaya bir cevabıydı aynı zamanda C++ ı bitirecek olan programlama dili olarak lanse edildi. Daha sonra dinamik programlama dönemi başladı. Ruby, Python popüler olmaya başladı. Bu dillerler beraber akla gelen sorular bu kadar kolay programlama imkanı varken neden herşey için C++’ ı kullanasın ki ? C++ sadece daha hoş bir C değil miydi ? Kaldı ki C de daha hoş bir assembly diliydi. Eğer bir saatiniz varsa Herb Sutter’ ın muhteşem konuşmasına ayırabilirsiniz. TIOBE endeksine baktığımızda son 15 yılda C++ ın 3. sırayı işgal ettiğini görüyoruz, ne dersiniz eski bir dil için hiçte fena değil bu derece bize farklı kapılar aralıyor…

Göstericileri (pointer) kim sever ki ?

Çoğu insan C++ dilini göstericiler ile özdeşleştirerek hata yapıyorlar. Benimde bu konuda kötü tecrübelerim var, çok boyutlu dizilerin adreslerinin fonksiyonlara parametre olarak verilmesi, gösterici aritmetiği, iki yönlü bağlı liste (doubly-linked list) bunların hepsi “C with classes” döneminden kalma. Belki de C++ ı bu şekilde öğretmek yanlış değildir. O halde tekrar düşün.

Tabiki profesyonel bir programcı göstericilerin (pointer) nasıl işlediğini bilmeli. Fakat bu modern C++’ a ait bir yaklaşım değil. C++ sürekli gelişiyor dün iyi bilinen bir çok şey artık değiştirilmesi gereken kötü kodlar haline geliyor.

cpptimeline

Aslında bir bakıma dil revizyon sürecinden geçiyor. Bjarne Stroustrup’ a göre: “C++11 yeni bir dil hissi veriyor, parçalar yerine oturuyor, yüksek seviyeli programlama dille eskisinden daha iyi kaynaşıyor ve daha etkili hale geliyor”. C++ yeni gelen standartlarla beraber lambdalar, memory mode, aralık tabanlı döngüler, sağ değer referansları, değişken parametreli şablonlar v.s ile birçok görevi daha yapılabilir hale getiriyor. Diyelim ki eskiden kalma kodların var ve bunların yeni standartlara göre elden geçmesi lazım. Eski kodların yeni standartlara nasıl dönüştürüleceğini söyleyen statik kod analizi yapan ve öneriler sunan araçlar hizmetinde. Bu tarz araçların C++ da yokluğu her zaman sorun olmuştur, sadece Java nın mı otomatik refactor işlemi sunduğunu sanıyorsun ? Google’dan LLVM/clang gurusu Chandler Carruth a kulak verelim, bize 100 milyon satır C++ kodunu nasıl tek seferde refactor ettiğini anlatsın.

Daha Önce Yazılmış Kodlar Gerçeği

Birçok bilgisayar mühendisliği öğrencisi kariyerlerinin başlangıcından itibaren süper kahraman gibi kod yazacaklarını düşler. Fakat genelde 20 yıllık kodlarla karşılaşır. Sabit buffer ile kullanılmış onlarca kaynak dosyaya dağılmış yüzlerce ‘strcpy’, binlerce satır uzunluktaki fonksiyonlar, 5 farklı versiyonu bulunan bağlı liste implementasyonları işte temizlemen gereken birkaç problem. “İştahını sonraya sakla junior, dün çıkması gereken release daha çıkmadı GCC nin yeni versiyonuna geçemeyiz, diğer takım buna hazır değil” diyen yöneticiler. Tam bu noktada “nerede hata yaptım” sorusu akla gelebilir.

Bu problem C++ diline özel değil. Javada, PHP de hatta Ruby ve Python da bu tarz işlerle karşılaşacaksın. Aslında bu bir çok şirketin acı gerçeği. İşte tam bu noktada söyleyeceğim şey, her programlama işinde business tarafta az vakit harcayarak eğleneceğiniz ve zorluklarla savaşacağınız işler vardır. İşte tam buralarda C++ parlıyor.

C++’ın Kral olduğu alanlar: Oyun, Finans, HPC, Derleyiciler

Eğer hayatının tamamında CRUD implemente etmek istemeyen biriysen mutlaka C++ öğrenmelisin. İşte önerilerim;

Oyun endüstrisi :Neredeyse tüm AAA oyunları C++ ile geliştirilmiş. Yazılım dünyasında da oyun geliştiricilik saygı duyulan ve en çok talep edilen alanlardan biri. Performans çok önemli dolayısıyla etkin kod yazmak çok önemli. C++ da derinleşmekten çok oyun endüstrisinde işin teoriğini öğrenmek, semantiğini kavramak ve birtakım API veya kütüphaneleri öğrenmek daha önemli. Matematik alt yapısı ve grafik bilgisi bu alan için gerekli. Bu endüstri içinde tüm kariyeriniz boyunca öğrenecek bol bol materyal mevcut.

Yüksek performanslı uygulamalar – HPC: Bu tarz uygulamalar yüksek hızlarda olabildiğince fazla işlem yapmayı gerektirir. Donanım bilgisine sahip olmanız gerekir. Ve bu bilgiyi direkt dile uygulayabilmeniz gerekmektedir. Paralel programlama kütüphanesi , CUDA ve OpenCL bu denli bir uzmanlığın C++ ile ortaya konan ürünleri. Eğer bilimsel hesaplamaya meraklı isen bu tarz bir çok iş var bu aralar, hiç makina öğrenmesini duydun mu ? Bu ara baya popüler.

Derleyiciler: Bu alan benim favorim. LLVM projesi büyük bir başarıya sahip şöyle ki LLVM nin tezgahından geçmemiş veya kütüphanelerini kullanmamış popüler bir programlama dili bulamazsınız. Proje tamamen C++. Derleyiciler bir çok programlama diliyle yazılsa da teori implementasyonun gerisinde kalıyor tıpkı diğer durumlardaki gibi. İlgilenmen gereken alanlar optimizasyon, statik analiz, debugging, standart kütüphaneler, linker ve birtakım teorik mühendislik problemleri.

Finans: Eğer finans alanında bilgi sahibi iseniz, gerçek zamanlı gecikme kabul etmeyen birçok işin olduğundan haberdarsınızdır. Matematik bilgisi bu alan için çok büyük bir artı. Bu işlerin birçoğu yüksek frekanslı alım-satım platformlarını geliştirmek ve bakımlarını yapmak diyebiliriz. Aslında bu çok güzel bir alan eğer kendinizi programcı olarak tanımlamıyorsanız.5. Bu tarz işlerin ciddi maddi getiri ve büyük faydalar sağladığını da belirtmek isterim.

Bunlar çalışma alanı önerilerinden birkaçı. Bu alanların ortak özelliği birkaç tane java çaylağını bu alanlarda çalıştırıp işi yapmasını bekleyemezsiniz. Alan bilgisinin yoğun olduğu ve tecrübenin zorunlu olduğu alanlar bunlar. Yani bu da kolay kolay vazgeçilebilecek insanlar değiller. Şirketler bu tarz insanları elde tutmak için daha çok maaş ödeyecek ve çözmeleri için ilginç problemleri onlara havale edecek. Tabi ki her işte biraz maraz olur ama gerçekten değer verdiğin ve sevdiğin işlerle uğraşıyorsan bunları görmezden gelebiliyorsun.

Advertisements