Ofiste Bugün serisine tüm hızıyla devam ediyoruz. Geçen yazımda yazılımın öneminden bahsetmiş geleceğin burada olduğunu ve ülke olarak da, kişisel olarak da gelişmemiz gereken bir alan olduğunu naçizane söylemiştim. Madem bunu söyledim ve o yazımdan sonra onlarca mail aldım yazılıma nasıl başlamalıyım, yazılımda kendimi nasıl geliştirebilirim gibi. Yeni yazılarımı sık sık yazılım konuları ve özelleşmiş olarak C# Programlama dili üzerine yazarak, öğrenmeye hevesli arkadaşlarımızın yollarında bir basamak olmaya çalışacağım.
Arkadaşlarımın sordukları sorulara cevap verirken yapabileceğim en sağlıklı iş zannedersem kendi yazılım serüvenimden bahsetmek ve yaptığım yanlışları ve doğruları anlatmak olacaktır.
Yazılıma Nasıl Başladım?
Yazılıma 7 yıl önce ilk olarak, oynadığımız oyunları nasıl yapıyorlar sorusunu araştırarak başlamıştım. Araştırmalarım sonucunda Programlama dilleri yardımı ile yapıldığını öğrenmiştim. Araştırmalarıma devam ettim ve ilk C dili ile tanıştım. C dili ile çok bilinçsiz bir başlangıç yapmıştım yazılıma. Yapmış olduğum bu bilinçsiz dalışın ceremesini daha 2. dersinde dili çalışmayı bırakarak çekmiştim.
Çünkü şöyle bir ifade kullanmıştı anlatan kişi x=x+1. Mantıksal olarak düşündüğümde 2=3 gibi bir ifadeydi bu ve çok mantıksız gelmiş ve çok iyi hatırlıyorum nasıl olur ya bu diye diye C dilini çalışmayı bırakmıştım. Çünkü dilden önce yazılımın var olan kendi edebiyatından, kendi literatüründen haberdar olmalıydım. Evet yazılımın kendine ait bir lisanı kendi arasında tüm dünyayla ortaklaşa konuşabildiği bir dili vardı.
Yazılıma karşı olan heyecanım ve merakım hiç gitmedi. Sonra araştırmalarıma devam edince Algoritma kavramı ile karşılaştım. Algoritma kavramlarını öğrenmeye başlayınca anladım ki x=x+1 bir eşitlik değil bir atama işlemi idi yazılımda eşitlik == (yan yana iki eşit) ifadesiyle ifade ediliyordu.
Yazılım İçin Algoritma Nedir? Neden Bu Kadar Önemli?
Yazılıma başlayacaksanız eğer, bilen birine sorduğunuzda size söyleyeceği şey bu olacaktır öncelikle Algoritmayı halletmelisin.
İnsan böylesi bir yönlendirmeyi dinleyip, hadi o zaman Algoritma öğreneyim deyip işe giriştiğinde, şöyle bir şeyle karşılaşır. Özel algoritmaları bir kenara bırakırsak başlangıç seviyesinde algoritmik kavramlar, sadece 3 4 makalede yazılıp bitirilecek, okunup anlanabilecek şeylerdir.
Yazılıma başlayan arkadaşlarımız genelde bu 3 4 temel seviye algoritma dersini okuyup anlayınca artık yazılımda çığır açabilirim durumuna gelirler, ama öğrenmek istedikleri dile giriş yaptıklarında olayın pekte böyle olmadığını fark ederler. Otomatikman moraller bozulur ve yazılım belkide hep bu seviyede bırakılır. Genelde arkadaşlarımda gördüğüm şey bu oldu.
Şimdi burada bahsedilen asıl olaya değineyim. Bu anlam karmaşasına da son vermiş olalım. Aslında Algoritma demek bir olayı parçalara bölebilme, sıralı bir şekilde gerçekleyebilecek şekilde adım adım yazabilme yada düşünebilme becerisi demektir. Yani yazılımcıların aslında algoritma çok önemli, yazılıma başlamak istiyorsanız öncelikle bunu geliştirmelisinizdeki bahsettiği algoritma bunu ifade eder. Düşünme yeteneğinizi geliştirmelisiniz demek istemektedirler genelde.
O yüzden Algoritmayı geliştirmek için, yani düşünme şeklinizi geliştirmek, problemlere bakış açınızı değiştirmek için yapmanız gereken bir kaç yol var. Sayacaklarım çoğaltılabilir ama ben temel olarak gördüklerimden bahsetmek istiyorum.
Ama en önemlisi çok fazla antrenman yapma, çok fazla problem çözmedir. Düşünme şeklinizi geliştirdikçe, sorunlara bakış açınız değişecek farklı yollar farklı çözümler bulabildiğinizi göreceksiniz.
O zaman ilk olarak şunu diyelim
Algoritmayı Geliştirmek İçin Çok Fazla Problem Çözmeliyiz.
Yazılıma ilk başladığımda elime gelen her problemi çözmeye çalışırdım. İlk zamanlarda boş anlarımı değerlendirmek için bir algoritma defterim vardı ve içinde önceden not aldığım sorularım vardı onları çözmek için uğraşırdım.
Amerikayı Yeniden Keşfetmeyi Çalışmayı Bırakın
Burada düşünme şeklimizi geliştirmenin bir diğer yolu da başkalarının çözümlerine göz atmaktan geçer. Bazen dünyayı tek bizden ibaret sanırız ve her şeyi kendimiz yapalım, biz düşünelim diye çabalar dururuz. Çoğu zaman yaptığımız iş Amerikayı yeniden keşfetmeye çalışmaktan öteye geçmemektedir. Oysa ki var olan çözümlere bakma, onları inceleme bize yeni bakış açıları kazandırabilmektedir. Amerikayı yeniden keşfetmek yerine keşfedilmiş kıta üzerinde yenilikler yapmak çok daha yararlı olan bir adımdır. Hem para edende bu olacaktır. En kötü ihtimal bu şekilde de çözülebiliyormuş diyebilmemizi sağlayacaktır.
Var olanın üzerine geliştirmeye çalışmak her zaman daha mantıklıdır. Yalnız burada bahsettiğim biz hiç düşünmeyelim zaten mutlaka yapılmışı vardır onu alıyım kullanayım seviyesine gelmemelidir. Burada gelişiminizin farkında olmakta sizlere kalmaktadır.
Kod ve Algoritma Ezberlemeyin
Özellikle öğrenci arkadaşlarımda gördüğüm bir yanlışın üzerinden konuya devam edeyim.
Derslerde hocaların anlattıklarını güzel bir şekilde ezberleyen arkadaşlarım yapılan yazılımların, geliştirilen algoritmaların yada verilen soruların üzerine hiç kafa yorma, farklı şekilde çözülebilir mi acaba diye düşünme gereksinimi duymuyorlar. Sınav günü geldiğinde hoca birazcık düşünmelerini gerektirecek bir soru sorduğunda bütün her şeyi ezberleyen öğrenci arkadaşlarım kalem oynatamaz duruma geliyorlar. Çünkü o ana kadar o düşünme işini, antrenmanını hiç yapmamış orada da ilahi bir dokunuş olmazsa yine yapamayacaktır. İlk yazılım sınavlarından sonra sınıf genelde dökülür.
Lütfen kodları ve algoritmaları ezberlemeyin. Yapamayabilirsiniz, çok kısa sürede çözüme kavuşturamayabilirsiniz ama üzerine düşünün. Zaten bazı algoritmalar ve kodlar sürekli yaptıkça akılda kalmaktadır.
Üniversite 1 de hocamızın bütün kodları ezbere bildiğini sanırdım. Bir gün bu soruyu kendisine sorduğumda bana şöyle demişti Google var niçin ezberleyeyim. Hocam böyle diyince rahatlamıştım evet ezberlemeye gerek yok Google var 😀
Buradan yola çıkarak kendimi bir sorunun çözümü ile ilgili ezbere mi gidiyorum, yoksa gerçekten o konu hakkında düşünmeyi öğrenmiş miyi mi şöyle sınardım. Çözümü yapılmış soruyu 3 4 gün sonra tekrar çözerdim, eğer birebir aynı şeyleri yapmamış isem anlardım ki, evet bu işi öğrenmişim ezbere gitmiyorum. Sizlerde böyle sınayabilirsiniz gelişiminizi.
Algoritma konusunda yapabilecekleriniz bu kadarla sınırlı değil tabi ki ama en önemli kısımlarından bahsetmeye çalıştım.
Tutku Ve Adanmışlık
Şimdi yazılımda gelişmek isteyen arkadaşlara biraz farklı bir şey söyleyeceğim. Yazılımda gelişmek biraz tutku ve adanmışlık ister. Öğrenmesi maddi açıdan en ucuz ve en kolay olan bu iş manevi anlamda bir takım zorlukları barındırır. Aslında her iş bu tür şeyleri barındırır, ama yazılımda bunlar bana göre bir tık daha fazladır.
Neden öğrenmesi maddi anlamda en ucuz. Çünkü bir bilgisayara (artık olmayanımız yok) ihtiyacımız var. Yazılım dillerini geliştirenler, çalışma Studiolarının ücretsiz sürümlerini veriyorlar zaten. İnternetimiz de varsa sınırsız bir kütüphaneye de sahibiz demektir. İşte aslında geriye bizim büyük bir tutku ve adanmışlıkla bu işin üzerine düşmemiz kalıyor.
Burada küçük bir anektod.
Üniversite tercihlerimi yapacağım zaman Koç Üniversitesinde Matematik bölümü okumuş bir abime tercihlerimle alakalı fikir danıştığımda bana şöyle demişti. Ben “abi matematiği seviyorum iyide yapıyorum yazayım mı ne dersiniz” demiştim. Bana şunu sordu, “Tercih listende matematikten sonra yazmayı düşündüğün başka bölümler de var mı?” dedi. Var dedim. “O zaman yazma” dedi. “Çünkü Matematik okuyacaksan o senin kesinlikle tek seçeneğin olmalı” demişti. Onun üzerine Endüstri Mühendisliğini yazmıştım.
Yazılımda tamda bu olayda anlattığım gibi, eğer bu alanda kendinizi geliştirmek istiyorsanız başka seçeneğiniz yokmuş gibi adanmışlık isteyen bir iştir. Adanmışlık seviyeniz bu düzeyde olursa tutkunuz her geçen gün artıyor ve ortaya güzel işler çıkıyor. İşinize yarayan işler çıkardığınızda da bağlılığınız artıyor. Gelişim süreci bir birini tetikleyen bir süreç olarak devam ediyor.
İkinci bir seçenek olmaktan çıkarın derim yazılımı.
Tek Amacım Kısa Sürede Para Kazanmak
Eğer kısa sürede büyük paralar kazanma gibi hayallerle yazılıma başlıyorsanız büyük ihtimal bir ay sonra ne yazılım adına bir şey konuşuyor olursunuz ne de para namına bir şey görürsünüz. Yazılım iyi para kazandırıyor ama işe sadece bu gözle yaklaşmayanlara çok para kazandırıyor bunu çok net söyleyebilirim.
Amaçlarınızdan biri çok para kazanmak olabilir ama tek amacınız bu olmasın yazılımda gelişmek istiyorsanız.
Bugünkü makalemizde Yazılımda Gelişme yolları konumuza bir es verelim. Yarın 2. yazımızla daha farklı konulara değinerek devam edelim.
Yazımın sonunda bir kere daha şunu söylemeliyim bunlar benim yaşadıklarımdan gördüğüm şeylerdir. Herkesde böyle olmayabilir. Genel geçer olarak bakılacak noktalarda var, bakılmayacak noktaları da var. Önemli olan ve buradaki amacım sizleri üzerine düşünmeye sevk etmektir. Hak verdiğiniz noktalarda dikkatlerinizi yoğunlaştırıp bu işte yol katedebilmenizdir amacım. Umarım faydalı olmuştur.