30 Ocak 2014 Perşembe

Programlama ortamım

Genellikle herkes tarafından yaptığı işlere saygı duyulan Linus TORVALDS, James GOSLING, Joshua BLOCH gibi büyük programcıların çalışma ortamlarını hep merak etmişimdir. Hangi işletim sistemini kullanırlar, metin editörleri hangisidir, program yazrken kahve mi içerler çay mı? Çalışırken müzik mi dinlerler yoksa tamamen sessiz bir ortamı mı tercih ederler?

Öte yandan 5 sene önceki çalışma ortamım ile şimdiki arasında büyük bir değişim olduğunu fark ettim. Hem kendi adıma tarihe not düşmek için hem de belki okuyanlara ufak ta olsa yol göstermek için programlama ortamımı kaleme almak istedim.

Azami hareket kabiliyeti

Evet. Oluşturduğum ortam için mottom bu. Maksimum mobilite. Ek olarak yeni nesil yazılım mimarilerinde çok sık geçen güzel bir ifade de var. "Share Nothing" prensibi. Bu prensip tabiki kimseyle bir şey paylaşmama manasına gelmiyor. :) Bulunduğumuz ortamdan olabildiğince bağımsız olmamız manasına geliyor. Durumsuz (Stateless) sistemler ya da işlevsel (functional) programlamada olduğu gibi ...

Kendi adıma işimle uğraşabildiğim zaman oldukça kısıtlı. Gün içerisinde çok sık bölünüyor ve teknik işlere gün geçtikçe daha az zaman ayırabiliyorum. Bu konuda imdadıma teknolojik oyuncaklarım yetişiyor. Bana her an her yerden bilgiye erişim imkanı sunuyorlar. Seviste, yemekte, mutfakta, otobüste, tuvalette her an her yerde bilgiye ulaşmak artık muazzam bir şekilde kolay. Hatta bazen yeter artık biraz ulaşmıyayım şu bilgiye dediğim zamanlar bile oluyor. Uzun lafın kısası azami haraket kabiliyeti için işte kişisel savunma silahlarım:
  • Bir Android akıllı telefon (Asgari 1 GB Ram'li olması önerilir)
  • Bir Android tablet (7" tabletler okumak ve internette gezinmek için hem ekonomik hem de hafiftir.)
  • Bir modifiye netbook
  • Minimum 8 GB Ram'e sahip bir iş yeri bilgisayarı
  • Minimum 8 GB Ram'e sahip bir ev bilgisayarı (Opsiyonel)
  • USB 3 Harici sabit disk
Bilgiye her an ulaşmak için 3G internet paketi olan Wi-Fi Erişim noktası olarak kullanabileceğiniz bir akıllı telefon hayatınızı kurtaracaktır. Aklınıza gelen hemen her konuyu mekan tanımaksızın internetten araştırabilir. Twitter'da teknoloji trendlerini takip edebilirsiniz.

Fakat bazen uzun makaleler okumak isteyebilirsiniz. Bu konuda esnekliğinizin verdiği imkanlar doğrultusunda, TV karşısında, yatarken, uzanırken, baş aşağı, bir diğer değişle istediğiniz pozisyonda teknik makale okumanızı bir tablet, olabildiğince kolaylaştıracaktır. Okumak için 7" bir tablet hem hafif hem de ekonomik bir çözüm olacaktır. Wi-Fi özelliği olması yeterli. Cep telefonunuzdan internetinizi paylaştırarak ekstra 3G'li bir tablete para ödemekten de kaçınabilirsiniz.

İşin en önemli kısmı ise sanal makine koşturabileceğiniz bir dizüstü bilgisayar. Bu bilgisayar, USB 3 destekli ve minimum 4GB RAM'li ise tadından yenmez. İdeali 13 - 14" civarında minimum 1366x768 ya da 1600x900 çözünürlükte bir taşınılabilir bilgisayar olmasıdır. Tuşlarının yerleşimi de bu konuda çok önemli programcılar için çok önemli olan home ve end tuşlarının mantıklı konumlarda olmasına dikkat edilmesi gerekli.

Şahsen tüm bilgisayarlarımda temel bir işletim sistemi ve bir sanal makine hipervizörü (Virtualbox) kuruludur. Temel işletim sisteminde kişisel hiçbir uygulama kurulu değildir. Virtualbox ve bir tarayıcı olması yeterli. Tüm sihir ise harici usb diskimin içindeki sanal makinelerde gizlidir. Her proje için ayrı bir sanal makinem bulunur. Böylelikle istediğim yere bu makineleri taşır istediğim bilgisayarda program yazabilirim.

Grafik tasarım için VM, A Projesi VM'i, B Projesi VM'i, Genel kullanım VM'i gibi bir çok sanal makinem bulunur. Bunların boyutları da 16 GB civarındadır. Bu sanal makineler evdeki ve işteki iş istasyonlarıma belirli periyotlar ile yedeklenir. Azami hareket kabiliyeti için en çok dikkat ettiğim husus şahsen sanal makine kullanımıdır. Sanal makine teknolojisine her zaman hayran duymuşumdur.

USB Harici diskler, hareketli parça barındırmasına rağmen piyasadaki birçok USB flash diskten daha hızlıdır. Bu nedenle harici disk kullanılmasını tavsiye ederim. Bu konuda iyi bir markanın yüksek ön belleğe sahip bir modelini kullanabiliriz. Tabi olabiliyorsa e-Sata ile bağlanabilen bir SSD harici disk te oldukça iyi bir çözüm olacaktır. :) NTFS biçimlendirilmiş bir harici diske hem Linux hem de Windows sistemlerden kolaylıkla erişebiliriz. FAT32'de olduğu gibi 4GB dosya boyutu sınırına da takılmamış oluruz. Şahsen kişisel deneyimlerimde USB 2 sistemlerde de herhangi bir hız kaybı yaşadığım söylenemez. Hatta USB 3 sistemlerde aynı anda 3 - 4 sanal makineyi hız kaybı yaşamadan açabiliyorum.

Bulut, bulut, bulut ...

Bir diğer hususta Bulut Bilişim kullanımı. Sanal makineniz ya da harddiskiniz bozulduğunda hayatın zindan olmasını istemiyorsanız bulut veri depoları kullanmanızı öneririm. Kodlarınızın tümünü Github, bitbucket gibi yerlerde saklayabilirsiniz. Yazdığınız dokümanları Bitbucket ve Github gibi sitelerin size ayrılan wiki sayfalarında ya da Google Drive'da oluşturabilirsiniz. Tüm önemli dosyalarınızı Google Drive, Ubuntu One, Dropbox gibi bir bulut depolama sağlayıcısında tutmanız size yüksek hareket ve dosyalarınıza her cihazdan erişme kabiliyeti kazandıracaktır.

Ayrıca bir web geliştiricisi iseniz bir PaaS (Platform as a Service) sağlayıcısı kullanmanız geliştirme hızınızı arttıracaktır. OpenShift, Google Application Engine, Heroku gibi platformlar web uygulamalarının kolaylıkla hayata geçmesine imkan tanır. Bu PaaS platformlarının birçoğu ise doğrudan GitHub'a erişebilmektedir.

Şu anda online IDE'ler çok gelişmiş olmasa da bulut üzerinde kod yazacağımız, hiçbir kurulu IDE'ye ihtiyaç duymacağımız zamanlar oldukça yakın. Fakat şimdilik IDE'lere devam. :) Ama bunun dışında geliştirme işini olabildiğince bir Bulut Sistemine dayandırmak en mantıklı çözüm gibi duruyor. Eğer sürekli entegrasyon kullanıyorusanız, bir PaaS platformu üzerinde koşan Jenkins ile sürekli entegrasyon (continious integration) mümkün. Ne kadar bulut o kadar hareket kabiliyeti.

Yazılım ekosistemi

Bir diğer önemli husus ise kullanılan yazılım teknolojileridir. Vazgeçemediğim kişisel tercihlerimden bazıları şu şekilde:
  • Linux Mint XFCE (Minimum RAM maksimum hız ve sadelik)
  • Oracle JDK 1.7 (Kaynak kod uyumluluğum 1.6 olsa dahi her zaman 1.7 JDK kullanırım)
  • vim (GB'larca büyüklükteki dosyayı teklemeden açıp Microsoftçuları kıskançlık krizine sokan editör)
  • IntelliJ Idea (Her kuruşunu hak eden mükemmel bir IDE)
  • Triemax jalopy (Obsesif Kompülsifler için kod düzenleyici)
  • Maven (Java geliştiricileri için can simidi)
  • Git (Linus'un bizlere hediyesi)
  • Gimp
  • Inkscape
  • Jquery
  • Bootstrap
  • Spring MVC
  • Hibernate

İçeçek

Kişisel tercihim kola 2.5 litrelik bir stokla hiç yerinizden kalkmadan saatlerce program yazabilirsiniz. Fakat sağlıklı olmadığı malum :) Çay işyerindeki vazgeçilmez tercihimiz ama siz en iyisi mi su için. Zaten programcılar olarak hep oturuyoruz. Bir ayağımız çukurda :)

Müzik ve ses

Eğer aklımı vermem gereken bir iş ise örneğin bir algoritma yazıyorsam, sessizlik vazgeçilmez şartımdır. Hatta mümkünse kapıyı üzerime kilitlesinler ve benim orada olduğumu bir müddet unutsunlar. Fakat bir web tasarımı ya da standart bir uygulama yazıyorsam ses konusunda şikayet etmem.

Gelecek

An itibari ile durum bundan ibaret. Muhtemel gelecekte her işimizi bulut platformlar üzerinden halledeciğiz gibi duruyor. Bilgisayarlarımız daha ziyade web tarayıcı çalıştırabilecek düzeyde olacak. Fakat geleceğin ne getireceği belli olmaz. Ubuntu Edge gibi hem cep telefonu hem masaüstü olarak kullanacağımız platformlarda yaygınlaşabilir.

Hiç yorum yok:

Yorum Gönder