Blog

Yazılım Geliştirme Yaşam Döngüsü (SDLC): Agile, DevOps ve Diğer Yaklaşımlar

Yazılım geliştirme, günümüzde teknolojik dönüşümün temel taşıdır. Projelerin başarıyla tamamlanabilmesi için doğru geliştirme metodolojisinin seçilmesi büyük önem taşır. Bu makalede, yazılım geliştirme süreçlerinin temel yaklaşımlarından olan Agile ve diğer popüler metodolojileri inceleyeceğiz.

SDLC, yazılım geliştirme yaşam döngüsünün (Software Development Life Cycle) kısaltmasıdır. Türkçe olarak bu terimin karşılığı “Yazılım Geliştirme Süreci” veya “Yazılım Geliştirme Yaşam Döngüsü” olabilir. Bu terim, yazılım projelerinin planlama, tasarım, geliştirme, test etme, dağıtma ve sürdürme gibi aşamalarının tümünü kapsayan yapılandırılmış bir yaklaşımı ifade eder. Bu sürecin doğru bir şekilde yönetilmesi, projenin başarılı bir şekilde tamamlanmasını sağlar.

Agile Metodolojisi

Agile, esnek ve sürekli geliştirme anlayışını temsil eder. Bu metodolojide, ekip üyeleri düzenli aralıklarla bir araya gelerek belirli bir zaman dilimindeki hedefleri belirlerler. Bu zaman dilimine “iterasyon” veya “sprint” denir ve genellikle 2-4 hafta sürer. Agile geliştirme süreci şu adımlardan oluşur:

  1. Planlama: Ekip, bir iterasyon boyunca tamamlanması gereken görevleri belirler. Bu görevler önceliklendirilir ve tahmini sürelerle değerlendirilir.
  2. Geliştirme: Ekip, belirlenen görevlere odaklanarak çalışmalarını sürdürür. İterasyon sonunda, bir ürün demosu yapılır.
  3. İnceleme ve Değerlendirme: Demo sonrası, ekip üyeleri ve paydaşlar, gerçekleşen ilerlemeyi değerlendirirler. Feedback alınır ve gerekirse değişiklikler yapılır.
  4. Geri Bildirim ve İterasyon: Alınan feedback doğrultusunda, bir sonraki iterasyonun planlaması yapılır. Bu süreç tekrarlanarak geliştirme devam eder.

Diğer Popüler Metodolojiler

Waterfall (Şelale) Metodolojisi

Waterfall, geleneksel ve sıralı bir yaklaşımdır. Projeler belirli aşamalardan geçer: gereksinimler belirlenir, tasarım yapılır, geliştirme gerçekleştirilir, test edilir ve sonunda dağıtılır. Bu metodoloji genellikle küçük projelerde etkilidir.

Scrum

Scrum, Agile’in bir türüdür ve ekiplerin sürekli iletişim halinde olmasını vurgular. İterasyonlar belirli sürelerle tekrarlanır. Scrum, belirli roller (Product Owner, Scrum Master, Development Team) ve toplantılar (Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective) içerir.

Kanban

Kanban, görsel bir panoda görev kartları kullanarak iş akışını görselleştiren bir metodolojidir. Bu kartlar, işin akışını gösterir: planlama, geliştirme, test etme, vb. Kanban, işin akışını optimize etmek için kullanılır. Agile ve scrum metodları içinde de Kanban yöntemi ile iş takibi yapılabilir. Kanban, iş akışını daha görünür ve yönetilebilir hale getirerek takımların daha etkili çalışmasına olanak tanır. Bu özellikleri sayesinde, Agile metodolojilerin bir parçası olarak çok tercih edilmektedir.

Agile ve DevOps İlişkisi

DevOps, yazılım geliştirme ve işletme süreçlerini entegre eden bir kültür ve pratiktir. Agile, geliştirme aşamasına odaklanırken, DevOps, yazılımın hızlı bir şekilde teslim edilmesini ve işletilmesini sağlar. Agile ile DevOps, sürekli entegrasyon ve teslimatı (CI/CD) vurgular.

DevOps, Agile metodolojilerle birlikte çalışarak yazılım geliştirme ve dağıtım süreçlerini daha etkili hale getiren bir kültür ve uygulamadır. İşte DevOps’un Agile ile birleşmesinin önemli nedenleri:

  1. Sürekli Entegrasyon ve Dağıtım (CI/CD):
    • DevOps, sürekli entegrasyon (CI) ve sürekli dağıtım (CD) prensiplerini vurgular. Bu, yazılımın sürekli olarak test edilip, otomatik olarak dağıtılmasını sağlar. Agile projelerin hızlı ve sık teslimat yapmasına yardımcı olur.
  2. Hızlı Geri Bildirim:
    • DevOps, yazılımın hızlı bir şekilde kullanılabilir hale getirilmesini ve işletilmesini sağlar. Bu, geri bildirimin daha hızlı alınmasını ve hataların daha hızlı düzeltilmesini mümkün kılar.
  3. İşbirliği ve İletişim:
    • DevOps, geliştirme ve işletme ekipleri arasındaki işbirliğini artırır. Bu, Agile ekiplerin daha iyi bir şekilde iletişim kurmasını ve birlikte çalışmasını sağlar.
  4. Hızlı Hata Düzeltme:
    • DevOps, hataların hızlı bir şekilde tespit edilip düzeltilmesine olanak tanır. Bu, kullanıcı geri bildirimlerine daha hızlı bir şekilde yanıt verilmesini sağlar.
  5. Otomasyon ve Verimlilik:
    • DevOps, tekrarlayan işleri otomasyon ile gerçekleştirerek verimliliği artırır. Bu, ekiplerin daha fazla zamanlarını inovasyona ve değer yaratıcı işlere odaklamalarını sağlar.
  6. İzleme ve Performans Değerlendirmesi:
    • DevOps, yazılımın performansını sürekli olarak izler ve değerlendirir. Bu, Agile ekiplerin performans sorunlarını hızla tespit edip çözmelerini sağlar.
  7. Daha İyi Güvenlik:
    • DevOps, güvenlik uygulamalarını süreçlerin bir parçası haline getirir. Bu, Agile projelerin daha güvenli yazılım geliştirmelerini teşvik eder.
  8. Kültürel Uyum:
    • DevOps, bir kültür ve çalışma şekli olarak kabul edilir. Bu kültür, hızlı değişimlere uyum sağlamayı, işbirliğini ve sürekli iyileştirmeyi teşvik eder.

