Deneme

Yazılıma yeni başladığınızda bir yerden açıp okumaya çalışıyorsunuz — Medium makalesi, YouTube videosu, bir forum başlığı — ve ilk paragrafta kayboluyorsunuz. IDE, framework, API, deploy… Bir şeyleri anlıyorsunuz, ama tam olarak oturmuyor kafanızda.
Bugün yazılıma yeni başlayan birinin önüne mutlaka çıkacak 25 terimi anlatacağım. Tanımları ezberletmeyeceğim — her birini örneklerle, hafızaya kazıyacak şekilde anlatacağım. Bu videoyu izledikten sonra bir makale açtığınızda "bunu biliyorum" diyeceğiniz terimlerin sayısı ciddi anlamda artacak.
Hadi başlayalım.


Yazılıma başlıyorsunuz, ilk soru şu: kodu nereye yazacaksınız?
Not defterine de yazabilirsiniz, Word'e de. Teknik olarak engel yok. Ama kimse öyle yapmıyor — çünkü IDE var.
IDE, "Integrated Development Environment" yani Entegre Geliştirme Ortamı demek. Kısaca: kod yazdığınız, çalıştırdığınız ve hatayı ayıkladığınız programdır. En popülerleri VS Code, PyCharm ve IntelliJ IDEA.
IDE'yi açtığınızda sol tarafta dosyalarınız duruyor, altta terminal var, ortada kodunuz. Yanlış bir kelime yazdığınızda altı kırmızı çiziliyor. print yazmaya başlayınca geri kalanını tamamlıyor. Bütün bunlar IDE'nin işi.

IDE'yi kurdunuz. Şimdi içinde bir ekran daha göreceksiniz: terminal.
Terminal; bilgisayara fare kullanmadan, sadece yazarak komut verdiğiniz ekrandır. cd belgeler yazarak klasöre girersiniz, python uygulama.py yazarak programı başlatırsınız. VS Code'un altında gömülü gelir. Mac'te Terminal uygulaması, Windows'ta PowerShell veya Command Prompt olarak da karşınıza çıkar.

Yazmaya başladınız. Kod büyüdü. Bir gün bir şeyleri değiştirdiniz ve her şeyi bozdunuz.
İşte tam bu an Git'in ne olduğunu anlıyorsunuz.
Git; kodunuzdaki her değişikliği kaydeden, istediğinizde geçmişe dönmenizi sağlayan sistemdir. 3 saat uğraştıktan sonra her şeyi bozdursanız git revert yazıyorsunuz, 5 saniyede sabahki çalışan haline dönüyorsunuz.
Git ve Github genelde karıştırılan kavramlardır. Bu karışıklığın önüne geçmek için şöyle bir örnek verebiliriz. Yazdığınız projeyi bir fotoğraf olarak varsayalım. Fotoğrafınızda değişiklikler yapmak için bir fotoğraf editör uygulaması kullanırsınız — yazı ekler, filtre eklersiniz, beğenmediğinizde tekrar orijinal haline dönersiniz. İşte bu editör uygulaması Git'tir. Ardından bu fotoğrafı Instagram'da paylaştığınızı düşünelim. Burada Instagram'ı GitHub gibi düşünebilirsiniz. Yani projenizin barındırıldığı yer olarak.

Git'i öğrenince bir de "repo" kelimesini duymaya başlıyorsunuz.
Repository; bir projenin tüm dosyalarının, klasörlerinin ve değişiklik geçmişinin saklandığı yerdir. GitHub'da benim-todo-uygulamam adlı bir repo oluşturuyorsunuz — proje dosyaları, her commit, arkadaşınızla paylaşım hepsi orada duruyor. GitHub'da başkalarının repolarına bakabilir, kodlarını inceleyebilir, hatta kendi bilgisayarınıza kopyalayabilirsiniz.
yani kısaca repo Projenizin tüm hallerini ve notlarını tuttuğunuz özel bir Google Drive klasörü gibi düşünün — ama sadece yazılımcılar için tasarlanmış, çok daha güçlü bir versiyonu.

