Programlama

RVM ile Ruby 2.0.0 Kurulumu

Öncelikle RVM’i son sürüme güncelliyoruz.

rvm get head

Kütüphaneleri kuruyoruz

brew install libyaml
rvm pkg install openssl

Ruby 2.0 sürümünü kuruyoruz

rvm install 2.0.0 \
–with-openssl-dir=$HOME/.rvm/usr \
–verify-downloads 1

RVM ile 2.0 sürümüne geçiş yapıyoruz (isterseniz –default flag ile varsayılan yapabiliyorsunuz)

rvm use 2.0.0

Programlama

Programlama becerilerinizi gerçek problemler çözerek iyileştirin

Aklımda ne zamandır vardı. Programlama/yazılım geliştirme becerilerini iyileştirmek için Quora’nın ve Stackoverflow’un altını üstüne getireyim, net bir kaç madde’den oluşan kendimce bir liste hazırlayım, kendi fikirlerimle ve deneyimlerimle yazayım hem kendim için hemde aklında bu tip sorular olan kişilerle paylaşabileceğim bir liste olsun diye.

Sonunda bugün tamamladım. Gerçekten faydalandığım, işime yarayan, bir şekilde katkısı olmuş noktaları almaya gayret ettim.

Notlarım;

  • Yazılım geliştirmeye başlamadan önce altyapınıza karar verin, problemlerinizi net olarak belirleyin. Kağıt ve kalem alın, çizin. Karmaşık araçlara ihtiyacınız yok. Yanlızca netleştirin yeterli.
  • Ölçeklemeyi baştan düşünmeyin. Her ne kadar istisnalar olsa da, merak etmeyin kısa zamanda milyonları bulacak ziyaretcileriniz olmayacak. Kısa ve orta vadeyi düşünün. İlk çalışan sürümü, tamamen basit haliyle prototip olarak çıkarın. Zaten sorunlarınız büyümeye başladığınızda olacak, o sorunları o zaman çözersiniz. Baştan zaman kaybetmeyin.
  • Git protokolünü öğrenin. Git ile farklı branşlar üzerinde çalışın. Favori modellerden biri Vincent Driessen’ın branching modeli. (http://nvie.com/posts/a-successful-git-branching-model)
  • Açık kaynak proje geliştirin veya ilginizi çeken alanda bir açık kaynak projeye dahil olun. Açık kaynak projeler, hızla geliştirilmeye ve pek çok insan tarafından test edilmeye müsait projeler oluyor böylece kısa zamanda iyi pratikleri ve gözünüzden kaçan noktaları keşfedebiliyorsunuz. Ayruca bir proje geliştirmeseniz bile en azından dokümantasyon yazın, açık kaynak dünyasına katkıda bulunun.
  • Diğer açık kaynak veya projelerin kaynak kodlarını okuyun, anlamaya çalışın.
  • Başka bir dil öğrenin. Sizin için bir challenge olacak bu fakat her zaman meydan okumak iyidir. Devamlı aynı teknolojileri kullanmayın, kendinizi tekrarlamayın başka teknolojileri ve metodolojileri öğrenin. Ayrıca yeni bir dil öğrenmek düşünce ve analiz becerilerinizi de iyileştirir.
  • Stackoverflow kullanın: Soru sorun, aklınıza takılan yada takıldığınız noktalar olabilir. Akıllı ve yardımsever insanlardan faydalanın. Olabildiğince alanınızdaki soruları bol bol cevaplamaya çalışın.
  • Topcoderhackerrank gibi yarışmalara katılın. Hem bilgi seviyenizi ve problem çözme becerilerinizi görebilmenizi ve becerilerinizi iyileştirmeniz açısından çok değerli.
  • Fun project geliştirin. Keyif alabileceğiniz, eğlenebileceğiniz bir uygulama geliştirin.
  • Var olan açık kaynak projenizi yada fun projenizi refactor edin. Nasıl daha kısa kod, daha yönetilebilir ve daha ölçeklenebilir yazabilirim diye kafa yorun
  • Senior yazılımcılarla birlikte çalışın. Programlama becerinizi yanlızca bilgi ile değil, deneyim ile daha iyi geliştirirsiniz Sorular sorun, iyi pratikleri öğrenin.

 

Kişisel

Verimlilik adına neler yapıyorum, hangi araçları kullanıyorum

Gerek kişisel olarak, gerekse de iş hayatımda nasıl daha verimli olabileceğimi araştırmışımdır. Kimi zaman küçük deneyler yapıp kullandığım uygulamaları test ediyor kimi zaman da iş yapma biçimimi değiştirerek daha nasıl zamanı etkin kullanırım daha az zamanda daha çok iş yapabilirim diye düşünürüm.

Malum işler planladığınız gibi olmuyordur mutlaka. Bende kimi zaman gün içinde zamanı iyi değerlendiremediğimi fark ettim. Fakat, işleri yada yapılacakları önceliklere alıp küçük ve problem çözme odaklı gerçekleştirmek ve az zaman ayırıp işi halletmek sonrasında zihni bulandırmadan diğer yapılacaklara devam etmek en mantıklısı oluyor.

Gün içinde; pomodoro yada time tracking uygulamalarının benim iş yapma biçimine tam uymadığını fark ettim. Zaman kısıtlamasına hapis olmak stres ve hataları beraberinde getirebiliyor.

Çünkü işi, o an hemen aksiyon alınabilecek şekilde basitçe çözmek, karmaşık işleri ise gün içinde parça parça yapıp mutlu olabilmek gerekiyor. Çok uzun saatler çalışmadan o günü verimli bir gün olarak geçirebilmek gerekiyor, örneğin sabah kalktığımda bu günü verimli geçireceğim ve bugün neleri yapacağımı biliyorum diyerek netleştirdiğimde daha verimli olabiliyorum.

Uygulamalardan sık sık faydalanıyorum, Bu yazımda Macbook Pro ve iPhone’umda kullandığım uygulamalardan (pek çoğu diğer platformlarda bulmak mümkün) ve faydalarından bahsetmek istiyorum.

  • Pocket:  Kullandığım uygulamalar arasında bence en faydalı bilinen adı ise “read-it-later” uygulaması.
    İnternette keşfettiğim çok faydalı olabilecek yazı, dökümantasyon, makale gibi içerikleri pocket’a alarak o an içeriği tüketmek için zaman harcamak yerine, işim dışındaki zamanlarda veya boş zamanlarda (yolda, vapurda, öğle yemeğinden sonra) okuyabiliyorum, ayrıca offline okuma özelliği değer katıyor, böylece atıl zamanı değerlendirmiş de oluyorum.
  • Buffer: Aynı anda Twitter, Facebook ve Linkedin üzerinde paylaşmayı sağlayan buffer ile, paylaşmak istediğim içeriği bir tek  seferde gönderim yapabiliyorum, böylece her network için giriş yapma zorunluğum ortadan kalkıyor ve gönderim yapacağım zamanları gün içine bölerek gönderilerimi periyodik hale getirmiş de oluyorum.
  • Reminders: Açıkcası pek çok todo uygulaması denedim (Wunderlist, Evernote, Cheddar, Weave), fakat istediğim verimi alamadım. Sebebi ise karışık olması ve telefonu elime aldığımda uzun bir akış ile boğuşmak istememem ve ayrı uygulamalar kafa karıştırıcı olması. Bunun yerine iPhone ile birlikte gelen reminder uygulamasını kullanıyorum. Günlük yada periyodik yapılacakları hatırlatıyor, iCloud ile entegre olması ve native uygulama olması, bildirimlerle uyarması faydalı.  Gün içinde, saat saat ayrı devamlı yapılacak işlerimi tutuyorum ve haftalık olarak kontrol edeceğim işleri (projelerle ilgili haftalık işler, gezi planı, randevü) gibi ve aylık periyodik yapılacaklar (kira, faturalar, ödemeler) vb.
  • Quora, Stackoverflow: Hem genel anlamda, hemde teknik açıdan (yazılım ve programlama) en çok içerik tükettiğim ve kaliteli bulduğum iki network, uygulamarını ise sadece “subscribe olduğum soru ve konulara” göre bildirim alacak şekilde kullanıyorum. Böylece gün içinde girip kontrol etmek yerine takip ettiğim topic’lerde güncellemeler gelmesi hedefli içeriği tüketebilmemi sağlıyor.
  • Gmail: Vazgeçtiğim alışkanlıklarımdan birisi de sık sık emailleri kontrol etmek çünkü cidd zaman kaybı olabiliyor, bunun yerine Gmail uygulaması sadece bildirimlerle haber vermesi yeterli. Ayrıca Gmail ile birlikte “Unrollme” servisini kullanıyorum bu sayede düzenli olarak gelen bildirim, bülten, haftalık rapor vb. gibi aslında önemi yüksek olmayan emailleri, rollup yaparak tek email haline getiriyor, hem posta kirliği yaratmıyor hemde tek seferde görüntüleniyor.
  • Zite: İlgili alanlarıma göre seçtiğim konularda (business, technology, ruby, ruby on rails, php vb) içeriklere ulaşmamı sağlayan bir uygulama, faydası hızlı bir şekilde içerikleri başlık başlık göstermesi. Okumak istediğim içeriğe hızlı ve filtreli olarak ulaşmamı sağlıyor, ilgimi çekmeyecek konuları okumadan elimine edebilmem daha kolay olmuş oluyor. Diğer alternatifim ise Summly içerikleri seçtiğim konularda gösterip, sadece özetliyor ve pratik paylaşma opsiyonu sunuyor ayrıca gördüğüm en başarılı navigasyona sahip uygulama.
  • Kanbanery: Kanban metodolojisi basitçe çekme sistemi ilkelerini benimsemiş bir yönetim sistemidir. İşleri kanban sistemiyle yönetmek için Kanbanery kullanıyoruz böylece proje için yapılacak, yapılıyor ve yapılanlar gibi farklı lane’ler tanımlayıp işleri yapılacaklar alanına alıyor ve işi yapan kişi “yapılanlar” alanında üzerine almış oluyor.Ttamamladıktan sonra yapılanlar kısmına alıp kapatmış oluyor.Ayrıca yapılan tüm işler arşivleniyor, kumulatif olarak zaman/iş eğrisi görebiliyorsunuz. Karmaşık email trafiği, followup’lar ve yapılacaklar listeleri ile karmaşıklatırmak yerine iş sürecini ve akışını verimliliğe dönüştürebiliyorsunuz.
  • iBooks: Hafta sonlarında ve resmi tatillerde  özet okumaya çalışıyorum. Basılı kitaplar ve uzun ve detaylu konular sıkıcı olabiliyor. Bu yüzden okumak istediğim e-book’ların özetini alıp, önce okuyor ve önemli kısımlarını Pocket üzerinde tutuyor en son olarak da kendi cümlelerimde Buffer üzerinden paylaşıyorum, amacım daha akılda kalıcı olması. Ayrıca sık sık Pocket kullandığımdan, özetlere daha sonra tekrar göz atma şansım oluyor.

Öte yandan keşfetmeyi seviyorum pek çok deneme yapıyorum. Araştırırken konstre olduğum nokta, iddaa ettiği alanda iyi olan sadece kendi işini yapan, işi karmaşıklaştırmayan araçlar. İnceleyip, gerisini göz arda ediyorum açıkcası.

Evet, şimdilik bu kadar. Bir sonraki yazımda yazılım geliştirme sürecimde neler yaptığımı, yazılım geliştirmede verimlilik adına kendi düşüncelerimi ve yaptıklarımı paylaşacağım.