Yazılıma Yeni Başlayacaklara Tavsiyeler

GİRİŞ

Bir çoğunuzun “Yazılıma yeni başlayanlara ne tavsiye edersin?”, “Hangi dil ile başlamalıyım”, “Acaba yapabilir miyim?”, “Bu mesleği yapabileceğime nasıl karar veririm?” gibi merak dolu sorularını sosyal medya platformlardan kısa kısa yanıtlamaktansa, kendi naçizane tecrüberimden yola çıkarak uzunca bir yazı yazıp sizlere nereden ve nasıl başlamanız konusunda tavsiyeler vermek istedim.

Bu sebeple ben de başladığım yere döneceğim, 14 yaşıma.

BEN KİMİM?

 Çok kısa kendimden bahsedeyim. Ben Gülcan. 24 Yaşındayım. 14 yaşında bir Anadolu Teknik Lisesinde Bilişim Teknolojileri Bölümü okuyarak bu maceraya başlamış biriyim. Daha sonra Ege Üniversitesinde iki yıllık önlisans eğitimi aldım(Böyle söyleyince çok havalı oluyor. İşin aslı YGS/LYS’de yeterli puanı alamadığım için Mühendislik Fakültesine yerleşemedim ben de iki yıllık Bilgisayar Programcılığı okudum yani olay bu). Ardından da 2014 yılında Dikey Geçiş Sınavı ile %100 İngilizce eğitim veren bir vakıf üniversitesinde burslu olarak Yazılım Mühendisliği Bölümü’nde lisans eğitimime başladım. 2016 Yılında da Manisa Celal Bayar Üniversitesi’de yine aynı şekilde Yazılım Mühendisliği Bölümü’ne yatay geçiş yaptım. Şuan son sınıf öğrencisiyim. Hem okuyup  hem de bir üniversite teknoparkında geliştici konumunda çalışıyorum.

İkisi birden zor oluyor mu?
İsteyerek ve severek yaparken doğrusu çok zorlanmıyorum. Okulum çalışan öğrencilere insiyatif gösteriyor, devam zorunluluğunda büyük problem yaşamıyorum. İş yerim de derse gideceğim günlerde anlayış gösteriyor. 

HERŞEYDEN ÖNCE!

Şunu söylemeliyim ki, eğitim hayatımdaki hiç bir şey yukarıdaki bir kaç cümleyi yazmak kadar kolay olmadı. Kararlılık, azim, hedef bilinci ve herşeyden önemlisi sabır lazımdı.

Eğer yazılımcı olmak istiyorsanız kendinize sormanız gereken ilk soru nereden başlamalıyım yerine, “Yeterince sabırlı bir insan mıyım?” sorusu olmalı. Bu soruyu kendinize sormak zorundasınız çünkü bir yazılım ürünü oluşturmak; bilgi, emek ve tecrübe gerektirirken bunların her birinin altında sabır da gerektiriyor.

  • Öğrenme aşamasında anlamak için sabredeceksiniz,
  • Öğrendiklerinizi kodlarken hatalar alacak bunları düzenlerken sabredeceksiniz,
  • Tam her şey çok güzel gidiyor gibi görünüyorken, kullanıcılar ürününüzü test edecek eksikler hatalar devam edecek siz de yine sabrederek, azimle bunları düzelteceksiniz.
    Eğer “herşey hemen olsun bitsin” diyen tez canlı biriyseniz bu meslek size keyif vermeyecek, enerjinizi her geçen gün düşürecek ve motivasyon kaybı yaratacaktır. Ya kendinize sabretmeyi öğretmelisiniz ya da yol yakınken dönmelisiniz.
    Ancak yaptığınız işten keyif alırsanız, sarf ettiğiniz azim ve sabır, insanların hayatını kolaylaştıracak ve hayata katkı sağlayacak güzel ürünlere dönüşerek bu mesleği tadından yenmez bir hale büründürecektir.. 🙂

KENDİ FİKİRLERİNİZE ÖNEM VERİN!

