Bir bilgisayar programı , bir bilgisayar tarafından yürütülmesi amaçlanan bir dizi talimat ve işlemdir .
Bir program genellikle , bir bilgisayar hizmeti sağlamayı amaçlayan dijital bileşenlerin bir koleksiyonu olarak tanımlanabilen yazılımın bir parçasıdır . Bir yazılım birkaç program içerebilir. Böylece bilgisayar cihazlarında ( bilgisayar , oyun konsolu , ATM makinesi vb.), bilgisayar ekipmanlarının parçalarında ve birçok elektronik cihazda ( yazıcı , modem , GPS , cep telefonu , çamaşır makinesi , cihaz. dijital fotoğraf) bulunur. , TV dekoderi dijital, elektronik enjeksiyon , otopilot ...).
Bilgisayar programları telif hakkına tabidir ve sanat eserleri gibi mevzuata tabidir.
In 1842 , Kontes Ada Lovelace için grafikler oluşturur Analitik Engine of Charles Babbage . Bu diyagramlar bugün dünyadaki ilk bilgisayar programları olarak kabul edilmektedir. Bununla birlikte, bu teori tartışma konusudur, çünkü Babbage, analitik makinesi için ilk programlarını kendisi de yazdı , ancak çoğunluğu hiçbir zaman yayınlanmadı. Örneğin, Bromley, Babbage tarafından 1837 ve 1840 yılları arasında hazırlanan programların örneklerini not eder: onun tüm notları Lovelace tarafından yazılanlardan önce gelir. Ancak programlama ve kayıtlı programlama kavramı teorik olarak ilk kez 1936 yılında Alan Turing tarafından formüle edilmiştir .
1940'larda Z3 veya Mark I gibi ilk bilgisayarlar yaratıldı. Bilgisayar programları daha sonra analistler tarafından tasarlandı, programcılar tarafından yazıldı ve operatörler tarafından teleks tipi bantlar veya delikli karton kartlar üzerine girildi . Bir programın çalıştırılması, ilgili şeridin veya kart yığınının elektro-mekanik bir okuyucuya girilmesinden oluşuyordu.
İlk işletim sistemi 1954 yılında geliştirilen Aynı yıl ilk ortaya assemblers ve ilk derleyici için Fortran dilinde .
Programlama öğretimi ilk olarak bilgisayar üreticileri arasında ve bu makinelerin kurulduğu ilk üniversitelerde - 1950'lerin başından itibaren İngiltere ve Amerika Birleşik Devletleri'nde, daha sonra aynı on yılın ortalarında Kıta Avrupası ve Japonya'da düzenlendi. Bunlar teknik derslerdir, ancak konunun artan karmaşıklığı (derleyiciler, sistemler) yavaş yavaş yeni bir bilimin kurulmasına yol açacaktır.
Gelişi yapısal programlama 1970 civarında büyük ölçüde çalışmalarını basitleştirilmiş programcılar ve mümkün giderek daha karmaşık görevler ele programları oluşturmak için yapılmıştır. Aynı şey 1980 ve 1990 yılları arasında nesne yönelimli programlamanın ortaya çıkışı için de geçerlidir . Edsger Dijkstra'nın ifadesine uygun olarak : "İlerleme ancak programları kod parçaları olarak düşünmeden düşünebilirsek mümkün olacaktır. yürütülebilir ”. Programlamanın sunduğu olanakları basitleştirmek ve hızlandırmak için düzenli olarak yeni programlama veya metaprogramlama dilleri oluşturulur.
Son olarak, bilgisayarların minyatürleştirilmesi ve grafik arayüzlerin genelleştirilmesi , bilgisayar kullanımının demokratikleşmesine büyük ölçüde katkıda bulundu, öyle ki 2010'larda akıllı telefonların genelleştirilmesi, kullanıcıların bilgisayar programlarını kalıcı olarak çalıştırmalarına izin verdi.
Programlama bir programlama dilinde algoritmaların yazılı yol açtı yansıma çalışması için, bir fikirden başlayarak olduğunu. Fikirden kaynak koda giden yolu kısaltarak programcının işini kolaylaştırmak için programlama dilleri oluşturulmuştur.
Programlar, programcılar veya yazılım mühendisleri tarafından oluşturulur. Programcılar öncelikle program yazmaya çalışırken, yazılım mühendisleri program oluşturmanın tüm aşamalarında çalışır. Endüstri mühendisliği ve yönetim tekniklerine dayalı resmi ve titiz bir yaklaşım uygularlar.
Bir problemi çözmek için bir program yazmaya başlamadan önce, programcı çözülecek problemin özelliklerini belirlemelidir. Bu, kullanılan programlama dilinden bağımsız olarak birkaç adımda yapılır. Yaygın teknik, tanımlama, tasarım, yazma, test etme, kurulum ve bakım aşamalarını içeren bir geliştirme döngüsüdür :
Geliştirme döngüsünün amacı, programın kalitesini artırırken üretim maliyetlerini azaltmaktır. Aranan nitelikler verimlilik, esneklik, güvenilirlik, taşınabilirlik ve sağlamlıktır. Ayrıca kullanıcı dostu ve düzenlemesi kolay olmalıdır.
Bir programın az programlama çabası gerektirmesi, talimatların az zaman alması ve az bellek gerektirmesi, birçok amaç için kullanılabilmesi ve koşullar ne olursa olsun beklenen sonuçları vermesi beklenir. .
Ayrıca üretildiği bilgisayardan farklı bir bilgisayar modeline kolayca aktarılabilmesi, girilen bilgiler yanlış olsa bile ikna edici sonuçlar vermesi, acemi bir kullanıcı tarafından kolayca anlaşılabilmesi ve kaynak kodu daha sonra kolayca değiştirilebilir.
Bir programlama dili , algoritmaları ifade etmek ve program yazmak için kullanılan bir gösterimdir . Algoritma, doğal bir dilde piktogramlar ve basit terimler şeklinde açıklanan bir dizi hesaplama ile bir sonuç elde etme sürecidir. 1950 yılına kadar programcılar, programları makine veya montaj dillerinde, insanlar için okunması zor olan ve her bir talimatın çok az şey yaptığı dillerde ifade ettiler, bu da işi sıkıcı hale getirdi ve sonucu birçok hataya açık hale getirdi. 1950 gibi erken bir tarihte, programlar insanlara adanmış farklı dillerde ve daha çok makinelere - programlama dillerinde - tanımlandı ve bu da operasyonların daha kolay ifade edilmesini sağladı. Program daha sonra otomatik olarak bilgisayar tarafından yürütülebilecek bir forma çevrildi.
Talep üzerine bilgisayar program talimatlarını yürütecektir. Her zaman söyleneni aynen yürütür ve hiçbir zaman yanlış olmaz, ancak programı yazarken insan hatası sonucu yürüttüğü talimatların yanlış olduğu zamanlar vardır. Programlama dilleri bu hataların sayısını azaltmayı amaçlar ; Ancak bunlar birkaç bin satırlık programlarda kaçınılmazdır. Bir kelime işlemci programı 750.000 satırdan fazla koddan ve bir işletim sistemi 50 milyondan fazla satırdan yapılabilir. Ortalama olarak, bir programcı günde yaklaşık 20 program satırı hazırlar, yazar, test eder ve belgeler ve büyük programların oluşturulması ekiplerin işidir ve birkaç ay hatta yıllar alabilir.
Programlama, bilgisayar bilimlerinde merkezi bir konudur. Bir bilgisayar tarafından yürütülecek talimatlar, kesin ve açık bir şekilde ifade edilebilmelidir. Bunu yapmak için programlama dilleri, İngilizcenin okunabilirliğini matematiğin doğruluğu ile birleştirir. Programlar, programcılar veya yazılım mühendisleri tarafından oluşturulur. Bir program oluşturmak, tasarlama, yazma, test etme ve belgeleme gibi bir dizi etkinliği içerir. Daha kaliteli bir program elde etmek için programlama çalışmaları sistematik ve planlı bir sürece göre yürütülür.
Bir programlama dili, bir bilgisayara belirli görevleri gerçekleştirmesi için talimat vermek için kullanılan bir kelime hazinesi ve bir dizi yazım kuralıdır. Çoğu programlama dilinin üst düzey olduğu söylenir , yani gösterimleri doğal dillerden (genellikle İngilizce) esinlenmiştir .
İşlemci, talimatları yürüten elektronik bileşendir. Her işlemci, makine yönergeleri adı verilen belirli yönergeleri yürütmek üzere tasarlanmıştır . Bir işlemcide bulunan talimat yelpazesi, makine dilini oluşturur . Örneğin, Intel 80486 işlemcinin 342 yönergelik bir paleti vardır.
Montaj dili, makine talimatlarının metinsel bir temsilidir, düşük seviyeli bir dildir ve makine talimatları ile montaj dili talimatları arasında 1-1 yazışma olduğu yerde, makine talimatlarının işlenmesi daha kolay sembolik bir biçimde ifade edilmesini sağlar.
Üst düzey programlama dilleri, talimatların makine dilini yok sayarak sentetik bir şekilde ifade edilmesini sağlar. Assembly diline kıyasla yapıların ifade edilmesine, programların daha az talimatla daha hızlı yazılmasına izin verirler. Üst düzey dillerde yazılan programlar daha kolay değiştirilebilir ve taşınabilirdir ve farklı işlemcilerle çalışabilir. Bununla birlikte, yüksek seviyeli bir dilde ifade edilen ve daha sonra derlenen bir program daha az verimlidir ve montaj dilinde ifade edilmiş olandan daha fazla talimata sahiptir.
1950 ile 2000 yılları arasında 50'den fazla programlama dili ortaya çıktı. Her biri birçok yeni konsept, iyileştirme ve yenilik getirdi. 1950'lere kadar programlama dillerinin kullanımı makine komutları yazmaya benziyordu. 1960'ların yeniliği, hesaplama talimatlarını yazmak için matematiğe yakın bir gösterime izin vermekti. 1970'lerin yenilikleri, programlar tarafından işlenen bilgileri organize etmeyi ve birleştirmeyi mümkün kıldı - bkz. veri yapısı ve kontrol yapısı . Daha sonra nesne kavramının gelişi, 1980'den sonra programlama dillerinin evrimini etkiledi.
Java programlama dilinde ifade edilen Merhaba dünya programı aşağıdadır :
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }Aynı program, x86 işlemcilerin Assembly dilinde ifade edilmiştir :
main proc jmp debut mess db 'Hello world!$' debut: mov dx, offset mess mov ah, 9 int 21h ret main endp cseg ends end mainBir program tipik olarak bir dizi prosedür ve işlevden oluşur . Prosedür, bir işlemi gerçekleştirmeyi amaçlayan bir dizi talimattır; örneğin, bir listeyi sıralamak. İşlev, bir sonuç üretmeyi amaçlayan bir dizi talimattır; örneğin, bir hesaplama.
Bir hata , bir programda bir yapı kusur. Bilgi işlem cihazının yürüttüğü talimatlar, beklenenlerle eşleşmiyor ve bu da arızalara ve çökmelere neden oluyor. Bilgisayar programlama pratiği, hataları izlemek veya önlemek veya programın doğruluğunu doğrulamak için araçlar gerektirir.
Program uygulama ilkesine dayanmaktadır saklanan program, makine içinde John von Neumann : Program talimatları yürütür işlemci . Bu elektronik bileşen, her program talimatını bir dizi yükleme / kod çözme / yürütme işlemi ile yürütür: talimat önce bellekten işlemciye kopyalanır, daha sonra gerçekleştirilecek işlemi belirlemek için parça parça bölünür ve sonuçta yürütülür. . İşlemlerin çoğu aritmetik (toplama, çıkarma) veya mantıksaldır . Programların merkezi işlemci (İngiliz CPU ) tarafından yürütülmesi, bilgisayar tarafından gerçekleştirilen işlemlerin bütününü kontrol eder.
Yükle-kod çöz-yürüt döngüsünün yürütülmesi, işlemciye bağlı bir saat tarafından noktalanır.
2011'de, çağdaş işlemciler tarafından desteklenen saat frekansı, saniyede milyonlarca, hatta milyarlarca döngüye karşılık gelen megahertz veya gigahertz cinsinden sayılır.
Çağdaş işlemciler aynı anda birden fazla talimatı işleyebilir: bir talimat yüklendiğinde, işlemci bu talimatın kodunun çözülmesini ve ardından yürütülmesini beklemeden hemen bir sonraki talimatı yükler ve işlemciler ayrıca tek bir saat döngüsünde birden fazla talimatı yükleyebilir / kodunu çözebilir / yürütebilir. .
İşlemÇalıştırmak için , makinenin belleğine bir program yüklenmelidir . Bir programın yüklenmesi , örneğin bilgisayarın primeri etkileşimli olduğunda ve kullanıcının açık bir yürütme sırası tarafından tetiklendiğinde otomatik veya programlanabilir (açık bir komut, bir düğmeye, bir düğmeye, bir simgeye basmak…). Gerçekleştirilecek eylemin niteliğine bağlı olarak, bir program geçici olarak (bir metin yazdırma), tekrarlı olarak (GPS koordinatlarının güncellenmesi) veya (neredeyse) kalıcı olarak (izleme sensörleri) yürütülebilir.
Bir program, adım adım veri gösterimlerini ve hesaplamaları açık bir şekilde belirten bir dizi talimattır . Talimatlar , programın yürütülmesi sırasında verileri manipüle etmeyi amaçlamaktadır . Programın kendisi bir algoritma (lar) veya bir belirtim ile tanımlanır . Bir program, bir algoritmanın farklı aşamalarını doğru bir şekilde tanımlar: ne, ne zaman ve hangi bilgilerle yapılacak. Göre von Neumann mimarisi 1945 yılında oluşturulan bir program insan müdahalesi olmadan tekrar tekrar çalıştırmak mümkün kılan bilgisayar, belleğe yüklenir ve her şeyden istediğimiz birçok programları çalıştırmak için aynı makineyi kullanmak. Programlara ayrılmış bellek aynı zamanda verilere ayrılmış bellektir; bu, programların diğer herhangi bir veri gibi ele alınmasını (örneğin, bir metin belgesi yazarken olduğu gibi yeni programlar yazmak), ardından bunları işlemek için mümkün kılar. .
Programlar sadece bilgisayarlar tarafından değil, bilgisayar bileşenlerine dayanan birçok cihaz tarafından yürütülebilir - örneğin, bazı ev robotları, telefonlar, faks makineleri, ölçüm aletleri, televizyon alıcısı ve ayrıca bilgisayar donanımı parçaları gibi. sürücüler, yönlendiriciler, yazıcılar, video oyun konsolları, kişisel asistanlar ve ATM'ler. Bilgisayarların aksine, bu aygıtlar genellikle bir işletim sistemi içermez, programlar üretim sırasında aygıta kaydedilir ve program yürütme hızı genellikle çok az önemlidir.
Kontrendikasyon olmadan, bir programın talimatları birbiri ardına doğrusal bir şekilde yürütülür. Programlama dilleri, alternatifleri ifade etmeyi mümkün kılar: bir dizi talimat, yalnızca belirli bir koşul yerine getirildiğinde yürütülür, aksi takdirde başka bir dizi yürütülür. Programlama dilleri, belirli bir koşul sağlanana kadar bir dizi talimatın tekrarlanmasına da izin verir.
Yürütme, programlama dilinin bir derleyici veya yorumlayıcı ile kullanılmasına bağlı olarak farklı bir şekilde gerçekleşir .
kriter | Derleme | Tercüme |
---|---|---|
Yeterlik | Yerel makine kodu
Optimize edilebilir |
10 ila 100 kat daha yavaş
Alt programları çağırma Döngülerde kazanç yok |
Odak | Hata bağlantısı ↔ karmaşık kaynak | Bağlantı talimatı ↔ önemsiz yürütme
Basit iz ve gözlemler |
Geliştirme döngüsü | Her değişiklikle döngüyü tamamlayın:
derleme, bağlama, yürütme |
Çok kısa döngü:
değiştir ve tekrar çalıştır |
Modern bilgisayarlar , işletim sistemi adı verilen bir "ana" programı başlatır . Daha sonra sistem tarafından sunulan ve belirli durumlarda bu ortama uyarlanması gereken işlevlerden yararlanabilen alt programların yürütülmesine izin verir. Çağdaş işletim sistemleri , tek bir işlemciyle bile , işlem halindeki birden fazla programı eşzamanlı olarak çalıştırmaya izin verir : bir planlayıcı (program İngilizcesi : zamanlayıcı ) işletim sistemi, düzenli olarak çalışan programı kesintiye uğratır ve bir başkasıyla el sıkışır. Dönme hızı, programların aynı anda yürütüldüğü yanılsamasını verir.
İşletim sisteminin bir alt yordamı, programları yürütmek için bir ortam olabilir ( farklı bir arabirimle ); örneğin, bir sanal makine .
In hukuk , bir program tarafından korunan bir yazılı eser olan telif . Bu, basılı sürümü olmasa bile kalıcı olarak kaydedildiği sürece program için geçerlidir. Telif hakkı hem kaynak programı hem de ikili programı korur.