Programlamada Modül Kullanımı Ne Derece Kabul Edilebilir?

Merhaba. Uzun zamandır aklıma takılan bir soruyu dile getirmek istiyorum. Modül kullanımı programlamada işimizi oldukça kolaylaştırıyor ama genel olarak yazılım dünyasında diğer yazılımcılar (veya profesyoneller) tarafından ne derecede kabul gördüğünü merak ediyorum. Mesela Python’da ekran görüntüsünü almak için modülü içe aktarıp bir kaç satır kod yazıyoruz ve herhangi bir tuşla istediğimiz zaman ekran görüntüsü alabiliyoruz. Aynı şekilde speech recognize modülü ile 10 15 satırlık kodla bilgisayarla sesli iletişim kurabiliyoruz. Bu tür şeyler programlama dünyasında kabul gören şeyler mi?

Modül dediğimiz şey basitçe bir kütüphane demek. Yani sizin de ifade ettiğiniz gibi önceden tanımlanmış fonksiyonların tekrar yazılmasına gerek kalmadan kullanılması oluyor. Python’daki ana mantık zaten bu. Kodları tekrar tekrar yazmaktansa aynı kodları daha sonraları kullanabilme fikri üzerine kurulu bir anlamda.

Ayrıca sadece Python’da değil C türevi dillerde de kütüphaneler kullanılıyor bildiğim kadarıyla. Şu .dll dosyaları bu iş için kullanılıyor. Eminim diğer dillerde de benzer yapıda kullanım mevcuttur.

Kütüphane üzerinde (elbette kütüphanenin lisansı buna uygunsa) değişiklik yaparak kütüphane’yi kendi istekleriniz veya ihtiyaçlarınız doğrultusunda değiştirmek mümkün. Bence sizin sorunuzun asıl cevabı bu. Yazılımcılar da diğer herkes gibi az emek = çok sonuç mantığıyla hareket ettikleri için kütüphanelerden faydalanırlar. Sonuçta kim uygulamasındaki bir özelliği hazır bir kütüphaneden almaktansa yeniden uğraşarak yazmak ister?

Tam da burada bir sorun ortaya çıkıyor işte. Eğer kütüphanenin lisansı size kodlar üzerinde değişiklik yapma hakkı veriyorsa (lisans türleri için bkz.) sorun yok. İhtiyaç doğrultusunda değişikliğinizi yapar, kodlarınızda kullanmaya devam edersiniz. Ya lisans buna izin vermiyorsa? İşte o zaman kodları yeniden yazmak durumundasınız.

Sonuç olarak diğer yazılımcılar da bizler gibi kütüphaneleri kullanırlar. Eğer:

  • Yazılımınıza hitap eden uygun kütüphane yoksa,
  • Var olan kütüphanelerin lisansları uygun değilse,
  • Bir kütüphane kullanmaktansa kodların bütünlüğü için kodları kendi kodlarınızın içerisinde istiyorsanız (bu, dediğim gibi Python’un mantığına ters),
  • Hazır bir kütüphane kullanmaktansa yeniden yazmak daha kolay veya güvenliyse (kütüphanenin kodları iyi yazılmamış, bakımsız ve/veya güvenlik problemlerine de sahip olabilir) hazır bir kütüphane yerine kendinizinkini yazmanız gerekecektir.

Son olarak Libraries.io sitesindeki pypi kısmında pypi’deki hazır kütüphanelerin bağımlılıklarını görebilirsiniz. Örneğin https://libraries.io/pypi/requests adresinde, requests kütüphanesinin 111 bin bağımlı kütüphanesi olduğunu görebilirsiniz. Yani 111 bin kere aynı şeyler yazılmak yerine yazılımcılar bu kütüphaneden faydalanarak kâr etmişler. Bu şekilde büyük kütüphanelerin, diğer kütüphaneler içerisinde kullanıldıklarını da söyleyebiliriz.

Umarım yardımcı olabilmişimdir. Bilgim dahilinde olanları yazdım. Hatalarım varsa daha deneyimli olan arkadaşlar lütfen düzeltsinler. İyi günler :blush:

Ekleme: Şu adreste modül kullanmanın artıları ve eksileri gayet güzel cevaplamış.

6 Beğeni

Merhabalar,
Bende bilgim kapsamında bir şeyler eklemek isterim. Şuan bir şirkette staj yapıyorum. Genellikle geliştiriciler ikiye ayrılmış durumda. Birincisi, ürünü geliştirenler(ve bu yolda çıkan sorunları çözenler) ve ikincisi teknoloji geliştirenler. Bazı modüller gerçekten hız isteyen programlar için çok büyük boyuttalar. Buda programları yavaşlatıyor. Eğer açık kaynak kodlu ve lisansı uygunsa teknoloji geliştirenler bu modüller üzerinde projeye göre ekleme ve çıkarma yapıyor. Mesala “ORNEK Modülünde” 1 class hiç kullanılmıcak. Teknolojiyi geliştirenler bu modülleri tekrardan yapılandırarak ürün geliştirenlere sunuyor. Ama bazende belirttiğiniz gibi Amerikayı tekrardan keşfetmeye gerek yok denip doğrudan kullanılıyor.