Bisiklet programlamada, zaten kanıtlanmış bir alternatifin bulunduğu yerde kendi çözümünüzü oluşturma metaforudur. Tidelift (2024) araştırmasına göre, ticari uygulamaların %80'inden fazlası en az bir “bisiklet” içerir — standart kütüphanede veya popüler bir pakette bulunan bir özelliğin kendi yazılmış uygulaması. Bu uygulama, geliştirme ve bakım maliyetlerini artırır ve hata girme riskini yükseltir.
Anahtar Noktalar
Bisiklet, geliştirici topluluğunda, zaten bir kütüphane, framework veya hizmet olarak mevcut olan bir işlevselliğin kendi uygulamasını oluşturmayı ifade eden bir terimdir. İngilizce konuşulan ortamlarda reinventing the wheel — tekerleği yeniden icat etmek — ifadesi kullanılır.
Metaforun kökeni, tekerleğin insanlığın en eski icatlarından biri olmasıyla ilgilidir. 21. yüzyılda onu yeniden yaratmaya çalışmak anlamsızdır. Programlamada, benzetme daha da kesindir: hazır kütüphaneler, binlerce mühendis tarafından yıllar boyunca optimize edilmiş “tekerleklerdir.” Daha düşük kalitede kendi tekerleğinizi yaratmak kaynak israfıdır.
RedMonk analitik bir raporda (2023), ortalama bir ticari uygulamanın yaklaşık 500 harici bağımlılık kullandığını hesapladı. Geliştiriciler her birini bağımsız olarak yazmak zorunda kalsaydı, proje maliyeti on kat artar ve pazara çıkış süresi yıllarca uzardı. Paket yöneticileri ekosistemi (npm, Maven, PyPI, NuGet) tam olarak tekerleği yeniden icat etmekten kaçınmak için vardır.
Kodun bir bisiklet olduğu birkaç belirtiyle anlaşılabilir: standart bir sorunu standart olmayan bir şekilde çözer, testleri veya dokümantasyonu yoktur ve hazır kütüphanelerde uzun süredir ele alınan uç durumları işlemez. Genellikle bu kod, projenin “benzersiz gereksinimleri” beklentisiyle yazılır, oysa gerçekte bu gereksinimler tipik olanlardan farklı değildir.
Özel bir çözüm, hazır bir kütüphanenin mimari veya lisans kısıtlamaları nedeniyle uymadığında haklıdır. Bir bisiklet, nesnel nedenler olmadan yaratılır — “denemek” isteği, başkalarının koduna güvensizlik veya mevcut araçları bilmeme nedeniyle. Fark temeldir: özel çözüm bilinçli bir seçimdir, bisiklet bir hatadır.
İlk ve en yaygın neden — mevcut çözümleri bilmemek. Bir junior geliştirici, standart kütüphanede JSON ayrıştırmak için yerleşik bir fonksiyon olduğunu bilmeyebilir. Bunun yerine, manuel olarak bir ayrıştırıcı yazacaktır. Bu sorun, dil ekosistemine yeni giren acemiler için özellikle geçerlidir.
İkinci neden kontrol yanılsamasıdır. Deneyimli geliştiriciler bazen popüler bir kütüphanenin yazarlarından “daha iyi yazabileceklerine” inanırlar. İstatistikler tersini söylüyor: milyonlarca proje tarafından kullanılan bir kütüphanede hata olasılığı, yeni yazılmış koda göre önemli ölçüde düşüktür. Synopsys'e (2024) göre, açık kaynak kod, bin satırda ortalama 0,1 hata içerirken, kurumsal kod 1–2 hata içerir.
Üçüncü neden, yeniden kullanım kültürünün eksikliğidir. Çalışmaya başlamadan önce mevcut çözümleri araştırmanın alışılmadık olduğu şirketlerde, her geliştirici “kendi bisikletini” yaratır. Bu, kod parçalanmasına yol açar: bir projede farklı çalışanlar tarafından yazılmış üç farklı HTTP istemci uygulaması bulunabilir.
| Neden | Tipik geliştirici | Sonuç |
|---|---|---|
| Bilgisizlik | Junior | Standart görev optimal olmayan şekilde çözülür |
| Kontrol yanılsaması | Senior | Zaten var olan kod için zaman harcanır |
| Kültür eksikliği | Ekip | Kod tabanı büyümesi, tekrarlama |
| Öğrenme isteği | Herkes | Öğrenmek için yararlı, üretim için zararlı |
| Bağımlılık korkusu | Tech Lead | Yüzlerce kanıtlanmış çözümü reddetme |
IKEA etkisi, bir kişinin kendi yarattığı şeyi nesnel olarak daha iyi hazır şeylerden daha yüksek değerlendirdiği psikolojik bir olgudur. Programlamada bu, “kendi bisikletiyle” gurur duyma ve bariz avantajları olsa bile onu hazır bir kütüphaneyle değiştirme konusunda isteksizlik olarak kendini gösterir.
Ekonomik sonuçlar en belirgin olanlarıdır. Stripe (2022) tahminine göre, geliştiriciler çalışma sürelerinin %35'ine kadarını zaten hazır çözüm olarak var olan kodu oluşturmak için harcarlar. 10 kişilik bir ekip için bu, tekerleği yeniden icat etmek için yılda yaklaşık 200.000 dolara eşdeğerdir.
Teknik sonuçlar arasında kod tabanı büyümesi, test kapsamının azalması (özel kod genellikle daha kötü test edilir) ve hata ve güvenlik açıklarında artış yer alır. Ayrıca, her özel bileşen, izlenmesi ve bakımı yapılması gereken başka bir arıza noktasıdır.
Google, “Why Google Stores Billions of Lines of Code” (2023) çalışmasında, en büyük teknoloji şirketinde bile yeni bir bağımlılık eklemek veya özel bir uygulama yazmak için katı bir karar alma süreci olduğunu belirtti. İç ekiplerin çoğu, önce tek kod deposunda hazır bir çözüm arar.
Bisikletler bilgi asenkronizasyonu yaratır: bir geliştirici ayrıldığında, özel bileşeni dokümantasyon ve destek olmadan kalır. Yeni ekip üyeleri standart olmayan kodu anlamak zorunda kalır ve üretici çalışmada kullanılabilecek zamanı boşa harcar.
En yaygın örnek, manuel JSON veya XML ayrıştırmadır, oysa neredeyse tüm modern dillerde yerleşik araçlar vardır. Geliştiriciler, JSON.parse()'in sorunu bir satırda çözdüğünü bilmeden, nesne ağaçlarında gezinmek için özyinelemeli fonksiyonlar yazar.
İkinci bir örnek, özel bir HTTP istemci uygulamasıdır. Standart kütüphaneler (fetch, axios, OkHttp, URLSession) önbellekleme, yeniden bağlanma, zaman aşımı ve güvenliği destekler. Özel bir istemci genellikle bu gereksinimlerden en az birini karşılamaz ve üretimde hatalara yol açar.
Üçüncü bir örnek, SLF4J, Winston veya Log4j kullanmak yerine özel bir günlükleme sistemidir. Bir geliştirici, hazır kütüphanelerin dönüş, günlük seviyeleri, eşzamansız yazma ve izleme sistemleri entegrasyonu desteğiyle kutudan çıkardığı şeyi yazmak için haftalar harcar.
# bisiklet — manuel CSV ayrıştırma
def parse_csv(line):
result = []
current = ""
for ch in line:
if ch == ",":
result.append(current)
current = ""
else:
current += ch
return result
# onun yerine standart kütüphane kullanma
import csv
with open("data.csv") as f:
reader = csv.reader(f)
Kendi ORM'inizi (Object-Relational Mapping) yazmak muhtemelen en pahalı bisiklettir. Hibernate, Entity Framework veya SQLAlchemy gibi hazır ORM'ler yıllar içinde geliştirilmiştir, önbellekleme, tembel yükleme, geçişler ve düzinelerce DBMS'yi destekler. Özel bir ORM genellikle tek bir veritabanıyla sınırlıdır ve bağlantı yönetiminde kritik hatalar içerir.
Öğrenme, bir bisikletin yalnızca haklı değil aynı zamanda yararlı olduğu tek durumdur. Eğitim amaçlı olarak kendi ayrıştırıcınızı, HTTP sunucunuzu veya ORM'inizi yazmak, bu araçların içeride nasıl çalıştığını anlamanıza yardımcı olur. Bir öğrenme projesiyle üretim kodunu karıştırmamak önemlidir: bir pet proje için iyi olan, ticari geliştirmede kabul edilemez.
Benzersiz gereksinimler gerçekten özel bir uygulama gerektirebilir. Hiçbir kütüphane belirli bir protokolü, veri formatını veya donanım platformunu desteklemiyorsa, özel bir çözüm oluşturmak haklıdır. Ancak bundan önce, görevin gerçekten benzersiz olduğundan ve sadece kötü araştırılmadığından emin olun.
Lisans kısıtlamaları başka bir meşru nedendir. Bazı açık kaynak lisansları (GPL, AGPL) bir şirketin iş modeliyle uyumsuz olabilir. Bu gibi durumlarda, daha izin verici bir lisans altında kendi uygulamanızı geliştirmek haklıdır.
Pratik bir kural vardır: kendi uygulamanızı yazmadan önce, üç farklı hazır çözüm bulmaya ve test etmeye çalışın. Hiçbiri uymazsa, kendinizinkini oluşturun, ancak mevcut seçeneklerin neden reddedildiğini belgeleyin. Bu, bilinçsizce tekerleği yeniden icat etmekten korur.
İlk adım, herhangi bir standart göreve başlamadan önce hazır çözümler arama alışkanlığını oluşturmaktır. Paket yöneticilerinde, GitHub'da, Stack Overflow'da arama yapın. Araştırmaya harcanan zaman, özel kod yazmaktan kaçınarak defalarca geri döner.
İkinci adım, bisikletleri belirlemeye odaklanmış kod incelemesi uygulamaktır. İncelemede şu soruyu sorun: “Bu görev için neden hazır bir kütüphane kullanmıyoruz?” Cevap nesnel nedenler içermiyorsa — bu bir bisiklettir. Büyük şirketlerde (Google, Meta), kod incelemesi, tekerleği yeniden icat edip etmediğinizi kontrol etmek için zorunlu bir madde içerir.
Üçüncü adım, dahili bir bilgi kaydı oluşturmaktır. Projede hangi kütüphanelerin ve araçların kullanıldığını ve hangi görevleri çözdüklerini belgeleyin. Yeni geliştiriciler, bilgisizlikten bisiklet yaratmamak için bu bilgilere erişebilmelidir. Her seçimin gerekçesiyle birlikte Mimari Karar Kayıtları (ADR) listesi tutun.
NIH sendromu (Not Invented Here), harici çözümlerin kullanımına karşı örgütsel bir önyargıdır. NIH sendromlu şirketler, kendi geliştirmelerinden üstün olsalar bile açık kaynak kütüphanelerini reddederek her şeyi dahili olarak geliştirmeyi tercih eder. Bu sendrom, bisikletin kurumsal versiyonudur.
Klasik bir örnek, 1990'ların sonunda Netscape'tir. Şirket, mevcut kod tabanını geliştirmek yerine tarayıcıyı sıfırdan yeniden yazmak için yıllar harcadı. Sonuç — pazar payı kaybı ve AOL tarafından satın alınma. Buna karşılık, Android Linux çekirdeği üzerine inşa edildi ve binlerce açık kaynak bileşeni kullanıyor — bu, ürünün rekor sürede pazara sunulmasını sağladı.
Harvard Business Review (2023) araştırması, düşük NIH sendromu seviyesine sahip şirketlerin ürünlerini pazara %40 daha hızlı sürdüğünü ve geliştirmeye %30 daha az harcadığını gösterdi. Kod yeniden kullanım kültürü, modern geliştirmede rekabet avantajıdır.
// bisiklet — özel sıralama uygulaması
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
// yerleşik sıralama — standart çözüm
arr.sort((a, b) => a - b);
Sıkça Sorulan Sorular
Özel bir çözüm, hazır bir kütüphanenin nesnel nedenlerle (lisans, performans, uyumluluk) uymadığında oluşturulur. Bisiklet, nesnel nedenler olmadan mevcut bir çözümün kopyasıdır. Ana kriter: hazır bir kütüphaneyi reddetmeyi üç somut argümanla gerekçelendirebilir misiniz? Değilse — bu bir bisiklettir.
En iyi argüman sayılardır: özel kodun bakım maliyetini (test, dokümantasyon, hata düzeltme saatleri) hesaplayın ve hazır bir kütüphane kullanımıyla karşılaştırın. Genellikle geliştirici kütüphanenin varlığını bilmez. Alternatifi canlı olarak gösterin: bir kütüphaneyi içe aktarmak ve bir metodu çağırmak ile yüzlerce satır özel kod yazmak arasındaki farkı gösterin.
Son derece nadir. Üretimde güvenilirlik, güvenlik ve bakım yapılabilirlik önemlidir — bunlar yalnızca yıllarca süren topluluk testleriyle elde edilen niteliklerdir. Bisikletiniz şimdi çalışsa bile, binlerce kullanım durumu, uç durum ve saldırıya karşı test edilmemiştir. İstisna, görevin gerçekten hazır bir çözümünün olmamasıdır.
Hayır. Bisiklet, kötü bir kütüphaneye tek alternatif değildir. Diğer kütüphaneleri arayın, GitHub yıldızlarını, güncelleme sıklığını, açık sorun sayısını kontrol edin. Tüm kütüphaneler düşük kaliteliyse — ancak o zaman kendi uygulamanızı yazmayı düşünün. Ancak bir değerlendirmeyle başlayın: belki de yanlış kütüphaneyi buldunuz.
Dilin ekosistemini çalışın: standart kütüphane, popüler paketler, frameworkler. Açık kaynak projelerin kodunu okuyun — deneyimli geliştiricilerin standart görevleri nasıl çözdüğünü göreceksiniz. Her görevden önce kendinize sorun: “Bu diğer projelerde nasıl çözülüyor?” Daha deneyimli meslektaşlar tarafından yapılan kod incelemesi, kendi bisikletlerinizi tespit etmenin en iyi yoludur.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun