Günlüğüm Dökümanlarım Çalışmalarım Hakkımda İletişim
Günlüğüm Dökümanlarım Çalışmalarım Hakkımda   İletişim
CWBlog User


CWLodos

CWBlog Yönetim Paneli
CWBlog Hakkında
CW Misyon
CW User Network

   Extinction
   Cyber-Warrior
   Exelance
   omer_frk
   Berzah



     
 
Yaratıcı Programcılardan Öğrenmenin 14 Yolu
 

Programcılar için genellikle “inek”, “asosyal” ve “çok çok sıkıcı” denir. Yaratıcı bireyler olarak düşünülmezler. Fakat bunun gerçekle uzaktan yakından alakası yok. Kod yazmak, dünyanın en yaratıcı işlerinden bir tanesidir.

Programcılık gerçek kontrol demektir. Sıfırdan bir şey yaratmak muhtemelen yaratcılığın en iyi örneğidir. Bir yazılım veya web sitesi, programcı nereye isterse oraya gider.
Bir şeyi yapmanın bir çok yolu vardır. Bir web sitesi için programcının bir framework yazması gerekir. Ve bu noktaya ulaşmak için elinde olan tek şey bir fikirdir.
Programcılar yaratıcı çözümler bulmak zorundalar, yoksa yaratamazlar.
Programcılar sıradışı düşünmenin harika örneklerini sergilerler, çünkü sırayı onlar yaratır. Bakın yaratcılığımızı doruğa çıkarmak için programcılardan neler öğrenebiliriz:

1. Yeni Bir Dil Öğrenin

Programcılar sürekli yeni diller öğrenirler, bazen gerektiği için, bazen eğlenmek için. Kendinizi bildiklerinizle ve rahat kullandıklarınızla sınırlamayın, gidin ve yeni bir yetenek edinin.

2. Sıfırdan Başlayın

Eğer yazılım üretiyorsanız, işe yarı yoldan başlayamazsınız. Önce ilk adımı atmak zorundasınız. Bazen bir probleme yaratıcı bir çözüm bulmanın yolu en başa gidip tekrar ileri bakmaktır.

3. Her Şeyi Sorgulayın

Her şeyi sorgulamak, her kabullenmeyi yeniden ele alıp doğruluğundan emin olmak demektir. Programcılık tamamen, en temel varsayımları ele alıp bunların üzerine inşa etmektir. Eğer temelde bir yanlış varsa, yazılım düzgün çalışmaz.
Yaratıcılık bazen kabullenmelerle sınırlıdır. Yeni çözümler varsayımları tekrar ele alıp yeni bakış açılarıyla yeniden başlayarak ortaya çıkar.

4. Keyif İçin Yapın

Eğer bir programcı tanıyorsanız bilirsiniz ki sürekli bir şeyler üretiyor. O günkü işini bitirse bile sırf zevk için daha saatlerce kod yazıyor. İşi aynı zamanda hobisi.
Sürekli yeni fikirler ve çözümlerle uğraşmak angarya olmamalı. Bunu bir refleks olarak sürekli yapmalısınız. Ve bu sizi heyecanlandırmalı.

5. Denemenin Yollarını Arayın, Hiç Durmadan

Programcılar, yazdıkları kodun mümkün olan en etkili kod olduğuna emin olmak için onu sürekli değerlendirirler. En ufak bir değişiklik bile bir yazılıma diz çöktürebilir. Sürekli test etmek ve geliştirmek, yazılımın her parçası için çok önemlidir.
Fikirler sürekli olarak titizlikle denenmeli ve ara ara gözden geçilirilmeli. Fikirleriniz zamanla değişir, az ya da çok. Onları sürekli denemek ve sadece üzerlerinde düşünmek, fikirlerinizi değerlendirmenin en iyi yoludur.

6. Tutkuyla Bağlanacağınız Bir Şey Bulun

Eğer bir programcıyla iki dakikadan fazla konuşma fırsatınız olmuşsa farketmişsinizdir ki programcılar işlerine tutkuyla bağlıdırlar. Programcılığı yerler, içerler ve solurlar.
Kendi fikirlerinize ve projelerinize tutkuyla bağlı mısınız?

7. Araçlarınızda Uzmanlaşın

Programcılar kullandıkları araçlar hakkında sürekli bir şeyler öğrenir ve sürekli onları kullanmak konusunda uzmanlaşırlar. İyi bir programcı sürekli olarak ihtiyacı olan yazılımları daha etkili kullanmanın yollarını arar. Araç kutusunu sürekl i geliştirmeyen bir programcıya zor rastlarsınız.
Yeteneğiniz ne olursa olsun, yaratıcılığınız kullandığınız araçlarla sınırlı. Onları kullanmak konusunda ne kadar uzmanlaşırsanız o kadar yaratıcı olursunuz.

8. Soyut İlişkiler Kurun

Bilgisayarı telefon olarak kullansaydınız ne olurdu?
Bir web sitesini kelime işlemci olarak kullansaydınız?
İnsanlar diğerlerinin tam şu anda ne yaptığıyla ilgilenirler miydi?
Skype, Google Docs ve Twitter gibi projeleri yaratan insanların ortak bir özelliği var: Görünüşte soyut olan kavramları ilişkilendirebiliyorlar. “Şöyle bir şey olsa?”’ları alıp denemek, farklı ve yaratıcı düşünmek için mükemmel bir yol.

9. Yapıyı Bir Araç Gibi Düşünün, Bir Kısıt Gibi Değil

İnsanlar yaratıcılığı büyük bir boşlukla ilişkilendirip fikirlerini sınırlardan bağımsız oluşturmaya çalışırlar. Ancak bu, yaratıcılık konusunda büyük bir aldatma.

Sınırlar her yerde. Onları görmezden gelemezsiniz, ancak onlarla çalışmayı umabilirsiniz. Programcı, kullanıdığı dilin ve araçların sınırlarını bilir ve onların etrafından dolaşır. Bu sınırlar onun, sınırlar etrafında dolaşan yapılar kurmasını sağlar. Bir şeyin etrafından nasıl dolanılacağını bulmak, bazen daha büyük bir fikir doğurur. Gereklilik, icadın yaratıcısıdır.

10. Hiç Bir Şeyi Denemeden Silip Atmayın

Anaokulu öğretmeniniz haklıydı: Aptalca soru diye bir şey yoktur. Eğer üçüncü kurala uyup tüm varsayımlarınızı sorguluyorsanız, bir şeyi denemeden çalışmayacağına emin olamazsınız. Çalışmasa bile, yeni bir fikir üretmenizi sağlayabilir.
Bazen bir prototiple başlayıp onu denemek en iyisidir. Eğer çalışmazsa çöpe atın. Çalışırsa tebrikler: bir sonraki harika fikrinizi buldunuz.

11. Her Zaman Daha Basit ve Zarif Çözümler Arayın

İyi bir programcı en basit çözümün her zaman en iyisi olduğunu bilir. Karmaşık çözümler tek bir şey ortaya çıkarır: karmaşa. Pratik çözümler her zaman uzun vadede daha iyi çalışırlar.
Fikirlerinizin yeniliğinin büyüsüne kapılıp pratikliğini unutmayın. Bir problemi çözmenin en iyi yolu, en basit olandır.

12. Başkalarının İşleri Üzerinde Çalışmaktan Çekinmeyin

İnternet’in güzelliği, her zaman aradığınız çözümü bir başkasının zaten bulmuş olmasıdır. Yeni bir yazılım üretirken her zaman mevcut kodları kullanmak iyidir. Tekrleği tekrar icad etmenin manası yok.
Yeni bir fikri uygularken her parçasını baştan yapmak zorunda değilsiniz. Zaten bulunmuş fikirleri kullanın ve onları daha iyi bir şeye dönüştürün. Mükemmel bir fikir bazen yalnızca başka bir fikri değiştirmekten ibarettir. Gmail harika bir örnek. Klasik e – postaya yeni özellikler ekleyerek e – postayı baştan yarattılar.

13. İşbirliğinden Çekinmeyin

En iyi projeler, tek bir programcı tarafından değil, aynı amaç etrafında toplanmış bir çok harika programcıların ellerinden çıkmıştır. Müthiş bir ekip kurun, en iyi fikirleri kimden gelirse gelsin kullanın, ve herkesin katılmasını sağlayın.

14. En Basitten En Güzeli Çıkarın

Programcılar en basit kodları tekrar tekrar kullanırlar ve bu kod parçaları tek başlarına basit de olsa bir araya geldiklerinde harika bir ürüne dönüşürler. Hangi yaratıcı projede çalışırsanız çalışın, detaylara önem verin ancak en önemlisi, o detayların tüm resim üzerindeki etkisine dikkat edin.

Kaynak:bildirgec.org

 
01 Eylül 2008 Pazartesi  @ 12:59:30
 
     
     
 
Web 3.0’dan Web 4.0’a Doğru
 
Son dört yıldır Web 2.0’ı konuşuyoruz ve artık yeniden tanımını yapmaya gerek görmüyorum, artık geleceğe tam olarak odaklanmak gerek bu da önümüzdeki Web 3.0’ı tanımak ve Web 4.0 için de hazır olmak.

Web 3.0 Dedikleri...

Günümüzde Web 2.0’ı yaşıyoruz ve yavaş yavaş Web 3.0’a doğru ilerliyoruz. Web 3.0 yani anlamsal (semantik) web herşeyin herşeyle bağlı olduğu bir dünyanın kod adı. Buzdolabımızdan çamaşır makinelerine kadar, Chumpy’den araç bilgisayarlarına kadar herşey bağlı ve bu bağlılık “anlam” ile sağlanmış olacak, Web 1.0 ve Web 2.0’da linkler asıl bağı oluştururken Web 3.0’da anlam işin bağlantısını sağlayacak. Web 3.0’ı gerçek anlamda 2012’lerde görmeye başlayacağınız, çünkü gerekli olan ontolojilerin oluşmasını beklemek zorundayız. Ama sonrasında özellikle 2015’lere geldiğimizde teknoloji tarihteki en etkin rolünü oynamaya başlayacak; bağlı ve anlam içeren sistemler. Türetim (Tüketim+Üretim=Türetim) Web 3.0 ile farklı bir anlam kazanacak olsa da asıl Türetim’in başarı öykülerini Web 4.0’da duymaya başlayacağız.

Peki ya Web 4.0

Web 4.0 için tek cümleyle söylenebilecek şey; sanal değerlerin gerçek dünya değerlerini geçtiği bir dünya. Burada tabiki algıdan bahsediyoruz aslında, algısal olarak değişim yaşanacak Web 4.0 ile. Sosyolojik olarak değer kelimesini düşünün, bize ifade ettiklerini; bugünün sanal dünyasında değerden bahsetmek ise imkansız çünkü onun sanal olduğunu biliyoruz. Oysa Web 3.0 ile anlamın web dünyasına dahil olması bize düşünmemiz gereken çok yeni soru işaretleri çıkartacak ve bunlar temel anlamda değer üzerine odaklanacaklar. Gerçek dünya ile inanılmaz kesişmeler yaşayacak olan Web 4.0 hayatımızın merkezine interneti koyduğumuz ve algısal değer olarak çok daha fazla ön planda tutacağımız bir dünya olacak. Değerler dediğimizde Türetim (Tüketim+Üretim=Türetim)’in Web 2.0 dünyasındaki değeriyle Web 4.0 dünyasındaki değerini karşılaştırmak çok ilginç bir fark ortaya koyacaktır. Türetim trendi yeni başlıyor ama yakın gelecekte neler olduğuna hepbirlikte şahitlik edeceğiz. Web 4.0 üzerine detaylı bir rapor hazırlıyorum, bekleyin...

----

Tüketici + Üretici = Türetici

Tüketici davranışları son yıllarda yaşadığımız teknolojik gelişmelerden fazlasıyla etkilendi, eskiden sadece tüketmek ile meşgül iken şimdi önce üretip sonra tüketme devri olan Türetici devri başladı.

************ Yorum********

Artik tuketiciler dediginiz gibi birer uretici konumundalar. Nasil mi? Wikipedia ayni anda hem uretiyoruz hem de tuketiyoruz, video paylasim sitelerinde kendi kanallarimizi kurarak uretici oluyoruz, baskalarinin videolarini seyrederek de birer tuketici oluyoruz. Bunlari hemen hemen herkes yapabilirken, biraz daha teknik bilgisi olan insanlar, oyun konsollarini kendilerine gore degistiriyorlar. Yani tuketici kendine verilenle yetinmiyor, ihtiyaci olani kendisi gelistirebiliyor. Yani artik uretici ve tuketici kavramlari birbirine karismis durumda. Aynen yayinci ve izleyici-okur kavramlarinin birbirine karistigi gibi.
Serkan Karaarslan @7/17/2008

Mehmet Nuri ÇANKAYA websitesinden CWLodos tarafından 25 Temmuz 2008 itibari ile derlenmiştir.

 
01 Eylül 2008 Pazartesi  @ 12:58:53
 
     
     
 
İyi yazılım On Yıl Alır, Buna Alışın
 
Joel Spolsky
Fikret Ulug tarafından çevrilmiştir
A. Sinan Ünür tarafından düzenlenmiştir
27 Ocak, 2001


Şu tabloya bir göz atın:

Lotus Notes installed base, chart.

[Iris Associates]

Bu tablo, Lotus Notes workgroup yazılımının piyasaya ilk çıkarıldığı tarih olan 1989’dan 2000 yılına kadar kaç yerde kurulu olduğunu göstermektedir. Aslında Notes 1.0 sürümü çıkarıldığında beş yıldan beri geliştirilmekte idi. Notes’un yeterli kaliteye erişmesi ve kullanıcıların satın almaya başlaması için geçen sürenin uzunluğuna dikkatinizi çekmek isterim. Gerçekten de 1984 yılında ilk kod satırının yazılmaya başlaması ile yukarıdaki eğrinin yükselen kısmına erişmesi için tam 11 yıl geçmesi gerekmiştir. Bu süre boyunca Ray Ozzie ve kadrosu St Barts’da buzlu viski içmiyorlardı. Nefes almaksızın kod yazıyorlardı.