İnsanların yazılım alanı ile ilgili; “Bu iş sana göre değil”, “Çok sayısal ya senin kafan basmaz”, “Aa! yazılım/bilgisayar mühendisliği asosyal mesleği ya bütün gün otur otur”,”Kızlar güzel kod yazamıyo bence, erkek işi o biraz?!” gibi önyargılı ve içi boş konuşmalarına kulak asmayın. Hayat sizin hayatınız, kimse size neyi yapıp yapmayacağınızı söyleme hakkına sahip değil, siz kendiniz için bir karar verin ve arkasında durun. Günü geldiğinde hata yaptığınızı düşünseniz dahi o hata size ait bir hata olacaktır.

HATA YAPMAKTAN KORKMAYIN!

Eğer bir yazılımcı olacaksanız asla hata yapmaktan korkmayın. Dünyadaki en harika yazılımcı dahi olsanız kodunuzu derlediğinizde hata alabilirsiniz. Tek seferde mükemmel bir iş çıkartmanız imkansıza yakın çünkü hata bu işin doğasında var. Üniversitede bir hocam “Bugün kullandığımız bütün yazılımlar, aslında hatasız değil, sadece hataları kullanıcıların farketmeyeceği kadar iyi gizlenmiş yazılımlardır.” derdi. 

TEKNOLOJİNİN SANATÇILARI OLDUĞUNUZU HATIRLAYIN!

Yazılım, yapısı gereği oldukça komplike bir mühendislik dalıdır. Azmetmeniz ve sıkı çalışmanız gerekecektir. Anlamak, altından kalkmak, yetiştirmek vs. gibi sebeplerle bazen sabahlara kadar çalışmanız gerekecek. Ancak şunu söylemeliyim ki başardığınızı hissettiğiniz anda tüm yorgunluğunuz gidecek. Kod yazarken, sanatsal bir şey yapıyormuşsunuz gibi hayal edin. Bir heykeltraş nasıl ki baştan sona her ayrıntıyı düşünüp tasarlıyorsa, siz de başladığınız projenizi o şekilde tasarlıyorsunuz unutmayın. Ve bir sanatçı gibi hep yeni ve yaratıcı fikir arayışında olun.  Yaratıcı ve üretken fikirler çok değerli. Bugün facebook fikri olmasaydı, Mark Zuckerberg’ü hiç birimiz tanımıyor olacaktık.

ALGORİTMA MANTIĞINIZI GELİŞTİRİN!

İşin motivasyon ve psikolojik bölümünde kendinizi hazır hissettiğinizde, bir diğer kapı açılıyor : Algoritma ve programlama. Yazılıma başlarken ilk etapta Algoritma nedir? Mantığı nasıl geliştirilir? Bunları iyice araştırın.

 Google sizin en yakın dostunuz bunu unutmayın. Algoritmanızı geliştirebileceğiniz pek çok online kaynak bulabileceğiniz gibi çok fazla da basılı kaynak bulabilirsiniz. Unutmayın, günlük hayatınızda dahi aldığınız her karar ve her hamle algoritma içerir.
Lisedeyken bize yaptırdıkları ilk algoritma: “Sabah uyandığınız andan akşam yattığınız ana kadarki her hamlenizi adım adım yazın” olmuştu.

1-) Sabah uyandım

2-) Yüzümü yıkadım

3-)Kahvaltı yaptım

4-) Üzerimi değiştirmek için dolabımı açtım.

5-) Eğer hafta içi ise, okul üniformamı giydim.

….

