- Teknolojimizi ve sosyal becerilerimizi geliştirmek için çok çalışıyoruz. Ancak karakter özelliklerimiz, zihniyetimiz, bunları olduğu gibi kabul ediyoruz. Kim olduğumuzun doğuştan gelen, sabit bir parçası. Ve böylece otomatik pilotta çalışmasına izin verdik.
- Bu düşünce tarzı zararlıdır. Başarılı bir yazılım geliştirme kariyeri için zihniyetiniz yalnızca kritik öneme sahip değildir (belki becerilerinizden bile daha fazlasıdır), aynı zamanda kontrolünüz altındadır.
- Gerçek kıdemli geliştiriciler, karakter özelliklerinin şekillendirilebilir olduğunu, zihniyetlerinin farkında olduklarını ve kasıtlı olarak bunun üzerinde çalıştıklarını kabul eder. Bu onları kalabalığın arasından öne çıkaran ve kariyerlerini hızlandıran süper güçtür.
- Bu yazıda başarılı bir geliştiricinin en kritik 10 özelliğini, bunların neden önemli olduğunu tartışacağım ve bunları nasıl şekillendirebileceğinize dair birkaç ipucu paylaşacağım.
Profesyonel yazılım geliştirme, başarılı olmak için çeşitli yetenekler gerektiren karmaşık bir disiplindir. Bunları üç ana kategoriye ayırabiliriz:
Bu en belirgin gruptur. Başarılı bir geliştirici olmak için programlama dilleri ve çerçeveleri, temiz kod ilkeleri, mimari, test etme, hata ayıklama vb. konularda iyi olmanız gerekir. Ayrıca araçlarınız konusunda da becerikli olmanız gerekir: sürüm kontrolü, komut satırı ve IDE.
Ancak teknik beceriler tek başına sizi profesyonel, takıma dayalı bir kurulumda ileriye götürmez. Bu yüzden yumuşak becerilere de ihtiyacınız var.
Büyük, ticari projeler üzerinde çalışabilmek için sağlam bir dizi sosyal beceriye ihtiyacınız vardır: ekip çalışması, iletişim, proje yönetimi ve planlama, uzaktan çalışma, kendi kendini organize etme, öğrenme, kişisel üretkenlik ve benzeri.
Birçoğumuz bu becerileri teknik olanlardan daha az eğlenceli buluyoruz ve bu nedenle onları sıklıkla ihmal ediyoruz; böylece sağlam, profesyonel geliştiricileri zaten kalabalıktan ayırabiliyorlar. Ama en azından onları kabul ediyoruz.
Bununla birlikte, aynı derecede önemli olan ancak neredeyse tüm geliştiricilerin, hatta diğer açılardan iyi olanların bile radarına girmeyen üçüncü bir kategori daha var.
Zihniyet sosyal becerilere biraz benzer, ancak içerdiği "beceriler" daha temel, temel özelliklerdir: merak, sabır, empati, cesaret, uyum yeteneği vb.
Bir düzeyde, bu özelliklerin başarılı bir yazılım geliştirme kariyeri için önemli olduğunu biliyoruz. Ancak bunlar kişiliğimizin doğuştan gelen, sabit bir parçası gibi göründüklerinden, onları proje yönetimini veya kişisel üretkenlik tekniklerini öğrendiğimiz gibi kasıtlı olarak öğrenmeye çalışmayız.
Bu, beceri setimizin çok büyük ve önemli bir kısmını görmemizi engeller ve ilerlememize ciddi şekilde zarar verebilir.
[Profesyonel bir geliştirici olarak kariyerinizi ilerletmeye ilişkin daha kapsamlı bir bakış açısı için GitHub'daki "GERÇEK Kıdemli Geliştirici Olmaya İlişkin Kesin Kılavuz"a göz atın.]
Yazılım geliştirme karmaşık, bazen sinir bozucu ve inanılmaz derecede hızlı ilerleyen bir alandır. Bir geliştirici olarak öğrenmek, büyümek ve güncel kalmak (ve bu süreçte tükenmemek), karakter özelliklerinin belirli bir karışımını gerektirir.
Aynı zamanda %100 bir takım oyunudur. Yalnız kurt bilgisayar korsanlarının, teknik açıdan ne kadar iyi olursa olsun, profesyonel yazılım geliştirmede yeri yoktur. Ve bir takımda iyi işleyebilmek, görünüşte zıt olan başka bir dizi özellik gerektirir.
Zihniyet, becerilerden farklı bir şeydir. Çevik gelişim ilkelerini anlamak, uyarlanabilir ve sık değişime açık olmakla aynı şey değildir.
Hata ayıklama tekniklerini bilmek, tükenmeden veya cesaretiniz kırılmadan sorunu birkaç saat boyunca takip etmekten gerçekten keyif alacak merak ve ısrara sahip olmakla aynı şey değildir.
Ancak bu özellikler kişiliğimize sabit ve doğuştan gelmiş gibi görünse de, beceri olarak aynı derecede öğrenilebilirler.
Bir programcı için hangi özelliklerin kritik olduğunu anlamadan ve bunları zaman içinde kasıtlı olarak geliştirmeden, asla tam potansiyelinize ulaşamazsınız. Gerçek kıdemli geliştiriciler bunu biliyor, kendi zihniyetlerinin farkındalar ve sürekli olarak onu geliştirmek için çalışıyorlar.
Bu, en iyi geliştiricileri kalabalıktan ayıran, farklılaştırıcı, süper güçtür.
Tamam ama hangi özellikler en önemli? Ayrıntılara biraz daha derinlemesine dalalım.
Yazılım geliştirmenin ne olduğunu bir cümleyle özetlemem gerekse, öğrenmeyle ilgili olduğunu söylerdim. Sürekli gelişen teknolojiler ve yazılım geliştirme süreçleri konusunda güncel kalmanız gerekiyor.
Karmaşık iş alanlarının (kariyeriniz boyunca birkaç tane) derin ayrıntılarını öğrenmeniz gerekir. Gereksinimleri analiz etmek ve açıklamak öğrenmektir. Araştırma öğrenmektir.
Performans optimizasyonu ve hata ayıklama (başka bir deyişle kodun iç işleyişine derinlemesine bakmak) aynı zamanda bir tür öğrenmedir.
Yazılım geliştirme aynı zamanda insanlarla (ve insanlar için ) çalışmakla da ilgilidir.
Farklı uzmanlıklardan ve geçmişlerden (bugünlerde, uzak çağda, büyük olasılıkla birden fazla ülke ve kültürden) gelen çok çeşitli insanlardan oluşan işlevler arası ekipler üzerinde çalışacaksınız.
"İş"i anlamanız gerekecek. Kullanıcının sıkıntılı noktalarını ve sorunlarını anlamanız ve çözmeniz gerekecek.
Sağlıklı bir merak dozu olmadan, tüm bu şeylerde yalnızca daha az etkili olmakla kalmayacak, aynı zamanda oldukça çabuk tükeneceksiniz.
Yazılım geliştirme devasa bir bilmecedir; çözülmesi gereken sonsuz bir sorun akışı. Geliştirici olarak işe alınmanızın nedeni şirketinizin ve müşterilerinizin sorunlarını çözmektir.
Bunu yapmak için organizasyonel sorunları (ekip olarak nasıl hareket edeceğiniz, işinizi nasıl organize edeceğiniz, hangi süreçleri kullanacağınız) ve teknik sorunları (mantık, mimari, performans vb.) çözmeniz gerekir.
Bu problemler, belirli bir fonksiyonun veya birim testinin nasıl tasarlanacağı ve adlandırılacağı gibi atomik problemlere kadar uzanan daha küçük, iç içe geçmiş problemlerden oluşur.
Bu tür bulmacaları çözmekten hoşlanmıyorsanız, sorunları parçalama ve çözme konusunda yeteneğiniz yoksa, yazılım geliştirme kariyeriniz zorlu olacaktır.
Gerçek bir kıdemli geliştirici olmak, yıllar süren bilinçli pratik yapmayı gerektirir. Ayrıca yol boyunca birçok aksilik yaşayacaksınız. Kariyerinizi geliştirmek ödüllendirici ama aynı zamanda yavaş ve bazen acı verici bir süreçtir.
Mükemmelliğe ulaşmak ve zirveye ulaşmak için yaşam boyu adanmışlığa hazır olmalısınız. Ve bu çok fazla sabır gerektirir.
Sabır aynı zamanda işimizle ilgili birçok şey için de kritik öneme sahiptir: teknik destekle ilgilenmek, teknoloji konusunda pek bilgili olmayan kullanıcılarla çalışmak ve organizasyonel bürokrasiyle baş etmek. Ayrıca, problem çözmede harika bir yardımcıdır.
Ve teknoloji gibi hızla gelişen, sürekli değişen bir sektörde sabır olmadan çalışmaya devam edemezsiniz.
Yazılım geliştirme çok fazla ısrar gerektirir. Böcekleri avlamak. Yeterince belgelenmemiş API'lerin ve kitaplıkların şifrelerinin çözülmesi. Eski kodu çözme. Performans darboğazlarını takip etmek. Hatta uzun süreler boyunca derin bir odaklanmayı sürdürmek bile.
Ne kadar kıdemli olursanız olun, mücadele edecek, başarısız olacak, sıkışıp kalacak ve çok fazla hayal kırıklığına uğrayacaksınız. Ve içinden geçip yanmamak için çok fazla kuma ihtiyacınız olacak.
Ancak aynı zamanda doğru miktarda kumun ne olduğunu da anlamalısınız. Saatlerce ve günlerce başınızı verimsiz bir şekilde duvara vurmak ile yoldaki en küçük tümsekte bile hemen yardım isteyerek ekibinizi sürekli rahatsız etmek arasındaki tatlı nokta nedir?
Yazılım geliştirme insanlar ve ekipler etrafında döner. Meslektaşlarınızla bireysel düzeyde çok yakın çalışacaksınız: programları eşleştirin, birlikte hata ayıklayın ve kodlarını gözden geçirin.
Ayrıca onlarla bir ekip kurulumunda çalışacaksınız: grup olarak beyin fırtınası yapacak, planlayacak ve kararlar alacaksınız. Ve bu işbirliği karmaşıktır: Çalışmalarınız örtüşecek veya çatışacak ve farklı fikirleriniz olacak.
Yol haritanızı yönetimle müzakere edeceksiniz. Son olarak, harika bir ürün oluşturmak için kendinizi kullanıcılarınızın yerine koymanız gerekir.
Üstelik tüm bu insanlar hem teknik hem de teknik olmayan farklı geçmişlerden geliyor. Tutkuludurlar. Güçlü görüşleri vardır. Bazen zor karakterlere sahip olabilirler.
Ve bir geliştirici olarak başarınız, onlarla ne kadar iyi ilişki kurabildiğinize bağlıdır. Yüksek duygusal zeka olmadan bu kesinlikle imkansızdır.
Yazılım geliştirme (ve genel olarak bir ekipte çalışmak) bir dengeleme eylemidir. Bir yandan uzmanlığınız için işe alınıyorsunuz. Güçlü fikirlere sahip olmanız ve teknoloji konusunda daha az bilgili veya daha genç insanlara rehberlik etmeniz bekleniyor.
Öte yandan, bakış açınıza meydan okuyacak ve grup kararları almak zorunda kalacağınız, aynı derecede deneyimli ve inatçı takım arkadaşlarınızla çalışacaksınız.
Bu süreçte egonuz sıklıkla incinecektir. Onu kontrol altında tutabilmelisiniz, ancak geri çekilmeden ve bağlantıdan kopmadan.
Sabit fikirli olmalısın ama fanatik olmamalısın. Güçlü bir bakış açısına sahip olun ancak onu zayıf tutun; aksi yönde ikna olmaya açık olun. Fikrinizi savunmaya hazır olmalısınız ama aynı zamanda küçümseyici ve zeki bir pislik olmamak için ne zaman vazgeçmeniz gerektiğini de bilmelisiniz.
Ekibe, işletmeye ve müşterilere saygı duymanız gerekir. Aynı fikirde olmayın ama taahhütte bulunun. Ve yapıcı (ve hatta tamamen olumsuz) geri bildirimleri nezaketle kabul edin. Aksi halde bir takımda etkili bir şekilde çalışamazsınız.
Yazılım geliştirmede her şey çok hızlı ilerliyor. Teknolojiler sürekli değişiyor. Yeni metodolojiler popülerleşiyor. Şirketler dönüyor.
Kariyeriniz boyunca projeleri, ekipleri, şirketleri ve iş alanlarını da değiştireceksiniz. Tek bir proje bile sürekli bir inceleme ve uyarlama eylemidir (özellikle çevik yaklaşımlarda). Ekibiniz de sürekli olarak kendini yeniden organize edecektir.
Çoğu insanın değişime alerjisi vardır. Değişim zordur. Rahatsız edici. Stresli. Adapte olmak ve değişime açık olmak sizi anında farklı kılacaktır. Bu sadece kıdem merdiveninin en üstüne çıkmanızı sağlamakla kalmayacak, aynı zamanda orada uzun süre kalmanızı da sağlayacaktır.
Bunu bıktıracak kadar tekrarlıyorum ama yazılım geliştirme bir takım oyunudur. Meslektaşlarınız, yöneticiniz ve şirketiniz; hepsi üzerinize düşeni yapacağınıza güveniyor.
Mikro yönetime gerek kalmadan işinizi halledeceğinize ve sözlerinizi yerine getireceğinize güvenemezlerse, teknoloji uzmanlığınız ne olursa olsun, hiç kimse sizi gerçek bir kıdemli geliştirici olarak görmeyecektir.
Bu asla hata yapamayacağınız anlamına gelmez. Başarısızlıklar olur. Ve en iyi şirketler bunları değerli öğrenme fırsatları olarak görüyor.
Ancak bunu mümkün kılmak için, düşen topu alabilmeniz, zarif bir şekilde toparlanabilmeniz ve başarısızlığınızdan ders alıp gelecekte bunu tekrarlamamanız konusunda size güvenilmesi gerekir.
Profesyonel yazılım geliştirme bir ödün verme sanatıdır. Geliştirme hızı ve kalite arasında sürekli taviz vermeniz gerekir. Yeni ve gelecek vaat eden ile kanıtlanmış ve istikrarlı olanı dengeleyin.
Eksik ve aşırı mühendislik arasında ince bir çizgide yürüyün.
Profesyonel yazılım geliştirmede başarılı olmak için çok pragmatik olmanız gerekir. Hiçbir şeyin siyah ve beyaz olmadığını, hiçbir prensibin veya kalıbın her durumda geçerli olmadığını anlamalısınız.
Farklı yaklaşımlar, teknolojiler ve çözümler arasında seçim yapmak için mükemmel bir sezgiye sahip olmalısınız; köşeleri kesme konusunda rahat hissedin ancak bunun ne kadar olduğu konusunda iyi bir fikre sahip olun.
Bir programcı olarak hayatınız güneş ışığı ve gökkuşağından ibaret değil. Sinir bozucu müşterilerle tanışacaksınız. Sıkı teslim tarihleriyle karşı karşıya kalın. Projeniz iptal edilebilir. Ekibinizle veya yönetiminizle aynı fikirde olmayabilirsiniz ancak yine de taahhütte bulunmanız ve yürütmeniz gerekir.
Ayrıca çirkin kodlarla da çalışacaksınız. (Evet, Google gibi en iyi şirketlerde bile her kod tabanının iyi ve kötü yanları vardır.)
Yorulursunuz, sinirlenirsiniz, üzülürsünüz.
Olumsuzluğun sizi ele geçirmesine izin verirseniz, eleştirmeye ve şikayet etmeye başlarsanız, sadece kendinizin motivasyonunu düşürmekle kalmaz, aynı zamanda ekibinizin moralini de bozarsınız ki bu da kariyerinizi fazla ileri götürmez.
Olumluya karşı önyargılı olmanız gerekir. İyimser ve neşeli olun. Her zaman olumlu bir sonuç arayın. Takımını toparlayan, kötü ruh halini ortadan kaldıran ve morali düzelten kişi olun. Bu sadece fark edilmenizi ve terfi etmenizi sağlamaz, aynı zamanda kariyerinizi daha keyifli ve sürdürülebilir hale getirir.
Tabii ki, hem yumuşak hem de teknik beceriler geliştirilebilir. İletişimin yanı sıra hata ayıklamada da daha iyi olabilirsiniz. Peki ya merak ya da olumlu bir bakış açısı gibi görünüşte doğuştan gelen özellikler? Kendinizi gerçekten daha iyimser veya meraklı olmak için eğitebilir misiniz?
Evet yapabilirsin! Bu, birçok kitaba değecek kadar geniş bir konudur (Carol S. Dweck'in "Zihniyet" kitabı harika bir başlangıç noktasıdır). Ancak hemen birkaç ipucunu paylaşayım:
Ayrıca bilişsel önyargılar ve alışkanlık oluşturma hakkında da biraz bilgi edinmenizi tavsiye ederim. Bu, çok geniş bir bilgi birikimine sahip, iyi gelişmiş bir disiplindir ve keşfetmesi oldukça eğlencelidir.
Gerçek bir kıdemli geliştirici olmak istiyorsanız eksiksiz bir geliştirici olmanız gerekir. Teknoloji becerileri, sosyal beceriler ve karakter özelliklerinin doğru karışımına sahip olmalısınız ve bu üçlünün hiçbir bölümünü göz ardı edemezsiniz.
Karakter özellikleri işin en zor kısmıdır. Çoğu geliştirici bunları ihmal ediyor çünkü ya bunların farkında değiller, hangilerinin önemli olduğunu bilmiyorlar ya da bunların şekillendirilebilir olduğuna inanmıyorlar.
Ancak bu hatalı düşünce tarzının üstesinden gelebilirseniz, eğer zihniyetinizi değiştirebilirseniz, onu kariyerinizi yükseltecek ve gerçekten öne çıkmanızı sağlayacak bir süper güce dönüştürebilirsiniz.