| « HashTable nedir ? | Sandcastle Çıktı » |
bir yazılımcı işe almak
muhtemelen dünyadaki en zor kararlardan biri. (en azından benim için böyle).

gazetelerin IK (insan kaynakları) eklerindeki reklamlara baktığınızda biraz yazılım dünyasının içindeyseniz reklamların karikatür dergilerinden alıntı yapılmış kadar komik olanları ile karşılaşabilirsiniz.
Follow up:
diğer bir çok meslekle karşılaştırıldığı zaman yapılan bir hatanın maliyeti yazılımcılar için daima en pahalısıdır. bu yüzden yazılımcı işe alırken kesin bir kural vardır.
en ufak soru işareti varsa alma
bu oldukça acımazsız olabilir ancak bu yazılımcıların doğasıyla alakalı bir sorundur.
yazılımcılar;
1. genellikle asosyal ve geçimsizdirler.
2. ortalamada cv'lerinde yazanların %25'i yalandır.
3. maaşları yüksek olduğu için maliyetleri de yüksektir.
4. yazı yazmayı sevmez.
5. en iyisini bile alsanız eğitim vermeniz gereklidir.
6. başka birinin yazdığı kodu okumaz/düzeltmez/beğenmez bu yüzden her zaman baştan tekrar yazma eğilimlidir.
bu yüzden işe alım sırasında her ne iş için alıyor olursanız olun mutlaka bazı testler yapmanız gerekir.
Sosyallik
öncelikle bir yazılımcı grubunda çalışacak ise huyunu suyunu ölçecek testler yapıp takım ile birlikte çalışabileceğinden emin olmalısınız.
her ne kadar kurumsal bir şirket olsanız bile öncelikle sosyal varsayabileceğiniz tiplerden kaçınmalısınız aksi halde 9'da işe gelip 6'da çıkan ve yeterince konsantre olmadan iş yapan birini işe almış olursunuz. (bizde memur denir bu tiplere)
konsantrasyon problemi çeken yazılımların maliyeti diğerlerinden çok daha fazladır, genellikle yaptıkları işler sürekli olarak gecikir ve yaptığı hataları aylar sonra ancak farkedebilirsiniz.
genellikle iyi giyinimli (presentable diyor bazıları), erken evlenmiş ve iyi veya paralı üniversitelerin bilgisayar bölümlerinden yeni mezundurlar. (daha sonra başka bir mesleğe geçiş yaptıkları için eski mezunlar bu kategoriye girmez)
bu konunun ne kadar önemli olduğunu anlatmak için bazı büyük firmalarda yazılımcılar için asosyallik testi bulunduğunu söylemem yeterlidir sanırım.
kendini geliştirip bu işte devam etmek isteyen yazılımcılar içinde sosyallik şartı aranan şirketlerden (kola kravat iş ortamından kolaylıkla anlaşılabilir) kaçınmasını tavsiye ederim.
Deneme Süresi
yeni işe aldığınız birisi için mutlaka kendi belirleyeceğiniz bir süre (birim olarak ay) deneme süresi koyun. bu süre içerisinde yeterli performansı göremediğinizde duygusal davranmayıp mutlaka yollarınızı ayırın.
maaş konusunda bu deneme süresi içerisinde normalin %75'i kadar maaş önerin ve deneme süresi bittiğinde kalan %25'i zam olarak verin. bu hem yazılımcının motivasyonunu yükseltecek ve şirketinize bağlılığı artacaktır hemde olası bir negatif durumda maliyetlerinizi düşürecektir.
asla ama asla şirketinize var olan yazılımcılarınızın aldığından daha yüksek bir maaşla yaptığınız işte deneyimsiz yeni birini almayın. bu yükselen homurtular duymanıza ve bu homurtuları duymazdan geldiğinizde özenerek seçtiğiniz elemanlarınızın ayrılmasına neden olur.
Yazmaktan Nefret Etmek

yazılımcıların ortak bir huylarıda her ne kadar işleri "yazmak" olsada klasik anlamdaki dokümantasyondan nefret etmeleridir.
Türkiye'deki yazılımcılarda genel olarak yazma ve okuma alışkanlığı okul dönemi ile biter ve kendilerini kod yazmaya adarlar. bu yüzden alacağınız yazılımcının muhtemelen bu tür bir alışkanlığı olmayacağından bu konuda herhangi bir şart koyamayabilirsiniz. ancak geceleri arge merakı olan yazılımcılar bu konuya eğilimlidir.
yazı yazma alışkanlığı olmayanları bu işe alıştırmak için yaptığı işle alakalı dokümantasyonu (her ne olursa olsun) ve şirket içi blog'ları zorunlu kılarak sağlayabilirsiniz. bu işlere ayrılan zamanı asla kısmayın, her bir dakikası size geri dönecektir.
yazılımcınız her ne pozisyonda olursa olsun dokümantasyonu hem kod içinde hemde dış ortamda zorunlu kılın. yani dokümantasyonun yarısı kod içindeki commentler'le yarısıda MS Word, HTML gibi başka ortamlarda bulunsun.
dış ortamdaki dokümanları kullanım klavuzu tarzında "XXX component'i hakkında" benzeri başlıklarla konuya özgü olarak hazırlayın. Böylece commentlerdeki eksik kalan genel bilgi bu dokümanlarda oluşacaktır. yeni işe aldığınız yazılımcılarda genel bilgi sahibi olmadan bir anda kendilerini kodların içinde bulmazlar.
son olarak dokümantasyon işini genel yazılım mühendisliğinde geçen case study, UML diagram gibi yazılım geyiklemeleri ile karıştırmayın. dokümantasyonu yapılmayan her kod satırı aleyhinize olacaktır.
Teknik Yeterlilik

iş görüşmesi sırasında hangi diplomalara yada sertifikalara sahip olursa olsun mutlaka teknik sınav yapın. ve sorular içinde teorik ve pratik sorular mutlaka olsun.
teorik sorular için bulmaca, tasarım, mimari içerikli sorularla hayal gücünü sınayabilirsiniz. hayalgücü geniş bir yazılımcı her zaman en iyisidir.
örneğin;
* geceyarısı gölün ortasındaki bir kayıkta suya bir kaya atarsam, su seviyesi yükselirmi alçalırmı ?
* google ile altavista arasındaki fark nedir ?
* internette eksik olan nedir ?
* object oriented dvd player tasarlayabilirmisin v.s.
işe alacağınız kişinin vereceği cevapların doğru veya yanlış olması çok da önemli değildir, önemli olan hayal gücünün nasıl çalıştığıdır.
pratik sorular ile teknik bilgisini ölçün, örneğin bir beyaz tahta üzerinde fonksiyonu yazmasını isteyin. asla bilgisayar üzerinde bu testleri yapmayın, böylece yardım almadan ne kadar yapabileceğini ölçersiniz. sorduğunuz sorular geliştirme yaptığınız platform ile veya şirket içinde kullandığınız programlama dili ile alakalı olmak zorunda değildir.
örneğin;
* "3462" string'ini integer değere çeviren fonksiyon
* asal sayıları bulan fonksiyon
bu tür sorular için google'da Microsoft Interview Questions" diye aratırsanız esinlenebileceğiniz soruları bulabilirsiniz.
alacağınız cevapların %100 doğru olması önemli değildir, neyi ne kadar yapabildiğini ölçmüş olursunuz.
son olarak
yaptığınız görüşme sonunda kafanızda soru işaretleri varsa mutlaka gidermeye çalışın, görüşme bittiğinde halen tereddüt ediyorsanız başka bir aday için görüşme ayarlamanız sizin için en iyisidir.
4 comments
Sorum şu: Yazılım firmaları,yada yazılıma ihtiyaç duyan şirketler, nedendir ki işi işte kapsın mantığı ile yaklaşmıyor? (sıfırdan bir eğitimden bahsetmiyorum)
Daha açık konuşacak olursam, Bilgisayar Programcılığı okudum,Netron bilişim akedemesinde SDS ve MCPD eğitimi almaktayım ve eğitimim aralıkta son bulmak üzere,şuan için yayınlanmasada siz bu yazıyı okudugunuz vakitlerde yazgelistirde yayınlanacak olan bir çok makalem varken,gittiğim bir çok iş görüşmesinde neden işe alınmıyorum ve bu gittiğim iş görüşmelerinde ısrarla işi işte öğrenme mantalitesini altını çizerek söylememe rağmen kabül görmüyorum.Benim illa yalan mı söylemem lazım, herşeyi biliyorum mu demem lazım, bana bunları bunları biliyor musunuz diyorlar, evet biliyorum diyorum ancak, büyük projelerde bu söylediğiniz şeyleri kullanmadım, bizede kursta bu saydıklarınızı tadımlık gösteriyorlar lezzetini bilmiyorum madabında sözler sarfederken, acaba kafalarında, bunu nasıl çabuk postalarda, sıradaki yazılımcıyı alırım diye mi düşünüyorlar.Açıkcası ben çok merak ediyorum.
İnşallah sorularımı yanıtlarda artılarımı eksilerimi görürüm..
1- HTable hakkındaki makaleniz çok zayıf ve yetersiz hatta hiç - HFunction'ın bile açıklanmadığı okuyucuyu kılgısal uslamlamaya zorlayan çöp bir bilgi.
2- Bu makale hakkında: Bütün mantıksal ana fikrinizin altındaki gerçek nedenleri görmeden olaylar hakkında mantık yürütmüşsünüz. Tıpkı yüksek seviye dillerde size sunulan araçları kullanırken yaptığınız gibi oysa aşşağı seviyedeki gerçek Sevgi'yi görmeden geçmişsiniz. Bu nedenle yanılıyorsunuz. Andığınız Argeci, Araştırmacı, Asosyal gibi kavramlar kime göre?? Niçin..
Cevaplar için ayrı bir yazı hazırlıyorum. Konu önemli olduğu için kısa bir cevapla geçmeyi pek istemedim.
@Dewell;
(Bu comment'i buraya yazmayı pek içim elvermese de en azından cevaplamış olayım)
HFunction ile sanırım hash alma fonksiyonundan bahsediyorsun. Yazı zaten hash nasıl alınır değil, hash table nasıl çalışır üzerine hazırlandı. Zaten hash table gibi mekanizmalarda bilinen (md5,sha1 gibi) fonksiyonlar yavaş olduğu için kullanılmaz. Pratikte objeye ait bir id numarası dönmek bile yeterli olacaktır. Örnek olması için;
string için GetHashCode fonksiyonu;
[code]
public override unsafe int GetHashCode()
{
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num >> 5) + num) + (num << 0x1b)) ^ numPtr[0];
if (i >= 2)
{
break;
}
num2 = (((num2 >> 5) + num2) + (num2 << 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
[/code]
gördüğün üzere herhangi bir hash algoritması ile ilgili değil, sadece unique değer üretmek için hazırlanmış. Float tipi için memory adresini veren daha basit bir fonksiyon geçerli. Reflector kullanarak içeriğine kendinde bakabilirsin.
"çöp" konusunda; sen daha güzel olanını hazırlayabilirsen ben mutlulukla hazırladığın yazıya link verebilirim. Ama bir şey üretmeden başkalarının yaptığı işlere "çöp" demeyi mastürbasyonla aynı kulvarda görüyorum.
2. kısım için;
Cümlelerden pek fazla anlam çıkaramasam da, yazıdaki fikirler geçmiş tecrübelerimden ibarettir. Beğenmeyenler kendi iş görüşmelerinde "sevgi"yide gözönüne alabilirler. Ama iş dünyasında romantik davranmak pek uygun değildir.
Arge, araştırmacı, asosyal gibi kavramlarda herkesce anlamı bilinen kelimelerdir, kişiden kişiye (mavi rengi sevmek gibi) değişmez. Nedenleri ise yaptığımız işin gereğidir.