Sonuç olarak, DevOps ve Agile bir araya geldiğinde, yazılım geliştirme süreçleri daha hızlı, güvenilir ve verimli hale gelir. Bu, ekiplerin müşteri ihtiyaçlarına hızla yanıt vermesini ve rekabetçi kalmasını sağlar.

Agile neden daha çok tercih ediliyor?

Agile, yazılım geliştirme süreçlerinde tercih edilen bir metodoloji olmasının birkaç önemli nedeni bulunmaktadır:

  1. Esneklik ve Uyum Kabiliyeti: Agile, değişen gereksinimlere hızlı yanıt verebilme kabiliyeti sunar. Proje süresince ortaya çıkan yeni bilgiler veya müşteri geri bildirimleri doğrultusunda, geliştirme ekibi kolayca adapte olabilir.
  2. Müşteri Memnuniyeti: Agile, müşteri merkezli bir yaklaşım benimser. Her iterasyon sonunda çalışan bir ürün veya prototip sunulduğu için, müşteriler gerçek ilerlemeyi görebilirler. Bu, müşteri memnuniyetini artırır.
  3. Sürekli İyileştirme ve Feedback: Agile süreçler, düzenli geri bildirim döngüleriyle çalışır. Her iterasyon sonunda müşteri veya paydaşlardan gelen geri bildirimler, ürünün geliştirilmesi için değerli bilgiler sağlar.
  4. Risk Azaltma: Agile, projenin küçük, yönetilebilir parçalara bölünmesini teşvik eder. Bu, risklerin erken aşamalarda tespit edilip düzeltilmesine olanak tanır.
  5. Hızlı Teslimat: Agile, kısa iterasyonlarla çalışır ve her birinde bir işlevsel ürün parçası sunar. Bu, işlevselliğin hızla teslim edilmesini sağlar.
  6. Motivasyon ve Takım Katılımı: Agile, ekiplerin kendi işlerini planlamasına, sorumluluk almasına ve sonuçları görmesine olanak tanır. Bu, takım motivasyonunu artırır.
  7. Uyum ve İşbirliği: Agile, ekip üyeleri ve paydaşlar arasında düzenli iletişimi teşvik eder. Bu, proje paydaşları arasında daha iyi bir anlayış ve işbirliği sağlar.
  8. İteratif Geliştirme: Agile, bir ürünün birkaç küçük adımda geliştirilmesini önerir. Her adımda gelen geri bildirimlerle ürün sürekli olarak iyileştirilir.

Bu nedenlerle, özellikle hızla değişen, belirsiz veya müşteri ihtiyaçlarına duyarlı projelerde Agile tercih edilmektedir. Agile, esneklik, müşteri memnuniyeti ve sürekli gelişme gibi temel prensiplere dayanarak yazılım geliştirme süreçlerini daha etkili ve verimli hale getirir.

Agile yöntemde takımlar nasıl olur?

Agile geliştirme metodolojisi, çeşitli roller ve takım yapıları içerir. Bu yapılar, projenin özelliklerine, büyüklüğüne ve gereksinimlerine göre değişebilir. İşte Agile’da sıkça kullanılan takım yapıları ve roller:

  1. Geliştirme Takımı (Development Team):
    • Geliştirme takımı, gerçek yazılım geliştiren ekip üyelerini ifade eder. Yazılım geliştirmek, test etmek ve ürünün kod tabanını oluşturmak gibi görevleri üstlenirler.
    • Geliştirme takımı, genellikle 5 ila 9 üye arasında değişebilir ve işlevsel olarak çeşitli olmalıdır (örneğin, yazılım geliştirme, test, tasarım, vb.).
  2. Ürün Sahibi (Product Owner):
    • Ürün sahibi, müşteri veya paydaşların ihtiyaçlarını temsil eden kişidir. Proje gereksinimlerini belirler, önceliklendirir ve geliştirme takımına ileterek ürünün yönlendirmesini sağlar.
    • Ürün sahibi, sürekli olarak işlevsel gereksinimleri güncelleyebilir ve geliştirme takımının sorularını yanıtlar.
  3. Scrum Master:
    • Scrum metodolojisini kullanıyorsanız, Scrum Master rolü devreye girer. Diğer Agile yaklaşımlarda, bu rolün bazı görevleri ürün sahibi veya geliştirme takımı üyeleri tarafından da yürütülebilir.
    • Scrum Master, Agile prensiplerin ve uygulamaların takip edilmesini sağlar. Engelleri kaldırır, takımın verimliliğini artırır ve Scrum toplantılarını yönetir.
  4. Paydaşlar (Stakeholders):
    • Paydaşlar, ürün veya projenin başarısını etkileyebilecek herkesi ifade eder. Bu kişiler, ürün sahibi ile işbirliği yaparlar, gereksinimleri belirlerler ve sonuçları değerlendirirler.

Takım yapısı, projenin karmaşıklığına ve büyüklüğüne bağlı olarak değişebilir. Büyük projelerde, birden fazla geliştirme takımı olabilir ve bu takımların koordinasyonunu sağlamak için büyük ölçüde ürün sahibi ve Scrum Master’ın işbirliği yapması gerekebilir. Ayrıca, çok büyük projelerde birden fazla ürün sahibi ve Scrum Master da bulunabilir.

Agile, esnek bir yaklaşım olduğu için, takım yapıları ve roller projeye özgü olarak uyarlanabilir. Önemli olan, tüm takım üyelerinin işbirliği yaparak müşteri ihtiyaçlarına hızlı ve etkili bir şekilde yanıt verebilmesidir.

Agile yöntemde hangi yazılım araçları tercih edilir?

Agile metodolojilerle çalışan ekipler, iş akışını, görevleri, geri bildirimleri ve diğer süreçleri yönetmek için çeşitli yazılım araçları kullanırlar. İşte Agile projelerde yaygın olarak kullanılan bazı popüler yazılım araçları:

  1. Jira:
    • Jira, Atlassian tarafından geliştirilen ve Agile projelerin yönetimini sağlayan popüler bir proje yönetim aracıdır. Scrum, Kanban, ve diğer Agile metodolojileri destekler. Görev izleme, sprint planlaması, geri bildirim toplama gibi birçok özelliği bulunur.
  2. Trello:
    • Trello, bir diğer Atlassian ürünüdür. Kart tabanlı bir iş akışı sağlar ve kolayca özelleştirilebilir. Bu, ekiplerin işleri yönetmeleri, işbirliği yapmaları ve projeleri organize etmeleri için kullanılır.
  3. Asana:
    • Asana, takım üyelerinin işlerini planlamasına, takip etmesine ve işbirliği yapmasına olanak tanır. Proje ve görev yönetimi için kullanılır ve Agile metodolojilere uygundur.
  4. Monday.com:
    • Monday.com, iş süreçlerini planlama, izleme ve optimize etme konusunda yardımcı olur. Görsel iş akışları ve panolar ile ekiplerin işlerini organize etmelerini sağlar.
  5. VersionOne:
    • VersionOne, Agile projeleri yönetmek için özel olarak tasarlanmış bir platformdur. Scrum ve Kanban metodolojilerini destekler ve tüm süreci izleme ve yönetme imkanı sunar.
  6. Targetprocess:
    • Targetprocess, geniş bir yelpazede projeleri ve süreçleri yönetmek için kullanılır. Scrum, Kanban, SAFe ve diğer Agile metodolojilerini destekler.
  7. ZenHub:
    • ZenHub, GitHub üzerinde entegre bir proje yönetim aracıdır. Scrum ve Kanban tabanlı iş akışlarıyla GitHub projelerini yönetmeyi sağlar.
  8. Pivotal Tracker:
    • Pivotal Tracker, Scrum tabanlı bir proje yönetim aracıdır. Hızlı ve kolay bir şekilde işlerinizi izlemenizi ve sürdürmenizi sağlar.

Bu araçlar, ekiplerin işbirliği yapmalarını, işleri planlamalarını, görevleri takip etmelerini ve projeleri yönetmelerini sağlamak için kullanılır. Her aracın kendi avantajları ve özellikleri vardır, bu nedenle bir ekip, ihtiyaçlarına en uygun olanı seçer.

DevOps da hangi yazılım araçları tercih edilir?

DevOps süreçlerini desteklemek ve otomasyonu sağlamak için bir dizi araç bulunmaktadır. İşte DevOps süreçlerinde en çok tercih edilen araçlardan bazıları:

  1. Jenkins:
    • Jenkins, sürekli entegrasyon ve sürekli dağıtım (CI/CD) işlemlerini otomatikleştirmek için kullanılan açık kaynaklı bir araçtır. Jenkins, farklı platformlarda, dillerde ve teknolojilerde çalışabilen geniş bir eklenti ekosistemine sahiptir.
  2. Docker:
    • Docker, konteyner teknolojisi kullanarak uygulamaların hızlı ve taşınabilir bir şekilde dağıtılmasını sağlar. Docker, uygulama ve bağımlılıklarını bir konteyner içinde paketler, bu da uygulamanın herhangi bir ortamda çalışmasını sağlar.
  3. Kubernetes:
    • Kubernetes, konteyner orkestrasyon platformudur. Docker gibi konteyner teknolojisini yönetir ve uygulamaların dağıtımını, ölçeklendirmesini ve yönetimini kolaylaştırır.
  4. Ansible:
    • Ansible, otomasyon ve konfigürasyon yönetimi için kullanılan açık kaynaklı bir araçtır. Ansible, sunucu konfigürasyonunu, uygulama dağıtımını ve diğer otomasyon görevlerini gerçekleştirmek için kullanılır.
  5. Git:
    • Git, sürüm kontrol sistemi olarak kullanılır. Kodun sürüm geçmişini yönetir, paralel çalışma imkanı sağlar ve işbirliği yapmayı kolaylaştırır.
  6. Puppet:
    • Puppet, konfigürasyon yönetimi ve otomasyon platformudur. Sunucuların ve ağ cihazlarının konfigürasyonlarını yönetmek için kullanılır.
  7. Chef:
    • Chef, otomasyon ve konfigürasyon yönetimi için kullanılan bir araçtır. Sunucuların konfigürasyonunu tanımlayan kod parçalarıyla çalışır.
  8. Prometheus:
    • Prometheus, açık kaynaklı bir izleme ve uyarı sistemi olarak kullanılır. Sistem performansını ve uygulama metriklerini izlemek için kullanılır.
  9. ELK Stack (Elasticsearch, Logstash, Kibana):
    • ELK Stack, logları toplama, işleme ve görselleştirme konusunda kullanılır. Elasticsearch, verileri depolar ve arar; Logstash, verileri işler; Kibana ise verileri görselleştirir.

Bu araçlar, birçok farklı DevOps sürecini destekler ve ekiplerin hızla geliştirme, dağıtım ve işletme yapmasını sağlar. Bununla birlikte, her projenin ihtiyaçları farklı olduğu için, doğru araçları seçmek önemlidir.

Özetle; Agile yöntem ile yazılım geliştirme süreçlerinde çok verimlilik yaşandı ve bu yüzden çok tercih ediliyor. DevOps ile birleştiğinde ise hız, verimlilik ve kalite konusunda işimizi çok daha iyi seviyelere çıkarmış oluyoruz. Eğer sizde yazılım süreçlerini iyileştirmek istiyorsanız bu yöntemlerin şirketinizde/projenizde oturması ve kültürün değişmesi için benimle irtibata geçebilirsiniz.


Flutter ile tek kod ve tüm platformlar

Flutter, Google tarafından geliştirilen, iOS, Android, Web ve Desktop için yüksek performanslı, tüketicinin beklentilerini karşılayan uygulamalar oluşturmayı hedefleyen bir mobil uygulama frameworkü olarak bilinir. Ancak Flutter’ın avantajları sadece bunlarla sınırlı değil. İşte Flutter’ı benzersiz kılan birkaç özellik:

1. Tek Kod Tabanı

Flutter, geliştiricilere iOS, Android, Web ve Desktop için uygulamaları tek bir kod tabanıyla yazma olanağı sunar. Bu, geliştirme sürecini hızlandırır ve işleri kolaylaştırır. Maliyetden tasarruf imkanı sağlar. 4 platforma da geliştirme yapacaksanız tek bir developer ile de işlerinizi yapmanız mümkün hale gelir.

Örnek bir “Merhaba Dünya” uygulaması:

import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Merhaba Dünya',
home: Scaffold(
appBar: AppBar(
title: Text('Merhaba Dünya'),
),
body: Center(
child: Text('Merhaba Dünya!'),
),
),
);
}
}

2. Hot Reload

Flutter’ın “hot reload” özelliği, geliştiricilerin yapılan değişiklikleri anında görmesini sağlar. Bu, hataların hızlıca bulunmasını ve düzeltilmesini sağlar ve geliştirme sürecini önemli ölçüde hızlandırır.

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Hot Reload Örneği',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Hot Reload Örneği"),
),
body: Center(
child: Text("Değişiklikleri anında görün!"),
),
);
}
}

Bu kodu çalıştırın ve "Değişiklikleri anında görün!" metnini değiştirin. Hot Reload özelliği sayesinde uygulamanın durumunu kaybetmeden değişikliği hemen görebilirsiniz.

3. Performans

Flutter, Dart dilinde yazılmıştır ve Dart, Just-In-Time ve Ahead-Of-Time derleme yeteneklerine sahiptir. Bu özellikler, uygulamanın başlangıç süresini hızlandırır ve performansını iyileştirir.

4. Zengin Widget Kütüphanesi

Flutter, kullanıcıların modern ve çekici bir arayüz oluşturmasını sağlayan bir dizi widget sunar. Bu widget’lar hızlı ve kolay bir şekilde uygulamaya entegre edilebilir.

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Zengin Widgetler',
home: Scaffold(
appBar: AppBar(
title: Text('Zengin Widgetler'),
),
body: Center(
child: RaisedButton(
onPressed: () {},
child: Text('Bir Buton Widgeti'),
),
),
),
);
}
}

Bu kod parçası, basit bir buton widget’ini kullanarak kullanıcıya etkileşimli bir öğe sunar.

Flutter, bu gibi özellikleri sayesinde uygulama geliştirmede yeni bir çağ açmaktadır. Tek kod tabanı, hot reload, yüksek performans ve zengin widget kütüphanesi gibi özellikler, geliştiricilere daha hızlı ve daha etkili uygulamalar oluşturma imkanı sağlar. Üstelik bunu tüm platformlara export yapabilme özelliği ile birleştirerek bize zaman kazandırır. Sadece zaman değil ayrıca tek kod sayesinde ortak bir kalite yakalanmış olur. Tekrar eden kodlar azalır. Tabi ki tek kod ortamında kodunuz yine kaliteli olmak zorunda. Yazdığını flutter uygulamasını kötü yazarsanız sonuç tüm platformlarda kötü olacaktır. Bu yüzden işe başlamadan önce iyi araştırmak, örnekleri incelemek ve gerekirse eğitim almak önemlidir. Bir de şuna deyinmeden geçmemek lazım. Flutter bir client geliştirme aracı. Yani siz kapsamlı bir iş yapıyorsanız sağlam bir backend e de ihtiyaç duyacaksınız. Bunun için ayrı bir detaylı backend makalesi yazacağım.

Flutter’ın son gelişmelerini takip etmek ve tüm bu eşsiz özelliklerini keşfetmek için https://flutter.dev sitesini ziyaret edebilirsiniz. Nasıl kurulur, kullanılır ve son stabil sürümleri nelerdir https://docs.flutter.dev adresinde mevcut. Her stabil sürüm upgrade i ile çok daha iyi hale gelen flutter ı siz de öğrenebilir ve projelerinizde kullanabilirsiniz.


Metaverse geliyor…

Metaverse, sanal gerçeklik ve blockchain teknolojileri kullanılarak oluşturulmuş, etkileşimli ve merkezi olmayan bir dijital evrendir. Bu evren, kullanıcıların birbirleriyle etkileşime geçebilecekleri, ticaret yapabilecekleri ve farklı dijital varlıklara sahip olabilecekleri bir platform sunar.

Metaverse, çeşitli alanlarda kullanılabilir, örneğin sanal dünyalarda, e-ticarette, eğitimde, oyunlarda, sanatta ve daha birçok alanda. Bu dijital evrende kullanılan blockchain teknolojisi, dijital varlıkların ve işlemlerin merkezi olmayan bir şekilde yönetilmesini ve güvenli bir şekilde gerçekleştirilmesini sağlar.

Metaverse’un temel özellikleri arasında, merkezi olmayan yapı, gerçek zamanlı etkileşim, özelleştirilebilir avatarlar, dijital varlık sahipliği, akıllı sözleşmeler ve sanal dünyaların yaratılması gibi özellikler yer alır.

Metaverse, gelecekte giderek daha fazla insanın kullanacağı bir teknoloji olarak kabul ediliyor ve bu nedenle birçok girişimci ve şirket bu alana yatırım yapmaya başladı.

Sende metaverse de yerini almak istiyorsan birkaç seçenek mevcut.

1 – Mevcut metaverse projelerinden birinden NFT olarak avatar, land(arsa) ve benzeri şeyleri alıp gelecekte değerlenmesini bekleyebilirsin.

2 – Kendi metaverse projeni geliştirebilir veya gelişmekte olan bir metaverse projesine katılabilirsin.

