Bilgisayar bilimi

Bilgisayar bilimi, bilgisayarların tasarımı ve kullanımı için temel oluşturan teori, deney ve mühendislik çalışmasıdır.Hesaplamaya ve uygulamalarına bilimsel ve pratik bir yaklaşımdır.Bilgisayar bilimi; edinim, temsil, işleme, depolama, iletişim ve erişimin altında yatan yönteme dayalı prosedürlerin veya algoritmaların fizibilitesi, yapısı, ifadesi ve mekanizasyonunun sistematik çalışmasıdır.Bilgisayar biliminin alternatif, daha özlü tanımı "büyük,orta veya küçük ölçekli algoritmik işlemleri otomatikleştirme çalışması" olarak nitelendirilebilir.Bir bilgisayar bilimcisi, hesaplama teorisi ve hesaplama sistemlerinin tasarımı konusunda uzmanlaşmıştır.
Alanları teorik ve pratik disiplinlere ayrılabilir. Bilgisayar grafikleri gibi alanlar, gerçek dünya görsel uygulamalarını vurgularken, hesaplamalı karmaşıklık teorisi (hesaplama ve zor olan sorunların temel özelliklerini araştıran) gibi bazı alanlar oldukça özeldir.Diğer alanlar sıklıkla hesaplamanın uygulanması konusunda karşılaşılan zorluklara odaklanmaktadır. Örneğin, programlama dili teorisi, hesaplamanın tanımlamasına yönelik çeşitli yaklaşımları ele alırken, bilgisayar programcılığının kendisi de programlama dili ve karmaşık sistemlerin kullanımının çeşitli yönlerini inceler.Bununla beraber insan-bilgisayar etkileşimi alanı; bilgisayarları ve hesaplamaları yararlı, kullanışlı ve evrensel olarak insanlara ulaştırmaya yönelik zorlukları tanımlamaya ve onları aşmaya çalışmaktadır.

Tarihi

Daha sonraları bilgisayar bilimi haline gelecek olgunun en eski temelleri, modern dijital bilgisayarın icadından önce gelmektedir. Abaküs gibi sabit sayısal işlemler için kullanılan hesap makineleri, antik çağlardan beri var olmuştur.Bunlar çarpma ve bölme gibi temel hesaplamalara yardımcı oluyordu. Ayrıca, hesaplamaları gerçekleştirmek için kullanılan algoritmalar, antik çağlardan beri, hatta gelişmiş bilgisayar ekipmanlarının geliştirilmesinden önce de var olmuştur.
Blaise Pascal, 1642'de kendi ismini verdiği mekanik hesap makinesini tasarladı ve geliştirdi. 1673'te Gottfried Leibniz, "Stepped Reckoner" adında bir dijital mekanik hesap makinesi tasarladı. İlk bilgisayar bilimcisi ve bilgi teorisyeni olarak düşünebilir.Leibniz'i ilk bilgisayar bilimcisi olarak kabul etmemiz için diğer sebeplerin yanı sıra kendisinin, ikili sayı sisteminde belgeli ve sistemli biçimde çalışmış olması yeterlidir.Thomas de Colmar, 1820'de mekanik hesap makinesi endüstrisini başlattı ve basitleştirilmiş arithmometre'yi piyasaya sundu. Bu hesap makinesi, günlük olarak ofis ortamında kullanılabilecek kadar donanımlı ve güvenilir ilk hesap makinasıydı. Charles Babbage, 1822'de ilk "Otomatik çalışan mekanik hesap makinesi" olan Difference Engine'in tasarımını başlattı ve bu çalışmalarının neticesinde ona ilk programlanabilir mekanik hesap makinesi fikri  olan "Analitik Tabanlı Motor" ismini verdi. Bu makineyi 1834'te geliştirmeye başladı ve iki yıldan az bir sürede modern bilgisayarın göze çarpan özelliklerinin çoğunu çizmişti. 1843 yılında Ada Lovelace, "Analitik Motor" hakkındaki bir Fransız makalesinin çevirisi sırasında, içerdiği birçok nottan birinde, günümüzde ilk bilgisayar programı olarak düşünülen Bernoulli sayılarını hesaplamak için bir algoritma yazdı. 1885 civarında Herman Hollerith, istatistiksel bilgileri işlemek için delikli kartlar kullanan çizelgeleyiciyi(tabulator) icat etti; Sonunda çalışmaları kendi şirketi IBM'in bir parçası haline geldi. 1937'de, Babbage'ın imkânsız rüyasından yüz yıl sonra, Howard Aiken, her türden delikli kart ekipmanı üreten IBM'i ikna etti ve Babbage'ın Analitik Motor fikrinden yola çıkarak dev programlanabilir hesap makinesi geliştirmek için çalışmalar yaptı.Başarıyla yürüttüğü çalışmalarının sonucunda "ASCC / Harvard Mark I" hesap makinesini icat etti. Bu cihazda kartlar ve merkezi işlem birimi(CPU) kullanıldı. Makine çalışması bittiğinde, çevresindekiler "Babbage'nin hayali gerçeğe dönüştü!" diyerek Howard Aiken'i takdir ettiler.
1940'lı yıllarda, yeni ve daha güçlü bilgi işlem makineleri geliştirildiğinde, hesaplama terimi için insanlardan ziyade makinelere atıfta bulunulmaktaydı. Bilgisayarların sadece matematiksel hesaplamalardan daha fazlası için kullanılabileceği netleştikçe, bilgisayar bilimi alanı, genel olarak hesaplamayı incelemek üzere genişletildi. Bilgisayar bilimi, 1950'lerde ve 1960'ların başında ayrı bir akademik disiplin olarak kurulmaya başlandı. Dünyanın ilk bilgisayar bilimleri lisans programı olan Cambridge Bilgisayar Bilimleri diploması, 1953'te Cambridge Bilgisayar Laboratuvarı'nda verilmeye başladı.ABD'deki ilk bilgisayar bilimleri programı, 1962'de Purdue Üniversitesi'nde kuruldu. Pratik bilgisayarlar piyasaya çıktığından beri, birçok bilgisayar uygulaması, kendi sistemlerine sahip farklı birer çalışma alanları haline geldi.
Başlangıçta pek çok insanın, bilgisayarın bilimsel bir çalışma alanı olmasının imkânsız olduğuna inanmasına rağmen, bilgisayarlar 1950'li yıllarda giderek daha fazla akademik nüfus arasında kabul gördü. Bu süre zarfında bilgisayar bilimleri devriminin bir parçasını oluşturan günümüzde geniş kitleler tarafından bilinen IBM markası sesini duyurmaya başladı. IBM (International Business Machines'in kısaltması), IBM 704  ve daha sonra bu tür cihazların arama periyodu boyunca yaygın olarak kullanılan IBM 709  bilgisayarlarını piyasaya sürdü. "Yine de bu ilkel IBM bilgisayarı ile çalışırken bir harfi yanlış yerleştirmiş olsaydınız sinir bozucu olurdu, çünkü program çökerdi ve bütün süreci yeniden baştan başlatmanız gerekirdi."1950'lerin sonlarında bilgisayar bilimleri disiplini gelişim aşamasında idi ve bu tür sorunlar sıradan olarak kabul görmekteydi.
Zaman, bilgisayar teknolojisinin kullanışlılığında ve etkinliğinde önemli gelişmeler kaydetti. Modern toplumda,bilgisayar teknolojileri yalnızca uzmanlar ve profesyoneller tarafından değil, neredeyse her yerde bulunan kullanıcı tabanına ulaştı.Bilgisayar teknolojisi kullanıcılarında ciddi ve belirgin bir artış yaşandı. Başlangıçta, bilgisayarlar oldukça pahalıydı ve kısmen profesyonel bilgisayar operatörleri tarafından verimli bir şekilde kullanılmak için bir miktar insan yardımına yani teknik desteğe ihtiyaç vardı. Bilgisayarın geniş kitleler tarafından benimsenmesi ancak bilgisayarların daha geniş ve uygun fiyatlı hale gelmesiyle ve ortak kullanım için daha az insan faktörüne ve teknik desteğe ihtiyaç duyulduğunda mümkün hale geldi.

Katkıları

Bilgisayar bilimi, resmi bir akademik disiplin olarak kısa geçmişine rağmen, bilime ve topluma bir takım önemli katkılar sağlamıştır. -özellikle elektronikle birlikte- Bilgi Çağında kurulan bir bilimdir ve insanlığın ilerlemesinde adeta bir şoför haline gelmiştir.İnsanlığın teknolojik ilerlemesinde büyük sıçrayış olarak görülen bilimsel bilgiye dayalı karar verme ve günümüzün bilgi toplumu ideallerinin temel yapıtaşlarından birisi haline gelmiştir.
Bu katkılar şunları içerir:
Mevcut bilgi çağını ve İnternet'i içeren dijital devrimin başlangıcıdır.
Hesaplamanın ve hesaplanabilirliğin biçimselleştirilmiş bir tanımıdır.Bilgisayar bilimi; hesaplanamaz,çözülemez ve zor olarak kabul edilmiş problemlerin çözülebileceğinin bir nevi kanıtıdır.
Çeşitli soyutlama seviyelerinde metodolojik bilgilerin tam olarak ifade edilmesi için araç olan programlama dili kavramı türemiştir.
Kriptografi alanında örneğin Enigma kodunu kırmak, İkinci Dünya Savaşı sırasında Müttefiklerin zaferine katkıda bulunan önemli bir faktördü.
Bilgisayar uygulamaları sayesinde bilimsel hesaplama yöntemleri gelişmiştir.Böylelikle süreçlerin ve durumların pratik olarak değerlendirilmesi ve kısmi de olsa süreçleri kontrol edilebilir bir karmaşıklığa indirgenmesi mümkün hale gelmiştir.
Aynı zamanda insan zihni üzerinde ileri düzeyde çalışmayı mümkün kıldı ve "İnsan Genomu Projesi" ile insan genomunun haritalandırılması mümkün oldu.Örneğin Folding@home gibi dağıtık bilgi işlem projeleriyle protein katlanması keşfedildi.
Algoritmaya dayalı ticaret alanında yapay zekâ, makine öğrenimi,istatistiksel ve sayısal teknikler vb. bilgisayar bilimleri konuları kullanılarak finansal piyasalardaki verimlilik ve likidite arttı. Ayrıca yüksek frekanslı algoritmik ticaret de volatiliteyi artırmıştır.
Bilgisayar grafikleri ve bilgisayar tarafından oluşturulmuş görüntüler, özellikle televizyon, sinema, reklam, animasyon ve video oyunlarında kullanılmış ve özetle modern eğlence dünyasında her yerde kullanılır hale gelmiştir.Hatta kullanılan tekniğe göre değişmekle beraber yapaylık içermeyen CGI teknolojili filmler genellikle dijital kameralar üzerinde filme alınmakta, dijital video düzenleyicisi kullanılarak düzenlenip veya post-processing tekniğiyle işlenebilmektedir.Bu sayede günümüz filmlerindeki efektler başarılı şekilde uygulanmaktadır.
Akışkanlar dinamiği hesaplamalarında, fiziksel, elektriksel ve elektronik sistemlerde, devre tasarımlarında, toplumların yaşantısı, sosyal durumlar (özellikle savaş oyunları) ve ortak yaşam alanları gibi çeşitli süreçlerde bilgisayar simülasyonları kullanılmaktadır.Modern bilgisayarlar, uçak gibi özel tasarımların optimizasyonunu mümkün kılmaktadır. Elektrikli ve elektronik devre tasarımında dikkat çeken unsurlar SPICE ve yeni (veya değiştirilmiş) tasarımların fiziksel olarak gerçekleştirilmesi için yazılımlardır. Ayrıca, entegre devreler için gerekli tasarım yazılımının kullanılması da mümkündür.
Yapay zekâ daha verimli ve karmaşık bir hal aldığından giderek önem kazanmaktadır. Yapay zekânın birçoğu evde görülebilen formdadır, örneğin robotik elektrikli süpürgeler gibi birçok yapay zekâ uygulaması vardır. Video oyunları, modern savaş teknolojilerinde dronlar ve füzesavar sistemleri kullanılmaktadır.Ve ayrıca takım destekli robotlar da yapay zekânın kullanım alanlarına örnek olarak gösterilebilir.

Etimoloji

İlk 1956'da önerilmiş olmasına rağmen  "bilgisayar bilimi" terimi 1959'da ACM'nin İletişim Bildirisinde ortaya çıkar , çünkü Louis Fein 1921 yılında Harvard Business School'un yaratılışına benzer şekilde bilgisayar bilimleri için de bir enstitünün kurulmasını savunmaktadır.Yönetim bilimi(management science) gibi bir alanın akademik disipline özgü özelliklere sahip olarak tanınmasına rağmen pek çok konuda uygulanmış ve disiplinler arası bir nitelikte olan bilgisayar biliminin akademik yönlerini savunarak kendini haklı çıkarmıştır. Kendisinin bu yöndeki çabaları ve diğer pek çok sayısal analizci George Forsythe gibi isimlerin çabaları ödüllendirildi: Üniversiteler 1962'de Purdue'den başlayarak üniversitelerinin bünyesinde bu tür programlar açmaya başladı. Bu kabule rağmen kayda değer bir kitle de bilgisayar biliminin salt bilgisayardan ibaret olmadığını ve kelimenin yetersiz olduğunu savunmaktaydı. Bu nedenle, birkaç alternatif ismi önerildi. Büyük üniversitelerin bazı bölümleri, bu farkı tam olarak vurgulamak için bilgisayar bilimi terimini tercih etmektedir. Danimarkalı bilim adamı Peter Naur,bu bilimsel disiplinin yani bugün bilgisayar bilimleri olarak anılan alanın, veri ve veri işleme konuları etrafında şekillenmesi gerektiğini savunmaktaydı ve  dataloji(datalogy)  terimini önerdi; bu sayede bahsi geçen disiplinin uğraş alanına mutlaka bilgisayarların dahil olmadığı savunuluyordu. Bu terimi kullanan ilk bilimsel kurum, 1969'da kurulan Kopenhag Üniversitesi'nde Dataloji Bölümü'nden ve Peter Naur'un dataloji bölümünün ilk profesörü olmasından kaynaklanmaktadır. Terim ağırlıklı olarak İskandinav ülkelerinde kullanılmaktadır. Naur tarafından da önerilen alternatif bir terim veri bilimidir; ancak bu terim artık istatistik ve veritabanlarının dahil edildiği farklı bir veri analizi alanı disiplini için kullanılmaktadır.
Ayrıca, bilgisayarlı hesaplamanın ilk dönemlerinde Communications of the ACM bünyesinde çalışan bazı pratisyenlerin birkaç kelimesi önerildi: turingineer, turologist, flow-charts-man, applied meta-mathematician, ve applied epistemologist. Üç ay sonra aynı dergide comptologist  kavramı öne sürüldü ve ertesi sene bunu hypologist kelimesi takip etti.  Sonraki çalışmalarda computics terimi de önerildi. Avrupa'da, " automatic information " ifadesinin (örneğin, İtalyanca'daki "informazione automatica") sözleşmeli çevirileri yapılmasından sonra "information and mathematics" gibi kavramlar türetilmiş, örneğin; informatique (Fransızca), Informatik (Almanca), informatica (İtalyanca, Hollanda dili), informática (İspanyolca, Portekizce), informatika (Slav dilleri ve Macarca) veya Yunanca olarak pliroforiki  (πληροφορική: bilişim anlamına gelir). Benzer kelime, Birleşik Krallık'ta (as in the School of Informatics of the University of Edinburgh) kabul edilmiştir. "Bununla birlikte, ABD'de  informatics, uygulamalı bilgisayar bilimleriyle ilişkilidir veya bilgisayarlı hesaplama alanında çalışılan başka bir uğraş ile birlikte anılmaktadır."
İlk kez Edsger Dijkstra tarafından formüle edilmemiş olmasına rağmen sıklıkla Dijkstra'ya atfedilen bir alıntıda kendisi bilgisayar bilimi için "teleskop ile kozmoloji ne kadar ilintiliyse, bilgisayar ile bilgisayar bilimleri de aynı şekilde ilintilidir." sözlerini belirtmektedir.Bilgisayarların, bilgisayar sistemlerinin tasarımı ve yerleştirilmesi genel olarak bilgisayar bilimleri dışındaki disiplinler olarak düşünülür. Örneğin, ticari bilgisayar sistemlerinin incelenmesi ve konuşlandırılmasına genellikle bilgi teknolojisi veya bilgi sistemleri denirken, bilgisayar donanımının çalışması genellikle bilgisayar mühendisliğinin bir parçası olarak düşünülür. Bununla birlikte, bilgisayar bilimi ile çeşitli disiplinler arasında ciddi bir etkileşim söz konusudur ve akademik çevrelerce göz ardı edilmemesi gerektiği düşünülmektedir.Bu nedenle bilgisayar bilimi araştırmaları; felsefe, bilişsel bilim, dil bilimi, matematik, fizik, biyoloji, istatistik ve mantık gibi diğer disiplinleri de sıklıkla kesiştirir.
Bilgisayar bilimleri ve etkileşimde bulunduğu disiplinler hakkında bazı gözlemciler, örneğin hesaplama alanının matematiksel bir bilim olduğunu savunarak,bilgisayar bilimlerinin birçok bilimsel disiplinden ziyade matematikle daha yakın bir ilişki kurduğunu düşünüyordu.Erken bilgisayar bilimi Kurt Gödel ve Alan Turing gibi matematikçilerin çalışmalarından büyük ölçüde etkilenmiştir ve matematiksel mantık, kategori teorisi, alan teorisi ve cebir gibi alanlar göz önünde bulundurulduğunda bilgisayar bilimi ve matematik arasında bilgilerin yararlı bir şekilde değişimi açıkça görülmektedir.
Bilgisayar bilimi ve yazılım mühendisliği arasındaki ilişki ise tartışmalı bir konudur."Yazılım mühendisliği" teriminin ne anlama geldiği ve bilgisayar biliminin nasıl tanımlandığına dair anlaşmazlıklar nedeniyle karışıklığa neden olur. Diğer mühendislik ve bilim disiplinleri arasındaki ilişkiden bir ipucu alarak David Parnas, yazılım mühendisliğinin temel odağının pratik nitelikli amaca ulaşmak için spesifik hesaplamalar dizayn etmek olduğunu, bilgisayar biliminin odak noktasının ise genel olarak hesaplama ve onun özelliklerini incelediğini iddia etti. Bu iki alanların ayrı ama birbirini tamamlayıcı disiplinler oldukları düşünülmekteydi.
Bilgisayar biliminin akademik, politik ve finansman yönleri, bu bölümün matematiksel bir vurguyla veya bir mühendislik vurgusu ile oluşup oluşmadığına bağlıdır. Matematik ağırlıklı ve sayısal oryantasyona sahip bilgisayar bilimleri bölümleri, sayısal bilimlerle uyum sağlamayı yani entegrasyonu esas almaktadırlar.Mühendislik ya da matematik ağırlıklı bilgisayar bilimleri bölümlerinin her ikisi de kendi alanlarına eğitici nitelik kazandırmak için diğer bilimlerle bağlantı kurmak ve disiplinler arası bir eğitim modeli yaratmak için çaba harcamaktadırlar.

Felsefe

Birtakım bilgisayar bilimcisi, bilgisayar bilimlerini üç ayrı paradigmaya ayırmak için fikir beyan ettiler. Peter Wegner, bu paradigmaların bilim, teknoloji ve matematik olduğunu savundu. Peter Denning'in çalışma grubu ise, bu paradigmaların teori, soyutlama (modelleme) ve tasarım olduğunu savundu. Amnon H. Eden ise "rasyonalist paradigma" (bu yaklaşım teorik bilgisayar bilimlerinde yaygın olarak kullanılan tümdengelim gibi konuların matematik kökenli olmasından dolayı bilgisayar bilimini matematiğin bir branşı olarak kabul etmektedir.) "teknokratik paradigma" (mühendislik yaklaşımlarını, belirgin olarak yazılım mühendisliğini bilgi işlem teknolojilerinde esas alma ve toplumda statülendirme) ve "bilimsel paradigma" (yapay zekânın bazı dallarında tanımlanabilen bilgisayarlarla ilgili çalışmalara doğal bilimin ampirik bakış açısıyla yaklaşmaktadır.) ayrımlarından bahsetmiştir.

Bilgisayar biliminin alanları

Bilgisayar bilimi, bir disiplin olarak, algoritmaların teorik çalışmalarından hesaplama ve hesaplama sınırları çalışmalarına, donanım ve yazılım alanlarında bilgisayar sistemlerinin uygulanmasına ilişkin pratik ve teorik olmak üzere bir dizi konuyu kapsar. Computing Sciences Accreditation Board (Computing Sciences Akreditasyon Kurulu) olarak adlandırılan ve Computing Machinery Association (ACM) ve IEEE Computer Society (IEEE CS)  temsilcilerinden oluşan CSAB, bilgisayar disiplininde önemli olduğunu düşündüğü dört alanı şöyle tanımlamaktadır:
Bilgisayar bilimi:
1)hesaplama teorisi
2)algoritmalar ve veri yapıları
3)programlama metodolojisi ve dilleri
4)bilgisayar elemanları ve mimarisi
CSAB ayrıca, bilgisayar bilimlerinin önemli alanları olarak; yazılım mühendisliği, yapay zekâ, bilgisayar ağı ve iletişim, veritabanı sistemleri, paralel hesaplama, dağıtık hesaplama, insan-bilgisayar etkileşimi, bilgisayar grafikleri, işletim sistemleri ve sayısal ve sembolik hesaplama gibi alanları tanımlamaktadır.

Teorik bilgisayar bilimleri

Teorik bilgisayar bilimleri, matematiksel ve soyut olarak özetlenebilir, ancak motivasyonunu pratik ve günlük hesaplamalardan almaktadır. Amacı, hesaplamanın doğasını anlamak ve bu anlayışın bir sonucu olarak daha etkili metodolojiler geliştirmektir.Günümüzde matematiksel, mantıksal, standart kavram ve yöntemleri izah eden tüm makaleler, motivasyonlarının kaynağı olarak bilgisayar bilimi uygulamalarını net bir şekilde belirtip belirtmemesi ölçütünde kabul görmektedirler.

Bilgi ve kodlama teorisi

Bilgi teorisi, bilginin nicelleştirilmesi ile ilgilidir. Bu teori, veri sıkıştırması,verilerin depolanması ve iletilmesi gibi sinyal işleme operasyonlarının temel sınırlarını bulmak için Claude Shannon tarafından geliştirildi. Kodlama teorisi, kodların özelliklerinin incelenmesi (bilgileri bir formdan diğerine dönüştürmek için kullanılan sistemler) ve bunların belirli bir uygulama için uygunluğunu inceler. Kodlar veri sıkıştırma, şifreleme, hata algılama ve düzeltme ve daha yakın zamanda ağ kodlaması için de kullanılır. Kodlar, etkin ve güvenilir veri iletim yöntemleri tasarlamak amacıyla incelenir.

Algoritmalar ve veri yapıları

Algoritmalar ve veri yapıları, yaygın olarak kullanılan hesaplama yöntemlerinin ve bunların hesaplama verimliliğinin incelenmesidir.

Programlama dili teorisi

Programlama dili teorisi, programlama dillerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile tekil özellikleri ele alan bir bilgisayar bilimi dalıdır. Hem matematiğe, hem yazılım mühendisliğine hem de dil bilimine bağlı olan bu alan bilgisayar biliminin disiplini içine girmektedir. Çok sayıda akademik dergisi bulunan etkin bir araştırma alanıdır.

Biçimsel yöntemler

Biçimsel yöntemler, yazılım ve donanım sistemlerinin spesifikasyonu, geliştirilmesi ve doğrulanması için matematik temelli bir tekniktir. Yazılım ve donanım tasarımı için biçimsel yöntemlerin kullanılması, diğer mühendislik disiplinlerinde olduğu gibi, uygun matematiksel analizlerin yapılması sayesinde geliştirilmekte olan bir tasarımın sağlamlığına ve güvenilirliğine katkıda bulunabileceği beklentisinden kaynaklanmaktadır. Yazılım mühendisliği için, özellikle emniyet veya güvenlikle ilgili önemli teorik bir temel oluşturmaktadır. Biçimsel yöntemler, hataları önlemeye yardımcı olduklarından ve sınama için bir çerçeve oluşturabildiklerinden, yazılım testi için kullanışlı bir yardımcıdır. Endüstriyel kullanım için ise takım desteği gereklidir. Bununla birlikte, biçimsel yöntemleri endüstride kullanmanın yüksek bedelinden ötürü,kullanım alanı genellikle güvenlik veya güvenliğin çok önemli olduğu, yüksek bütünlük gerektiren kritik yaşam sistemleri vb. alanların geliştirilmesi gibi uygulamalarla sınırlıdır. Biçimsel yöntemler en temel teorik bilgisayar bilimi konularının, özellikle mantık hesapları, biçimsel diller, otomata teorisi ve program semantiği gibi oldukça geniş bir çeşitliliğin uygulanması olarak tanımlanır; aynı zamanda, yazılım ve donanım özelliklerinde sorunların üstesinden gelmek için programlama dillerindeki tip sistemleri,cebirsel veri türleri ve doğrulama vb. alanları kullanmaktadır.

Uygulamalı bilgisayar bilimleri

Uygulamalı bilgisayar bilimi, gerçek dünya problemlerini çözmede doğrudan kullanılabilecek bazı bilgisayar bilimi kavramlarını araştırmayı, tanımlamayı, modellemeyi ve geliştirmeyi amaçlamaktadır.

Bilgisayar mimarisi ve mühendisliği

Bilgisayar mimarisi veya dijital bilgisayar organizasyonu, bir bilgisayar sisteminin kavramsal tasarımı ve temel operasyonel yapısıdır.Büyük ölçüde merkezi işlem biriminin(CPU) dahili olarak nasıl çalıştığına ve hafızadaki adreslere erişim sistemine odaklanmaktadır. Bu çalışma alanı; işlevsellik, performans ve maliyet hedeflerini karşılayan bilgisayarlar oluşturmak için donanım bileşenlerini seçip entegrasyon çalışmaları yürüten bilgisayar mühendisliği ve elektrik mühendisliği disiplinlerini sık sık içerir.

Bilgisayar performans analizi

Bilgisayar performans analizi; çıktıları iyileştirme, yanıt süresini kontrol etme, kaynakları verimli bir şekilde kullanma, tıkanıklığı ortadan kaldırma ve yoğun yüklenmelerde sistem performansı tahmin etme gibi genel hedefleri olan ve bunları iyileştirme çalışmaları yürütülen alandır.

Bilgisayar grafikleri ve görselleştirme

Bilgisayar grafikleri, dijital görsel içeriğin incelenmesi ve görüntü verisinin sentezi ve manipülasyonu ile ilgilidir. Bu çalışmalar, bilgisayar bilimi, görüntü işleme ve hesaplama geometrisi de dahil olmak üzere bilgisayar bilimlerindeki diğer alanlarla da bağlantılıdır ve özel efektler ile video oyunları alanlarında yoğun bir şekilde uygulanmaktadır.

Bilgisayar güvenliği ve kriptografi

Bilgisayar güvenliğinin amacı; sistemin, amaçlanan kullanıcılar için erişilebilirliğini ve kullanılabilirliğini korurken, yetkisiz erişim, bozulma veya harici modifikasyona karşı bilgilerin korunmasını içeren bir bilgisayar teknolojisi dalıdır. Kriptografi gizleme (şifreleme) ve dolayısıyla şifre kırma (ya da şifre çözme) bilgisinin uygulanması ve incelenmesidir. Modern şifreleme, büyük oranda bilgisayar bilimi ile ilgilidir, çünkü birçok şifreleme ve şifre çözme algoritmaları hesaplama karmaşıklığı alanına dayalıdır.

Bilgisayar ağları

Bilgisayar bilimlerinin bu dalı, bilgisayarlar arasındaki ağları dünya çapında yönetmeyi ve problemleri aşmayı amaçlamaktadır.

Eşzamanlı, paralel ve dağıtılmış sistemler

Eşzamanlılık, birçok hesaplamanın aynı anda ve potansiyel olarak birbiriyle etkileşime girdiği sistemlerin bir özelliğidir. Petri ağları, süreç hesapları ve Paralel Rastgele Erişim Makinesi modeli de dahil olmak üzere genel eşzamanlı hesaplama için bir takım matematiksel modeller geliştirilmiştir. Dağıtılmış bir sistem eşzamanlılık fikrini bir ağ üzerinden bağlanan birden fazla bilgisayara genişletir. Aynı dağıtılan sistem içindeki bilgisayarlar kendi özel belleğine sahiptir ve ortak bir amaç edinmek için bilgi kendi aralarında sıklıkla değiştirilir.

Veritabanları

Veritabanı, büyük miktardaki veriyi kolayca organize etmek, depolamak ve transfer etmek için tasarlanmıştır. Sayısal veritabanları, veritabanı modelleri ve sorgu dilleri aracılığıyla veri saklamak, oluşturmak, korumak ve aramak için veritabanı yönetim sistemleri sıklıkla kullanılmaktadır.Özellikle finans, emniyet ve kamusal alanlarda kullanımı yaygındır.

Yazılım Mühendisliği

Yazılım mühendisliği, yüksek kalitede, ekonomik, bakıma açık ve hızlı geliştirmeyi sağlamak için yazılım tasarlama, uygulama ve değiştirme çalışmasıdır. Yazılım tasarımına sistematik ve bilimsel yaklaşım, mühendislik çalışmalarının yazılıma uygulanmasıyla mümkün hale gelmektedir. Yazılım mühendisliği, yazılımın organizasyonu ve analizi ile ilgilenmektedir-sadece yeni yazılımların oluşturulması veya üretimi ile değil, dahili bakım ve düzenleme ile de ilgilenmektedir.Her iki bilgisayar uygulamaları yazılım mühendisi ve bilgisayar sistemleri yazılım mühendisi, 2008-2018 yılları arasında en hızlı büyüyen meslekler arasında yer alması bekleniyor.

Bilgisayar bilimlerindeki bazı büyük yaklaşımlar

Hesaplama filozofu Bill Rapaport "Great Insights of Computer Science" adlı eserinde bilgisayar bilimlerinde büyük yaklaşımların üçünü kaydetti:
Gottfried Wilhelm Leibniz, George Boole, Alan Turing, Claude Shannon ve Samuel Morse'ın bilgisayar bilimlerine bakış açısı:
Bilgisayarın "herhangi bir şeyi" temsil etmek için kullanması gereken iki nesne var.
Hesaplanabilir bir problemle ilgili tüm bilgiler sadece 0 ve 1 (veya "açma / kapama", "mıknatıslanmış / mıknatıssız","yüksek gerilim / düşük gerilim" vb.) gibi kolayca ayırt edilebilir iki durum arasında geçiş yapabilen diğer dengeli çiftler kullanılarak temsil edilebilir.
Ayrıca bkz: Dijital fizik
Alan Turing'in anlayışı: Bir bilgisayarın "herhangi bir şey" yapmak için gerçekleştirmesi gereken yalnızca beş eylem var.
Her algoritma, yalnızca beş temel talimattan oluşan bir bilgisayar için bir dilde ifade edilebilir:
Bir yerden sola hareket et;
Sağa herhangi bir yere git;
Geçerli konumda sembolü oku;
Geçerli konumda 0 yazdır;
Geçerli konumda 1 yazdır.
Ayrıca bkz: Turing makinesi
Corrado Böhm ve Giuseppe Jacopini'nin yaklaşımı:
Bir bilgisayarın "herhangi bir şey" yapabilmesi için gereken bu eylemleri (daha karmaşık olana doğru) birleştirmenin üç yolu vardır.
Özetle herhangi bir temel talimat kümesini daha karmaşık olacak biçimde birleştirmek için yalnızca üç kural gereklidir:
Sıralama: önce şunu yapın, sonra bunu yapın;
Seçim: Böyle bir durumda bunu yapın,daha sonraki durumda bunu yapın,bu durumlardan birisi değilse bunu yapın;
Tekrarlama: Şöyle bir durumda şu şartlar sağlanıyor iken durumu tekrarla ve bu esnada şu işlemleri sırasıyla gerçekleştir.

Akademi

Konferanslar bilgisayar bilimi araştırmaları için çok önemli olaylardır. Bu konferanslarda, kamu ve özel sektörde araştırmacılar yeni çalışmalarını sunmakta ve bir araya gelmektedirler. Diğer birçok akademik alanın aksine, bilgisayar bilimlerinde, konferans bildirilerinin prestijleri dergi yayınlarından daha yüksektir.
Bunun için önerilen bir açıklamada; bilgisayar bilimleri dalının, diğer dallara nispeten hızlı bir şekilde geliştirilmesini, sonuçların hızlı bir şekilde incelenmesini ve dağılımını gerektirmesidir.
Bu nitelikteki çalışmalar ise dergilerden ziyade konferanslar tarafından daha iyi ele alınmaktadır ve bu sayede verimlilik artmakta,kitlelere daha etkin ulaşılabilmekte ve yapılan işlerin performansı artmaktadır.

Eğitim

Bilgisayar bilimi nispeten yeni bir alan olduğundan, okullarda ve üniversitelerde diğer akademik alanlar kadar yaygın şekilde öğretilmemektedir.Örneğin, 2014 yılında Code.org, Amerika Birleşik Devletleri'ndeki liselerin yalnızca yüzde 10'unun bilgisayar bilimi eğitimi verdiğini tahmin ediyordu. Computing Machinery (ACM) ve Bilgisayar Bilimi Öğretmenleri Derneği (CSTA) tarafından düzenlenen 2010 raporunda, 50 eyaletten sadece 14'ünün lise bilgisayar bilimi için önemli eğitim standartlarını benimsediği ortaya çıktı. Bununla birlikte, bilgisayar bilimleri eğitimi her yıl artan bir şekilde büyümektedir. İsrail, Yeni Zelanda ve Güney Kore gibi bazı ülkeler halihazırda ulusal orta öğretim müfredatlarında bilgisayar bilimine yer vermektedirler. Birçok ülke de bu gelişmeyi takip ederek müfredatlarını değiştirmektedir. Türkiye'de de bu yönde yapılan çalışmalar 2015 yılında bakanlık tarafından duyurulmuştur.
Çoğu ülkede, bilgisayar bilimleri eğitiminde önemli bir cinsiyet farkı vardır. Örneğin, ABD'de 2012'de bilgisayar bilimleri derecelerinin yaklaşık %20'si kadına verildi. Türkiye'de bu oranlar ise %10 ila %30 civarında değişmektedir.Bu cinsiyet arasındaki uçurum diğer Batı ülkelerinde de bulunmaktadır. Bununla birlikte, dünyanın bazı yerlerinde, bu cinsiyet dağılımı dengesizliği küçük veya yok denecek kadar azdır. 2011'de, Malezya'daki bilgisayar bilimleri derecelerinin yaklaşık yarısı kadına verildi. 2001 yılında kadınlar, Guyana'daki bilgisayar bilimleri mezunlarının %54.5'ini oluşturuyordu.