Swift ile Başlangıç: Teknolojinin Dili Kodlama
Teknoloji dünyasında resmen konuşabilmek için kodlama bilmemiz gerekmektedir. Hadi gelin kodlamanın gerçekte ne olduğunu öğrenelim!
Merhaba sevgili TurkishKit okurları! 👋 Bu makalemizde teknolojinin kod ile arasındaki mükemmel ilişkiyi, fikirlerin kodlanması, ve geliştirici olmanın temellerini zamanda kısa bir yolculuk yaparak keşfedeceksiniz. Hazırsanız başlayalım!
Giriş
Serimizin ilk başlangıç bölümünde anlatmak istediğimiz temel konular; işlemcilerin temelde ne yaptığı ve biz yazılım mühendislerin bu işlemcilere neler yaptırmak için sabah/akşam uğraştığımızdır.
İlk önce işlemcinin ne olduğuyla başlayalım.
İşlemci, genellikle bellek veya başka bir veri akışı üzerinde işlemler gerçekleştiren dijital bir devre olarak tanımlanabilir. (Yukarıda görmüş olduğunuz 1971 yılında Intel’in yapmış olduğu “Intel 4004” işlemcisiyle şu an bu makaleyi okumanızı sağlayan cihazınızın içerisindeki işlemci aynı prensip üzerinden çalışmaktadır.)
İşlemciler ilk ortaya çıkışlarından itibaren dünyayı büyük ölçüde değiştirmişlerdir ve değiştirmeye hâlâ devam etmektedirler. Tabii dünyayı değiştiren asıl şeyin işlemci değil, esasen transistörler olduğunu söylemek daha doğru olacaktır. Ayrıca, transistörün ne olduğunu tam olarak anlamadan işlemciyi anlayamazsınız! Bu yüzden, ilk önce transistörün ne olduğunu bir öğrenelim.
Transistör Nedir?
Basite indirmek gerekirse transistör denilen şey bir düğmedir. Bu düğmenin dünya üzerindeki diğer bütün düğmelerden farklıdır, çünkü diğer düğmeler insan eliyle kontrol edilirken, transistörler bir insan eliyle değil bir elektrik sinyaliyle kontrol edilmektedir.
Bir transistörü aydınlatma düğmesine benzetebilirsiniz. Bu düğmeyi açtığınızda üstünden elektrik akımı geçebiliyor ve kapattığınızda da geçmiyor doğal olarak. Biz bunu dijitalde 1 -açık- ve 0 -kapalı- ile temsil ediyoruz.
Analog dünyada tabii ki her şey 1 ve 0 sayıları kadar kesin değil ama analog dünyadaki değerleri yuvarlayarak 1 ve 0 sayılarını kullanarak analogda olan olayları dijitalde temsil edebiliyoruz. Üstüne, bu yuvarlatma işlemi sayesinde işlem yapma zorluğu da oldukça azalmaktadır.
Peki bu 1 ve 0 rakamlarını kullanarak nasıl hesaplama yapmam mümkün hale geliyor?
Buna bir örnek ile cevap vereyim: Örneğin ben bir kulübenin içerisindeyim ve siz de kulübenin dışından kulübenin üstündeki büyük lambaya bakıyorsunuz. Ben, elimdeki kumanda ile bu lambayı açıp kapayabiliyorum. Benim lambanın ışığını bir defa açıp kapamam “A” harfine denk gelsin. İki defa açıp kapamam ise “B” harfine denk gelsin… Bu şekilde belli bir kurala göre ben lambanın ışığını açıp kapadığımda size istediğim sözcükleri ve cümleleri iletebiliyorum. Eğer siz de benim bu açıp kapama kurallarımı biliyorsanız, benim size ilettiğim bilgiyi anlayabilirsiniz! Oldukça havalı öyle değil mi? 😃
Bu verdiğim örnekteki ışığı kapatıp açarak bilgi iletmeye “encode” -şifrelemek- etmek, o oluşan bilgiyi çözümleyip anlamaya ise ise “decode” etmek -deşifre etmek- deriz.
Peki bu düğmeler -transistörler- ile işlemciler arasında nasıl bir bağlantı var? Şimdi bu soruya cevap vermek için bir transistör hayal edelim.
Aşağıda gözüken şema bir transistörü sembolize ediyor. Transistörün tabii ki bir girişi var. (Bu girişten elektrik geliyor.) Bu girişin devamı olan da bir çıkışı var.
Eğer bu transistörler bildiğimiz düğmeler gibi olsaydı kendisine tıklayarak onu kontrol edebilirdik fakat transistörlerde “Kontrol” adını verdiğimiz üçüncü bir sinyal daha vardır. Biz bu kontrol sinyaline elektrik verirsek transistör üzerindeki elektrik akışına izin verir vermezsek de izin vermiyor.
Günün sonunda, bu transistör sonuç olarak elektrik geçmediği durumlarda 0, geçtiği durumlarda ise 1 değerini veriyor.
Şimdi bu transistörün yanına 7 tane daha transistör ekleyelim.
Bilginin en küçük birimi “Bit”tir. (Dünya üzerindeki en küçük veri -data- birimidir.) Bir bit 1 ya da 0 değerini alabilir.
Az önce yaptığımız gibi alt alta 8 tane bit eklersek, alfabedeki bir harfin bilgisini taşıyabiliyoruz. 8 tane bit’e de 1 byte deriz. Sonrasında ise bu byte’lar birleşerek kilobyte’ları, megabyte’ları, gigabyte’ları oluşturuyor.
Bir harf için 8 transistöre ihtiyacınız olduğuna göre “Benjamin” sözcüğünü yazabilmeniz için toplam 64 tane transistöre ihtiyacınız olmanız gerekmektedir. Sadece bir sözcük için bile 64 transistöre ihtiyaç duymamız sizi şaşırtmış olabilir belki ama günümüzde herhangi bir teknolojik cihazın işlemcisinin içerisine mikroskopla bakacak olursanız, o işlemcinin içerisinde en az milyarlarca transistör olduğunu görebilirsiniz.
Yani işlemci denilen şey aslında milyarlarca transistörden oluşan bir yapıdır. Bu yapı, içerisindeki milyarlarca transistördeki farklı farklı açılıp kapanma kombinasyonlarını kullanarak ortaya kelimeler, cümleler, videolar, müzikler ve hatta Xcode projeleri oluşturabiliyor.
Yazılım mühendislerinin aslında bütün amacı, bu 1'leri ve 0'ları A noktasından B noktasına aktarabilmektir!
Bilgi Aktarımı
Bu bilgi aktarımının birçok yöntemi vardır ki bu bilgi aktarımı günümüzde en çok internet aracılığıyla yapılıyor olsa gerek. (Örnek, bu makale. 😀)
Makalenin daha önceki bölümlerinde “Encode” ve “Decode”dan bahsetmiştik. Kısaca “Encode”, bir şekilde verinin (1'lere ve 0'lara) paketlenmesidir. Bu paketleme işlemine örnek olarak iki bilgisayar arasındaki veri alışverişine bakalım. Örneğin, A bilgisayarı, kendisindeki bilgileri paketleme işlemini gerçekleştirdikten sonra B bilgisayarına bilgileri aktarıyor olsun.
Peki neden paketleme işlemi yapıyor? Çünkü göndereceği bilgiyi 1 ve 0 formatına çevirmesi gerekiyor. Sonuçta B bilgisayarı A bilgisayarıyla aynı işletim sistemine sahip olmayabilir ve bu yüzden de gönderilen veri B bilgisayarı tarafından çalıştırılamayabilir. İşte bu tarz sorunların olmaması için paketlenme işleminin yapılması gerekmektedir. Sonuçta A ve B bilgisayarlarının en büyük ortak özelliklerinden biri ikisinin de birer makine olmasıdır ve sayede ikisi de 0 ve 1'lerden oluşmuş bilgileri işleyip okuyabilirler.
“Encode” işleminden sonra A bilgisayarı paketlenmiş bilgilerini B bilgisayarına aktarmak istiyor. Bunu yapabilmesinin birkaç farklı yolu vardır. Bunlardan en bilineni iki bilgisayarı bir -bakır- kablo ile bağlamaktır. Bu sayede A bilgisayarı düğmesini açtığı zaman bakır kablodan elektrik geçiyor ve kapattığı zamanda geçmiyor. İşin en büyüleyici taraflarından biri, bu iki bilgisayar arasındaki bilgi aktarım hızının milyarlarca veri transferini sadece birkaç saniye içerisinde yapabilecek kadar büyük olmasıdır. (Kulübe örneğine dönecek olursak; birkaç saniye içerisinde benim milyarlarca kez ışığı farklı kombinasyonlarda açıp kapadığımı hayal edin!)
Bilgi B bilgisayarına geldikten sonra da yapılacak son şey bu bilginin “Decode” edilmesidir. “Decode” işleminde B bilgisayarına gelen veriler 1 ve 0 bilgilerinden çözümlenerek yeni bir dosya oluşturulur. Bu dosya bir PDF dökümanı, bir video ya da bir videonun bir karesi bile olabilir.
İşin en iyi tarafı, bizler teknolojik cihazlarımızda yapması kolay olarak gördüğümüz işlerin (YouTube videosu izlemek vs.) bile aslında saniyede yapılan milyarlarca işlemin bir sonucu olmasıdır. 🤩
Bir makalemizin daha sonuna geldik. Bu makalemizde teknolojinin kod ile olan ilişikisini, yazılım geliştiricilerinin/mühendislerinin temelde ne yapmak için çalıştığını öğrendik. Umarım yazımızı okurken keyif almışsınızdır. 😊
Swift Öğrenin. Uygulama Geliştirin. Sınırların Ötesine Geçin.
Hem kod yazmaya yeni başlayanların hem de profesyonellerin rahatlıkla takip edebilecekleri 40 saatlik videolu eğitim ile Swift programlama dilini derinlemesine keşfedin. Eğitim boyunca karşılaşacağınız problemleri birebir online görüşmelerde çözün.