Full Stack Developer Kimdir?
Günümüzde arayüz odaklı geliştirilen yazılımlarda iki temel kısım vardır; front-end(ön yüz) ve back-end(arka yüz). Gerek ihtiyaç, gerek teknoloji, gerekse kullanılan araçlar açısından bu iki kısım birbirinden neredeyse tamamen izoledir ve bağımsız olarak geliştirilerek bir araya getirilen bu iki bileşen yazılımı oluşturur. Front-end dediğimiz kısım aslında bir web uygulaması, mobil uygulama ve masaüstü uygulaması önyüzü olabilir. Back-end ise daha ziyade sunucu tarafında çalışan teknolojilerdir(C#, PHP veya Java kodu, veritabanı, sunucu üzerinde çalışan yazılımlar… gibi)
Dolayısıyla front-end ve back-end farklı bilgi, birikim, araç, programlama dili gibi birbirinden farklı bileşenlerle geliştirilir. Örneğin bir web uygulamasının önyüzünde HTML ve CSS ile sayfaların görünümü belirlenir, JavaScript dili ve kütüphaneleri ile de istemci tarafında çalışacak kodlar yazılır. Sunucu tarafında ise PHP, .NET veya Java gibi bir platformda yazılan kodlar web servislerine, veritabanlarına, cache mekanizmalarına, log sunucularına, sunucu veya bulut üzerindeki kaynaklara erişerek belirli işlemler yapar ve nihayi sonucu istemciye yani front-end’e gönderir.
Front-end ile back-end tanımını ve kullandığı araçlar üzerinden birbirinden ayrışık olduğunu kısaca yorumlamaya çalıştık. Yorumlarımızdan yola çıkarak yazılım geliştirme ekiplerinde her iki tarafta farklı yazılımcıların rol alması beklenir. Zira bir kişinin aynı anda HTML, CSS, JavaScript ve C# dilini iyi derecede bilmesini, web servislerini oluşturmasını, veritabanını yönetmesini ve sorguları oluşturmasını, sunucuda Redis gibi bir cache yapısını uyarlamasını ve yönetmesini vb. konuları bilmesini beklemek biraz insanüstü bir profil oluşturma çabası olarak yorumlanabilir. Dolayısıyla bir yazılımcının normal şartlarda sadece front-end tarafına veya back-end tarafına hakim olması beklenir.
Son yıllarda bilhassa istemci taraflı teknolojilerin gelişmesi bazı şirketlerde ve yazılımevlerinde yazılım geliştiricilerden beklentilerin artmasına sebep oldu. Şöyleki artık geliştirilen bir web uygulamasında back-end’de ASP.NET veya PHP gibi bir ortamı/dili kullanan yazılımcının JavaScript diline, hatta HTML ve CSS’e de hakim olması aranır oldu. Aynı şekilde front-end tarafında yazılımcı olarak çalışan kişilerin de sunucu taraflı teknolojilere hakim olması, gerektiğinde veri modellemesi yapması gibi beklentileri ortaya çıkardı. Çünkü JavaScript’in gelişimi artık birçok programatik işlemin istemci tarafına kaymasına, dolayısıyle back-end’de kod yazan programcının da yazdığı kodun çıktısını istemci tarafında ele almasını gerektirir hale geldi. Ve bu noktada geçmişte çok az duyulan bir yazılımcı profili daha sık duyulmaya hatta bazı firmalarda aranmaya başlandı: Full Stack Developer (Yazının bundan sonraki kısmında kısaca FSD diyeceğim)
Aslında ikinci paragrafın son cümlelerinde full stack developer için iddialı bir tanım yapmıştım: “biraz insanüstü bir profil” Bundan 4-5 sene önce bir yazılımcının aynı zamanda JavaScript’i, HTML’i, CSS’i, PHP veya ASP.NET’i iyi bilmesi, sunucu tarafında kullanılan cache, session, güvenlik gibi konulara hakim olması, hatta üstüne bir de veritabanına hakim olması, veri modellemeleri yapması, veritabanını yönetmesi çok abartılı bir durum olarak karşılanırdı, ki hala da çoğu durumda böyle karşılanmaya devam etmekte. Ancak yukarıda bahsettiğimiz client-side teknolojilerin gelişimi, AJAX’ın, JSON veri yapısının standart haline gelmesi ve JavaScript kütüphanelerinin istemci tarafında sunucuya özel işlemleri de kolaylıkla yapması artık front-end ve back-end kavramlarını daha içiçe hale getirdi.
FSD’ın görevleri nelerdir, ondan neler beklenir, neler beklenmez?
FSD’ın görevlerini aslında tüm yazımız boyunca dile getirdik. Back-end’de arka planda çalışan kodlardan başlayıp front-end’de istemciye gidecek herşeyin FSD’ın elinden geçmesi beklenir. FSD veritabanını tasarlar ve yönetir, sunucu tarafında web servislerini yazar, iş katmanındaki akışları yazar ve view dediğimiz önyüzleri oluşturur. Tabii ki önyüzde gerekli olan kodları(HTML veya XAML gibi) yine o yazacaktır. HTML’in yanında CSS ile sayfaya son şekillerini verecektir, JavaScript kütüphanelerini kullanarak istemci tarafındaki tüm atraksiyonları da yapacaktır. Önyüz tarafındaki grafikler FSD’i çok ilgilendirmese dahi, zaman zaman ufak tefek grafikler hazırlamak için Photoshop vb. bir grafik editörünü dahi açması gerekebilir(Grafiksel işler FSD’nin görevlerinden biri değildir, ama bazen işin bu kısımlarıyla da uğraştığını görebiliriz).
FSD olarak çalışmanın ağırlığını azaltan birkaç konudan da bahsetmeliyiz. FSD’dan veri tabanınını dört dörtlük tasarlaması ya da sunucu tarafındaki cache mekanizmasını en ince detayına kadar bilmesi beklenmez. Yukarıda bahsettiğimiz dil ve teknolojilerin hepsine yeterli seviyede hakim olması, uygulamayı istenilen sürede, istenilen niteliklerde bitirmesi beklenir. Zaten FSD’ın bu konuları bu denli derinlemesine bilmesi, yazının başında bahsettiğimiz yazılımcıyı “insanüstü profil” noktasına getirecektir. Aynı anda ortalama 15-20 müşterisi olan bir lokantada yemeklerin pişirilmesi, müşterilere servis yapılması, bulaşıkların yıkanması, kasada hesapların alınması gibi işlerin tek kişi tarafından yapması beklenmez elbette. FSD’ın aynı anda işi pişirmesi, servis etmesi, bug’ları fix’lemesi, uygulamayı izlemesi ancak küçük ve orta çaplı bir projede mümkün olabilecektir.
FSD rolü hangi tarz projelere daha uygundur?
Tabii ki büyük ve uzun soluklu projelerde FSD rolüne çok ihtiyaç duyulmaz. Zira bu tarz projeler zaten kalabalık yazılım ekipleriyle geliştirilir ve ekipte her zaman front-end tarafına da back-end tarafına da hakim olan en az birkaç yazılımcı olacaktır. Görevleri ayrıştırmak bu tip projeler için daha sağlıklı olacakır. Front-end developların sadece önyüz tarafına, back-end developerların ise sadece sunucu tarafına odaklanması, onları verimini ve projenin daha sağlıklı yürütülmesini sağlayacaktır.
FSD yani Full Stack Developer dediğimiz yazılımcı rolünü kısaca tanımaya çalıştık. Günümüzde gelinen noktada artık yazılımcıların FSD olarak çalışmasa dahi, yazılım geliştirmenin bir tarafında tamamen yetkin, diğer tarafında ise kısmen yetkin olması, en azından teknolojilere ve araçlara yüzeysel de olsa hakim olması gerekmektedir(Yani back-end developer iseniz HTML5, AngularJS gibi teknolojilerden haberdar olmanız önemli) Bu çerçevede yetkinliklerimizi gözden geçirmemizi ve kişisel gelişimimize buna göre yön vermemiz gerektiğini düşünüyorum. Bilhassa web tabanlı ve mobil tabanlı projeler geliştiren arkadaşlar için geçerli bir durum.
Son paragrafı destekler nitelikle olan bir Martin Fowler cümlesi ile yazıyı sonlandıralım. Ne diyor üstad: “Yazılımcılar full stack olmak zorunda değil, ancak yazılım ekipleri full stack olabilmeli”
Developers don’t have to be full-stack but teams should be.
Martin Fowler
8 Comments
Eray
28 Ağustos 2015 at 12:05Merhaba Uğur Hocam,
Memlekette yazılım geliştirme endüstrileşmeden title bazlı gelişim göstermemiz ne acı bir olay değil mi ?, Yıllardır yazılım ilanlarında aynı satırlarında asp.net, php, yada c#, java, c, c++ gibi terimleri gördükten sonra henüz ortaya elle tutulur bir marka çıkartamadan yeni bir hevesle kendi kendimizi tatmin ediyoruz. konu bana göre” full otomatik programcı ” nın ingilizce makyajlanmış halidir. yazılan hazır kütüphaneleri alıp birbirine entegre etmekten öteye geçilmiyor en ufak bir konfigürasyon uyumsuzluğunda bitmek bilmeyen bug ayıklama çığı oluşturuyor. bu yeni kavramlar biz yazılımcıların içinde olduğu ve dolayısıyla insan kaynaklarının daha absürt ilan yayınlamasından öteye geçemeyecek gibi bugun FSD derler yarın half life stack developer öbürgün doom stack developer. sonu gelir mi bilinmez, neyse konuya değindiğiniz için teşekkürler elinize sağlık
Uğur Umutluoğlu
31 Ağustos 2015 at 15:23Merhaba Eray hocam,
İşin “sektör gerçekleri” kısmını bir tarafa bıraktığımızda bu tip konumlandırmaları ben de çok doğru bulmuyorum. Maalesef ülkemizde bir işi günü kurtarır nitelikte bitirmek ve işi paraya çevirmek öncelikli. Yine işverenlerin kaliteli ve sağlam bir işten çok, “başımız sorun çıkarmayacak derecede kalitede olsun, işimizi görsün yeter…” bakışları bizi bu noktalara götürüyor. Tabii sadece bizim ülkemize has bir durum değildir bu, ama bu ülkenin vatandaşlarıyız ve bizi olumsuz etkiliyor.
Yazının son paragrafındaki nacizane tavsiye niteliğindeki durumu dikkate alsak biz yazılımcılar için yeterli olur sanırım
Halil İbrahim Kalkan
31 Ağustos 2015 at 22:03Selamlar Uğur Hocam,
Güzel bir yazı olmuş, elinize sağlık. Özellikle küçük (2-3 kişilik) takımlarda FrontEnd-BackEnd ayrımı yapmak pek mümkün değil. Ancak bir kişinin uçtan uca tüm teknolojilere hakim olması zor gerçekten de, herkesten bunu beklemek haksızlık olur. Bu nedenle ben Full-Stack Developer’u değerli buluyorum. Pek bulamıyorum ama bulursam değerli yani
Ben şahsen FullStack development yapmayı seviyorum. Böylece tek başıma da proje geliştirebiliyorum.
Büyük firmaların frontend/backend ayrımı yapması çok mantıklı tabii.. ancak böyle bir projede dahi (sizin de yazıda belirttiğiniz üzere) en az bir tane tüm projeye hakim FSD ya da yazılım mimari bulunmalı. Aksi halde işler pek yürümüyor.
Neticede artık günümüzde herkes her şeyi az çok bilmeli, en azından bir ya da birkaç şeyde de derinlemesine bilgi ve deneyim sahibi olmalı sanırım.
Kolay gelsin.
Tayfun
1 Eylül 2015 at 11:55İK’cıların aradığı Full Stack Developer, javascript & en az 1 backend teknoloji bilen yazılımcıdır.
Hüseyin
3 Eylül 2015 at 10:38Merhaba Uğur hocam,
Yorumlarınızı okudum tamamı ile katılıyorum. Fakat bu düşünceleri değiştirebilen düşüncelere sahip insanlarda var örneğin siz değerli hocalarımız gibi.. Bu değişimi siz neden ateşlemiyorsunuz ?
İhsan Erbil
3 Eylül 2015 at 16:40Patron bu title’ı çok sevecek.
Yanılmıyorsam yıllardır Türkiye’de olan da buydu zaten.
Burhan
3 Eylül 2015 at 18:22abi, martin fowler’i bir kere daha sevdirdin bana. (:
MESUT ÇAKIR | Analist ve Yazılımcı | Full Stack Developer Nedir ?
1 Haziran 2016 at 15:20[…] http://devnot.com/2015/full-stack-developer-kimdir/ […]