Yazılım Nedir, Nasıl Çalışır?

Bilgisayarın içinde tam olarak ne oluyor? Yazılımın ne olduğunu, komutların nasıl çalıştığını ve bir programın bilgisayarda hangi yolu izlediğini adım adım anlatıyoruz.

Yazı

Günde saatlerce yazılım kullanıyoruz ama çoğumuz bilgisayarın içinde tam olarak ne olduğunu hiç düşünmüyoruz. Bir simgeye tıklıyoruz, ekranda bir pencere açılıyor, yazdığımız şey kaydediliyor. Bu zincirin arasında ne var? Yazılım aslında gizemli bir şey değildir; sırayla uygulanan talimatlardan ibarettir. Zorluğu, tek tek talimatların karmaşıklığında değil, milyonlarca talimatın birbirine bağlanmasındadır. Bu yazıda yazılımın ne olduğunu, donanımla ilişkisini ve bir programın çalışırken izlediği yolu, hiç kod yazmadan, günlük hayattan örneklerle anlatacağız. Yazılım nedir? Donanımla farkı Yazılım, bir bilgisayara ne yapması gerektiğini anlatan talimatlar bütünüdür. Donanım ise bu talimatları uygulayan fiziksel parçalardır: işlemci, bellek, disk, ekran. Aradaki ilişkiyi anlamak için mutfağı düşünün. Donanım tencereler, ocak ve mutfak tezgâhıdır; yazılım ise tariftir. Aynı mutfakta bin farklı yemek yapılabilir, çünkü tarif değişince sonuç da değişir. Tencereyi değiştirmeden yeni bir yemek pişirebilirsiniz ama tarif olmadan hiçbir şey pişiremezsiniz. Bilgisayar da böyledir: aynı makine hem bir metin editörü hem bir oyun hem de bir otomasyon botu çalıştırır, çünkü hepsi farklı tariflerdir. Buradaki en önemli ayrım, yazılımın dokunulabilir bir şey olmamasıdır. Yazılımı bir dosyada saklarsınız, kopyalarsınız, silersiniz; hiçbir fiziksel parçası yoktur. Bu yüzden yazılım eskime, aşınma ya da yıpranma yaşamaz. Bir programın “bozulması” aslında donanımın ya da çevresinin değişmesi yüzündendir: işletim sistemi güncellenmiştir, bağlandığı site tasarımını değiştirmiştir, dosya biçimi farklılaşmıştır. Program aynı programdır ama etrafındaki dünya kaymıştır. Yazılım bakımının neden hiç bitmeyen bir iş olduğunu anlamak için bu noktayı kavramak yeterlidir. Özellik Donanım Yazılım Fiziksel mi? Evet, elle tutulur Hayır, dosyalarda durur Kopyalanabilir mi? Hayır, yeniden üretilir Evet, sınırsız kopyalanır Nasıl bozulur? Aşınma, arıza, darbe Çevre değişince uyumsuz kalır Değiştirme maliyeti Genelde yüksek Genelde düşük ama emek ister Örnek İşlemci, disk, klavye İşletim sistemi, tarayıcı, bot Kod, program ve uygulama aynı şey mi? Bu üç kelime günlük konuşmada birbirinin yerine kullanılıyor ama aralarında pratik farklar var. Kod, insanın yazdığı metindir; okunabilir, düzenlenebilir, yorum satırları içerir. Program, bu kodun bilgisayarın anlayacağı hale getirilmiş, çalıştırılabilir halidir. Uygulama ise programın kullanıcıya sunulan, arayüzü ve kurulumu olan paketidir. Bir bot düşünün: geliştiricinin yazdığı satırlar koddur, bilgisayarınızda çalışan dosya programdır, ayarları yaptığınız pencere ise uygulamadır. Üçü de aynı şeyin farklı katmanlarıdır ve son kullanıcı genellikle yalnızca en üstteki katmanı görür. Kaynak kod neden önemli? Kaynak kod, bir yazılımın tarifidir. Elinizde yalnızca çalıştırılabilir dosya varsa programı kullanabilirsiniz ama davranışını değiştiremezsiniz. Kaynak koda erişiminiz varsa yazılımı kendi ihtiyacınıza göre uyarlayabilir, ne yaptığını denetleyebilirsiniz. Kurumsal ortamlarda güvenlik incelemesinin kaynak kod üzerinden yapılmasının sebebi budur. Bir program çalıştırıldığında ne oluyor? Simgeye çift tıkladığınız anda görünmeyen bir zincir devreye giriyor. İşletim sistemi önce programın dosyasını diskten okuyor ve belleğe yerleştiriyor, çünkü işlemci yalnızca bellekteki talimatları okuyabilir. Ardından işlemciye “şu adresten başla” diyor. İşlemci talimatları teker teker alıyor, uyguluyor, sonucu belleğe yazıyor ve bir sonrakine geçiyor. Bu döngü saniyede milyarlarca kez tekrarlanıyor. Ekranda gördüğünüz her şey, klavyeden yazdığınız her harf, kaydettiğiniz her dosya bu döngünün bir yerinde üretiliyor. İnsan gözüne anlık görünen şey, aslında son derece küçük adımların üst üste binmesidir. Dosya diskten okunur ve belleğe yüklenir. İşletim sistemi programa bellek, dosya erişimi ve gerekiyorsa ağ izni ayırır. İşlemci talimatları sırayla okuyup uygular. Program dış dünyayla konuşur: dosya okur, ekrana çizer, internete istek gönderir. İş bitince ya da kapatıldığında ayrılan bellek geri verilir. Bu zincirdeki en kritik nokta dördüncü adımdır. Bir programın gerçekten ne yaptığını anlamak istiyorsanız, dış dünyayla nasıl konuştuğuna bakmanız gerekir: hangi dosyaları açıyor, hangi adreslere bağlanıyor, ne gönderiyor. Bir otomasyon yazılımını değerlendirirken de sorulacak asıl soru budur. “Bu program ne kadar hızlı?” sorusundan çok daha önemlisi “bu program nereye bağlanıyor ve ne gönderiyor?” sorusudur. İyi hazırlanmış yazılımlar bunu belgelerinde açıkça yazar; yazmayanlar hakkında ise soru sormak sizin hakkınızdır. Bir yazılımın hızı zamanla değişebilir, ama nereye bağlandığı çoğunlukla o yazılımın ne için tasarlandığını doğrudan ele verir. Yazılım neden hata verir? Yazılım hatalarının çoğu, geliştiricinin düşünmediği bir durumun gerçek hayatta ortaya çıkmasından kaynaklanır. Program “kullanıcı bir tarih girer” varsayımıyla yazılmıştır ama kullanıcı boş bırakmıştır. Ya da program bir internet bağlantısı bekler, bağlantı bir saniyeliğine kopmuştur. Bu tür beklenmedik durumlara “kenar durumları” denir ve bir yazılımın olgunluğu genellikle bunları ne kadar iyi karşıladığıyla ölçülür. Kod satır sayısı ya da özellik listesi değil, hata anındaki davranış belirleyicidir. Sessizce yanlış sonuç veren bir program, açıkça hata veren bir programdan çok daha zararlıdır. İyi yazılım her şeyi doğru yapan yazılım değildir; yanlış giden şeyi zamanında ve anlaşılır biçimde söyleyen yazılımdır. Beklenmedik giriş: boş alan, çok uzun metin, yanlış biçimde tarih. Ortam değişikliği: işletim sistemi güncellemesi, bağlanılan sitenin tasarım değişikliği. Kaynak sınırı: yetersiz bellek, dolu disk, kopan bağlantı. Zamanlama: iki işin aynı anda aynı dosyaya yazmaya çalışması. Varsayım hatası: geliştiricinin doğru sandığı ama gerçekte değişken olan bir kural. Kullanıcı olarak bilmeniz yeterli olanlar Yazılım kullanmak için nasıl yazıldığını bilmek gerekmez, tıpkı araba kullanmak için motor tasarlayabilmenin gerekmemesi gibi. Ama birkaç temel kavramı bilmek sizi çok daha yetkin bir kullanıcı yapar. Bir programın nereye veri yazdığını, hangi izinleri istediğini ve güncellendiğinde neyin değiştiğini takip edebiliyorsanız, karşınıza çıkan sorunların büyük kısmını kendiniz çözebilirsiniz. Bu aynı zamanda destek ekibiyle konuşurken de işinizi kolaylaştırır; “çalışmıyor” yerine “şu adımda şu mesajı veriyor” diyebilmek çözüm süresini ciddi biçimde kısaltır. Otomasyon ve bot dünyasına adım atacaksanız bu temel bilgi daha da değerli hale gelir, çünkü bir botu kurmak aslında bir yazılıma davranış tarif etmektir. Tarifi ne kadar net verirseniz sonuç o kadar öngörülebilir olur. Yazılımın sihirli değil, mekanik bir şey olduğunu kabul ettiğinizde beklentileriniz de yerli yerine oturur: hızlı, sabırlı ve tutarlı bir yardımcı beklersiniz, sizin yerinize düşünen bir ortak değil. Bu beklenti ayarı, otomasyonla ilgili yaşanan hayal kırıklıklarının büyük kısmını en baştan önler. Yazılımı anlamak onu programlayabilmek değil, ondan ne bekleyip ne beklememeniz gerektiğini bilmektir; bu da kod yazmadan öğrenilebilen bir şeydir.

Sık sorulan sorular

Yazılım ile uygulama arasındaki fark nedir?

Yazılım genel bir kavramdır ve bilgisayara ne yapacağını söyleyen her türlü talimat bütününü kapsar. Uygulama ise yazılımın belirli bir işi yapmak üzere paketlenmiş, kullanıcı arayüzü olan halidir. Yani her uygulama bir yazılımdır ama her yazılım uygulama değildir; sürücüler ve işletim sistemi bileşenleri de yazılımdır ancak uygulama sayılmazlar.

Programlama dili öğrenmeden yazılım kullanabilir miyim?

Elbette. Günlük hayatta kullandığınız hemen her yazılım, kod yazmadan kullanılmak üzere tasarlanmıştır. Programlama bilmek yalnızca kendi yazılımınızı üretmek ya da mevcut bir yazılımın davranışını değiştirmek istediğinizde gerekir. Otomasyon araçlarının çoğu bu ihtiyacı ortadan kaldırmak için arayüzden ayarlanabilir kurallar sunar. Buna karşılık temel kavramları bilmek, sorun çıktığında neyin nerede yanlış gittiğini anlamanızı belirgin biçimde kolaylaştırır.

Neden bazı programlar bilgisayarı yavaşlatıyor?

Her çalışan program bellek ve işlemci gücü tüketir. Aynı anda çok sayıda program açıksa ya da bir program gereğinden fazla kaynak kullanıyorsa sistem yavaşlar. Arka planda sürekli çalışan yazılımlar bu konuda özellikle dikkat ister; ne sıklıkla çalıştıklarını ayarlayabiliyorsanız, aralığı makul tutmak hem bilgisayarınızı hem de bağlandığı servisleri rahatlatır.

Yazılım güncellemesi yapmak neden önemli?

Güncellemeler yalnızca yeni özellik getirmez; bilinen hataları ve güvenlik açıklarını da kapatır. Ayrıca yazılımın çevresi sürekli değiştiği için, güncellenmeyen bir program zamanla uyumsuz hale gelir. Otomasyon araçlarında bu daha da belirgindir, çünkü bağlandıkları siteler ve servisler kendi taraflarında düzenli olarak değişiklik yapar.

Açık kaynak yazılım daha mı güvenli?

Otomatik olarak daha güvenli olduğunu söylemek doğru olmaz. Açık kaynak, kodun herkes tarafından incelenebilmesi demektir; bu inceleme gerçekten yapılıyorsa güven artar. Yapılmıyorsa yalnızca teorik bir avantajdır. Kapalı kaynak bir yazılımda ise güven, üreticinin şeffaflığına ve belgelendirmesine dayanır. Her iki durumda da sorulacak sorular aynıdır: hangi veriye erişiyor ve nereye gönderiyor.