Yazılımda GERÇEKTEN ilerlemek isteyenler için tavsiyeler

İnsan zihni muhteşem bir üretkenliğe sahiptir. Öte yandan, var olan her şey gibi insan zihni de evrenin yasalarına tabiidir. Üreten, tüketen ve dış ortamla etkileşime giren her şey gibi, insan zihni de bir açık sistemdir.

Termodinamiğin yasalarından hatırlayacağınız üzere, açık bir sistemin entropisini koruması – yani zihnini stabil tutması ve üretken kalması- için sürekli dışarıdan takviye yapması gerekmektedir. Aksi halde sistem (zihin), düzensizliğe yenilir. Dolayısıyla üretkenliğini tamamen kaybeder.

Bizim – her üretken zihin gibi – dışarıdan almamız gereken; ilham, motivasyon ve misyondur.

Doğadan, evrenden, diğer insanların ürettiklerinden ilham alırız.

Bizi destekleyenlerden, müttefiklerimizden, düşmanlarımızdan motivasyon alırız.

Yaşantımız, yaşam şartlarımız ve çevremiz ile misyon belirleriz.

İşte zihnimiz, dışa dönük bu üç elementini yakıt olarak kullanır ve üretkenliğini korumaya çalışır. Eğer zihnimizin üretkenliğini sağlayacak kadar yakıta sahip değilsek, önce bu yakıtı kendimize sağlamalı ve ikmal yapmalıyız.

Yazılım ve matematiğin, zihnin saf bir ürünü olduğunu hesaba katacak olursak, yukarıda saydıklarımızı pratik olarak hayatımızda uygulamanın; yazılım (veya başka bir zihinsel beceride) ustalaşmak için uygulamamız gereken kilometre taşları olduğunu anlarız.

Değerli okurlarım, bu yazımda, işte bu eksenden başlayarak nasıl kendimizi daha fazla geliştirebileceğimizi tartışacağız 🙂

1) Yazılımda nasıl GELİŞEBİLİRİM?

Gelişmek, buradaki anahtar kelime bu. Yazımın başında bahsettiğim kavramları hatırlayalım. İlham-motivasyon-misyon.

Biz bu üç yakıtı da zihnimize daha fazla sağlamayı başarabilirsek, her zihinsel beceri gibi yazılım geliştirme yeteneğimiz de olağanüstü bir artış gösterecektir. Peki, bu kavramları nasıl edineceğimizden kısaca bahsedelim.

İlham;

daha önce bahsettiğim gibi doğadan, diğer insanların ürettiklerinden, sanattan edindiğimiz ruhun kendisidir. İlk iş olarak zarif ve büyüleyici bir ilham kaynağı edinmeliyiz.

5 dakikalığına gözünüzü kapatın ve şimdiye kadar dünyada yazılım namına geliştirilmiş tüm çalışmaları düşünün. Ne kadar zor, ne kadar büyük olduğunu hesaba katmadan yapın bunu. Sadece siz de oradaymışsınız gibi, işin bir parçasıymışsınız gibi hayal edin. İşin başarılı olduğunu düşünün.

Mark Zuckerberg, Facebook’u geliştirme aşamasındayken

Hangi projeyi hayal ettiniz ?

O proje sizin ilham kaynağınızdır. Eğer fazla zor bir şey seçtiyseniz, daha basit bir seçim yapıp tekrar deneyin. Örneğin Instagram’dan, Google’dan ilham alın. Bu projelerin geliştirilme sürecinin bir parçası olmak istemez miydiniz ?

Misyon;

Misyon; bir, üç ve altı aylık bireysel kalkınma planınızdır. Bu planlar, neticede yıllar sonra sahip olmak istediğiniz kazanımlara veya elde etmek istediğiniz bir kariyer hayaline dayanır. Dolayısı ile misyonunuz, motivasyondan güç alır.

Kendinize bir misyon seçin ve bunu basitten karmaşığa yuvarlayın. Örneğin siz yeni başlayan bir yazılımcısınız. İlerde de bir girişimci olmak, kendi işinizi kurmak istiyorsunuz. Boş muhabbet yaparak yada konferans konferans gezerek bunun olmayacağını nihayet anladınız.

