Bilgisayar Mühendisliğine Giriş
Bilgisayar mühendisliğini veri temsilinden sayısal mantık ve işlemci mimarisine; işletim sistemlerinden eşzamanlılık, veritabanları, ağlar, güvenlik, gerçek zamanlı sistemler, performans ve yapay zekaya uzanan tek bir sistem zinciri olarak ele alan ileri düzey ders notu.
Bilgisayar mühendisliği, yazılım ile donanımın kesiştiği bir meslek tanımından daha geniştir. Alanın asıl konusu, bir hesaplama fikrinin fiziksel bir makine üzerinde doğru, zamanında, güvenli ve ölçülebilir biçimde yürütülmesidir. Bir algoritmanın matematiksel olarak doğru olması yetmez; veri temsili, işlemci mimarisi, bellek hiyerarşisi, işletim sistemi, eşzamanlılık, ağ, kalıcı veri, hata modeli ve güvenlik sınırları aynı sonucun parçasıdır.
Bu nedenle “Bilgisayar Mühendisliğine Giriş” burada bilgisayar kullanmayı öğreten başlangıç dersi anlamına gelmez. Amaç, alanın alt derslerini tek tek sıralamak yerine aralarındaki bağımlılıkları kurmak ve daha ileri derslerde görülen kavramların sistem içinde nerede durduğunu göstermektir. Ayrıntılı konular ilgili Akademi notlarına bağlanmıştır.
1. Hesaplamayı katmanlar üzerinden okumak
Bir bilgisayar sistemi, birbirinin varsayımlarını kullanan soyutlama katmanlarından oluşur. Üst katman alt katmanın bütün ayrıntısını bilmez; fakat hangi garantilere güvendiğini bilmek zorundadır. Bir uygulama “dosyaya yazdım” dediğinde bunun altında sistem çağrısı, sayfa önbelleği, dosya sistemi, blok katmanı, aygıt sürücüsü, denetleyici, kalıcı ortam ve güç kesintisi davranışı vardır. Benzer biçimde “bir nesneyi belleğe aldım” ifadesinin altında sanal adres, sayfa tablosu, TLB, önbellek hiyerarşisi, tutarlılık protokolü ve fiziksel DRAM bulunur.
Bilgisayar mühendisliğinde güçlü problem çözme, hatayı doğru katmana yerleştirebilme becerisidir. Yanlış sonuç algoritmadan, veri yarışından, taşmadan veya hatalı seri hale getirmeden doğabilir. Yüksek gecikme verimsiz karmaşıklıktan, önbellek kaçırmalarından, kilit çekişmesinden, disk kuyruğundan, ağ yeniden iletiminden veya veritabanı planından kaynaklanabilir. Aynı belirti farklı katmanlarda farklı nedenlere sahiptir.
Bu sistem yaklaşımının matematiksel temeli Ayrık Matematik, Lineer Cebir, Olasılık ve İstatistik ve Nümerik Analiz derslerinde; fiziksel ve zamansal temeli ise Devre Teorisi, Elektronik ve Sinyaller ve Sistemler notlarında derinleşir.
2. Bilginin temsili: bit dizisi tek başına anlam taşımaz
Makine açısından veri, bit dizileridir; anlam ise bu bitlerin hangi kuralla yorumlandığıyla ortaya çıkar. Aynı 32 bit, işaretli tamsayı, IEEE 754 kayan nokta değeri, adresin bir bölümü, dört karakter veya makine komutu olarak yorumlanabilir. Bu nedenle veri tipi yalnız programlama dili sözdizimi değildir; temsil aralığını, işlemlerin semantiğini ve hata sınıflarını belirleyen bir sözleşmedir.
Tamsayı aritmetiğinde sabit bit genişliği nedeniyle taşma mümkündür. İşaretli ve işaretsiz işlemler aynı bit örüntüsünü farklı yorumlayabilir. Kayan nokta aritmetiği ise gerçek sayıların tam modeli değildir; sonlu temsil nedeniyle yuvarlama, soğurma, taşma, alt taşma, sonsuz ve NaN durumları ortaya çıkar. 0.1 + 0.2 gibi basit görünen işlemlerin tam ondalık sonucu vermemesi bir dil hatası değil, ikili kayan nokta temsilinin doğal sonucudur.
Bayt sıralaması (endianness) çok baytlı değerlerin bellekte ve iletişim protokollerinde nasıl dizildiğini belirler. Ağ protokolleri, dosya biçimleri ve ikili adli inceleme süreçlerinde “makinemde doğru görünüyor” yeterli kanıt değildir; veri biçiminin bayt düzeyindeki sözleşmesi bilinmelidir. Metinde aynı sorun Unicode kod noktası ile UTF-8 bayt dizisi arasındaki ayrımda görülür.
Hata belirleme ve düzeltme de temsilin parçasıdır. Eşlik biti, sağlama toplamı, CRC ve hata düzeltme kodları aynı amaç için aynı güçte değildir. CRC rastlantısal iletim hatalarına karşı güçlü olabilir ancak kriptografik bütünlük sağlamaz. Temsil, hata modeliyle birlikte seçilmelidir.
Bu katmanın yazılıma yansıması C Programlama Temelleri, C++ ile Nesne Yönelimli Programlama, Java Programlama ve C# Programlama derslerinde farklı bellek ve tür modelleri üzerinden görülebilir.
3. Sayısal mantık, durum ve zaman
İşlemciyi anlamak için transistor düzeyindeki bütün ayrıntıları bilmek gerekmez; ancak kombinasyonel mantık ile ardışıl mantık arasındaki fark kritiktir. Kombinasyonel devrede çıktı mevcut girişlerin fonksiyonudur. Ardışıl devrede geçmiş durum da sonuca katılır. Yazmaçlar, sayaçlar, denetim birimleri ve sonlu durum makineleri bu nedenle zaman kavramını donanıma taşır.
Saatli sistemlerde yalnız mantıksal doğruluk değil, kurulum ve tutma süreleri de önemlidir. Bir sinyal saat alanları arasında uygun eşzamanlama olmadan geçirilirse metastabilite olasılığı doğar. Metastabilite “0 mı 1 mi?” biçiminde soyutlanabilen sıradan bir yazılım hatası değildir; fiziksel devrenin kararlı duruma geçme süresiyle ilişkilidir. Saat alanı geçişi, eşzamanlayıcılar ve asenkron FIFO gibi yapılar bu nedenle tasarımın parçasıdır.
Sonlu durum makinesi kavramı yalnız donanımda değildir. Protokol, kullanıcı arayüzü, iş akışı ve gömülü kontrol mantığında da aynı fikir kullanılır: geçerli durumlar, olaylar, geçişler ve yasak kombinasyonlar açıkça tanımlanır. Bu düşüncenin kuramsal tarafı Otomatlar Kuramı ve Biçimsel Diller, donanım tarafı Sayısal Mantık Tasarımı ve Bilgisayar Organizasyonu notlarında ayrıntılandırılır.
4. Komut kümesi mimarisi ve mikro-mimari aynı şey değildir
Komut kümesi mimarisi (ISA), yazılım ile işlemci arasındaki görünür sözleşmedir: yazmaçlar, komutlar, adresleme, ayrıcalık düzeyleri, istisnalar ve bellek davranışının belirli bölümleri bu arayüzün parçasıdır. Mikro-mimari ise aynı ISA'yı gerçekleştirmek için kullanılan boru hattı, yürütme birimleri, önbellekler, yeniden sıralama tamponları ve kestirim mekanizmaları gibi iç yapılardır.
Aynı ISA'yı kullanan iki işlemci aynı makine kodunu çalıştırabilir fakat çok farklı performans ve güç özellikleri gösterebilir. Saat frekansı bu nedenle tek başına anlamlı karşılaştırma değildir. Komut başına çevrim, komut düzeyi paralellik, bellek bekleme süresi, dallanma başarısı, yürütme genişliği ve termal sınırlar birlikte değerlendirilmelidir.
Modern genel amaçlı işlemciler boru hattı, dallanma kestirimi ve sıra dışı yürütme ile görünürde ardışık olan komut akışının içindeki bağımsız işleri üst üste bindirir. Bunun bedeli spekülatif durum, karmaşık yeniden sıralama ve yan kanal saldırılarına kadar uzanan ek davranışlardır. Programcı ISA düzeyinde doğru kod yazsa bile mikro-mimari ayrıntılar performansı ve bazı güvenlik özelliklerini etkileyebilir.
SIMD ve vektör yürütme, aynı işlemi çok sayıda veri öğesine uygulayan iş yüklerinde önemli hızlanma sağlar. Ancak vektör genişliği, veri hizalaması, bellek bant genişliği ve dallanma davranışı kazancın sınırını belirler. Bu konular Bilgisayar Mimarisi ve Mikroişlemciler derslerinde daha ayrıntılı ele alınır.
5. Bellek hiyerarşisi ve yerellik
İşlemci ile ana bellek arasındaki hız farkı, modern sistem tasarımının temel gerçeklerinden biridir. Yazmaç, L1/L2/L3 önbellek, DRAM ve kalıcı depolama aynı kapasite, gecikme ve maliyet sınıfında değildir. Bu nedenle bir algoritmanın teorik işlem sayısı ile gerçek çalışma süresi arasında büyük fark oluşabilir.
Zamansal yerellik, yakın zamanda kullanılan verinin yeniden kullanılma olasılığını; mekânsal yerellik ise yakın adreslerdeki verinin kullanılma olasılığını ifade eder. Dizi üzerinde ardışık gezinme ile düğümleri belleğin farklı yerlerine dağılmış bağlı liste üzerinde gezinme aynı O(n) karmaşıklığına sahip olsa da önbellek davranışları farklı olabilir. Karmaşıklık analizi gereklidir fakat donanım maliyet modelinin tamamı değildir.
Sanal bellek, her sürece yalıtılmış bir sanal adres alanı sağlar. Adres çevirisi sayfa tabloları üzerinden yapılır; TLB yakın zamanda kullanılan çevirileri önbellekler. Büyük çalışma kümelerinde sayfa hataları, TLB kaçırmaları ve NUMA yerleşimi görünür performans etkileri üretebilir. Büyük sayfalar bazı iş yüklerinde TLB baskısını azaltabilir ancak bellek parçalanması ve tahsis davranışı bakımından yeni ödünleşimler getirir.
Çok çekirdekli işlemcilerde önbellek tutarlılığı ile programlama dilinin bellek modeli farklı kavramlardır. Donanım çekirdeklerin önbellek görünümünü belirli kurallarla uyumlu tutarken, dil/çalışma zamanı hangi yeniden sıralamaların gözlenebileceğini ve atomik işlemlerin hangi garantileri verdiğini tanımlar.
Bellek ve işlemci etkileşiminin uygulama düzeyindeki karşılığı Java Tabanlı Veri Sistemlerinde Yüksek Başarım ve Veri Yapıları ve Algoritma Analizi notlarında görülebilir.
6. Giriş/çıkış, kesmeler, DMA ve kalıcı depolama
Giriş/çıkış sistemi, işlemci dışındaki aygıtların bellek ve yazılımla veri alışverişini düzenler. Basit programlı G/Ç'de işlemci aygıt durumunu sürekli sorgulayabilir; kesme tabanlı modelde aygıt hazır olduğunda işlemciye bildirim gönderir. Doğrudan bellek erişimi (DMA), büyük veri aktarımında işlemcinin her baytı taşıma zorunluluğunu azaltır.
Bu mekanizmalar işletim sistemi, sürücü ve donanım arasında paylaşılan bir protokol oluşturur. Kesmenin çok sık gelmesi işlemciyi aşırı yükleyebilir; aşırı toplulaştırma ise gecikmeyi artırabilir. Ağ kartlarında kesme birleştirme, depolamada kuyruk derinliği ve çoklu kuyruk tasarımları bu gecikme/işlem hacmi ödünleşiminin örnekleridir.
Kalıcı depolamada “yazma çağrısı döndü” ile “veri güç kesilse de kalıcıdır” aynı garanti değildir. Uygulama tamponu, işletim sistemi sayfa önbelleği, dosya sistemi günlüğü, denetleyici önbelleği ve fiziksel ortam arasında farklı dayanıklılık sınırları vardır. Veri tabanlarının write-ahead log kullanması, dosya sistemlerinin günlükleme yapması ve uygulamaların belirli noktalarda kalıcılık bariyerlerine ihtiyaç duyması bu nedenle önemlidir.
SSD'lerde silme blokları, wear leveling, garbage collection ve yazma çoğaltması (write amplification) performansı etkiler. RAID erişilebilirlik veya işlem hacmi sağlayabilir fakat mantıksal veri bozulmasına karşı yedek değildir.
İşletim sistemi tarafı İşletim Sistemleri, sunucu işletimi tarafı Red Hat Enterprise Linux Sistem Yönetimi notlarında devam eder.
7. İşletim sistemi: kaynak yöneticisi ve yalıtım katmanı
İşletim sistemi yalnız program başlatan arayüz değildir. Süreçleri, iş parçacıklarını, sanal belleği, dosya sistemlerini, aygıtları, ağ yığınını ve erişim haklarını ortak kaynaklar üzerinde güvenli biçimde çoklar. Sistem çağrısı, kullanıcı alanındaki uygulamanın çekirdekten kontrollü hizmet isteme sınırıdır.
Süreç, adres alanı ve kaynak sahipliği için güçlü bir yalıtım birimidir. İş parçacıkları aynı süreç içinde adres alanını paylaşır ve bu paylaşım eşzamanlılığı kolaylaştırırken veri yarışlarını mümkün kılar. Zamanlayıcı, çalışmaya hazır işler arasında CPU zamanı dağıtır; bağlam değiştirme, öncelik, çekirdek yakınlığı ve çalışma kuyruğu yapısı performansı etkiler.
Sanal bellek yalnız RAM yetmediğinde diske taşma mekanizması değildir. Adres yalıtımı, demand paging, bellek eşlemeli dosyalar, copy-on-write ve paylaşılan bellek gibi çok sayıda sistem özelliğinin temelidir. Bir sayfanın erişilebilir olması ile verinin işlemci önbelleğinde bulunması farklı seviyelerdir.
Dosya sisteminde ad, üst veri ve veri blokları ayrıdır. Uygulamanın rename, fsync, dosya kilidi veya atomik değiştirme davranışına güvenebilmesi için hedef dosya sisteminin ve işletim sisteminin semantiğini bilmesi gerekir. Taşınabilir kod yalnız sözdizimsel olarak derlenen kod değildir; bağımlı olduğu sistem garantileri de taşınabilir olmalıdır.
Bu katmanın ayrıntıları İşletim Sistemleri ve C Programlama Temelleri ile birlikte çalışıldığında daha görünür hale gelir.
8. Eşzamanlılık, paralellik ve bellek modeli
Eşzamanlılık, birden fazla işin zaman içinde ilerleyebilmesini; paralellik ise gerçekten aynı anda yürütülebilmesini ifade eder. Tek çekirdekli sistem eşzamanlı olabilir, fakat aynı anda yalnız bir komut akışı yürütebilir. Çok çekirdekli sistem paralellik sağlayabilir ancak paylaşılan durum yeni doğruluk problemleri üretir.
Veri yarışı, aynı belleğe eşzamanlı erişimlerin en az birinin yazma olduğu ve gerekli eşzamanlama ilişkisinin kurulmadığı durumda ortaya çıkar. Yarış koşulu daha geniş bir kavramdır; sonuç olayların zamanlamasına bağlıysa yarış koşulu olabilir. Mutex, semaphore, condition variable, read-write kilit, atomik değişken ve mesajlaşma aynı sorunu farklı maliyetlerle çözer.
Atomik işlem “her şey otomatik olarak güvenlidir” anlamına gelmez. Tek bir sayaç artışı atomik olsa bile birden fazla değişken arasındaki değişmezler bozulabilir. Kilitsiz algoritmalarda compare-and-swap, ilerleme garantileri, ABA problemi ve bellek geri kazanımı gibi konular önem kazanır.
Bellek modelleri, derleyici ve işlemcinin yeniden sıralama yapabildiği sistemlerde hangi yazmanın hangi okumaya görünür olduğunu tanımlar. Java'daki happens-before ilişkileri, C/C++ atomik bellek sıralamaları ve .NET bellek modeli farklı sözdizimleriyle aynı temel soruya cevap arar: başka bir iş parçacığı hangi değeri ne zaman güvenle görebilir?
Performansta kilit sayısı kadar çekişme şekli önemlidir. Yanlış paylaşım (false sharing), farklı değişkenler aynı önbellek satırında bulunduğunda gereksiz tutarlılık trafiği yaratabilir. Aşırı paralellik ise kuyruk, bağlam değiştirme ve bellek bant genişliği nedeniyle sistemi yavaşlatabilir.
Dil düzeyindeki uygulamalar için Java Programlama, C++ ile Nesne Yönelimli Programlama, C# Programlama ve Java Tabanlı Veri Sistemlerinde Yüksek Başarım birlikte okunabilir.
9. Programlama dili, derleyici, çalışma zamanı ve ABI
Kaynak kod doğrudan işlemcinin yürüttüğü anlam değildir. Derleme zincirinde sözcüksel çözümleme, ayrıştırma, tür denetimi, ara gösterim, optimizasyon, kod üretimi ve bağlama aşamaları bulunabilir. Yorumlanan veya JIT derlenen sistemlerde bu aşamaların bir bölümü çalışma zamanına taşınır.
Tür sistemi, yalnız hatalı değişken atamalarını engelleyen sözdizimi değildir; programın hangi değerleri ifade edebildiğini ve hangi işlemlerin geçerli olduğunu biçimlendirir. Statik ve dinamik türleme, nominal ve yapısal türleme, değer ve referans semantiği, sahiplik veya çöp toplama gibi seçimler API tasarımından performansa kadar birçok alanı etkiler.
C/C++ gibi dillerde nesne ömrü ve bellek yönetimi programın doğruluğuna doğrudan bağlıdır. RAII kaynak ömrünü lexical scope ile ilişkilendirir. Java ve .NET yönetilen çalışma zamanlarında çöp toplayıcı erişilemez nesnelerin belleğini geri kazanır; fakat dosya tanıtıcısı, socket veya veritabanı bağlantısı gibi dış kaynakların zamanında kapatılması yine program tasarımının sorumluluğundadır.
ABI, ayrı derlenmiş bileşenlerin ikili seviyede nasıl anlaşacağını belirler: çağrı kuralı, yazmaç kullanımı, stack düzeni, veri hizalaması ve sembol bağlama buna dahildir. Kaynak düzeyinde uyumlu görünen iki bileşen ABI uyuşmazlığında birlikte çalışmayabilir.
Programlama paradigmalarının ve çalışma zamanı modellerinin karşılaştırılması Programlama Dilleri, biçimsel dil temeli Otomatlar Kuramı ve Biçimsel Diller, somut dil uygulamaları ise C Programlama, C++ Programlama, Java Programlama ve C# Programlama notlarında bulunur.
10. Veri yapıları ve algoritmalar: asimptotik analizden makine davranışına
Algoritma analizi girdinin büyüklüğü arttığında iş miktarının nasıl değiştiğini açıklar. O(n log n) ile O(n^2) arasındaki fark ölçek büyüdükçe belirleyici olabilir. Bunun yanında alt sınırlar, ortalama durum, beklenen maliyet ve amortize analiz de gerçek veri yapılarının davranışını anlamak için gereklidir.
Amortize analiz tek bir işlemin en kötü maliyetini değil, uzun işlem dizisinin toplam maliyetini inceler. Dinamik dizinin yeniden boyutlandırılması pahalı bir işlem olabilir; ancak geometrik büyüme ile eklemenin amortize maliyeti sabit kalabilir. Benzer biçimde hash tablo yeniden boyutlandırması seyrek fakat pahalıdır.
Teorik karmaşıklık aynı olan algoritmaların sabit çarpanları ve bellek erişim biçimleri farklıdır. Cache-aware ve önbellek-oblivious yaklaşımlar, harici bellek algoritmaları ve veri yönelimli tasarım, işlemci ile bellek arasındaki maliyet farkını hesaba katar. Büyük veri akışlarında tüm veriyi belleğe almak yerine streaming algoritmaları, yaklaşık veri yapıları veya çevrimiçi işleme gerekebilir.
Graf algoritmaları, dinamik programlama, açgözlü yöntemler ve böl-ve-yönet yalnız sınav başlıkları değildir; ağ yönlendirme, zamanlama, arama, optimizasyon ve kaynak tahsisi gibi gerçek sistemlerin temelidir.
Bu alanın ayrıntılı rotası Veri Yapıları ve Algoritma Analizi ve matematik tarafında Ayrık Matematik dersleridir.
11. Veritabanı motorunu yalnız SQL sözdizimiyle anlamamak
İlişkisel veritabanında tablo mantıksal modeldir; fiziksel yürütme ise sayfalar, buffer pool, indeksler, log kayıtları, latch/kilit yapıları ve sorgu planları üzerinden gerçekleşir. SELECT ifadesinin kısa olması, yürütmenin ucuz olduğu anlamına gelmez.
B-ağacı ailesindeki indeksler sıralı erişim ve aralık sorguları için güçlüdür. Hash indeksler farklı erişim kalıplarına uygundur. LSM-tree yaklaşımı yazmayı sıralı yapılara dönüştürerek farklı bir okuma/yazma dengesi kurar. İndeks seçimi, veri dağılımı ve sorgu biçimi birlikte değerlendirilmelidir.
Sorgu iyileştirici olası erişim yolları ve join sıraları arasından maliyet tahminleriyle plan seçer. Kardinalite tahminindeki hata zincirleme biçimde yanlış join yöntemi, bellek tahsisi ve G/Ç maliyeti üretebilir. İstatistikler ve histogramlar bu nedenle yalnız yönetim ayrıntısı değildir.
ACID özellikleri işlem güvenilirliği için çerçeve sunar fakat izolasyon seviyesi gerçek eşzamanlı davranışı belirler. Dirty read, non-repeatable read, phantom ve write skew gibi anomaliler aynı değildir. MVCC okuma/yazma çekişmesini azaltabilir ancak eski sürüm yönetimi, görünürlük ve çakışma kuralları DBMS'e göre değişir.
Write-ahead logging, commit edilen değişikliğin veri sayfasından önce log üzerinden dayanıklılık kazanmasını sağlar. Kurtarma, checkpoint ve redo/undo mekanizmaları arızadan sonra tutarlı duruma dönüşün temelidir.
Kuramsal ve uygulamalı devam için Veri Tabanı Yönetim Sistemleri ile Oracle Veritabanı ve PL/SQL derslerine geçilebilir.
12. Ağlar: paket taşımaktan uçtan uca davranışa
Ağ katmanları, farklı hata ve sorumluluk alanlarını ayırmak için kullanılan soyutlamalardır. Ethernet çerçevesi, IP paketi, TCP segmenti ve uygulama mesajı aynı birim değildir. Her katman farklı başlıklar, adresleme ve hata modeli taşır.
TCP güvenilir bir mesaj protokolü değil, sıralı bayt akışıdır. Uygulama mesaj sınırlarını kendisi tanımlamalıdır. Yeniden iletim, akış kontrolü ve tıkanıklık kontrolü bağlantının davranışını etkiler. UDP daha az mekanizma sunar; düşük gecikme isteyen uygulamalarda yararlı olabilir fakat kayıp, sıralama ve yeniden gönderim sorumluluklarını uygulama veya üst protokol üstlenir.
MTU, parçalanma, MSS ve path MTU discovery gibi konular “paket neden küçük veriyle çalışıp büyük veriyle bozuluyor?” türü sorunların temelidir. Ağ gecikmesi yalnız fiziksel mesafe değildir; kuyruk, yönlendirme, yeniden iletim, şifreleme, uygulama serileştirmesi ve karşı uç işlem süresi birlikte ölçülmelidir.
DNS isim çözümleme için dağıtık ve önbellekli bir sistemdir. TTL ve negatif önbellekleme nedeniyle kayıt değişikliği bütün istemcilere aynı anda görünmeyebilir. HTTP ise taşıma katmanının üzerinde istek/yanıt semantiği, önbellek, kimlik ve içerik aktarımı kurar. Web uygulaması geliştirme tarafı Web Programlama, servis uygulaması tarafı Spring Boot, temel protokol davranışı ise Bilgisayar Ağları derslerinde genişletilir.
13. Dağıtık sistemlerde zaman, kısmi hata ve tutarlılık
Tek makinede bir fonksiyon çağrısının başarısız olması ile ağ üzerinden başka bir düğüme yapılan çağrının sonucu bilinmeden zaman aşımına uğraması aynı değildir. Dağıtık sistemde istek karşı tarafa hiç ulaşmamış, ulaşmış ama yanıt dönmemiş veya işlem tamamlanmış fakat yanıt kaybolmuş olabilir. Bu belirsizlik yeniden deneme tasarımının merkezindedir.
Idempotent işlem aynı mantıksal isteğin tekrar uygulanmasında istenmeyen ek etki üretmez. HTTP yöntemi adı tek başına uygulamayı idempotent yapmaz; sunucu tarafındaki durum geçişi ve benzersiz istek kimliği gibi mekanizmalar gerekebilir. “Exactly once” çoğu gerçek sistemde tek bir ağ garantisi değil, deduplication, transaction ve durum yönetimiyle kurulan uygulama özelliğidir.
Duvar saati dağıtık sıralama için güvenilir tek kaynak değildir. NTP düzeltmeleri saati ileri veya geri taşıyabilir. Geçen süre ölçümünde monoton saat, olay sıralamasında mantıksal saat veya sürüm mekanizmaları gerekebilir. Lamport saatleri nedensel sıralamanın bir bölümünü temsil eder; tüm fiziksel zamanı çözmez.
CAP teoremi “üç özellikten daima ikisini seç” biçiminde kullanılmamalıdır. Sonuç, ağ bölünmesi varken tutarlılık ile erişilebilirliğin aynı anda tam olarak sağlanamayacağı belirli bir model hakkındadır. Normal çalışmada gecikme, replikasyon, dayanıklılık ve tutarlılık arasında çok daha zengin ödünleşimler vardır.
Replikasyon okunabilirliği ve erişilebilirliği artırabilir; fakat lider seçimi, log sırası, quorum ve split-brain gibi sorunlar getirir. Consensus algoritmaları düğümlerin belirli bir durum sırası üzerinde anlaşmasını sağlar; veri tabanının veya iş mantığının bütün sorunlarını otomatik olarak çözmez.
Dağıtık veri davranışının temeli Bilgisayar Ağları, transaction tarafı Veri Tabanı Yönetim Sistemleri, servis tasarımı ise Yazılım Mühendisliği ve Spring Boot ile tamamlanır.
14. Yazılım mühendisliği: değişmezler, sınırlar ve kanıt
Yazılım mühendisliğinin amacı daha fazla sınıf, katman veya belge üretmek değildir; değişiklik altında doğruluğu sürdürülebilir kılmaktır. Gereksinim, mimari, kod, test ve işletim davranışı aynı sistem sözleşmesinin farklı görünümleridir.
İyi tasarım, kritik değişmezleri açık hale getirir. “Bir siparişin toplamı negatif olamaz”, “aynı olay iki kez işlenirse ikinci yan etki oluşmamalıdır” veya “bu durum geçişi yalnız yetkili rolden yapılabilir” gibi kurallar veri modeli, API ve testlerde görünür olmalıdır. Değişmez yalnız yorum satırında kalırsa sistem tarafından korunmaz.
Modülerlik, değişikliklerin etki alanını küçültmek için kullanılır. Yüksek cohesion ve düşük coupling soyut hedeflerdir; pratikte modülün veri sahipliği, hata sınırı, API kararlılığı ve bağımlılık yönü incelenmelidir. Dağıtık mikroservis sayısını artırmak otomatik olarak daha modüler sistem üretmez; ağ çağrıları, dağıtık transaction ve operasyon maliyeti yeni bağlar oluşturabilir.
Test, hatanın bulunmadığını kanıtlamaz; belirli varsayımlar altında belirli özelliklere kanıt üretir. Birim, bütünleşim, sözleşme, yük, hata enjeksiyonu ve uçtan uca testler farklı riskleri hedefler. Kritik algoritmalarda özellik tabanlı test, model tabanlı test veya biçimsel yöntemler klasik örnek tabanlı testleri tamamlayabilir.
Bu alan için Yazılım Mühendisliği ile Yazılım Test Mühendisliği birlikte okunmalıdır.
15. Güvenlik bir özellik değil sistem özelliğidir
Güvenli sistem tasarımı, uygulama tamamlandıktan sonra “güvenlik eklemek” değildir. Varlıklar, saldırgan yetenekleri, güven sınırları ve olası kötüye kullanım yolları tasarım girdisidir. Tehdit modeli olmadan güvenlik kontrolünün hangi riski azalttığı ölçülemez.
En az yetki ilkesi, bir bileşenin yalnız gerekli kaynaklara gerekli süre boyunca erişmesini hedefler. Kimlik doğrulama “kimsin?”, yetkilendirme “ne yapabilirsin?” sorusudur. Bir kullanıcının doğru kimlikle oturum açmış olması her veriye erişebileceği anlamına gelmez.
Kriptografi doğru algoritma seçmekten ibaret değildir. Anahtar üretimi, saklama, döndürme, nonce/IV kullanımı, protokol bağlamı ve hata davranışı en az algoritma kadar önemlidir. Hash fonksiyonu şifreleme değildir; dijital imza gizlilik sağlamaz; TLS ise uygulama yetkilendirmesinin yerine geçmez.
Bellek güvenliği açıkları, komut enjeksiyonu, kimlik doğrulama hataları, yan kanal sızıntıları ve tedarik zinciri riskleri farklı katmanlarda oluşur. Güvenlik sınırları işlemci ayrıcalık seviyesinden uygulama rol modeline kadar uzanır. Modern mikro-mimari saldırılar, performans amacıyla yapılan spekülasyonun güvenlik modeliyle nasıl kesişebildiğinin güçlü örneğidir.
Teknik güvenlik Güvenli Yazılım Mühendisliği, kişisel veri ve hukuki sınırlar Bilişim Hukuku notlarında devam eder. Kurumsal risk yönetimi açısından NIST Cybersecurity Framework 2.0, yönetişim dahil altı fonksiyon üzerinden yüksek seviyeli bir çerçeve sunar.
16. Gerçek zamanlı ve gömülü sistemlerde doğruluk zamana bağlıdır
Gerçek zamanlı sistem “çok hızlı sistem” değildir. Sonucun belirli zaman sınırı içinde üretilmesi doğruluğun parçasıdır. Bir kontrol döngüsünde doğru değer son teslim zamanından sonra gelirse işlevsel olarak yanlış olabilir.
Kesme hizmet rutini, zamanlayıcı, DMA, watchdog, görev önceliği ve paylaşılan kaynaklar gömülü yazılımın temel yapı taşlarıdır. En kötü durum yürütme süresi (WCET), ortalama performanstan farklı bir soruya cevap verir. Güvenlik-kritik sistemde “çoğu zaman yetişiyor” yeterli garanti değildir.
Öncelik terslenmesi, düşük öncelikli görevin tuttuğu kaynağın yüksek öncelikli görevi bekletmesiyle ortaya çıkar. Priority inheritance gibi protokoller belirli koşullarda bu problemi azaltır. Jitter, örnekleme zamanının veya görevin başlama/bitme zamanının ideal periyottan sapmasıdır; kontrol ve sinyal işleme sistemlerinde sayısal kaliteyi doğrudan etkileyebilir.
Gömülü sistemde bellek sınırlı, güç bütçesi düşük ve donanım hataları mümkün olabilir. Dinamik bellek kullanımı, istisna davranışı, yığın sınırı ve watchdog stratejisi masaüstü uygulamadaki tercihlerden farklı değerlendirilebilir.
Donanım-yazılım bütünlüğü Mikroişlemciler, fiziksel sistem bağlantısı Mekatronik, kontrol dinamiği Otomatik Kontrol, uygulama örnekleri Robotik Mühendisliği, Aviyonik Sistemler ve İnsansız Hava Araçları ve RFID Sistemleri notlarında görülebilir.
17. Ölçme, sinyal ve kontrol: yazılım fiziksel dünyaya bağlandığında
Fiziksel sistemde yazılım gerçek değeri doğrudan görmez; sensörün ürettiği ölçümü görür. Ölçüm gürültü, bias, çözünürlük, doğrusal olmayanlık, örnekleme ve kalibrasyon hataları taşır. Bu nedenle “sensörden gelen sayı” ile fiziksel büyüklük aynı kavram değildir.
Nyquist örnekleme koşulu, bant sınırlı sinyalin örnekleme frekansıyla ilişkisini açıklar; aliasing oluştuktan sonra sayısal filtre her zaman kaybedilen bilgiyi geri getiremez. ADC çözünürlüğü ile efektif bit sayısı da aynı olmayabilir; analog gürültü ve referans kalitesi ölçüm doğruluğunu etkiler.
Kontrol sistemi geri besleme yoluyla ölçülen durum ile hedef arasındaki farkı kullanır. Kararlılık, geçici rejim, overshoot ve yerleşme süresi yalnız kontrol algoritmasının katsayılarıyla değil, örnekleme, gecikme, sensör ve aktüatör dinamikleriyle birlikte değerlendirilir.
Bu zincirin matematiksel tarafı Sinyaller ve Sistemler, sensör/metrologi tarafı Ölçme Sistemleri, kapalı çevrim tasarım tarafı Otomatik Kontrol derslerinde ayrıntılandırılır.
18. Yapay zeka ve sayısal hesaplama bilgisayar mühendisliğinin üzerinde çalışır
Makine öğrenmesi modeli soyut matematiksel fonksiyon olarak tanımlansa da üretimde tensör yerleşimi, bellek bant genişliği, sayısal hassasiyet, veri aktarımı, batch büyüklüğü ve hızlandırıcı mimarisiyle çalışır. Model doğruluğu ile sistem gecikmesi aynı optimizasyon hedefi değildir.
Lineer cebir matris işlemlerinin temelidir; olasılık belirsizlik ve tahmini; nümerik analiz koşulluluk ve sayısal hatayı açıklar. Float32, float16, bfloat16 veya int8 gibi temsil seçimleri işlem hacmi ve bellek kullanımını değiştirirken kuantizasyon hatası oluşturabilir.
Eğitim ile çıkarım farklı kaynak profillerine sahiptir. Eğitim gradyan, optimizer state ve büyük ara aktivasyonlar tutabilir. Çıkarım daha düşük bellekle çalışabilir fakat gecikme hedefi, kuyruk ve eşzamanlı istek sayısı belirleyici hale gelir. GPU kullanılması her iş yükünü otomatik olarak hızlandırmaz; veri aktarımı, kernel başlatma maliyeti ve yetersiz paralellik kazancı sınırlar.
Model kalitesi yalnız tek bir ortalama metrikle değerlendirilmemelidir. Veri sızıntısı, dağılım değişimi, kalibrasyon, hata dilimleri ve uç durumlar mühendislik doğruluğunun parçasıdır. Yapay zeka tarafı Yapay Sinir Ağları ve Öğrenme Modelleri, daha geniş kuramsal çerçeve Yapay Zeka: Felsefe, Kuram ve Uygulama, sezgisel optimizasyon ise Genetik Algoritmalar notlarında sürdürülür.
19. Performans mühendisliği: gecikme, işlem hacmi ve kuyruk
Performans “kod hızlı mı?” sorusundan daha geniştir. Gecikme tek işin tamamlanma süresini, işlem hacmi birim zamanda tamamlanan iş miktarını ifade eder. Bu ikisi ilişkili fakat aynı değildir. Sistemi sürekli doygunlukta çalıştırmak işlem hacmini artırabilir ancak kuyruk nedeniyle gecikmeyi keskin biçimde yükseltebilir.
Kuyruk teorisindeki Little yasası kararlı sistemde ortalama eşzamanlı iş sayısını L = λW ilişkisiyle açıklar. Burada λ geliş/işlem hızı, W sistemde geçirilen ortalama süredir. Bu basit ilişki, bekleyen iş sayısı büyüyorsa gecikmenin neden kaçınılmaz olarak yükseldiğini anlamak için güçlüdür.
Ortalama gecikme kuyruklu sistemler için çoğu zaman yetersizdir. p95, p99 ve p99.9 gibi yüzdelikler kuyrukların ve nadir yavaş yolların kullanıcıya etkisini gösterir. Tail latency, fan-out mimarilerinde daha önemlidir; tek isteğin onlarca alt çağrıdan en yavaşını beklemesi üst seviye gecikmeyi büyütür.
Amdahl yasası, hızlandırılmayan seri bölümün toplam hızlanmaya üst sınır koyduğunu gösterir: S(N) = 1 / ((1-P) + P/N). Paralel iş sayısını sınırsız artırmak bu seri kısmı ortadan kaldırmaz. Bellek bant genişliği, kilit çekişmesi ve G/Ç doygunluğu da ölçeklenmeyi sınırlar.
Performans analizi ölçümle yapılmalıdır. CPU profili, allocation profili, önbellek miss, syscall, I/O wait, ağ RTT, veritabanı planı ve kuyruk derinliği farklı hipotezleri sınar. Tek bir “CPU yüzde 40” sayısı kök nedeni açıklamaz.
Uygulamalı performans rotası Java Tabanlı Veri Sistemlerinde Yüksek Başarım, işlemci tarafı Bilgisayar Mimarisi, veri tarafı Oracle Veritabanı ve PL/SQL ile tamamlanabilir.
20. Güvenilirlik, hata modeli ve toparlanma
Güvenilir sistem, hiç hata vermeyen sistem değildir; hangi hataların mümkün olduğunu bilen, etkisini sınırlayan ve tutarlı biçimde toparlanabilen sistemdir. Hata (fault), yanlış iç durum (error) ve dışarıdan gözlenen başarısızlık (failure) aynı kavram değildir.
Tek hata noktası, bir bileşenin kaybının tüm hizmeti durdurduğu yerdir. Yedeklilik bu riski azaltabilir ancak ortak nedenli arıza varsa iki aynı bileşen aynı anda etkilenebilir. Farklı güç hattı, ağ yolu, yazılım sürümü veya fiziksel konum gibi hata alanları bu nedenle mimari kararın parçasıdır.
Retry yalnız başarısız çağrıyı yeniden göndermek değildir. Zaman aşımı, idempotency, maksimum deneme sayısı, exponential backoff, jitter ve toplam süre bütçesi birlikte tasarlanmalıdır. Aksi halde arızalı alt sisteme yönelen senkronize yeniden denemeler yükü daha da artırabilir.
Backpressure, tüketici kapasitesini aştığında üreticinin kontrolsüz veri üretmesini engeller. Sınırsız kuyruk hata çözümü değildir; bellek tüketimini büyütüp yalnız arızayı geciktirebilir. Yük atma (load shedding), kota ve admission control bazı sistemlerde toplam çöküş yerine kontrollü hizmet azalması sağlar.
Durumlu sistemlerde kurtarma öncesi “hangi işlem commit edildi?” sorusunun cevabı açık olmalıdır. Journal, WAL, snapshot, checkpoint ve event log gibi mekanizmalar farklı sistemlerde aynı ana hedefe hizmet eder: gözlenen durumun hangi güvenilir geçmişten üretildiğini bilmek.
Bu düşünce Yazılım Mühendisliği, Veri Tabanı Yönetim Sistemleri ve Yazılım Test Mühendisliği arasında ortak bir sistem mühendisliği eksenidir.
21. Ders haritası: matematik ve kuram
Matematik I, sürekli değişim, türev ve integral üzerinden mühendislik modellerinin temelini kurar.
Matematik II, seri ve çok değişkenli analizle optimizasyon ve yüksek boyutlu modeller için altyapı sağlar.
Ayrık Matematik, mantık, bağıntı, kombinatorik ve graf yapılarıyla algoritmik düşüncenin doğal matematik dilidir.
Lineer Cebir, vektör uzayları, matrisler ve özdeğerler üzerinden grafik, kontrol, sinyal ve makine öğrenmesinin ortak temelini oluşturur.
Diferansiyel Denklemler, dinamik fiziksel sistemlerin ve kontrol modellerinin zaman içindeki davranışını açıklar.
Olasılık ve İstatistik, belirsizliğin modellenmesi, tahmin, güven aralıkları ve deney sonuçlarının yorumlanması için gereklidir.
Nümerik Analiz, sonlu hassasiyet altında hata, kararlılık, yakınsama ve yaklaşık çözüm üretme yöntemlerini inceler.
Otomatlar Kuramı ve Biçimsel Diller, düzenli dillerden hesaplanabilirlik sınırlarına uzanan biçimsel modelleme yaklaşımını verir.
22. Ders haritası: donanım ve sistem yazılımı
Devre Teorisi, elektriksel davranışın fiziksel ve matematiksel temelini kurar.
Elektronik I ve II, yarıiletken elemanlardan analog ve sayısal devrelere geçişi açıklar.
Sayısal Mantık Tasarımı, Boole cebiri, kombinasyonel ve ardışıl devrelerle işlemcinin altında bulunan mantık katmanını kurar.
Bilgisayar Organizasyonu, ALU, yazmaç, veri yolu, denetim ve bellek bileşenlerini çalışan bir işlemci sistemi olarak birleştirir.
Bilgisayar Mimarisi, ISA, boru hattı, önbellek, spekülasyon ve bellek hiyerarşisinin performans sonuçlarını inceler.
Mikroişlemciler, kesme, zamanlayıcı, çevre birimi ve bellek eşlemeli G/Ç üzerinden işlemciyi fiziksel sistemle buluşturur.
İşletim Sistemleri, süreç, iş parçacığı, sanal bellek, dosya sistemi, eşzamanlılık ve G/Ç yönetimini ele alır.
Red Hat Enterprise Linux Sistem Yönetimi, işletim sistemi ilkelerinin üretim sunucusunda servis, süreç, depolama, ağ ve yetki yönetimine dönüşmesini gösterir.
23. Ders haritası: programlama ve yazılım
C Programlama Temelleri, bellek, işaretçi, dizi ve sistem arayüzleriyle makineye yakın programlama modelini öğretir.
C++ ile Nesne Yönelimli Programlama, değer/nesne ömrü, RAII, generic programlama ve nesne yönelimli tasarımı birleştirir.
Java Programlama, JVM üzerinde tür sistemi, nesne modeli, koleksiyonlar, istisna yönetimi, G/Ç ve eşzamanlılık temellerini kurar.
C# Programlama, .NET çalışma zamanı, tür sistemi, delegate/event, LINQ ve asenkron programlama modelini ele alır.
Programlama Dilleri, dil tasarımını tür, kapsam, bellek, paradigma ve çalışma zamanı semantiği açısından karşılaştırır.
Web Programlama, HTTP ve tarayıcı modelinden API ve istemci-sunucu uygulamalarına kadar web çalışma zincirini açıklar.
Spring Boot, Java üzerinde bağımlılık enjeksiyonu, web katmanı, veri erişimi, transaction ve servis mimarisini uygulamaya taşır.
Yazılım Mühendisliği, gereksinimden mimariye, sürümlemeye ve bakıma kadar yazılım yaşam döngüsünün mühendislik disiplinini kurar.
Yazılım Test Mühendisliği, doğrulama ve geçerleme kanıtını birim seviyesinden sistem ve üretim davranışına kadar genişletir.
24. Ders haritası: veri, ağ ve güvenlik
Veri Yapıları ve Algoritma Analizi, problem büyüdükçe zaman ve bellek maliyetinin nasıl ölçeklendiğini ve doğru veri yapısının neden önemli olduğunu inceler.
Veri Tabanı Yönetim Sistemleri, ilişkisel model, indeks, transaction, izolasyon, eşzamanlılık ve kurtarma ilkelerini işler.
Oracle Veritabanı ve PL/SQL, bu ilkeleri gerçek bir kurumsal DBMS'in mimari ve performans davranışı üzerinde derinleştirir.
Bilgisayar Ağları, bağlantı katmanından uygulama protokollerine kadar paketlerin ve uçtan uca iletişimin nasıl çalıştığını açıklar.
Güvenli Yazılım Mühendisliği, tehdit modelini, kimlik/yetki sınırlarını, güvenli kodlamayı ve saldırı yüzeyini yazılım yaşam döngüsüyle birleştirir.
Bilişim Hukuku, kişisel veri, dijital delil, erişim, içerik ve sorumluluk konularında teknik kararların hukuki sınırlarını açıklar.
25. Ders haritası: fiziksel sistemler, sinyal ve yapay zeka
Sinyaller ve Sistemler, zaman ve frekans alanında sistem cevabı, örnekleme ve dönüşüm kavramlarını kurar.
Ölçme Sistemleri, sensör, hata, kalibrasyon, çözünürlük ve belirsizlik üzerinden fiziksel verinin nasıl üretildiğini açıklar.
Otomatik Kontrol, geri besleme, kararlılık ve dinamik cevap üzerinden fiziksel sistem davranışını yönetir.
Mekatronik, mekanik, elektronik, kontrol ve yazılımı aynı sistem sınırında bütünleştirir.
Robotik Mühendisliği, algılama, durum kestirimi, hareket, kontrol ve otonominin birlikte çalışmasını inceler.
Aviyonik Sistemler ve İnsansız Hava Araçları, gerçek zamanlılık, yedeklilik, telemetri, uçuş kontrolü ve emniyet yaklaşımını kritik sistem bağlamında birleştirir.
RFID Sistemleri, elektromanyetik haberleşmeden kimlik verisinin uygulama yazılımına taşınmasına kadar uçtan uca bir gömülü/iletişim örneği sunar.
Yapay Sinir Ağları ve Öğrenme Modelleri, öğrenme algoritmalarını veri, optimizasyon ve üretim davranışıyla birlikte ele alır.
Genetik Algoritmalar, kesin çözümün pahalı olduğu arama uzaylarında evrimsel optimizasyon yaklaşımını inceler.
Kuantum Bilgisayarlar, klasik hesaplama modelinin dışındaki kuantum durum, kapı ve ölçüm modelini ayrı bir hesaplama paradigması olarak ele alır.
26. Bilgisayar mühendisinin sistem soruları
Bir sistemi değerlendirirken teknoloji adından önce aşağıdaki sorular sorulmalıdır:
- Doğruluğu tanımlayan değişmezler nelerdir?
- Verinin ikili ve mantıksal temsili nedir; taşma veya hassasiyet sınırı var mı?
- İş yükünün zaman ve bellek karmaşıklığı nasıl büyür?
- Çalışma kümesi hangi bellek katmanına sığar; erişim örüntüsü yerelliği kullanıyor mu?
- Paylaşılan durum varsa hangi eşzamanlılık ve bellek modeli garantilerine güveniliyor?
- G/Ç veya ağ çağrısı zaman aşımına uğradığında işlemin gerçekleşip gerçekleşmediği biliniyor mu?
- Kalıcı veri hangi noktada gerçekten dayanıklı kabul ediliyor?
- Veritabanı izolasyon seviyesi iş kuralının gerektirdiği anomalileri engelliyor mu?
- Kuyruk büyüdüğünde geri basınç, kota veya yük atma mekanizması var mı?
- Ortalama değil kuyruk uçları ve yüzdelik gecikmeler ölçülüyor mu?
- Hata alanları ve tek hata noktaları tanımlı mı?
- Yeniden deneme idempotent mi; arızayı büyütme riski var mı?
- Güven sınırları, yetki modeli ve anahtar yönetimi açık mı?
- Gerçek zamanlı sistemse son teslim zamanı ve en kötü durum yürütme süresi biliniyor mu?
- Ölçüm/sensör verisinin belirsizlik, kalibrasyon ve zaman damgası güvenilir mi?
- Model veya algoritma doğruluğu gerçek üretim dağılımında ayrıca doğrulanıyor mu?
- Sistem değiştiğinde hangi test, ölçüm ve geri dönüş mekanizması güvence sağlıyor?
Bu soruların ortak özelliği, tek bir dersin sınırında kalmamalarıdır. Bilgisayar mühendisliği tam olarak bu katmanlar arası neden-sonuç ilişkisini kurma disiplinidir.
27. Öğrenme rotaları
Sistem ve performans ağırlıklı rota için Bilgisayar Organizasyonu, Bilgisayar Mimarisi, İşletim Sistemleri, C Programlama, Veri Yapıları ve Algoritmalar ve Java Tabanlı Veri Sistemlerinde Yüksek Başarım birbirini tamamlar.
Kurumsal yazılım ve veri rotası için Programlama Dilleri, Java Programlama, Spring Boot, Veri Tabanı Yönetim Sistemleri, Oracle Veritabanı ve PL/SQL, Bilgisayar Ağları ve Yazılım Mühendisliği birlikte okunabilir.
Gömülü ve fiziksel sistem rotası için Elektronik, Sayısal Mantık, Mikroişlemciler, Sinyaller ve Sistemler, Otomatik Kontrol, Mekatronik ve Robotik Mühendisliği doğal bir zincir oluşturur.
Yapay zeka ve sayısal hesaplama rotası için Lineer Cebir, Olasılık ve İstatistik, Nümerik Analiz, Sinyaller ve Sistemler ve Yapay Sinir Ağları birlikte güçlü temel sağlar.
Güvenlik ve adli bilişim rotası için İşletim Sistemleri, Bilgisayar Ağları, Güvenli Yazılım Mühendisliği ve Bilişim Hukuku teknik ve hukuki katmanları birleştirir.
28. Sonuç: bilgisayar mühendisliğinin birleştirici fikri
Bilgisayar mühendisliğinde bir program, yalnız kaynak kod değildir. Kod bir dilin semantiği içinde çalışır; çalışma zamanı işletim sisteminin kaynaklarını kullanır; işletim sistemi işlemci ve bellek mimarisinin üzerinde yürür; veri ağ ve depolama üzerinden hareket eder; fiziksel sistemlerde sensör, zaman ve kontrol döngüsü işin parçası olur. Güvenlik ve hata toleransı ise bu zincirin tüm katmanlarına yayılır.
Bu nedenle ileri düzey bilgisayar mühendisliği eğitiminin hedefi çok sayıda teknoloji adını ezberlemek değil, soyutlamaların hangi garantileri verdiğini ve hangi koşullarda bu garantilerin kırıldığını anlayabilmektir. Bir sistem yavaşladığında, bozulduğunda veya yanlış sonuç verdiğinde doğru katmana inebilmek; çözümü yalnız semptomu değil kök nedeni hedefleyerek kurabilmek, disiplinin en kalıcı mühendislik becerisidir.
Kaynaklar
- ACM ve IEEE Computer Society, Computer Engineering Curricula 2016. Bilgisayar mühendisliği lisans programları için bilgi alanlarını ve öğrenme hedeflerini tanımlayan ortak müfredat raporu.
- ACM, IEEE Computer Society ve AAAI, CS2023. Bilgisayar bilimi müfredatının güncel bilgi alanları ve öğretim çerçevesi.
- David A. Patterson ve John L. Hennessy. Computer Organization and Design. Morgan Kaufmann.
- John L. Hennessy ve David A. Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann.
- Randal E. Bryant ve David R. O'Hallaron. Computer Systems: A Programmer's Perspective. Pearson.
- Abraham Silberschatz, Peter B. Galvin ve Greg Gagne. Operating System Concepts. Wiley.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest ve Clifford Stein. Introduction to Algorithms. MIT Press.
- James F. Kurose ve Keith W. Ross. Computer Networking: A Top-Down Approach. Pearson.
- Martin Kleppmann. Designing Data-Intensive Applications. O'Reilly Media.
- RISC-V International, RISC-V Ratified Specifications Library. Güncel ISA ve ayrıcalıklı mimari belirtimleri.
- IEEE Std 754-2019. IEEE Standard for Floating-Point Arithmetic.
- Unicode Consortium, The Unicode Standard. Karakter kod noktaları ve Unicode veri modeli.
- Leslie Lamport. Time, Ckilits, and the Ordering of Events in a Distributed System. Communications of the ACM, 1978.
- NIST, Cybersecurity Framework 2.0. Siber güvenlik risklerinin yönetimi için güncel çerçeve.