WhatsApp
Yükleniyor....

Yazılımcı olmak isteyenlerin sık sorduğu sorulara cevaplar

Yazılarımız ve Makalelerimiz.

22 Haziran 2021, 14:18 0 Yorum 253 Okuma

Türkçe’de, alaylı yazılımcı olmak isteyenler için güzel kaynak sayısı oldukça az. Var ama, “PHP öğren, CSS öğren, HTML falan sonra C++ öğren” gibi Allah ne verdiyse kısaltmaları kullanarak kafa karıştıran insanlarla dolu ortalık. Bunun için bana sorulan sorulara tamamen taraflı, öznel, genelgeçer olmayan cevaplarımı sunmak istiyorum.

Hayır. Maalesef bu, yeni başlayan çok kişinin içine düştüğü bir hata. Bu bahsettiklerinin hepsi birbirinden bambaşka şeyler ve hepsini aynı anda öğrenmek mümkün değil. Bu soru, spor salonundaki hocana şunu sormaya benziyor: “Hocam, üstüme şu tişörtü giyeyim diyorum, sonra da dumbell kaldırırım, karnım da güçlenmiş olur hem”…

Bu kadar şeyi bir arada düşünürsen aşağıdaki gibi bir sonuca ulaşırsın:

Tabii ki, toplum olarak kolay para peşinde olduğumuz için bu şekilde düşünen çok fazla kişi var. Bir de şey var, “Apple Store’a bir uygulama koyayım, 1 liradan ayda 1000 lira kazanırım.”

Onların zamanı geçti arkadaşlar. Yeni bir sektör çıktığında böyle boşluklar oluyor ve çok fazla kişi faydalanıyor. Bundan 5 sene önce belki yapabilirdiniz ama şu an, sıfırdan başlayan biri için gayet zor bir iş bu. Zamanınızı boşa harcamayın diye söylüyorum.

Her dilde para var ama bir dilin iyi para kazandırması, o dili hemen öğrenmeniz gerektiği manasına gelmez. Önemli olan ne tip uygulamalar yazmak istediğiniz, hangi ülke için çalıştığınız, gelecek için ne kadar risk almak istediğiniz ve çalışacağınız ülkede, o dili kullanan sektörün ne kadar geniş olduğu ve sektörün yapısı.

Mesela, PL-SQL’de para var mı diye sorarsanız, Türkiye’yi baz alarak cevap vereyim:

PL-SQL, sadece Oracle veritabanıyla işlemler yapmanızı sağlayan, SQL cümleciklerini kullanan fakat bir programlama dilinin çoğu yapısını barındıran bir dil. Kullananları genelde çok iyi ücretler alırlar. 2 yıllık deneyimle 5000 lira gibi…

Ama bu maaşı görüp PL-SQL’e atlamadan önce şunu düşünmelisiniz: Bu dil, çoğunlukla, büyük verinin olduğu telekom, sigorta ve bankacılık sektörlerinde kullanılır. Yani çalışmaya başladıktan sonra büyük ihtimalle bu sektörlerden dışarı çıkamazsınız. Kurumsal hayattan sıkıldığınızda küçük start-uplara geçme şansınız azdır, ek iş yapma şansınız azdır. Çünkü kurumsal firmalar gidip de Elance’den adam aramaz. Start-upların da büyük ihtimalle PL-SQL’le data işleyecek kadar verisi yoktur. Hatta Oracle’a lisans ücreti ödeyecek kadar parası bile yoktur.

PL-SQL’in kullanıldığı bu sektörler diplomaya önem verir yani alaylı olarak çalışamazsınız.

Bu dilin uğraştığı alan çok nettir ve çoğu zaman yeniliklere açık değildir. Ayrıca yatay ölçeklenebilir olmadığı için ve veritabanı işlemleri uygulama tarafına taşındığı için kullanım alanı daralmaktadır.

Başka bir dil düşünelim: Python…

Dünyada son derece popüler bir dildir. Hem küçük startupların hem de büyük şirketlerin kullandığı bir dil olup, kullanım alanları da oldukça geniş. Web uygulamalarının backendleri için de kullanılır, test-otomasyon araçları geliştirmek için de, veri bilimi (data science) uygulamaları için de… Maaşları da oldukça iyidir.

Ama Türkiye’de, genelde, Java, C# ya da C++ ile yazılmış çekirdek uygulamanın etrafındaki yan uygulamaları yazmak, test-otomasyon, sunucuya yüklemek (deployment) gibi yan işlerde kullanıldığını görüyoruz.

Dünya’da, Türkiye’dekinden daha popüler olduğu için yurt dışından ek iş almanıza yardımcı olabilir. Freelance sitelerinde henüz doygunluğa ulaşmış olmadığından, görece kolay şekilde iş alabilirsiniz.

Başka bir dil düşünelim: Java

Java, güvenli limandır. On yıllardır en çok kullanılan dillerden biri olmasının yanında, kütüphaneleri olgun, yazılımın kullanıldığı bütün sektörlerde yer edinmiş, en çok eğitim kaynağına, örneğe sahip dillerden biridir.

Hem masaüstü uygulaması, web backend’i yazılabildiği için, hem Linux, hem Windows hem de Mac’te çalışabilecek uygulamalar yazılabildiği için son derece popülerdir.

Maaşlar oldukça yüksektir. Yurtiçinden ve yurtdışından ek iş almanız olasıdır. Fakat sıkıntı, piyasanın doygunlaşmaya yaklaşmış olmasıdır. Eğer gerçekten deneyimli değilseniz hem bir şirkette, hem de freelance olarak kazanacağınız para çok yüksek olmayabilir.

Fakat kazandığınız deneyimle birlikte maaşınızda en çok atlama yapabileceğiniz dillerden biridir. C++ kadar zor değildir; masaüstü uygulamalar için, birebir rakibi C#’tan daha yaygın bir kullanım alanı vardır.

Bir dile yatırım yapmak hayatınızı belirleyecek. O yüzden yukarıda bahsettiklerimi göz önünde bulundurun.

Yazılım dilleri ile ilgili bir takım endeksler yayınlanıyor. Bunlardan biri, internetteki arama motorlarında en çok hangi dile dair arama yapıldığına göre bir endeks sunan 

2016'da Indeed.com’da, açılan iş ilanlarında geçen kelimelere göre de şöyle bir grafik oluşmuş.

Şu an için her şey Java lehine. Fakat rüzgarın değişmekte olduğunu belirtelim. Scala, Clojure, Kotlin gibi diller de yükselişte. Anadiliniz Java olsa bile bu dillerden birini öğrenmenizi tavsiye ediyorum. Rüzgar tamamen tersten estiğinde terste kalmamak lazım.

İsteme. Şu an sadece bir dil öğrendin ve bu kendi başına para etmeyecek. Özür dilerim.

Diyelim ki birkaç ay İtalyanca kursuna gittin ve İtalya’ya gidip “hadi bana iş verin” dedin. Hemen verirler mi? Vermezler. Belki okuduklarını anlayabilirsin, hangi otobüse bineceğini falan anlayabilirsin ama çevirmen ya da tur rehberi olabilir misin hemen? Olamazsın. Çünkü, şu an sadece kendini ifade etmeyi biliyorsun ama bu işleri başarabilmek için gerekli dinamikleri bilmiyorsun. İtalya’nın kültürünü bilmiyorsun, edebiyatından anlamıyorsun, inceliklerini bilmiyorsun.

Her yazılımın bir kontrol listesi vardır ve kaliteli yazılımcı olup yüksek ücretler almak istiyorsanız yazılımınız bunları sağlamalıdır:

1- İşlemciyi gereğinden fazla yormamalı.

2- RAM’i , yani bilgisayarın belleğini gereğinden fazla kullanmamalı.

3- İşleme göre değişmekle birlikte, kabul edilebilir bir süre içerisinde cevap dönmeli

4- Kullanıcı sayısı çok fazla arttığı zaman dahi cevap vermeli

5- Kolay test edilebilir olmalı

6- Yeniden kullanılabilir parçalardan oluşmalı, parçaları arasında mantıklı bağlar olmalı, gerektiğinde parçalar birbirinden ayrılabilmeli. (Yani Çin malı motosikletler gibi olmamalı. Bu motosikletlerde debriyaj teline ulaşmak için motoru sökersiniz. Tamirciye yalvarırsınız işinizi görsün diye)

Yazılım sektörü bu ihtiyaçları karşılamak için öğrenilmesi gereken bir çok bilgiyle doludur.

1,2,3'ü karşılayabilmek için algoritma ve veri yapısı bilgisine ihtiyacınız var. Mesela, hangi durumda hangi arama algoritmasını kullanmanız gerektiğini bilmelisiniz. Kullanacağınız verinin üzerinde ne sıklıkla arama yapılacağını, veriler arasında nasıl bir hiyerarşi ya da bağlantı olduğunu, verinin ne kadar büyüyebileceğini hesaba katarak uygun veri yapısını seçebilmelisiniz.

4'ü karşılamak için her dilin ve teknolojinin kendi çözümleri olmakla birlikte standartları da bulunur. İşin çok zor kısımlarından biridir. İşletim sistemi bilgisine dahi ihtiyacınız vardır.

5'i karşılamak, bir çok tasarım şablonunu (design pattern) öğrenip yerli yerinde kullanmanızı gerektirir. Öyle ben kod yazdım, canavar gibi çalışıyor demekle olmaz. Canavarlık öznel değildir, kodunuz test edilir, ak gerdan kara gerdan ortaya çıkar.

6'yı sağlamak için, nesne yönelimli (object oriented) diller de kullansanız, fonksiyonel diller de kullansanız, scripting dilleri de kullansanız, yeniden kullanılabilirliği sağlayacak özellikleri ve teorileri mutlaka çok ama çok iyi öğrenmelisiniz.

Epey yol kat ettin ama öğrenecek daha çok şey var. Bu noktaya gelebilmişsen geriye bir, hatta daha fazla takımla beraber çalışma yetenekleri (soft skill) kazanmak kalmış demektir.

Bir grupla çalışıyorsanız,

1- Bir kodun nasıl dökümante edilmesi gerektiğini öğrenmelisiniz. Dökümante etmek için araçlar varsa mutlaka onları kullanmalısınız.

2- Sizinle aynı anda, onlarca kişi aynı kodun üzerinde çalışacaktır. Birbirinizin kodunu ezmeden senkronize olmanız gerekecek.

Yeni bir özelliğin üstünde çalışırken, eski bir versiyona dönüp bir hata düzeltmeniz istenebilir. O zamana dönüp hatayı düzeltip yeni bir paket göndermeniz gerekir. İşte buna kod versiyonlama deniyor ve mutlaka ama mutlaka öğrenmeniz gerekiyor.

Kurumsal ve geleneksel şirketlerde SVN kullanılırken, artık, çok daha mükemmel bir çözüm olan Git kullanılıyor.

3- Genelde şirket dışından ekiplerle de birlikte iş yapacaksınız. Onlara derdinizi iyi anlatmayı, dertlerini iyi anlamayı öğrenmeniz gerekir. Ego savaşına dönüştürmeden problem çözmeye odaklanmalısınız. İki taraf da işi halledebilecekken iş üzerinize kalabilir. Kalsın. İşi çözen taraf unutulmaz. Bu sektörde işler referanslar üzerinden yürür. Sorumluluk aldığınızı gösterdiğinizde kimin ileride size referans olacağını bilemezsiniz.

4- Yazılım üretim süreçleri çok hızlandı. Kısa zamanda çıktı verme, bir şeyler sunma zorunluluğu var. İterasyon iterasyon ilerleyen sürece dahil olabilmeli, Agile metodolojisine uyum sağlayabilmeli, değişikliklerde demotive olmamalısınız.

La havle vela kuvvete. Yine geldik aynı soruya. Ahiret suali gibi yemin ederim. Şimdi, tamamen öznel olarak, yapacağınız işe göre sıralıyorum:

a- Wordpress’te, Drupal’de, Magento’da işimi görecek kadar değişiklikler yapabileyim. Ya da sıfırdan sayfalar tasarlayabileyim:

Öğrenmeniz gerekenler, önyüz tasarlamak ve sunucu tarafıyla iletişime geçebilmek için HTML 5, CSS 3, Javascript. Bu arada, şunu belirteyim; HTML dilini öğreniyorum dendiğini duyunca çok sinirleniyorum. İçinde language kelimesi geçmesi, HTML’İ dil yapmaz. HTML, XML gibi sadece bir etiketleme standartıdır ve HTML’i sadece web tarayıcılar anlar. Bir yazılım dili değildir.

Backend için ise PHP. Ama PHP, bu yazılımlarda artık öyle amatörce kullanılmıyor. Şablon motorları, ORM araçları gayet gelişti ve backend değişiklikleri yapmak için uzun bir öğrenme süreciniz olacak.

b- Kendimce sıfırdan, bir içerik yönetim sistemi ya da bir alışveriş sitesi yazabileyim.

Böyle bir site için full-stack bilgisine ihtiyacınız olacak. Dilin yanında en az bir tane de framework öğrenmeniz, veritabanı ile iletişime geçmeniz gerekecek. DB iletişimleri için MYSQL gibi bir RDBMS’e ihtiyacınız olacak. RDBMS ile iletişime geçmek için SQL öğrenmelisiniz. Onun üstündeki uygulamayı yazmak için ise,

Java — Spring,

C# — .Net,

Ruby-Ruby on Rails ilk aklıma gelen seçenekler.

İşin arama kısmı en zor kısım olacak. Metin arama yapılacağı ve kategoriler oluşturulacağı için farklı bir teknolojiye ihtiyacınız olacak. ElasticSearch Amazon’un sunduğu güzel bir arama çözümü. Kategorilendirme ve arama için ise -eğer kendi sunucunuzda tutacaksanız- Solr gibi bir motora ihtiyacınız olacak.

c- Bir startupın işini görecek, rezervasyon, iş planlama, görev dağıtma işlerinin yapılabileceği basit bir web sitesi yazayım.

Startuplar, geleneksel çözümlerden ziyade yeni teknolojilere geçmek istediği için çözümler de farklılaşabilir. Bunun için yukarıdaki dilleri tekrar tavsiye ediyorum. Fakat bu sefer, veritabanında değişiklik yapıp NoSQL ya da key-value veritabanları kullanmanız gerekebilir. NoSql için MongoDB, CouchDB; key-value için Redis ilk aklıma gelenler.

d- Ios için native uygulama yazayım

Objective-C hala standart olsa da Swift, 3. versiyonu ile yükselişte…

Hiç C geçmişiniz yoksa Swift ile başlayabilirsiniz. Objective-C hem yürek ister hem de yeni uygulamalar için Swift gerçekten kullanılmaya başlandı ve gelecek onda. Gerçi Swift de fonksiyonel programlama bilgisi ister, o yüzden fonksiyonel programlamayı teorik olarak öğrenmekle başlamalısınız.

e- Android için native uygulama yazayım

Android’de dil olarak Java kullanılır. Android, Java biliyorsanız, basit bir ders alarak geliştirmeye başlanabilecek kadar düzayaktır. Zorluk, standart haline gelmiş tasarım şablonlarını ve kütüphanelerini kullanmaya başladığınızda başlar.

f- Ios ve Android için hybrid uygulama yazayım.

Bir mobil uygulama yazarken hem IOS hem Android versiyonlarını düşünmelisiniz. Eğer bir kere yazayım ikisinde de kullanayım diyorsanız HTML 5 öğrenmeli, Javascript ve responsive CSS özelliklerini yalayıp yutmalı sonrasında da Ionic gibi bir framework kullanarak store’larda yayınlanabilecek hale getirmelisiniz. Bu seçenekle uygulamanızın native kadar güzel olmayacağını, kütüphanelerin sınırlı olduğunu, cihaz ile iletişimlerde uyumsuzluklar yaşanabileceğini hesaba katmalısınız.

g- Herhangi bir mobil uygulama için backend yazayım.

Burada backend’den kastımız web servis yazmak.Yani, gelen isteğe göre, veritabanındaki bilgileri servis etmek ya da değiştirmek.

Mobil uygulama bütün girdileri JSON şeklinde formatlar ve bir HTTP isteği olarak web servisimize atar. Bizim backend uygulamamız JSON’ı alır, parçalar, gerekli işlemleri yapar ve cevabı JSON olarak döner.

Burada web servisimizin RESTful olması gerekir. Web servisin güvenliğini sağlamak için HTTP sessionların nasıl kullanıldığını öğrenmeli, en az bir kimlik doğrulama sistemini öğrenmelisiniz. (kullanıcı adı-şifre ya da JWT ya da OAuth2…)

Web servisin performansını arttırmak için cache’leme yapılarını öğrenmeniz, kullandığınız dildeki en güncel sistemi öğrenmeniz gereklidir.

Bunun dışındaki sistemlerde yetkin olmadığım için yardımcı olamıyorum.

Kariyerin aşk-nefret-aşk döngüsü şeklinde geçecek. Bir gün işinden nefret edeceksin, bir gün dünyanın en keyifli işini yapıyormuş gibi hissedeceksin. Çünkü bu bir sevgi olayı Ercan.

Okuyucu Yorumları

0 Yorum