Merhaba arkadaşlar,
Öncelikle, https://www.r10.net/off-topic/218208...erhabalar.html burada kendimle alakalı bir paylaşımda bulundum, dilerseniz buradan inceleyebilirsiniz.
Bugüne kadar; Web,mobil,masaüstü,sistem programlama dahil bir çok projede yer aldım. Şimdilerde full stack developer olarak tanımlanıyor; hem frontend hemde backend geliştirme yapıyorum. Aynı zamanda yazılım eğitimleri veriyorum.
  1. Programlama dilleri; Düşük-orta-yüksek seviye-çok yüksek seviye olarak ayrılıyor genellikle. Bunları incelemek gerekirse; Makine dili en düşük seviyede iken, C# orta seviyeli ,Visual Basic ise çok yüksek seviyeli programlama dillerinde yer buluyor kendisine. Bir programlama dili ile birden fazla platformda uygulama geliştirilebilir. Özellikle son zamanlarda React, Cordova gibi kütüphanelerle platform bağımsız mobil uygulama geliştirilebiliyor. Ama mobil uygulama Java, Objective C, Kotlin, Swift gibi server side programlama dilleri ilede geliştirilebiliyor. Burada farkın ne olduğunu, artılarını ve eksilerini proje bazlı değerlendirmek gerekir. Bakın altını çizerek söylüyorum, proje bazlı. Her projede her programlama dili kullanılmaz. Mesela, C#, Xamarin’i bünyesine kattıktan sonra, resmi olarak Cross Platform desteği verdiğini açıkladı. C# kullanarak, hem web hem mobil hem masaüstü uygulama geliştirebiliyoruz. O zaman neden başka herhangi bir programlama dili kullanalım? Peki tam bu esnada Flutter çıkıp ta dese ki; Arkadaş, benim başım kel mi? Benimle de yapabilirsin platform bağımsız geliştirme işlemini. Haydaa! E şimdi ne olacak?
    Önceden native&hybrid olarak ayrılıyordu platform bağımsız uygulama geliştirme işlemleri. Native kod üretiyor mu? Soruları gündemdeydi sürekli, fakat şimdi native kod’da üretiyorlar. Yani ben platform bağımsız uygulama geliştirdiğimde, IOS için ayrı Android için ayrı Windows Phone için ayrı kod üretiyorsa, ben neden IOS için Swift-Objective C, Android için Java-Kotlin ya da Windows Phone için C# kullanayım? İşte az önce söylediğim de tam olarak bu; Projeye göre değişir. C# ile oyun geliştirebilirsiniz, C ile de geliştirebilirsiniz, Java ile de geliştirebilirsiniz. Şimdi hangisi kesinlikle kullanılmalı? Hiçbir zaman şunun için kesinlikle bu programlama dili kullanılır ibaresi kullanılmamalı. Hangi proje için hangi programlama dili uygunsa o kullanılmalı.
  2. Eğer yazılım sektöründeyseniz ya da bu sektörde olmak istiyorsanız herhangi bir programlama dilini Junior seviyede öğrenmeniz yeterli. Ama, eğer kalıcı olmak, bilgili olmak, tecrübe ve para kazanmak istiyorsanız, esas konu Junior olduktan sonra başlar. Bu da tamamen kendinizi geliştirmeniz ile alakalı bir durumdur. Örneğin, bugün yazılım uzmanlığı sertifikası ya da bilgisayar-yazılım mühendisliği diploması aldınız. Bu sizi yazılım uzmanı yapar mı? Hayır. Sizi yazılım uzmanı ya da yazılım mühendisi sıfatına kavuşturacak şey, bilginiz, birikiminiz ve tecrübenizdir. Bugün Türkiye’de bir sürü özel üniversite var. Ben size sorayım, bu kadar üniversite için yazılım eğitimi verecek öğretim görevlisini nasıl buluyorlar? Ben bu duruma şaşırıyorum açıkçası. Zira, Türkiye’deki üniversite sayısı kadar yetkinliğe sahip olan yazılım uzmanı olduğunu düşünmüyorum. Ben 7 yaşımda başladım kod yazmaya, yukarıdaki linkte daha detaylı okuyabilirsiniz, Google böyle değildi, derme-çatma bir sayfaydı sadece. Öğrendiğim birçok şeyi kütüphanelerdeki ansiklopedileri, kitapçılarda kimsenin almadığı, sayfaları yırtılmış yazılım kitaplarını karıştıra karıştıra öğrendim. Şimdi google’a 3-4 harf yazdığınızda hemen devamını çıkartıyor. Kendimi geliştirme kısmı buralardan başlıyor. Gün 24 saat, ben 20 saat çalışıyordum. Sabah kalkıyorum okula gidiyorum, geliyorum ödevlerimi yapıyorum sonra yazılım. Zaman ilerledikçe bu durum hiç değişmedi. Hafta sonu, bayram, Yaz tatillerinde de aynı şekilde. Herkesin kendisini motive etme şekli farklıdır. Ama şunu söyleyeyim ki bir insan yazılım geliştiricisi olmak istiyorsa, çok ama çok çalışmalı. Bu konuda önerim, herşeyi bir kenara bırakın ve sadece yazılım olsun hayatınızda. Bu söylediğim abes geliyor olabilir, fakat ne yazık ki durum böyle. Hatta bir söz vardır, “On bin saat kod yazmayan yazılımcı olamaz” diye. Bakın On bin saatten bahsediliyor bu sözde. Fakat şu konuya da açıklık getirmek lazım, sadece geçen zaman sizi uzman yapmaz. 3 farklı unvan kullanılır yazılımda, ki bunu rütbe olarak değerlendirenler de var. Nedir bunlar? Junior,Mid-Level,Senior. Denir ki Junior olduktan 5 sene sonra Senior olursun. E peki oturduğunuz yerde, bilginize bilgi-tecrübenize tecrübe katmadan nasıl Senior olacaksınız ki? Bu mümkün değil. Size unvan aldıracak şey geçen zaman değil, bu geçen zamanda edindiğiniz bilgi ve tecrübedir. Bundan dolayı, sürekli kendinizi geliştirmeye çalışmalısınız. Önemli olan şu anki seviyeniz değil, gelmeyi hedeflediğiniz seviyedir. Başımdan geçen bir olayı anlatayım, bir yazılım uzmanı ile tanıştım (kendisi öyle olduğunu söyledi) 52 yaşında biriydi. Ben Senior seviyedeyim dedi böbürlenerek, ne biliyorsunuz diye sorduğumda; C# biliyorum dedi. C# value tuple hakkında ne düşünüyorsunuz? Gerek varmıydı sizce dediğimde, o ne ya dedi. Şaşırdım, neden biliyor musunuz? Çünkü beyefendi C# 3.0 ile başlamış ve orada kalmış. Şu an C# 8.0 kullanılıyor. Demeye çalıştığımda tam olarak bu işte, sizi uzman yapacak şey zaman değil, bu zaman içerisinde yaptığınız çalışmalar ve edindiğiniz bilgiler-tecrübelerdir.
    Benim bu konudaki en önemli önerim şudur ki, bir programlama dilinde uzmanlaşmadan diğerlerine başlamayın. Hatta herhangi bir programlama dilini öğrenmeden önce programlamanın temellerini, programlamanın mantığını ve algoritma kavramını iyice öğrenmeniz çok faydalı olur. Çünkü programlamanın mantığı programlama diline göre değişmez, mantık hep aynıdır. Değişen şey, her programlama dilinin kendine özgü yazım dili (syntax) farklılığıdır. Türkçe-İngilizce gibi düşünebilirsiniz bu durumu. Temeli iyice kavradıktan sonra programlama dili öğrenirseniz bu çok faydalı olur. Artı olarak kod ezberlemeyin, bu kendinize yapabileceğiniz en büyük kötülük olur yazılım konusunda. Yazılımın ezberi olmaz, tamamen mantık işidir. Mantığını iyice kavrayın, takıldığınız yerde Google’dan sorununuzu doğru aratmayı öğrenin, bulduğunuz çözümü kendi projenize uygulayın ve sonuçta başarılıysanız tamamdır. Milyarlarca satır kod var, ve kod spesifik değildir. Benim projemdeki veritabanı kodları ile sizin projenizdeki farklı olabilir. E ezber yaparsak nasıl olacak? Çalışmaz ki! Ama ezberlemeyip mantığını öğrenmiş olsaydık, takıldığımız tek şey kodlar olurdu ve en basitinden Google’a şunu sorardık: “C# Veritabanı İşlemleri” ve karşımıza çıkan sonuçlardan en fazla ikincisine tıkladığımızda aradığımız kodları ya da çözümünü görürdük.
  3. Belirtmiş olduğunuz gibi, dünyanın büyük bir çoğunluğu mobil cihaz kullanıyor. Fakat en basitinden siz bu soruyu bir Web uygulaması ile soruyorsunuz. Bu da şunu gösterir ki, bütün platformlar gerekli. Bir platform ötekinden daha değerli, daha önemli demek çok doğru olmaz. Her ne kadar sizin deyiminizle %80 mobil kullanım oranı olsa da, o mobil uygulamaların backend kısmında veri listeleme işlemleri için Web Servis, Rest API vb. kullandığını ve bunların da web tabanlı olduğunu unutmamak lazım. Şu anki durumda Web olmadan mobil olmaz gibi görünüyor. En azından veri manipülasyonları için. Tabii eğer mobil uygulama geliştiren kişi bu işlemi direk veritabanına bağlanıp yapmıyorsa. Zaten mobil uygulamada veritabanının bilgilerini saklamak olabildiğince büyük bir hata. Zira decompile yapıldığında tüm bilgiler ortaya çıkabilir. Obsufactor vb. eklentiler ile şifrelenmiş olsa bile, bu risk alınmamalıdır. Ya da farklı bir durum düşünelim, mobil uygulama ile facebook girişi yaptırılmak isteniyor, peki facebook veritabanı bilgilerini paylaşır mı? Sorusu bile çok saçma. E ne olacak? Facebook’un API’ına başvuru yapılarak bilgiler elde edilecek. Yani demeye çalıştığım şu, tüm platformlar gerekli. Eğer burada sormak istediğiniz, hangi platform üzerine yoğunlaşılması gerektiği gibi bir soru ise, bu sorunun cevabı kişiye göre değişir. Eğer mobil uygulama üzerinde merakınız varsa o alanda ilerlemelisiniz, web alanında ise web alanında ilerlemelisiniz. Kim bilir, belki gömülü sistem programlama ya da sistem programlama üzerinde uzmanlaşmak isteyebilirsiniz, bu durumda ne web ne mobil hiçbir önemi kalmaz. Alan, platform gibi detaylar çok önemli evet, ama onlardan daha önemli olan kişinin merakıdır. Yoksa Stackoverflow, MSDN gibi platformlarda çeşitli anketler yayınlanıyor. Şu programlama dili şu oranda kullanılıyor gibi. Onlara göz atabilirsiniz. Ama burada sizi yönlendirecek olan şey popülaritesi değil, uzman olmak istediğiniz alan olmalı. Ona göre seçim yapmanız daha doğru olacaktır.
  4. Kurumsal piyasada var olabilmek ve devam edebilmek için en gerekli şey iyi bir üniversite diplomasıdır. Zira eğer iyi bir üniversiteden mezun değilseniz, diplomanızın da hiçbir önemi olmuyor. Burada üniversite ismi vermem doğru olmaz tabii. Ama bazı üniversitelerin diplomaları iş başvurularında dikkate dahi alınmıyor, mülakat yapılmadan direkt olarak olumsuz değerlendiriliyor. İyi bir diplomanız yoksa kurumsal firmalarda iş bulmanız oldukça zor, tabii imkansız da diyemem. Çünkü çevreniz varsa herşey mümkün. Ama bu durum yurtdışında birçok ülkede böyle değil. Üniversite diplomanıza değil portfolyonuza bakarlar. Bende kendi şirketime işe alım yapacağım zaman, üniversiteden ziyade portfolyosunu incelemek isterim kişinin. Ama büyük şirketler işe alım yaparken devlet teşvikleri ve destekleri kapsamında üniversite mezuniyetini zorunlu tutuyorlar çünkü lisans mezunlarının maaşlarının büyük bir bölümünü devlet ediyor kurum adına. Yukarıdaki maddelerde de belirttiğim gibi, çok çalışmalı kendinizi çok geliştirmelisiniz. Çalıştığınız yerdeki yazılım uzmanları (özellikle deneyimli olanları) sizin için en iyi okul olacaktır. Bazen 2 yılda gelebileceğiniz seviyeye, iyi bir yazılım uzmanının yanında 3-4 ayda gelebilirsiniz. Hiçbir yerde bulamadığınız bir cevabı, bir yazılım uzmanından öğrenebilirsiniz. Herhangi bir dil farkı gözetmek doğru değil. Eğer başarılı olmak istiyorsanız, popülaritesi yüksek olan dili değil, uzmanlaşmak istediğiniz dil ile çalışabileceğiniz bir kurum seçin. Şu unutulmamalıdır ki, hangi programlama dilini bilirseniz bilin, kendinize uygun bir iş bulabilirsiniz. Bugün QBasic, Fortran gibi programlama dillerini çok iyi bilen bir uzman tanıyor musunuz mesela? Çok zor bulursunuz. Popüler değil, ama birçok banka ve büyük kurum hala bu programlama dillerini kullanıyor alt yapılarında. Buradan da şu sonuç çıkar, hangi programlama dilini bilirseniz bilin, iş bulursunuz. Önemli olan dil değil, o dilde olan bilginiz ve tecrübenizdir.
  5. Aranan Adam derken kastettiğiniz şeyi tam olarak anlayamadım açıkçası. Eğer olmazsa olmaz, bir sürü iş teklifi alan, popülaritesi çok yüksek biri olarak soruyorsanız, bu Aranan Adam değil, olması gereken adamdır aslında. Bütün yazılım uzmanlarının bu seviyede olması gerekir. En yüksek seviyede iseniz, yine sizin seviyenizde birileri olacaktır. Fark şudur, en düşük seviyede olduğunuzda çok daha fazla kişi yanınızda olur. Seviye yükseldikçe kişi sayısı düşer. En yüksek seviyeye çıktığınızda, kullandığınız programlama dilinin yeni versiyonu yayınlandığında ya da yeni bir programlama dili yayınlandığında, onu öğrenmeye koyulduğunuzda, şunu anlarsınız ki, bu işin Aranan Adamı yok. Aslında herkes Arayan Adam. Bilgiyi, başarıyı arayan adam.

Umarım sorularınıza cevap verebilmişimdir arkadaşlar. Farklı sorularınız olursa cevaplamaktan keyif duyarım.
İyi forumlar dilerim.