Bu hikayeyi anlatmamın nedeni bunun ciddi yazılımlar için normal bir durum olduğudur. Oracle VTYS 22 yıldan bu yana kullanımdadır. Windows NT’nin geliştirilmesi 12 yıl önce başlamıştır. Microsoft Word ise kocamış denebilir; Word 1.0 DOS sürümünü lise öğrencisi iken gördüğümü hatırlıyorum (yaşımı ele verdim, değil mi? 1983 yılıydı.)

Deneyimli bir yazılımcı için bunların hiçbiri sürpriz değildir. Ürününüzün ilk sürümünü yazarsınız. Birkaç kişi kullanır: Programınızı severler belki ama eksik olan birçok özellik vardır, performans problemleri vardır. Her neyse, bir yılın ardından sürüm 2.0 hazırdır. Herkes 2.0, 3.0, 4.0 içinde hangi özelliklerin olacağını tartışır, çünkü yapılması gereken birçok önemli iş vardır. Excel günlerimden yapmamız gereken ne kadar çok “yapılması gereken” iş olduğunu hatırlıyorum. Pivot tabloları. Üç boyutlu tablolar. VBA veri erişimi. Yeni sürümü çıkardığınızda, hazır beklemekte olan kullanıcılarınız yeni sürümü almak için birbirlerini ezerler. Windows 3.1’i hatırlıyor musunuz? Kesinlikle uzun dosya isimlerine, bellek koruma sistemine, tak ve çalıştır özelliğine ve şimdi olazsa olmaz saydığımız diğer milyonlarca önemli özelliğe ihtiyacı vardı, fakat yeterli zaman yoktu ve tüm bu özellikler Windows 95’i beklemek zorunda kaldı.

Ancak tüm bunlar ilk on yıl için geçerlidir. Daha sonra kimse gerek duyduğu tek bir yeni özellikten bahsetmez. Excel 2000 veya Windows 2000’de ihtiyaç duyduğunuz fakat yapılmamış bir özelliği var mı? Office ekibindeki eski arkadaşlarıma saygıda kusu etmek istemem ama 1995’den bu yana Office ürünlerine eklenen tek bir yararlı yeni özellik olmadığını düşünmeden edemiyorum. Bu süre içinde eski- ataş ve otomatik-belge-sıkıştırma gibi eklenen birçok “özellik” sadece rahatsızlık vermekte, ve O’Reilly de bu özelliklerin nasıl kapatılacağınız anlatarak iyi para kazanmaktadır.

O halde iyi program yazımı uzun süre alır fakat program gelişimini tamamladığında herşey tamamdır. Elbette yeni gelir elde etmek üzere her bir veya iki yılda bir yeni bir sürüm çıkarabilirsiniz fakat kullanıcılar sonunda “bozuk olmayan bir şeyin tamirine ne gerek var,” diye sormaya başlarlar.

picture-fruit:

On-yıl kuralının iyi anlaşılmaması çok hatalı iş kararlarının verilmesine neden olur.

1 numaralı hata. Bir an önce büyüyelim sendromu. Bu İnternet balonu tarafından yaratılan bu safsata başka yerlerde yeterince çürütüldüğü için burada üzerinde durmayacağım. Ancak bu konuda önemli bir gözlem, amacı (kedi-köpek maması satmak değil de) yazılım geliştirmek olan nokta-kom firmalarının ürünlerini iyi bir düzeye çıkaracak zaman bulamamış olmalarıdır. Benim en favori örneğim desktop.com’dur. Bu firma eğer üzerinde 10 yıl çalışmış olsa idi gerçekten iyi bir yazılım ortaya çıkabilirdi. Fakat yap-sat yaklaşımı, gereğinden fazla personel ve gereksiz firma harcamaları, her on dakikada bir sermaye bulunması gereği, 10 yıl boyunca yazılım geliştirilmesini imkansiz hale getirdi. Bütün yazılımlar gibi bunun da 1.0 sürümü berbattı ve kimse kullanmayı düşünmüyordu. Fakat, kimbilir, belki desktop.com’un 8.0 sürümü harika bir program olabilirdi. Bunu asla öğrenemeyeceğiz.

Hata 2. Fazla reklam sendromu. 1.0 sürümünü çıkardığınızda pek de fazla reklam yapmamanız faydalı olabilir. Bütün yenilikleri izleyen ilk kulanıcıların onu keşfetmelerini bekleyin. Eğer çok büyük beklentiler oluşturacak şekilde pazarlarsanız, kullanıcılar gerçekte ne yapılmış olduğunu gördüklerinde hayal kırıklığına uğrarlar. Marimba ve Groove gibi desktop.com’da buna iyi bir örnektir: bu programlar ilk günden itibaren çok yüksek beklentiler ile piyasaya çıktı ve kullanıcılar programın özelliklerini görmek üzere 1.0 sürümünü dikkatle incelediler. Fakat tüm diğer 1.0 sürümlerinde olduğu gibi program ancak çimlerin sararmasını seyretmek kadar heyecan verici idi. Şu anda Marimba’ya 1996 yılından bu yana hiç bakmamış milyonlarca kullanıcı var, ve bu kullanıcılar hala bu programın 4 ay içinde apar topar bir araya getirilmiş, uyduruk Java apletlerini indiren bir liste kutusu olduğunu düşünüyorlar.

1.0 sürümünün sessizce ilan edilmesi, daha az satış ile karlılığa erişebilmeniz gerektiği anlamına gelir. Bu da maliyetleri düşük tutma ve daha az personel ile idare etme gereği anlamına gelir. Yazılımınızı geliştirmeye küçük bir ekiple başlamak aslında çok iyi bir fikirdir. Başlangıçta gücünüz sadece bir programcıya yetiyorsa, yazılımınızın yapısının tutarlı ve akılcı olma olasılığı, yüzlerce programcının birbiriyle çelişen fikirlerini içeren ve silbaştan yazılması gerekecek (kaynak kodunu atıp yeniden yazılması gerektiğini savunanlara göre, Netscape gibi) bir bulamaça kıyasla daha yüksektir.

Hata 3. İnternet zamanı’na inanmak. 1996 yılında New York Times ilk defa Netscape sürümlerinin kullanıcılara, Microsoft gibi firmaların geleneksel 2 yıllık güncelleme periyodu yerine, her altı ayda bir sunulduğunu fark etti. Bu gelişme “işlerin daha hızlı yürüdüğü” bir “İnternet zamanı” olduğu efsanesinin doğmasına neden oldu. Olsa iyi olurdu da gerçek bu değildi. Yazılım daha hızlı üretilmiyordu, sadece daha sık aralıklarla sunuluyordu. Yeni bir yazılım ürününün ilk aşamalarında o kadar çok yeni özellik vardır ki her altı ayda bir sürüm çıkarmanıza rağmen kullanıcıların mutlaka sahip olmaları gereken tonlarca özellik yapılmayı bekler. Bu özellikleri de yaparsınız. Bu sizin eskiye oranla daha hızlı yazılım geliştirdiğiniz anlamına gelmez. (Internet Explorer ekibine burada ayrıcalık tanımak isterim. IE’nin 3.0 ve 4.0 sürümleri arasında endüstri standartlarının on kat üzerinde bir hızla yazılım geliştirdiler. Bu hızın internet ile hiçbir ilgisi yoktu, sadece Microsoft firmasında 15 yıl boyunca ticari yazılım üretme deneyimlerinden yararlanan fevkalade donanımlı cenk urbalarını kuşanmış bir ekibe sahiptiler).

Hata 4. Yazılım tamamlandığında güncelleştirme gelirlerinin kesilmesi. Bir parça endüstri tarihi: İlk zamanlarda (1980’in sonları) PC endüstrisi o kadar hızlı gelişiyorduki hemen hemen tüm yazılımlar ilk kez kullananlara satılıyordu. Microsoft genellikle 500$ değerindeki bir ürününün güncellemesi için 30$ fiyat veriyordu. Bu durum, yeni kullanıcıların bitmekte olduğu ve düşük fiyatı nedeniyle çok miktarda güncelleme kopyalarının satıldığı farkedilinceye kadar sürdü. Ve nihayetinde bugün bulunduğumuz noktaya, yani satışların büyük bir çoğunluğunu oluşturan güncelleme ürün fiyatlarının, ürünün tam sürüm bedelinin %50-%60’ı arasında değiştiği duruma geldik Sorunlar, bir sonraki sürümünüze eklenecek yeni özellik bulamadğınızda başlar: Ataş eklersiniz, daha sonra ataşı kaldırırsınız, ve her seferinde kullanıcıya para ödetmeye çalışırsınız, ama kullancılar da bunu yutmazlar. Bu noktada baştan sadece bir yıllık lisans satmak, ve bu sayede kullanıcılarınızı ürününüze abone edip, yeni özellik eklenmese dahi paralarını alma yolunu seçmediğinize pişman olursunuz. Bu iyi bir muhasebe hilesidir: Bir yazılım paketini 100$’a satarsanız, Borsadaki değeri 100$ olur. Fakat bir yıllık lisansı 30$’a satarsanız, sonraki yıllarda da 30$’lık bir geliri garantilerseniz, bu on yıllık hasılanın değeri 200$ olur. Tada! Hisse senedi fiyatı ikiye katlanır! (Ne tesadüf ki, SAS yazılım ödemelerini bu şekilde alıyor. Her yıl %97 oranında yenileme satışı yapıyorlar.)

Microsoft’unki gibi paket yazılımlar için sorun, müşterilerin bunu yutmamasıdır. Microsoft, 90’ların başından bu yana müşterilerine abonelik planlarını kabul ettirmeye çabalıyor, fakat her seferinde çok güçlü bir müşteri direnci ile karşılaşıyor. Kullanıcılar satın aldıkları yazılıma “sahip” oldukları, ve yeni bir özellik istemedikleri sürece güncelleme yapmaları gerekmediği fikrine alıştıklarında, bu durum özellikleri tamamlanmış bir ürünü satmak isteyen firmalara çok büyük zorluklar çıkarır.

Hata 5. “Hazır olduğunda yayımlarız” sendromu. Lafı buradan açılmışken ... Mozilla’da ne halt yiyorlar Allah aşkına? Onlarla bir yıl önce epey bir dalga geçmiştim, çünkü aradan üç yıl geçmesine rağmen Allah’ın cezası şey hala piyasaya sürülmemişti. Web sitelerinde sık sık geçerliliğini yitiren bir tabloya göre 2001 yılının son çeyreğinde yayımlayacaklarını bildiriyorlar (ç.n: Bu yazı 2001 yılının ocak ayında kaleme alındı). Tahminlerini dayandıracakları takvim benzeri bir şeye sahip olmadıkları için neden böyle düşündüklerini anlayamıyorum. A evet! İnternet Zamanı Dünyası’nda yazılım geliştirme bu olmalı.

Konudan uzaklaşıyorum galiba. Evet, yazılımın yazılması 10 yıl alır, ve 10 yıl boyunca piyasaya hiçbir sürüm çıkarmayan bir şirketin asla hayatta kalma şansı yoktur. 10 yıl sonra elde edeceğiniz geliri bugün kırdırmaya kalkarsanız kocaman bir hiç elde edersiniz. Özellikle de beş yıldan sonraki tüm hasılanızı “artık değer” olarak küçümseyen, sahte, uyduruk bilanço tablolarına bakarak 100.000.000$ değer biçtikleri çorap kuklalarına yatırım yapmanın iyi bir fikir olduğuna kendilerini inandıran analistlerin olduğu bir dünyada.

Herneyse, 10 yıl boyunca iyi bir yazılım ortaya çıkarabilmek, bu on yılın en az 8 yılı boyunca müşterilerinizden yararlı yorumlar, rakiplerinizden kopyalayabileceğiniz güzel yenilikler almanız, ve 1.0 sürümünüzün istikbali olduğunu düşünerek size çalışmaya gelen insanlardan iyi fikirler almanız gerekir. Henüz tamamlanmamış erken sürümler çıkarmalısınız – fakat bu sürümleri aşırı reklamdan veya büyük tantanayla kupa finallerinde duyurmaktan kaçınmalısınız, çünkü ne kadar zeki olursanız olun ürününüz henüz yeteri kadar iyi değildir.

Hata 6.Çok sık güncelleme ( Corel sendromu). Başlangıçta, yeni özellikler eklerken ve müşteri portfoyünüz henüz çok geniş değilken, her 6 ayda bir sürüm çıkarabilirsiniz ve kullanıcılar yeni özelliklerden dolayı sizi çok sever. Bu şekilde dört veya beş sürüm çıkardıktan sonra yavaşlamanız gerekir, aksi halde halihazırdaki müşterileriniz güncelleme yapmaktan vazgeçer. Sürümleri atlarlar çünkü güncelleme maliyetlerinden kaçınmak isterler. Bir güncelleme atladıklarında kendilerini daima en yeni ve en mükemmel sürüme sahip olmaları gerekmediğine inandırırlar. Corel PhotoPaint 6.0 programını 5 yıl boyunca kullandım. Evet, biliyorum, bu sürüm “bir birim kayma” hatalarıyla doluydu ama tüm birim kayma hatalarını bildiğim için ekrandaki seçimlerimi taşırken sürekli olarak olması gereken yerden bir piksel sağa kaydırarak bu hatayı dengeledim.

Roosevelt Memorial in Washington

On yıllık bir plan yapın. On yıl boyunca hayatta kalacağınızdan emin olun, çünkü yılda bir milyar dolar hasıla getiren tüm yazılım ürünlerinin hazırlanması bu kadar sürmüştür. İlk sürümünüze çok takılmayın ve ilk sürümünüzle piyasada büyük bir yer alacağınızı aklınızdan bile geçirmeyin. İyi yazılım şarap gibidir, olgunlaşması zaman alır.

 


Bu makalenin orijinali İngilizce olarak Good Software Takes Ten Years. Get Used To It başlığıyla yayımlanmıştır. 
 
01 Eylül 2008 Pazartesi  @ 12:58:18
 
     
     
 
Joel Testi: Daha iyi kod için 12 adım
 
Joel Spolsky
Fikret Ulug tarafından çevrilmiştir
Ozgur Aydin Yuksel tarafından düzenlenmiştir
9. 8. 2000