Bu gibi küçük ve basit algoritmalar sizin planlama, karar durumları oluşturma ve işlemleri adımlama yetinizi geliştirecektir. Bu aşamada bol bol kalem ve kağıt kullanın, Akış Diyagramları çizin(Flowchart) ve Sözde Kodlar yazın.(Pseudocode). 

  • Bir algoritmayı çözerken, çözüm aklınıza ilk nasıl geliyorsa önce o halini yazın.
  • Sonra doğruluğunu kontrol edin.
  • Doğru cevabı, kendi cevabınız ile kıyaslayın.
  • Eğer hata yapmışsanız, doğru cevabı da farklı bir kağıda not edin. Asla “aa cevap böyleymiş” diyip kapatmayın, yazın. Siz yazarken zihninizde o kadar yer edecektir.
  • Doğru algoritma ile sizin hatalı algoritmanızı karşılaştırın. Bu aşamada “aa demek ki sayacı burada bir arttıracaktıık!”, “aa döngüyü yanlış kurmuşuuum” gibi iç sesler duymaya başlayacaksınız 🙂
  • Eğer hata yapmamışsanız, doğru cevabı başka ne yöntemlerle bulabilirdiniz onu düşünmeye başlayın. Farklı şekilde de çözmeye çalışın. Eğer siz farklı yöntem bulamıyorsanız, internetten araştırarak, hocalarınıza sorarak veya arkadaşlarınızdan fikir alarak algoritmanızı nasıl daha farklı yazabilirdiniz? Nasıl daha efektif, daha kısa, daha hızlı sonuca ulaşan hale getirebilirdiniz onları sorun. Unutmayın bir algoritmanın her zaman birden fazla çözüm yolu vardır.
    Bu yöntemler sizi, bir problemi en kısa yolla çözmeniz için geliştirecektir.

HANGİ PROGRAMLAMA DİLİ İLE BAŞLAMALIYIM?

Algoritma mantığınız olgunlaşmaya başladığında sıra bunları bir programlama dili ile deneyimlemeye geliyor. Günümüzde bir çok programlama dili var. Her biri birbirinden farklı gibi görünsede aslında hepsi algoritma mantığına dayalı, değişen şey yazım biçimi/sözdizimi(Syntax) ve kullanım alanları oluyor.

Programlama dillerinin birbirinden farklı olmasının amacı aslında o dilin belli konularda sağlayacağı avantajlardır. İfade gücü, verimlilik, okunabilirlik, esneklik, nesne yönelimlilik gibi kavramlar da programlama dillerinin birbirinden ayrılma ölçütleri olarak kabul edilebilir.

Öğrendiklerinizi kodlamak için bir programlama dili seçmelisiniz. Bu seçme işlemi esnasında direkt  olarak “Ben mobil programlama yapacağım.”,”Ben web programlama yapacağım ” gibi cümlelerle bodoslama bir karar alıp, bir şeyler yapmaya çalışmamalısınız. Henüz başlangıç aşamasında olduğunuz için o dilleri henüz verimli kullanamayacaksınız. Onun yerine yapısal bir programlama dili kullanın. Yani, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilen, bu yolla da uzun ve karmaşık programları, bloklara ayırarak daha kolay biçimde yazılabilmesine olanak sağlayan dilleri. Yapısal programlama dilli olarak;
C, C++, Visual Basic, Dr. Racket, Ada veya Pascal programlama dillerinden birini tercih edebilirsiniz. Bunları kullanarak algoritmalarınızı test edin. Kontrol işlemleri(şart komutlarını), döngüler, diziler, fonksiyon ve prosedür tanımları vs. bu aşamada iyice öğrenin. Kaynak olarak seçtiğiniz dil ile ilgili bir kitap alabilirsiniz ya da internetteki online eğitimleden faydalanabilirsiniz.
Acele etmeyin, öğrendilerinizi sindirin. Öğrenmeye çalıştığınız şey çok basit bir şey değil, sabırla çalışmaya devam edin.

YA YAZILIMA YETENEĞİM YOKSA?

Bu aşamaya kadar zaten yazılım alanına koca bir adım attınız. Yazılım, zekadan, azimden, sıkı çalışmaktan yanısıra biraz da yetenek işidir. Yukarıda anlattıklarımdan başlayıp bu aşamaya gelene kadar ki her şeyde neler hissettiğinizi bir kağıda yazın. “İlk kez “Merhaba Dünya” yazdırdım. Çok keyifli bir şeymiş/çok uğraştırıcı/ ee şimdi ne olacak merak ediyorum…” gibi gibi.

Tıpkı bir günlük tutuyormuşcasına hislerinizi yazın. Bu aşamaya geldiğinizde de bu yazdıklarınızı okuyup, o anda neler hissettiğinizi net bir şekilde görerek o verilerden, bu mesleğin size heyecan verip vermediğini, devam etmek isteyip istemediğinizin analizini yapabilir, gelecek için daha net düşüncelerle kendinize bir yol çizebilirsiniz. Bu aşamada “Hala yapabildiğime kararsızım” sonucunu çıkartıyorsanız, aslında bu mesleği sevmişsinizdir çünkü içinizdeki merak duygusu sizin yılmanızı engeller. Biraz daha gayret ederek, yazılıma yeşil ışığı yakacağınızı söyleyebilirim.