Metaverse kavramı giderek daha popüler hale geldikçe, birçok şirket ve proje bu alanda çalışmalar yapmaya başladı. İşte dünyada en popüler metaverse projeleri:

  1. Decentraland: Sanal bir dünya olan Decentraland, blockchain teknolojisi ile merkezi olmayan bir yapıya sahip. Kullanıcılar, bu dünyada arazi satın alabilir, evler ve ticaret merkezleri inşa edebilir ve diğer kullanıcılarla etkileşime geçebilir.
  2. The Sandbox: Sandbox, kullanıcıların 3D dünyaları tasarlamalarına ve bu dünyaları diğer kullanıcılarla paylaşmalarına olanak tanıyan bir platformdur. Sandbox, ayrıca kullanıcıların kendi dijital varlıklarını yaratmalarına, bunları satabilmelerine ve ticaret yapmalarına da izin verir.
  3. Somnium Space: Somnium Space, kullanıcıların sanal bir dünya içinde dolaşmalarına, ticaret yapmalarına ve diğer kullanıcılarla etkileşime geçmelerine olanak tanıyan bir platformdur. Somnium Space ayrıca, kullanıcıların kendi dijital varlıklarını yaratmalarına ve bu varlıkları satabilmelerine de izin verir.
  4. CryptoVoxels: CryptoVoxels, merkezi olmayan bir sanal dünya platformudur. Kullanıcılar bu dünyada arazi satın alabilir, evler inşa edebilir ve diğer kullanıcılarla etkileşime geçebilir. CryptoVoxels, kullanıcıların kendi dijital varlıklarını yaratmalarına ve satabilmelerine de izin verir.
  5. Axie Infinity: Axie Infinity, blockchain teknolojisiyle desteklenen bir oyun ve metaverse projesidir. Kullanıcılar, dijital varlıklar olan Axies’leri yetiştirip, eğitip ve satabilirler. Ayrıca Axie Infinity, kullanıcıların diğer oyuncularla etkileşime geçmelerine ve ticaret yapmalarına da izin verir.

Son zamanlarda Türkiye’de de birçok metaverse projesi geliştiriliyor. İşte bazı Türk metaverse projeleri:

  1. Virtualis: Virtualis, Türkiye’nin ilk sanal gerçeklik platformudur. Kullanıcılar, gerçek hayattaki etkinlikleri, konserleri ve müzeleri sanal gerçeklik ortamında deneyimleyebilirler.
  2. Paribu Arena: Kripto para borsası Paribu tarafından geliştirilen Paribu Arena, kullanıcıların dijital varlıklarını kullanarak birbirleriyle yarışabilecekleri bir platformdur. Paribu Arena’da yarışmalar düzenlenir ve kazananlara ödüller verilir.
  3. Turgutreis Sanal Liman: Bodrum Turgutreis Limanı’nın sanal bir kopyası olan Turgutreis Sanal Liman, kullanıcıların sanal olarak limanda gezmelerine ve deneyimlemelerine olanak tanır.
  4. Reborn City: Reborn City, Türkiye’nin ilk merkezi olmayan sanal dünya platformudur. Kullanıcılar, Reborn City’de dijital varlıklarını yaratıp, satabilir ve diğer kullanıcılarla etkileşime geçebilirler.
  5. Wannart: Wannart, kullanıcıların dijital sanat eserlerini sergileyebilecekleri bir platformdur. Kullanıcılar, sanal galerilerinde eserlerini sergileyebilir, satışa çıkarabilir veya diğer kullanıcılardan dijital sanat eserleri satın alabilirler.
  6. GhoVerse: Bir oyun olaran başlayan ancak sonradan metaverse özellikleri geliştirerek devam etmiş ve Türkiye’deki yazılımcılar ile başlatılmış bir metaverse projesidir. Gezegenler, kasabalar, hayaletler ve avcıların olduğu mistik bir evren sunar. Kullanıcılar bu gezegenlerde dolaşıp istediklerini yapabilirler.

Bu Türk metaverse projeleri, ülkemizde bu alanda farkındalığın artması ve Türk girişimcilerinin metaverse teknolojilerine ilgi göstermesi ile birlikte ortaya çıkmaktadır.


Web3 Hakkında

Web3, blockchain ve kripto para birimi teknolojileri üzerine inşa edilen bir internet vizyonudur ve günümüzün hızla gelişen teknolojileri arasında önemli bir yer tutmaktadır. Web3 teknolojileri, merkezi otoriteler yerine dağıtık ağlar ve kriptografi kullanarak veri güvenliğini ve gizliliğini artırarak internet kullanıcılarının güvenliğini ve kontrolünü artırmayı hedeflemektedir.

Web3 teknolojileri, merkezi olmayan uygulamaların (dApps) ve merkezi olmayan finans (DeFi) gibi yeni nesil uygulamaların geliştirilmesine ve kullanılmasına olanak tanımaktadır. Bu uygulamalar, daha adil, şeffaf ve güvenli bir internet sağlayarak gelecekteki teknolojik gelişmelerde büyük bir rol oynayacaktır.

Bu nedenle, Web3 teknolojileri geleceğin önemli teknolojilerinden biri olarak kabul edilebilir. Ancak, bu teknolojilerin tam potansiyeline ulaşması için hala birçok zorluk ve engel vardır ve bu nedenle, Web3’nin geleceği tam olarak belirlenememektedir.

Web3 teknolojileriyle geliştirilen bazı dApps örnekleri:

  1. Merkezi Olmayan Finans (DeFi) Uygulamaları: Web3 teknolojileri, merkezi olmayan finans uygulamalarının (DeFi) geliştirilmesine olanak tanımaktadır. Bu uygulamalar, kripto para birimleri üzerinden kredi verme, borç alma, sigorta ve diğer finansal işlemleri gerçekleştirmek için blockchain teknolojisi kullanır.
  2. Dağıtık Depolama Uygulamaları: Web3 teknolojileri, dağıtık depolama uygulamalarının geliştirilmesine olanak tanır. Bu uygulamalar, verileri merkezi bir sunucuda değil, dünya genelinde dağıtılmış bir ağda depolar ve böylece verilerin güvenliği ve gizliliği artar.
  3. Merkezi Olmayan Sosyal Medya Uygulamaları: Web3 teknolojileri, merkezi olmayan sosyal medya uygulamalarının geliştirilmesine olanak tanır. Bu uygulamalar, kullanıcıların verilerini merkezi bir sunucuda değil, blockchain teknolojisi kullanarak dünya genelinde dağıtılmış bir ağda saklar.
  4. Akıllı Sözleşme Uygulamaları: Web3 teknolojileri, akıllı sözleşmelerin geliştirilmesine olanak tanır. Bu uygulamalar, belirli şartlar sağlandığında otomatik olarak çalışan ve veri manipülasyonu veya yanıltıcı işlemlerin önlenmesine olanak tanıyan programlardır.
  5. NFT Piyasaları: Web3 teknolojileri, NFT’ler (non-fungible tokens) gibi kripto varlıkların alım satımını mümkün kılan merkezi olmayan pazar yerlerinin geliştirilmesine olanak tanır. Bu uygulamalar, sanat eserleri, koleksiyon ürünleri ve diğer benzersiz varlıkların alım satımını gerçekleştirmek için kullanılır.

Bu sadece birkaç örnek olup, Web3 teknolojileriyle geliştirilebilecek dApps’lerin sayısı ve çeşitliliği giderek artmaktadır.

Örneğin Metaverse kavramı, genellikle Web3 teknolojileri ile ilişkilendirilir ve Web3 teknolojileri olmadan Metaverse uygulamalarının geliştirilmesi zordur. Metaverse, genellikle sanal bir dünya olarak tanımlanır ve kullanıcıların dijital varlıklarını (avatarlar, objeler, sanat eserleri vb.) oluşturmasına, paylaşmasına ve etkileşim kurmasına olanak tanıyan bir platformdur.

Web3 teknolojileri, Metaverse platformlarının merkezi olmayan ve açık kaynak kodlu olarak geliştirilmesine olanak tanır. Bu, kullanıcıların dijital varlıklarının sahipliği ve kontrolü üzerinde tam bir hakimiyet sahibi olmalarını sağlar. Blockchain teknolojisi, bu dijital varlıkların sahipliği, telif hakları ve diğer önemli özellikleri için güvenli bir kayıt tutar.

Web3 teknolojileri, Metaverse uygulamalarının güvenliği, şeffaflığı ve gizliliğinin korunması açısından da önemlidir. Kullanıcılar, Web3 teknolojileri aracılığıyla kimliklerini ve diğer kişisel verilerini koruyabilir ve Metaverse platformlarında yapılan tüm işlemler şeffaf bir şekilde kaydedilebilir.

Bu nedenle, Metaverse ve Web3 teknolojileri arasında yakın bir ilişki vardır ve Web3 teknolojileri, Metaverse platformlarının geliştirilmesi ve işletilmesi için önemli bir rol oynamaktadır.

Web3 de kullanılan blockchain ağları:

Web3 teknolojisi, merkezi olmayan uygulamaların geliştirilmesine olanak tanıyan birçok farklı blockchain ağına bağlanabilir. Bu nedenle, Web3 ağlarının sayısı sürekli olarak artıyor. Ancak, en popüler Web3 ağlarından bazıları şunlardır:

  1. Ethereum: Web3 uygulamalarının geliştirilmesinde en yaygın kullanılan blockchain ağı Ethereum’dur. Ethereum, akıllı sözleşmeler oluşturmak ve Web3 uygulamaları için altyapı sağlamak için kullanılır.
  2. Binance Smart Chain: Binance Smart Chain, Binance borsası tarafından geliştirilen bir blockchain ağıdır. Binance Smart Chain, düşük işlem ücretleri ve hızlı işlem onay süreleri sunar.
  3. Polygon: Polygon (eski adıyla Matic Network), Ethereum blockchain ağına köprü oluşturan bir Layer 2 çözümüdür. Polygon, Ethereum’a göre daha hızlı işlem onay süreleri ve düşük ücretler sunar.
  4. Solana: Solana, yüksek performanslı bir blockchain ağıdır ve Web3 uygulamalarının geliştirilmesinde kullanılır. Solana, düşük ücretler ve yüksek işlem hızları sunar.
  5. Avalanche: Avalanche, yüksek performanslı ve ölçeklenebilir bir blockchain ağıdır. Avalanche, Ethereum sanal makinesini destekler ve Ethereum’a benzer şekilde akıllı sözleşmeler oluşturmak için kullanılabilir.

Bu sadece birkaç örnek olup, Web3 teknolojisiyle bağlantılı farklı blockchain ağlarının sayısı sürekli olarak artmaktadır.

Ethereum, BSC, Polygon,Avalanche gibi ağlar EVM tabanlı blockchain ağlarıdır ve Solidity ile geliştirilir. Solana ise Rust dilini kullanarak akıllı sözleşmelerin oluşturulması için özel olarak tasarlanmış bir kütüphane olan Solana Programlama Arabirim Kitaplığı’nı (Solana Programming Interface Library – Solana SPL) kullanır.

Solidity:
Solidity, Ethereum sanal makinesinde (EVM) çalışan akıllı sözleşmelerin yazılması için özel olarak tasarlanmış bir yazılım dilidir. Bu nedenle, Solidity kullanarak akıllı sözleşmeler oluşturmak için Ethereum gibi EVM tabanlı ağlara ihtiyaç duyulmaktadır.

Solidity ile uyumlu bazı EVM tabanlı ağlar şunlardır:

  1. Ethereum: Solidity, Ethereum sanal makinesinde çalışan akıllı sözleşmelerin oluşturulması için kullanılır. Ethereum, dünyanın en büyük kripto para birimlerinden biridir ve birçok Web3 uygulamasının temelini oluşturur.
  2. Binance Smart Chain: Binance Smart Chain (BSC), Ethereum ile uyumlu bir blockchain ağıdır ve Solidity dilini kullanarak akıllı sözleşmelerin oluşturulmasına izin verir. BSC, hızlı işlem onay süreleri ve düşük ücretler sunar.
  3. Polygon (eski adıyla Matic Network): Polygon, Ethereum tabanlı bir Layer 2 çözümüdür ve Solidity dilini kullanarak akıllı sözleşmeler oluşturulmasına izin verir. Polygon, düşük ücretler ve hızlı işlem onay süreleri sunar.
  4. Optimism: Optimism, Ethereum tabanlı bir Layer 2 çözümüdür ve Solidity dilini kullanarak akıllı sözleşmeler oluşturulmasına izin verir. Optimism, hızlı işlem onay süreleri ve düşük ücretler sunar.
  5. Arbitrum: Arbitrum, Ethereum tabanlı bir Layer 2 çözümüdür ve Solidity dilini kullanarak akıllı sözleşmeler oluşturulmasına izin verir. Arbitrum, hızlı işlem onay süreleri ve düşük ücretler sunar.

Bu, Solidity dilini kullanan EVM tabanlı ağların sadece birkaç örneğidir. Solidity dilini kullanan diğer ağlar da mevcuttur ve sayıları her geçen gün artmaktadır.

Gas Fiyatı:

Gas fiyatı, Ethereum gibi blockchain ağlarında işlem gönderirken ödenen bir ücrettir. Bu nedenle, gas fiyatı en düşük olan blockchain ağları, Ethereum dışında, genellikle işlem ücretlerinde avantaj sağlarlar.

Bununla birlikte, gas fiyatı ve işlem ücretleri sürekli olarak değişkenlik gösterir ve belirli bir zaman dilimi içinde farklılıklar gösterebilir.

Ancak, şu anda gas fiyatı en düşük olan blockchain ağlarından biri Nano (NANO) olarak bilinen bir kripto para birimi ağıdır. Nano, blok zinciri teknolojisi kullanır, ancak işlem onaylamak için gas ücreti talep etmez. Bu nedenle, Nano ağında işlem yapmak ücretsizdir ve gas fiyatı en düşük olan blockchain ağlarından biridir.

Bunun yanı sıra, IOTA da (MIOTA) işlem ücreti olmadan çalışan bir blok zinciri teknolojisine sahip bir diğer kripto para birimidir. Ancak, IOTA’nın işlem ücreti olmaması, Tangle adlı özel bir protokol kullanmasından kaynaklanmaktadır.

Gwei (Giga-Wei), Ethereum ve diğer Ethereum tabanlı blockchain ağlarında kullanılan bir gas birimi olarak kullanılır. Gas, ağdaki işlemlerin işlemci gücüne ihtiyaç duyan birimdir ve her işlem için belirli bir gas ücreti ödenir.

Gwei, bir ether (ETH) değerinin 10 milyar parçasına eşittir. Yani, 1 ETH = 1,000,000,000 Gwei’dir. Gwei, Ethereum ağındaki gas ücretleri ölçmek için kullanılır ve genellikle işlem ücretleri olarak ödenir.

Örneğin, bir Ethereum işlemi için ortalama gas ücreti 100 Gwei olsaydı, bir kullanıcının o işlemi gerçekleştirmek için 0.0000001 ETH (100 Gwei = 0.0000001 ETH) gas ücreti ödemesi gerekebilir. Bu nedenle, gas fiyatları ve gwei değerleri, Ethereum ve diğer Ethereum tabanlı blockchain ağlarında işlem yaparken önemlidir.

Popüler blockchain ağları arasında gas ücretleri sürekli olarak değişebilir, ancak genellikle Ethereum, Binance Smart Chain ve Polygon (eski adıyla Matic) gibi ağlar daha popülerdir. Bu ağlar arasındaki gas ücretleri genellikle Ethereum’da en yüksek ve Polygon’da en düşük olacak şekilde farklılık gösterir.

Örneğin, 28 Şubat 2023 tarihinde yapılan bir araştırmada, Ethereum’daki ortalama gas ücreti 200 gwei (Gigawei) civarındayken, Binance Smart Chain’de 30 gwei ve Polygon’da 7 gwei civarındaydı. Bu, Polygon’un diğer blockchain ağlarına göre daha düşük gas ücretleri sunduğu anlamına gelir.

Diğer popüler blockchain ağlarının gas ücretleri şunlardır:

  • Solana: Yaklaşık 0,0001 SOL (Solana’nın yerel kripto para birimi) kadar düşük gas ücretleri sunar.
  • Cardano: Henüz tamamen geliştirilmediği için gas ücretleri hakkında kesin bir bilgi yoktur.
  • Avalanche: Ortalama gas ücretleri yaklaşık 30 gwei civarındadır.
  • Polkadot: Ortalama gas ücretleri yaklaşık 100-200 gwei civarındadır.

Bu rakamlar, blockchain ağları arasındaki gas ücretlerinin sürekli olarak değişebileceğini ve değişken olabileceğini unutmamak önemlidir.

Web3 de kullanılan yazılım dilleri nelerdir?

Web3 uygulamaları geliştirmek için birçok farklı yazılım dili kullanılabilir. Bunlardan bazıları:

  1. Solidity: Ethereum platformunda akıllı sözleşmeler oluşturmak için kullanılan bir yazılım dili olan Solidity, Web3 uygulamalarının en yaygın kullanılan yazılım dillerinden biridir. Solidity, Nesne Yönelimli Programlama (OOP) özelliklerini içerir ve Ethereum Virtual Machine (EVM) tarafından çalıştırılacak kodların oluşturulmasını sağlar.
  2. Rust: Rust, Web3 uygulamalarının geliştirilmesi için popüler olan bir diğer yazılım dilidir. Rust, performansı ve güvenliği ön planda tutan bir dildir ve Web3 uygulamaları için merkezi olmayan hizmetler geliştirmek için kullanılabilir.
  3. JavaScript: JavaScript, Web3 uygulamalarının geliştirilmesi için en yaygın kullanılan dillerden biridir. JavaScript, Ethereum platformu için web arayüzleri oluşturmak, akıllı sözleşmeler oluşturmak ve Web3 API’leriyle etkileşim kurmak için kullanılabilir.
  4. Go: Go, Ethereum platformu için akıllı sözleşmeler oluşturmak için kullanılabilir. Go, hızlı, verimli ve güvenli bir dil olarak bilinir ve özellikle merkezi olmayan uygulamalar için uygundur.
  5. Python: Python, Web3 uygulamalarının geliştirilmesinde kullanılan bir diğer dildir. Python, Ethereum platformu için akıllı sözleşmeler oluşturmak ve Web3 API’leriyle etkileşim kurmak için kullanılabilir.

