Archive for April 2011


Programlamanın Temelleri Bölüm 1

April 28th, 2011 — 2:14pm

Bu yazı Karl Seguin‘in Foundations of Programming ebook’unun ilk bölümünün çevirisidir. Bir ara gaza gelip çevirmeye başlamıştım ama devamı gelemedi. Aslında alt.net grubunda bir çevirme girişimi olmuştu. Makinede bir bahar temizliği yaparken tekrar gözüme ilişti. Ben bunu bir blog yazısı yaparım dedim :)

Eğer şimdiki durumla ilgili bir memnuniyetsizlik varsa, güzel. Eğer ortamda bir karmaşa varsa, daha da güzel. Eğer huzursuzsanız, ben mutluyum. Madem öyle fikirlerin oluşmasına izin verelim ve çok sıkı tartışmalar, çalışmalar olsun. Eğer biri eksik olduğunu düşünüyorsa, bırakın eksiğini kapatsın!
Hubert H Humphrey

Bir kaç yıl önce programcılık kariyerimde köşeyi dönecek kadar iyi bir durumdaydım. Karşıma insanlara yol gösterme fırsatı çıktı ve ben fırsatı iyi bir şekilde değerlendirdim. Bir kaç aylık bir dönemde programcılık becerilerim son 2 yıla oranla çok daha fazla gelişti, sanatımı belirginleştirmeye devam ettim. Şüphesizki hala çok şey öğrenmeliydim. 5 yıl önce yazdığım kodlara baktığımda utanıyorum. Eskiden beri programcılık becerimden eminim ama çok az şey bildiğimi kabul ettiğim anda (ve bu her zaman böyle olcak – bildiklerim bilmediklerimden az olacak) gerçekten anlamaya başlamıştım.

Programlamanın temelleri e-kitabı, hevesli programcıların birbirlerine yardımcı olmaları için yazılmış yazılar serisidir. Bu yazılarda henüz bilmeyenler için çok derin birçok şeyden bahsedeceğiz. Ben .NET camiasında iki baskın taraf görüyorum. Birini MSDN’ciler olarak tanımlıyorum. VB 6 ve Klasik ASP’den beri Microsoft’un yönlendirdiği kitle. Diğer tarafıda Alt.NET olarak tanımlıyorum. Nesne yönelimli programlama pratiklerini önemseyen ve Java konseptlerinden etkilenen kitle.
Gerçekte bu iki kitle birbiriyle kıyaslanabilir değil. MSDN yolunu takip eden kitle, sipesifik metot çağırımlarıyla bir şekilde çalışan bir sistem kurar. Bu MSDN’ci tutuma karşılık Alt.NET daha soyut konulara da değinerek bir sipesifik implimentasyon yapar. Jeremy Miller’ın da söylediği gibi “.NET camiası API ve Framework detaylarında fazlasıyla kaybolmuş durumda ve design ve kodlama becerilerine yeterli vurgu yapılmıyor.” Örnek vermek gerekirse, MSDN her veritabanı bağlantısı için DataTable ve DataSet kullanmaya yönlendiriyor. Alt.NET de DataTable ve DataSet kullanır. Lakin Alt.NET, tasarım kalıpları ve nesne ilişkilerindeki zorlukları, nesne uyuşmazlıklarını, Nhibernate(ORM) ya da MonoRail(Aktif Kayıt – Active Record) gibi sipesifik araçlarla çözmeyi de düşünür. Başka bir deyişle Alt.NET sadece MSDN’de yazanlara ALTernatif değildir. Alt.NET developerların faklı çözümleri de anlayıp uygulması gerektiği inanışıdır.

Tabiki, yukarda anlattıklarımızdan da anlaşılacağı üzere Alt.NET yolu geliştiricide çok daha geniş bir bilgi dağarcığı istiyor.Ve bu bilgiyi öğrenme yolu zorlu ve yardımcı kaynaklar su yüzüne yeni yeni çıkıyor. (Bende bu sebeple bu yazıları yazmaya karar verdim.) Ancak, sonucunda aldığımız ödül bu zahmete değer(bence), ben profesyonel gelişimimin sonucunda çok mutlu oldum.

Amaçlar

Basit olmasına rağmen, aldığım her programlama kararı büyük oranda bakımının kolay olmasına dayanır. Bakımı kolay kod(Maintainable) kurumsal yazılım geliştirmenin köşe taşıdır. CodeBetter’ın sıkı takipçileri bunu duymaktan bıkmışlardır ama bakımının kolay olması hakkında bu kadar sık konuşmamızın iyi bir nedeni var; bu iyi bir yazılım geliştirici olmanın anahtarıdır. Böyle düşünmemin bir kaç nedenini sıralayabilirim. İlk olarak, yapılan çalışmalar ve ilk elden deneyimlerimizden çıkardıklarımıza göre, Sistemler, bakıma önemli ölçüde zaman harcarlar. %50’nin üzerinde zaman değişiklikler, hata düzeltmeleri veya destek için harcanır. İkinci olarak, değişiklikler ve yeni özellikler devamlı olarak varolan koda yapılır. Çevik geliştirme felsefesi adapte etmediğinizde bile, müşterileriniz muhtemelen sizden her çeşit değişikliği yapmanızı isteyecektir. Kısaca, bakımı kolay olan bir çözüm sadece masrafınızı azaltmakla kalmaz, aynı zamanda sunacağınız özelliklerin sayısını ve kalitesini de yükseltir.

Programlamada görece yeni olsanız bile; şanslısınız ki, nasıl bir kodun işinizi kolaylaştıracağı konusunda araştırmalara başlamış durumdasınız. Başka birinin yazdığı bir uygulamayı, diğer çalışma arkadaşlarınızla yazdığınız bir uygulamayı, hatta bir kaç ay önce yazmış olduğunuz bir şeyi düzeltmeye çalışırsanız göreceksinizki baya bir yol katedeceksiniz. Yapabileceğiniz en önemli şeylerden biri, size tam olarak doğru görünmeyen şeyleri not almak ve daha iyi sonuçlar için bilinçli bir şekilde google da aramalar yapmak. Örneğin, bizim gibi klasik ASP kullanarak yıllarını geçirmiş programcılar şunu iyi bilir ki, kod ile HTML rasındadaki entegrasyon ideal değildir.

Bakımı kolay kod yaratmak en önemsiz şey değildir. Başladığınız zaman, süreç doğal gözükmeye başlayana kadar extra gayretli olamanız gerekecektir. Tahmin edebileceğiniz gibi, biz bakımı kolay kod üzerine düşünen ilk insanlar değiliz. Son olarak, aşina olmanız gereken bir takım sağlam fikirler mevcut. Bu fikirlerin üzerinden geçtikçe, her birini etraflıca düşünmek için zaman ayırın, farklı bakış açıları ve daha fazlası için google’da arama yapın ve en önemlisi bunları üzerinde çalıştığınız projeye nasıl uygulayabileceğinizi görmeye çalışın.

Basitlik

Yazdığımız kodun bakımını kolaylaştıran en temel araç, onu mümkün olduğunca basitçe yazmaktır. Bakımı kolay sistemler, gelebilecek herhangi bir isteği karşılayabilecek şekilde geliştirilmelidirler. Bu güne kadar, müşterilerin tüm isteklerini karşılayabilmek için, meta tablolar ya da xml konfigürasyon dosyaları üzerine kurulmuş sistemler gördüm. Bu sistemler, performans gibi ciddi teknik limitlerinin yanısıra kurulmuş oldukları amaçları karşılamakta da başarısızdırlar. Deneyimlerime göre esnekliğe giden doğru yol bir sistemi mümkün olduğunca basit tasarlamak. Böylelikle siz veya bir başka developer sizin kodunuzu rahatlıkla okur, anlar ve gerekli değişiklikleri yapabilir. Neden sadece kullanıcı adı doğru uzunlukta mı diye kontrol etmek için, konfürüge edilebilir bir kurallar motoru geliştirelim… Daha sonraki bölümlerde test odaklı geliştirmenin basit sistemler geliştirmeyi başarmamıza nasıl yardımcı olacağından bahsedeceğiz. TDD bu işi bizi, müşterilerimizin ödediği kadarını yazmaya odaklayarak başaracak.

YAGNI (You Are not Going to Need It – Buna ihtiyaç duymayacaksın)

YAGNI bir ekstrem programlama inanışı. Gelecekte ihtiyaç duyacağını düşünerek bir şeyi geliştirmemelisin, tecrübe diyor ki, büyük ihtimalle ihtiyaç duymayacaksın ya da tamamen başka bir şeye ihtiyaç duyacaksın. Sadece 2 satırlık bir e-posta ile çöpe dönüşebilecek bir şeyi bir aydır geliştiriyor olabilirsin. Daha geçen gün yanlış anladığım bir mail yüzünden değiştirilebilir bir rapor motoru yazdım. Ama müşterinin gerçek istediği benim 15 dakikada yapabileceğim basit, günlük bir rapordu.

Öteleyebildiğin kadar ötele

Öteleyebildiğin kadar ötele şu demek, gerçekten yapmak zorunda kalıncaya kadar ötele. Hiç kuşkusuz bazen çok öteleyemeyiz. Geliştirme aşamasının en erken safhalarında yazmamız gereken kodlar vardır. Bu konsept YAGNI ile sıkıca bağlıdır. Gerçekten yapmak zorunda olduğunuzu bildiğinizde daha fazla bekleyemeyeceğiniz ana kadar bekletin. Bu size ve müşterilerinize gerçekten bu modüle yada eklentiye ihtiyaç duyup duymayacağınıza emin olmak için ekstra zaman verir. Öteleyebildiğiniz kadar ötelemenin geliştirme anı ve sonrasında karşımınıza çıkabilecek değişiklik sayısını azaltacağını umuyorum.

DRY(Don’t Repeat Yourself – Kendini Tekrar Etme)

Kod duplikasyonu yazılımcılar için çok büyük başağrılarına neden olabilir. Bunlar sadece kodun değiştirilmesini zorlaştırmaz (çünkü aynı şeyi yaptığınız tüm yerleri bulmak zorunda kalırsınız), fakat aynı zamanda, ciddi aksaklıklar oluşturabilecek potensiyele sahiptirler ve yeni yazılımcıların aşama kaydetmelerini gereksiz derecede zorlaştırabilirler. Bir sistemin ömrü boyunca, Don’t Repeat Yourself (DRY; Kendini tekrar etme) prensibini uygulayarak, daha temiz ve bakımı kolay bir koda sahip olabilirsiniz. Şunu aklınızda tutun: kavram kopyala-yapıştırın ötesindedir ve tüm biçimlerdeki işlevsellik/davranış duplikasyonunu yoketmenize yardımcı olur. Nesne enkapsulasyonu ve bağlılık oluşturan kod, duplikasyonu azalmamıza yardımcı olabilir.

Açıklık ve Uyum

Kulağa basitmiş gibi geliyor, fakat kodunuzun, yapacağını söylediği şeyi yapıyor olduğundan kesinlikle emin olmalısınız. Bu, fonksiyonların ve değişkenlerin; standart yazım kullanılarak, ve gerektiğinde yeterli dökümatasyonlar sağlanarak doğru isimlendirilmeleri anlamına gelir. Üretilen bir sınıf, sizin veya ekibinizdeki bir başka yazılımcının yaptığının aynısını yapmalı ve müşteriniz de bunun böyle olması gerektiğini düşünmeli. Ek olarak, sınıfınız ve yönteminiz çok fazla uyumlu olmalı- bu tek bir amaçlarının olması gerektiği anlamına gelir. Eğer kendinizi, sipariş verişi yönetmeye başlayan bir müşteri sınıfı yazarken bulursanız, sipariş sınıfı yaratmaya ihtiyacınız olduğunu anlamalısınız. Birden çok ve farklı meselelerden sorumlu sınıflar, çok çabuk idare edilemez duruma gelirler. Bu bölümde; nesne yönelimli programlamanın, açık ve uyumlu bir kod yazarken size sunabileceği olanaklara bakacağız.

Eşleşmek

Eşleşme, iki sınıfın birbirine bağlı olduğu durumlarda gerçekleşir. Mümkün olduğunda, değişikliklerin yarattığı etkiyi minimize etmek için eşleşmeyi azaltmak isteyeceksiniz ve kodunuzun test edilebilirliğini artıracaksınız. Eşleşmeyi azaltmak veya tamamen ortadan kaldırmak, aslında bir çok insanın düşündüğünden daha kolaydır, bu konuda size yardımcı olabilecek stratejiler ve araçlar bulunmaktadır. Püf noktaları, istenmeyen eşleşmeyi tanımlayabilecektir. Daha sonraki bölümlerde eşleşmenin üzerinden detaylı bir şekilde geçeceğiz.

Birim Testleri ve Sürekli Entegrasyon

Birim Testleri ve Sürekli Entegrasyon (genel olarak CI olarak anılacaktır), daha sonraya ertelemek zorunda kaldığımız bir başka konu. Ama bundan once bilmeniz gereken bir kaç şey var. İlk olarak, ikisi de bakımı kolay bir kod yazabilme amacına ulaşabilmemiz için çok önemlidir. Birim testleri, yazılımcılara inanılmaz derecede fazla güven vererek onları güçlendirir. Siz bişeyleri iyileştirirken, değiştirirken ya da yeni özellikler eklerken, herhangi birşeyi bozmadığınızı garanti altına alan yüzlerce veya binlerce otomatik testin olması inanılmazdır. İkinci olarak, birim testlerini, kabul etmeye istekli değilseniz, en azından denemeye, bu yazıyı okuyarak zamanınızı boşa harcıyorsunuz. Üzerinden geçeceğimiz çoğu şey, kesinlikle kodununuz test edilebilirliğini artırabilmek amaçlı olacaktır.

Bölüm Özeti

Bu bölüm herhangi bir kod içermemesine rağmen, bir kaç öğenin üzerinden geçmeyi başardık. Teorik olmasından ziyade, daha elle tutulabilir olmasını istediğimden, buradan sonra ilk olarak gerçek koda kafa üstü dalacağız?. Umarım şimdiye kadar, son zamanlarda duymaya başladığınız garip kelimelerin anlamının size daha anlaşılabilir gelmesini becerebilmişizdir. Önümüzdeki birkaç bölüm, OOP’yi ve yüksek düzeyde devamlılığı(persistence) kapsayarak, geri kalan işimizin temelini atacak. O zamana kadar, umarım bahsettiğim bazı anahtar kelimeleri araştırarak zaman harcarsınız. Sizin kendi deneyimleriniz en iyi aracınız olduğu için, son ve şimdiki projeleriniz üzerinde düşününün ve iyi sonuç veren şeylerin olduğu kadar, işe yaramayan şeylerinde de listesini yapmaya çalışın.


codebetter.com/karlseguin/2008/06/25/foundations-of-programming-ebook/

Comments Off on Programlamanın Temelleri Bölüm 1 | Something

Arama Motorlarının Sosyal Medya Düzenlemeleri

April 20th, 2011 — 6:36am

Artık arama sonuçlarımızı sosyal medya uygulamalarındaki arkadaşlarımız’ın! (sosyal network) internet davaranışları da etkileyecek. Aradığımız konuda bir arkadaşımızın paylaşımı varsa, sonuçlarda göreceğiz. [1]

O kadar çok sosyal medya uygulaması varki… şaşırmak için “http://namechk.com” adresine bir bakabilirsiniz. Bu adreste ayrıca, uygulamalarda sizin isminizle üyelik açılmış mı, açılmamış mı bunu da kontrol edebilirsiniz. Ama tabiki bu servislerden en önemlilileri twitter ve facebook. [2]

Genel arama sonuçlarında da artık twitter, facebook gibi uygulamaların kullanıcılarının beğendiği ya da paylaştığı şeyler de dikkate alınıyor. Ben bu yazıyı hazırlarken henüz google “facebook like” sayılarını dikkate almaya başlamamıştı ama bing “facebook like” sayılarına baktığını söylüyor.