Oturmaya ve geceler boyu çalışmaya karar verdiniz. Gözünüze zaten var olan bir projeyi kestirin. Ne kadar yazılım bildiğinizin veya bilmediğinizin bir önemi yok. Hayatınızın ileri bir safhasında, kendinizi gerçekleştirmiş olarak hissetmek için hangi uygulamayı geliştirmek isterdiniz ?

Ben, yazıma spotify örneği ile devam etmek istiyorum.

Yeni başlayan ama neredeyse hiçbir şey bilmeyen birisi olalım. Uygulamamız hem android hem IOS’da çalışsın istiyoruz. O zaman Flutter’ da yapacağız. İlk adım olarak flutter kursları ve birkaç flutter kitabı alırız. Evvela ekrana yazı yazdırmayı, bir tuşa dokununca uyarı çıkmasını felan sağlarız.

Peki, ilk hedefimiz, hayalimiz Spotify idi. Oraya kadar nasıl ulaşacağız ?

Emin olun, ufuk çizgisinin ötesinde gördüğünüz o şirketlerle aranızda dağlar kadar fark yok. İlk işimiz mobil uygulamamızda müzik çalmak. Öyleyse Stackoverflow’da, Google’da, Github’da arıyoruz. “How to make a sound player in Flutter

Bakın; öylesine bir hayal, öylesine bir problem uydurdum ve internette aradım. Bunun çözümü dahi kolayca önüme geldi.

Bir sonraki adım, hesap oluşturma ve giriş yapmak olsun. Firebase kullanmayı Google’dan öğrendik. Daha sonra stackoverflow’dan firebase ile flutter arasında bağlantı kurmayı öğrendik. Daha sonra kullanıcılar giriş yaptı ancak kim hangi müziklere erişecek ?

Veri tabanına mp3 dosyaları koymayı öğrendik. Derken hemen ardından uygulamanın mp3 dosyasını çalabilmesi için indirmesi gerekiyor. Arka planda indirmeyi öğrendik. İndirmişken, uygulamanın depolama alanını kullanmak gerekiyor. Araştırırken bunları da öğrendik.

Öğrendik öğrendik öğrendik…

Yaptığımız uygulama hiçbir zaman spotify’dan daha iyi olmayacak. Ancak durun, üzülmeyin !

Hedef yazılıma sağlam bir başlangıç yapmak değil miydi ? Oysa şimdi elimizdekilere bakın. Bence sağlam bir giriş yapmış olduk.

Motivasyon;

Umarım bir üst başlık size motivasyon ve özgüven sağlamıştır. Ancak bazen insanlar dış motivasyona çok bağımlı olur. Yani, kendi motivasyonunu üretemez ve üretkenliğinin devamını sağlamak için kendini sürekli dışarıdan motivasyon ithal etmek durumunda hisseder.

Bunun için genelde kanaat önderleri çevresinde toplanırlar. Bu, çoğunlukla bir hatalar zincirine sebep olur. Ancak çoğu kişi bu durumu uzun süre boyunca fark edemez.

Unutmayın ki, başarılı olmak için yapmamız gerekenler kadar YAPMAMAMIZ gerekenler de önemlidir. İç motivasyonu koruyabilmemiz ve kendi motivasyonumuzu kendi başımıza üretebilmemiz için buna ihtiyacımız var.

2) Peki, üretici motivasyonu korumak için ne yapmamalıyız ?

Yazılım camiasında üretici motivasyonu düşüren en yaygın hata, sahte tatmin sendromudur.

İlk defa duymuş olabilirsiniz. Sizin için açıklayayım; basitçe ilerlemekte olan bir süreci tamamlamadan, tamamlamış gibi kendimizi kandırma durumudur.

Kendimiz için uğraştırıcı bir yazılım projesi yapmak, bir yazılım dilini (Veya bir yabancı dili) öğrenmek gibi uzun süreçli işler kariyerimizde muhakkak olacaktır. Bu süreçleri tamamlamak için kararlılık ve sürekli motivasyona ihtiyaç duyarız. Zaman zaman iç motivasyonumuz ilerleme konusunda artış veya azalış gösterebilir.

