GitHub Copilot ile Kodlama Verimliliğini Nasıl Artırırım?

Ahmet Özokutan
4 min readJun 3, 2024

--

For the English version of the article, please click here.

Yazılım geliştirme dünyası sürekli olarak değişiyor. Geliştiriciler olarak bu değişimlere ayak uydurmalıyız. GitHub Copilot’u ilk duyduğumda, bu aracın kodlama sürecimi nasıl dönüştürebileceğini merak etmiştim. Kullanımım boyunca Copilot’un yazılım geliştirme iş akışlarıma nasıl katkıda bulunduğunu fark ettim ve bu deneyimleri paylaşmak istiyorum.

GitHub Copilot Nedir?

GitHub Copilot, GitHub, OpenAI ve Microsoft tarafından geliştirilen yapay zeka destekli bir kod asistanıdır. Visual Studio Code gibi popüler kod editörlerine entegre olur ve yazdığınız kodu tahmin ederek, siz yazarken öneriler sunar. Copilot, geniş bir kod veritabanında eğitilmiştir ve çeşitli programlama dilleri ve çerçeveler için önerilerde bulunabilir. C#, Python, JavaScript, TypeScript, Ruby, Go ve daha birçok dilde çalışır.

Copilot, yazdığınız kodu analiz eder ve geri kalanını tahmin eder. Örneğin, bir fonksiyon yazmaya başladığınızda, Copilot amacını anlar ve onu tamamlamak için öneriler sunar. Bu öneriler, daha önce yazılmış ve analiz edilmiş milyonlarca satır koda dayanır.

Öneriler, kodlama akışınızı kesintiye uğratmadan gerçek zamanlı olarak görünür, böylece hızlı ve sorunsuz çalışmanızı sağlar. Önerileri seçebilir veya kendi kodunuzu yazmaya devam edebilirsiniz. Copilot, stilinizi ve tercihlerinizi öğrenir, zamanla daha doğru önerilerde bulunur. Ayrıca, kodunuza otomatik olarak yorumlar ve dökümantasyon satırları ekleyerek daha anlaşılır ve kolay bakım yapılabilir hale getirir.

Copilot Kullanmanın Faydaları

  • Daha Hızlı Kodlama: GitHub Copilot, kodlama hızını önemli ölçüde artırır. Önerilen kod blokları, özellikle tekrarlayan görevlerde zaman kazandırır.
  • Yenilikleri Keşfetme: Copilot, yeni kütüphaneler ve API’ler keşfetmenize yardımcı olur. Fonksiyonlar ve yöntemler önererek öğrenme sürecinizi hızlandırır.
  • Hataları Azaltma: Kodlama sırasında hata yapma olasılığını azaltır. Bu, özellikle karmaşık ve uzun kod bloklarında yararlıdır, mantık hatalarını önler.

GitHub Copilot ile Deneyimlerim

Hızlı Prototipleme

Yeni bir projeye başlarken, Copilot sayesinde hızlıca bir prototip oluşturabiliyorum. Önerilen kod snippet’leri, temel yapıyı hızlıca kurmama yardımcı oluyor. Bu süreçte, daha önce denemediğim kütüphaneleri ve teknolojileri keşfetme şansı da buluyorum.

Kod İncelemeleri ve Optimizasyon

Kod incelemeleri sırasında, Copilot’un önerilerini daha temiz ve optimize kod yazmak için kullanıyorum. Bu, takımın genel kod kalitesini artırır. Örneğin, bir fonksiyonun performansını artırmak için Copilot’un önerilerini uyguluyorum, bu da başlangıçta gözden kaçırmış olabileceğim optimizasyonları yapmamı sağlıyor.

Dokümantasyon

Kodlama sırasında, Copilot tarafından önerilen yorumlar ve dokümantasyon satırları, kodun daha anlaşılır olmasını sağlar. Bu, hem benim hem de takım üyelerim için kodun daha kolay anlaşılmasını sağlar. Copilot’un açıklamaları, özellikle karmaşık algoritmalar ve veri yapıları üzerinde çalışırken çok faydalıdır.

GitHub Copilot Chat ile İş Akışımı Optimize Etmek

GitHub Copilot Chat, iş akışımı daha da verimli hale getirdi. .NET Core projelerinden bazı spesifik örnekler:

[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid login attempt.");
}

var user = await _userManager.FindByNameAsync(model.Username);
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
var roles = await _userManager.GetRolesAsync(user);
var token = GenerateJwtToken(user, roles);
return Ok(new { Token = token });
}

return Unauthorized("Invalid login attempt.");
}

private string GenerateJwtToken(IdentityUser user, IList<string> roles)
{
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};

claims.AddRange(roles.Select(role => new Claim(ClaimsIdentity.DefaultRoleClaimType, role)));

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var token = new JwtSecurityToken(_configuration["Jwt:Issuer"],
_configuration["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);

return new JwtSecurityTokenHandler().WriteToken(token);
}

/explain: Seçili Kodu Açıklama

GitHub Copilot Chat, seçili kod snippet’lerini açıklamak için harika bir araçtır. Örneğin, karmaşık bir algoritmanız varsa ve nasıl çalıştığını anlamanız gerekiyorsa, bu komutu kullanabilirsiniz. Kodun ne yaptığını açık ve net bir şekilde açıklar.

/fix: Sorunları Çözme Önerileri

Kodunuzda bir sorun olduğunda, bu komut çözümler sunar. Hata ayıklama sırasında çok kullanışlıdır. Örneğin, performans sorunları veya mantık hataları için öneriler alabilirsiniz. Bu komut, kodunuzu hızlı bir şekilde düzeltmenize ve optimize etmenize yardımcı olur.

Copilot Prompt: Aşağıdaki giriş yönteminde güvenlik sorunlarını düzelterek JWT token üretim sürecini iyileştir ve ek kontrol ekle.

/doc: Dokümantasyon Oluşturma

Bu komutla kodunuzu dökümante edebilirsiniz. Büyük projelerde dökümantasyon eksikliği ciddi sorunlara yol açabilir. Bu komut, fonksiyonlarınız ve sınıflarınız için ayrıntılı dokümantasyon oluşturmanıza yardımcı olur, kodunuzu daha kolay bakım yapılabilir ve anlaşılır hale getirir.

/// <summary>
/// Kullanıcı giriş işlevini yönetir ve kullanıcı rollerine dayalı olarak JWT token üretir.
/// </summary>
/// <param name="model">Kullanıcı kimlik bilgilerini içeren giriş görünüm modeli.</param>
/// <returns>Giriş başarılıysa JWT token döner; aksi takdirde hata mesajı döner.</returns>
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid login attempt.");
}

var user = await _userManager.FindByNameAsync(model.Username);
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
if (!user.EmailConfirmed)
{
return Unauthorized("Email not confirmed.");
}

var roles = await _userManager.GetRolesAsync(user);
var token = GenerateJwtToken(user, roles);
return Ok(new { Token = token });
}

return Unauthorized("Invalid login attempt.");
}

/// <summary>
/// Kullanıcı bilgilerine ve rollere dayalı olarak JWT token üretir.
/// </summary>
/// <param name="user">Kullanıcı bilgilerini içeren IdentityUser nesnesi.</param>
/// <param name="roles">Kullanıcıyla ilişkilendirilmiş rol listesi.</param>
/// <returns>Bir JWT token dizesi döner.</returns>
private string GenerateJwtToken(IdentityUser user, IList<string> roles)
{
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Email, user.Email)
};

claims.AddRange(roles.Select(role => new Claim(ClaimsIdentity.DefaultRoleClaimType, role)));

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Issuer"],
claims: claims,
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddMinutes(30),
signingCredentials: creds);

return new JwtSecurityTokenHandler().WriteToken(token);
}

Sonuç

GitHub Copilot, yazılım geliştiriciler için güçlü bir araçtır. Kodlama sürecini hızlandırırken hata yapma olasılığını azaltır ve yeni teknolojileri öğrenmenize yardımcı olur. Copilot’u etkili bir şekilde kullanmak, verimliliğinizi artırabilir ve projelerinizi daha hızlı tamamlamanıza yardımcı olabilir. Gelecekte, sadece Copilot değil, benzeri AI araçlarının da yazılım geliştirme süreçlerimizi nasıl dönüştüreceğini merakla bekliyorum.

Kaynak

*Bu makaledeki kod örnekleri AI tarafından oluşturulmuştur ve gerçek projelerle doğrudan ilişkili değildir.

--

--