# Yazılımın tarihi
Yazılım, işlemci tarafından yürütülmek üzere programlanmış dijital bilgisayarların belleğinde saklanan bir dizi programlanmış talimattır. Yazılım insanlık tarihinde yeni bir gelişmedir ve Bilişim Çağının temelini oluşturur.
Ada Lovelace'in 19. yüzyılda Charles Babbage'ın Analitik Motoru için hazırladığı programlar genellikle disiplinin kurucusu olarak kabul edilir. Ancak Lovelace ve Babbage'nin zamanının teknolojisinin bilgisayarını yapmak için yetersiz kalması nedeniyle matematikçinin çabaları yalnızca teorik olarak kaldı. Alan Turing, 1935 yılında yazılım için bir teori geliştiren ilk kişi olarak kabul edilir ve bu teori, bilgisayar bilimi ve yazılım mühendisliği olmak üzere iki akademik alanın oluşmasına yol açar.
1940'ların sonlarında, ilk depolanmış programlı dijital bilgisayarlara yönelik ilk nesil yazılımın talimatları, genellikle ana bilgisayar bilgisayarları için yazılan, doğrudan ikili kodla yazılmıştı. Daha sonra, ev bilgisayarının ilerlemesinin yanı sıra modern programlama dillerinin geliştirilmesi, montaj dilinden başlayarak ve işlevsel programlama ve nesne yönelimli programlama paradigmalarıyla devam ederek mevcut yazılımların kapsamını ve kapsamını büyük ölçüde genişletecektir.


## Depolanan programlı dijital bilgisayarlardan önce.
### Bilgisayar biliminin kökenleri.
Bir kavram olarak hesaplamanın kökeni abaküs, Antikythera mekanizması, usturlaplar, Mekanik Astronomik saatler ve Mekanik Hesap Makineleri gibi cihazlarla çok eskilere dayanmaktadır. Antikythera mekanizması oldukça karmaşık bir antik mekanik Astronomik cihazın örneğidir.
Ancak bu cihazlar tamamen donanımdan oluşuyordu ve herhangi bir yazılıma sahip değillerdi; bilgi işlem güçleri doğrudan kendi özel biçimlerine ve mühendisliklerine bağlıydı.
Yazılım, genel amaçlı bir işlemci kavramının (şu anda Turing makinesi olarak tanımlanan) yanı sıra, programları içeren yeniden kullanılabilir rutinler ve matematiksel işlevlerin ayrı ayrı saklanabileceği, başlatılabileceği ve durdurulabileceği ve yalnızca insanlık tarihinde yakın zamanda ortaya çıktığı bilgisayar belleğini gerektirir.
Bilinen ilk bilgisayar algoritması 19. yüzyılda Ada Lovelace tarafından Analitik Motor için, Luigi Menabrea'nın Bernoulli sayıları üzerine çalışmasını makine eğitimi için tercüme etmek üzere yazılmıştır. Ancak bu yalnızca teorik olarak kaldı; bu iki matematikçinin yaşamı boyunca mühendisliğin Analitik Motoru oluşturmak için daha düşük düzeyde olması yetersiz kaldı.
İlk modern yazılım teorisi Alan Turing tarafından 1935 tarihli "Entscheidungsproblem (karar problemi) uygulamasıyla Hesaplanabilir sayılar adlı" makalesinde ortaya atıldı.
Bu, sonuçta hem yazılımı hem de yazılımın yaratılmasını inceleyen bilgisayar bilimi ve yazılım mühendisliği gibi ikiz akademik alanların yaratılmasına yol açtı. Bilgisayar bilimi daha teoriktir (Turing'in makalesi bilgisayar biliminin bir örneğidir), oysa yazılım mühendisliği daha pratik konulara odaklanır.
Ancak 1946'dan önce, şimdi anladığımız şekliyle yazılım – saklanan program dijital bilgisayarların hafızasında saklanan programlar – henüz mevcut değildi. İlk elektronik bilgi işlem cihazları, onları "yeniden programlamak" için yeniden kablolandı. İlk elektronik bilgisayarlardan biri olan ENIAC, büyük ölçüde daha önce insan bilgisayarı olarak çalışan kadınlar tarafından programlandı. Mühendisler programcılara ENIAC kablolarının planlarını veriyor ve onlardan makineyi nasıl programlayacaklarını bulmalarını bekliyorlardı. Programcı olarak çalışan kadınlar, gösteriler için bağlantı panellerini birbirine bağlayarak ENIAC'ı ilk halka açık tanıtım için hazırladılar. Kathleen Booth, 1950 yılında Birkbeck Koleji'nde üzerinde çalıştığı bilgisayarların programlanmasını kolaylaştırmak için Assembly Dilini geliştirdi.
Grace Hopper, Harvard Mark I'in ilk programcılarından biri olarak çalıştı. Daha sonra bilgisayar için 500 sayfalık bir kılavuz hazırladı. Hopper, Mark II'de arızaya neden olan bir güve (bug) bulduğunda çoğu zaman yanlışlıkla "hata" (bug) ve "hata ayıklama"(debugging) terimlerini icat ettiğine inanılır; ancak bu terim aslında güveyi bulduğunda zaten kullanılıyordu. Hopper ilk derleyiciyi geliştirdi ve fikrini 1950'lerde Mark bilgisayarları üzerinde çalışmaktan UNIVAC üzerinde çalışmaya taşıdı. Hopper ayrıca UNIVAC'ı programlamak için FLOW-MATIC programlama dilini geliştirdi. Yine UNIVAC'ta çalışan Frances E. Holberton bir kod geliştirdi , C-10, programcıların klavye girişlerini kullanmasına izin verdi ve 1951'de Sıralama-Birleştirme Oluşturucuyu yarattı. Adele Mildred Koss ve Hopper da bir rapor oluşturucunun öncüsünü yarattılar. 


## Bilgisayar yazılımının ilk günleri (1948–1979).
Claude Shannon (1916–2001), "Bir Matematiksel İletişim Teorisi"(A Mathematical Theory of Communication) adlı makalesinde, bir bilgisayarı programlamak için ikili mantığın nasıl uygulanabileceğine dair bir taslak sundu. Daha sonra ilk bilgisayar programcıları, bilgisayarlara çeşitli görevleri yerine getirme talimatı vermek için ikili kod kullandılar. Ancak süreç oldukça zorluydu. Bilgisayar programcıları, bilgisayara ne tür verileri saklaması gerektiğini söylemek için uzun ikili kod dizileri sağlamak zorundaydı. Kod ve verilerin, anahtarların kaydırılması veya kartlarda önceden tanımlanmış konumlara delikler açılması ve bu delikli kartların bir bilgisayara yüklenmesi gibi çeşitli sıkıcı mekanizmalar kullanılarak bilgisayarlara yüklenmesi gerekiyordu. Bu tür yöntemlerde eğer bir hata yapılırsa tüm programın baştan yüklenmesi gerekebilir.
Program depolanan bir bilgisayarın elektronik hafızasında bir yazılım parçasını tuttuğu ve bunu başarılı bir şekilde çalıştırdığı ilk sefer, 21 Haziran 1948'de Manchester Üniversitesi'nde Manchester Baby bilgisayarında saat 11:00'dı. Tom Kilburn tarafından yazılmıştır ve 2^18 = 262,144 tam sayısının en yüksek faktörünü hesaplamıştır. Büyük bir deneme böleni ile başlayarak 262.144 sayısını tekrarlı çıkarma işlemiyle böldü ve kalanın sıfır olup olmadığını kontrol etti. Değilse, deneme bölenini bir azalttı ve işlemi tekrarladı. Google, Manchester Baby'yi "yazılımın doğuşu" olarak kutlayan bir anma töreni yayınladı.
FORTRAN, 1950'lerde IBM'de John Backus liderliğindeki bir ekip tarafından geliştirildi. İlk derleyici 1957'de piyasaya sürüldü. Dil, bilimsel ve teknik hesaplamalar için o kadar popüler oldu ki, 1963 yılına gelindiğinde tüm büyük üreticiler bilgisayarları için FORTRAN'ı uygulamaya koydu veya duyurdu.
COBOL ilk kez 1959'da Mary K. Hawes'in işletmeler arasında paylaşılacak bir bilgisayar dilinin nasıl oluşturulacağını tartışmak üzere (Grace Hopper'ın da dahil olduğu) bir toplantı düzenlediğinde ortaya çıktı. Hopper'ın COBOL ile yaptığı yenilik, programlama yazmanın yeni bir sembolik yolunu geliştirmekti. Programlaması kendi kendini belgeliyordu. Betty Holberton, yılında Devlet Matbaasına sunulan dilin düzenlenmesine yardımcı oldu. FORMAC, 1960'lı yıllarda Jean E. Sammet tarafından geliştirildi. "Programlama Dilleri: Tarih ve Temeller (Programming Languages: History and Fundamentals)" (1969) adlı kitabı etkili bir metin haline geldi. 


### Apollo Projesi.
Apollon'un Ay Görevi, iniş modüllerindeki bilgisayarları programlayacak yazılıma dayanıyordu. Bilgisayarlar "Basic" adı verilen bir dille programlandı (Dartmouth'ta aynı dönemde geliştirilen BASIC programlama diliyle hiçbir ilişkisi yoktur). Yazılımın ayrıca bir dizi rutinden oluşan bir yorumlayıcısı ve hangi programların ne zaman çalıştırılacağını belirleyen bir yönetici (günümüz işletim sistemi gibi) vardı. Her ikisi de Hal Laning tarafından tasarlandı. Daha önce ABD SAGE hava savunma sistemi üzerinde çalışırken yazılım güvenilirliği sorunlarıyla ilgilenen Margaret Hamilton da Apollo yazılım ekibinin bir parçasıydı. Hamilton, Apollo bilgisayarlarının yerleşik uçuş yazılımından sorumluydu. Hamilton, yazılım operasyonlarının sadece makinenin bir parçası olmadığını, aynı zamanda yazılımı çalıştıran insanlarla da karmaşık bir şekilde ilgili olduğunu düşünüyordu. Hamilton ayrıca NASA'da çalışırken "yazılım mühendisliği" terimini de icat etti.
Apollo görevlerindeki bilgisayarların gerçek "yazılımı", manyetik çekirdeklerden geçirilen tellerden oluşuyordu. Telin manyetik çekirdekten geçtiği yer "1"i, telin çekirdeğin etrafından dolaştığı yer ise "0"ı temsil ediyordu. Her çekirdek 64 bit bilgi depoladı. Hamilton ve diğerleri, yazılımı delikli kartlara delikler açarak oluşturacaklardı; bunlar daha sonra yazılımın simüle edilebileceği bir Honeywell ana bilgisayarında işlenecekti. Kod "sağlam" olduğunda, "Küçük Yaşlı Hanımlar" olarak bilinen kadınların teller üzerinde çalıştığı Raytheon'daki manyetik çekirdeklere dokunmak üzere gönderildi. Programın kendisi "yok edilemezdi" ve Apollo 12'nin başına gelen yıldırım çarpmalarına bile dayanabiliyordu. Bilgisayarların kablo bağlantılarının yapılması birkaç hafta sürdü ve bu süre zarfında yazılım geliştirme dondu. 
Hamilton, programlamayı test etmek için simülatörleri kullanırken, kodun kullanımı sırasında insan hataları yapıldığında tehlikeli hatalar üretebileceğinin yollarını keşfetti. NASA, astronotların eğitimleri nedeniyle hata yapmayacağına inanıyordu. Hamilton'un sistem çökmesine yol açacak hataları önlemek için kod programlamasına izin verilmedi, bu nedenle program belgelerine koda açıklama ekledi. Hata kontrol kodu ekleme fikirleri "aşırı" olduğu gerekçesiyle reddedildi. Bununla birlikte, Hamilton'ın tam olarak olacağını tahmin ettiği şey, Apollo 8 uçuşunda gerçekleşti; insan hatası, bilgisayarın tüm navigasyon verilerini silmesine neden oldu.


### Yazılımın donanımla paketlenmesi ve yasal sorunları.
Daha sonra yazılım, Data General, Digital Equipment ve IBM gibi orijinal ekipman üreticileri (OEM'ler) tarafından donanımla birlikte "paketlenerek" birden fazla müşteriye satıldı. Bir müşteri, o zamanlar piyasadaki en küçük bilgisayar olan bir mini bilgisayar satın aldığında, bilgisayar önceden yüklenmiş yazılımla birlikte gelmiyordu, ancak OEM tarafından istihdam edilen mühendisler tarafından kurulması gerekiyordu.
Bu paket, 1969'da uygunsuz "bağlama" nedeniyle IBM'e dava açan ABD'li antitröst düzenleyicilerinin dikkatini çekti ve bunun bir antitröst ihlali olduğunu, yazılımını edinmek isteyen müşterilerin bunu yapmak için donanımını da satın alması veya kiralaması gerektiğini iddia etti. Ancak dava, ABD Adalet Bakanlığı tarafından uzun yıllar süren yıpratmanın ardından "haksız" olduğu sonucuna varılarak düşürüldü.
Data General aynı zamanda paketlemeyle ilgili yasal sorunlarla da karşılaştı – ancak bu durumda bu, olası bir rakibin açtığı hukuk davasından kaynaklanıyordu. Data General, Data General Nova'yı tanıttığında Digidyne adlı bir şirket, RDOS işletim sistemini kendi donanım klonunda kullanmak istiyordu. Data General, yazılımlarının lisansını vermeyi reddetti ve "paketleme haklarını" talep etti. ABD Yüksek Mahkemesi, 1985 yılında 9. devre temyiz mahkemesi kararının davaya bakılmasına izin vererek "Digidyne v. Data General" adında bir emsal oluşturdu ve Data General, lisansın yalnızca DG donanımının yasa dışı bağlama düzenlemesi ile sınırlandırılmasına karar verildiği için sonunda işletim sistemini lisanslamak zorunda kaldı. Bölge Mahkemesi, "hiçbir makul jüri üyesinin, çok daha büyük rakiplerin bulunduğu bu büyük ve dinamik pazarda, Data General'ın "yasadışı bir bağlantı düzenlemesi yoluyla ticareti kısıtlama pazar gücüne sahip olduğunu" tespit etmesine rağmen işletme Temyizde sistemin donanıma "yönelik" olarak yasa dışı olduğuna hükmedildi.
2008 yılında Psystar Corporation'a, OS X'in önceden yüklendiği yetkisiz Macintosh klonlarını dağıttığı için Apple Inc. tarafından dava açıldı ve karşı dava açıldı. Karşı davadaki argümanlardan biri - Data General davasına atıfta bulunarak - Apple'ın, işletim sistemini yasa dışı bir şekilde Apple bilgisayarlara bağlayarak OS X uyumlu bilgisayarlar pazarında hakimiyet kurmasıydı. Bölge Mahkemesi Hakimi William Alsup, Bölge Mahkemesinin 20 yıl önce Data General davasında verdiği karara göre, ilgili pazarın yalnızca tek bir işletim sistemi (Mac OS) değil, Mac OS "dahil" "tüm" PC işletim sistemleri olduğunu söyleyerek bu iddiayı reddetti. ve Mac OS'nin bu daha geniş pazarda hakim bir konuma sahip olmadığını belirtti. Alsup'un kararında ayrıca, telif hakkıyla korunan ürünlerin bağlanmasının her zaman yasa dışı olduğuna ilişkin şaşırtıcı Data General emsalinin, Illinois Tool Works Inc. - Independent Ink, Inc. davasındaki karar tarafından "örtük olarak reddedildiği" de belirtildi.


### Paketlenmiş yazılım (1960'ların sonlarından günümüze).
Bağımsız olarak paketlenmiş yazılımlar (ne bireysel bir müşteri için "tek seferlik" olarak üretilen ne de bilgisayar donanımıyla "paketlenmiş" yazılımlar) üreten bir endüstri, 1960'ların sonlarında gelişmeye başladı.


### Unix (1970'ler – günümüz).
Unix, popüler ve çok etkili hale gelen ve bugün hala var olan ilk işletim sistemiydi. Günümüzde Unix'in en popüler çeşidi macOS'tur (daha önce OS X ve Mac OS X olarak adlandırılıyordu), Linux ise Unix ile yakından ilişkilidir.


### Mikrobilgisayarların yükselişi.
Ocak 1975'te MITS, Altair 8800 mikrobilgisayar kitini posta siparişi ile satmaya başladı. Microsoft, aynı yılın sonlarında ilk ürünü Altair BASIC'i piyasaya sürdü ve amatörler bu kitler üzerinde çalışacak programlar geliştirmeye başladı. Tiny BASIC, "Dr. Dobb's Journal'da" yazı tipi program olarak yayınlandı ve işbirliğiyle geliştirildi.
Örneğin 1976'da Peter R. Jennings, MOS Technology'nin KIM-1 kiti için kendi "Microchess" programını yarattı ancak bu program bir teyp sürücüsüyle gelmediğinden, kaynak kodunu küçük bir kitapçık halinde postayla sipariş müşterilerine gönderiyordu ve tüm programı elle yazmaları gerekecekti. 1978'de Kathe ve Dan Spracklen "Sargon (satranç)" programlarının kaynağını bir bilgisayar dergisinde yayınladılar. Jennings daha sonra kağıt bant ve sonunda üzerinde programın bulunduğu kompakt kasetler satmaya başladı.
Bir bilgisayar dergisinden kaynak kodunu yazmak zahmetli ve yavaş bir süreçti ve tek bir yanlış yazılmış – ya da daha kötüsü, yanlış basılmış – karakter programı çalışmaz hale getirebilirdi, ancak insanlar yine de bunu yapıyordu. (Teorik olarak listeleri elle yazıya dökmek yerine taramak için kullanılabilecek optik karakter tanıma teknolojisi henüz geniş kullanımda değildi.)
1980'lerde ticari yazılım dağıtımı için kartuşların ve kasetlerin yaygınlaşmasına rağmen, ücretsiz programlar (programlama tekniklerini öğretmek amacıyla basit eğitim programları gibi) hâlâ sıklıkla basılıyordu çünkü kasetleri dergilere yapıştırmaktan daha ucuzdu.
Bununla birlikte, sonunda dört faktörün birleşimi, bilgisayar dergilerindeki tüm programların tam kaynak kodu listelerinin basılması uygulamasına son verdi:
  - programlar çok büyük olmaya başladı
  - Disketler yazılım dağıtmak için kullanılmaya başlandı ve daha sonra fiyatları düştü
  - sıradan insanlar bilgisayar kullanmaya başladı – ve bir programı çalıştırmanın basit bir yolunu istiyordu
  - bilgisayar dergileri, üzerinde yazılımın ücretsiz veya deneme sürümlerinin bulunduğu kasetler veya disketler içermeye başladı
Çok hızlı bir şekilde ticari yazılımlar korsanlaşmaya başladı ve ticari yazılım üreticileri bu durumdan oldukça rahatsız oldu. Microsoft'un kurucu ortağı Bill Gates, 1976'daki ünlü "Open Letter to Hobbyists" adlı açık mektubuyla yazılım korsanlığına karşı ilk ahlakçılardan biriydi.


## 1980'ler – günümüz.
Mikrobilgisayardan önce, başarılı bir yazılım programı genellikle her biri 50.000-60.000 ABD dolarından 1.000 adede kadar satılıyordu. 1980'lerin ortalarına gelindiğinde, kişisel bilgisayar yazılımlarının her biri 50-700 dolara binlerce kopya satıldı. Microsoft, MicroPro ve Lotus Development gibi şirketlerin yıllık satışları on milyonlarca dolardı. Benzer şekilde, zaten başarılı olan ürünlerin yerelleştirilmiş versiyonlarıyla Avrupa pazarına da hakim oldular.
Bilgi işlem tarihinde çok önemli bir an, 1980'lerde IBM çalışanı Philip Don Estridge tarafından yayınlanan IBM PC spesifikasyonlarının yayınlanmasıydı; bu, PC'nin dünya çapındaki masaüstü ve daha sonra dizüstü bilgisayar pazarlarında hızla hakim olmasına yol açtı. – günümüze kadar devam eden bir hakimiyettir. Microsoft, PC için ilk işletim sistemini (MS-DOS) geliştirmek üzere IBM ile başarılı bir şekilde pazarlık yaparak, MS-DOS ve onun eklenti-ardılı olan Microsoft Windows halefinin başarısı aracılığıyla, sonraki yıllarda PC'nin başarısından büyük kazanç elde etti. . Müzakereyi kazanmak Microsoft'un tarihinde çok önemli bir andı.


### Son gelişmeler.
#### Uygulama mağazaları.
Mobil cihazlara (cep telefonları ve tabletler) yönelik uygulamalara son yıllarda "uygulamalar" (app) adı verilmektedir. Apple, iPhone ve iPad uygulama satışlarını App Store aracılığıyla aktarmayı ve dolayısıyla her iki uygulamayı da incelemeyi ve satılan her ücretli uygulamadan pay almayı seçti. Apple, uygulama mağazasını atlatmak için kullanılabilecek uygulamalara (örn. Java veya Flash sanal makineleri gibi sanal makineler) izin vermez.
Android platformu ise bunun aksine birden fazla uygulama mağazasına sahiptir ve kullanıcılar genellikle hangisini kullanacaklarını seçebilirler (her ne kadar Google Play uyumlu veya root erişimli bir cihaz gerektirse de).
Bu hamle, GNOME Software (Linux için), Mac App Store (macOS için) ve Windows Mağazası (Windows için) içeren masaüstü işletim sistemleri için kopyalandı. Bu platformların tümü, her zaman olduğu gibi, münhasır değildir: Uygulamaların uygulama mağazasının dışından ve aslında diğer uygulama mağazalarından yüklenmesine olanak tanırlar.
Özellikle iPhone ve aynı zamanda Android için uygulamaların popülaritesindeki büyük artış, bazı umutlu programcıların zengin olma umuduyla uygulamalar oluşturmaya önemli miktarda zaman ayırmasıyla bir tür "altına hücuma" yol açtı. Gerçek altına hücumda olduğu gibi bu umutlu girişimcilerin hepsi başarılı olmadı.


## Yazılım geliştirmenin resmileştirilmesi.
Bilgisayar bilimlerinde müfredatın geliştirilmesi, yazılım geliştirmede gelişmelere yol açmıştır. Bu müfredatın bileşenleri şunları içerir:
  - Yapılandırılmış ve Nesneye Yönelik programlama 
  - Veri yapıları 
  - Algoritmaların Analizi 
  - Biçimsel diller ve derleyici yapısı 
  - Bilgisayar Grafik Algoritmaları 
  - Sıralama ve Arama 
  - Sayısal Yöntemler, Optimizasyon ve İstatistik 
  - Yapay Zeka ve Makine Öğrenimi 


## Yazılım donanımı nasıl etkiledi?
Giderek daha fazla program aygıt yazılımı alanına girdikçe ve donanımın kendisi Moore yasasının öngördüğü gibi daha küçük, daha ucuz ve daha hızlı hale geldikçe, ilk olarak yazılım tarafından gerçekleştirilen artan sayıda bilgi işlem işlevsellik türü, donanımın saflarına katıldı. örneğin grafik işlem birimleriyle. (Ancak bazen maliyet veya diğer nedenlerden dolayı değişiklik ters yönde olmuştur; örneğin softmodemler ve mikrokodlarda olduğu gibi.)
Günümüzde çoğu donanım şirketinin maaş bordrosunda donanım tasarımcılarından daha fazla yazılım programcısı var, çünkü yazılım araçları baskılı devre kartı (PCB) mühendislerinin birçok görevini otomatik hale getirmiştir.


## Bilgisayar yazılımı ve programlama dili zaman çizelgesi.
Aşağıdaki tablolar, bilgisayar yazılımının birçok farklı yönünün yıldan yıla gelişimini içermektedir:
  - Yüksek seviyeli diller 
  - İşletim sistemleri 
  - Ağ yazılımı ve uygulamaları 
  - Bilgisayar grafik donanımı, algoritmaları ve uygulamaları 
  - Hesap tablosu
  - Kelime işlemci
  - Bilgisayar destekli tasarım 


### Kaynaklar.
 -  
 -  
 -