Bir yazılım mühendisi olarak nasıl deneyim edinebilirsiniz?

ismail simsek
3 min readAug 24, 2019

--

Photo by Cytonn Photography

Deneyimli olmanın bir kısayolu yok, fakat aynı süre içerisinde yaşadığınız şeylerin etkisini arttıracak yöntemler var.

Makalenin İngilizce aslı: How to get experience as a software engineer

İşte işin sırrı: Ne kadar problem, o kadar deneyim

Yazılım Mühendisliği kariyerimde gözlemlediğim bir şey: Deneyimli olmanın bir kısayolu yok. Zamana yaymanız gerekiyor. Yani, vaktinizi deneyiminize etkin bir şekilde katkı sağlayarak geçirdiğinizi garanti etmek için yapabileceğiniz şeyler var ve şimdi bunlarla ilgili konuşacagız.

Deneyim nereden gelir?

Bazı insanlar deneyimin zamanla edinildiğini düşünüyor. Yani X Şirketinde Y yıl kadar çalıştıktan sonra gizemli bir şekilde deneyim edinirsin. Bu şekilde düşünen insanlar marifetli mühendisleri yanlış şekilde “deneyim eksikliği sebebiyle” reddeden insanlar. Fakat her ne kadar zaman ve deneyim ilişkili olsa da, zaman size bir mühendisin ne kadar deneyimli olduğunu ya da onların bellir mühendislik pozizyonunda nasıl performans göstereceğini söyleyemez.

“Teknik Deneyim” farklı durumları deneyimleyerek edinilir ve sonra bu deneyimlerden öğrenilenler gelecekteki benzer durumlara gösterilen tepkiyi geliştirir. “Durumları” “problemler/sorunlar” olarak da farzedebiliriz. Zaman içerisinde deneyim elde eden mühendislerin pek coğu kendilierini özellikle çeşit çeşit yazılım sorunlarına maruz bırakırlar ve bunların üstesinden gelmek ya da çözüm üretmek için sıkı çalısırlar.

Bu yüzden, eğer teknik deneyim seviyenizi arttırmak (ve yatırım yaptığınız zamanın faydasını arttırmak) istiyorsanız “sorun” arayın.

Sorunları nereden bulabilirim?

Bu ne tip bir deneyim istediğinize bağlı, fakat size bana kendi deneyimlerimi edinmemi sağlayan problemleri bulduğum bir kac yer söyleyebilirim: İş ve Açık Kaynak. Asla tükenmeyen ve sürekli büyüyen yazılım sorunları ile cebelleşen pek çok (kesinlikle herhangi biri için çalışmak isteyeceğim) şirket ve açık kaynak toplulukları var.

Tabi ki bahsettiğim “Hey, Github’dakı sorunları (issue) aciliyetlerine göre listelemede sıkıntı yaşıyorum. Bana bu problemi çözen bir uygulama geliştirir misin?” değil. Her ne kadar bu çözmek için oldukça güzel/büyük bir problem olsa da hatta size kesinlikle deneyim katacak olsa da bahsettiğim şey bu değil. Daha alt seviye problemlerden bahsediyorum. “Bu kod kütüphanesinde bir bug var” ya da “Bu test pek güvenilir değil” ya da “Uygulamayı yayınladığımızda, aldığımız ‘500’ hatalarında büyük bir artış oluyor” gibi şeyleri örnek verebiliriz. Bu gibi sorunlar her yerde ve neler döndüğünü anlamak için kaynak kodun derinliklerine dalmak gerekiyor.

Yapabileceğiniz bir başka şey ise özel bir konudaki problemler ile uğraşan belirli bir kişi olmak. Diyelim şirketinizde “Erişilebilirlik Uzmanı” olmak istiyorsunuz. konuyla ilgili biraz araştırma yapın ve şirket içinde küçük bir sunum yapın. İnsanlara size soru sormaları için açık kapı bırakın. Ne kadar çok soru alırsanız, o kadar farklı problemle karşılaşacak ve daha fazla araştırma yapmak zorunda kalacaksınız. Bu bir döngü.

Bir bakıma bu bana kodumu test ederken olan şey. Aslında hiç bir zaman “test edici kişi (tester)” olma niyetim yoktu, fakat deneyime dayanan bazı düşünceler edindim ve bunların hakkında konuşmaya başladım. Problemleri aramak zorunda kalmadan problemlerin bana gelmesi çok sürmedi. İnsanlar bana kendi problemlerini getirmeye başladılar ki bu beni daha deneyimli biri haline getirdi ve bu deneyimle TestingJavaScript.com sitesini hayata geçirdim. Bu site benim ve diğer insanların yaşadığı problemlerden edinilen tüm bilgi birikimini kapsıyor.

Problemleri deneyim kazanmak için nasıl kullanabilirim?

Çalıştığım ilk kütüphanelerden biri angular-formly idi. İhtiyacım olan bir özellik mevcut değildi ve ben de reaksiyon gösterdim. Belki, sessiz sedasız, kendi uygulamamı güçlendirmek için başka bir kütüpane kullanabilirdim. Bunun yerine kodu inceledim ve istediğim şeyin mümkün olduğunu gördüm. Sonra bununla ilgili bir sorun bildirimi yaptım. Daha sonra bunu kaynak koda yaptığım bir katkı takip etti. Bir kaç ay ve kod katkısından sonra kendimi kod bakımcısı (maintainer) olarak buldum ve bir süre sonrada ana kod bakımcısı (maintainer) oldum. Bu proje bana pek çok deneyim-edinme problemleri ve uluslararası konuşma fırsatı verdi. Web formlarının nasıl çalıştığı ve bir projeye nasıl bakım yapılacağı konusunda tabiri caizse bir TON şey öğrendim.

Bir problem mi buldunuz? EŞELEYİN. Eşeledikçe daha çok problemle mi karşılaştınız? Bu iyiye işaret. Çözülecek başka bir problemler buldunuz demektir. Tüm bu süreç size daha çok deneyim verecek. Bu gibi süreçler hakkında daha fazla şey için “Spelunking in node_modules (node_modules delhizlerine bir yolculuk) 👷” makalesini okuyun.

Başka bir şey: Bulduklarınızı dokümanlayın. Bulduklarınızı yazarak daha çok şey öğrenecek ve hatırlayacaksınız. Hatta daha iyisi ise bulduklarınızı güzel bir formda (blogda bir makale, youtube için bir video) insanlara sunmanız. Bu, size, varsayımlarınızı doğrulamanızı (ya da kendi putlarınızı kırmanızı) gerektirecek ve daha çok deneyim verecek.

Sonuç

Toparlarsak, çeşitli problemlerle karşılaşıp, bunları çözerek daha çok deneyim edinirsiniz. Beyniniz bir kas ve benzer problemleri çözerek daha iyi hale gelecek ve daha hazılıklı olacaktır.

Umarım bu yazı size olmak istediğiniz deneyimli mühendis olma yalunda yardımcı olur. Bol şans.

--

--