İnsan zihninde motivasyonun zamana göre değişimi, basitçe sinüs grafiği gibidir. Asla sabit durmaz. Daima artış veya azalış eğilimindedir. Motivasyonumuzun alt tabana ulaştığı durumlarda gerçekten çalışmak bizim için zorlaşabilir.

Bu durumu bildiğimizden, motivasyonumuzu desteklemesi için yaptığımız iş daha bitmeden sağa sola sızdırma ve başkalarını haberdar etme ihtiyacı duyabiliriz.

Motivasyonumuzun azaldığı durumlarda en sık yapılan hata da işte bu sahte tatmin durumudur.

Henüz yaptığınız projeyi bitirmeden, kodlarının ekranını çekip instagram’a story atmak veya uygulamanız için bir twitter sayfası açmak, uygulamanızdan arkadaşlarınıza bahsetmenin nasıl bir zararı olabilir ki ?

Çok.

Devam etmek için motivasyona ihtiyacınız var. Ancak motivasyonunuzun düştüğü anlarda kolay yolu tercih edip, uğraşınızı diğer insanlara duyurma yoluna giderseniz; beyniniz sanki süreci tamamlamışsınız gibi sizi ödüllendirir, dopamin salgılar.

Oysa, sürecin devam etmesi gerekiyor. Ancak siz çoktan iç dünyanızda ödülünüzü aldınız bile. Doğal olarak yaşanan tahmin hissi ile birlikte daha fazla çalışmak ve gayrette istikrar sağlamak sizin için daha da zorlaşacaktır.

Bu da, bir süre sonra bıkıp işlerinizi yarım bırakmanıza sebep olabilir. İşte, yazılıma büyük başlayan kişilerin ilerleyememesinin ardındaki en önemli sebep de budur.

Dişini sıkıp çalışmaya devam eden birisi, uygulamasını yayınladığında çok daha büyük bir tatmin hissi yaşayacaktır. Öyle ki, yaşadığı tatmin hissi ve kazandığı motivasyon, bir sonraki projesinin de ana yakıtı olacaktır.

Ancak; henüz yaptığı iş bitmeden etrafa duyuranlar, paylaşanlar ise giderek sahte tatmine daha da bağımlı olurlar.

Neden ?

Çünkü insanı hareket ettiren yegane yakıt, motivasyondur. Bir iş sürecini tamamlayacak kadar motivasyon iradesi olmayan kişiler, iş ortasında kırık kırpık motivasyonlara ihtiyaç duyar. Buna sürekli ve tekrarlı olarak ihtiyaç duyar. Sürekli motivasyon nakli ihtiyacı, karşılaşılan zorluklar karşısında kişiyi dirayetsiz hale getirdiğinden ERKEN TATMİN SENDROMU kesinlikle dikkat etmeniz gereken bir mesele.

Aslında bu yazının ana fikri en basitinden beri buydu.

Yazılım üzerine çalışan ve gerçekten büyük projeler, kütüphane geliştiren insanlar da var. Bunun yanında sürekli başlangıç seviyesi eğitimler verenler, setupcular, yazılıma nasıl başlarımcılar, twitter fenomeni veya podcast’ci yazılımcılar da var.

“Setupcu”. Sanırım onlardan böyle bahsedebilirim.

Sürekli sosyal medyada arkada kod ekranı, birden fazla ekran, masada incik boncuk paylaşan birisini görüyorsan, bu kişi büyük bir ihtimalle bir “Setupcu”dur.

Bu arkadaşların fotoğraflarında; siyah idede kod (veya terminal) açık olur. Buna binaen; muhakkak çay, kahve, gibi içeceklerin veya frenchpress gibi alet edevatların olması da elzemdir.

Tıpkı erken tatmin sendromunu ele aldığımız şekilde, bu işlerle ilgilenen arkadaşların canı sıkılmış, bu doğal bir şey. Belki bazıları işinden sıkıldı, belki bazıları yazılımda yeterince gelişemedi ve içindeki açığı bu şekilde kapatmak istedi…

Öyle veya böyle, bu arkadaşlar kendilerine oyalanacak bir meşgale bulmuşlar. Ancak sen gerçekten; bu yazıyı okuyorsan yazılımda GERÇEKTEN ilerlemek istiyorsun demektir. Setupçu, twittercı, podcast’ci ve benzeri arkadaşların peşine takılmak, onları akıl hocası seçmek senin için bir ‘bubi tuzağı’ etkisi yaratacaktır.

