Genel Bilgisayar Bilimleri Çalışma Grubu Yol Haritası

Hazırlayanlar: Aliberk Sandıkçı

ACM Gazi AR-GE Birimi

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 AlanKısa AçıklamaUygulama Örneği
Teorik Bilgisayar BilimleriHesaplamanın matematiksel temelleri, algoritmaların verimliliği ve sınırları (karmaşıklık teorisi) ile ilgilenirBir 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 ilkeleriMilyonlarca kullanıcısı olan bir bankacılık uygulamasının yaşam döngüsü
Bilgisayar SistemleriDonanım ve yazılımın bir araya geldiği katman. İşletim sistemleri, derleyiciler ve bilgisayar ağlarını kapsarLinux çekirdeğinin geliştirilmesi veya bir ağ protokolü tasarlanması
Veritabanı SistemleriVerinin verimli bir şekilde depolanması, sorgulanması, bütünlüğünün korunması ve yönetilmesi ile ilgilenirBir 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 alanBir 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 alanICPC yarışmasında verilen bir arama problemini en uygun arama algoritması ile çözmek

3. Temel Konular ve Kavramlar

Temel KonuNeden Ö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 zorunludur1. (Programlama ile eş zamanlı)
Programlama TemelleriDeğişkenler, döngüler, koşullar, fonksiyonlar… Bunlar, bilgisayara “ne yapacağını” söylemek için kullanılan temel araçlardır1. (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ı kritiktir3. (Veri Yapıları ile birlikte)
Bilgisayar Mimarisi ve OrganizasyonuBilgisayarı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 önemlidir4.
İş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ı SistemleriVeriyi kalıcı ve yapılandırılmış bir şekilde saklamanın (SQL, Normalizasyon, Transaction) temelleridir7.

4. Ücretsiz Kaynaklar

4.1 Kapsamlı / Genel Kaynaklar

Kaynak AdıTürLinkNot / Öneri
CS50: Introduction to Computer ScienceOnline Kurs (Harvard)cs50.harvard.eduCS’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 / YouTubefreecodecamp.orgÖzellikle Web Geliştirme, Veri Bilimi ve Python üzerine yoğunlaşan binlerce saatlik içerik
Teach Yourself Computer ScienceRehber / Makaleteachyourselfcs.comKendi 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 Rehberigithub.com/ossu/computer-scienceTam bir CS lisans müfredatını ücretsiz online kurslarla tamamlamayı hedefleyen bir kaynak deposu
GeeksforGeeksMakale / Kod Sitesigeeksforgeeks.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ürLinkNot / Öneri
HackerRankİnteraktif Platformhackerrank.comHem 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 Platformusaco.guideAmerikan Bilgisayar Olimpiyatları ekibinin hazırladığı bol örnekli, kaynaklı ve ileri okuma içeren platform
LeetCodeKod Sitesileetcode.comAlgoritma ve veri yapılarında alıştırma yapmak ve kendinizi geliştirmek için kullanabileceğiniz bir site
CodeforcesKod Sitesicodeforces.comAlgoritma ve veri yapılarında alıştırma yapmak ve kendinizi geliştirmek için kullanabileceğiniz bir site
CSESKod Sitesicses.fiAlgoritma 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ı Kaynakcsacademy.com/app/graph_editorGraf’ları somutlaştırmak adına kullanabileceğiniz bir site
VisuAlgoÖğrenmeye Yardımcı Kaynakvisualgo.netAlgoritmaları görselleştirmeye yarayan bir site

5. Popüler Teknolojiler, Programlama Dilleri ve Kütüphaneler

Araç / Dil / KütüphaneKullanım AmacıÖğrenme Kaynağı
PythonGenel amaçlı, yapay zeka, veri bilimi, otomasyon ve web (backend). Başlangıç için idealdirPython.org Docs / CS50’s Python
C / C++Sistem programlama, işletim sistemleri, gömülü sistemler, oyun motorları. Performansın kritik olduğu yerlerSololearn / 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 / TypeScriptWeb’in dilidir. Tarayıcı (Frontend - React, Vue) ve sunucu (Backend - Node.js) tarafında kullanılırMDN Web Docs / The Odin Project
SQL (örn. PostgreSQL)Veritabanları ile iletişim kurmak, veri sorgulamak ve yönetmek için kullanılan standart dilSQLZoo / PostgreSQL Tutorial
GitSürüm (versiyon) kontrol sistemi. Kod değişikliklerini takip etmek ve ekip çalışması yapmak için sektör standardıdırgit-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 beceridirlearnshell.org / Ubuntu Docs

6. Örnek Projeler

Zorluk SeviyesiProjeProje AçıklamasıKullanılacak Teknolojiler
BaşlangıçKişisel Web Sitesi / PortfolyoSizi, 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)
OrtaA* (A-Star) Yol Bulma Algoritması GörselleştiriciBir ı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)
OrtaBasit Bir Web SunucusuGelen 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/İleriBasit 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ı)
İleriBasit 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)
İleriLISP 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)