NESNE TABANLI PROGRAMLAMANIN OLMAZSA OLMAZLARINI ÖĞRENİN.

Yazılım alanı ile ilgili hislerinizi tarttınız ve ısınmaya başladınız. Şimdi de bir nesne yönelimli programlama dili seçerek işi bir adım daha ileriye taşımanızın zamanı. Nesne tabanlı programlama özelliklerini kavramak ve bunları deneyimlemek için C#, Java, Visual Basic .Net, Objective C, PHP, Python, Ruby gibi dilleri öğrenmeye başlayabilirsiniz. Bu tercih elbette size kalmış. Ancak bu aşamada esas önemini vurgulamak istediğim şey nesne tabanlı programlama özelliklerinden olan; Kapsülleme(Encapsulation), Kalıtım(Inheritance), Çok Biçimlilik(Polymorphism) terimlerini, Sınıf(Class) ve Nesne(Object) kavramlarını ve bunların nasıl çalıştıklarını öğrenmeniz.

Bunları öğrendiğinizde kendi başınıza rahatlıkla proje geliştirebilecek seviyeye geliyorsunuz.

ASLA BİR PROGRAMLAMA DİLİNİN FANATİĞİ OLMAYIN!

Gerçek bir yazılım/bilgisayar mühendisi platform bağımsız çalışmayı ilke edinmelidir. Sınıfınızda “Ben Java’cıyım/ Ben C#’cıyım” gibi saçma cümleleri veya bunların türevlerini duyabilirsiniz. Şu bir gerçek ki siz bir yazılımcıysanız herhangi bir dilin fanatiği olma lüksünüz yoktur. Hepsi hakkında bir fikriniz olmalıdır. Para veya başka sebepler için bu önyargıya kapılıp gitmeyin, önceliğiniz mesleki verimliliğiniz olalı para yahut başka bir şey değil. Çünkü nerede, ne şekilde çalışacağınızı eğitim hayatınız süresince net olarak kestiremezsiniz. Her an alışık olduğunuz dilden farklı bir teknoloji ile çalışmanız gerekebilir.  Bu sebeple kendinizi bu yaklaşımlarla kısıtlamayın. Öğrenmeye açık olun.

KENDİ BAŞINIZA BİR PROJE GELİŞTİRİN.

Mutlaka kendi başınıza geliştireceğiniz bir projeniz olsun. Öğrendiklerinizi, fikirleriniz ile birleştirebileceğiniz bir proje yapın. Bu proje için ister hayal gücünüzü kullanıp bir fikir oluşturabilir,  isterseniz de var olan bir yazılıma benzer bir şey geliştirebilirsiniz. Önemli olan o projeyi tek başınıza geliştirirken çok fazla şey öğrenecek olmanız. Çünkü takılacağınız yerler, alacağınız hatalar sizi araştırmaya yöneltecek, yaptığınız araştırmalar da sizin öğrenmenizi sağlayacak.

Mesela bu aşamada kendinize “Eee ben bu kullanıcı bilgilerini aldım da, nereye kaydedeceğim şimdi yahu?” gibi cümleler peşi sıra gelmeye başlayacak, siz de bu soruların ışığında veritabanı nedir? Neler kullanabilir, kullandığınız dil hangi veritabanlarını destekler, bir veritabanı şeması nasıl oluşturulur, ilişkisel veritabanı nedir?  gibi araştırma konularının içinde bulacaksınız kendinizi.

Evet farkındayım kulağa çok kalabalık ve yorucu geliyor ama inanın o anı yaşarken, projenizin yani her haliyle sizin yaratacağınız bir şeyin oluşmasındaki heyecanla yorgunluğunuzu hissetmeyeceksiniz. Hem hissetseniz de bilmeniz gereken bir şey var ki; zaman zaman yorgun düşmekte işinizin bir parçası. 

İNGİLİZCE ÖĞRENİN.

Projelerinizi geliştirirken yararlanacağınız kaynakların büyük bir çoğunluğu İngilizce olacağı için ister istemez İngilizce öğrenmek zorundasınız. Kullandığınız programlama dilinin ve teknolojilerinin dökümantasyonları İngilizce oluyor ve siz işinizi görmesi için bir kaynak arayışında olduğunuzda karşınıza hep İngilizce kaynak çıkıyor.
Hem eğitim hem de iş hayatınızda sizi öne çıkaracak en önemli etken İngilizce. Hatta günümüzde yalnızca İngilizce bilmeyi yeterli görmeyen, farklı dilleri bilen nitelikli eleman arayışında olan yazılım firmaları da mevcut. (Dil geliştirme yöntemleri ile ilgili tavsiyelerime başka bir yazımda değineceğim.)

Bunun yanısıra Google’ı iyi kullanın, takıldığınız bir şeyi hemen “ben yapamıyorum” düşüncesi ile pekiştirmektense Google’da aratın. stackoverflow.com gibi websiteleri karşılaştığınız hataların benzerlerini bulabileceğiniz veya hatanızı İngilizce yazıp bilen birilerine sorabileceğiniz bir platform. Juniour Developer’dan (Başlangıç geliştircisi), Senior Developer’a (Üst düzey geliştirici) kadar tüm geliştiriciler hatalarını bu gibi platformlarda aratıyorlar emin olun. 

HERŞEYİ ÖĞRETMENLERİNİZDEN BEKLEMEYİN.

“Ama biz o konuya daha gelmedik”. “Ama bize hiç bunlar anlatılmadı”, “Hoca bir örnek yaptı geçti” gibi cümleler ile kendinizi kandırmayın. Şunu bilmelisiniz ki, bu yanılgıya ben de düştüm ve zamanla görüyorum ki öğretmenlerimiz yalnızca bizlere bir şeyin ne olduğunu ve nasıl yapıldığını en basit örneklerle anlatmak durumunda. En ince ayrıntısına girmesi size bahsetmesi gereken diğer konulara girememesi anlamına gelir. İşin ayrıntısına daima kendiniz girmelisiniz. Araştırarak, sorarak, Google’da aratarak.

Yanılgısına düştüğüm bir şey daha var ki, o da;
“Üniversitede beynime herşeyi yükleyecekler ve çıktığımda civa gibi bir mühendis olacağım. Her soruya şak diye cevap vereceğim, çatır çatır projeler yazacağım” düşüncesi.
BÖYLE BİR DÜNYA YOK ARKADAŞLAR.!
Her zaman kendinizi güncellemeniz, “ben bunu biliyorum ya” ile asla yetinmemeniz gerekiyor. Yoksa çağınızın gerisinde kalma tehlikesindesiniz.

SOSYAL YÖNLERİNİZİ KUVVETLENDİRİN.

Hobilerinize, yapmaktan keyif aldığınız aktivitelerinize zaman ayırın. Onlardan uzaklaşmayın. Yazılım işi, doğası gereği oldukça karmaşık bir iştir ve zaman zaman kafanızı boşaltacağınız bir şeyler yapma ihtiyacını hissedersiniz. Bunu da bir spor dalı ile ilgilenerek bir müzik aleti kullanarak belki de duşta şarkı söyleyerek gerçekleştirebilirsiniz. Yöntem çok önemli değil ama muhakkak kafanızı boşaltabileceğiniz bir şeyler keşfedin.

SONUÇ

Bu konunun öneminin farkında olduğum için yazımı oldukça uzun tutup her şeye biraz biraz değinmeye çalıştım. İlerleyen günlerde her birini yeniden ayrıntılandıracağım.

Ama bunca saydığım maddeler arasında çok önemli  bir şey var ki o da bilhassa kızlar için;

Sevgili hemcinslerim,
yazılım alanında Türkiye’de azınlık olmamız, artarak güçlenemeyeceğimiz anlamına asla gelmiyor.
Yazılım yolculuğunuzda belki zaman zaman rehavete kapılıp, başkalarının cümlelerine kulak asıp, yada takıldığınız yerlerde işin içinden çıkamayıp motivasyonunuzu kaybedebilirsiniz.
Aynılarını uzun yıllar, dönem dönem ben de yaşadım. (Dönem dönem diyorum çünkü bir şeyi yapamayınca meslekten soğuyor, yapınca da sahipleniveriyordum hep)