Ortam hazır. Artık kodu yazacaksınız.
İlk kural: her dilin kendine özgü yazım kuralları var. Buna syntax diyoruz.
Syntax; programlama dilinin gramer kurallarıdır. Bu kurallara uymadan yazdığınız kod çalışmaz. Python'da kodun sonuna iki nokta yazmanız şart — sondaki iki noktayı unutan kişinin kodu hata verir. JavaScript'te bazı durumlarda her satırın sonuna noktalı virgül koymak zorunludur.

Syntax'ı öğrendikten sonra ilk yazacağınız şeylerden biri değişken.
Değişken; bir değeri hafızada tutup isimle çağırabildiğiniz yapıdır. sehir = "Ankara" yazdıktan sonra kodunuzun her yerinde sehir yazarak o değere ulaşırsınız. Değişkeni bir kez güncelleyince her yer otomatik değişir. Python'da sehir = "Ankara", JavaScript'te let sehir = "Ankara" şeklinde yazılır.

Değişkeni öğrendiniz. Şimdi aynı kodu tekrar tekrar yazmaktan kurtaracak yapıyı öğrenme vakti.
Fonksiyon; belirli bir işi yapan, isimle çağrılabilen kod bloğudur. Python'da def, JavaScript'te function anahtar kelimesiyle tanımlanır.
Mesela bir e-ticaret sitesi yapıyorsunuz. Kargo ücretini hem ürün sayfasında hem sepette hem de ödeme ekranında hesaplamanız gerekiyor. kargo_ucreti_hesapla(kg) fonksiyonunu bir kez yazıyorsunuz — ağırlığı veriyorsunuz, ücreti hesaplayıp size geri döndürüyor. Aynı kodu 3 yere yazmak yerine 3 yerden sadece bu fonksiyonu çağırıyorsunuz. İleride kargo fiyatları değişirse tek bir yeri güncelliyorsunuz, her yer otomatik düzeliyor.
bir çamaşır makinesinin "Pamuklu 60°" programı gibi her seferinde sıcaklığı, süreyi, deviri tek tek ayarlamıyorsunuz. Bir kez ayarlanmış, her seferinde çağırıyorsunuz.

Fonksiyonu yazmadan önce ne yapacağınızı planlamalısınız. İşte bu plana algoritma diyoruz.
Algoritma; bir problemi çözmek için takip edilen sıralı mantık adımlarıdır. Kod yazmadan önce kağıtta bile tasarlanabilir.
Örneğin bir alışveriş uygulaması yapıyorsunuz ve kullanıcıya en ucuz ürünü göstermek istiyorsunuz. Algoritmayı şöyle kuruyorsunuz: listedeki ilk ürünün fiyatını "en ucuz" olarak işaretleyin. Sonraki her ürünü bununla karşılaştırın. Daha ucuz buldursanız onu "en ucuz" yapın. Liste bitince elinizdeki "en ucuz" ürünü ekranda gösterin.
montaj kılavuzunda önce tabanı koy, sonra yan panelleri tak, sonra vidaları sık. Sırayı değiştirirseniz iş bozuluyor. Algoritma da tam böyle çalışıyor.

Algoritmayı kodlarken çok sık ihtiyaç duyacağınız yapı: döngü.
Döngü; aynı işlemi birden fazla kez otomatik yaptıran yapıdır. 50 öğrencinin notunu ekrana yazdırmak için 50 kez print() yazmak yerine bir for döngüsü yazıyorsunuz — 2 satır kod, 50 kez çalışıyor. Python'da for, JavaScript'te for ve while döngüleri en yaygın kullanılanlardır.

