Yazılım geliştiricilik (yazılımcılık, programcılık) günümüzdeki en popüler mesleklerden biri. Hem ülkemizde hem de dünyada bu işi yapan insanlara ihtiyaç sürekli artıyor. Çevremde bir çok yeni üniversite mezunu veya meslek değiştirip bu işe girmek isteyen insan var. En çok sorulan sorulardan biri de nereden başlamalıyım?
Bu sorunun ideal bir cevabı olduğunu düşünmüyorum. Bu işi yapan farklı deneyimleri ve eğitim geçmişleri olan kişiler tanıyorum. Benim tecrübe ettiğim kadarıyla biraz kişisel bir yolculuk.
Bu yazıyı yazmaktaki amacım, meslekte 14. yılına girmiş biri olarak kendi tecrübelerimden ve gözlemlerimden yola çıkarak, yararlı olabileceğini düşündüğüm bazı konulara değinmek.
Başlamadan Önce
Konuya girmeden önce bir kaç uyarıyla beraber sizi nelerin beklediğini anlatmak isterim. Amacım kesinlikle yeni başlayanları caydırmak değil, sadece beklentilerinizi düzgün belirlemenize yardımcı olmak.
- Öğrenmek hiç bitmiyor. Yazılım bir zanaat ama diğer bir çok zanaattan farklı olarak öğrendiğiniz şeylerin sizi bir ömür idare etmesi mümkün değil. Hayatınızın büyük bir kısmı bundan sonra sürekli yeni şeyler öğrenmekle geçecek. Çoğu zaman özel hayatınızdan bu öğrenme sürecine vakit ayırmanız gerekiyor. Teknolojiler, yöntemler çok hızlı gelişiyor ve değişiyor. Buna ayak uyduramayacağınızı düşünüyorsanız yazılım geliştiricilik sizin için uygun bir meslek olmayabilir.
- İnanılmaz bir adanmışlık ve tutku istiyor. Bu işi sevmiyorsanız yapmakta çok zorlanabilirsiniz. Yeni şeyler öğrenmek bir zorunluluk evet ama öğrenmek için öğrenmeye herzaman hevesli olmalısınız, öğrenmekten keyif almalısınız.
- Uykusuz gecelere ve sürekli problem çözmeye hazırlıklı olmalısınız. Bazen çok basit bir sorunu çözmek için bile saatlerinizi, günlerinizi vermeye hazır olmanız lazım. Çoğu zaman yetişmeniz gereken deadline’lar olabilir, şirkette uzun saatler geçirmeniz gerekebilir. Stres yönetiminizin iyi olması gerekiyor.
- Ömrünüzün önemli bir bölümü artık bilgisayar başında geçecek. Bunun getireceği belli başlı sağlık problemlerinden kaçınmak için ekstra çaba sarf etmeniz lazım.
- Öğrenmeyi öğrenmeniz gerekiyor. Elbetteki çevrenizde size yardımcı olacak kişiler olacaktır. Ama çoğu zaman kendinizi sizden başkası geliştirmeyecek. O yüzden öğrenmeyi, araştırma yapmayı öğrenmeniz elzem. Deneme yanılma hayatınızın bir parçası olacak, sabırlı olmanız gerekiyor.
- İngilizce öğrenmeniz bir noktadan sonra zorunluluk. En azından teknik makaleleri, blog yazılarını, youtube video’larını veya eğitim video’larını anlayacak kadar İngilizcenizin olması gerekiyor. Türkçe kaynaklar çok kısıtlı ama İngilizce öğrendiğiniz zaman çok fazla kaynağa ulaşabiliyorsunuz.
Dediğim gibi amacım kesinlikle cesaretinizi kırmak değil ama yukarıda yazdıklarım hayatınızın bir parçası olacak.
Sözlük
Yazılım geliştirme, sektöre yeni girecek olanlar için kafa karıştırıcı bir çok terim içeriyor. Bu yüzden yazı boyunca sık sık karşılacağınız belli kavramları biraz detaylandırmak istiyorum.
Platform: Platform geliştirdiğiniz yazılımın üzerinde çalıştığı yere deniyor. Bu donanımda olabilir veya işletim sistemleri ( OS — Operating System) gibi yazılımlar da olabilir. Üzerinde tam olarak anlaşılmış bir kavram mı emin değilim ama yazılımcılar olarak sık sık kullanıyoruz. Örneklerle açıklamak gerekirse. Windows üzerinde bir uygulama geliştiriyorsanız Windows sizin için bir platform. Aynı örneği Android ve iOS için de verebiliriz. Ama bunlara .NET ve Java gibi platformlar da örnek verebilir. Çünkü bu platformlarda geliştirdiğiniz uygulamalar doğrudan işletim sistemi üzerinde çalışmaz. Arada bir sanal makina (virtual machine) vardır ve kodunuz onun üzerinde çalışır. Sanal makina işletim sistemiyle uygulamanız arasında bir katman vazifesi görür. Böylece her işletim sistemine ayrı kod yazmak zorunda kalmazsınız, siz tek bir kod yazarsınız, sanal makina (platform) sizin adınıza yazdığınız kodu çeşitli platformlarda (Windows, ,OS, Android vb.) çalışmasını sağlar.
Runtime Environment: Platformdan sonra benzer bir tanımlama yapınca kafanız karışabilir. Çalışma-zamanı ortamlarını (runtime environment) geliştirdiğiniz yazılımların çalışmasını sağlayan, yardımcı yazılımlar olarak düşünebilirsiniz. Bugün, bir bilgisayardaki yazılımın onu desteklemek için başka bir ek yazılıma ihtiyaç duymadan çalışması çok nadirdir. Buna verilebilecek en güzel örnek Node.js çalışma-zamanı ortamı. Node.js Javascript’in browser (tarıyıcı) dışında da çalışmasını sağlıyor. Yine hem .NET hem de Java platformları kendi çalışma-zamanı ortamlarını sağlarlar. Java için bu JRE (Java Runtime Environment), .NET için CLR (Common Language Runtime).
Library (Kütüphane): Yazılım geliştiriciler olarak herşeyi sıfırdan biz yazmıyoruz. Belli sık kullanılan fonksiyonların yazılmışları var. Örneğin her yazılım dilinin bir Math kütüphanesi vardır. Bu kütüphane logaritmik, trigonometrik fonksiyonları içerir. Veya math gibi metin, grafik, veritabanı işlemleri için fonsiyonlar barındıran kütüphaneler de vardır. Kendiniz de sık kullandığınız fonksiyonları kütüphane haline getirebilirsiniz. Bir uygulamayı geliştirirken belki onlarca kütüphane kullanmanız gerekebilir. Kütüphaneler size oldukça vakit kazandırır. Çoğu sık ihtiyaç duyalan kütüphane genelde daha önceden binlerce kişi tarafından kullanılmış ve hataları ayıklanmıştır. Yazılım dillerini öğrenirken pratik yapmak için belli şeyleri kendiniz yazmanız çok eğitici olacaktır. Ama ihtiyacınız olduğu zaman kütüphane kullanmaktan çekinmeyin.
API (Application Programming Interface): Kütüphaneler dış dünya tarafından erişilebilir hale getirildiği zaman API haline gelmiş oluyorlar. Kütüphane doğrudan kodun kendisini işaret ederken, API ise kütüphanenizi kullanıma açtığınız arayüzü işaret eder. API’lar çoğunlukla yazının ilerleyen kısımlarında bahsedeceğim front-end (ön yüz) ve back-end (arka yüz) arasındaki haberleşmelerde kullanılıyor. Günlük hayatımızda kullandığımız bir çok uygulamanın geliştiricisi olan Google ve Microsoft gibi firmaların da API’ları var. Böylece kendi geliştirdiğiniz uygulamalara, bu firmaların geliştirdiği API’ları entegre ederek yeni özellikler kazandırabilirsiniz. Mesela bugün bir çok mobil uygulamada Google veya Yandex’in harita API’leri kullanılmaktadır. Böylece rota çizme veya trafik bilgisine ihtiyaç duyan bir uygulama geliştiriyorsanız, kendiniz böyle bir alt yapı geliştirmek yerine bu API’leri kullanabilirsiniz.
IDE (Integrated Development Environment): Teorik olarak bir uygulamayı sadece Notepad gibi metin düzenleyicileri kullanarak geliştirmeniz mümkün. Ama bu elbette çok acılı bir süreç olurdu. Bunun yerine çoğu zaman IDE dediğimiz araçları kullanıyoruz. IDE’ler kod yazarken size oldukça yardımcı olurlar. Örneğin kod tamamlama, bir kütüphanenin içerisinde hangi fonksiyonların olduğunu gösterme, debug etme, kod üretme gibi bir çok özellik barındırırlar. Günümüzün en popüler IDE’ler Visual Studio Code, Visual Studio, IntelliJ IDEA, Android Studio, XCode gibi çeşitli diller ve platformlar için geliştirmiş IDE’lerdir. Bunların yanı sıra tam olarak IDE sayılmayan ama Nodepad gibi uygulamalardan kat kat daha yetenikli olan gelişmiş metin düzenleyiciler de var. Hatta bazıları belli IDE özelliklerini de içeriyorlar. Vim, Sublime, Notepad++ gibi metin düzenleyiciler ilk aklıma gelenler.
SDK (Software Development Kit): Belirli bir platformda geliştirme yapmak için ihtiyacımız olan bütün geliştirme araçlarını barındaran “kit”’lere SDK denir. İçerisinde bir yazılım geliştiricinin ihtiyacı olan herşey bulunur: Kütüphaneler, API’ler, IDE, dökümantasyonlar vb. Mesela Android SDK size Android platformunda geliştirme yapmanız için gerekli herşeyi sağlar.
Framework (Çerçeve, Yazılım İskeleti): Belli bir amacı gerçekleştirmek için geliştirilmiş olan kütüphanaler topluluğu diyebiliriz. Ama içerisinde sadece bir takım kütüphaneler barındırmaz. Framework bir yapıdır, size bir mimari iskelet sağlar. Soyutlama (abstraction), ortak tasarım kalıplarının kolayca yeniden kullanılmasına izin verirken, belirli ayrıntıların geliştiricilere bırakılmasına izin verir, yani Framework’leri size ihtiyaca göre özelleştirme imkanı da sağlar. Ortak tasarım kalıplarının tekrar kullanılması, benzer problemleri çözmek için genel yapıya sahip olmak anlamına gelir. Örnek vermek gerekirse .NET içerisinde bir çok farklı amaç için framework’ler barındırır. Bunlardan biri web uygulamaları geliştirmek için kullandığımız ASP.NET MVC (Model-View-Controller). Modern yazılım geliştirme süreçlerinde bu tip yazılım iskeletlerinini sık sık kullanıyoruz. Çünkü hem bize oldukça vakit kazandırıyor hem de çok iyi test edilip, binlerce yazılım geliştirici tarafında da kullanıldığı için, bir sorunla karşılaştığımızda çözümünü kolayca bulabiliyoruz.
Solution Stack, Software Stack: Veya kısaca Stack. Yazılım sektöründe en sık duyacağınız kavramlardan biri de stack kavramı. Stack bir sorunu çözmek için bir araya getirdiğimiz platform, framwork, dil ve yazılımlar topluluğu. Örnekle açıklarsam daha anlaşılır olacak. Loglama ve uygulamaların sağlığını veya istatistiki bilgileri gözlemlemek için kullanılan en popüler stack’lerden biri ELK. ELK, Elasticsearch, Logstash ve Kibana gibi farklı amaçlarla üretilmiş ama güçlerini birleştirdiklerinde bahsettiğim işleri yapmanızı sağlayan bir üçlü. Veya bir zamanların çok ünlü LAMP stack’i. LAMP, Linux, Apache, MySQL ve PHP (veya Perl, Python) ‘nin bir araya gelmesinden oluşuyor. Yani Linux işletim sistemi üzerinde, MySQL veritabanı kullanarak, PHP ile uygulama geliştirmeye LAMP deniyor. Veya MEAN stack yine popüler olan stack’lerden. MEAN, MongoDB (bir no-sql veritabanı), Express.js (Node.js üzerinde çalışan bir web framework’ü), Angular (Front-End dünyasında kullanılan bir framework) ve Node.js. Stack aynı zamanda bir şirkette ne kullanıldığını anlatmak için de kullanılıyor. Örneğin çalıştığım şirket ağırlıklı olarak .NET stack’inde uygulama geliştiriyor. Burada anlamanız gereken o şirkette daha çok .NET ve Microsoft çözümlerinin kullanıldığı.
Sektöre Genel Bir Bakış ve Roller
Yazılım geliştirici olarak iş bulabileceğiniz bir çok alan var. E-Ticaret, bankacılık, finans, sağlık, savunma sanayii, yazılım ve proje evleri, ajanslar, medya aklıma ilk gelenler.
Zaten yazılım geliştiriciye ihtiyacın sebebi de bu kadar farklı alanda ihtiyacın olmasından kaynaklanıyor. Özellikle dijitalleşmenin giderek arttığı bir dönemde, bir yazılımcı olarak kendinizi geliştirdiğiniz sürece iş bulamamanız çok zor.
Bir yazılım dili ve platformu öğrendikten sonra bu alanlardan birinde uzmanlaşmayı seçebilirsiniz. Öğreniğin e-ticaret alanında uzmanlaştıktan sonra o alanda iş bulmanız çok daha kolaylaşacaktır. Hatta zaman içerisinde aranan bir insan haline de gelebilirsiniz. Ben özellikle mesleğin başındayken birçok farklı alanı tecrübe etmenizi tavsiye ederim. Kariyerinizi nasıl şekillendireceğinize kendiniz karar vereceksiniz. Bunun tek bir yolu yok. Uzun yıllardır e-ticaret, bankacılık gibi alanlarda çalışmıya devam eden arkadaşlarım da var, belli aralıklarla alan değiştiren arkadaşlarım da var.
Bir de yazılım geliştirme rolleri var. Genelde bu rollerden birini kariyerinizin başında seçiyorsunuz ve giderek bu rolde uzmanlaşıyorsunuz. Ama kendinizi herhangi bir rolde kısıtlamanıza gerek yok. Hatta hepsinin ne yaptığı hakkında fikir sahibi olmanızda fayda var.
Front-End (Ön yüz) Developer
Browser (tarayıcı)’larda gördüğünüz ve kullanıcının doğrudan etkileşime geçtiği herşeyi bu arkadaşlar geliştiriyorlar. Genel olarak kullandıkları yazılım geliştirme dilleri:
HTML (HyperText Markup Language): HTML bir web sayfasının omurgasını oluşturur. Bugün ziyaret ettiğiniz her web sayfası HTML kullanılarak geliştirilmiştir. HTML ile bir sayfanın genel yapısını ve içeriğini tanımlıyoruz. Güncel versiyonu uzun süredir HTML 5.
CSS (Cascading Style Sheets): HTML’in nasıl görüneceğini ise CSS ile sağlıyoruz. CSS ile renkleri, arkaplan resimlerini, fontları ve daha birçok görsel ayarlamayı yapabiliyoruz. Ayrıca modern CSS, animasyonlar konusunda da oldukça yardımcı oluyor. Güncel versiyonu uzun süredir CSS 3.
Tek başına HTML vs CSS kullanarak web sitesi yapmak mümkün ama günümüz standartlarında web uygulamaları yapmak için Javascript kullanmak şart. Biraz Javascript’den bahsedelim.
Javascript (ECMA Script)
Javascript neredeyse web’in (world wide web — www) kendisi kadar eski bir yazılım geliştirme dili. Aslında üzerine sayfalarca yazı yazılabilir ama konumuz olmadığından özetlemeye çalışacağım. Benim de favori dillerimden biridir :)
Javascript, fotoğrafını gördüğünüz kişi olan Brendan Eich tarafından 1995 yılında 10 gün içerisinde geliştirildi. Her ne kadar son 25 senedir o 10 gün içerisinde yapılmış bazı kronik hataları düzeltmeye çalışsak da, Javascript oldukça yetenekli ve geliştirme yapması keyifli bir dil. Keşke adama bir ay felan verselerdi.
Javascript bugün tartışmasız dünyanın en yayın kullanılan dili ve bir front-end geliştirici olmak istiyorsak öğrenmemiz şart. Ayrıca back-end başlığında daha detaylı anlatacağım bir teknoloji olan Node.js ile beraber, back-end uygulamaları da geliştirebiliyorsunuz. Yani Javascript altın bilezik arkadaşlar. Hangi rolü seçerseniz seçin, mutlaka öğrenin
Günümüzde Front-End Geliştiricilik
Front-end geliştiricilik rolünün görev ve sorumlulukları yıllar içerisinde değişime uğradı. Örneğin 2000'li yılların sonuna kadar front-end geliştirici demek tasarımcıdan tasarımı alıp HTML ve CSS’e dönüştüren kişi demekti. Arada javascript (jquery :) ) ile ufak tefek geliştirmeler yapıyorlardı ama genel olarak Javascript back-end geliştiricilere ait bir dildi.
2010 yılından sonra özellikle HTML 5 ve CSS 3'ün yaygınlaşması ve tarayıcıların (browser) çok daha yetenekli hale gelmesiyle beraber, tarayıcılar üzerinde çok daha karmaşık uygulamalar geliştirebilmeye başladık. Bugün sıkça kullandığımız Youtube, Twitter, Instagram gibi oldukça karmaşık web uygulamaları bu arkadaşlar tarafından geliştiriliyor.
Günümüzde front-end dünyası hiç olmadığı kadar haraketli. Hergün yeni framework, kütüphane çıkıyor ve popüler hale geliyor. Hype Driven Development (aaa yeni birşey çıkmış hadi hemen deneyelimcilik veya herşeyi yeni baştan bununla yazalımcılık.) fenomeninin en yaygın olduğu alan burası.
Bugün front-end geliştirici olmak istiyorsanız, maalesef HTML, CSS ve Javascript öğrenmeniz yeterli değil. Artık front-end dünyasında ihtiyaçlar o kadar arttı ki, geliştirme yaparken çeşitli framework (yazılım iskeleti) ve kütüphaneler kullanıyoruz.
Bunlardan başlıcaları:
(React Native ile mobil uygulama da geliştirilebiliyor, mobile developer başlığında detaylandıracağım.)
Aralarındaki farklar ve neden bu kadar alternatif var sorularının cevapları bu makalenin konusu değil. Ayrıca bunlar buz dağının görünen kısımları.
Bütün bunların yanı sıra öğrenmeniz gereken bir şey daha var. O da Typescript! Typescript ne dediğinizi duyar gibiyim. Typescript, Javascript’in yeteneklerini genişleten, ona tip güvenliği gibi özellikler getiren bir başka dil. Aslında Typescript ile yazdığınız her şey günün sonunda yine Javascript’e dönüşüyor. Javascript öğrendikten sonra Typescript öğrenmeniz çok uzun sürmeyecektir, korkulacak birşey yok. İnsanlık neden böyle ikinci dile ihtiyaç duymuş sorusunun cevabı ise yine bu makalenin kapsamı dışında :)
Back-End (Arka yüz) Developer
Benim de dahil olduğum geliştiriciler. Bu arkadaşlar perde arkasındaki herşeyi geliştiren kişiler. Genelde geliştirdikleri şeyler kullanıcılar tarafından doğrudan etkileşime girilen şeyler değil.
Front-End başlığında Youtube, Twitter, Instagram gibi web uygulamalarından bahsetmiştik. Twitter’a veya Instagram’a girdiğinizde size göre özelleştirilmiş bir çok içerik görürsünüz. Bu içeriklerin geldiği bir yer olmalı değil mi :) ? Veya aynı şekilde bir tweet attığınızda veya Instagram’a yeni bir fotoğaraf yüklediğinizde aynı şekilde bunların gittiği bir yer olmalı. İşte back-end geliştirciler tam olarak burada devreye giriyorlar.
Bugün web ve mobil uygulamalarınızdaki verinin gidip geldiği yer muhtemelen bir back-end geliştirici tarafından geliştilmiştir. Çok basite indirgersek, front-end (ön yüz) tarafından gönderilen verileri (tweet, fotoğraf, video vb.) veritabanına ve çeşitli yerlere kaydediyoruz veya istenildiğinde veritabanından çekip ön yüze gönderiyoruz.
Tabi bu şekilde anlatınca baya basit gözüküyor ama bu işlemleri aynı anda yüzlerce, binlerce, on binlerce kullanıcının yaptığını düşünün. Back-End geliştiriciden beklenilen şeylerden biri de ölçeklenebilir (scalability) yapılar geliştirmeleridir. Yani geliştirdiğimiz uygulamalar, hizmetler yük altında çökmemeli, ölçeklenmeli ve aynı kaliteyle hizmet vermeye devam etmelidir. Bir kişinin tweet atamaması göz ardı edilebilir ama yüzlerce kişi atamıyorsa ve sistemde bir sorun varsa, gece yataklarından kaldıralan kişiler back-end geliştiricilerdir.
Bunların yanı sırada iş kurallarını yazan kişiler de back-end geliştiricilerdir. Örneğin saat 16:00'dan sonra EFT yapılamaması, kredi kartından ödeme alınamaması durumunda siparişin oluşturulmaması vb. gibi sistemlerin sağlıklı işlemesini sağlayan bir çok iş kuralının çalışmasının sorumluluğu da back-end geliştiricilerdedir.
Yazının başında, sözlük kısmında platform, framework gibi konulardan bahsetmiştim. Back-End dünyası bu anlamda çok çeşitli. Başlıca aklıma gelenleri yazmak istiyorum. Linç yememek için mümkün olduğunca kapsamlı yazmaya çalışacağım.
.NET ve .NET Core
.NET Microsoft’un 2002'den beri geliştirdiği, benim de uzmanlığımın olduğu bir yazılım geliştirme platformu. .NET hem bir platform hem de çeşitli amaçlarla geliştirilmiş bir framework’ler topluluğu. 2016'da Microsoft .NET Framework’ü yeniledi ve .NET Core adına yeni bir platform yayınladı. .NET Framework ne .NET Core ne niye iki tane platform var diye sorabilirsiniz. Aslında hemen aynı yeteneklere sahip aynı işi yapan ve yazılım geliştirici açısında büyük farklar olmayan iki platform. .NET Core’un en büyük farkı .NET Framework’ün aksine sadece Windows değil Linux işletim sistemlerinde de çalışabiliyor olması. Bu yazıyı yazarken .NET Framework 4.8, .NET Core da 3.1 versiyonlarıda. Bu senenin sonuna doğru Microsoft sonunda bu iki platform’u birleştirip .NET 5 olarak yeniden isimlendirecek ve bu karmaşa son bulacak. O yüzden genel olarak .NET diyebiliriz.
.NET oldukça büyük, geniş desteği olan popüler bir platform. .NET ile web, mobil, desktop (masaütü), oyun, yapay zeka, IoT gibi bir çok farklı alanda geliştirme yapabilirsiniz. Bu alanlar için ayrı ayrı geliştirilmiş framework’ler .NET ile beraber geliyor.
.NET içerisinde bir çok farklı yazılım dili var. Bunlardan en sık kullanılanı ve amiral gemisi olan C#. Ama F#, C++ .NET ve VB.NET gibi bir çok farklı dil seçeneği de var. Özellikle kariyerinizin ilerleyen aşamalarında F# diline de bir bakmanızı tavsiye ederim.
Bu noktada platform, framework ve yazılım dili arasındaki farkları tekrarlamakta yarar görüyorum. Bir örnekle açıklamak gerekirse:
C# dilini ve ASP.NET framework’ünü kullanarak geliştirdiğiniz bir API, .NET platformu tarafından çalıştırılır. .NET platformu geliştirdiğiniz API’nin hem Windows hem de Linux üzerinde çalışmasını sağlar.
Her zaman bir uygulama geliştirmek zorunda değilsiniz. Örneğin C# diliyle bir kütüphane geliştirdiniz ve yayınladınız. Bu kütüphaneyi .NET platformundaki herhangi bir dilde kullanabiliriz. Yani C# ile geliştirmiş bir kütüphane VB.NET ile geliştirilmiş bir uygulamada da kullanılabilir.
.NET oldukça popüler ve yetenekli bir platform. Öğrenmek için oldukça fazla yerli ve yabancı kaynak bulabilirsiniz. Ayrıca ülkemizde Microsoft teknolojileri oldukça yaygın olduğundan iş imkanları da çeşitli.
Java
Java artık aramızda olmayan Sun Microsystems tarafından 1995 yılında geliştirildi. Sonrasında Sun’ın batmasıyla beraber 2009 yılında Oracle tarafından satın alındı ve şuanda da Oracle tarafından geliştirilmekte.
Java hem bir yazılım dili hem de bir geliştirme platformu. Tıpkı .NET gibi çok geniş bir geliştirme yelpazesine sahip. Web, desktop uygulamaları, API’ler geliştirebileceğiniz gibi, Android ortamında mobil uygulama da geliştirebilirsiniz.
Java platformu da içerisinde bir çok dil barındırıyor. En sık kullanılanları Java :), Kotlin, Clojure ve Scala. Özellikle Kotlin yükselişte. Daha detaylı olarak mobil developer başlığında bahsedeceğim.
Yine .NET’de verdiğimize benzer bir örnek verelim.
Java oldukça popüler bir yazılım geliştirme platformu ve her ihtiyaca karşılık gelen bir framework var. Java üniversitelerde bilgisayar mühendisliği bölümlerinde de gösterilen bir dil. Ülkemizde ve Avrupada da oldukça popüler. Yine oldukça fazla iş imkanı var.
Ek olarak Microsoft’un .NET platformunu geliştirirken Java platformunda ilham aldığınını da belirteyim.
Node.js
Node.js’in ilk versiyonu 2009 yılında yayınlandı. Node.js bir dil değil, bir Runtime Environment (çalışma-zamanı ortamı bkz. Sözlük). Front-End başlığında Javascript’in tarayıcılarda çalışan bir dili olduğundan bahsetmiştim. Node.js size Javascript’i tarayıcı dışında da çalıştırma imkanı sağlıyor. Yani Node.js kullanarak, Javascript diliyle back-end uygulamaları geliştirebilirsiniz. Yine front-end dünyasında olduğu gibi burada da Javascript yerine Typescript kullanmanız mümkün.
Node.js basitliği, öğrenme kolaylığı ve ayrı ayrı ihtiyaçlar için geliştirilmiş olan binlerce açık kaynaklı kütüphanesiyle çıktığı günden beri popülerliğini koruyor. Node.js’in avantajlarından biri de az seramoniyle hızlıca uygulama çıkartmanıza imkan sağlaması. Hem ülkemizde hem de dünyada oldukça fazla iş imkanı var.
Şahsi fikrim, her back-end geliştiricinin mutlaka ucundan biraz bulaşması gerektiği yönünde. Node.js öğrenelim, öğretelim.
PHP
Gelelim yılların eskitemediği Pehaşpeye. İlk versiyonu 1995 yılında yayınlandı. O zamandan günümüze de popülerliğini koruyor. Yakın zamana kadar dünya üzerinde geliştirilmiş web uygulamaların büyük kısmı da PHP ile kodlanmıştı. Günümüzde CMS (Content Management System), Blog gibi hazır yapılar denilince aklımıza ilk gelen yine PHP.
PHP hem bir yazılım diline hem de bir Runtime Environment (çalışma-zamanı ortamı bkz. Sözlük)’a işaret ediyor.
PHP ile birlikte bugün en çok kullanılan web framework’lerinden biri tartışmasız Laravel sanırım.
PHP öğrenmenizi tavsiye eder miyim? Hayır etmem, PHP çeşitli sebeplerden dolayı uzun süredir düşüşte. Tabiki hala çok fazla iş olanağı var ama geleceği olduğunu düşünmüyorum.
Ruby
Ruby 1995 yılında ilk yayınlandığından beri saygınlığı koruyan bir yazılım geliştirme dili. Tıpkı Node.js gibi öğrenmesi basit ve az seramoniyle hızlıca uygulama geliştirmenize imkan sağlıyor.
Ruby denilince aklımıza kaçınılmaz olarak Ruby on Rails geliyor. Ruby on Rails bugün Ruby dünyasında web uygulamaları geliştirmek için de facto standart.
Türkiyede çok popüler bir dil olmasa da özellikle Avrupa ve Amerika’da bir çok iş ilanı var.
Python
1990 yılında ilk versiyonun çıkmasının üzerinden neredeyse 30 sene geçmiş. Python yine yukarıda yazdığım diller gibi genel amaçlı bir dil ve web uygulamalarından, desktop uygulamalarına kadar birçok uygulama geliştirmenize imkan sağlıyor.
Yine javascript gibi öğrenmesi ve birşeyler geliştirmeye başlanması oldukça kısa sürüyor.
Python bir ara özellikle Django web framework’ü ile beraber oldukça popülerlik kazanmıştı. Günümüzde ise popülerliğini yapay zeka ve makina öğrenme alanında koruyor. Hatta bu alanda de facto standart haline geldi diyebiliriz.
Go
Go aslında 2007 yılında şirket iç kullanım için Google tarafından geliştiriliyor. Sonrasında ilk halka açık versiyonunu 2009 yılında yayınlıyorlar. Son 5–6 senedir de özellikle mikroservis mimarisinin yaygınlaşmasıyla popüleritesi artmış bir dil.
.NET ve Java platformlarının aksine bir sanal makina üzerinde çalışmıyor. Doğrudan makina koduna derleniyor. Dolayısla belli durumlarda çok daha performanslı çalışıyor ve az kaynak tüketiyor.
Go, aslında C’den etkilenmiş bir dil ama tasarlanırken daha fazla basitlik ve güvenlik göz önünde bulundurulmuş. Performans olarak C’ye oldukça yakın bir dil.
Tam olarak web uygulamaları geliştirmek için tasarlanmış bir dil olduğu söylenemez. Yine de oldukça performanslı API’ler geliştirebiliyorsunuz.
Go yeni başlayanlar için tavsiye edeceğim bir yazılım dili değil. Kendinizi başka bir yazılım dilinde yeterince güvende hissettiğiniz zaman öğrenmenizde fayda var.
Bonus: SQL (Structured Query Language)
Bir back-end developer olarak kaçınamayacağımız şeylerden biri de asgari seviyede veritabanı işlemlerini öğrenmek. Eninde sonunda size gelen datayı bir yere kaydetmeniz gerekiyor. Veya aynı şekilde veritabanına çeşitli sorgular yazarak datayı getirmeniz gerekiyor.
Veritabanı başlı başına ayrı uzmanlık gerektiriyor. Bu konuyla ilgilenen DBA (Database Administrator) dediğimiz insanlar var. Ama dediğim gibi sizin de bir uygulama geliştirirken basit, bazen de ileri seviyede sorgular yazmanız gerekebilir.
SQL bugün MS SQL, Oracle, Postgres SQL, MySQL gibi bir çok farklı veritabanında kullanılıyor. İyi haber bir kere SQL öğrendikten sonra lehçe farklılıklarıyla öğrendiğiniz bilgileri başka veritabanlarında da kullanabiliyor olmanız.
Ayrıca NO SQL gibi ayrı veritabanı sistemleri de var ama bu makalenin konusu olmadığından detaylarına girmiyorum.
Back-End vs Front-End ve Web Framework’ler
Mobile Developer başlığına geçmeden önce bir noktayı daha açıklağa kavuşturmak istiyorum, o da web framework’ler konusu.
Front-End başlığında eskiden front-end geliştiricilerin daha çok tasarımları HTML ve CSS’e çevirmekle uğraştıklarından bahsetmiştik. İşte o günlerde arkadaşlar, biz back-end geliştiriciler sunucu tarafından, tarayıcı tarafına HTML’ler dönüyorduk. Yani HTML üretimi görevi back-end geliştiricilere aitti.
Çok uzun süredir ise artık server tarafından nadiren HTML dönüyoruz. Artık back-end geliştiriciler daha çok geliştirdikleri API’lar aracılığıyla front-end tarafına data dönüyor veya data alıyor. HTML üretimi artık tamamen front-end geliştiricilerin görevi (çok şükür). Bunun bir kaç sebebi var:
- Eskiden bir web sayfasında bir yere tıkladığınızda sayfa yenilenir, sunucudan yeni HTML alınır ve gösterilirdi. Bir yere tıkladığınızda sürekli bir gidip gelme durumları olurdu. Tarayıcılar artık çok daha yetenekli. Masaüstü uygulamalarına benzer, kesintisiz ve akıcı uygulamaları tarayıcı tarafında da geliştirebiliyoruz.
- HTML gönderip almak oldukça büyük miktarlarda data alışverişinin olmasına sebep oluyordu. Oysa uzun zamandır JSON gibi datanın boyutunu küçülten formatlar var.
- Front-End geliştiriciler özellikle HTML ve CSS konusunda uzmanlar ve bu işi bizden çok daha iyi yapıyorlar. Bir back-end geliştirici olarak, 14 yıllık yazılım hayatımda daha bir label ile textbox’ı yan yana getirebilmişliğim yok. Çok şükür Twitter Bootstrap gibi CSS framework‘leri çıktı da kendimizi rezil etmeden birşeyler yapabiliyoruz.
ASP.NET MVC, JavaServer Faces, PHP Laravel, Pyhton Django, Node.js Express gibi web framework’lerin modası bu anlamda geçiyor. Ama web framework denilince sadece aklınıza HTML üretmenizi sağlayan yapılar gelmesin. Bu framewok’lerin çoğu API’lar geliştirmenize de imkan veriyor. Kesin olan birşey var, back-end’den HTML dönme devri kapanıyor.
Mobile Developer
En nevi şahsına münhasır bulduğum yazılım geliştiriciler bu arkadaşlar. Son 10 senede Google Android ve Apple iOS telefonların yaygınlaşmasıyla bu platformlara yönelik uygulama geliştime ihtiyacı da arttı.
(Belki Microsoft’un Windows 10 Mobile platformunu da duymuşsunuzdur. Çok net bir şekilde oranın çıkmaz sokak olduğunu ve girmemeniz gerektiğini söyleyebilirim. Maalesef Microsoft mobil alanında çok başarılı olamadı.)
Bugün hepimiz telefon taşıyoruz ve geliştirilen her web uygulamasının mutlaka bir mobil uygulaması da oluyor. Hatta bazen sadece mobil uygulması oluyor.
Kabaca mobil yazılım gelişitiriciler de front-end geliştiricilerle aynı işi yapıyorlar diyebiliriz. Fakat kullandıkları teknolojiler farklı. Front-End geliştiriciler tarayıcılar üzerinde çalışacak uygulamalar geliştirirken, mobil geliştiriciler doğrudan işletim sistemi (Android, iOS) üzerine çalışacak uygulamalar geliştiriyorlar. Bunun için o platforma özel SDK’leri kullanıyorlar.
İki farklı ekol var. Android geliştiriciler ve iOS geliştiriciler.
Android
Google Android işletim sistemini piyasa sürdüğünde tarihler 2008'i gösteriyordu. Yıllar içerisinde Android işletim sistemlerinin bir çok yeni versiyonu çıktı. Android işletim sistemi açık kaynak kodlu bir sistem ve sadece Google’ın ürettiği telefonlarda değil bir çok farklı markanın ürettiği telefonlarda da kullanılıyor. Bu yüzdendir ki Android geliştiricilerin en büyük çilesi geliştirdikleri uygulamaların binlerce farklı cihazda sorunsuz olarak çalıştığından emin olmaları gerektiğidir. Biraz daha fazla test yükü olan bir platform diyebiliriz.
Android platformunda geliştirme yapmak için Android SDK (bkz. Sözlük) kullanılıyor. Kısa zaman öncesine kadar bu platformda kullanabileceğimiz tek dil Java’ydı. Ama 2017 Google IO konferansında, Google Android platformunda geleceğin dilinin Kotlin olacağını açıkladı. O günden beri de Kotlin’in popülerliği artarak devam ediyor.
Benim de tavsiyem Android geliştirici olmak isteyen arkadaşların Kotlin öğrenerek (ki çok güzel bir dil) başlamaları yönünde olacaktır.
iOS
iPhone’nun ilk duyurusunu Steve Jobs 2007 yılında sahnede yapmıştı. O videoyu mutlaka izlemenizi tavsiye ederim. iPhone zamanı için devrimsel bir üründü ve akıllı telefon kavramını tamamen değiştirmişti.
Android geliştiricilerin aksine iOS geliştiriciler daha az telefon modeliyle uğraşıyorlar. Bu anlamda geliştirdikleri uygulamaları test etmeleri daha kolay.
Geleneksel olarak uzun yıllardır Apple platformlarında geliştirme yapmak için Objective-C dili kullanılıyor. Çok yakın bir zaman kadar da iOS için de tek alternatif Objective-C idi. 2014 yılında Apple Swift dilini duyurdu ve yine Android dünyasındaki Kotlin gibi, kendi platformlarında geleceğin dilinin Swift olacağını belirtti.
Benim de tavsiyem iOS geliştirici olmak isteyen arkadaşların Swift öğrenerek (ki çok güzel bir dil) başlamaları yönünde olacaktır.
Not: İşe başlayacağınız firma Java veya Objective-C kullanıyor olabilir, dolayısyla ihtiyaç durumunda bu dilleri de öğrenmeniz gerekiyor.
React Native
Android ve iOS hayatımıza girdiğinden beri geliştiriciler olarak en büyük hayalimiz “Tek bir kod yazalım hem Android hem iOS’da çalışsın”. Bunun için geçmişte Apache Cordova gibi framework’ler yapıldı ama performans problemleri ve başka sebeplerden dolayı çok fazla yaygınlaşamadı.
Şahsen ben de tek millet, tek bayrak, tek dil olayının gerçek olamayacak kadar iyi bir hayal olduğunu düşünüyorum. Ama React Native ile yazılım dünyası bu konuda önemli bir ilerleme kaydetmiş gibi.
React Native, front-end dünyasında kullanılan React framework’ünün mobil uygulamalarda çalışması için özelleşitirilmiş hali. Ve tam olarak tek bir kod yazın hem Android hem iOS’da çalışsını vaad ediyor. Tabiki her platforma özel ön yüz ihtiyaçları farklı olduğundan oralarda farklı kodlar yazmak gerekebiliyor.
Hiç kullanmadım ama okuduğum ve araştırdığım kadarıyla çok başarılı olduğu ve performans olarak native (Android Kotlin, Java veya iOS Objective-C, Swift ile geliştirilmiş) uygulamalara yakın olduğu söyleniyor.
İnternette bir çok şirketin React Native kullandığı veya React Native’den çıkıp native uygulama geliştirmeye geri döndükleriyle ilgili bir sürü yazı var.
React Native ile geliştirme yaparken, Javascript veya Typescript kullanıyoruz. Bunun en büyük avantajlarından biri de belli bir eforla hem web hem de mobil uygulamalarınız arasındaki kod paylaşımını önemli ölçüde arttırabiliyor olmanız. Böylece aynı ekipteki hem front-end hem mobil yazılım geliştiricilerinizin hızını arttırmanız mümkün.
Diğer Alanlar
Yazılım geliştirme yukarıda bahsettiğim front-end, back-end, mobile gibi alanlarla sınırlı değil. Daha bahsedemediğim bir çok alan daha bulunuyor.
Örneğin desktop (masaüstü) uygulama geliştiriciği bunlardan biri. Temelde mobil geliştiricilik ile benzerlik gösteriyor. Desktop uygulama geliştiriciliği bundan on sene öncesine göre daha az popüler. Bunun sebebi uygulamaların yavaş yavaş web ortamına(tarayıcı tabanlı) veya mobil ortamına taşınıyor olması. Ama kullandığınız Office uygulamaları, tarayıcılar (Chrome, IE, Firefox vb.), çeşitli IDE’ler, Photoshop, ses ve video düzenleme programları, masaüstü uygulamalar ve bunlara ihtiyaç hiç bir zaman bitmeyecek ama çoğu sık kullanılan desktop uygulamaları web ortamına taşınmaya başladı bile. Bu alanda kendinizi geliştirmek istiyorsanız C++, Delphi, .NET, Java platformları bu tip uygulamalar geliştirmeye destek veriyor. Ayrıca Electron (Node.js tabanlı bir masaüstü uygulama geliştirme platformu) gibi seçenekleriniz de var.
Bir diğer bahsetmediğim alan ise Embedded (gömülü) sistemlerde geliştiricilik. Bu konu hakkında hiç tecrübem yok o yüzden ahkam kesmek istemiyorum. Ama bu alanda daha çok mikroçip seviyesinde geliştirme yapıyorsunuz. C ve assembly gibi dilleri bilmeniz gerekiyor. Bildiğim kadarıyla artık daha high-level diller ile de geliştirme yapılabiliyor.
Oyun geliştirme alanı yine uzaktan hep özenerek baktığım ama hiç bir zaman giremediğim alanlardan biri. Bu alana girecek kişilerin iyi derecede C++ bilmesi ve Unreal gibi oyun motorlarına hakim olması gerekiyor. Bir diğer alternatif ise Unity oyun motoru. Unity üzerinde C# ve Javascript gibi dillerle geliştirme yapabiliyorsunuz. Son yıllarda Unity tabanlı çok sağlam oyunlar da çıktı. Ama iş ilanları daha çok C++ bilenlere yönelik oluyor.
Yine bir başka alan olarak savunma sanayii de seçenekleriniz arasında. Bu konuda da hiç tecrübem yok açıkcası. Türkiye daha çok Ankara’da bulunan ASELSAN, HAVELSAN, ROKETSAN gibi bu konuda uzmanlış firmalarda iş imkanları var. Bildiğim kadarıyla Embedded (gömülü) sistemler konusunda bilgili insanlar bu alanda da çalışabiliyorlar. Çok farklı bir disiplin ve içerisinde gizlilik gibi konular da var. Bir web sayfasında bir düğmenin çalışmamasıyla, havada uçan bir rokette bug çıkması aynı şey değil tabi :D
Son olarak özellikle benim gibi endüstriyel otomasyon, elektronik gibi bölümlerden mezun olduysanız mutlaka Endüstri 4.0 ve IoT (Internet of things) konularına bakmanızı tavsiye ederim. PLC, SCADA gibi sistemler giderek yerlerini yine IoT tabanlı cihazlara bırakacaklar. Bu alandaki geleneksel yazılım geliştirme yöntemleri, yerlerini yenilerine bırakıyor. Hem maliyet hem de verimlilik açısından fabrikalar daha akıllı hale gelmek durumundalar. Bu alanda da oldukça büyük fırsatlar var. .NET gibi bir çok platform bu alanda geliştirme yapmaya imkan sağlıyor. Ama burada platformdan daha çok otomasyon prensiplerini öğrenmek gerekiyor.
Takım çalışması ve Git
Günümüzde yazılım geliştirme büyük oranda bir ekip işi. Öğrenmeniz gereken ön önemli şeylerden biri de ekip çalışması ve takım oyunu. Bu konu başlı başına bir makale konusu o yüzden çok fazla detaylarına giremeyeceğim.
İşe başlayacağınız herhangi bir şirkette bir proje üzerinde birden fazla yazılım geliştiricinin çalıştığını göreceksiniz. Sizin yazdığınız kodları başkaların görmesi ve değişiklik yapması, aynı şekilde sizin de başkalarının kodlarını görüp değişiklik yapmanız gerekecek. Bu noktada bir ekiple beraber çalışırken kullanacağınız en önemli araçlardan biri Git.
Git bugün dünyada en yaygın kullanılan sürüm kontrol (version control) sistemidir. Git, dosyalarda (kodlarda) yaptığınız değişiklikleri takip eder, böylece neler yapıldığına dair bir kaydınız olur ve ihtiyaç duyduğunuzda belirli sürümlere geri dönebilirsiniz. Git aynı zamanda takım çalışmasını kolaylaştırır ve birden fazla kişinin değişikliklerinin tek bir kaynakta birleştirilmesine olanak tanır.
Git’i hizmet olarak sunan bir çok platform var. Bunlardan ilk aklıma gelenler:
Özellikle GitHub en yaygın olanı. Github’da binlerce açık kaynak projeye erişebilirsiniz veya kendiniz projelerinizi paylaşabilirsiniz. Yeni şeyler öğrenmek için de çok iyi bir platform.
Peki yazılıma nasıl başlamalıyım, hangi dili öğrenmeliyim?
Buraya kadar sektörü ve kariyer imkanlarını biraz anlatmaya çalıştım. Sanırım yazıyı buraya kadar okuyanların aklına gelen ilk soru “Nereden başlamalıyım?”.
Eğer Başlamadan Önce başlığında ele aldığım konular hakkında bir endişeniz yoksa, elimden geldiğince kendi tecrübelerimden yola çıkarak bu soruyu cevaplamaya çalışacağım.
Öncelikle bu soruya şu dili öğrenin diye bir cevap vermek istemiyorum ama birkaç yol gösterici olacağını düşündüğüm tavsiye verebilirim.
- Yazılım geliştiriciler olarak varoluş sebebimizin problem çözmek, iş ihtiyaçlarını karşılamak için sistemler, uygulamalar geliştirmek olduğunu aklınızdan çıkarmayın.
- Platformlar, framework’ler, diller bunların hepsi birer araç. Hiç bir zaman bir dilin fanatiği olmayın. Projenin ihtiyacı neyse o araçları kullanın.
.NET, Java gibi platformlar genel amaçlı platformlardır. Yani bu platformlardaki framework ve dilleri kullanarak bir çok sorunu çözebilirizsiniz. Ama kesinlikle aklınıza bunlar Node.js, Ruby, Pyhton, Go gibi seçeneklerden üstündür gibi birşey gelmesin. Pekala bu dillerle de herşeyi yapabiliyorsunuz.
Bir yazılım dilini öğrenmeniz işin en kolay kısmı. Önemli olan o yazılım dilinin eko sisteminin (platform, framework, library) neleri desteklediği ve sizin ihtiyacınızı karşılayıp karşılayamadığı.
Örneğin çalıştığım firmada daha çok .NET Stack’ini kullanarak geliştirme yapıyoruz ama Node.js ve özellikle performans kritik yerlerde Go ile de geliştirme yapabiliyoruz.
Sırf Java, Node.js, Ruby kullanan çok büyük firmalar da var. Günümüzde firmalarda birden fazla dil veya platform kullanımı yaygınlaşıyor. Bazı platformlar, diller bazı alanlarda diğerlerinden daha üstün, bazılarında değil. O yüzden yazılım dillerinin “ihtiyaca yönelik araçlar “ olduğunu aklınızda tutun.
Yeni başlayanlara tavsiyem öğrenmesi basit ve kullanımı yaygın bir seçim yapmaları. Bir dili ve platformu öğrendikten sonra bir sonrakini çok daha kolay öğreniyorsunuz. Node.js bu anlamda iyi bir seçenek olabilir. Ama mutlaka LinkedIn gibi platformlardan iş ilanlarına bir göz gezdirmenizi tavsiye ederim.
Bunların dışında genel geçer şöyle tavsiyler verebilirim:
- Temel yazılım kavramlarını öğrenin. Örneğin seçtiğiniz dil Nesneye yönelik programlama (Object-oriented programming) paradigmasını ön plana çıkartıyorsa önce OOP öğrenin veya fonksiyonel programalama paradigmasıysa onu öğrenin. Ama günümüzde çoğu modern dil çoklu paradigma destekliyor o yüzden her iki paradigmaya da hakim olmakta yarar var.
- Temel bilgisayar bilimi (computer science) konularını öğrenmeniz çok faydalı olacaktır. Bununla ilgili yerli kaynak çok yok ama İngilizceniz varsa youtube bunları anlatan derslerle dolu. Özellikle Harvard Üniversitesinin konuyla ilgili online derslerine bir göz atın.
- Seçtiğiniz dili derinlemesine öğrenenin, zaten dili öğrenirken yanında yavaş yavaş sık kullanılan framework’lere ve platform’un kendisine de hakim olacaksınız. Seçtiğiniz dil ile ilgili olarak internette sayısız yerli, yabancı makale ve video bulabilirsiniz. Ama cüzi miktarlarda ödemeler yaparak Plurasight ve Udemy gibi platformlardan online eğitimler de satın alabilirsiniz. Kendinize yapacağınız yatırıma harcanan paranın karşılığını kesinlikle alırsınız.
- En iyi kodlama öğrenme yöntemi başkalarının kodlarını okumaktır. O yüzden mutlak Github üzerinden başkalarının yazdığı projeleri inceleyin, ne yaptıklarını anlamaya çalışın, indirip çalıştırın ve üzerinde denemeler yapın.
- Kendinize örnek bir proje seçin. Bu uzun süredir yapmak istediğiniz bir proje de olabilir veya internette gördüğünüz bir web sitesinin veya uygulamanın klonunu yapmak da olabilir. İnanın bu süreçte çok şey öğreneceksiniz.
- Kendi geliştirdiğiniz projeleri, kodları Github’a mutlaka koyun. Yazdığınız koddan utanmayın. Github’a koyduğunuz her proje, iş başvurularında bir adım öne çıkmanızı sağlayacaktır.
Yazılım Toplulukları — Codefiction
Türkiyede bir çok yazılım topluluğu var. Bu topluluklar ve ürettikleri içerikleri takip ederek sektör hakkında bir çok şey öğrenebilirsiniz.
Önce kendi dahil olduğum topluluk olan Codefiction’dan bahsetmek istiyorum. Birbirini uzun süredir tanıyan bir grup arkadaş olarak yaklaşık dört yıldır yazılım sektörüyle ilgili podcast’ler yapıyoruz.
Yazılım sektörüyle ilgili gerek teknik konuları gerek sosyal konuları ele aldığımız bir çok podcast yayınladık. Bu konuyu ve daha bir çok konuyu tartıştık. Bir kaç yararlı olabileceğini düşündüğüm bölümü buraya bırakıyorum.
Özellikle yeni başlayanları Slack kanalımıza bekliyoruz. Her türlü sorunuzu yanıtlayacak bir sürü yardım sever geliştiriciyi bu kanalda bulabilirsiniz :)
Bulunduğumuz bütün platformlar:
Yazılım Toplulukları — Software Craftsmanship Türkiye
Yazılım geliştiricilerin yeteneklerine odaklanan bir yazılım geliştirme yaklaşımı olan Yazılım Ustalığı (Software Craftsmanship), bir topluluk olarak artık Türkiye’de. Daha kaliteli yazılım, daha yetenekli yazılımcılar, daha çevik bir süreç ve daha başarılı uygulamalar için Türkiye’nin dört bir yanından yazılım ustalarını ve usta adayı çırakları topluluğumuza katılmaya çağırıyoruz.
Software Craftsmanship Türkiye de oldukça aktif bir yazılım geliştirme topluluğu ve sık sık meetup’lar düzenleyip çeşitli konularda uzmanların tecrübelerini toplulukla paylaşıyorlar.
Youtube kanallarını ve twitter hesaplarını takip etmenizi öneriririm.
Yazılım Toplulukları — Devnot
Devnot bir çok meetup yapan ve röportaj tarzı içerikler üreten oldukça aktif bir topluluk. İleri seviye konuları anlattıkları gibi özellikle yeni başlayanlar için de içerik üretiyorlar.
Youtube kanalların da yararlı videolar var.
Ayrıca kurucularından Uğur Umutluoğlu’nun video’larını da göz atmanızı tavsiye ederim.
Devnot yakın zamanda bir “Yazılım Geliştirici Mentor Programı” başlattı.
Yazılımcı olmayı veya mesleğinde daha iyi noktalara gelmeyi hedefleyen kişileri(öğrenci) bu program kapsamında bir mentorle eşleştirerek düzenli görüşmeler yapmalarını amaçlamaktayız.
Yazılım Toplulukları — Cloud and Serverless Turkey | Serverless Türkiye
Bir yazılımcı olarak günümüzde kaçınılmaz olarak bulut (cloud) teknolojilerini öğrenmeniz gerekecek. Her ne kadar Serverless Türkiye yeni başlayanlar için biraz ileri seviye kalsa da fikir sahibi olmanız açısında takip etmenizde yarar var.
Özellikle bu ara gündemimizde olan COVID-19 nedeniyle birçok güzel webiner düzenlediler. Youtube hesaplarını da takip etmenizi tavsiye ederim.
Kommunity.com
Daha atladığım bir sürü yazılım geliştirme topluluğu var elbette. Kommuntity.com bu amaçla kurulmuş ve etkinlik düzenleyen yazılım topluluklarının etkinliklerini duyurdukları çok güzel bir yerli üretim platform. Türkiyedeki toplulukların çoğuna buradan ulaşabilirsiniz.
Son Sözler
Çok büyük bir dünyaya adım atıyorsunuz, daha önce de dediğim gibi öğrenmek asla bitmiyor. Size dikensiz gül bahçesi vaad etmiyorum, yazılım gerçekten zor bir iş ama bir o kadar da keyifli ve tatmin edici bir iş.
Hiç yorum yok:
Yorum Gönder
Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.