SEMA adını hiç duydunuzmu?. SEMA bir yazılım ekibinin ne kadar iyi olduğunu ölçmeye yarayan nispeten anlaşılması zor bir sistemdir. Ancak durun! Hemen bu linke geçmeyin! Burada yazılı olanları anlamanız sizin yaklaşık 6 yılınızı alır. Bu nedenle, yazılım ekibinin kalitesini belirlemek üzere yüzde yüz doğruya yakın, çarçabuk hazırlanmış kendi testimi geliştirdim. Bu testin en büyük avantajı sadece 3 dakika sürmesi. Tasarruf edeceğiniz zamanda da tıp okumayı deneyebilirsiniz.





Joel Test


Kaynak kodu kontrol sistemi kullanıyor musunuz?
Tek bir adımda sistemi oluşturabiliyor musunuz?
Sistem oluşturma (build) işlemi günlük yapılıyor mu?
Hata veritabanınız var mı?
Yeni bir kod yazmadan önce hataları düzeltiyor musunuz?
Güncel iş takviminiz var mı? 
İş tanımlamalarınız var mı?
Programcıların sakin bir çalışma ortamı var mı?
Paranın alabileceği en iyi araçları kullanıyor musunuz?
Test elemanınız var mı?
İş görüşmelerinde adaylara kod yazdırılıyor mu?
Koridor kullanım testi yapıyor musunuz?

Joel Test’in en güzel tarafı her bir soruya kısa Evet veya Hayır yanıtı verilebiliyor olmasıdır. Günlük yazılan satır sayısı veya her bir bükülme noktası için ortalama hata sayısını bilmeniz gerekmez. Ekibinize her bir “evet” yanıtı için 1 puan verin. Ancak bu testi nükleer santral yazılımınızın emniyetli olup olmadığından emin olmak için kullanmamanız gerekir.

12 puan mükemmel, 11 idare edilebilir, fakat 10 veya daha düşük ise ciddi sorunlarınız var demektir. İşin doğrusu birçok yazılım şirketi 2 veya 3 puan ile çalışmakta ve bu şirketlerin ciddi yardıma ihtiyacı var. Çünkü Microsoft gibi firmalar her zaman12 puan ile çalışmakta.

Şüphesiz bunların dışında da başarı veya başarısızlığı belirleyen faktörler var: Diyelim ki mükemmel bir yazılım ekibiniz var ve hiç kimsenin istemediği bir ürün üzerinde çalışıyorlar. Sonuçta kimse o ürünü istemeyecek. Veya yukarıda sözü geçen özelliklere sahip olmaksızın dünyayı değiştiren inanılmaz yazılımlar yaratan silahşörler ekibi düşünülebilir. Kurallarımız bunların dışındaki tüm durumlarda geçerlidir, yani, bu 12 maddeyi karşılıyorsanız istikrarlı biçimde ürün çıkaran disiplinli bir ekibiniz var demektir.

1. Kaynak kodu kontrol sistemi kullanıyor musunuz?

Ticari kaynak kodu kontrol paketlerini kullandım, ücretsiz olan CVS’yi kullandım, CVS’nin gayet iyi olduğunu rahatlıkla söyleyebilirim. Eğer kaynak kodu kontrolunuz yoksa, programcıları birarada çalışmaya zorluyorsunuz demektir. Programcıların diğerlerinin ne yaptıklarını bilme şansı yoktur. Hatalar kolaylıkla geri alınamazlar. Kaynak kodu kontrolunun bir diğer güzel özelliği, kaynak kodlarının her programcının hard diskinde kaydedilmiş olmasıdır—Bu güne kadar kaynak kodu kontrol sistemi kullanan bir projede büyük miktarda kodun kaybolduğunu hiç duymadım.

2. Tek bir adımda sistemi oluşturabiliyor musunuz?

Bununla kastettiğim şu: Kaynak kodlarının son halinden bir sistem oluşturmak kaç adım gerektirmekte? İyi ekiplerde, tüm kaynak kod ayrılışlarını en baştan oluşturan tek bir betik (script) vardır, her bir kod satırı yeniden oluşturulur, EXE’ler yaratılır, tüm değişik sürümler, diller, ve #ifdef kombinasyonları için kuruluş paketi ve son ürün (CDROM oluşturulması, web sitesi güncellenmesi gibi) yaratılır.

Eğer bu işlem birden fazla adımı içeriyor ise, hataya açık demektir. Üstelik ürün dağıtımı aşamasına gelindiğinde “en son” hataların düzeltilmesi, son EXE’lerin yaratılması çevriminin çok hızlı yürümesi gerekir. Eğer kodun derlenmesi, kuruluş oluşturucunun çalıştırılması gibi işlemler için 20 adım gerekiyorsa, zamana karşı çalışılan bu çok sıkışık ortamda deli olmanız işten değildir ve çok aptalca hatalar mutlaka yapılır.

Bu yüzden çalıştığım son şirket WISE’den InstallShield yazılımına geçiş yaptı: Çalışma ortamımız, kuruluş işleminin, NT’de otomatik olarak gece çalışmasını gerektiriyordu ancak WISE bunu sağlayamadı, bu yüzden bu ürünü kullanmaktan vazgeçtik.(İyi niyetli WISE ekibi son sürümlerinin gece sistem oluşturulmasını sağlayacağı konusunda bana garanti verdiler)

3. Sistem oluşturma işlemi günlük yapılıyor mu?

Kaynak kodu kontrol sistemi kullanılırken, bazen bir programcı kazara oluşturulan sistemi bozan bir değişiklik yapar. Örneğin, yeni bir dosya eklenir, kendi bilgisayarında herşey doğru çalışır, ancak bu dosyayı kod deposuna aktarmayı unutur. Bilgisayarını kapatıp olan bitenden habersiz evine gider, mutludur. Ancak diğer tüm programcıların çalışması durur ve sonuçta diğer herkes evine gider ama kimse sevgili programcımız kadar mutlu değildir.

Sistemin oluşturulmasının bozulması çok kötü (ve çok yaygın) bir durumdur. Bu nedenle günlük sistem oluşturulmasını zorunlu hale getirir. Bu sayede sistemde oluşan hiçbir bozulma gözden kaçmaz. Büyük ekiplerde, bozulmaların hemen duzeltilmesini garanti etmenin en iyi yolu öğle arasında günlük sistem oluşturulmasının yapılmasıdır. Herkes yemekten önce olabildiğince çok değişikliği kaydeder. Geri döndüklerinde sistem oluşturma işlemi tamamlanmıştır. Eğer herşey yolunda ise ne ala! Herkes kaynak kodlarının son haliyle devam eder. Eğer sorun var ise , düzeltme işlemi yapılır, fakat bu sırada herkes bozulma olmayan daha önce oluşturulmuş kaynak kodları üzerinde çalışmaya devam edebilir.

Excel ekibinde sistem oluşturulmasının hatalı olmasına neden olan kişiye ceza olarak, bir sonraki hataya kadar sistem oluşturma işlemleriyle ilgilenme zorunluluğu getiriyorduk. Bu yanlış yapmamak için iyi bir motivasyon olmasının yanısıra, herekese işlerin nasıl yürüdüğünü öğretmenin iyi bir yoluydu da.

Günlük sistem oluşturma ile ilgili daha ayrıntılı olarak Günlük Sistem Oluşturma Sizin Arkadaşınızdır isimli makalemi okuyabilirsiniz

4. Hata veri tabanınız var mı?

Ne derseniz deyin eğer tek başınıza bile kod yazıyorsanız, kod içinde oluşan bilinen tüm hataları listeleyen bir veri tabanı yok ise kod kalitesi düşer. Birçok programcı hataları hafızalarında tutabileceklerini düşünür. Ance bu çok saçmadır. 2 veya daha fazla hatayı aynı zamanda hatırlayamam ve bir sonraki gün, sistemin dağıtımı aşamasında unutulur. Hataların mutlaka çok ciddi bir şekilde takip edilmesi gerekir.

Hata veritabanı çok basit veya çok karmaşık olabilir. Minimum veri tabanı her bir hata için aşağıdaki bilgileri içermelidir:



Hatanın yeniden yaratılması için gereken tüm adımlar

Beklenen davranış

Gözlenen (hatalı) davranış

Sorumlu kişi

Düzeltilip düzeltilmediği

Eğer hata takip yazılımının karmaşık olması hata veri tabanı oluşturmanıza engel oluyorsa, yukarıda belirlenen önemli alanları içeren 5 sütunlu bir tablo oluşturun ve kullanmaya hemen başlayın.

Hata takip sistemi konusunda daha detaylı bilgi için Sorunsuz Hata Takibi yazımı okuyabilirsiniz.

5. Yeni bir kod yazmadan önce hataları düzeltiyor musunuz?

Windows için Microsoft Word’ün ilk sürümü “ölüm marşı” projesi olarak adlandırılmıştı. Sürekli gecikmeye uğradı ve hiçbir zaman bitirilemedi. Tüm ekip anlamsız uzun saatler boyunca çalışıyordu fakat proje tekrar tekrar gecikiyordu, herkesin üzerinde inanılmaz bir stres oluşmuştu. Lanet şey en sonunda piyasaya sürüldüğünde bir yıl gecikmiş durumda idi. Microsoft tüm ekibi Cancun’a tatile gönderdi ve ciddi bir vicdan muhasebesine girişti.

Farkedilen en önemli şey proje yöneticilerinin “takvim” konusunda çok ısrarcı olmaları nedeniyle programcıların kodlama işlemini alelacele yapmaları, hata düzeltme aşaması programın bir parçası olmadığı için de yazılan kodun çok kötü olmasıydı. Hata sayısını azaltma konusunda hiçbir çaba gösterilmemişti. Tam tersine uygulanan yöntem hata sayısının artmasına neden olmuştu. Bir yazı karakterinin yüksekliğini ölçmek için kod yazması gereken programcının kısaca “return 12” yazdığı ve bunun her durumda doğru çalışmadığını görmek için hata raporunun gelmesini beklediği rivayet edilir. Takvim, hatalara dönüşmeyi bekleyen özellikler listesinden ibaret hale gelmişti. Çalışma sonu özeleştiri raporlarında bu durum “sonsuz hatalar metodu” olarak adlandırıldı.

Problemi düzeltmek için Microsoft tüm birimlerinde geçerli olacak şekilde “sıfır hata metodunu” adapte etti. Firma içindeki programcıların çoğu, bu duruma kıkır kıkır güldü. Yönetimin, tepeden gelen bir emirle tüm hataları sıfırlamak istediği sanıldı. Aslında “sıfır hata”, herhangi bir anda yeni bir kod yazmadan önce en yüksek önceliğin hataların düzeltilmesine verilmesi anlamına geliyordu. Neden böyle olduğu şöyle açıklanabilir.

Genellikle, bir hatayı düzeltmeden önce ne kadar uzun süre beklenirse hatanın düzeltilme maliyeti(zaman ve para olarak) o kadar yüksek olur.

Örneğin, derleyicinin yakaladığı yazım veya söz dizimi hatası yapıldığında, bu hatanın düzeltilmesi çok basit bir işlemdir.

Kod içinde ilk çalıştırmada ortaya çıkan bir hata var ise, bu hatayı hemen hemen hiç zaman harcamadan düzeltebilirsiniz, çünkü kodun tamamı aklınızdadır.

Eğer birkaç gün önce yazmış olduğunuz bir kodda hata bulursanız, hatayı yakalamanız biraz zaman alabilir, fakat yazdığınız kodu tekrar okuduğunuzda herşeyi tekrar hatırlarsınız ve hatayı kabul edilebilir bir sürede düzeltebilirsiniz.

Fakat, birkaç ay önce yazmış olduğunuz kod içinde bir hata bulursanız, kod hakkında muhtemelen birçok ayrıntıyı unutmuş olduğunuz için hatanın düzeltilmesi çok daha zor olacaktır. Bu esnada bir başkasının kodunu düzeltiyor olabilirsiniz ve bu kodu yazan programcı Marmaris’te tatilde olabilir. Bu durumda hatanın düzeltilmesi bilimsel bir keşif gibidir: Ağır, metodlu ve büyük bir titizlik içinde çalışmanız gerekir ve tedaviyi bulmanızın ne kadar süre alacağı konusunda tahmin yürütmeniz çok zordur.

Ve eğer dağıtımı yeni yapılmış bir kod içinde hata bulduysanız, bu hatanın düzeltilmesi için inanılmaz miktarlarda harcama yapmanız gerekecektir.

Tüm bu nedenler hataların derhal düzeltilmesini gerekli kılar: çünkü daha az zaman alır. Bir diğer neden ise, yeni bir kodun yazılmasının alacağı sürenin, var olan bir hatanın düzeltilmesinin alacağı süreye göre daha kolay tahmin edilmesi ile ilgilidir. Örneğin, eğer size bir listeyi sıralamak için ne kadar süre gerektiğini sorarsam bana doğruya yakın bir tahminde bulunabilirsiniz. Ama eğer Internet tarayıcının 5.5 sürümü yüklendiğinde programınızın çalışmama nedenini tahmin etmenizi istersem, hiçbir tahminde bulunamayabilirsiniz, çünkü tanım gereği hataya neyin sebep olduğunu bilmiyorsunuz. Hatanın bulunması 3 günde sürebilir 2 dakikada sürebilir.

Tüm bunlar, düzeltilmek üzere bekleyen birçok hatayı içeren bir çalışma takviminiz var ise, bu takvim güvenilir değil anlamına gelir. Ama eğer tüm bilinen hataları düzeltti iseniz, ve geriye sadece yeni kodların yazılması kaldı ise, çalışma takviminiz çok daha gerçeğe yakın olacaktır.

Hata sayısının sıfırda tutulmasının diğer büyük yararı ise rekabet avantajı sağlamasıdır. Bazı programcılar bunu ürünün her an sürüme hazır halde bulundurulması olarak düşünürler. Eğer rakip firma müşterileriniz çalan yeni bir özellik geliştirdi ise, sadece bu özelliği ekleyerek, birikmiş birçok hatayı düzeltmeye gerek kalmaksızın hemen yeni ürününüzü piyasaya sürebilirsiniz.

6. Güncel iş takviminiz var mı?

Eğer geliştirdiğiniz kod işiniz açısından önemli ise, kodların yazımının ne zaman tamamlanacağının işiniz açısından önemli olması için birçok nedeniniz var demektir. Programcılar tahmin yürütme konusundaki aksilikleri ile meşhurdur. Satıcı personele “tamamlandığında bitecek” diye çıkışırlar.

Ne yazık ki bu işin tamamlanmasını garanti etmez. Ticaretin gerektirdiği birçok planlama kararına ihtiyaç vardır: Demolar, ticari gösterimler, reklamlar bunlardan sadece bazılarıdır. Bunu yerine getirmenin tek yolu bir takvimin olması ve bu takvimin güncel tutulmasıdır.

İş takvimi olmasının bir diğer önemli yararı, hangi özelliklerin yerine getirileceği konusunda karar vermeye zorlamasıdır. Bu kararın ardından gereksiz özelliklerin (kapsam genişlemesi) sisteme eklenmesi yerine en az önemdeki özelliklerin seçilerek kapsam dışına alınma zorunluluğunu getirir.

İş planının güncel tutulması işleminin zor olması gerekmez. Çok yararlı iş planlarının nasıl yapılacağını görmek için Sorunsuz Yazılım İş Planları makalemi okuyabilirsiniz.

7. Belirtimleriniz var mı?

Belirtim (spec) yazma diş ipi kullanmaya benzer: herkes iyi bir şey olduğu konusunda görüş birliğindedir, ancak kimse kullanmaz.

Bunun neden böyle olduğunu bilmiyorum, fakat bu durum muhtemelen programcıların döküman yazmaktan nefret etmelerinden kaynaklanmaktadır. Sonuçta, problemi çözecek ekip tamamen programcılardan oluşuyorsa, açıklamalarını döküman yerine kaynak kodu içinde ifade etmeyi tercih ederler. Programcı önce belirtim yazmak yerine hemen kodlamaya başlar.

Tasarım aşamasında, bir problem belirlendiğinde, tasarım notlarından birkaç satır değiştirilerek problem çözülür. Kod yazıldıktan sonra, problemlerin düzeltilme maliyeti hem zaman hem de duygusal olarak (insanlar yazdıkları kodu çöpe atmaktan hiç hoşlanmazlar) çok yüksektir. Bu nedenle, gerçekte problemlerin çözülmesine karşı direnç vardır. Belirtim kullanılmadan yazılan yazılımlar genellikle kötü tasarlanmış duruma düşerler ve iş planı kontroldan çıkar. Netscape programında olan durum budur. İlk dört sürüm öylesine karmaşık bir hal aldı ki sonunda yöneticileri aptalca bir kararla kodu tamamen çöpe atarak yeniden yazmaya karar verdiler. Daha sonra aynı hatayı Mozilla ile, alfa aşamasına gelmesi birkaç yıl alan bir çalışma ile kontroldan çıkmış bir canavar yaratarak tekrar ettiler.

Benim bu konudaki basit teorim, programcıları yazma konusunda sıkıştırılmış bir kursa göndererek onların yazmaya karşı daha az dirençli olmalarını sağlayarak problemin çözülebileceğidir. Bir diğer çözüm yazılı belirtimler üreten akıllı program yöneticileri tutmaktır. Her iki durumdada mutlaka uygulanması gereken basit kural “belirtim olmadan kod yazılmamasıdır”.

Belirtim yazmayı ayrıntıları ile öğrenmek için dört kısımdan oluşan makalemi okuyabilirsiniz.

8. Programcıların sakin bir çalışma ortamı varmı?

Bilgisayar çalışanlarına sessiz ve kendi başlarına çalışabilecekleri bir ortamı sağlayarak verimliliğin artırılabileceği konusunda yazılmış çok yazı vardır. Klasik yazılım yönetimi kitabı olan Peopleware’de bu verimlilik artışı konusu ayrıntılı olarak yer almaktadır.

Hepimiz bilgisayar çalışanlarının çalışma ortamından tamamen bağımsız işlerine konsantre olduklarında çok iyi çalıştıklarını biliriz. Zamanı unuturlar ve iyi bir konsantrasyon ile mükemmel işler başarırlar.Bu zamanlar onların en verimli oldukları zamanlardır. Yazarlar, programcılar, bilim adamlar ve hatta basketbol oyuncuları aynı süreci yaşar.

Ancak sorun şu ki, “havaya girmek” çok kolay değildir. Ölçmek gerekirse, maksimum verimle çalışmaya başlamak için yaklaşık 15 dakikalık bir süre gerekmektedir. Bazan, çok yorgun iseniz veya o gün için verimli birçok çalışma yaptı iseniz, havaya giremezsiniz ve günün geri kalan kısmını internet’te gezinerek veya tetris oynayarak geçirirsiniz.

Bir diğer sorun ise konsantrasyonun çok kolay bozulabilmesidir. Gürültü, telefon, öğle yemeği için dışarıya çıkma, kahve almak için migrosa 5 dakika için gitme ve çalışma arkadaşları tarafından bölünme – özellikle çalışma arkadaşlarının araya girmesi – gibi nedenlerle konsantrasyon bozulur. Eğer bir çalışma arkadaşı sorusu ile sizi 1 dakika için meşgul ederse bu konsantrasyonunuzu öyle bozar ki,  tekrar verimli olarak çalışmaya dönüş yarım saat alabilir. Bu şekilde genel verimliliğiniz ciddi şekilde düşer. Eğer, kahvehane görünümlü nokta com şirketlerinin çok sevdiği gibi, pazarlama elemanlarının programcıların hemen yanı başında telefonda bağıra çağıra görüşmeler yaptığı bir ortamda iseniz verimliliğiniz bilgisayar çalışanlarının çalışmalarının kesintiye uğradığı ve konsantre olamadıkları oranda tehlikeye girer.

Özellikle programcılar için bu çok zor bir durumdur. Verimlilik, birçok küçük detayın kısa süreli bellekte aynı anda alınıp verilebilmesine bağlıdır. Herhangi bir araya girme bu küçük detayların kaybolmasına neden olur. Çalışmaya yeniden döndüğünüzde, bu detaylardan hiçbirini hatırlamazsınız (kullanmakta olduğunuz bölgesel değişkenler, veya bir arama algoritmasının uygulanmasına geçmek üzere olduğunuz aşama gibi). Tüm bu detayları hatırlamanız, eski verimli çalışma hızınıza erişmeniz içi bir sürü zaman kaybetmeniz gerekir.

İşte size basit bir hesap. Eğer bir programcının çalışmasını sadece bir dakika için dahi bölersek (ki veriler bu yönde) 15 dakikalık bir verimli çalışmayı yok ediyoruz demektir. Bu örnek için Can ile Pınar’ı birbirine komşu iki odacıkta çalışan iki programcı olduğunu varsayalım. Can strcpy rutininin unicode sürümünün adını hatırlamamaktadır. Açıp bakabilir ve bu sadece 30 saniyesini alır, veya Pınar’a sorabilir, bu da sadece 15 saniyesini alır. Pınar hemen bitişiğinde olduğu için ona sorar. Pınar’ın dikkati dağılır ve Can’a 15 saniye kazandırmak için verimli çalışmasından 15 dakika kaybeder.

