İçeriğe geç

Freelance Çalışma Deneyimlerim: Kodlama, Fikir Üretme ve Bursalı Günler

Evet, şimdi konuya biraz dalış yapalım. Freelance çalışma denilen bir mevzu var malumunuz. Ben de bu yollardan geçtim, hatta hala da geçmekteyim diyebilirim. Hani böyle oturup saatlerce kod yazdığın, bir problemi çözmek için beynini zorladığın ama sonunda başardığında da apayrı bir haz duyduğun günler oluyor ya, işte tam olarak onlardan bahsediyorum. Başlangıçta bu işlere giriştiğimde her şey çok daha farklıydı sanırım. Teknoloji ilerledikçe, ihtiyaçlar arttıkça bizim de kendimizi geliştirmemiz gerekiyordu haliyle. Bursa gibi güzel bir şehirde yaşarken, bir yandan da kod dünyasında kendime bir yer edinmeye çalışıyordum.

Teknik konuları bazen anlatmak zor oluyor, biliyorum. Ama elimden geldiğince sadeleştirmeye çalışacağım. C#, PostgreSQL, MySQL gibi veritabanlarıyla haşır neşir olmak, PHP’nin o eski ama hala iş gören yapısıyla uğraşmak, hatta Vue gibi modern arayüz teknolojilerini kullanmak… Bunların hepsi benim için birer deneyim oldu. Özellikle C# ile REST API geliştirmek ve Dapper gibi ORM araçlarını kullanmak, performans açısından gerçekten fark yaratıyor. Ne güzel değil mi?

Şimdi bu API olayına biraz girelim. Düşünsenize, bir web sitesi veya mobil uygulama arka planda sizin yazdığınız kodlarla konuşuyor, veri alıp veriyor. İşte bu iletişimin en yaygın yollarından biri REST API’ler. C# ve .NET ekosistemi bu konuda gerçekten güçlü. Dapper ise Micro ORM dediğimiz, performansı ön planda tutan bir kütüphane. Yani veritabanından veri çekerken veya gönderirken gereksiz yere şişmeden, doğrudan işlem yapmamızı sağlıyor. Bu da özellikle yoğun veri trafiği olan uygulamalarda fark yaratıyor.

Mesela şöyle bir senaryo düşünelim: Bir e-ticaret sitesi düşün. Kullanıcılar ürünleri listeliyor, sepete ekliyor, sipariş veriyor. İşte bütün bu işlemler arka planda sizin yazdığınız bir API aracılığıyla veritabanıyla haberleşiyor. Dapper gibi bir araçla bu haberleşmeyi ne kadar hızlı ve verimli yaparsanız, kullanıcı deneyimi de o kadar iyi olur.

Bir de işin bu kadar teknik tarafı var tabii. Hani dağcılık, kamp yapmayı severim ya, işte o doğayla iç içe olma hali insana farklı bir bakış açısı katıyor. Eşim ve çocuğumla vakit geçirmek benim için en büyük motivasyon kaynağı. Bazen ailecek Bursa sokaklarında dolaşmak, yeni yerler keşfetmek de ruhumu dinlendiriyor. Fakat, kabul etmek lazım ki bu aileyle geçirilen zamanlarda kodlama yapmaya pek vakit olmuyor. Ama işte o zamanlar da aklımda hep yeni fikirler uçuşuyor.

Bu fikirler bazen bir kod parçasını iyileştirmekle ilgili oluyor, bazen de tamamen yeni bir proje için bir kıvılcım çakıyor. Hatırlıyorum da, bir keresinde bir proje üzerinde çalışırken absürt bir hata almıştım. Hata mesajı o kadar garipti ki, sanki başka bir evrenden gelmiş gibiydi. Saatlerce uğraştım, forumlara baktım, nihayetinde basit bir yazım hatası olduğunu fark ettim. Kendi programım sınıfta kaldı yani o gün 🙂 Ama neyse ki o hatadan da bir şeyler öğrendim.

Şimdi gelelim kod örneğine. Bu kadar laftan sonra bir şeyler göstermeden olmaz. Düşünün ki bir kullanıcı bilgisi kaydetmek istiyorsunuz. Basit bir örnekle nasıl yapabiliriz, bir bakalım.

Önce yanlış bir yaklaşım gösterelim, ki hatayı daha iyi anlayalım. Bu yaklaşım, performans açısından pek de ideal değil.

// YANLIŞ YAKLAŞIM: Gereksiz yere fazla işlem yapabilir. public class YanlisKullaniciServisi {     public void KullaniciKaydet(Kullanici kullanici)     {         // Veritabanı bağlantısı açılır         // SQL sorgusu oluşturulur         // Kullanıcı bilgileri SQL sorgusuna eklenir         // Sorgu çalıştırılır         // Veritabanı bağlantısı kapatılır         // Belki bir loglama yapılır     } }

Şimdi gelelim daha doğru, yani Dapper ile daha performanslı bir yaklaşıma. Bu kod, doğrudan veritabanı komutlarını kullanarak daha hızlı çalışır.

Bunu yaparken de bazı belirsizlikler olabilir, tam hatırlamıyorum ama sanırım 10-15 satır civarı bir kod oluyor.

// DOĞRU YAKLAŞIM: Dapper ile daha performanslı. using Dapper; using System.Data;

public class DogruKullaniciServisi { private readonly IDbConnection _dbConnection;

public DogruKullaniciServisi(IDbConnection dbConnection) { _dbConnection = dbConnection; }

public async Task KullaniciKaydetAsync(Kullanici kullanici) { var sql = "INSERT INTO Kullanicilar (Ad, Soyad, Email) VALUES (@Ad, @Soyad, @Email)"; await _dbConnection.ExecuteAsync(sql, kullanici); } }

Bu kodda gördüğünüz gibi, Dapper ile SQL sorgusunu doğrudan çalıştırıyoruz. `ExecuteAsync` metodu, bu işlemi asenkron olarak hallediyor. Kullanıcı objesini doğrudan parametre olarak verdiğimiz için, Dapper kendi kendine alanları eşleştiriyor. Ne güzel değil mi? Bu arada, bu tür bir yapılandırma için veritabanı bağlantınızı DI (Dependency Injection) ile yönetmeniz en sağlıklısı olacaktır. Hani böyle her seferinde bağlantı açıp kapatmak yerine, tek bir bağlantı nesnesi üzerinden işlemleri yapmak daha verimli.

Neticede, freelance çalışırken her zaman en iyi çözümü bulmak gerekiyor. Bazen hızlı bir çözüm bulursunuz, bazen de en ince detayına kadar düşünülmüş, optimize edilmiş bir yapı kurarsınız. Bana göre, ikisinin de yeri var. Önemli olan, projenin gereksinimlerine en uygun olanı seçebilmek.

Bu arada, daha fazla bilgi edinmek isterseniz, Dapper’ın kendi sitesine bir göz atabilirsiniz. GitHub’da da bolca örnek bulmak mümkün. Hani merak edenler için:

Dapper GitHub

Veya genel olarak .NET ile API geliştirme hakkında bilgi almak için şöyle bir Google araması yapabilirsiniz.

Aslında bu tarz konular üzerine konuşmak bile insana bir şeyler katıyor. Kendi deneyimlerimi paylaşırken, hem kendimi taze tutuyorum hem de belki birilerine faydalı olabiliyorumdur diye umuyorum. Tabii bu arada, bazen aklıma başka şeyler de geliyor. Mesela geçenlerde bir arkadaşım bana Bursa’da bulabileceği en iyi kahveciyi sordu. Tam hatırlamıyorum ama sanırım birkaç tane güzel yer biliyordum. Neyse efendim, konumuza dönelim.

Sonuç olarak, freelance çalışmak hem özgürlük hem de sorumluluk demek. Kendi programınızı yönetmek, zamanınızı planlamak, müşterilerle iyi ilişkiler kurmak… Bunların hepsi bir bütün. Ve bu süreçte edindiğiniz teknik bilgiler, yaşadığınız deneyimler sizi daha da ileriye taşıyor. Yani şey gibi… neyse anladın sen 🙂

Umarım bu yazdıklarım size bir fikir vermiştir. Teknik konuları anlatırken bazen biraz dağılıyorum ama genel olarak ne demek istediğimi anladığınızı sanıyorum.

Evet, işte böyle. Kendi yolumda ilerlerken, öğrendiklerimi paylaşmaya devam edeceğim. Kendinize iyi bakın!

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.