1. Genel Tanıtım
- Genel Bilgisayar Bilimleri (Computer Science - CS), hesaplamanın (computation), bilginin ve otomasyonun teorik temellerini inceleyen ve bu temellerin bilgisayar sistemlerinde nasıl uygulanıp kullanılacağını araştıran ana bilim dalıdır. Sadece programlamadan ibaret değildir; aynı zamanda algoritmaların, veri yapılarının, bilgisayar mimarisinin, yazılım mühendisliğinin ve yapay zekanın arkasındaki neden ve nasılı da kapsar.
- Bilgisayar Bilimleri, temelde “Bilgi nasıl verimli bir şekilde işlenir, saklanır, iletilir ve güvenli hale getirilir?” ve “Hangi problemler hesaplama yoluyla (otomatik olarak) çözülebilir ve bu ne kadar verimli yapılabilir?” sorularına yanıt arar. Karmaşık problemleri mantıksal ve sistematik adımlara bölerek çözümler üretir.
- Günümüzde dijitalleşen her sektörün temel taşıdır. Tıptan (ilaç keşfi, genom analizi) finansa (algoritmik ticaret, güvenlik), eğlenceden (video oyunları, film efektleri) ulaşıma (otonom araçlar, lojistik optimizasyonu) ve bilime (iklim modellemesi, fizik simülasyonları) kadar her alanda Bilgisayar Bilimleri prensipleri kullanılmaktadır.
- Bu alan, bir “alt dal” değil, teknoloji sektörünün ana gövdesidir. Diğer tüm spesifik alanlar (Siber Güvenlik, Yapay Zeka, Web Geliştirme vb.) bu ana gövdeden çıkan dallardır. Güçlü bir Genel Bilgisayar Bilimleri temeli, sektördeki herhangi bir uzmanlık alanına hızla adapte olabilmeyi sağlar ve kişiyi kod yazan olmaktan problem çözen mühendis olmaya yükseltir.
2. Alt Dallar ve Uzmanlık Alanları
| Alt Alan | Kısa Açıklama | Uygulama Örneği |
|---|
| Teorik Bilgisayar Bilimleri | Hesaplamanın matematiksel temelleri, algoritmaların verimliliği ve sınırları (karmaşıklık teorisi) ile ilgilenir | Bir problemin P mi yoksa NP mi olduğunu analiz etmek |
| Yazılım Mühendisliği (SE) | Büyük ölçekli, güvenilir ve bakımı yapılabilir yazılım sistemlerinin tasarlanması, geliştirilmesi ve yönetilmesi ilkeleri | Milyonlarca kullanıcısı olan bir bankacılık uygulamasının yaşam döngüsü |
| Bilgisayar Sistemleri | Donanım ve yazılımın bir araya geldiği katman. İşletim sistemleri, derleyiciler ve bilgisayar ağlarını kapsar | Linux çekirdeğinin geliştirilmesi veya bir ağ protokolü tasarlanması |
| Veritabanı Sistemleri | Verinin verimli bir şekilde depolanması, sorgulanması, bütünlüğünün korunması ve yönetilmesi ile ilgilenir | Bir e-ticaret sitesinin ürün ve kullanıcı verilerini yöneten ilişkisel (SQL) veritabanı |
| İnsan-Bilgisayar Etkileşimi (HCI) | Teknoloji ve insanlar arasındaki etkileşimi tasarlayan, değerlendiren ve uygulayan çok disiplinli alan | Bir mobil uygulamanın kullanıcı dostu (UX/UI) arayüzünün tasarlanması |
| Rekabetçi Programlama (Competitive Programming) | Verilen problemlerin hem bellek tasarruflu hem de en hızlı çalışacak şekilde çözümünü doğru algoritma ile uygulamaya döken, daha çok yarışmalarda kullanılan alan | ICPC yarışmasında verilen bir arama problemini en uygun arama algoritması ile çözmek |
3. Temel Konular ve Kavramlar
| Temel Konu | Neden Önemli? | Öğrenme Sırası |
|---|
| Ayrık Matematik (Discrete Math) | CS’nin temel dilidir. Mantık, kümeler teorisi, graf teorisi ve olasılık gibi konular, algoritmaları ve veri yapılarını anlamak için zorunludur | 1. (Programlama ile eş zamanlı) |
| Programlama Temelleri | Değişkenler, döngüler, koşullar, fonksiyonlar… Bunlar, bilgisayara “ne yapacağını” söylemek için kullanılan temel araçlardır | 1. (Matematik ile eş zamanlı) |
| Veri Yapıları (Data Structures) | Veriyi bellekte verimli bir şekilde organize etme yöntemleridir (örn. Array, Linked List, Stack, Queue, Hash Table, Tree, Graph) | 2. |
| Algoritmalar (Algorithms) | Belirli bir problemi çözmek için izlenen adım adım talimatlar bütünüdür. Verimlilik (Big O notasyonu), sıralama, arama ve graf algoritmaları kritiktir | 3. (Veri Yapıları ile birlikte) |
| Bilgisayar Mimarisi ve Organizasyonu | Bilgisayarın en temel düzeyde (mantık kapıları, CPU, bellek hiyerarşisi) nasıl çalıştığını anlamayı sağlar. Performanslı kod yazmak için önemlidir | 4. |
| İşletim Sistemleri (Operating Systems) | Donanım kaynaklarını (CPU, bellek) yöneten ve programlara hizmet sağlayan temel yazılımdır (örn. process, thread, memory management) | 5. |
| Bilgisayar Ağları (Computer Networks) | Bilgisayarların nasıl iletişim kurduğunu (TCP/IP, HTTP, DNS protokolleri) anlamayı sağlar. Günümüzdeki her uygulama bir ağ üzerinde çalışır. | 6. |
| Veritabanı Sistemleri | Veriyi kalıcı ve yapılandırılmış bir şekilde saklamanın (SQL, Normalizasyon, Transaction) temelleridir | 7. |
4. Ücretsiz Kaynaklar
4.1 Kapsamlı / Genel Kaynaklar
| Kaynak Adı | Tür | Link | Not / Öneri |
|---|
| CS50: Introduction to Computer Science | Online Kurs (Harvard) | cs50.harvard.edu | CS’e başlamak için en popüler ve motive edici kurslardan biridir. (Python veya C tabanlı seçilebilir) |
| MIT OpenCourseware (6.001, 6.006, 6.042) | Kurs Materyalleri (MIT) | ocw.mit.edu | Üniversite düzeyinde teorik temeller (Yapılar, Algoritmalar, Matematik) için mükemmeldir |
| freeCodeCamp | İnteraktif Platform / YouTube | freecodecamp.org | Özellikle Web Geliştirme, Veri Bilimi ve Python üzerine yoğunlaşan binlerce saatlik içerik |
| Teach Yourself Computer Science | Rehber / Makale | teachyourselfcs.com | Kendi kendine CS öğrenmek isteyenler için hangi kitapların ve konuların takip edilmesi gerektiğini anlatan bir rehber |
| OSS-U (Open Source Society University) | GitHub Rehberi | github.com/ossu/computer-science | Tam bir CS lisans müfredatını ücretsiz online kurslarla tamamlamayı hedefleyen bir kaynak deposu |
| GeeksforGeeks | Makale / Kod Sitesi | geeksforgeeks.org | Özellikle Veri Yapıları ve Algoritmalar konusunda mülakatlara hazırlık ve konu öğrenmek için devasa bir kaynak |
Önemli Not: Tavsiyem, bu kaynakların her birinin giriş kısımlarını inceleyip sizin öğrenme tarzınıza en uygun olanlardan devam etmenizdir. İdeal olarak 1 veya en fazla 2 kaynağı takip edebilir, anlamadığınız veya ekstra bilgi edinmek istediğiniz konularda diğer kaynaklara başvurabilirsiniz.
4.2 Algoritma / Veri Yapıları ve Rekabetçi Programlama (CP/ICPC) için Bonus Kaynaklar
| Kaynak Adı | Tür | Link | Not / Öneri |
|---|
| HackerRank | İnteraktif Platform | hackerrank.com | Hem Algoritma ve problem çözme hem de programlama dillerinin inceliklerini öğrenmek adına kullanılabilecek köklü ve interaktif bir eğitim platformu |
| USACO Guide | İnteraktif Platform | usaco.guide | Amerikan Bilgisayar Olimpiyatları ekibinin hazırladığı bol örnekli, kaynaklı ve ileri okuma içeren platform |
| LeetCode | Kod Sitesi | leetcode.com | Algoritma ve veri yapılarında alıştırma yapmak ve kendinizi geliştirmek için kullanabileceğiniz bir site |
| Codeforces | Kod Sitesi | codeforces.com | Algoritma ve veri yapılarında alıştırma yapmak ve kendinizi geliştirmek için kullanabileceğiniz bir site |
| CSES | Kod Sitesi | cses.fi | Algoritma ve veri yapılarında alıştırma yapmak ve kendinizi geliştirmek için kullanabileceğiniz bir site. Üstteki iki sitenin aksine amacı hikayeli düşündürücü sorulardan çok düz ve algoritmaların temel kullanımlarına odaklanan sorular |
| CS Academy Graph Editor | Öğrenmeye Yardımcı Kaynak | csacademy.com/app/graph_editor | Graf’ları somutlaştırmak adına kullanabileceğiniz bir site |
| VisuAlgo | Öğrenmeye Yardımcı Kaynak | visualgo.net | Algoritmaları görselleştirmeye yarayan bir site |
5. Popüler Teknolojiler, Programlama Dilleri ve Kütüphaneler
| Araç / Dil / Kütüphane | Kullanım Amacı | Öğrenme Kaynağı |
|---|
| Python | Genel amaçlı, yapay zeka, veri bilimi, otomasyon ve web (backend). Başlangıç için idealdir | Python.org Docs / CS50’s Python |
| C / C++ | Sistem programlama, işletim sistemleri, gömülü sistemler, oyun motorları. Performansın kritik olduğu yerler | Sololearn / cppreference.com |
| Java / C# | Kurumsal (enterprise) uygulamalar, büyük ölçekli backend sistemleri, Android (Java) ve oyun geliştirme (C# - Unity) | W3Schools Java / MS C# Docs |
| JavaScript / TypeScript | Web’in dilidir. Tarayıcı (Frontend - React, Vue) ve sunucu (Backend - Node.js) tarafında kullanılır | MDN Web Docs / The Odin Project |
| SQL (örn. PostgreSQL) | Veritabanları ile iletişim kurmak, veri sorgulamak ve yönetmek için kullanılan standart dil | SQLZoo / PostgreSQL Tutorial |
| Git | Sürüm (versiyon) kontrol sistemi. Kod değişikliklerini takip etmek ve ekip çalışması yapmak için sektör standardıdır | git-scm.com/book / GitHub Skills |
| Linux (Bash/Shell) | Sunucuların %90’ından fazlası Linux üzerinde çalışır. Komut satırı (CLI) kullanımı temel bir beceridir | learnshell.org / Ubuntu Docs |
6. Örnek Projeler
| Zorluk Seviyesi | Proje | Proje Açıklaması | Kullanılacak Teknolojiler |
|---|
| Başlangıç | Kişisel Web Sitesi / Portfolyo | Sizi, projelerinizi ve yeteneklerinizi tanıtan statik bir web sitesi. | HTML, CSS, (opsiyonel JavaScript) |
| Başlangıç | Basit Hesap Makinesi (GUI ile) | Temel dört işlemi yapabilen, grafik arayüze sahip bir masaüstü uygulaması. | Python (Tkinter) veya Java (Swing) veya Linux için Python (GTK) |
| Orta | A* (A-Star) Yol Bulma Algoritması Görselleştirici | Bir ızgara üzerinde başlangıç ve bitiş noktası arasındaki en kısa yolu bulan A* algoritmasını görselleştiren bir araç. | Python (Pygame) veya JavaScript (HTML Canvas) |
| Orta | Basit Bir Web Sunucusu | Gelen HTTP isteklerini (request) anlayan ve basit HTML sayfalarıyla yanıt (response) verebilen bir sunucu yazılımı. | Python (socket kütüphanesi) veya Golang (http modülü) |
| Orta/İleri | Basit bir “Shell” (Komut Satırı Yorumlayıcısı) | ls, cd, grep gibi temel komutları alıp işletim sistemine çalıştıran basit bir komut satırı arayüzü. | C veya C++ (fork, exec, pipe sistem çağrıları) |
| İleri | Basit bir “Chat” Uygulaması | Birden fazla istemcinin (client) bir sunucuya (server) bağlanarak birbirlerine anlık mesaj gönderebildiği bir uygulama. | Python/Java/Go (Sockets, Threads/Async) |
| İleri | LISP Yorumlayıcısı (veya benzeri) | LISP dilinin (veya kendi basit dilinizin) temel sözdizimini (syntax) okuyup (parse) değerlendiren (evaluate) bir program. | Herhangi bir dil (örn. Python) |