Şimdi bu iki programcının farklı odalarda olduğunu varsayalım. Can rutinin adını hatırlamadığında açıp bakabilir ve hala bu işlem onun sadece 30 saniyesini alır veya pınara sorabilir ki bu sefer ayağa kalkıp yürümeyi gerektirir (programcıların fiziksel sağlık durumları gözönüne alındığında bu pek de kolay bir faaliyet değildir!) ve 45 saniyesini alır. Can dökümanlara bakmaya karar verir. Sonuçta Can verimliliğinden 30 saniye kaybeder fakat Pınar’ı 15 dakikalık kayıptan kurtarmış oluruz.

9. Paranın alabileceği en iyi araçları kullanıyor musunuz?

Eğer derleme  işleminiz birkaç saniyeden fazla sürüyorsa, en yeni ve en hızlı bilgisayarı almanız size zamandan tasarruf sağlar. Eğer derleme 15 saniye sürerse, programcılar sıkılır ve derleyici çalışırken Soğan’ı okumaya başlarlar ki bu da saatler sürecek verimlilik kaybına neden olur.

GKA (Grafik kullanıcı arayüzü) kodlarında bir ekran ile yanlış ayıklama işlemi imkansız olmasa da çok sıkıntılıdır. Eğer GKA kodu yazıyorsanız iki ekran işleri çok kolaylaştırır.

Birçok programcı eninde sonunda araç çubukları veya simgeler için ikil eşlemli (bitmapped) resimler üzerinde çalışmak zorunda kalır. İkil eşlemli resimleri değiştirmek için Microsoft Paint programının kullanılması kötü bir şaka gibidir, ancak birçok programcı bunu yapmak zorunda kalır.

Son işimde, sistem yöneticisi  bana hard diski gereğinden fazla kullandığımı (dikkat! 220MB) bildiren otomatik mesajlar göndermeye başladı. Hard disk fiyatları gözönüne alındığında kapladığım alanın maliyetinin kullandığım tuvalet kağıdının maliyetinden çok daha az olduğunu belirttim. 10 dakikalik temizlik çalışması bile verimliliğimde önemli bir kayıp olurdu.

Büyük hedefler için çalışan ekipler programcılarına eziyet etmezler. Yetersiz araçların neden olacağı çok küçük sıkıntılar bile programcıları mutsuz ve hırçın yapar. Hırçın programcı verimsiz programcıdır.

Son olarak, programcılar onlara verilecek en son ve en havalı bir araç ile kolayca tav olurlar. Bu onların sizin için çalışmasını sağlamak üzere diğer firmalar ile rekabet edecek yüksek maaş vermekten çok daha ucuz bir yoldur.

10. Test elemanınız var mı?

Eğer ekibinizde herbir iki veya üç programcı için bir test elemanı yoksa, hatalı ürünleri piyasaya sürüyorsunuzdur veya saat ücreti 30 USD olan test elemanları yerine saat ücreti 100 USD olan programcıları kullanarak paranızı boşa harcıyorsunuz demektir. Test personelinden tasarruf etmek çok berbat bir ekonomik hesaptır ve ne yazık ki giderek daha fazla kişinin bunu farketmiyor olması beni çok şaşırtıyor.

Bu konu üzerine yazdığım, Test elemanına sahip olmamanızın en önemli beş (yanlış) nedeni isimli makalemi okuyun.

11. İş görüşmelerinde adaylara kod yazdırılıyor mu?

Size sihirli numaralar göstermeden bir sihirbazı işe alırmısınız? Tabi ki hayır.

Düğün partisi için yiyeceklerini tatmadan bir yemek firması tutar mısınız? Çok az bir olasılık. (Sözkonusu olan Macide teyze ise, onun meşhur kekinden yapmasına izin vermediğiniz için sizden ömür boyu nefret edebilir).

Ancak, birçok yerde, programcılar etkileyici resume’leri görüşmeyi yapanlar tarafından çok beğenildiği için işe alınmaktadır. Veya “CreateDialog() ile DialogBox() arasındaki fark nedir” gibi, dökümana bakılarak kolayca yanıtlanabilecek saçma sorular sorulmaktadır. Programcının programlama üzerine yüzlerce saçmalığı aklında tutmasının bir önemi yoktur, önemli olan nasıl kod yazdığıdır. Çok daha kötüsü ise  “AHA” tipi sorulardır: bu tip sorular yanıtı bilindiğinde çok basit ancak yanıtı bilmiyorsanız bulunması imkansız sorulardır.

Lütfen bütün bunları yapmaktan vazgeçin. Görüşme süresince ne istiyorsanız yapın, fakat adayın bir miktar kod yazmasını sağlayın. Daha fazla öneri için Görüşme için gerilla taktikleri başlıklı yazımı okuyun.

12. Koridor kullanım testi yapıyor musunuz?

Koridor kullanım testi, koridordan geçen ilk kişiyi yakalayıp yazmış olduğunuz kodu kullanmasını sağlamaktır. Bu işlemi beş kişide denerseniz, kodunuzun kullanım problemleri hakkında %95’e varan oranda bilgiye sahip olursunuz.

İyi arayüz tasarımı tahmin edildiği kadar zor değildir ve müşterinizin ürününüzü sevmesi ve satın alması açısından çok büyük önem taşır. Programcılar için kısa bir giriş olan, Arayüz tasarımı üzerine ücretsiz online kitabımı okuyabilirsiniz.

Arayüzlerle ilgili en önemli konu, programınızı bir miktar kullanıcıya (aslında beş veya altı kişi yeterlidir) gösterdiğinizde çabucak insanların zorlandıkları yeri farkedersiniz. Bunun nedeni için Jakob Nielsen’in makalesini okuyun. Arayüz tasarım becerileriniz yeterli olmasa dahi, kendinizi hiçbir maliyeti olmayan Koridor kullanım testini yapmaya zorlarsanız, programınızın arayüzü çok daha iyi hale gelir.

Joel Testini kullanmanın dört yolu

1.      Yazılım firmanızın seviyesini ölçün ve bana bildirin. Ben de dedikodusunu yapayım.

2.      Programlama ekibinin yöneticisi iseniz, bu kontrol listesini kullanarak ekibinizin mümkün olduğu kadar iyi çalıştığından emin olun. 12 puan almaya başladığınızda programcılarınızı kendi haline bırakın ve tüm zamanınızı pazarlama elemanlarının onları rahatsız etmesine engel olmaya adayın.

3.      Bir programlama işini almak konusunda karar aşamasında iseniz, müstakbel yöneticinize bu testin sonucunun ne olduğunu sorun. Eğer çok düşük ise, işleri düzeltmek için yetkiniz olduğundan emin olun. Aksi halde hayal kırıklığına uğrarsınız ve verimsiz çalışırsınız.

4.      Eğer bir programlama ekibinin değerini ölçmek üzere yerinde inceleme yapan bir yatırımcı iseniz veya yazılım firmanız bir diğer firma ile ortaklık yapacak ise, bu test sizin pratik tahminler yapabilmenizi sağlar.

Bu makalenin orijinali İngilizce olarak The Joel Test: 12 Steps to Better Code başlığıyla yayımlanmıştır

 
01 Eylül 2008 Pazartesi  @ 12:57:08