Yeni Yazılımcıya Öneriler – 0’dan Başlamak

Selam. Bu yazıdaki diyaloglar 2020’nin Temmuz ayında Birlikte İhracat Slack Topluluğunda (artık discord’dayız) geçen bir konudan alınmıştır. Yazışmalar sırasıyla derlenmiş ve sahibi eklenmiştir. İyi okumalar.

Yaş önemli mi?

Yaş önemli. İnsanın yaşı arttıkça genelde bunu paralelinde sorumlulukları artıyor ve yeni bir şey öğrenmek için ayırabileceği zaman ve enerji azalıyor. Eğer yeni bir alana geçmek için gerekli enerjiyi kendinde görüyorsan ve hayatını yeni bir düzene geçirmek senin için mümkünse, bence 27 yaş hiç geç değil. 40larında 50lerinde bile kariyer değiştirip yazılım öğrenen insanlar var. Hemen bir örnek: 30 yaşında tesisatçı 2 senede web geliştirici oluyor.

Matematik gerekiyor mu?

Yazılım ile yapabileceğin şeyler çok çeşitli ve bir çok alanda dört işlem ve soyut düşünme dışında matematiğe gerek duyulmuyor. Bilgisayar bilimi iyi derecede matematik bilgisi gerektiren bir bilim. Fakat yazılım geliştiricilik yapmak ve iyi işler çıkartmak için Bilgisayar Bilimine veya matematikte çok iyi olmana gerek yok. Bilgisayarı ve teknolojiyi sevmen genelde yeterli oluyor öğrenmek için.

Günde kaç saat çalışmalıyım?

Günde 3 saat harika bir zaman! Benim şimdiye kadar mesleğin içine girmesi için teşvik ettiğim insanlar haftada 10 saat bile bulmakta zorlanıyorlardı. Bununla ilgili zamanında çok araştırma yaptım. Ve kabaca şöyle bir sonuca ulaştım: Haftada 10 saat ile yazılım öğrenmek mümkün. Haftada 20 saatini ayırdığında ise 1 sene sonunda büyük ihtimalle staj veya junior developer pozisyonlarında tam zamanlı işe girmen kuvvetle muhtemel. Kaynak: Udacity

Başlamak için gerekenler nedir?

Başlangıç seviyesinde yapılması gerekenler kısaca cevaplanabilecek şeyler değil. Ama eğer tek bir şeyden bahsetmem gerekseydi bu “dedication” olurdu. Yani yazılım öğrenmeye vaktinin kayda değer bir bölümünü bu senin için yepyeni olan kavramları öğrenmek için tahsis edebilme, başarısız olmana rağmen her seferinde devam edebilecek azmi gösterebilme becerisi.

Teoride öğrendiğimi koda dökemiyorum. Nasıl aşacağım?

Yeni diller, framework’ler öğrenirken hatta matematikte veya geometride yeni bir konu öğrenirken bile karşımıza çıkan bir problem bu.

İnsan soyut bir kavramı, yöntemi veya prosedürü öğrenirken aşamalı olarak öğrenir. Eğer bu yeni konuyu teorik olarak öğrenirse veya yapan birini yalnızca izleyerek pasif bir şekilde öğrenirse, bu yalnızca işin ilk aşamasını oluşturur. Her yeni öğrendiği şeyi öğrendikten hemen sonra test etmeli ve uygulamalıdır.

Test etmek genelde teorik bilgiyi pekiştirmek içindir. Mesela bir yazılım dilinde iki string’i uç uca eklemeyi öğrendiniz. Hemen arkasından çözülen bir quiz bu bilgiyi pekiştirir. “Hello” + “World” ifadesinin sonucu ne olur diye sorar mesela quiz. Şıklarda:

• “Hello world”
• “Hello World”
• “HelloWorld” vardır.

Doğru olanı seçerken teoriyi pekiştirirsiniz.

Daha sonra sizden uygulamalı bir örnek yapmanız istenir. Mesela: “3 string değişken oluşturun, değerleri şunlar şunlar olsun ve bunları şu sırayla uç uca ekleyen kodu yazın” şeklinde ufak bir assignment verilir.

Bunu da yaptığınızda öğrendiğiniz teoriyi size verilen yönergeler doğrultusunda uygulayabildiniz demektir.

Bunun bir sonraki aşaması size verilen bir problemin çözümünün bu öğrendiğiniz string uç uca ekleme (string concatenation) olduğunu tahmin ettiren çalışmalardır.

Sizden örneğin, “kullanıcının ismini girmesini ve sizin de o girdikten sonra ekrana (Merhaba Safa!) yazan bir program” yazmanız istenir.

String concat kullanmanız gerektiğini hemen akıl edersiniz çünkü bir iki ders önce gördünüz hala bilgi taze.

Bunu da yaptıktan sonraki aşama problem benzerliği kurma ve tekrardır.

Dersin ileriki aşamalarında farklı konular anlatılıyorken sizden istenen ödev ve çalışmalar içerisinde yine sizi string concat yapmaya iten kısımlar bulunur.

Bunu o kadar tekrarlarsınız ki, artık beyniniz benzer bir problem gördüğünde onun çözümünü otomatik elinde bulundurmaktadır.

İşte “kodu anlıyorum, temel yapıları biliyorum, fakat istediğim şeyi koda dökemiyorum” demek, konuların öğrenilmesi ilk aşamalarda bırakılmış demektir.

Bu çok normal çünkü internetteki bir çok kodlama eğitimi, yazılımcılar tarafından, bu anlattıklarım hiç düşünülmeden veriliyor. Herhangi bir youtube serisinden bu içeriği çabucak tükettiğiniz zaman, siz sadece yapılan işi anlamayı öğreniyorsunuz.

Bir şeyi bilmek ile o şeyi yapabilmek arasında bir çok mental aşama var ve bunların teker teker aşılması gerekiyor.

Zihninizin bu aşamaya gelmesi için defalarca farklı problemlerin nasıl yapılar kullanılarak çözüldüğünü, nasıl koda dönüştürüldüğünü görmesi hatta defalarca bunlar üzerine aktif öğrenme yapması (deneyerek, farklı farklı egzersizler yaparak, mesai harcaması) gerekiyor.

Bu anlattıklarım dediğim gibi yalnızca kodlama öğrenirken değil, herhangi bir yeni beceri elde ederken geçerli. Video kurgulamak, counter strike’da competitive maç yapmak, mobil arayüzler tasarlamak veya aklınıza gelen başka bir şey.

Ben yazılıma başlamalarına yardımcı olduğum arkadaşlarımda hep benzer problemleri gözlemliyorum.

Genelde bir yerden sonra “ders bataklığı” dediğim bir tuzağa düşüyorlar.

Ders bataklığı şu demek: Sürekli farklı farklı ders materyallerinin tüketildiği, video serilerinin bitirildiği, kitapların okunduğu ama hiçbir şekilde üretken olmayan bir süreç.

Her yeni video dersten sonra öğrenilen bilgilerin yetersiz görülüp, aksiyona geçememe ve daha fazla ders izleme… Bir başka kurs bitirme, bir de falanca kitaba göz atma yoluna gidilerek pasif öğrenmeye hapsolma.

Bunun kırılması için ilk kural, ilk günden üretmeye başlamadır.

Bir arkadaşım sosyal bilimler arkaplanından geliyordu. Onların mesleğinde bir tez yazabilmek için onlarca kaynak taranıyor, binlerce sayfa okunuyor. Sürekli bana da o şekilde soruyordu. Yani 10 tane python kitabı aldım hepsini okuyorum, bunlar bitince de şu şu video dersleri bitireceğim diyordu.

Onu bundan vazgeçirmek ve aktif öğrenme yoluna sokmak için şöyle bir yöntem izledik:

Aramızda bir kodlama yarışması düzenledik. Çok basit görevlerin olduğu bir yarışma, ve o çok basit işi yapan en kısa kodu yazan kişi kazanıyordu. (Code Golf)

İlk görevlerde hep ben kazandım haliyle. Ama git gide arkadaşımın ürettiği çözümler benimkine çok yakın hale gelmeye başladı.

Ve aslında kod yazabildiğini anladı özgüveni daha da yerine geldi.

Yazılım gibi üretme odaklı alanlarda, teori ne kadar önemli olsa da, pratikle hep paralel şekilde ilerlemesi gerekiyor.

Kavramların içselleştirilmesi ancak kod yazarak oluyor.

Benim çok sevdiğim bir bisiklet analojisi var, güzel bir blog yazısından denk gelmiştim Yazar şöyle diyor:

Bisiklet sürmeyi öğreneceksiniz diyelim. Kursa gittiniz. Size bisiklet sürme şampiyonu bir hoca geldi. Ve tahtada ilk gün bisiklet sürmenin temellerini anlattı. Nasıl dengede durmanız gerektiğini, dengenin hızla kazanıldığını, ayakların pedal üzerindeki konumunu, direksiyonun nasıl birden bire çevrilmemesi gerektiğini, vücuda hafif 2-3 derecelik açılar verilerek virajlar alındığını hep anlattı.

Slaytlar bittikten sonra bisikletini getirdi ve amfide herkesin önünde 5-10 metre bisiklet sürdü.

Siz tabi hayranlıkla izlediniz, ne kadar kolaymış bisiklet sürmek!

Gün bitti, günün sonunda hoca dedi ki, herkes bisiklerini alsın bahçeye çıkıyoruz.

İlk günün hedefi dedi, şu karşı yola kadar bisiklet sürmek.

Tabi en cesurlar atlayıp asıldı pedallara ve kan gövdeyi götürdü.

İnsanlar düştü, bisiklet sürmenin ne kadar korkunç ve anlaşılması zor olduğunu düşündüler. Derstekilerin birkaçı bir daha asla bisiklete binmeyeceklerine yemin bile ettiler.

İşte bilgi ile beceri öğrenme arasındaki fark da bu. Yazılım geliştirme veya programlama bilgi değil. Türkiye’nin başkentinin Ankara olduğunu öğrenmek bir bilgidir. Malazgirt Savaşının tarihi bir bilgidir.

Ama kod yazmak, yemek yapmak, bisiklet sürmek, resim yapmak bunlar beceridir.

Ve beceriler yalnızca aktif olarak öğrenilir.

– Birlikte İhracat’tan Safa Orhan

Selamlar, birkaç senedir sektörün içindeyim. Haliyle yola yeni başlayan arkadaşlara yardımcı olabileceğim noktalarda destek atmaya geldim. Bazı önemli gördüğüm durumları listeleyerek işe başlayalım.

İngilizce

Dilin eksikse işini gücünü bırak ve öğren. Nasıl yaptığın önemsiz. Senin için işleyen yöntemi bul ve öğren. Grammer olayını geçelim. Türkçe’yi nasıl öğrendiysen öyle düşün, önce konuşmalısın ki sonra grammer öğrenebilesin. Aynı küçük bir çocuk gibi. İnsanlar ne zaman hangi kalıpları, deyimleri vs. kullanıyor dikkatli bir dinleyici ol.

Çevrenin görüşü

Başkası sizin kriteriniz olamaz ancak size fikir verir. “Şöyle dediler ama…” kalıbını yaşayarak öğreneceksiniz. Hem olumlu hem olumsuz örnekleri mutlaka olacaktır. Ezcümle iş hayatında tek bir doğru yok tercihleriniz var.

Şartlar

Şartlar ne olursa olsun, herhangi bir işte fayda görüyorsanız şansınızı zorlayın. Twitter DM’den staj görüşmesine çağrıldığım da oldu, öğrenciyken askeri ücretin üzerinde çalışıp para kazanmaya başladığımda tüm teknik yeterlilikleriniz yanında bu işi seviyor olduğunuzu karşıya gösterebilirseniz, kapılar açılıyor.

Sorgulamak

Doğru soru sormayı öğrenmek lazım arkadaşlar. Ne yapmak istiyordun, hangi yöntemleri denedim, çalışmayanlar neden çalışmadı. Bu soruların cevabını vermeden sorunuzu başka birine de sormak en azından ayıp. Karşınızdakinin emeğini isterken sizin de bu alana değer verip emek harcadığınızı göstermeniz lazım.

Sebat (Kararlılık)

Belki de en önemli gelişme kaydettirecek alan budur. Her geçen gün o kadar çok yeni ortam, kütüphane, dil çıkıyor ki arasında kaybolmak çok olası. Bunları denemekte fayda tabiki var ancak temelde kendinizi rahat hissedeceğiniz bir dil olsun, onu iyice öğrenin. Öyle daldan dala atlayarak gelişemezsiniz. Bu demek değil ki o bu yeni çıkanları indirip denemeyin. İndirin, çalışma ortamınıza kurun deneyin. Ancak biraz heveslendiniz diye tüm işinizi gücünüzü bırakıp bunlara yönelmeyin.

Algoritmalar

Algoritmaları öğrenmek için araç olarak kullanacağınız bir dil seçin kendinizi, buradaki amaç dilin özelliklerine hakim olmak vs. değil. Sizin algoritma kısıtlarını görecek denemelerinizi yapacak kadar kullanabileceğiniz bir araç edinmek. Hangisi olduğu çok önemli değil. Nacizane Python’i tavsiye ederim.

Python öğrendikten sonra tek başına işe yarayacak mı?

Sadece Python kullanarak:

  • Terminal’de çalışan konsol uygulamaları
  • Django/Flask gibi python framework’leri yardımıyla web api’lar (Backend)
  • Pandas, numpy gibi kütüphaneler kullanarak veri analizi uygulamaları yazılabilir.

Benim tavsiyem Python öğrendikten sonra ilgi alanına göre onu başka diller/framework’ler ile desteklemek.

Yani HTML, CSS veya başka dillerde öğrenmem gerekir mi?

Web alanında çalışmayacaksan bilmesen de olur. Ancak web geliştirmesi yapacaksan öğrenmen lazım. Günümüzde web geliştirmesi yapmamak diye bir şey kaldı mı o da bir soru işareti.

Ben python kodu okumak istiyorum. Github bana çok karışık geldi ilk başta. Çözemedim açıkcası. Gerçek projeleri okuyabileceğim bir yer mevcut mu?

Python tutorial videoları yayınlayan kişilerin bloglarını takip edebilirsin. Ancak Github/Bitbucket/Gitlab gibi alanlar dışında nereye bakarsan bak bunların yanında bir damlar kalırlar.

Bu işin odak noktası bu platformlar. Belli bir seviyeye gelince de Stackoverflow’da yeni sorulan Python sorularını takip etmeni öneririm.

Kullanırken temelini öğrenin

Mülakatlarda en çok gördüğüm ve gördüğüm anda olumsuz yanıt vermemi sağlayan durum bu. Web uygulaması yazan biri framework üzerinden MVC Pattern’i kullanmış ancak MVC ne diye soruyorum cevap bambaşka. Yahut ben X dilini biliyorum diyor, soruyorum pek bu dili diğer dillerden ayıran nedir?

Syntax, veri tipleri vs. bir sürü olasılık var. Arkaplana bakmak, çıkış hikayelerini bilmek olayı daha çok benimsemenizi sağlarken karşı tarafa da konuya olan ilginizi gösteriyor. Bazı dillerin belgeseli bile var yahu daha ne olsun kullanın bu kaynakları.

Selam, herkese faydalı olabileceğini düşündüğüm bazı soruları ve cevapları şöyle ekliyorum.

– Birlikte İhracat’tan Çağatay

Topluluğa katıl

Freelancer olarak gelişmiş ülkelerde bizimle aynı işi yapanlarla aynı gelire sahip olmanın yollarını birlikte keşfediyoruz. Bu yolda bize katılmak istersen aşağıdaki butonu kullanabilirsin.