Yazılımcı Adayları ve Çiçeği Burnunda Yazılımcılara Tavsiyeler Vol. 3742


Başlıkta(kabul ediyorum, başlık atmayı pek beceremiyorum) da gördüğünüz üzere bu konudaki 3742. yazı olsa da dayanamadım yazdım. Keyifle yazdım, keyifle okuyacağınızı umuyorum.

Ferâgatnâme:

Aziz kâri! Bu yazıdaki anlatılan her şey kişisel tecrübe ve düşüncelerimden meydana gelmiştir. Elbette mutlak doğrular değildir. Zaman zaman bu konuda sorulara muhatap olduğum için düşüncelerimi toplu halde içeren bir adres gösterebilmek amacıyla bu yazıyı yazmaya karar verdim. Ayrıca, “bilgisayarla ilk kez Commoder 64 ile tanışan” zevâttan(bu kelime hakaret değildir, zâtlar demektir) değilim. Yazılımla üniversitede tanıştım. Yani düz, standart bir bilgisayar mühendisiyim.

Görsel

Eyy çiçeğiburnunda yazılımcı veya yazılımcı adayı arkadaşlarım! Bir de bana kulak verin. Gelin biraz hasbihal edelim; boy boylayalım, soy soylayalım. Hatta tecrübeli arkadaşlarım, özellikle de üstadlarım! Siz de gelin yanlışlarımı söyleyin.

İngilizce

Elbette olmazsa olmazımız İngilizce. İngilizce öğrenmenin önemini uzun uzun anlatmayı abesle iştigal sayıyorum. Yazılımcının öğrenmesi gereken en önemli dil İngilizce(en azından teknik yazıları anlayacak seviyede) deyip geçiyorum.

Yazılım Dilleri

Diğerleri için ise Gökhan Şengün üstadın aşağıdaki tavsiyesine büyük oranda katılıyorum(ve JavaScript çalışıyorum). Ek olarak 2 ana dilin yanında deneysel projeler de olsa fırsat buldukça farklı dillere el atmanın faydalı olduğunu düşünüyorum. Hem farklı ufuklar açabiliyor hem de bazen benzer işleri yaparken kıyaslamalar yaptıkça, ana dili de daha iyi anlamaya vesile olabiliyor.


Burası değişimin hiç durmadığı bir alem. Neredeyse her sene yeni bir yazılım dili, neredeyse senede birkaç yeni framework çıkıyor.

Takdir edersiniz ki bunca yeni çıkan şeyi öğrenmek mümkün değil. Ama şunları öğrenmek mümkün:

  • Bu yeni çıkan dilde/frameworkte hangi özellikler mevcut(specs)?
  • Hangi ihtiyaçları, problemleri çözmek iddiasıyla ortaya çıkmış?
  • Muadillerinden temel farkları neler?
  • Muadilleri ile kıyaslamaları(benchmark) yayınlanmış mı? Bunlara göre hangi noktalarda avantajlı, hangi noktalarda dezavatajlı?

Fanatiklik Mes’elesi

Bunlardan bahsetmişken diğer bir kritik konuya da dokunmakta fayda var: Yazılım Dili Fanatikliği.(Bu bahiste Erkan Erol’un ilgili yazısını buraya bırakıp devam edeyim.)

Ben bu meseleyi şu basit benzetmeyle izah etmeye çalışıyorum:

Diyelim ki PES tarzı bir oyunda takım oluşturuyorsunuz. Ekstradan takıma her oyuncudan istediğiniz kadar koyabiliyorsunuz. En beğendiğiniz hücum oyuncusu Messi, savunma oyuncusu ise Pique olsun.

Messi’yi stoperde oynatamazsınız. Bırakın stoperi 5 numara veya 8 numara oynatmanız bile saçma olur. Aynı şekilde Pique’yi de her yerde oynatamazsınız(Servet Çetin olsa neyse). Bu ahval ve şerait altında takımı 11 adet Messi’den yahut 11 adet Pique’den oluşturur musunuz? (Hayır dediğinizi umarak devam ediyorum).

Belki mükemmel golcü veya mükemmel defans olabilir ama mükemmel futbolcu yoktur. Aynı şekilde bazı işleri mükemmel yapan diller olsa da her şeyiyle mükemmel bir dil yoktur.

Anlatmaya gerek yok. Görüyorsunuz. (Kaynak: PES 2016)

Dolayısıyla her futbolcuyu -ve de dili- yeteneklerine göre değerlendirip, iyi olduğu yerlerde ve ihtiyaca göre istihdam etmek gerekir.

C ile C#’ta yapabileceğiniz hemen her geliştirmeyi yapabilirsiniz. Ama C# ile 1 günde yapacağınız işi C’de kimi zaman 2, kimi zaman 12 günde yapabilirsiniz(salladım). Çünkü ikisi de -çoğunlukla- farklı ihtiyaçlara iyi cevap verdikleri iddiasındadırlar.

Değişim, Gelişim

İnanması belki güç ama bundan(Mayıs 2018) 12 yıl önce iOS, 10 yıl önce Android yoktu. İlk iPad daha 8 yıl önce piyasaya çıktı. Swift’in 1.0 versiyonu 2014, Kotlin’inki 2016’da yayınlandı. C# bile hepi topu 18 yıllık bir dil. Delphi, Pascal gibi bir dönemin en popüler dilleri tozlu legacy kodlarda kaldı. Yine AngularJS 8, ReactJS 5 yıllık frameworkler.

Bütün bunlar demek oluyor ki; 2028’in en popüler dili henüz yazılmamış olabilir. Veya şimdiki popüler dillerin birkaç tanesi 10 seneye tarih(legacy) olabilir.

Dilleri de geçtim son dönemde şaha kalkan yapay zeka(makine öğrenmesi, derin öğrenme) ve “geleceğin interneti” olarak gösterilen(bence de öyle) blockchain gibi yıkıcı yeni teknolojiler gündemin tam ortasında. (Bence her yazılımcı bu iki teknolojiyi de yakından takip etmeli.)

Elhâsılı bu denli baş döndürücü hızda gelişen başka bir sektör yok. Yeterince gelişmezseniz geride kalırsınız. Yani o klişe sloganla ifade edersek; bu alemde “koşmazsan düşersin”.

Bu yüzden ihtiyacınız olan en önemli şeylerden ikisi, bitmek tükenmek bilmeyen bir merak ve araştırma duygusu.

Değişin, Gelişin

Okumalısınız. Çok okumalısınız. İyi okumalısınız. Güzel okumalısınız. Çok güzel okumalısınız! Aynı zamanda çok dinlemeli, izlemelisiniz.

Benim tavsiyem,-vaktin müsaitliği ölçüsünde- denk geldiğiniz yazılımla alakalı ilginizi çeken veya içi dolu her makaleyi okumanız, her muhabbeti dinlemeniz. Anlatılan konuya o an ihtiyacınız olmayabilir. Hatta belki hiçbir zaman ihtiyacınız olmayabilir. Ama hepsi muhakkak işinize yarayacak. Kâh farklı bir bakış açısı kazandıracak, kâh ufkunuzu açacak; kâh derinlemesine düşünmediğiniz bir kavramı, kâh ecnebice terimleri daha iyi anlamanızı sağlayacak.

Bunun için de altta verdiğim bülten/yayın/topluluk/kanal listesine göz atabilirsiniz.

Github

Github meselesine de değinmeden geçmeyeyim. Github, yaptığınız işin kalitesini iş verene somut olarak gösterebileceğiniz bir platform. “Tecrübe tecrübe diyorsunuz. İş yeri tecrübem yok ama, bak ben bunları bunları yaptım/yapabiliyorum” demenin en basit yolu. Daha ne olsun?


Diller, syntax ve algoritmalar haricinde öğrenilmesi gelen farklı -ve çok önemli- başka meseleler var: Yaklaşımlar, prensipler, disiplinler… (Bu konudaki keywordler: Birim testler, TDD(Test Driven Development), refactoring, temiz kodlama, -nesne temelli diller için- tasarım prensipleri, tasarım desenleri vs.)

Bu yaklaşımların temel amacı anlaşılır, bakımı kolay ve sancısız bir şekilde ölçeklenebilir/genişletilebilir yazılımlar geliştirmek. Bana göre insanı, dillerin iyi öğrenilmesi yazılımcı; algoritmaların iyi kavranması mühendis yapar. Ama bu yaklaşımların/disiplinlerin öğrenilip özümsenmesi insanı iyi mühendis, iyi yazılımcı yapar.

Örneğin bir dilde bir döngünün nasıl yazılacağını rahatlıkla internette bulabilirsiniz. Ama bir bakış açısına/yaklaşıma sahip olmak için bu konulardaki müktesebatınızı(bilgi birikiminizi) geliştirmeniz gerekmektedir. (Google’dan anında öğrenme vs. kitap okuma gibi)

Bu bahsi kapatmadan Martin Fowler’ın o meşhur sözünü de bırakayım:

“Herhangi bir aptal, bilgisayarın anlayabileceği bir kod yazabilir. Fakat iyi programcılar, insanların anlayabileceği kod yazarlar.”


Yazılım ekosistemi yardımlaşmanın en yaygın olduğu ekosistem. Düşünün ki içlerinde en popüler işletim sistemlerinin(linux, android -nicelik olarak küçük bir kısmı hariç- vs.), yazılım dillerinin (Java, Go vb.) aralarında bulunduğu binlerce açık kaynak proje var. Öyle ki kapalı sistemin kalesi Microsoft bile pes etti ve Linux’a ilan-ı aşklar eşliğinde .Net Core’u çıkardı. Bu mükemmel nimetlerin dışında StackOverFlow başta olmak üzere -belki- yüzlerce yardımlaşma platformu binlerce blog var.. ve buralarda insanlar aşkla şevkle başkalarının problemlerini çözüyor/çözmeye çalışıyorlar.

Bunların dışında yine onlarca yazılım topluluğu var. Bu topluluklar etkinlikler düzenliyor, videolar/podcastler çekiyor, blog yazıyor, ortak açık kaynak projeler çıkarıyorlar.

Bütün bu ekosistemden elbette dibine kadar faydalanmalısınız. Bunun yanında elinden geldiğince ekosisteme katkı da sağlamalısınız(blog yazma, açık kaynak projelere katkı yapma, etkinliklerde görev alma vb.).. ve bunun ne kadar güzel bir his olduğunu tatmalısınız.

Ek Olarak

Yazılım geliştirmenin ana amaçlarından biri insanların hayatını kolaylaştırmaktır. Siz de yazılım geliştirme sürecinde kendi hayatınızı kolaylaştırmaya çalışın.

IDE’lerin kısayollarını öğrenin. Efektif kopyalama-yapıştırma yöntemlerini öğrenin. Gayet ciddiyim(Mesela shift+alt+fare imleci kısayolu). Devamlı dosya kopyalama işlemleri yapıyorsanız, ufak bir program yazın o yapsın.

Mesela şu an çalıştığım projelerde debug yapabilmek için birkaç dosyayı kopyalamam ve bazı temp dosyalarını silmem gerekiyor. Yani her kod değişikliği sonrası en az 30 saniye zamanım gidiyordu(Evet Rabbim ve yazılım camiası affetsin, hunharca debug yapıyorum). Daha da önemlisi angarya bir işle uğraşmanın getirdiği psikolojik yıpranma ve devamında gelen motivasyon kaybı fenaydı. Akabinde basit bir program yazdım. Şu an tek tıkla bu işlemler gerçekleşip tarayıcıda uygulamam ayağa kalkıyor.

Bu şekilde çok ufak püf noktalarını öğrenmek hem pek çok angarya işlemden sizi kurtaracak hem de her gün belki 15–20 dakika belki daha fazla zaman kazandıracak.

Benim takip etmeye çalıştıklarımın bir kısmı

(E-bülten haricindekileri sadece Türkçe/Türkiye’de olanları yazdım. Tavsiyelerinizle bu listeyi güncelleyebiliriz)

E-Bültenler: CodeProject, Yazılım ve Ürün Geliştirme(Erman Taylan)

Youtube: Devnot, Başka Bir Şey, Codefiction, Istanbul Coders, Bilişim Sohbetleri, KWorks, Yalın Kod, Data Istanbul, KryptEd(Blockchain), Doğukan Güven Nomak(Doğukan Güven Nomak), Kod Demleme, Adem İlter(Adem ilter), code is life, Inoix, Fatih Acet, Selman Kahya(Selman Kahya)

Topluluk: Devnot, Codefiction, Deep Learning Türkiye, Bilişim Hareketi, İstanbul Java User Group, UniChainTR

Medium Yayınları: Bilişim Hareketi, Deep Learning Türkiye, Codefiction, Kodcular, Gökhan Şengün(Evet tek başına yayın sayıyorum, düzenli olarak haftada bir yazı çıkarıyor)

Zâtınıza çook iyi davranın.


Bana ulaşmak için: Linkedin, Twitter


Bu sayfa 358 kez görüntülendi

It's only fair to share...Share on LinkedInShare on FacebookShare on Google+Tweet about this on TwitterShare on Tumblr
Benzer Konular

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>