Web3 hakkında kendimizi geliştirmek için bir akademi kurduk. Sende bu akademiye ücretsiz katılabilirsiniz. Detaylar için https://ghostakademi.xyz yi inceleyebilir ve orada bulunan discord linki üzerinden discord a giriş yapıp başvuru yapabilirsin.



Flutter ile herşey daha kolay!

Herkese merhaba,

Uzun zamandır bir yazı paylaşmadığımı farkederek genel olarak bir paylaşım yapmak istedim.

Biliyorsunuz eskiden yaptığım paylaşımlarda ios da swift , android de ise java ve kotlin kullanarak native mobil uygulama geliştirme yaptığımızdan ve flutter a geçtiğimizden bahsetmiştim.

Bu serüven devam ediyor ve yeni yapılan uygulamaları flutter da yapıyoruz. Ancak eskiden gelen bazı uygulamalar hala native swift ve java,kotlin de devam ediyor. Büyük uygulamaları flutter a geçirmek kolay değil tabiki ancak sıfırdan yazılan uygulamalarda flutter ın kolaylıklarını çok aramaya başladık.

Son 3 senedir flutter ile uğraştığımızı düşünürsek oldukça deneyimimiz oldu bu konuda. İlk başlarda eski yönteme göre alışması zor olsada bir kere alıştığınızda artık herşey daha hızlı ve kolay oluyor. Hele birde hazırladığınız bir çatı var ise bu iş artık her projede daha kolay hala geliyor.

Flutter ve Getx kütühanesi de bu işi beraber daha da hızlandırıyor.

Sizler için flutter getx örneği hazırladım. Bu örnekde flutter ı çalıştırmayı ve biraz ön bilgisi olanların anlayabileceği sade bir yapı mevcut. İçerisinde bir başlangıç seti mevcut. Nasıl bir çatı kurmalıyız? Hangi kütüphaneleri kullanmalıyız hepsi mevcut.

https://github.com/balabanferhat/FlutterGetXWithNavigation

Ayrıca sayfamdaki diğer flutter örneklerini de inceleyebilirsiniz.

https://github.com/balabanferhat


İyi bir yazılımcı olmak için 11 altın kural

İyi bir mobil uygulama yazılımcısı , web yazılımcısı yada backend yazılımcısı olmak bazı ortak temel özellikleri barındırıyor.

Bu ortak özellikler şu şekilde sıralanabilir. Elbette daha vardır ama bunlar ilk etapta aklıma gelenler ve önemli olanlar. Bunları hem yazılımcıların hem müşterilerin düşünmesi için yazıyorum. Umarım herkese faydalı olur.

  1. Her alanda çalışabilmeli (Mobil uygulama, web uygulaması, backend). Sadece hangisine yoğunlaşır ise onda daha hızlı sonuç elde eder.
  2. Konsantrasyonu iyi olmalı. Odaklandığı zaman işi (yada hedeflediği kısmı) bitirebilmeli.
  3. Pes etmemeli. Bazen geceler boyu sabahlamak gereksede pes etmeden devam etmeli.
  4. Çok iyi araştırmalı. Çözemediği konuları yada daha iyi ne yapabilirim gibi düşünerek araştırma yapmalı. Kendi kendine araştıran ve çözüm üretebilen biri olması çok önemli çünkü her zaman size yardımcı olacak birini bulamazsınız.
  5. Temel algoritmaları bilmeli. Günümüzde yazılıma yeni başlayan çoğu kişi algoritma çalışmadan yazılım öğrenmeye kalkıyor. Yazılım dilini öğrensede, zor problemeri algoritmalar kurarak çözemiyor. Önce bir programlama dili seçip (javascript, dart, php, c# gibi) burada algoritma çalışmak çok önemli.
  6. Dokümantasyon yapmalı. Hem kendi için hem kendisinden sonra kodlara girecek kişi için bunu yapmalı. Kodun için gelişigüzel yorumlar yazmak yerine düzgün yorumlar yazıp, bir readme dosyası hazırlayarak içine önemli konuları not etmeli (ör: nasıl build alınır , dev ve prod ortamına nasıl deploy edilir vs…)
  7. Versiyon kontrolü kullanmalı. Ekip halinde çalışmıyor bile olsa, yedek almak, ileride ben ne yapmıştım diye bakmak ve kodu düzgün teslim etmek için git sistemini biliyor olmalı.
  8. Etik olmalı. İşi eksiksiz ve gereken kişiye anlatarak ve dokümantasyonlar ile teslim etmeye özen göstermeli. Açılan bazı hesapları müşteri adına açmalı ve bunlara ait dokümantasyonları işe başlarken tutmaya başlayıp anında müşterisi ile veya işi yaptığı kişi ile paylaşmalı. Kendisine birşey olsa işe ne olacak düşünmeli. Para kazandığı yere ihanet etmemeli, dürüst ve ahlaklı olmalı.
  9. Devir alabilmeli. Başkasının yazdığı kodu incelemeyi çoğu yazılımcı sevmez. Kodu inceleyip sonra sorumluluğu üstlenerek yazan kişiden devir alabilmeli. Çoğu kişi maalesef anlamaya çalışmak yerine bu olmamış ben bunu baştan yazayım diyerek hem daha çok kendine iş çıkarma derdinde hem de öncesinde kodu yazan kişiye çamur atarak prim yapma derdinde oluyor. Düzgün devir almayı öğrenmek zorundayız. Bir kere karşınızdaki kişi işten anlamıyor diye bu olmamış demek bence dolandırıcılıktan başka birşey değildir.
  10. İyi debug yapabilmeli. Maalesef karşılaştığım çoğu yazılımcı debug yapmayı , kodu takip etmeyi bilmiyor. Yazdığınız kodu her durumu düşünerek debug yapmanız ve nasıl davrandığını incelemeniz gerekiyor.
  11. Tasarım gözü iyi olmalı. Tasarımcı olması gerekmiyor ama biraz da zevk olması lazım. Bunun içinde yapılan tasarımları incelemeli , trendleri takip etmeli. Bir iş yaparken ui (arayüz) tarafına özenmeli.

Sizde iyi bir yazılımcı olmak ve bu özelliklerin üstünde durup kendinizi geliştirmek istiyorsanız benimle irtibata geçebilirsiniz.