Saat gece yarısını çoktan geçmiş. Bilgisayarınızın başında oturuyorsunuz. Facebook'da video izliyorsunuz. Bir yandan da MSN açık, arkadaşınız ile yazışıyorsunuz.Yaklaşık bir saat önce de, en son aldığınız oyununuzu zevkle oynadınız ve bitirdiniz. Nereden baksanız 6-7 saattir makinenizin önündesiniz. Bir anda, beyninizin derinliklerinden bir ses duyuyorsunuz: "Bilgisayar hayatının neresinde? Onunla neler yapıyorsun?" Böyle bir soruya verdiğiniz cevap, sizi daha da sarsmak üzere; "zamanımın çoğunu bilgisayarımın başında geçiriyorum ama, yaptığım tek şey oyun oynamak ve 'chat' yapmak ".
Bu rahatsız edici durum, sizi bilgisayar kullanarak para kazanabileceğiniz, daha da önemlisi mutlu olacağınız bir mesleğe yani, "bilişim" e doğru itti. Peki şimdi bu bilişim denen mesleğin hangi branşı ile ilgileneceksiniz? Sistem uzmanı mı, web tasarım uzmanı mı yoksa yazılım geliştirme uzmanı mı olacaksınız? Google'dan, arkadaşlarınızdan, oradan buradan araştırıyorsunuz. Yaptığınız incelemeler sonucunda yazılım geliştirmenin daha çok hoşunuza gideceğine karar verdiniz. Peki nereden başlayacaksınız? Hangi programlama dilini kullanarak, nasıl projeler yazacaksınız?
Daha da önemlisi "Başarabilecek misiniz?" İşte bu yazımda, böyle düşünmeye başlamış arkadaşlarıma elimden geldiği kadar yol göstermektir amacım.
Bu işi yapabilmenin altın anahtarı kendine güvenmektir. Bazı insanlar için "kendine güvenmek" ifadesi biraz korkutucudur. "Hiç denemediğim bir alanda kendime neden güveneyim" psikolojisi ile duruma yaklaşabilirsiniz. O zaman, rahatlayın arkanıza yaslanın ve burada size söylediklerime kulak verin.
Şimdi, yaptığınız en iyi işi düşünün. Mesela araba kullanmak, iyi yemek yapmak, hatta iyi bir WOW oyuncusu olmak gibi kendinizle övünebileceğiniz eylemlerinize odaklanın. Ardından bu işleri yapmayı nasıl öğrendiğinizi hatırlayın... Hatırlayın ve odaklanın... Bu işe "korkarak" mı başladınız, yoksa başlangıçta hata yapıyor olmanıza rağmen, bu hatalardan dahi zevk alıp eğlenerek mi kendinizi geliştirdiniz? Dürüst olun lütfen. Belki de bir kısmınız, bu sorulara "hata yaptığımın farkında bile değildimki, ben sadece eğleniyordum. Bir de baktım işin piri olmuşum" diye yanıt vermiştir. Hayatınızda başarılı olduğunuzu düşündüğünüz her eylemde ortak olan tek şeyin, o eylemi icra ederken size verdiği haz ve mutluluk olduğunu fark edin! Siz, aslında iyi yaptığınız her şeyi, bir başkasının size "aferin" demesi için değil kendinizi mutlu hissetmek için yapmıyor musunuz? Yani egomuzu tatmin etmenin en iyi yolu, sevdiğimiz bir işi yapmaktır.
O zaman şöyle diyebiliriz; "bir işte kendine güvenmek demek, o işi severek yapmak demektir."
Yukarıdaki ünlü "Lunch atop a Skyscraper" fotoğrafını, çoğu kişi görmüştür. Yükseklik korkusu olan çoğu kişi, bu fotoğrafa baktığında rahatsız bile olmuştur. İşte ben, o rahatsız olanlardan biriyim. Ciddi derecede korkuyorum yüksekten. Fakat, bir o kadar da manzara sever bir adamım. Ne mi anlatmak istiyorum? Yüksekten o kadar korktuğum, kendi evimin beşinci kattaki camından bile bakamadığım halde, sırf doğa ve manzara aşkına, geçtiğimiz yaz Fethiye'de yamaç paraşütü yapabildim (tanımayanlar için, kasksız olan ben oluyorum). Çünkü sevgi, korkudan; aşk da nefretten üstündür.Eğer, çok sevdiğiniz birşeyi yapıyorsanız, korktuğunuz şeyleri görmezsiniz bile.
Öyleyse size açık ve seçik olarak şunu teklif ediyorum; yazılıma aşık olun! Onu, hayatınızın vazgeçilmez bir parçası haline getirin. Eğer bu adımı atabilirseniz, gerisi sizin için çorap söküğü gibi gelecektir. Gerisi? Elbette o aşamalara da bakacağız.
"Nasıl öğrenirim - çalışırım" sorusu yazılıma yeni başlayan dostlarımın en sık dile getirdiği sorulardan biridir. Hatta daha da özele inersek, yeni öğrenilen bir konu hakkında hemen "bunu nerede kullanırım" sorusu ortaya çıkar (Hissedebiliyorum, şu anda bazı okurlarım "aaa ben de bu soruyu soruyorum" diye düşünüyor). Bu sorunun cevabı çok basittir: "İhtiyaç duyduğunuz yerde". Bu cevap sizi tatmin etmedi mi? O zaman soruyu değiştirmelisiniz. "Bu kodu nerede kullanırım" değil, "Bu koda ne zaman ihtiyaç duyarım" diye sormalısınız. Çünkü o zaman şu kavramı daha net anlarsınız: Ne kadar çok kod yazarsanız, o kadar çok "ihtiyaç" duyarsınız ve bu ihtiyaçlarınızı giderdiğinizde o kodu/konuyu çok daha iyi kavrarsınız.
Aslında söz buraya gelmişken, bir yazılımcının olmazsa olmaz karakteristik özelliklerinden bahsedelim. Bu özellikler elbette detaylandırılabilir ama benim özellikle üzerinde durmak istediklerim; yaratıcılık, tatmin edilemez bir merak ve bu merakı gidermek için kullanılacak disiplinli bir araştırmacılık. Yaratıcılık diye isimlendirdiğimiz ve çoğu kişi tarafından doğuştan geldiğine inanılan düşünme biçimi, aslında bir çok kavramı da kapsayan bir tanım. Yani içinde, çözümleyici (analitik) düşünceyi, gözlemciliği, nesneler arası bağlantı kurabilmeyi, neden-sonuç ilişkilerini tespit edebilmeyi ve kesinlikle hayal gücünü de barındırıyor.
Peki yaratıcılık doğuştan mı gelir, yoksa çevresel faktörler mi yaratıcılığı tetikler? Ben, ikinci görüşün sıkı bir savunucusuyum. Bir insanın yaratıcılığını ve elbette hayal gücünü besleyen şeyler, o insanın çevresinde mutlaka vardır. Çizgi filmlerden kitaplara, müziğe kadar herşey sizin yaratıcılığnızı geliştirebilir. Denemeden bilemezsiniz.
Benden yazılım eğitimi alan çoğu öğrencimin en büyük sorunu şudur; "hocam derste anlattığınızda iyi anlıyorum, ama evde örnek sıkıntısı çekiyorum." Öncelikle şunu belirteyim, eğer yazılım ile ilgilenmeye henüz başladıysanız, böyle bir sorun yaşamanız kadar doğal başka birşey yok. Peki çözüm nedir? Hadi gelin sorunun köklerine inelim ve çözümü netleştirelim.
Yazılım geliştirirken karşınıza çıkan bir sorunun bir çok çözümü vardır. Peki neden? Neden tek bir çözümle idare edemeyiz biz yazılım geliştiriciler? Yazılım en basit anlamda bir kod yazma işidir. Çözüme ulaşmak için yazılan kodun, daha az satırdan oluşması, daha işlevli olması ve daha kolay okunması amacıyla birsürü şey deneriz. İşte bu nedenle, bir sorunun sonsuz çözüm yöntemi olabilir. Yıllar geçtikçe de bu çözümler artacak, birileri aynı sorunun çözümüne yönelik daha iyi kodlar yazacaktır. Bir örnek verelim bu konuda... Yazılıma yeni başladınız ve döngülere kadar geldiniz. Genellikle öğrenilen ilk döngü for döngüsüdür. Konuyu okudunuz, hocanızın gösterdiği veya kitaptaki örneği tekrarladınız. Ve o meşhur soruyu sordunuz "Bu koda ne zaman ihtiyaç duyarım?" Öncelikle şöyle düşünün. for döngüsü olmasaydı ne yapardınız? Mesela, üç elemanlı bir diziniz var ve bu elemanları tek tek MessageBox'da göstermek istiyorsunuz. Ne yapacaksınız? Sanırım tek seçeneğiniz var:
string[] iller = { "istanbul", "ankara", "izmir" };
MessageBox.Show(iller[0]);
MessageBox.Show(iller[1]);
MessageBox.Show(iller[2]);
Peki sizce bu kod dinamik mi? Her diziye uygulanabilir mi? Ya dizinizin eleman sayısı 25 olsaydı? Yukarıdaki koda 22 satır daha ekleyerek mi problemi çözeceksiniz? İşte bir yazılımcı, dinamik bir çözüm getirmek zorunda. Şimdi gayet basitçe düşünelim, alt alta bulunan MessageBox.Show satırlarının parametrelerini inceleyin. Değişen tek şey, iller dizisinin index değeri (0,1 ve 2) değil mi? Bunu gözlemlediyseniz, içinizden bir ses şöyle diyecek; "bir değişkenim olsa, 0'dan başlasa ve dizinin son elemanının indexine kadar gitse, tabii bunu yaparken de kendini 1'er 1'er arttırsa, böylece ben de MessageBox.Show satırında değişkenin o anki değerini kullanabilirim. Böylece dizinin eleman sayısı kaç olursa olsun tüm elemanları gösterebilirim." İşte for döngüsünü siz icad ettiniz!!
"Bir değişkenim olsa, 0'dan başlasa " :
int i = 0;
"...ve dizinin son elemanının indexine kadar gitse":
if (i<iller.Length )
"..tabii bunu yaparken de kendini 1'er 1'er arttırsa":
i++;
E hadi birleştirin şimdi:
string[] iller = { "istanbul", "ankara", "izmir" };
for (int i = 0; i < iller.Length; i++)
{
MessageBox.Show(iller[i]);
}
Dediğim gibi. for döngüsünü siz icad ettiniz. Önce o olmasaydı ne yapacağınızı düşündünüz, sonra yazdığınız kodu incelediniz ve içinizden gelen sesi dinlediniz. for döngüsü kendiliğinden ortaya çıktı. Birşeyden emin olun! For döngüsünü icad edenler de böyle ihtiyaç duydukları için icat ettiler.
İşte sevgili dostlarım, gördüğünüz gibi, yeni öğrendiğiniz herşeyi uygulamaya dökmek ve "bu koda ne zaman ihtiyaç duyarım" sorununa çözüm bulmak bu kadar basit!
Yazılım öğrenmeye başladıktan sonra, en çok karşınıza çıkacak bir diğer sorun da, yeni öğrenilen kavramın tam olarak nasıl çalıştığını anlamamaktır. Bunun çözümü ise, bilgisayarınızın dışında! Çevrenizde, tam olarak hayatınızın içinde! Daha önce de bir makalede söylemiştim. Yazılım bire bir insan mantığını taklit eder. Yukarıdaki karikatüre bakın, klasik, "uyuyamazsan, çitten atlayan koyunları say" yaklaşımının, while döngüsü ile yazılmış hali. Yani türkçesi; "hala uyanık olduğum SÜRECE, koyun sayısını bir arttır. " Bir önerme süreci ve eylem... Alın size bir döngü de benden, "hayatta olduğum SÜRECE kod yazacağım ". Bunu da siz karikatirüze edin.
Yavaş yavaş cümleleri toparlayalım. Dostlarım, özellikle yazılım geliştirmeye yeni başlayanlar, sizlerle benim veya çevrenizdeki herhangi bir yazılımcının arasında tek bir fark vardır. Bizler sadece daha fazla kod yazdık o kadar. Eğer sizde şu andan itibaren başlar ve geceli gündüzlü çalışır, yazdığınız herşeyin mantığını kavrarsınız, disiplinli bir şekilde Google'dan, forumlardan faydalanırsanız, mükemmel noktalara ulaşacaksınız. Bundan adınız gibi emin olun.
Son olarak öğrencimle sık sık paylaştığım bir örneği paylaşmak istiyorum. Bir eylemi sık sık yapmak, o eylemin yapılırken artık düşünülmemesine neden olur. Bir dolmuş şöförü buna harika bir örnektir. Adam, hem ışıklara, hem sıkışık bir trafikte önünde ve arkasındaki araçlara, debriyaja, gaza, frene,vitese, aynaya odaklanır. Bunun yanında bir de yolculara para üstü uzatır. İşte size soru bu adam bu yeteneği dehasıyla değil, çok çalışması ile elde etmiştir.
Siz de, öğrenin, pratik yapın, kısa yollar üretin ve uzman olun...
Kodla kalın, iyi çalışmalar...
Alıntıdır : Türkay ÜRKMEZ