Son temel yapı: koşul.
Koşul; belirli bir duruma göre farklı işlemler yaptıran yapıdır. Bütün dillerde hemen hemen aynı mantıkla çalışır.
Bir e-ticaret sitesi düşünün. Ürün sayfasına giriyorsunuz — stokta varsa "Sepete Ekle" butonu çıkıyor, yoksa "Tükendi" yazıyor. Kullanıcı giriş yapmışsa "Hoş geldin Ahmet" diyor, yapmamışsa "Giriş Yap" butonu gösteriyor. Bunların hepsi kodda birer koşul — if şu durum varsa bunu yap, else yoksa şunu yap.
metroya girişte turnikelerde kartınız varsa geçin, yoksa durun diyor. Basit ama her yerde karşınıza çıkıyor.

Şu ana kadar her şeyi kendiniz yazdınız. Ama yazılımın en güzel yanlarından biri şu: her şeyi kendiniz yazmak zorunda değilsiniz.
Kütüphane; başkalarının yazdığı, sizin projenize dahil edip kullandığınız hazır kod koleksiyonudur.
Mesela Python'da bir veri analizi projesi yapıyorsunuz. Binlerce sayıyı toplamak, ortalama almak, grafik çizmek için her şeyi sıfırdan yazmak yerine pandas kütüphanesini projeye ekliyorsunuz — tek satırla 10.000 sayının ortalamasını alıyorsunuz. Grafik için matplotlib, internet isteği göndermek için requests, tarih/saat işlemleri için datetime kullanıyorsunuz. Her biri ayrı bir kütüphane, her biri belirli bir işi hazır çözüyor.
marketten hazır sos alırsınız böylece domatesi, sarımsağı ayrı ayrı doğrayıp pişirmek yerine açıp kullanıyorsunuz. Sonuç aynı, siz enerjinizi asıl işinize harcıyorsunuz.

Kütüphane tek bir işi yapar. Peki ya tüm uygulamanın iskeletini kuracak bir yapı lazımsa?
Framework; uygulamanızı belirli kurallar çerçevesinde inşa etmeniz için iskelet sunan sistemdir. Kütüphaneden farkı şu: kütüphaneyi siz çağırırsınız, framework sizi çağırır — kurallarını dayatır. Projenize bir Tarih Formatlama Kütüphanesi entegre ederken istediğiniz yere ve istediğiniz şekilde eklersiniz. Ancak Framework böyle değildir. Kodunuzu önceden belirlenmiş şablonlara yerleştirisiniz. Yani Anahtarlar sizin değil Frameworkün elindedir.
Örneğin bir web sitesi yapıyorsunuz. Frontend için React kullanıyorsunuz — sayfanızı nasıl bölümlere ayıracağınızı, verinin nasıl akacağını React'ın kuralları belirliyor. Backend için Django kullanıyorsunuz — URL yapısını, veritabanı bağlantısını, kullanıcı girişini Django zaten çözmüş. Siz iş mantığını yazıyorsunuz. Framework olmasaydı bunların hepsini sıfırdan kurmanız gerekirdi.
müteahhitten aldığınız bir evi düşünün duvarlar ve kolonlar hazır, siz iç tasarımı yapıyorsunuz. Ama duvarları yıkıp farklı yere koyamazsınız, framework'ün kuralları çerçevesinde çalışıyorsunuz.

Kütüphane ve framework'ü nasıl indireceksiniz peki?
Paket yöneticisi; kütüphaneleri tek komutla indirip projeye eklemenizi sağlayan araçtır. JavaScript projenizde npm install react yazıyorsunuz — React ve onun ihtiyaç duyduğu tüm bağımlılıklar otomatik indiriliyor. Python'da pip install pandas yazıyorsunuz, veri analizi kütüphanesi kuruluyor. Proje başka bir bilgisayara taşındığında npm install yazmanız yeterli — her şey tek komutla kuruluyor.
telefonunuza uygulama indirmek için App Store'a girip "Yükle"ye basıyorsunuz, uygulamanın ihtiyaç duyduğu her şeyle birlikte geliyor. Tek tek aramanıza, ayrı ayrı kurmanıza gerek yok.

Kütüphaneyi kurdunuz. Nasıl kullanacaksınız?
Dokümantasyon; bir kütüphane ya da dilin nasıl kullanılacağını açıklayan resmi belgedir. Her iyi kütüphanenin mutlaka bir docs sitesi vardır.

Şimdiye kadar hep tek başınıza bir uygulama yazdınız. Gerçek dünyada uygulamalar birbirleriyle konuşur.
API; iki farklı yazılımın birbiriyle konuşmasını sağlayan standarttır.
Mesela bir seyahat uygulaması yapıyorsunuz. Uçuş fiyatlarını göstermek için her havayoluyla tek tek anlaşmanız gerekmez — Amadeus'un Flight API'ını kullanıyorsunuz, tek noktadan tüm fiyatlara ulaşıyorsunuz. Harita için Google Maps API'ı, ödeme için Stripe API'ı, hava durumu için OpenWeather API'ını entegre ediyorsunuz. Her birinin arka planında ne olduğunu bilmenize gerek yok — sadece "şunu ver" diyorsunuz, cevabı alıyorsunuz.
restoranda garson var mutfağa kendiniz girmiyorsunuz, ne istediğinizi söylüyorsunuz, garson iletip tabağı getiriyor. Yemeğin nasıl pişirildiğini bilmenize gerek yok.

Büyük uygulamalara bakınca iki terim sürekli karşınıza çıkacak: frontend ve backend.
Frontend ekranda gördükleriniz, backend ise arka planda dönen her şeydir.
Instagram'ı düşünün. Fotoğrafa çift tıklayınca kalp animasyonu çıkıyor — bu frontend işi, React Native ile yazılmış. O beğeniyi veritabanına kaydeden, size bildirim gönderen, beğeni sayısını güncelleyen kısım backend — Python veya Java ile yazılmış sunucularda çalışıyor. "Ben frontend'ciyim" diyen biri HTML, CSS, JavaScript, React ile çalışıyordur. "Backend'ciyim" diyen biri Python, Java, Node.js ve veritabanlarıyla uğraşıyordur. İkisini birden yapana "full-stack" deniyor.
restoranda müşterinin gördüğü salon ve garsonlar frontend, hiç görmediği mutfak ve aşçılar backend.

Backend konuşulunca hemen arkasından şu soru geliyor: veriler nerede duruyor?
Veritabanı; bilgilerin düzenli biçimde saklandığı ve sorgulandığı sistemdir. "İstanbul iline yapılacak teslimatları getir" diye SQL sorgusu yazıyorsunuz, milyonlarca kayıt arasından sadece İstanbul'dakileri saniyeler içinde alıyorsunuz. MySQL, PostgreSQL, MongoDB en yaygın kullanılan veritabanlarıdır.

Uygulama hazır, veritabanı hazır. Peki bunlar nerede çalışıyor?
Sunucu; kullanıcıların isteklerini alıp cevaplayan, 7/24 açık kalan bilgisayardır. Twitter'a girdiğinizde tarayıcınız "ana sayfayı ver" diye istek gönderiyor, Twitter'ın sunucusu bu isteği alıp tweetleri hazırlayıp size yolluyor. AWS, Google Cloud, Heroku gibi platformlar bu sunucuları size kiralamayı sağlar.

Yazılım dünyasında sık duyacağınız bir kavram daha var: açık kaynak.
Open source; kaynak kodu herkese açık, ücretsiz incelenip kullanılabilen yazılımlardır.
VS Code'u açıyorsunuz — Microsoft'un geliştirdiği bu editörün her satırı GitHub'da herkese açık. Bir hata bulursanız issue açabilir, hatta düzeltip pull request gönderebilirsiniz. Kullandığınız Python da, React de, PostgreSQL de açık kaynak — dünyanın dört bir yanından binlerce geliştirici katkı sağlıyor. Kapalı kaynak örnekleri ise Windows ve macOS — kaynak kodunu göremez, değiştiremezsiniz.
tarifi herkese açık bir yemek varsayalım. pişirebilir, üzerine ekleyip kendi versiyonunuzu yapabilirsiniz. Kapalı kaynak ise restoranın gizli sosu — yiyebilirsiniz ama nasıl yapıldığını asla öğrenemezsiniz.

Uygulamanız hazır. Şimdi dünyaya açıyorsunuz.
Deploy; uygulamayı kendi bilgisayarınızdan çıkarıp herkesin erişebileceği sunucuya taşıma işlemidir. Vercel veya Netlify'e git push yapıyorsunuz, 30 saniye sonra uygulamanız dünyaya açık bir URL'de yayında — arkadaşınız telefonundan açabiliyor.

Deploy yaptınız. Ama bir şeyler yanlış gidiyor.
Bug; programın istemediğiniz şekilde davranmasına neden olan hatadır. Sepet toplamı hesaplanıyor ama %18 KDV eklenmesi gerekirken eklenmiyor — kullanıcı yanlış tutar ödüyor. Bu bir bug. Yazım hatası olabileceği gibi saf mantık hatası da olabilir; kod çalışıyor ama yanlış sonuç veriyor.

Bug buldunuz. Şimdi nerede olduğunu bulmanız lazım.
Debug; koddaki hatayı bulup nerede olduğunu tespit etme sürecidir. VS Code'da şüpheli satıra breakpoint koyuyorsunuz — program tam orada duruyor, o anki değişken değerlerine bakıyorsunuz: vergi oranı 0.18 değil 0 gelmiş, bulundu. console.log() veya print() yazarak değerleri ekrana bastırmak da yaygın bir debug yöntemidir.

Bazı dillerde kodu çalıştırmadan önce bir adım daha var: derleme.
Compile; sizin yazdığınız kodu bilgisayarın anlayacağı dile çevirme işlemidir. Java'da javac Uygulama.java komutunu veriyorsunuz — hata yoksa çalıştırılabilir dosya oluşuyor. Python ve JavaScript gibi dillerde bu adım otomatik arka planda gerçekleşir, siz fark etmezsiniz. C ve C++ ise her zaman açıkça derleme gerektiren dillerdir.
Türkçe yazdığınız bir metni Japonca'ya çevirmek gibi siz Türkçe yazıyorsunuz, Japon Japonca okuyor. bilgisayar sadece kendi dilini anlıyor. Derleme de bilgisayarın anlayacağı hale çeviriyor.

Hata düzeldi. Kod çalışıyor. Ama bir bakın: 80 satırlık, anlaşılmaz bir fonksiyon var ortada.
Refactoring; kodun dışarıya verdiği sonucu değiştirmeden, iç yapısını daha okunabilir ve düzenli hale getirmektir. O 80 satırlık fonksiyonu 4 küçük, isimlendirilmiş fonksiyona bölüyorsunuz. Ekrana aynı şeyi basıyor ama kodu artık siz de ekibinizdeki herkes de anlıyor.

Son terim. Ve bence en güzel kavramlardan biri.
Versiyon; bir yazılımın zaman içinde geçirdiği gelişim aşamalarını ifade eden numaradır. WhatsApp v24.3.12 güncellemesi geliyor — ilk sayı büyük değişiklik, ortadaki küçük eklenti, sondaki hata düzeltmesi demek. Kendi projeniz için de Git ile etiketleme yaparak v1.0.0, v1.1.0 gibi sürümler çıkarabilirsiniz.

Yazılım öğrenmek aslında bu terimlerin mantığını kavramaktan geçiyor.
Şunu fark etmenizi istiyorum: bu terimlerin hepsini bugün ezberlemek zorunda değilsiniz. Ama bir makale okurken, bir tutorial izlerken ya da bir iş ilanına bakarken "bunu biliyorum" diyebilmek için bu videoyu izlemeniz çok işe yarayacak
Eğer bu video işinize yaradıysa kanala abone olmayı unutmayın . Bir sonraki videoda görüşmek üzere.