Alaylılar için yazılım geliştirme yazı serimizin 3’üncüsüne hoş geldiniz. Bu yazımızda sizi bazı temel teknoloji ve araçlarla tanıştıracağız.

Yazının ilk iki bölümünden (1 ve 2) haberdar olduğunuzu varsayarak başlıyoruz. Lakin İbn Sina uygulamasının sahibi olduğunuzu unutun. Alaylılar için yazılım geliştirme dünyasında siz artık bir stajyersiniz!

Okul stajı için başvurduğunuz firmada staja başladınız ve firma bir yazılım geliştirme ajansı.

İşteki ilk gününüzde İbn Sina uygulamasının varlığından haberdar oldunuz. Uygulamanın sahibi uygulamanın en baştan yeniden tasarlanması konusunda ısrarcı. Proje için 3 aylık geliştirme süreci öngörülmüş ve bu sizin staj sürenizle uyumlu. Pek çok şeyi gözlemleme şansınız olacaktır.

Ortak çalışma araçları ve sürüm takibi

Yazılım geliştirmeye başlamadan önce göz önünde bulundurulması gereken ilk konu yazılım geliştirme işlemindeki süreçlerin ilk olarak nasıl takip edileceği, nasıl denetleneceği ve en önemlisi sürüm takibinin nasıl yapılacağıdır.

Ortak çalışma araçları şirketten şirkete değişmektedir. Jira, Trello, Slack, Rocket.Chat türevi yazılımlar/web uygulamaları yaygın olarak kullanılmaktadır. Sürüm takibi konusunda Git neredeyse standart hale gelmiş durumdadır. Yine de CVS, SVN kullanılan projelere denk gelmek mümkündür.

Git ile sürüm takibinde GitHub, GitLab, Bitbucket gibi siteler de kod deposu olarak kullanılmakta, içerdikleri araçlarla projeler için hata takibi ve çok daha fazlasını sağlayabilmektedir. Bu hizmetler ve araçlar bazen ücretsiz, bazen ücretli olabilmektedir.

GitHub, açık kaynak kodlu projelere ücretsiz ve sınırsız barındırma hizmeti sağlaması sebebiyle yaygın şekilde kullanılmaktadır. GitLab ise ücretsiz olarak kendi sunucunuza (on-prem) kurulabilmesiyle GitHub’dan ayrılmaktadır. Örneğin Pardus, GNOME, KDE ve daha pek çok özgür yazılım projesi, GitLab altyapısını kendi sunucularına kurarak kullanmaktadır.

GitHub, GitLab, Bitbucket (çok basit) çeşitli hata takip altyapılarıyla gelmektedir. Şirketin kullandığı yapıya göre bunların veya bunlardan birkaçının öğrenilmesi gerekebilir.

Grafik tasarım

Ajans olmanın avantajıyla pek çok sürecin oturmuş olduğunu gözlemleyebilirsiniz. Örneğin grafik-tasarım ekibi önce uygulamanın nasıl görünmesi, hangi öğenin nerede olması gerektiğini gösteren, genelde PDF bir görseller silsilesi tasarlar. Bu görseller müşteriye gönderilir ve tasarım kesinleştirilir. Kesinleşen tasarım uygulama ekibine veya ekiplerine gönderilir.

Mobil uygulama

Her firmanın uygulama geliştirme yaklaşımı farklı olabilir. Ajansınız yazılım geliştirme maliyetlerini düşürmek için bir Dart dilini ve Flutter SDK ortamını tercih etmiş olabilir. Platform bağımsız bir geliştirme ortamı için React Native araçlarını kullanabilir. Aslında seçenekler bunlarla sınırlı değil. Bunlar sadece çapraz platform (hem iOS, hem Android) için yazılım geliştirmeye izin veren programlama dilleri ve çatılarına iki örnek.

iOS için native yazılım geliştirmek için Swift programlama dili kullanılmaktadır. Daha eskiden Objective-C dili kullanılıyordu lakin artık pek tercih edilmemektedir.

Android için native yazılım geliştirme için genelde Kotlin dili kullanılmaktadır. Daha eskiden Java dilinin kullanımı tavsiye ediliyordu. Android için C++ , C# ve hatta Adobe PhoneGap çatısını kullanarak HTML, CSS ve JavaScript ile uygulama oluşturmak mümkündür. Lakin bu genelde tercih edilmeyen bir yöntemdir.1

Web sitesi

Web sitelerinin ön yüzleri (front end) genelde HTML, CSS ve JavaScript kullanılarak yazılmaktadır. Bu üç aracın yerine sadece JavaScript kullanan (React Native vb) yaklaşımlar da bulunmaktadır.

Web sitelerinin mobil, cep telefonu ve bilgisayarlara eş zamanlı cevap üretmesi beklenmektedir. Kullanıcı, doğal olarak masaüstü tarayıcısı üstünden erişebildiği bir özelliğe cep telefonu tarayıcısı üzerinden de erişebilmek istemektedir. Web sitelerinin kimileri bunun için iki farklı arayüz kullanmayı tercih etmektedir. İlki, genelde alt alan adına yönlendirilmiş mobil arayüz, ve masaüstü arayüzü.

Somut bir örnek vermek gerekirse, meşhur iki kitap satış sitesini karşılaştıralım. Mesela kitapyurdu.com sitesine cep telefonu üstünden girdiğinizde sizi (https://m.kitapyurdu.com) alt alan adına (subdomain) yönlendirecektir. Masaüstünden girdiğinizdeyse yönlendirmeden masaüstü arayüzünü gösterecektir. Her site aynı tekniği kullanmamaktadır. Örneğin https://www.amazon.com.tr sitesine hangi cihazla girerseniz giriniz, ekrandaki eğeler cihazınızın veya bilgisayarınızın ekran boyutuna göre şekilenmeye çalışılacaktır, lakin site bir alt alan adına yönlendirilmeyecektir. Bu yönteme Responsive tasarım (duyarlı tasarım veya uyumlu tasarım olarak da çevrildiği olmaktadır) denilmektedir.

CMS/İYS ne demektir? ACP/Yönetim Paneli ne işe yarar?

CMS kelimesi, Content Management System teriminin kısaltmasıdır. İçerik Yönetim Sistemi demektir. İYS olarak da kısaltıldığı olmaktadır. İçeriklerin eklendiği, düzenlendiği, silindiği, kategorilendiği her web sitesi özünde bir içerik yönetim sistemidir. Ücretli veya ücretsiz pek çok içerik yönetim sistemi bulunmaktadır.

Yönetim paneli de içerik yönetim sisteminin kalbidir. Tüm içerikler yönetim paneli aracılığıyla veritabanına kayıt edilir. İçerik yönetim panelleri genelde çeşitli rol ve yetki tanımlarıyla birlikte gelmektedir. Roller ve Yetkiler her içerik sisteminde farklı olup, farklı işlevlere erişimi kısıtlar veya izin verir.

API nedir? Ne işe yarar?

Uygulamalar arasında veri alışverişini kolaylaştırmak için tasarlanmış yapılardır. Uygulama kaynaklarına erişmek için kullanılmaktadır. REST ve SOAP diye iki yaygın API çeşidi bulunmaktadır. REST için JSON, SOAP için XML kullanılmaktadır.

Sunucu nedir?

Veriler internete hızlı erişimi olan, yedekli yapıda çalışan, görece büyük bilgisayarlarda tutulur. Fiziksel ve Sanal olarak iki farklı sunucu çeşidi vardır deyip, detaya girmeyelim. Sunucu, hizmet sağlayıcılardan sağlanmış bir sınırlı bir alanı kullanabileceği gibi o siteye veya kaynağa atanmış özel bir bilgisayar (dedicated) da olabilir.

Bir sunucu birden çok görevi aynı anda yerine getirebileceği gibi e-posta sunucusu, veritabanı sunucusu, dosya sunucusu gibi çeşitli görevlere göre özelleştirilmiş de olabilir.

Veritabanı ve SQL nedir?

İçerik yönetime girdiğimiz her içerik aslında arka planda sürekli çalışmakta olan ve verileri depolamaya yarayan veritabanı veya tabanları üstüne kaydedilir. Veritabanlarının da çok çeşidi bulunmaktadır. İlişkisel veritabanları için SQL denilen bir dil kullanılır. MariaDB ve PostgreSQL ücretsiz ve özgür veritabanlarına örnek olarak verilebilir. MSSQL ve Oracle Database (bazen sadece Oracle diye de alınır) ise ücretli veritabanı örnekleridir.

Cloud/Bulut nedir?

Cloud Storage/Bulut Depolama ve Cloud Computing/Bulut Hesaplama diye genelde iki başlık altında ele alınmaktadır. Bizi ilgilendiren kısmından bakarsak veritabanı ve dosyalarımızın dağıtık olarak, fiziksel sabit bir karşılığı olmayan, gerektiğinde genişleyebilen gerçek sunucular üstüne, veri merkezi içinde dinamik olarak, kendisine ayrılan kaynaklarla sınırlı olarak çalışıyor olmasıdır.

CDN nedir?

CDN kelimesinin kısaltmasıdır. Türkçeye de aynı şekilde geçmiştir. Siteler üstünde çok yer kaplayan ve yaygın ve dağıtık şekilde erişilmesi gereken statik içeriklere (resimler, videolar vs) hızlıca erişmeye sağlayan bilgisayar ağları veya hizmet sağlayıcılardır. Aynı şekilde içerik sunmak için özelleştirilmiş bilgisayarlar da bulunabilir. Bu tamamen IT tarafının tercihine bağlıdır.

Örneğin Facebook sitesine yüklediğimiz bir resim bulut üstünde depolanır. Talep geldiği durumda talebe en yakın CDN ağı tarafından ana sunucudan çekilir ve kullanıcıya gönderilir. Böylece kullanıcı içeriğe daha hızlı erişmiş olur.

Alaylılar için yazılım geliştirme dünyası

Yazılım dünyasına adım atmaya muhtemelen hazırsınız. Gözünüzü biraz korkutmuş da olabiliriz. Lakin meşhur Matrix sahnesini hatırlamak gerekirse, kırmızı hapı veya mavi hapı seçmek sizin elinizde.

BT dünyası sadece mavi ve yeşil haptan ibaret değil. Her renkten, her çeşitten sizi kendisine bağlayacak araçlar var.

Alaylılar İçin Yazılım Geliştirme

Geliştirici olmanın artıları ve eksileri

Grafik Tasarımcı Olmak

Grafik tasarım kısmı web sitesi veya uygulama geliştirmenin en eğlenceli kısmıdır. Genelde Photoshop bilgisi, bol bol uygulama ve web sitesi bilgisi. Kullanılan teknolojilerin temel yapabilirliklerine aşinalık gerektirir. Genelde de iyi kazandırır.

Müşterinin her isteğini tasarlamaya çalışmak, sürekli müşteri temsilcileriyle olurdu/olmazdı tartışması yapmak gibi dezavantajları olabilir. Sadece web sitesi veya uygulama tasarımı yaparak geçinmek zor olacağından daha farklı tasarım işlerini de yapmanız gerekecektir. Mesela bir oyun için yeni karakter veya karakterler tasarlama teklifi alabilirsiniz. Hiç çekinmeden evet diyebilmelisiniz.

Mobil Uygulama Geliştiricisi Olmak

iOS uygulama geliştirmek için öncelikli olarak bu ekosistemin içine girmek kaçınılmazdır. Bir iPhone, bir MacBook Pro edinmeniz, sürekli en güncel işletim sistemi sürümünü kullanmanız gerekecektir.

iOS için uygulama mağazasına uygulama yükleyebilmek için Apple Geliştirici (Developer) hesabı açmanız gerekecektir. 2022 yılı itibariyle bireysel geliştirici olmanın yıllık maliyeti 99 dolar olarak görünmektedir.

Windows veya Linux ortamında Android uygulaması geliştirmek mümkündür. Sadece Google’ın geliştiricilerden talep ettiği ücret bir defaya mahsus 25 dolar olarak görünmektedir.

Android kullanılan cihazların çeşitliliği, ekran boyutları ve kalitesi çok çeşitlidir. Bu sebeple çok daha fazla ince ayar yapılmasına, daha sık uygulama güncellemeye gerek olacaktır.

Cep telefonları için uygulama geliştirmek genelde iyi kazanç getirmektedir. Lakin cep telefonu uygulamaları sürekli gelişim göstermekte, yeni teknolojiler gelmekte, eski teknolojiler terk edilmektedir. Yazdığınız bir uygulamanın sürekli yeni nesli ve yeni modelleri çıkan telefonlara göre test edilmesi, uyarlanması gerekecektir.

Önyüz Geliştiricisi Olmak

Temel olarak HTML, CSS ve mutlaka JavaScript bilmeyi, bir o kadar da JavaScript kütüphanesi ile uğraşmaya hazır mısınız. Chrome tarayıcısında güzel görünen tasarım Firefox veya Safari içinde neden bu kadar dağınık! O JavaScript kodunun tüm siteyi kullanılamaz kılacağını hiç tahmin etmiyordunuz, lakin olacak. Bütün bu uğraşlar arasında sürekli yenileri gelişen teknolojilere de uyum sağlamanız gerekecek. https://caniuse.com sitesi mesela çok işinize yarayacak. CSS önişlemcileri tanıma şansınız olacak. Kod yazar gibi CSS yazacaksınız. Kullanıcısı neredeyse olmayan onlarca tarayıcıyı adınız gibi tanımaya başlayacaksınız. Yine de sürekli değişikliğin olduğu bir alana adım atmakta olduğunuzun farkında olmakta yarar var.

Arkayüz Geliştiricisi Olmak

Sürekli hackerların hedefinde olmaya hazır mısınız? Sürekli birileri sizin açığınızı arayacak. Gün gelecek 6 ay önce yazdığınız kodu neden yazdığınızı kendinize bile açıklayamayacaksınız. Yine de her gün yenisi çıkan programlama dilleri ve sürümleri arasında kendinizi kaybetmeye hazır mısınız.

Kırmızı hapı siz seçtiniz!

1 Bu kısım biraz ezber, biraz da şu yazıdan özetlenmiştir: