Modern Yazılım Geliştirmenin Temel Taşları: HTML, CSS, JavaScript, C# ve Python Derinlemesine İnceleme

kadir gungorkadir gungor
21 min read

Günümüz dijital dünyası, karmaşık ve etkileşimli yazılımlar üzerine kuruludur. Web sitelerinden mobil uygulamalara, veri analizinden yapay zekaya kadar her alanda yazılım, hayatımızın ayrılmaz bir parçası haline gelmiştir. Bu devasa ekosistemin temelinde ise çeşitli programlama dilleri, işaretleme dilleri ve stil şablonları yatmaktadır. Bu makalede, modern yazılım geliştirmenin en önemli yapı taşlarından beş tanesini derinlemesine inceleyeceğiz: HTML, CSS, JavaScript, C# ve Python. Bu teknolojilerin her birinin ne olduğunu, temel kavramlarını, kullanım alanlarını ve birbirleriyle nasıl etkileşim kurduklarını teknik detaylarıyla ele alacağız.

1. HTML (HyperText Markup Language): Web'in İskeleti

HTML, web sayfalarının yapısal temelini oluşturan standart işaretleme dilidir. Bir programlama dili olmaktan ziyade, bir işaretleme dilidir; yani içeriği (metinler, görseller, bağlantılar vb.) tanımlamak ve yapılandırmak için etiketler (tags) kullanır. Tarayıcılar (Chrome, Firefox, Safari vb.) HTML kodunu okuyarak kullanıcıya görsel bir sayfa sunar.

  • Temel Kavramlar ve Sözdizimi:

    • Elementler (Elements): HTML belgesinin yapı taşlarıdır. Genellikle bir başlangıç etiketi (<tag>), içerik ve bir bitiş etiketinden (</tag>) oluşur. Örneğin, <p>Bu bir paragraftır.</p>. Bazı elementler "boş" (empty) veya "kendiliğinden kapanan" (self-closing) olarak adlandırılır ve içerik veya bitiş etiketi taşımazlar, örn: <img src="resim.jpg" alt="Açıklama"> veya <br>.

    • Etiketler (Tags): Elementleri tanımlayan anahtar kelimelerdir (<p>, <h1>, <div>, <a> vb.).

    • Öznitelikler (Attributes): Başlangıç etiketleri içinde yer alır ve elementlere ek bilgi veya davranış kazandırır. isim="değer" formatındadırlar. Örneğin, <a> (anchor/bağlantı) elementindeki href özniteliği bağlantının hedefini belirtir: <a href="https://www.example.com">Örnek Site</a>. <img> elementindeki src (kaynak) ve alt (alternatif metin) öznitelikleri zorunludur.

    • Belge Yapısı: Tipik bir HTML belgesi <!DOCTYPE html> bildirimi ile başlar. Ardından kök element olan <html> gelir. <html> içinde iki ana bölüm bulunur:

      • <head>: Sayfa hakkında meta bilgileri (başlık, karakter seti, stil dosyası bağlantıları, script dosyası bağlantıları vb.) içerir. Kullanıcıya doğrudan görünmez. Önemli <head> elementleri: <title>, <meta>, <link>, <style>, <script>.

      • <body>: Sayfanın kullanıcı tarafından görülebilen tüm içeriğini (metinler, başlıklar, resimler, listeler, tablolar, formlar vb.) barındırır.

    • Yaygın Elementler:

      • <h1> - <h6>: Başlık seviyeleri.

      • <p>: Paragraf.

      • <a>: Bağlantı (Anchor).

      • <img>: Resim.

      • <ul>, <ol>, <li>: Sırasız liste, sıralı liste ve liste öğesi.

      • <table>, <tr>, <th>, <td>: Tablo, tablo satırı, tablo başlığı hücresi, tablo veri hücresi.

      • <div>: Bölüm (Genellikle stil veya script ile manipülasyon için kullanılan genel bir konteyner).

      • <span>: Satır içi bölüm (Metin içinde küçük kısımları işaretlemek için).

      • <form>, <input>, <textarea>, <button>, <select>, <option>: Form elemanları.

  • HTML5 ve Semantik Elementler:
    HTML'in en son ana sürümü olan HTML5, multimedya desteği (<audio>, <video>), gelişmiş form kontrolleri, çevrimdışı depolama API'leri ve en önemlisi semantik elementleri tanıttı. Semantik elementler, içeriğin anlamını hem tarayıcılara hem de geliştiricilere daha iyi anlatır. Bu, erişilebilirlik (accessibility) ve arama motoru optimizasyonu (SEO) için kritiktir.

    • <header>: Sayfanın veya bir bölümün başlık içeriği (logo, navigasyon vb.).

    • <nav>: Ana navigasyon bağlantıları bloğu.

    • <main>: Belgenin ana içeriği. Sayfada yalnızca bir tane olmalıdır.

    • <article>: Bağımsız, kendi kendine yeten içerik birimi (blog yazısı, forum gönderisi, haber makalesi).

    • <section>: Belgenin tematik olarak gruplandırılmış bir bölümü. Genellikle bir başlık içerir.

    • <aside>: Ana içerikle dolaylı olarak ilgili içerik (kenar çubuğu, reklamlar, ilgili bağlantılar).

    • <footer>: Sayfanın veya bir bölümün alt bilgisi (telif hakkı, yazar bilgisi, iletişim bilgileri).

    • <figure> ve <figcaption>: Görsel, diyagram, kod örneği gibi içerikleri ve başlığını gruplamak için.

  • Doğrulama (Validation): Yazılan HTML kodunun standartlara uygun olup olmadığını kontrol etmek önemlidir. W3C Validator gibi araçlar, hataları ve uyumsuzlukları tespit ederek tarayıcılar arası tutarlılığa ve kod kalitesine katkıda bulunur.

  • Kullanım Alanları: Web sayfalarının temel yapısını oluşturmak, web uygulamalarının kullanıcı arayüzlerini tanımlamak, e-posta şablonları hazırlamak.

HTML, tek başına statik ve görsel olarak zayıf sayfalar oluşturur. Gerçek gücü, CSS ile stil ve JavaScript ile etkileşim kazandığında ortaya çıkar.

2. CSS (Cascading Style Sheets): Web'in Görünümü

CSS, HTML veya XML gibi işaretleme dilleriyle yazılmış belgelerin görünümünü ve biçimlendirmesini tanımlamak için kullanılan bir stil şablonu dilidir. HTML yapıyı sağlarken, CSS bu yapının nasıl görüneceğini (renkler, yazı tipleri, düzen, boşluklar, animasyonlar vb.) kontrol eder. "Cascading" (Basamaklı/Kademeli) kelimesi, stillerin birden fazla kaynaktan (tarayıcı varsayılanları, kullanıcı stilleri, yazar stilleri) gelebilmesi ve çakışma durumunda belirli kurallara göre önceliklendirilmesi anlamına gelir.

  • Temel Kavramlar ve Sözdizimi:

    • Kurallar (Rules): Bir CSS dosyası, bir dizi kuraldan oluşur. Her kural bir seçici (selector) ve bir bildirim bloğundan (declaration block) oluşur.

    • Seçiciler (Selectors): Hangi HTML element(ler)ine stil uygulanacağını hedefler. Çok çeşitli seçici türleri vardır:

      • Tür Seçici (Type Selector): Element adına göre seçer (örn: p, h1, div).

      • Sınıf Seçici (Class Selector): . ile başlar ve HTML elementinin class özniteliğine göre seçer (örn: .menu-item, .alert-danger). Bir element birden fazla sınıfa sahip olabilir.

      • ID Seçici (ID Selector): # ile başlar ve HTML elementinin id özniteliğine göre seçer (örn: #main-logo, #sidebar). Bir ID, bir HTML belgesinde benzersiz olmalıdır. ID seçiciler yüksek özgüllüğe sahiptir.

      • Öznitelik Seçici (Attribute Selector): Belirli bir özniteliğe veya öznitelik değerine sahip elementleri seçer (örn: [type="submit"], [href^="https://"]).

      • Sözde Sınıf Seçici (Pseudo-class Selector): Elementlerin belirli bir durumunu hedefler (örn: :hover - fare üzerine gelince, :focus - odaklanınca, :nth-child(n) - belirli sıradaki çocuk element).

      • Sözde Element Seçici (Pseudo-element Selector): Bir elementin belirli bir parçasını hedefler (örn: ::before - element içeriğinden önce, ::after - element içeriğinden sonra, ::first-line - ilk satır).

      • Birleştiriciler (Combinators): Elementler arasındaki ilişkiye göre seçer (örn: div p - div içindeki tüm p'ler (descendant), ul > li - ul'nin doğrudan altındaki li'ler (child), h2 + p - h2'den hemen sonra gelen p (adjacent sibling), h2 ~ p - h2'den sonra gelen tüm p kardeşleri (general sibling)).

    • Bildirim Bloğu (Declaration Block): {} süslü parantezler içine alınır ve bir veya daha fazla bildirim (declaration) içerir.

    • Bildirim (Declaration): Bir özellik (property) ve bir değerden (value) oluşur, aralarında iki nokta üst üste (:) bulunur ve noktalı virgül (;) ile sonlanır (örn: color: blue;, font-size: 16px;).

    • Özellikler (Properties): Stilin hangi yönünün değiştirileceğini belirtir (örn: color, background-color, font-family, margin, padding, border, display, position).

    • Değerler (Values): Özelliğe atanacak belirli ayarı belirtir (örn: red, #FF0000, 1.2em, bold, block, absolute). Değerler, birimler (px, em, rem, %, vw, vh), anahtar kelimeler veya fonksiyonlar olabilir.

  • Kaskad (Cascade), Özgüllük (Specificity) ve Kalıtım (Inheritance):

    • Kaskad: Tarayıcının, bir elemente uygulanacak çakışan stil kurallarından hangisinin geçerli olacağına karar verme mekanizmasıdır. Öncelik sırası genellikle şöyledir: Yazarın !important bildirimleri > Yazar stilleri > Kullanıcı stilleri > Tarayıcı varsayılan stilleri.

    • Özgüllük: Birden fazla kural aynı elementi hedeflediğinde, hangi kuralın daha "özgül" (specific) olduğuna bakılır. Daha özgül kural kazanır. Özgüllük genellikle şu sırayla hesaplanır (yüksekten düşüğe): Inline stiller > ID seçiciler > Sınıf/Öznitelik/Sözde sınıf seçiciler > Tür/Sözde element seçiciler. Evrensel seçici (*) ve kalıtım yoluyla gelen stiller en düşük özgüllüğe sahiptir.

    • Kalıtım: Bazı CSS özellikleri (örn: color, font-family, font-size) varsayılan olarak üst elementten alt elementlere miras kalır. inherit anahtar kelimesiyle kalıtım zorlanabilir veya initial ya da unset ile sıfırlanabilir.

  • Kutu Modeli (Box Model): CSS'deki her HTML elementi dikdörtgen bir kutu olarak kabul edilir. Bu kutu dört katmandan oluşur (içten dışa):

    • İçerik (Content): Metin, resim vb. içeriğin bulunduğu alan. width ve height özellikleri bu alanı etkiler.

    • Dolgu (Padding): İçerik alanı ile kenarlık arasındaki boşluk. Şeffaftır.

    • Kenarlık (Border): Dolgu alanını çevreleyen çizgi. Stil (solid, dashed), renk ve kalınlık ayarlanabilir.

    • Dış Boşluk (Margin): Kenarlığın dışındaki boşluk. Elementi diğer elementlerden ayırır. Şeffaftır.
      box-sizing özelliği (content-box (varsayılan) veya border-box) width ve height özelliklerinin padding ve border'ı içerip içermeyeceğini belirler. border-box genellikle daha sezgisel bir düzen yönetimi sağlar.

  • Düzen (Layout): Elementlerin sayfada nasıl konumlandırılacağını kontrol eder. Modern CSS, güçlü düzen mekanizmaları sunar:

    • Normal Akış (Normal Flow): Elementlerin varsayılan olarak yerleştiği düzen (block elementler alt alta, inline elementler yan yana).

    • Display Özelliği: Elementin düzen davranışını değiştirir (block, inline, inline-block, none, flex, grid).

    • Position Özelliği: Elementin konumlandırma yöntemini belirler (static (varsayılan), relative, absolute, fixed, sticky). top, right, bottom, left özellikleri ile birlikte kullanılır.

    • Flexbox (Flexible Box Layout): Tek boyutlu (satır veya sütun) düzenler oluşturmak için tasarlanmış güçlü bir modeldir. Hizalama, sıralama ve boşluk dağıtımı için esnek kontroller sunar (display: flex, flex-direction, justify-content, align-items, flex-wrap, flex-grow, flex-shrink, flex-basis).

    • Grid Layout: İki boyutlu (satır ve sütun) karmaşık düzenler oluşturmak için tasarlanmıştır. Öğeleri hem yatay hem de dikey olarak hassas bir şekilde hizalamayı sağlar (display: grid, grid-template-columns, grid-template-rows, grid-gap, grid-column, grid-row).

  • Duyarlı Tasarım (Responsive Design): Web sitesinin farklı ekran boyutlarına (masaüstü, tablet, mobil) ve cihazlara uyum sağlamasıdır. CSS'in temel aracı medya sorgularıdır (@media). Medya sorguları, belirli koşullar (ekran genişliği, yönlendirme vb.) karşılandığında farklı stil kurallarının uygulanmasını sağlar.

  • CSS Ön İşlemcileri (Preprocessors): SASS (Syntactically Awesome Style Sheets) ve LESS gibi araçlar, CSS'e değişkenler, iç içe kurallar (nesting), karışımlar (mixins), fonksiyonlar ve kalıtım gibi programlama benzeri özellikler ekleyerek daha organize, sürdürülebilir ve verimli CSS yazmayı sağlar. Bu ön işlemciler, yazdığınız kodu standart CSS'e derler.

  • CSS Framework'leri: Bootstrap, Tailwind CSS, Foundation gibi kütüphaneler, önceden tanımlanmış sınıflar ve bileşenler (ızgara sistemleri, düğmeler, formlar, kartlar vb.) sunarak hızlı prototipleme ve geliştirme sağlar.

CSS, HTML ile tanımlanan yapıya hayat veren, web'in estetik ve kullanıcı deneyimi kalitesini belirleyen kritik bir teknolojidir.

3. JavaScript: Web'in Etkileşimi ve Dinamizmi

JavaScript (JS), web sayfalarına etkileşim, dinamik içerik güncellemesi ve karmaşık özellikler eklemek için kullanılan yüksek seviyeli, yorumlanan (interpreted) bir programlama dilidir. HTML yapıyı, CSS görünümü sağlarken, JavaScript davranışı kontrol eder. Başlangıçta yalnızca tarayıcı tarafında (client-side) çalışmak üzere tasarlanmış olsa da, Node.js gibi platformlar sayesinde sunucu tarafında (server-side), mobil uygulamalarda ve hatta masaüstü uygulamalarında da kullanılabilmektedir.

  • Temel Kavramlar ve Sözdizimi:

    • Değişkenler: Verileri depolamak için kullanılır. var (eski, fonksiyon kapsamlı), let (blok kapsamlı, yeniden atanabilir) ve const (blok kapsamlı, sabit, yeniden atanamaz) anahtar kelimeleriyle tanımlanır.

    • Veri Türleri:

      • Primitive (İlkel) Türler: string (metin), number (sayısal değerler, hem tamsayı hem ondalıklı), boolean (true/false), null (boş değer), undefined (atanmamış değer), symbol (benzersiz tanımlayıcılar - ES6+), bigint (çok büyük tamsayılar - ES2020+).

      • Object (Nesne) Türü: Karmaşık veri yapıları ve fonksiyonlar dahil her şey temelde nesnedir. Dizi (Array), Fonksiyon (Function), Tarih (Date), RegExp gibi yerleşik nesneler bulunur. Nesneler anahtar-değer çiftlerinden oluşur: { key: value }.

    • Operatörler: Aritmetik (+, -, *, /, %), atama (=, +=), karşılaştırma (==, ===, !=, !==, >, <), mantıksal (&&, ||, !), tür (typeof, instanceof) vb. === ve !== (Strict Equality/Inequality) tür dönüşümü yapmadan karşılaştırma yaptığı için genellikle == ve != yerine tercih edilir.

    • Kontrol Akışı:

      • Koşullu İfadeler: if...else if...else, switch.

      • Döngüler: for, while, do...while, for...in (nesne özelliklerinde gezinme), for...of (yinelenebilir nesnelerde - Array, String, Map, Set - gezinme - ES6+).

    • Fonksiyonlar: Belirli bir görevi yerine getiren yeniden kullanılabilir kod bloklarıdır.

      • Fonksiyon Bildirimi (Function Declaration): function myFunction() { ... }

      • Fonksiyon İfadesi (Function Expression): const myFunction = function() { ... };

      • Ok Fonksiyonları (Arrow Functions - ES6+): Daha kısa sözdizimi sunar ve this bağlamını farklı ele alır: const myFunction = () => { ... }; veya tek ifade için const add = (a, b) => a + b;.

    • Kapsam (Scope): Değişkenlerin ve fonksiyonların erişilebilir olduğu alanı belirtir. JavaScript'te global kapsam, fonksiyon kapsamı ve let/const ile gelen blok kapsamı bulunur.

    • Closures (Kapanışlar): Bir fonksiyonun, tanımlandığı kapsamdaki değişkenlere (kendi kapsamı dışındaki) erişebilmesi ve bu değişkenleri hatırlayabilmesi durumudur. İç içe fonksiyonlarda sıkça görülür ve güçlü desenler oluşturmayı sağlar.

    • this Anahtar Kelimesi: Çalıştırıldığı bağlama (context) göre değeri değişen özel bir anahtar kelimedir. Global kapsamda, bir nesne metodu içinde, bir yapıcı (constructor) fonksiyon içinde veya bir olay dinleyicisinde farklı değerler alabilir. Ok fonksiyonları this'i leksikal olarak (tanımlandığı yerden) alır.

    • Nesne Yönelimli Programlama (OOP): JavaScript prototip tabanlı bir dildir, ancak ES6 ile gelen class sözdizimi, klasik OOP'ye (sınıflar, kalıtım, encapsulation) daha aşina bir yapı sunar. Yine de arka planda prototip mekanizması çalışır.

  • DOM (Document Object Model) Manipülasyonu:
    JavaScript'in tarayıcıdaki en önemli görevlerinden biri HTML belgesinin yapısını (DOM) değiştirmektir. DOM, HTML belgesini bir ağaç yapısı olarak temsil eder ve JavaScript bu ağaç üzerindeki düğümleri (elementler, metinler, öznitelikler) seçebilir, değiştirebilir, silebilir veya yenilerini ekleyebilir.

    • Element Seçme: document.getElementById('id'), document.getElementsByClassName('class'), document.getElementsByTagName('tag'), document.querySelector('css-selector'), document.querySelectorAll('css-selector'). querySelector ve querySelectorAll CSS seçicilerini kullanabildiği için çok esnektir.

    • Element Değiştirme: .innerHTML (HTML içeriğini değiştirir - güvenlik riski taşıyabilir), .textContent (sadece metin içeriğini değiştirir - daha güvenli), .setAttribute('attr', 'value'), .style.property = 'value' (CSS stillerini değiştirme).

    • Element Ekleme/Silme: document.createElement('tag'), parentNode.appendChild(newNode), parentNode.insertBefore(newNode, referenceNode), node.remove().

    • Olay Yönetimi (Event Handling): Kullanıcı etkileşimlerine (tıklama, fare hareketi, klavye girişi vb.) veya tarayıcı olaylarına (sayfa yüklenmesi vb.) yanıt vermektir. element.addEventListener('event-name', function(event) { ... }) yöntemi en modern ve esnek yaklaşımdır.

  • Asenkron JavaScript:
    JavaScript doğası gereği tek iş parçacıklı (single-threaded) ve engelleyici olmayan (non-blocking) bir dildir. Bu, uzun süren işlemlerin (ağ istekleri, dosya okuma) ana iş parçacığını kilitlememesi gerektiği anlamına gelir. Asenkron operasyonlar şu mekanizmalarla yönetilir:

    • Callback Fonksiyonları: Asenkron işlem tamamlandığında çağrılan fonksiyonlardır. İç içe callback'ler "Callback Hell" (geri çağırma cehennemi) olarak bilinen okunması zor kodlara yol açabilir.

    • Promise'lar (ES6+): Asenkron bir işlemin nihai sonucunu (başarı veya hata) temsil eden nesnelerdir. .then() (başarı durumu) ve .catch() (hata durumu) metodlarıyla zincirlenebilirler, callback hell sorununu çözerler.

    • Async/Await (ES2017+): Promise'lar üzerine kurulu sentaktik şekerdir. Asenkron kodu senkron gibi yazmayı sağlar, okunabilirliği artırır. async ile işaretlenmiş fonksiyonlar içinde await anahtar kelimesi bir Promise'in çözülmesini bekler.

  • JSON (JavaScript Object Notation): JavaScript nesne sözdizimine dayalı, hafif bir veri değişim formatıdır. API'ler arasında veri iletmek için yaygın olarak kullanılır. JavaScript'te JSON.parse() (JSON metnini nesneye çevirir) ve JSON.stringify() (JavaScript nesnesini JSON metnine çevirir) metodları bulunur.

  • AJAX (Asynchronous JavaScript and XML) ve Fetch API:
    Sayfayı yeniden yüklemeden sunucu ile arka planda veri alışverişi yapmayı sağlayan tekniklerdir. AJAX başlangıçta XMLHttpRequest nesnesi ile yapılırdı. Modern yaklaşım, daha esnek ve güçlü olan Fetch API'yi kullanmaktır. Fetch API, Promise tabanlıdır.

  • Modüller (ES6+): Kodu farklı dosyalara ayırarak organize etmeyi ve yeniden kullanılabilirliği artırmayı sağlar. export ile değişkenler, fonksiyonlar, sınıflar dışa aktarılır; import ile başka dosyalardan içe aktarılır.

  • Ekosistem: Kütüphaneler ve Framework'ler:

    • Front-End Framework'leri: React (Facebook), Angular (Google), Vue.js (Evan You) gibi kütüphane ve framework'ler, karmaşık kullanıcı arayüzleri ve Tek Sayfa Uygulamaları (Single Page Applications - SPAs) geliştirmeyi kolaylaştırır. Bileşen tabanlı mimari, state yönetimi, yönlendirme (routing) gibi özellikler sunarlar.

    • Node.js: JavaScript'i sunucu tarafında çalıştırmayı sağlayan bir çalışma zamanı ortamıdır. Ölçeklenebilir ağ uygulamaları oluşturmak için kullanılır. Express.js, NestJS gibi Node.js framework'leri popülerdir.

    • Diğerleri: jQuery (eski ama hala yaygın DOM manipülasyon kütüphanesi), Lodash/Underscore (yardımcı fonksiyonlar), Axios (HTTP istemcisi), Webpack/Parcel/Vite (modül paketleyiciler/build araçları).

JavaScript, modern web'in dinamizmini ve etkileşimini sağlayan, sürekli gelişen ve çok yönlü bir dildir. Hem istemci hem de sunucu tarafında geniş bir kullanım alanına sahiptir.

4. C# (C Sharp): Güçlü, Çok Yönlü ve Nesne Yönelimli

C#, Microsoft tarafından .NET platformu için geliştirilmiş, modern, genel amaçlı, nesne yönelimli (object-oriented) ve tür güvenli (type-safe) bir programlama dilidir. Java'ya benzerliğiyle bilinir ancak zamanla kendine özgü güçlü özellikler kazanmıştır. Başlangıçta Windows ekosistemiyle sınırlı olsa da, .NET Core (ve sonraki .NET 5, 6, 7...) ile birlikte tamamen çapraz platform (Windows, macOS, Linux) desteğine kavuşmuştur.

  • Temel Kavramlar ve Sözdizimi:

    • .NET Platformu: C#'ın çalıştığı yönetilen (managed) kod ortamıdır. Ortak Dil Çalışma Zamanı (Common Language Runtime - CLR) ve kapsamlı bir Sınıf Kütüphanesi (Base Class Library - BCL) içerir. CLR, bellek yönetimi (Garbage Collection - GC), güvenlik, tür denetimi ve ara dil (Intermediate Language - IL) yürütme gibi hizmetler sunar.

    • Tür Güvenliği (Type Safety): Değişkenlerin türleri derleme zamanında belirlenir ve genellikle çalışma zamanında değiştirilemez. Bu, hataları erken aşamada yakalamayı sağlar. C# güçlü tipli (strongly-typed) bir dildir.

    • Veri Türleri:

      • Değer Türleri (Value Types): int, float, double, decimal, bool, char, struct, enum. Genellikle stack üzerinde depolanır.

      • Referans Türleri (Reference Types): string, class, interface, delegate, array, object. Heap üzerinde depolanır ve değişkenler bu nesnelere referans tutar.

    • Nesne Yönelimli Programlama (OOP) İlkeleri: C# tamamen nesne yönelimlidir.

      • Sınıflar (Classes) ve Nesneler (Objects): Sınıflar nesnelerin şablonlarıdır; nesneler sınıfların örnekleridir.

      • Kapsülleme (Encapsulation): Veri (alanlar/fields) ve bu veriyi işleyen metodları (methods) bir arada tutmak ve iç uygulama detaylarını gizlemek. Erişim belirleyiciler (public, private, protected, internal) ile sağlanır. Özellikler (Properties - get/set ile) kapsüllemeyi destekler.

      • Kalıtım (Inheritance): Bir sınıfın (türetilmiş/derived class) başka bir sınıfın (temel/base class) özelliklerini ve metodlarını miras alması. Kod tekrarını azaltır. C# tekli sınıf kalıtımını destekler ancak çoklu arayüz (interface) kalıtımına izin verir.

      • Çok Biçimlilik (Polymorphism): Aynı arayüzü paylaşan farklı nesnelerin, metoda yapılan çağrıya farklı şekillerde yanıt vermesi. virtual ve override anahtar kelimeleri (metod geçersiz kılma) ve arayüzler/abstract sınıflar ile sağlanır.

      • Soyutlama (Abstraction): Karmaşıklığı gizleyerek sadece gerekli özellikleri dışarıya sunmak. abstract sınıflar ve interfaceler ile gerçekleştirilir.

    • Metodlar (Methods): Belirli bir işlevi yerine getiren kod bloklarıdır. Parametre alabilir ve değer döndürebilirler.

    • Özellikler (Properties): Sınıfın özel alanlarına kontrollü erişim sağlayan (get/set blokları ile) üyelerdir. Kapsüllemeyi kolaylaştırır.

    • Yapıcılar (Constructors): Bir sınıftan nesne oluşturulduğunda otomatik olarak çağrılan özel metodlardır. Nesnenin başlangıç durumunu ayarlamak için kullanılır.

    • Statik Üyeler (Static Members): Sınıfa ait olan, nesne örneği oluşturulmadan erişilebilen alanlar, özellikler veya metodlardır (static anahtar kelimesiyle tanımlanır).

    • Arayüzler (Interfaces): Bir sınıfın uygulaması gereken metod imzalarını ve özellikleri tanımlayan sözleşmelerdir. interface anahtar kelimesiyle tanımlanır. Bir sınıf birden fazla arayüzü uygulayabilir (implements).

    • Temsilciler (Delegates): Metodlara referans tutan tür güvenli işaretçilerdir. Olay yönetimi (events) ve LINQ gibi özelliklerin temelini oluştururlar. delegate anahtar kelimesiyle tanımlanır. Action<T> ve Func<T, TResult> genel (generic) temsilcileri yaygın olarak kullanılır.

    • Olaylar (Events): Bir nesnenin (yayıncı/publisher) belirli bir durum değişikliği veya eylem gerçekleştiğinde diğer nesnelere (abone/subscriber) bildirim göndermesini sağlayan mekanizmadır. Temsilcilere dayanır. event anahtar kelimesiyle tanımlanır.

    • Geneller (Generics): Türleri parametre olarak alabilen sınıflar, arayüzler, metodlar ve temsilciler oluşturmayı sağlar (List<T>, Dictionary<TKey, TValue>). Kod tekrarını azaltır ve tür güvenliğini artırır.

    • LINQ (Language-Integrated Query): Farklı veri kaynaklarına (nesne koleksiyonları, veritabanları, XML) karşı doğrudan C# içinde sorgu yazmayı sağlayan güçlü bir özelliktir. SQL benzeri bir sözdizimi (query syntax) veya metod tabanlı sözdizimi (method syntax) kullanılabilir. Okunabilirliği ve verimliliği artırır.

    • Asenkron Programlama (Async/Await): JavaScript'tekine benzer şekilde, async ve await anahtar kelimeleriyle uzun süren G/Ç (I/O) işlemlerini (ağ istekleri, veritabanı sorguları) ana iş parçacığını bloke etmeden yönetmeyi kolaylaştırır. Task ve Task<TResult> nesneleri üzerine kuruludur. Duyarlı (responsive) uygulamalar oluşturmak için kritiktir.

    • İstisna Yönetimi (Exception Handling): try, catch, finally ve throw anahtar kelimeleriyle çalışma zamanı hatalarını yönetmeyi sağlar.

    • Ad Alanları (Namespaces): Kodları mantıksal olarak gruplandırmak ve isim çakışmalarını önlemek için kullanılır. namespace anahtar kelimesiyle tanımlanır, using direktifi ile kullanılır.

  • Kullanım Alanları ve Ekosistem:

    • Web Geliştirme: ASP.NET Core, modern, çapraz platform, yüksek performanslı web uygulamaları ve API'ler oluşturmak için kullanılan güçlü bir framework'tür. Razor Pages ve MVC (Model-View-Controller) desenlerini destekler. Blazor ile C# kullanarak istemci tarafı web kullanıcı arayüzleri geliştirmek de mümkündür (WebAssembly aracılığıyla).

    • Masaüstü Uygulamaları: Windows Presentation Foundation (WPF), Windows Forms (WinForms - daha eski) ve Universal Windows Platform (UWP) gibi teknolojilerle Windows masaüstü uygulamaları geliştirilebilir. MAUI (.NET Multi-platform App UI) ise tek kod tabanıyla Windows, macOS, iOS ve Android için yerel uygulamalar oluşturmayı hedefler.

    • Oyun Geliştirme: Unity oyun motoru, C#'ı ana betikleme (scripting) dili olarak kullanır. Bu, C#'ı oyun geliştirme dünyasında son derece popüler hale getirmiştir.

    • Mobil Uygulamalar: Xamarin (şimdi .NET MAUI'nin bir parçası), C# ve .NET kullanarak iOS ve Android için yerel mobil uygulamalar geliştirmeyi sağlar.

    • Bulut Bilişim: Microsoft Azure bulut platformu ile derin entegrasyona sahiptir. Azure Functions (sunucusuz bilişim), App Service, veritabanları ve diğer Azure hizmetleriyle C# kullanılarak ölçeklenebilir bulut çözümleri oluşturulabilir.

    • Veritabanı Erişimi: Entity Framework Core (EF Core), nesne-ilişkisel eşleyici (ORM) olarak veritabanı işlemlerini kolaylaştırır. LINQ sorguları doğrudan veritabanı sorgularına çevrilir. ADO.NET ise daha düşük seviyeli veritabanı erişimi sunar.

    • Diğer Alanlar: Mikroseryisler, kurumsal uygulamalar, yapay zeka (ML.NET), Nesnelerin İnterneti (IoT).

  • Araçlar: Visual Studio, dünyanın en güçlü ve popüler Entegre Geliştirme Ortamlarından (IDE) biridir ve C#/.NET geliştirmesi için mükemmel destek sunar. Visual Studio Code (hafif, çapraz platform kod düzenleyici) da C# eklentileriyle güçlü bir alternatiftir. .NET CLI (Komut Satırı Arayüzü) projeleri yönetmek, derlemek ve çalıştırmak için kullanılır.

C#, güçlü tür sistemi, olgun .NET platformu, mükemmel araç desteği ve geniş kullanım alanları ile özellikle kurumsal düzeyde uygulamalar, oyun geliştirme ve Windows ekosistemi için tercih edilen, güvenilir ve performanslı bir dildir. Çapraz platform yetenekleri sayesinde popülerliği artmaya devam etmektedir.

5. Python: Okunabilir, Çok Yönlü ve Hızla Büyüyen

Python, Guido van Rossum tarafından 1990'ların başında geliştirilen, yüksek seviyeli, yorumlanan (interpreted), genel amaçlı bir programlama dilidir. En belirgin özelliği, okunabilirliğe ve basitliğe verdiği önemdir. Girintilemeyi (indentation) kod bloklarını tanımlamak için kullanması, onu diğer dillerden ayıran önemli bir sentaktik özelliktir. Dinamik tiplemeye sahip olması, hızlı prototipleme ve geliştirmeyi kolaylaştırır.

  • Temel Kavramlar ve Sözdizimi:

    • Yorumlanan Dil: Python kodu genellikle derlenmek yerine bir yorumlayıcı (interpreter) tarafından satır satır çalıştırılır. Bu, geliştirmeyi hızlandırır ancak C# gibi derlenen dillere göre çalışma zamanı performansı genellikle daha düşüktür (ancak C uzantıları ve JIT derleyicileri gibi optimizasyonlar mevcuttur).

    • Dinamik Tipleme: Değişkenlerin türleri çalışma zamanında belirlenir ve değiştirilebilir. Bu esneklik sağlar ancak büyük projelerde tür hatalarını yakalamayı zorlaştırabilir (Type Hints - PEP 484 ile isteğe bağlı statik tip kontrolü eklenebilir).

    • Girintileme (Indentation): Süslü parantezler {} veya anahtar kelimeler yerine kod bloklarını (fonksiyonlar, döngüler, koşullu ifadeler) tanımlamak için boşluklar (genellikle 4 boşluk) kullanılır. Bu, tutarlı ve okunabilir kod yazmayı zorunlu kılar.

    • Veri Türleri:

      • Sayısal: int (tamsayı), float (ondalıklı sayı), complex (karmaşık sayı).

      • Dizeler (Strings): str. Tek ('...'), çift ("...") veya üçlü tırnak ('''...''' veya """...""" - çok satırlı dizeler) içinde tanımlanır. Değişmezdir (immutable).

      • Boolean: bool (True, False).

      • Diziler/Koleksiyonlar:

        • list: Sıralı, değiştirilebilir (mutable) öğeler koleksiyonu. [] ile tanımlanır.

        • tuple: Sıralı, değiştirilemez (immutable) öğeler koleksiyonu. () ile tanımlanır. Listelerden genellikle daha hızlıdır.

        • dict (Dictionary): Sırasız (Python 3.7+ itibarıyla sıralı), anahtar-değer çiftlerinden oluşan koleksiyon. {} ile tanımlanır ({key: value}). Anahtarlar benzersiz ve değiştirilemez olmalıdır.

        • set: Sırasız, benzersiz öğeler koleksiyonu. {} ile tanımlanır ancak boş set set() ile oluşturulur. Matematiksel küme operasyonları (birleşim, kesişim vb.) için kullanışlıdır.

      • NoneType: None (değerin olmadığını belirten özel bir nesne, diğer dillerdeki null'a benzer).

    • Operatörler: Aritmetik, atama, karşılaştırma, mantıksal (and, or, not), üyelik (in, not in), kimlik (is, is not).

    • Kontrol Akışı: if...elif...else, for (genellikle bir iterable üzerinde gezinmek için kullanılır - for item in sequence:), while. break (döngüden çıkar), continue (döngünün sonraki iterasyonuna geçer), pass (yer tutucu, hiçbir şey yapmaz).

    • Fonksiyonlar: def anahtar kelimesiyle tanımlanır. Parametre alabilir, varsayılan parametre değerleri olabilir, args (değişken sayıda pozisyonel argüman) ve *kwargs (değişken sayıda anahtar kelime argümanı) alabilir. return ile değer döndürür. Fonksiyonlar birinci sınıf nesnelerdir (değişkenlere atanabilir, başka fonksiyonlara argüman olarak geçilebilir, fonksiyonlardan döndürülebilir).

    • Modüller ve Paketler: Kodları farklı dosyalarda (.py) organize etmek için kullanılır. import module_name ile modül içe aktarılır. pip (Pip Installs Packages), Python'un standart paket yöneticisidir ve PyPI (Python Package Index) deposundan üçüncü parti kütüphaneleri yüklemek için kullanılır.

    • Nesne Yönelimli Programlama (OOP): Python OOP'yi destekler. class anahtar kelimesiyle sınıflar tanımlanır. init özel metodu yapıcı (constructor) görevi görür. self parametresi, sınıfın örneğine referans verir (diğer dillerdeki this gibi). Kalıtım, çok biçimlilik ve kapsülleme (isim mangling __ ile sınırlı destek) mevcuttur.

    • List Comprehensions: Listeleri kısa ve okunabilir bir şekilde oluşturmak için kullanılan sentaktik bir yapıdır: [expression for item in iterable if condition]. Benzer yapılar dict ve set için de vardır.

    • Generators: Bellekte tüm listeyi tutmak yerine, istendiğinde değer üreten özel fonksiyonlardır (yield anahtar kelimesini kullanır). Büyük veri setleri üzerinde çalışırken bellek verimliliği sağlarlar.

    • İstisna Yönetimi: try...except...else...finally blokları ile hataları yönetir.

    • Dosya İşlemleri: open() fonksiyonu ile dosyaları okuma, yazma ve yönetme işlemleri kolayca yapılır. with open(...) as f: yapısı, dosyanın otomatik olarak kapatılmasını sağlar.

  • Kullanım Alanları ve Ekosistem:

    • Web Geliştirme (Back-end):

      • Django: Tam özellikli (batteries-included), üst düzey bir web framework'üdür. ORM, admin paneli, kimlik doğrulama gibi birçok bileşeni hazır sunar. Büyük ve karmaşık projeler için uygundur.

      • Flask: Minimalist bir mikro framework'tür. Temel işlevselliği sunar, geri kalanını eklentilerle (extensions) veya kendi kodunuzla eklersiniz. Daha küçük projeler, API'ler veya daha fazla esneklik isteyenler için idealdir.

      • FastAPI: Modern, hızlı (Node.js ve Go ile rekabet edebilen), API geliştirmeye odaklanmış bir framework'tür. Otomatik Swagger/OpenAPI dokümantasyonu ve tip ipuçlarına (type hints) dayalı veri doğrulaması gibi özellikleriyle öne çıkar.

    • Veri Bilimi, Makine Öğrenmesi ve Yapay Zeka: Python'un en güçlü olduğu alanlardan biridir. Kapsamlı kütüphaneleri sayesinde bu alanda fiili standart haline gelmiştir:

      • NumPy: Çok boyutlu diziler ve matematiksel işlemler için temel kütüphane.

      • Pandas: Veri manipülasyonu ve analizi için güçlü veri yapıları (DataFrame) sunar.

      • Matplotlib & Seaborn: Veri görselleştirme kütüphaneleri.

      • Scikit-learn: Makine öğrenmesi algoritmaları (sınıflandırma, regresyon, kümeleme vb.), model seçimi ve değerlendirme araçları sunar.

      • TensorFlow & PyTorch: Derin öğrenme (deep learning) framework'leri.

      • Jupyter Notebooks: Kod, metin ve görselleştirmeleri bir arada sunan interaktif geliştirme ortamı.

    • Betikleme ve Otomasyon (Scripting & Automation): Sistem yönetimi görevlerini, dosya işlemlerini, veri işlemeyi, web kazımayı (web scraping - BeautifulSoup, Scrapy kütüphaneleri ile) ve diğer tekrarlayan görevleri otomatikleştirmek için yaygın olarak kullanılır. Basit sözdizimi ve geniş standart kütüphanesi bu alanda büyük avantaj sağlar.

    • Bilimsel ve Sayısal Hesaplama: NumPy, SciPy (bilimsel ve teknik hesaplama) gibi kütüphanelerle bu alanda güçlüdür.

    • Masaüstü Uygulamaları: PyQt, Kivy, Tkinter gibi kütüphanelerle GUI uygulamaları geliştirilebilir, ancak bu C# veya Java kadar yaygın bir kullanım alanı değildir.

    • Eğitim: Basit ve okunabilir sözdizimi nedeniyle programlamaya giriş için sıklıkla tercih edilen bir dildir.

  • Topluluk ve Felsefe: Python, "Zen of Python" (PEP 20) ile özetlenen bir dizi tasarım ilkesine sahiptir ("Beautiful is better than ugly", "Explicit is better than implicit", "Simple is better than complex" vb.). Büyük, aktif ve yardımsever bir topluluğa sahiptir.

Python, öğrenme kolaylığı, okunabilirliği, devasa kütüphane ekosistemi ve çok yönlülüğü sayesinde hem yeni başlayanlar hem de deneyimli geliştiriciler için popüler bir seçenektir. Özellikle veri bilimi, yapay zeka ve web geliştirme (back-end) alanlarında hızla büyümeye devam etmektedir.

Teknolojilerin Birlikte Çalışması: Tam Yığın (Full-Stack) Geliştirme

Bu beş teknoloji nadiren tek başlarına kullanılırlar; genellikle birbirlerini tamamlayarak karmaşık uygulamalar oluştururlar. En yaygın etkileşim modeli web geliştirmede görülür:

  1. Front-end (İstemci Tarafı): Kullanıcının tarayıcısında çalışan kısımdır.

    • HTML: Sayfanın içeriğini ve yapısını tanımlar.

    • CSS: HTML elementlerinin görünümünü ve düzenini belirler.

    • JavaScript: Kullanıcı etkileşimlerini yönetir (form gönderimi, düğme tıklamaları), DOM'u dinamik olarak günceller, animasyonlar ekler ve AJAX/Fetch kullanarak arka uçla iletişim kurar. React, Angular veya Vue gibi JS framework'leri genellikle modern front-end geliştirmede kullanılır.

  2. Back-end (Sunucu Tarafı): Sunucuda çalışan, iş mantığını, veri yönetimini ve API'leri barındıran kısımdır.

    • C# (ASP.NET Core ile): Güçlü, tür güvenli ve performanslı bir seçenektir. Kurumsal uygulamalar, Microsoft ekosistemi entegrasyonu ve oyun sunucuları için popülerdir. Veritabanlarıyla etkileşim için EF Core kullanılır. API'ler (RESTful veya GraphQL) oluşturarak front-end'e veri sağlar.

    • Python (Django/Flask/FastAPI ile): Hızlı geliştirme, veri bilimi entegrasyonu ve okunabilirlik avantajları sunar. Web uygulamaları, API'ler, veri işleme ardışık düzenleri için sıkça tercih edilir. Veritabanlarıyla etkileşim için Django ORM, SQLAlchemy gibi kütüphaneler kullanılır.

Senaryo Örneği: Bir e-ticaret sitesi düşünelim:

  • Kullanıcı ürün listesi sayfasını ziyaret eder (HTML yapısı, CSS stili).

  • Filtreleme seçeneklerini (JavaScript) kullanarak ürünleri daraltır.

  • JavaScript, seçilen filtrelerle birlikte bir API isteğini (Fetch) sunucuya gönderir.

  • Sunucudaki C# (ASP.NET Core) veya Python (Django) uygulaması bu isteği alır.

  • Back-end uygulaması, veritabanından (EF Core veya SQLAlchemy aracılığıyla) filtrelenmiş ürünleri sorgular.

  • Sorgu sonuçlarını JSON formatında front-end'e geri gönderir.

  • JavaScript, gelen JSON verisini alır ve DOM'u güncelleyerek sadece filtrelenmiş ürünleri gösterir (sayfa yeniden yüklenmeden).

Hangi Teknolojiyi Ne Zaman Seçmeli?

  • HTML/CSS/JS: Web tabanlı herhangi bir proje için zorunludur. Front-end geliştirmenin temelini oluştururlar.

  • C#: Windows masaüstü uygulamaları, Unity ile oyun geliştirme, kurumsal düzeyde, performans kritik web uygulamaları (ASP.NET Core), Microsoft ekosistemi (Azure, Xamarin) ile entegrasyon gerektiren projeler için güçlü bir adaydır. Statik tipleme ve olgun framework avantajdır.

  • Python: Veri bilimi, makine öğrenmesi, yapay zeka, hızlı prototipleme, betikleme/otomasyon, back-end web geliştirme (özellikle Django/Flask/FastAPI ile) için mükemmel bir seçimdir. Okunabilirliği ve geniş kütüphane desteği büyük avantajdır.

Gelecek Trendleri

  • WebAssembly (Wasm): C#, Python (dolaylı yollarla) gibi dillerin tarayıcıda neredeyse yerel hızda çalışmasını sağlayarak JavaScript'e alternatif/tamamlayıcı olma potansiyeli taşır. Blazor (C#) bunun bir örneğidir.

  • Tip Güvenliği: JavaScript ekosisteminde TypeScript'in (JavaScript'e statik tipler ekleyen üst küme) yükselişi ve Python'daki Type Hints'in yaygınlaşması, büyük projelerde tür güvenliğine olan talebi gösteriyor.

  • AI/ML Entegrasyonu: Python'un bu alandaki hakimiyeti devam ederken, C# (ML.NET) ve diğer diller de yapay zeka yeteneklerini kendi ekosistemlerine entegre etmeye çalışıyor.

  • Çapraz Platform Geliştirme: .NET MAUI (C#) ve Python'un Kivy gibi kütüphaneleri, tek kod tabanıyla farklı platformlarda (mobil, masaüstü) uygulama geliştirme eğilimini destekliyor.

  • Sunucusuz (Serverless) Mimariler: Hem C# (Azure Functions) hem de Python (AWS Lambda, Google Cloud Functions), olay güdümlü, ölçeklenebilir ve uygun maliyetli sunucusuz uygulamalar oluşturmak için popüler seçeneklerdir.

Sonuç

HTML, CSS, JavaScript, C# ve Python, modern yazılım geliştirme manzarasının temel direkleridir. HTML ve CSS web'in yapısını ve görünümünü tanımlarken, JavaScript etkileşim ve dinamizm katmaktadır. C# ve Python ise güçlü, çok yönlü back-end ve genel amaçlı programlama dilleri olarak geniş bir yelpazede çözümler sunmaktadır. C#, tür güvenliği, performans ve Microsoft ekosistemi ile öne çıkarken; Python, okunabilirliği, hızlı geliştirmesi ve veri bilimi/AI alanındaki rakipsiz kütüphane desteği ile parlamaktadır. Bu teknolojileri anlamak ve gerektiğinde birlikte nasıl kullanılabileceğini bilmek, günümüzün dijital dünyasında başarılı ve etkili yazılımlar oluşturmak için kritik öneme sahiptir. Her birinin kendine özgü güçlü yanları ve kullanım alanları vardır ve doğru projede doğru teknolojiyi seçmek, geliştirme sürecinin verimliliğini ve sonucun kalitesini doğrudan etkiler.

Abdulkadir Güngör - Kişisel Websitesi

Abdulkadir Güngör - Özgeçmiş

Github

Linkedin

0
Subscribe to my newsletter

Read articles from kadir gungor directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

kadir gungor
kadir gungor

https://abdulkadirgungor86.github.io/ https://abdulkadirgungor86.github.io/cv/