Yanlış yerde miyim?
Yanlış bölümde miyim?
Hatalı bir tercih miydi yazılım/bilgisayar mühendisliği?
Benden olmayacak mı yani?
Yeterince zeki değil miyim sahiden?

Gibi pek çok karmaşa ile karşı karşıya kaldım.
Ama sabredip kararlılıkla kendinizi toparlamaya başladığınız zaman gerçekten gelişim gösterdiğinizi farkedeceksiniz.
!) Bırakın sizin gelişiminiz, kendinizi kıyasladığınız diğer insanlardan daha yavaş olsun,
!) Bırakın mühendisliği ilk yılda kazanamamış olun,
!) Bırakın bir kaç dersiniz altta kalmış olsun,
Hiç ama hiç önemli değil!
Önemli olan her zaman  %100 dersteki performanslarınız değildir.
O derslerden neyi ne kadar algıladığınız,
algıladığınız bilgiyi ne kadar kullandığınız ve  ne kadar kalıcı hale getirdiğinizdir olay.
Hem ne demiş Enistein; “ Eğitim okulda öğrendiklerimizi unuttuktan sonra aklımızda kalanlardır.

Kendinizi asla başkaları ile kıyaslamayın. İlham alın, başarılı insanların hayatlarıyla kendinizi güdüleyin fakat asla kıyaslayıp, motivasyonunuzu düşürecek şekilde kendinizi yermeyin.
Onun yerine bir bilenden tavsiye isteyin, hocalarınıza danışın, bildiğini düşündüğünüz arkadaşlarınıza danışın, internette gördüğünüz size yardımcı olabilecek yazılımcı insanlara mail attın. Eminim size yanıt vereceklerdir. Tecrübelerime dayanarak söylüyorum, yazılımcılar bilgilerini paylaşmayı severler. 🙂
Sorun, öğrenin sonra siz de gelecek nesillerle paylaşın. Bu şekilde çoğalacağız, ümitsizliğe kapılarak değil, çalışarak, azmederek.

Sevin kendinizi,
Olduğunuz gibi kabul edin,
Güçlü durun.
Kimse için değil, kendiniz istediğiniz için yapın herşeyi,
KIZ GİBİ !
ERKEK GİBİ !
KENDİNİZ GİBİ !

Umarım yazdıklarımın sizlere katkısı olur,
Her birinize teknolojinin aydınlattığı bu yolda, maceralı bir yolculuk dilerim. Sevgilerimle.

“Yazılıma Yeni Başlayacaklara Tavsiyeler” için bir cevap

  1. Bilgisayar mühendisliği birinci sınıf öğrencisiyim. Sizin yaşadığınız zorluklardan bende geçiyorum. Ama sizin artı bi yönünüz var, lisenizi bilgisaylarla ilgili bir bölümde tamamlamışsınız. Anadolu öğretmen lisesi çıkışlıyım. İlk geldiğimde hiçbir fikrim yoktu. Bilgisayarın karşısına oturduğumda kafama ağrılar giren birisiyim. Ta ki bir kaç ay öncesine kadar. Bu bölümü seçerken, neden olmasın, istesem yaparım düşünceleriyle tercihimi yaptım. Ve şu an bulunduğum konumdan fazlasıyla memnunum. Araştırmaktan, sürekli sorgulamaktan, hatalarımı düzeltmekten keyif alıyorum. Kodları yazarken içerisinde bulunduğumuz disiplin, sabrımız ve düzenimiz hayatımıza da yansıyor. Ve insan hem öğrenim hayatında hem de yaşamında kendini geliştirmiş oluyor. Bir kaç ay içerinde kendime kattığım o kadar çok şey var ki. Olaylara karşı yaklaşımım dahi değişti. Anlatmak istediğim şey şu ki, istediğimiz, sabrettiğimiz, azimli olduğumuz sürece yapamayacağımız başaramayacağız hiçbir şey yok 😊

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir