40+ bir yazılımcıdan mesleğe yeni başlayan kişilere 10 tavsiye
Bir tavsiye yazısına başlamadan önce, normalde kim olduğumdan, şunu yaptım, bunu başardım gibisinden uzun uzun bahsetmem gerekir. Böylece okuyucuya vereceğim tavsiyelerin bir karşılığı olduğunu göstermem mümkün olur. Ama ben bunu yapmayacağım. Bugün isteyen herkes istediği kişi hakkında bilgiye basit bir arama ile ulaşabilir.

Yazı biraz uzun; Direkt konuya girelim vakit kaybetmeyelim isterseniz.
1. En fazla 3 yılda bir kendini yenilemek zorundasın
Yazılım geliştirme dünyanın en keyifli işlerinden birisidir. Hayal ettiğiniz bir fikri, bir ürüne dönüştürebilmek ve hatta bu üründen para kazanabilmek muhteşem bir yetenek. Fırsatlar sonsuz. Kısıtlı olan tek şey var: “zaman”.
Zaman parametresini düşünerek, pek çok kişi, en doğru framework, en doğru programlama dili, en doğru teknolojiye yatırım yapmaya çalışıyor. Bundan 3–5 sene önce React Native’in bu kadar popüler olacağını öngören kişiler şu anda gayet mutlu. Ya da DevOps uzmanı konusunda pazarda ciddi bir açık söz konusu. Erken uyanan kişiler şu an anlamlı paralar kazanıyorlar. İyi ama belki de siz 10 sene önce Java uzmanı olarak piyasanın tozunu attırıyordunuz değil mi? O konferanstan bu konferansa konuşmacı katılırken ne oldu da unutuldunuz?
Bunun sebebi, teknolojinin hızlı eskimesi, cool olmaktan çıkması. Eğer bir teknolojinin erken keşfeden (early-adopter) denilen kitlesi içindeyseniz o teknoloji ana akım (mainstream) olduğunda siz de kazananlardan olursunuz. Bir teknoloji artık olgun kıvama geldikten sonra, ağzınızla kuş tutsanız da ortalama bir başarıdan fazlası gelmez.
Bu nedenle en geç 2–3 yılda bir sektörü iyi analiz edip, kendinizi tamamen yenilemelisiniz. Sizi emekli edebilecek bir teknoloji mevcut değil. Bugün Python yazıyor olabilirsiniz. Yarın Rust, belki de 5 sene sonra Julia yazıyor olacaksınız.
Eğer kendinizi 3 yılda bir sıfırdan yaratmazsanız, 40 yaşını geçtiğinizde gençlerin ak saçlı/sakallı “demode” yazılımcı amcalar/teyzeler dedikleri kategoriye düşersiniz.
2. Okulda öğrendikleriniz anlamsız değil ama sizi emekli etmeye yetmez
Ben bu işin mekteplilerindenim. Okula 1995 yılında girdiğim düşünülürse üniversitede okuduğum programlama dillerinin ve teknolojilerin ne kadar demode olduğunu tahmin edebilirsiniz. Örneğin; IBM Mainframe’de OS/360 üzerinde 2 yıla yakın süre Assembly yazdığımı söylersem ne demek istediğimi anlarsınız umuyorum. Fortran, PL/1, Pascal, C++ vs… ile epey zaman geçirdik ama bugün kendi kodumu görsem tanımam.
O gün kısıtlı imkanlarla da işimizi görüyorduk ama tabii ki bugün okulda öğrendiğim teknolojilerden neredeyse hiçbirisini günlük hayatımda kullanmıyorum. Perl ile web sitesi kodlamak artık çok anlamsız veya 2020 yılını bitirirken Pascal ile prosedürel bir konsol uygulaması yapıp hayatını kazanan hiç kimseyi tanımıyorum.
Peki boşuna mı okuduk onca sene?… Tabii ki hayır.
İşin mantığını ve temelini aldık. Gerisi kendi yeteneklerimiz ile 1. maddede söylediğim gibi kendi kişisel çabalarımızla kendimizi yenilemekten ibaret.
Son 1–2 yıldır Python kodluyorum. Ondan önceki 3–4 yıl da Clojure yazdım. Daha evvel Groovy, Java, C/C++, Ruby, Objective-C ve daha onlarca dil geldi geçti. Mantıkları üç aşağı beş yukarı hep aynıydı. Smalltalk’a benzeyen diller, C’ye benzeyen diller ve Lisp’e benzeyen diller vs… vs… Bunlardan bir tanesini çözdüğünüz anda yeni bir dili ve framework’ü öğrenmek bir kaç haftalık bir efor.
Bu işin mektebini okudum ama bugün kullandığım teknolojilerin tamamını, aynen bir alaylı gibi, kendim öğrenmek zorunda kaldım.
Bu eforu gösterme cesaretini gösterebilirseniz her şey çok kolay. Bugün sanki sizi 20 yıl sonra da doyuracakmış gibi görünen Go, Ruby, Python, Nodejs vs… her ne olursa olsun, çok güvenirseniz bu dediğimi hatırlayın lütfen. 5–10 sene sonra bunların esamesi dahi okunmazsa hiç şaşırmayın.
3. İşin temellerine kafa yorun
Yeni nesil yazılım geliştiricilerde framework’lere yönelik karşı konulamaz bir sempati gözlemliyorum. Evet tabii ki hepimiz framework’ler kullanıyoruz. Bugün oturup da Python’da web geliştirme yaparken, port 80'de dinleyen bir TCP soket uygulaması yapacak halimiz yok. Oturur Flask ya da Django kullanırız, detayları atlarız geçeriz.
Benzer şekilde, oturup da Javascript’i doğrudan kullanmak da kahramanlık olur. İşin ihtiyacına göre React, Vue, Angular veya hatta jQuery, hangisi uygunsa kullanırsınız. Bunda yanlış bir şey yok. Hatta bundan başka doğru yok.
Ancak, bu durum sizleri biraz tembelliğe itebilir. HTTP protokolünün nasıl çalıştığını (RFC 2616) anlamazsanız, bir client server uygulama geliştirirken, soket nasıl açılır, thread nasıl yönetilir, çekirdek sayısı, bellek ve process arasındaki ilişkiyi nasıl kurarsınız bilmezseniz kullandığınız framework’e gereksiz rol yüklersiniz. Onu yeterince iyi optimize edemezsiniz. Er ya da geç de duvara toslar ve nihayet çözemediğiniz bir sorun masanızda durur.
İyi bir yazılım geliştirici, mektepli veya alaylı fark etmez, mutlaka ama mutlaka ileri derecede algoritma (algorithms) ve veri yapıları (data structures) derslerini almalıdır. Bugün bu derslere Coursera veya Udemy’de her yerden ulaşabilirsiniz.
Misal; graph theory nedir bilmeden hayatınızı elbette ki sürdürebilirsiniz ama bilirseniz çok daha iyi bir yazılımcı olacağınıza dair garanti verebilirim.
4. Kendinizi geliştirebileceğiniz şirketlerde çalışın
Aldığımız o ilk maaşın tadı farklıdır. O an artık, finansal özgürlüğümüzü ilan ettiğimiz andır. Artık zaman üç beş kuruş kenara koyup bir ev araba almak için para biriktirme zamanıdır. Bu nedenle iş seçerken kriterlerden bir tanesinin “maaş kriteri” olması gayet doğaldır.
İşte burada bir denge gerekli. Para elbette ki önemli ama ilk motivasyon haline gelirse, o zaman uzun vadede kaybedenlerden olacağınızın garantisini verebilirim. Bugün sektör, bir zamanlar piramidin en tepesinde maaş alan ama artık tamamen unutulmuş yazılımcılar/yöneticiler ile dolu.
Yazılımcılık havalı bir iş gibi görünse de aslında sanayide kaporta işçiliğinden çok da farklı değil. Orada da usta, çırak kalfa ilişkisi var burada da. Aynı işi demire çekiç vurur gibi, binlerce kez yapacaksınız ki artık o kod bloğunu sorunsuz yazmak sizin için refleks halini alsın.
Eğer mesleğe başlarken ustanızı doğru seçmezseniz, kalfa olduğunuzda bilgiler kafanızda yeterince pekişmemiş olur. Geleceği olan teknolojileri kullanan bir şirkette değilseniz, kendinizi geliştiremezsiniz. Belki iyi maaş alırsınız ama körelir gidersiniz.
Açın Linkedin’i bakın dilerseniz. Acaip havalı ünvanların arkasında gelişen teknolojilerin gerçeklerinden kopmuş binlerce insan göreceksiniz. Belki bir kısmı iyi maaşlar da alıyor olabilirler. Ama hayatları o kadar stresli ki. Çünkü biliyorlar ki, eğer çalıştıkları şirket onları kovarsa başka bir yerde salt bilgi ve beceresini kullanarak iş bulmaları artık imkansız.
Yine doğrusunu siz bilirsiniz ama bence, 3–5 kuruş para için iş değiştirmeyin. Yeni bir teknoloji öğrenmek için yapın bunu. Ya da daha iyi bir ustanın çırağı olmak için. Yeni ve sizden daha büyük bir vizyonun sahibi bir şirketin parçası olmak için iş değiştirin. Bu yatırımın dönüşünü er ya da geç alacaksınız. %100 eminim.
5. Müdür de olsanız yazılım geliştirmeyi bırakmayın
Sektörde 5–10 yılını tamamladıktan sonra iyi yazılımcıların terfi alıp yöneticilere dönüşmesi doğal bir sonuç. Artık siz de sizi takip eden kişiler yetiştireceksiniz. Onlara eşlik edip, hatalarından öğrenmelerini ve daha iyi yazılımcılar olmalarını sağlayacaksınız.
Ama maalesef kültürümüzün kötü yönlerinden birisi de burada devreye giriyor. Evet: Müdür gibi müdür olmayı kastediyorum. “Ben artık müdür oldum, kod yazmam”, “ben söylüyorum çocuklar yazıyorlar” diyen yöneticilerden o kadar çok gördüm ki. Bunu da sanki marifetmiş gibi anlatıyorlar ama aslında çok büyük bir hata yapıyorlar.
Müdürlük bir meslek değildir. O şirketin size verdiği bir ünvan, bir görevdir ve o şirkette çalıştığınız süre için geçerlidir. Şirket sizi kapının önüne koyduğu anda hiç bir anlamı yoktur.
Peki o şirketin kapısından dışarı adım attığınız anda, siz artık nesiniz?
Ben buna berber koltuğu testi diyorum. Berber koltuğuna oturduğunuz zaman, “abi/abla ne iş yapıyorsun?” diye sorduğunda “falan filan şirketinde müdürüm”, “bilmem ne şirketinde genel müdür yardımcısıyım” diyorsanız — bence- hata yapıyorsunuz. Ben bir şirketin size verdiği bir rolün sizi siz yapan becerinin önüne geçmemesi gerektiğini düşünüyorum.
Kariyerimin ilk günlerinden beri, en alt kademeden en üst kademelere kadar çok çeşitli rollerde görev yaptım. Mesleğimden kopmamı fazlasıyla motive eden hijyen koşullarına da sahip oldum ve hatta kimi zaman gerçekten çok zorlayıcı olsa da mesleğimden kopmamaya gayret ettim. 8 saat yönetim kurulu toplantısından da çıksam akşam eve gittiğimde açtım hobi projem için kod yazmaya devam ettim. Şu anda bunun ne kadar doğru bir karar olduğunu anlatmam yazılı olarak imkansız. Anlatmaya çalışırsam da çirkin olur. Eğer bir gün yüzyüze tanışırsak, orada takdim ederim.
6. Paylaşmaktan çekinmeyin
Yazılım geliştirmek eskiden “asosyal” bir aktivite gibi görünürdü. Kafasına kapşonlu hoodie’sini giyen dağınık saçlı gençler evin garajında oturup dünyayı (güyya) değiştirebiliyorlardı. Bugün bu dönem çok geride kaldı.
Yazılım geliştirme, çevik prensipler (agile principles) ile birlikte artık son derece sosyal yüzlerce/binlerce kişiyle birlikte yapılan bir aktivite halini aldı. Sosyal yetenekleri gelişmemiş kişilerin bu meslekte en üst kademelere gelmeleri bence mümkün değil. Sunum yapmayı bilmek, doküman yazabilmek, takım arkadaşına sorunu doğru dille anlatabilmek, toksik kişilerle mücadele etmek de bu işin bir parçası.
Ancak esas mesele, birden fazla kişinin tek bir projede çalıştığı zamanlarda ortaya çıkıyor. Pandemi sonrasında, yazılımcıların çoğu uzaktan çalışıyorken böyle bir ortamda bir arada proje yapmak ayrıca zorlaştı. Kendinizi bu tarz bir paylaşım ortamına hazırlamadıysanız, başarı şansınız çok düşük.
Neleri paylaşacaksınız;
- Kodlarınızı paylaşın (açık kaynak kodlu projeler yapın)
- Bilgiyi paylaşın (webcast, podcast, etkinliklerde konuşmacı olun)
- Deneyim paylaşın (şu anda ben de bunu yapıyorum)
Bu liste elbette ki uzayabilir. Siz de kendinize en uygun yöntemi seçip paylaşmaya başlarsanız, faydasını en kısa sürede göreceksiniz. Mesela ben bugün bu yazı sayesinde seninle tanıştım. Sizce de güzel bir şey değil mi bu?
7. Özgeçmiş hazırlamak yerine proje portfölyosu hazırlayın
Oldum olası CV hazırlamayı çok demode ve hatta biraz da kısıtlayıcı bulmuşumdur. Belki bazı meslek kolları için uygun olabilir ama yazılım işini bir CV’de nasıl daha iyi anlatabilirim bilemiyorum.
Bunun nedeni belki de aslında yaptığımız işin sanat (art) ve bilim (science) arasında bir yerlerde duruyor olmasındandır. Bir teknik sorunu çözmenin yüzlerce binlerce yolu varken, siz en estetik, en ekonomik, en ölçeklenebilir ve en hızlı çözümünü bulmaya çalışıyorsunuz. Eğer mesleğinizi seviyorsanız, içine biraz da sevgi katıyorsunuz. Bu da işin sanat kısmı. İyi de ben bunu CV’mde nasıl anlatabilirim?
Çözümü çok basit. Geçmişinizi yaptığınız projelerle anlatmayı deneyin. Burada 4. maddeye de gönderme yapayım. Çalıştığınız işyeri, yaptığınız proje bugün milyonlar tarafından kullanılıyorsa CV yapmanıza bir daha gerek kalmayabilir.
Eğer bu aşamada değilseniz, bir Github profili hazırlayarak başlayın. Hobi projeleriniz olsun. Açık kaynak koduyla projelerinizi insanlar ile paylaşın. En son (cutting edge) teknolojileri burada test edin. İnsanlar er ya da geç gelip sizi keşfedeceklerdir.
Bugün tech recruiter’ların çok büyük bir kısmı mülakat yapmadan önce kişinin sosyal medya ve Github varlığına göz atıyorlar. Eğer burada o kişileri etkilerseniz CV’niz üzerinde konuşulacak basit bir kağıttan öteye gitmez. Gitmesine gerek de kalmaz.
8. Okul seçimi ve notlara çok da fazla kafayı takmayın
Bugün bence kendisini bu işe adamış herkes yazılımcı olabilir. Internet’te bilgisayar bilimleri namına her şeyin ücretsiz ya da makul ücretli eğitimleri var. 3–4 sene kafayı kıran herkes her şeyi öğrenir.
Ve hatta; Bundan 15-20 sene sonra üniversitelerin büyük bir dönüşüme gitmek zorunda kalacaklarına inanıyorum. Artık 4 sene boyunca bir yere kapanıp, akademisyenlerden eğitim alarak ideal mühendislerin ortaya çıkmayacağını hepimiz görebiliyoruz. Çünkü; bu iş ancak akademik ve pratik bilginin doğru kombinasyonu ile ortaya çıkıyor.
Eğer piramidin en tepesindeki 3–5 okuldan bir tanesine girme şansınız yoksa okuduğunuz okul A olmuş B olmuş çok da bir anlamı yok. Mezun olduğunuz notun da açıkçası değeri pek kalmadı. 25 yıldır bu sektördeyim, notumu hiç kimse sormadı. Sorsaydı belki de beni kimse işe almazdı zaten.
Üniversitedeyken bu mesleği öğrenmek için bir daha elinize geçmeyecek harika bir zamanınız var. Bu süreyi staj yaparak, doğru ustanın yanında meslek öğrenerek, doğru teknolojileri test ederek, kendinize proje portfölyosu yaparak geçirin. Okuldan almanız gerekeni elbette alın, ama %10–20 daha iyi bir ortalama yapacağım diye boş yere pratik hayattan kopmayın. İkisinin arasındaki doğru dengeyi korumak her şeyden daha önemli.
9. İngilizce’ye yatırım yapın
Bu meslek İngilizce bilmeden başarılı bir şekilde yapılamaz. Çok net konuştum farkındaysanız. Evet iddialı ama kesinlikle bu kadar netim. İngilizce’niz yoksa veya öğrenmeyi düşünmüyorsanız, gidin başka meslek yapın.
Türkçe kaynak bulamazsınız, bulsanız da güncelliği tartışmalı olur. İletişim ve etkileşim içinde olacağınız insanlar yurt dışındadır, açık kaynak komunitelere girmek istersiniz herkes İngilizce konuşur vs… vs…
Yazımın en başından beri söylediğim gibi. Bu meslekte başarının sırrı her 2–3 yılda bir kendini baştan yaratmaktan geçiyor. Bunu yapabilmenin tek yolu da kendi kendine öğrenebilme yeteneğini geliştirmiş olmaktır. İngilizceniz yeterli değilse, Internet’teki kaynakları kullanmanız imkansız olur.
Ne yapıp edin. Kendinize yatırım yapın. İngilizce öğrenin.
10. Her şeyi öğrenmeye çalışmayın
Her gün yeni bir framework çıkıyor. Yeni teknolojiler bizi fazlasıyla cezbediyor. Bu duyguları yaşayan ilk kişiler siz değilsiniz, son da olmayacaksınız.
Piyasada çok sevdiğim bir arkadaşımın “barakuda yazılımcı” diye adlandırdığı bir tarz yazılımcı profili var. Barakuda kayaların oyuklarında yaşayan uzun ince bir balıktır. Kuytusunda avını bekler, uygun zaman gelince hızlı bir şekilde saldırır. Ama parlayan şeylere karşı bir zaafiyeti vardır. Barakuda saldırısına uğramak istemiyorsanız parlak nesnelerle suya girmemeye dikkat etmenizi öneririm.
Yeni teknolojiler de kimi zaman pırıl pırıl parlayan şeylerdir. Stackoverflow’da gördüm, yeni bir JS framework’ü çıkmış, hemen öğrenmeliyim diyip iki tane tutorial okuyup çalıştığı şirketi bu yeni framework’e migrate etmeye çalışan insanlarla dolu ortalık.
Burada iki tane temel hata var.
- Tutorial ile yeni bir teknoloji öğrenilmez. Sadece tanımayı sağlar. Eğer detaylı öğrenmek istiyorsanız tek yöntem, onunla yeterli zamanı geçirmek, kod yazmak, bir projeyi bitirmek ve onu kullanmaktır.
- Ticari işletmeler son teknoloji (cutting edge) teknolojileri kullanmak için ideal yerler değildir. Yeni teknolojilerin %80–90'ı 3 yılı görmeden yeterli komuniteyi arkasına alamadığı için yok olur gider. Şirketinizi bu çıkmaza sokmamalısınız. Ayrıca yeni teknolojilerin oturmuş hale gelmeleri için bir zaman geçmesi gerekir. O zamana kadar en havalı teknolojilerin bile arkasında çok sayıda bug çıkar. Bu bugları ticari faaliyetler kaldıramıyor olabilir.
En güncel teknolojileri öğrenmek istiyorsanız, o teknolojileri kısaca araştırın, zaman yatırımı yapmaya değecek olanlarına zaman ayırıp kod yazın, bir proje yapın, Github profilinizde açık kaynak (open source) paylaşın. Bu teknolojilerden bir ya da bir kaç tanesinin olgunluğundan emin olduğunuzda çalıştığınız şirkete empoze etmeye başlayabilirsiniz.
Benden şimdilik bu kadar…
Umarım bu yazı bu mesleğe yeni adım atan kişilere bir nebze de olsa katkı sağlar. Benimle aynı görüşte olmayabilirsiniz. Ya da kendiniz de bir şeyler eklemek isteyebilirsiniz. Yorumlarınızı lütfen esirgemeyiniz.
Eğer dilerseniz de benimle Linkedin veya Twitter üzerinden iletişime geçebilirsiniz.