Sosyal medyanın bize faydalarını arama motorları açısından değerlendirdiğimizde 2 kola ayırabiliriz.

  • Social search, Real time search gibi araçlar üzerinde görünürlük. [3]
  • Sosyal medya uygulamaları aracılığı ile daha çok kişiye ulaşmak. Yani SEO için en önemli kriterlerden olan trafik için olumlu katkı. Ve tabiki retweetler ile gelen değerli linkler…

Sosyal medya daha ölçülebilir bir ortam olsada manipülasyonu mümkün. Bu manipülasyonu tüm uygulamalarda sahte hesaplar açarak yapabilirsiniz. Bu durumun önüne geçmek için arama motorları çeşitli yollar deniyorlar. Mesala twitter hesapları için otoritelik seviyelendirmeleri var. Sıradan bir hesabın paylaştığı link sonuçları çok da etkilemiyor. Ama bir doğrulanmış hesap (Verified account) paylaşırsa ciddi bir etki yapmış oluyor. [4]

Aklımıza hemen “Ben nasıl otorite hesabına sahip olurum?” sorusu geliyor. :) İnternetteki makalelerde söylenenlerden birkaçını sıralayalım;

  • Mümkünse verified account olmak
  • Farklı paylaşımlar yapmak
  • Paylaşımlarımızın diğer kişiler tarafından çok retweet edilmesi
  • Paylaşımları çok retweet edilmiş kişilerce takip edilmek
  • Otorite seviyesinde twitter hesapları tarafından takip edilmek

Şu anda twitter otoritelik seviyenizi öğrenmek isterseniz twitter oturumunuzu kapattığınızda twitter sayfanızın pagerank değerine bakın. Mesela benim “twitter.com/hserdarb” adresimin pagerank değeri yok. Ama internet ekipler amirimiz :) Serdar Kuzuloğlu’nun “twitter.com/mserdark” adresinin pagerank değeri “6”. Kendisi aynı zamanda Türkiye’nin ilk verified twitter account’una da sahiptir.

Özetlemek gerekirse, sosyal medya uygulamaları yeni, arama motorlarının sosyal medya uygulamalarındaki kullanıcıların paylaşımlarını dikkate almaya başlaması yeni … Aslında arama sonuçlarımız yapım aşamasında gibi bir durumdayız :) Arama motorlarının, sosyal medyanın arama sonuçlarını etkilemesi ile ilgili algoritmalarında değişiklikler olmaya devam edecek.

Zaten arama motoru optimizasyonu kriterleri de sürekli değişen kriterler. Bilgilerimizin güncelliği korumak için güvenli kaynakları devamlı takip etmemiz gerekiyor. Benim çok güvendiğim 2 kaynak var. Sizlere de bu kaynakları özellikle takip etmenizi tavsiye ederim.

  1. youtube.com/GoogleWebmasterHelp (Google arama takımı liderinin sorulara yayınladığı net cevaplardan oluşan bir kanal, bilgiyi birinci ağızdan almış oluyorsunuz!)
  2. searchengineland.com (SEO gurularının yayınladığı makalelerin bulunduğu bir sayfa. )

Benim gördüğüm kadarıyla, arama motorları merkezlerine insanlara daha yararlı, daha kaliteli içeriği ulaştırmayı koymuşlar. Optimizasyon kriterlerini inceleyip uygulamaya çalışırken zaten çok kaliteli, benzersiz bir içerik ya da ürünümüz varsa işimiz çok daha kolay oluyor gerçekten doğal bir değerlenme yaşıyorsunuz.

Hedefimiz daima daha iyisini ve daha kalitelisini üretmek olmalı. Çünkü bu şekilde optimizasyon kriterleri değişse bile bizim içeriğimiz doğal olarak yükselmeye devam edecektir.

Kaynaklar

  1. searchengineland.com/google-expands-social-circle-in-search-results-including-page-rankings-65202
    searchengineland.com/what-social-signals-do-google-bing-really-count-55389
    youtube.com/watch?v=ofhwPC-5Ub4
  2. searchengineland.com/bing-now-with-extra-facebook-see-what-your-friends-like-52848
  3. searchengineland.com/google-realtime-search-49393
  4. seomoz.org/blog/google-bing-confirm-twitter-facebook-influence-seo

Comments Off on Arama Motorlarının Sosyal Medya Düzenlemeleri | Something


Back to top