Bu sefer biraz yeni mezun yada mezun adayı, henüz piyasayı bilmeyen, ne yapacağını şaşırmış durumdaki arkadaşlar için birşeyler dile getirmeye çalışacağım, kendi bakış açımı paylaşacağım. Tecrübeli arkadaşlar da isterse olumlu yada olumsuz yorumlarıyla katkıda bulunabilirler 😀
Ülkemizdeki eğitim sistemi gereği (saçmalıklara değinmeyi düşünmüyorum, sonunu bulamayız) yazılım ile ilgili bölümlerde okuyan, yada yeni mezun olmuş arkadaşların en büyük derdi “Abi ben neye çalışmalıyım, hangi dili öğrenmeliyim sence” Evet bu soruyu gerçekten -zamanında kendisi de çok sorgulamış biri olarak- fazlaca duyuyorum. Arkadaşın kafası o kadar karışmış ki… Herşeyi öğrenmek istemiş, ufak ufak ucundan tutmuş belki. Ama profesyonel dünyaya çıktığında nelerle karşılaşacağını bilemediği için çok tedirgin. “C# mı çalışsam, mobil mi yazsam, Java da var öbür tarafta, ya bi de yeni teknolojiler var web alanında, Angular, Node.js, Phyton diye bişey var, Ruby diye bi ortam çıkmış…. Var da var, ya abi ben ne yapmalıyım?..” Üç kelime söyleyip konuyu hafiften rayına sokmak niyetindeyim: “Arkadaşlar rahat olun” 😀
Konuyu 2 farklı kesime göre şekillendirmek istiyorum. Yalnız öncelikle şunu belirtmek istiyorum ki, yazacaklarım daha ziyade, kurumsal firmaların IT departmanlarında çalışmak isteyen arkadaşlar için olacak. Start-Up yada Ar-Ge kültüründe olan firmalar için, burada yazacakları biraz daha farklı olabilir. “Hangisi daha iyi” tartışmasına girmek istemiyorum, o ap-ayrı ve uzun bir konu.
Yeni mezun yada mezun adayı arkadaşlar…
Öncelikle ilk söyleyeceğim şey, iş dünyasına açıldığınızda sizde sorgulanacak en önemli konu öğrendiğiniz yada uyguladığınız teknolojiden önce, sizin sorunlara getireceğiniz bakış açısı yani çözüm üretme yeteneğinizdir. Bir programlama dilinin bütün kurallarını, syntax ‘ını biliyor olmanız, muazzam düzeyde mimariler kuracağınız yada çok kritik özelliklere sahip yazılımlar geliştirebileceğiniz anlamına gelmez. Bu yüzdendir ki iş ilanlarını incelediğinizde hep önünüze bir klasik olarak “Analitik düşünme yeteneği yüksek” ifadesi çıkar. -Hoş, memleketin %99.9 ‘u bu sözün tam olarak kendini anlattığını düşünüyor 😀
Peki ya neden?
Çünkü, yazılım dediğiniz şey zaten genellikle, ortada mevcut bir çözümü bulunmayan bir sorunun yada bir hizmetin, yine henüz bulunmamış yada uygulanmamış bir yöntem ile çözüme kavuşturulmasıdır. Başka bir deyişle, yazılım dendiğinde ilk olarak akla gelen elektronik cihazda çalışan bir uygulama olsa da, aslında o uygulamanın arkasında yatan çözüm yöntemidir bence. Basit bir örnek ile biraz daha aydınlatmak istiyorum.
Düşünün ki veritabanı üzerinde yazılmış bir prosedürünüz ve onun içerisine gömülmüş halde çok ciddi bir business logic mevcut. Veritabanı geliştirme yaparken data işlemlerinde çok rahatsınızdır eğer SQL’e iyi hakimseniz. Mesela, gelen data üzerinde SUM (yani bir alan için toplam değer hesaplama) işlemi için yapmanız gereken sadece SUM() fonksiyonunu kullanmaktır. Diyelim ki bu data hesaplama işlemleri veritabanından alınarak, bir uygulama sunucusunda çalışacak altyapıya taşınacak, kodlar da X Programlama dili ile yazılacak. Eğer ki dil, size data işlemlerinde SUM işlemini yapan bir fonksiyon sunmuyor ise gelen data üzerinde satır satır dönerek ilgili alanın önce toplamını bulmanız daha sonra gerekiyor ise onu filtreleyerek her satıra yazmanız gerekecektir. Hele ki işin içerisine bir de GROUP BY (belli bi alana göre gruplama) girerse vay halinize. Burada da toplam değerini tutmak için kimi zaman -sallıyorum- bir hash map kullanmanız gerekebilir.
Şimdi burada ben çözümü çat diye önünüze koydum, ancak gerçek dünyada bu işin nasıl çözüleceği, hash map mi kullanılacağı yada farklı bir yöntem mi bulunacağı noktasında karar verici siz olacaksınız.
Bu örnek üzerinden hareketle, dilin özelliklerine hakim olmanın önemi yanında, bu özelliklerden hangisini, nasıl kullanacağınız ve nasıl bir sonuca ulaşacağınız yani özetle çözüm yönteminiz çok çok önemli olmaktadır. Yöneticiniz yada müşteriniz size işin teknik detayını anlatmayacaktır elbette, “Bu işi yap” diyecektir. Yöntemini keşfetmek ise size kalacaktır.
Peki ya “Bu nasıl olacak abi ya ben hiç bişey bilmiyorum, daha da tedirgin oldum”. Olma güzel kardeşim, rahat ol, seni yönetecek olan yada sana destek olacak olan insanlar da aynı yollardan geçtiler, herşeyin zamanla olacağının farkındalar. Evet, herşey zamanla kazanılan tecrübelerle olacaktır, yavaş yavaş ve sakin sakin öğrenerek.
Tamam ama dil öğrenmek hiç mi önemli değil?
Tabi ki hayır. Dil elbette önemlidir. Mesela yukarıdaki örnekte, ilgili dilin Hash Map yapısını bilmeniz gerekir. Dili iyi bilmek size zaman ve hız kazandırır. Ancak unutmamanız gereken en önemli nokta, “Dil öğrenilebilir bir olgudur, kimi için çok kısa sürede kimi içinse biraz daha uzun sürede”
Yaşadıklarımdan örnek vermek istiyorum. Bu zamana kadar çalıştığım işlerde çok farklı dillerde geliştirme yaptım. Okulda Pascal ile başlayıp C# ve Java ile devam etmiştik. İş hayatında ise C++, PowerBuilder, Visual Basic, C#, Java ortamlarında kod geliştirdim. Bununla birlikte kısa bir süre web uygulama geliştirdim, o dönemde JavaScript, HTML ve XML ile haşır-neşir oldum. Veritabanı tarafında ise Microsoft SQL Server, Sybase, Oracle PL\SQL ile çalıştım. Ve bunların neredeyse hepsini işe başladığım ortamlarda, ihtiyacım olduğu anda öğrenerek ilerledim diyebilirim. Öğrenme sürecim için de aylara ihtiyacım olmadı hiç, en fazla 2 hafta çalışarak hepsini hallettim. Anlatmak istediğim de işte tam olarak bu, her dili kısa bir zaman ayırarak öğrenebilirsiniz.
Özet olarak, bu işte yeni olan arkadaşlara tavsiyem, strese girmeyin, neyi öğrenirseniz öğrenin, önce felsefesi, çalışma mantığı üzerine ve çözüm yöntemlerine, algoritma üretmeye ağırlık verin.
Gelelim birkaç senedir piyasada çalışan arkadaşlara…
Bazı arkadaşlar ile karşılaşıyorum, “Ben …. altyapısında çalışırım arkadaş, başka bi dil ile çalışmam” yada mesela “Ya abi Cobol mu kaldı ya, ben Cobol ile asla çalışmam” yaklaşımındalar maalesef. Elbetteki tercihlere saygı duyarım, beni hiç ilgilendirmez. Hatta, eski sistemlerde geliştirme yapmak kimi zaman çok çok zordur, bunu da anlıyorum. Ancak yazılımcı olarak şuna karar vermemiz gerekiyor ki, sadece bir çözümü koda geçirmekle mi kalacağız, yoksa aynı zamanda o çözümü üretmeye de çalışacak mıyız. Sonuç itibariyle hayatımızın 30 yılını kod yazarak geçiremeyiz, elbette ki bir süre sonunda sorumluluklarımız artacak ve kod yazmaktan daha ziyade çözümler konusunda sorumlu olduğumuz arkadaşları yönlendiren tarafta olacağız. Tabi bunu istiyorsak 😀
Elbette ki işimizin doğası gereği, her zaman yeni teknolojilere açık olmalıyız. Kendini sabit noktada tutan yazılımcı, görünürde sabit olsa da gerçekte gerilere gitmeye başlamıştır. Ancak bu demek değildir ki eski yada nisebeten eskimeye başlamış teknolojileri tamamen unutalım.
Eğer kurumsal bir yerde çalışıyor veya çalışmak istiyorsanız şunu unutmayın, o kurumun geçmişten beri kullanıla gelen bir altyapısı mevcut. Üzerinde çok ciddi bi emek ve business logic mevcut. Ve daha da önemlisi, bu sistem çalışıyor. Dolayısıyla bu sistemin bir anda ortadan kaldırılıp yerine yenisi konumlandırılamayacağına göre bize düşen mevcut sistem için en uygun ve en efektif çözümleri üretmektir.
Şimdilik bu kadar diyelim. Eleştiri ve görüşlerinize açık olduğumu belirtmek isterim.