Yazılım Bir Tutku

Tecrübe ilimden üstündür !

Yazılımcı kimdir, Bir yazılımcıda hangi vasıflar bulunmalı ?

Tarih : 16.06.2010 12:55:29 Kategori : Güncel Hit : 5331

Merhaba arkadaşlar;

Bu makelemizde teknik konulardan ziyade hepimizin olmayı hedeflediği "Yazılımcı" kavramına değineceğim :)

Yazılımcı kimdir ?
Bir yazılımcıda hangi vasıflar bulunmalı ?
Nasıl yazılımcı olunur ?
vs....

Askerlik yapanlar bilir. Askeriyede çok meşhur bir söz vardır. "Asker yemez, asker uyumaz, asker yorulmaz, vs.." diye uzayıp giden bir söz.

Bazıları yazılımcı içinde aynı cümleleri sarfetsede; ben başarının sürekli çalışmaktan ziyade doğru bir çizgide ideal süre çalışmakta saklı olduğuna inanıyorum. Yani sinemaya gidip bir film izlemeyi bazıları bir yazılımcıya çok görüyor, yada bir cafede oturup arkadaşları ile güzel bir sohbet eşliğinde nargile keyfini.
Çözüm gözünü açıp uyuyana kadar sürekli çalışmakta saklı değil. Çözüm gözünü açıp uyuyana kadar; molalar vererek, doğru bir müfredatta çalışmakta :)

Açıkçası iyimser olup arkadaşlar günlük birkaç saatlik çalışmayla iyi bir yazılımcı olunabilir demeyi isterdim. Fakat maalesef birkaç saatlik bir çalışma hiçbirşekilde yeterli olmayacaktır. Elbette bu kısa süreli çalışmalarında bir katkısı olacaktır. Fakat kişi sadece yazılımcı olabildiğini zanneder bu çalışma ile. Oysaki özünde halen bir yazılımcı adayıdır.Bu cümlelerimde yoğun bir çalışma temposunun gerekliliği sanırım ortaya çıkmıştır.

Şimdi gelelim bir yazılımcıda olması gereken bir kaç küçük hatta mini minnacık vasıflara :)

1 - İyi bir yazılımcı herşeyden önce çabuk kavrayabilme yetisine sahip olmalı .

Albert Einstein olun sonucu çıkarılması bu cümlemden. Bu sözümden dolayı kimseler kızmasın bana fakat yazılım için zeka şart..! Daha doğrusu matematiği seven bir zeka şart. Cümleyi sadece zeka şart diye yalın bir şekilde bırakırsam zekanın sadece matematikle yada yazılımla ilişkili birşeymiş gibi bir cümle kurduğum sanılacak ve bu cümlem için bazıları saldırıya geçecek :)
Yani hesap kitap işlerini seveceğiz arkadaşlar. Hesap kitap işlerinden kastımsa havuz problemleri değil tabi :)  yada parabol, parabol parçasının uzunluğu ve alanını veren formülü bilmek değil. Matematiksel düşünceye yatkın olabilmekten bahsediyorum [ tabi bazı durumlarda bunları bilmekte şart ama şimdilik gözümüz korkmasın diye bu bizim sırrımız olsun :) ]

Bu işin teknik kısmıydı.

2. Oldukça meraklı bir çocuk gibi olabilmeli :)

Öncelikle çocukluk yada yetişkinlik kısmına geçmeden yaşımız ne olursa olsun merak eden biri olabilmeli iyi bir yazılımcı. Çok keyifci bi yaşam yazılımcının doğası uymuyor sanırım. Peki neden meraklı bir çocuk gibi olmalı sorusunun cevabı ise çok basit.
Hedeflediği noktaya göre öğrendikleri hiç bir zaman yeterli olmamalı. Bir çocuğu düşünü. Sürekli olarak bilen birilerine "bu ne ?", "bu ne ?" diye sorar durur. Bu şekildede hem meraklılığını ortaya koyar hemde öğrenme sürecini hızlandırır. Çocuklarda bitmek bilmeyen bir öğrenme arzusu vardır. Hep daha fazla şeyler öğrenmek, hep daha fazla biliyor olabilmek.

İşte iyi bir yazılımcıda ne kadar çok şey bilirse bilsin, kaç yaşında olursa olsun biraz önce portresini çizdiğimiz meraklı çocuk gibi "hep bune ?" , "bu nasıl olur acaba ?" ,  "buda olurmu ?" gibi böyle yüzlerce soruyu önce kendisine sonra çevresindeki bilir kişilere soruyor olması gerekir.


Bu işin merak kısmıydı.

3. İyi bir yazılımcı çok iyi bir araştırmacı olmalı.


Yazılım uygulamaları öylesine büyük bir deryaki herşeyi bilmek mümkün değil. Fakat neyi aradığını bilen ve nerede arayacağını bilen bir yapıya sahip olmalı iyi bir yazılımcı. Araştırmaktan sıkılmamalı, yorulmamalı ve hedefine ulaşmadan o yoldan vazgeçmemeli. Piri Reis gibi; Yazılım okyanusunda yeni şeyleri keşfedebilmeli ve keşifleri ile iyi bir yol haritasını çıkartabilmeli.
Bazen yapmaya çalıştığımız uygulamalarda öyleseni enteresan hatalar alırızki ( tabi bu aldığımız hatalar bizim hatalı kodlamalarımızla ilişkili ) çözüm için gerekli kaynakları bulabiliyor olmamız lazım. Yazılım için en iyi eğitmenden en iyi eğitimi alsanız dahi neticede aldığınız eğitim sürecinde öğrenebilecekleriniz belli başlı şeylerdir ve kendinizi geliştiriyor olmanız işte sizin bu araştırmacı, keşifci ruhunuza bağlı. Araştırmak, araştırmak ve yine araştırmak. ....

Bu işin araştırma kısmıydı.

4. İyi bir yazılımcı aynı zamanda iyi bir senarist ruhuna sahip olmalı.
(Tanımayanlar için resimdeki kişi Çağan IRMAK )
Amaaaan canım sende abartma dediğinizi duyar gibiyim :)
Fakat yazılımcının senaristlik yöne belkide en önemli yönlerinden birisi. Örneğin bir proje yazıyorsunuz. Elbette projenizin detayları proje sahibi tarafından size verilmiş durumda. Fakat proje sahibi sadece hayal etmiş ve burada bu, şurada şu olsun diye istemiş. İşte "bu"  ve "şu" ları sizin bir oluşum içerisinde, bildiğiniz yazılım dilinin kodları ile uygulamaya döküyor olmanız gerekmekte. İşte uygulamaya dökmeden önce tıpkı bir film yada tiyatro oyunu yazarcasına uygulamanın veya uygulamaların aşamalarını sırası ile belirliyor ve bunlar sahne sahne düşünoyor yada bir texte döküyor olmanız gerekmekte. O yüzden birazda senaristlik şart :)

Bu işin yapısının belirleme kısmıydı.

5. İyi bir yönetmen olabilmeli iyi bir yazılımcı :)
Biraz önce senaristlik yönünden bahsettik iyi bir yazılımcının. Eeee eğer bir yerde bir senaryo yazıldıysa o senaryoyu uygulamaya dökmek gerekir. İşte tam bu noktadada iyi bir yönetmenin yaklaşımları ve tecrübesi ise yazdığımız yazılımsal senaryomuzu en ideal şekilde uygulamaya dökebilmemiz gerekir. Senaristlik yönümüzle yazılımımızı kurguladık. Peki ama uygulama kısmında nerede ne kullanmalıyız.
Birşeyi yaparken nelere ihtiyaç duyarız ve bunların tedarikleri vs.. leri nasıl çözeriz. Tüm bu ihtiyaçlarımızı belirleyip yazılımımızı uygulamaya geçtiğimizde nasıl bir yol izlememiz gerekir ?
İşte tüm bu soruların cevabını yönetmenlik yeteneğimizle verebiliyor olacağız
. Bu kadar şey sayıyorum ama gözünüz korkmasın :)
Emin olun saydığım özelliklerin bir çoğu zaten sizde var. Sadece iyi bir şekilde bu yönlerinizi ortaya çıkarmanız ve kullanmaya başlamanız gerekmekte.

Hemen sevinmeyin bitti diye :)
Yazılımcının sahip olması gereken özelliklerine devam edelim.

6. İyi bir yazılımcı bilgisayarının başına geçtiğinde kodlarına karşı firavun gibi hareket edebilmeli.

Haydaaa !
Hadi çocukluğu anladık, senaristliği, yönetmenliğide anladık. Fakat bu firavunluk nereden çıktı diyorsunuz değilmi ?

Aslında bunun cevabı diğer tüm seçeneklerden daha net orta.

Yazılımın özünde bizim kodlarla emrettiğimiz şeyler vardır. Yani siz ne yazarcanız yazdığınız program sizin kodlarınıza göre bir eylem gerçekleştirir, bir değer döndürür vs.. Ama yazılım sizin için düşünemez. Yapay zeka diye birşey var diyenler vardır muhtemelen şimdi. Fakat yapay zekada sizin kodlarınızın bir ürünü ve o uygulamalardada sizin emrettiğiniz davranışlar sergiler programlarınız.
Yazılım sizin adınıza düşünemez kısmını şöyle bir örnekle açıklayabiliriz aslında.
Örneğin :  siz bir yöneticisiniz ve yanınızda çalışan personelinize dedinizki " git bak bakalım ve müdüriyettemiyim ?" standart bir insan zekasına sahipse bunu söylediğiniz kişi o anda size " ama gidip bakmama gerek yok siz buradasınız zaten " diye bir cevap verecektir. Değilse veya talepleriniz kayıtsız şartsız uyan bir kişi ise müdüriyete gidip sizin orada olup olmadığınıza bakacak ve geri dönüp size "orada değildiniz" diye bir cevap verecektir.

Yazdığınız programlar da; taleplerinize kayıtsız şartız uyan emrinizin altındaki çalışanlar gibidir. Tek farkı "sen git şunu yap" dediğinizde; dediğiniz şeyin sonucunu gelip size söylemezler. Taki siz "sonrada gel bana sonucu söyle" diyene kadar.

Bu bölümü toparlayacak olursak; programınızı açıp yazmaya başladığınız anda kendinizi dünyanın ( burada çok abartmaya gerek yok. Tüm dunyanın olmasada o an yazdığınız programı bir dünya olarak kabul edersek sadece kendi yazılım dünyanızın ) kralı gibi hayal edin ve kodlarınızı elinizin altındaki çalışanlarınız olarak hayal ederek onlara sürekli emredin. Emrederken o kodların sadece emirlerinizi yerine getireceğini ve siz yine emretmediğiniz sürece size sonucu bildirmeyeceğini veya durumlara göre farklı eylemler gerçekleştirmeyeceğini bilin. O halde bir yazılımcı olarak biraz önceki eylemi yeniden yazmamız gerekirse;

"sen git bak bakalım ben müdüriyettemiyim?
Eğer müdüriyetteysem bana selam söyle, değilsem geri gel ve bana orada olmadığımı söyle"
şeklinde yapılmasını istediğimiz eylemi en detaylı haliyle emretmemiz gerekir.

Bu işin otoriterlik kısmıydı.

7.Bir mevlevi gibi sabırlı ve hoşgörülü olabilmeli.

Eğer yazılımın içinde biriyseniz ne demek istediğimi hemen tahmin etmişsinizdir. Yeni başlayacak biriysenizde zamanı gelince bu sözümü kesinlikle hatırlayacağınızın garantisini veririm.
Yazmaya başladığınız anda bazen bilgi eksikliğinden, bazense belli bir noktadan sonra senaryonuzu iyi bir şekilde kuramamanıza neden olacak dış etkenler veya beyin yorugunluğundan dolayı büyük veya küçük hatalar yaparak sorunlarla karşılaşıyor ve çözümü noktasındada zorluklar çekiyor olacaksınız. İşte o durumlarda ise mevlevi sabrı gerekiyor olacak. Sinirlenmeden, sükunetimizi bozmadan, sabırlı birşekilde 3. seçenekte belirttiğim iyi bir araştırmacı yönümüz sayesinde  çözüm bulmanın yolunu arıyor olmalıyız. Bazen öylesine basit hatalar yapıp, yaptığımız hatalar gözümüzün önünde olduğu halde göremediğimiz zamanlar olurki. İşte bu zamanlarda sabır, sabır, sabır... Sükunet, sükunet, sükunet :)


Bu işin sabır ve sükünet kısmıydı.

8.Tüm bu özelliklere sahip olup ihtiyaç duyduğu anda bu özellikleri kullanabilmeli.

Doğru hamleyi doğru zamanlamada yapabiliyor olabilmek yeteneği her zaman başarılı sonuçları getirir. İşte iyi bir yazılımcıda yukarıda saydığım; sahip olduğu tüm bu özellikleri sayesinde doğru zamanda, doğru yazılımsal hamlelerde sonuca başarılı bir şekilde gidebilme yeteneğine sahip olabilmeli. Bu kısma iyi bir yönetici, iyi bir lider, iyi bir komutan olarakta adlandırabiliriz. Evet evet iyi bir komutan kulağa daha hoş geliyor. Özelliklerimiz bizim askerlerimizse; o zaman iyi bir komutan asker sayısı ile değil, sahip olduğu birlikleri doğru zamandaki yaptırdığı doğru stratejik hamleleri ile savaşı kazanabilir. Hatta bu anlattığımıza iyi bir örnek Büyük İskenderin Pers orduları ile savaşını verebiliriz.

Tabi iyi bir yazılımcının sahip olması gereken özellikler noktasında daha çok şey yazabilirim. Fakat sizleri bu yazımda daha fazla sıkmamak için yavaş yavaş makaleyi sonlandırmak istiyorum :))

9. İyi bir yazılımcı benim biraz önce yaptığım gibi çabuk sıkılmamalı veya yorulduğu anda başka sebepleri bahane olarak göstermemeli :)

10. İyi bir yazlımcı kendi eksikliklerini görebilmeli :)

Neyse son iki seçenekte işi espirili bir şekilde dile getirmiş olsamda bu konuda yazılabilecek çok şey olduğunu düşünüyorum. Ama şimdilik burada noktalamış olalım bu makalemizide.

Bu gün teknik konulardan ziyade yazılımcılığın birde bu yönünü inceleyelim istedim. Eminim sizlerinde bu yazıya ekleyeceğiniz çok şey vardır.



Faydası olması ümidi ile kalın sağlıcakla.

Mahmut TEMUR

Takip Ediyorum

Faydalı Projeler

Yorumlar

Sizde Yorumda Bulunun

Konuya dair fikir ve sorularınızı paylaşın