Bu arkadaşların gerçek icraatı sandığınızın aksine “yazılımın en köküne inmek, R&D yapmak, yazılım hakkında çok bilgili olmak, insanlara bir şey öğretmek” değil.

Bilakis; yazılımcıyım, bakın kod yazıyorum, yazılım, uWu bakın nasıl havalıyım diye ortada dolanmak.

Dolayısı ile bu yazının en önemli bölümü olan “sahte tatmin” durumundan uzak durmalısın.

Şu Sahte Tatmin Meselesini İrdeleyelim

“Fake it till you make it”

Kısacası bir işi yapana kadar yapıyormuş gibi taklit et anlamına gelir. “Ancak yapmadığın işin havasını at” anlamına gelmez. Bu nedenle unutmayınız ki taklidin suyunu kaçırırsanız isin sonu maalesef “fake it” aşamasında kalır.

Setupcu arkadaşların da yaşadığı budur. Gerçekten kendini geliştirmiş bir yazılım mühendisi; yaptığı iş tıkır tıkır, sanki bir isviçre saati gibi çalışmadığı ve kendisini gururlandırmadığı sürece kolay kolay tatmin olmaz. Aklına gelen yazılım fikrini projeye döküp çalıştığını görene kadar geceleri uyuyamaz.

Oysa ki; bu setupcu arkadaşlar aynı tatmin hissini yasamak için kahve, yeşil kod ekranı ve dark ide kullanıyor.

Bu nedenle tecrübemle sizlere söylüyorum ki; ileri seviye bir proje geliştirmiş veya bilime katkı sağlayacak yüksek teknoloji çalışmalara imza atmış tek bir “setupcu” gösteremezsiniz bana.

Bu arkadaşların ufku genelde frenchpress ve yeşil ışıklı klavyede tükeniyor.

Değerli okurlarım; size tavsiyem, yazılıma başlamak istiyorsanız bir kitap veya bir eğitim alın. Daha sonra kendinize nispeten erişilebilir bir projeyi hedef olarak belirleyin ve çalışmaya başlayın.

Yani uzun lafın kısası, gerçekten yazılımda kendinizi geliştirmek istiyorsanız yazılım yazmaya başlayın. Instagram butikleri gibi ortada dolanmayın.

3) Talk is cheap, show me the code !

Yazılıma yeni başlayanlar, deneyimi olmayanlar ve hatta bazen kıdemli yazılımcılar dahi sıklıkla “şu programlama dili iyidir, bu dil daha kötüdür” diye tartışmaya kapılıyorlar.

Gerçekte; bir dilin başka bir dile üstünlüğü yoktur. Syntax (Sözdimizi) nin daha kolay olması, daha fazla yerde kullanılabilmesi veya low level’ da (Donanım üzerinde) çalışma hızının iyi olması, doğrudan bir dili diğerlerinden daha iyi yapmaz, yapamaz.

Geliştireceğiniz projeye göre avantajlı ve dezavantajlı durumlar vardır. Bunlar göz önünde bulundurularak örnegin; “web tabanlı bir blog uygulaması” projesi yapımında kullanılacak diller NodeJS, PHP, C# (.Net) veya Python (Flask-Django) olabilir.

Ancak gidip C++ ile sıfırdan bir HTTP server yazarak da blog sistemi geliştirebilirsiniz. Bazı diller, bazı işler için kolaylaştırılmış araçlara, kütüphanelere sahiptir. Bunları kullanarak -veya kullanmayarak- istediğiniz her projeyi her yazılım dilinde yapabilirsiniz. Çünkü unutmayın ki, bu kütüphaneleri bu yazılım dillerine geliştirenler de insan. Bunlar gökten inmiyor. Dolayısıyla eğer yoksa, siz de sıfırdan yapabilirsiniz.

Bu asla amelelik değildir. Bilakis, yukarıdaki verdiğim blog örneğini sıfırdan C++ ile yazan bir arkadaş; soket, tcp-ip, multi threading, http protokolü ve headerlar gibi onlarca çok değerli konu hakkında ciddi tecrübeler edinecektir. Üstelik projeyi yapabilmesi için bu tecrübeyi ister istemez edinecektir.

Yazılım, temelden yapıldıkça değerlenir. Kimse size oturun ve bir O.S kerneli geliştirin demiyor – Ki bana bunu diyen bile oldu 🙁 –

Bir şeyleri lego gibi birleştirip altta ne olduğunu bilmemektense, temelleri sağlam atarak öğrenmenin daha kıymetli olduğundan bahsetmek istiyorum sizlere.

Yazılım yazmak, esasen entropiyle savaşmaktır. Sonsuz olasılığın olduğu bir dünyada kendi algoritmanızı tasarlamaktır. Bu açıyla bakarsanız her bir sonraki projenizi final boss gibi görebilirsiniz.

Gerçekten, en basit yol varken sırf herkes kullandığı için daha kompleks veya daha yeni nesil bir teknoloji kullanman şart mı ? Önce bir düşün. Zorunlu değilsen, en basit yoldan yap. Önce alt seviyeyi tercih et. Neleri kullandığını soran insana cevap vermek zorunda değilsin, zira boş konuşmak için malzeme arıyor olabilir. Önemli olan, nasıl yaptığındır. Ne kullandığın değil. Önemli olan ürettiğin teknolojinin çalışıp çalışmadığıdır.

Zira her bir yazılım dili, bir diğerinin alternatifi olduğu için hiçbiri olmazsa olmaz değildir. Hangi dilin hangi konuda avantaj sağladığını bilmekte elbette büyük fayda var ancak siz, yeni başlayanlar olarak enerjinizi üretkenliğe harcamak ve karşılığında da zihnin üç elementini hasat etmek yerine bu gereksiz ve anlamsız tartışmalara harcarsanız; yalnızca yorulduğunuzla kalırsınız.

Daha sonra kendinizi Linkedin ‘de, Github’ da başkalarının projelerini tartışırken bulursunuz. Yani yazılımcı olacağım derken; donanım haber editörü gibi bir hale geldiğinizi fark ettiğinizde iş çok geç olabilir.

Çünkü biz son kullanıcı değiliz, üreticiyiz. Eğer yazılımcı olmayı seçtiysek biz üretmeliyiz, üretken kalmalıyız ve başkaları bizim ürettiğimiz teknolojiler hakkında konuşmalı. Ve emin olun, ülkemizde üretenden binlerce kat konuşan, yorumcu vardır. Eğer siz de yorumcu denizine katılırsanız, kendiniz kaybedersiniz.

İşte bu yüzden gereksiz tartışmalardan kaçının. Erken öten horozu keserler. Dün başladığınız projeyi bugün bitirmiş gibi sağda solda anlatmayın. Bu, sahte-tatmin yaşamanıza ve proje üzerindeki motivasyonunuzu kaybetmenize sebep olur.

Bitirene kadar gizli tutun. Hakkında konuşmayın. Enerjinizi gereksiz ve anlamsız muhabbetlere harcamaktansa susun ve kod yazın.

Başka yazılarda görüşmek üzere 🙂

Daha Fazla Kişiye Ulaşması İçin Bu İçeriği Paylaşabilirsiniz :

“Yazılımda GERÇEKTEN ilerlemek isteyenler için tavsiyeler” için bir yorum

  1. Özellikle ilham kısmındaki yazıların yaşanılmış gerçekliklerle bağlantılı olduğunu düşünüyorum. Ayrıca fizik yasalarıyla bir hedefi bağdaştırmayı çok mantıklı görüyorum. Motivasyonda sinüs dalgası benzetmesi çok iyi ancak her ne kadar ben de motivasyon kelimesini kullansam da, kelimenin kendisini pek sevmiyorum. Bir beklenti yaratıyor, bir karşılık gerektiriyor, andan uzaklaştırıyor. Dolayısıyla erken tatmin sendromu yanında (erken tatmin sendromu gerçekten büyük bir sorun) Yazıyı gerçekten çok beğendim. Hissedilerek yazılmış, etkili bir yazı olduğunu düşünüyorum.

Bir cevap yazın

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