Bilgisayar Programlama - Computer programming

Bilgisayar programlama , belirli bir hesaplama sonucunu gerçekleştirmek veya belirli bir görevi gerçekleştirmek için yürütülebilir bir bilgisayar programı tasarlama ve oluşturma sürecidir . Analizi, üreten: Programlama gibi işlemleri kapsar algoritmaları , profilleme Algoritmaların doğruluğu ve kaynak tüketimi ve seçilen algoritmaların uygulanması programlama dili (yaygın olarak anılacaktır kodlama ). Kaynak kodu bir programın için anlaşılabilir olan bir veya daha fazla dilde yazılır programcılar ziyade, makine koduna doğrudan tarafından yürütülür, merkezi işlem birimi . Programlamanın amacı , genellikle belirli bir sorunu çözmek için bir bilgisayarda ( bir işletim sistemi kadar karmaşık olabilen) bir görevin performansını otomatikleştirecek bir talimat dizisi bulmaktır . Bu nedenle, yetkin programlama, genellikle uygulama alanı bilgisi , özel algoritmalar ve biçimsel mantık dahil olmak üzere birkaç farklı konuda uzmanlık gerektirir .

Eşlik eden ve programlama diliyle ilgili görevler şunlardır: test , hata ayıklama , kaynak kod bakım uygulanmasını inşa sistemleri ve türetilmiş yönetimini eserler gibi, makine koduna bilgisayar programlarının. Bunlar, programlama sürecinin bir parçası olarak kabul edilebilir, ancak genellikle yazılım geliştirme terimi , asıl kodun yazılması için ayrılmış programlama , uygulama veya kodlama terimleriyle bu daha büyük süreç için kullanılır . Yazılım mühendisliği , mühendislik tekniklerini yazılım geliştirme uygulamalarıyla birleştirir . Tersine mühendislik , tasarımcılar, analistler ve programcılar tarafından anlamak ve yeniden yaratmak/yeniden uygulamak için kullanılan ilgili bir süreçtir.

Tarih

Luigi Menabrea'nın yazısının sonuna notları eklenen Ada Lovelace , bir Analitik Motor tarafından işlenmek üzere tasarlanmış ilk algoritmayı içeriyordu . Genellikle tarihin ilk bilgisayar programcısı olarak tanınır.

Programlanabilir cihazlar yüzyıllardır var olmuştur. 9. yüzyıldan itibaren olduğu gibi, programlanabilir bir müzik sequencer Pers tarafından icat edilmiştir Banu Musa otomatik mekanik açıklanan kardeşler, flüt içinde oyuncu Hünerli Cihazların Kitabı . 1206'da Arap mühendis Al-Jazari , mandallar ve kamlar aracılığıyla farklı ritimler ve davul kalıpları çalmak için müzikal bir mekanik otomatın yapılabileceği programlanabilir bir davul makinesi icat etti . 1801'de Jakarlı dokuma tezgahı , "programı" değiştirerek tamamen farklı dokumalar üretebildi - üzerlerinde delikler açılmış bir dizi mukavva kart.

Şifre kırma algoritmaları da yüzyıllardır var olmuştur. 9. yüzyılda, Arap matematikçi Al-Kindi , A Manuscript on Deciphering Cryptographic Messages adlı kitabında , şifreli kodun deşifre edilmesi için bir kriptografik algoritma tanımladı . O, ilk tanımı verdi kriptanaliz vasıtasıyla frekans analizi , ilk kod-kırma algoritması.

İlk bilgisayar programı matematikçi zaman, genel olarak 1843 tarihli olup, Ada Ak bir geçme algoritma bir dizi hesaplamak için Bernoulli sayı , tarafından taşınması amaçlanan Charles Babbage'den sitesindeki Analitik Engine .

Veriler ve talimatlar bir zamanlar düzenli tutulan ve program destelerinde düzenlenen harici delikli kartlarda saklanıyordu.

1880'lerde Herman Hollerith , verileri makine tarafından okunabilir biçimde depolama kavramını icat etti . Daha sonra , 1906 Tip I Tabulator'ına eklenen bir kontrol paneli (fiş kartı), farklı işler için programlanmasına izin verdi ve 1940'ların sonunda , IBM 602 ve IBM 604 gibi birim kayıt ekipmanları , kontrol panelleri tarafından benzer bir şekilde programlandı. ilk elektronik bilgisayarlar gibi . Ancak 1949 yılında tanıtılan depolanmış programlı bilgisayar konsepti ile hem programlar hem de veriler bilgisayar belleğinde aynı şekilde depolanmış ve manipüle edilmiştir .

Makine dili

Makine kodu , belirli bir makinenin komut setinde , genellikle ikili gösterimde yazılan erken programların diliydi. Kısa süre sonra, programcının her işlem kodu için kısaltmalar ve adresleri belirtmek için anlamlı isimlerle birlikte bir metin biçiminde (örneğin, ADD X, TOTAL) talimatı belirlemesine izin veren derleme dilleri geliştirildi. Bununla birlikte, bir montaj dili, bir makine dili için farklı bir gösterimden biraz daha fazlası olduğu için, farklı komut setlerine sahip herhangi iki makinenin de farklı montaj dilleri vardır.

IBM 402 Muhasebe Makinesi için kablolu kontrol paneli .

derleyici dilleri

Yüksek seviyeli diller , bir program geliştirme sürecini daha basit, daha anlaşılır ve temel donanıma daha az bağlı hale getirdi. Derleyici ile ilgili ilk araç olan A-0 Sistemi , 1952'de 'derleyici' terimini de kullanan Grace Hopper tarafından geliştirildi . İşlevsel bir uygulamaya sahip ilk yaygın olarak kullanılan yüksek seviyeli dil olan FORTRAN 1957'de çıktı ve kısa süre sonra diğer birçok dil geliştirildi - özellikle ticari veri işlemeyi hedefleyen COBOL ve bilgisayar araştırmaları için Lisp .

Bu derlenmiş diller, programcının sözdizimsel olarak daha zengin ve kodu daha fazla soyutlayabilen terimlerle programlar yazmasına izin vererek, derleme bildirimleri ve buluşsal yöntemler aracılığıyla değişen makine talimat setlerini hedeflemeyi kolaylaştırır. Derleyiciler, programcıların infix notasyonu kullanarak bir formül girerek hesaplamaları belirlemesine izin vererek programlamayı kolaylaştırmak için bilgisayarların gücünden yararlandı .

Kaynak kodu girişi

Programlar çoğunlukla hala delikli kartlar veya kağıt bant kullanılarak giriliyordu . 1960'ların sonlarında, veri depolama aygıtları ve bilgisayar terminalleri , programların doğrudan bilgisayarlara yazılarak oluşturulabilmesi için yeterince ucuz hale geldi. Değişikliklerin ve düzeltmelerin delikli kartlardan çok daha kolay yapılmasına izin veren metin editörleri de geliştirildi.

Modern programlama

Kalite gereksinimleri

Geliştirme yaklaşımı ne olursa olsun, nihai programın bazı temel özellikleri karşılaması gerekir. Aşağıdaki özellikler en önemlileri arasındadır:

  • Güvenilirlik : Bir programın sonuçlarının ne sıklıkla doğru olduğu. Bu, algoritmaların kavramsal doğruluğuna ve kaynak yönetimindeki hatalar (örneğin, arabellek taşmaları ve yarış koşulları ) ve mantık hataları (sıfıra bölme veya bire bir hatalar gibi ) gibi programlama hatalarının en aza indirilmesine bağlıdır .
  • Sağlamlık : Bir programın hatalardan (hatalardan değil) kaynaklanan sorunları ne kadar iyi öngördüğü. Buna hatalı, uygun olmayan veya bozuk veriler, bellek, işletim sistemi hizmetleri ve ağ bağlantıları gibi ihtiyaç duyulan kaynakların bulunmaması, kullanıcı hatası ve beklenmeyen elektrik kesintileri gibi durumlar dahildir.
  • Kullanılabilirlik : Bir programın ergonomisi : Bir kişinin programı amaçlanan amacı için veya hatta bazı durumlarda beklenmedik amaçlar için kullanabilme kolaylığı. Bu tür sorunlar, diğer sorunlardan bağımsız olarak bile başarısını sağlayabilir veya bozabilir. Bu, bir programın kullanıcı arayüzünün netliğini, sezgiselliğini, tutarlılığını ve eksiksizliğini geliştiren çok çeşitli metinsel, grafiksel ve bazen donanım öğelerini içerir.
  • Taşınabilirlik : Bir programın kaynak kodunun derlenebileceği / yorumlanabileceği ve çalıştırılabileceği bilgisayar donanımı ve işletim sistemi platformları aralığı . Bu, donanım ve işletim sistemi kaynakları, donanım ve işletim sisteminin beklenen davranışı ve kaynak kodun dili için platforma özel derleyicilerin (ve bazen kitaplıkların) kullanılabilirliği dahil olmak üzere farklı platformlar tarafından sağlanan programlama olanaklarındaki farklılıklara bağlıdır.
  • Sürdürülebilirlik : Bir programın, iyileştirmeler yapmak veya özelleştirmek, hataları ve güvenlik açıklarını düzeltmek veya yeni ortamlara uyarlamak için mevcut veya gelecekteki geliştiricileri tarafından değiştirilme kolaylığı . İlk geliştirme sırasındaki iyi uygulamalar bu konuda fark yaratır. Bu kalite, son kullanıcı tarafından doğrudan görülmeyebilir, ancak uzun vadede bir programın kaderini önemli ölçüde etkileyebilir.
  • Verimlilik / performans : Bir programın tükettiği sistem kaynaklarının ölçümü (işlemci süresi, bellek alanı, diskler gibi yavaş cihazlar, ağ bant genişliği ve hatta bir dereceye kadar kullanıcı etkileşimi): ne kadar az, o kadar iyi. Bu aynı zamanda kaynakların dikkatli yönetimini de içerir, örneğin geçici dosyaların temizlenmesi ve bellek sızıntılarının ortadan kaldırılması . Bu genellikle seçilen bir programlama dilinin gölgesinde tartışılır. Dil performansı kesinlikle etkilese de, Python gibi daha yavaş diller bile programları insan bakış açısıyla anında çalıştırabilir. Sistemde darboğaz yapan programlar için hız, kaynak kullanımı ve performans önemlidir, ancak programcı zamanının verimli kullanımı da önemlidir ve maliyetle ilişkilidir: daha fazla donanım daha ucuz olabilir.

Kaynak kodunun okunabilirliği

Bilgisayar programlamasında okunabilirlik , bir insan okuyucunun kaynak kodunun amacını, kontrol akışını ve çalışmasını anlama kolaylığı anlamına gelir . Taşınabilirlik, kullanılabilirlik ve en önemlisi sürdürülebilirlik dahil olmak üzere kalitenin yukarıdaki yönlerini etkiler.

Okunabilirlik önemlidir, çünkü programcılar zamanlarının çoğunu yeni kaynak kodu yazmak yerine okuyarak, mevcut kaynak kodunu anlamaya ve değiştirmeye çalışarak geçirirler. Okunamayan kodlar genellikle hatalara, verimsizliklere ve yinelenen kodlara yol açar . Bir çalışma, birkaç basit okunabilirlik dönüşümünün kodu kısalttığını ve anlama süresini önemli ölçüde azalttığını buldu.

Tutarlı bir programlama stilini takip etmek genellikle okunabilirliğe yardımcı olur. Ancak, okunabilirlik sadece programlama stilinden daha fazlasıdır. Bilgisayarın kodu verimli bir şekilde derleme ve yürütme yeteneği ile çok az veya hiç ilgisi olmayan birçok faktör, okunabilirliğe katkıda bulunur. Bu faktörlerden bazıları şunlardır:

Bunun sunum yönleri (girintiler, satır sonları, renk vurgulama vb.) genellikle kaynak kodu düzenleyicisi tarafından işlenir , ancak içerik yönleri programcının yetenek ve becerilerini yansıtır.

Kod yapısı ve görüntülemeye yönelik geleneksel olmayan yaklaşımları benimseyerek okunabilirlik sorunlarını çözmek amacıyla çeşitli görsel programlama dilleri de geliştirilmiştir. Entegre geliştirme ortamları (IDE'ler), bu tür tüm yardımları entegre etmeyi amaçlar. Kodu yeniden düzenleme gibi teknikler okunabilirliği artırabilir.

algoritmik karmaşıklık

Bilgisayar programlamanın akademik alanı ve mühendislik uygulaması, büyük ölçüde belirli bir problem sınıfı için en verimli algoritmaları keşfetmek ve uygulamakla ilgilidir. Bu amaçla, algoritmalar , bir girdinin boyutu açısından yürütme süresi veya bellek tüketimi gibi kaynak kullanımını ifade eden Big O notasyonu olarak adlandırılan kullanılarak siparişler halinde sınıflandırılır . Uzman programcılar, çeşitli yerleşik algoritmalara ve bunların ilgili karmaşıklıklarına aşinadır ve bu bilgiyi koşullara en uygun algoritmaları seçmek için kullanır.

Örnek olarak satranç algoritmaları

"Bir Bilgisayarı Satranç Oynamak İçin Programlamak", algoritmik karmaşıklık tarihinin bir parçası olan bir "minimax" algoritmasını değerlendiren 1950 tarihli bir makaleydi ; IBM'in Deep Blue (satranç bilgisayarı) üzerine bir kurs , Stanford Üniversitesi'ndeki bilgisayar bilimi müfredatının bir parçasıdır .

metodolojiler

Resmi yazılım geliştirme süreçlerinin çoğunda ilk adım gereksinim analizidir , ardından değer modelleme, uygulama ve hata gidermeyi (hata ayıklama) belirlemek için test yapılır. Bu görevlerin her biri için birçok farklı yaklaşım vardır. Gereksinim analizi için popüler olan bir yaklaşım Kullanım Durumu analizidir. Birçok programcı , resmi yazılım geliştirmenin çeşitli aşamalarının, yıllar yerine birkaç hafta süren kısa döngülere daha fazla entegre edildiği Çevik yazılım geliştirme biçimlerini kullanır . Yazılım geliştirme sürecine birçok yaklaşım vardır.

Popüler modelleme teknikleri arasında Nesneye Yönelik Analiz ve Tasarım ( OOAD ) ve Modele Dayalı Mimari ( MDA ) bulunur. Birleşik Modelleme Dili ( UML ), hem OOAD hem de MDA için kullanılan bir gösterimdir.

Veritabanı tasarımı için kullanılan benzer bir teknik Varlık-İlişki Modellemesidir ( ER Modelleme ).

Uygulama teknikleri, zorunlu dilleri ( nesne yönelimli veya prosedürel ), işlevsel dilleri ve mantık dillerini içerir .

Dil kullanımını ölçme

En popüler modern programlama dillerinin hangileri olduğunu belirlemek çok zordur. Programlama dili popülaritesini ölçme yöntemleri şunları içerir: dilden bahseden iş ilanlarının sayısını, satılan kitapların ve dili öğreten kursların sayısını saymak (bu, daha yeni dillerin önemini abartır) ve yazılmış mevcut kod satırlarının sayısının tahmin edilmesi dilde (bu, COBOL gibi iş dillerinin kullanıcılarının sayısını hafife alır).

Bazı diller belirli uygulama türleri için çok popülerken, bazı diller birçok farklı türde uygulama yazmak için düzenli olarak kullanılmaktadır. Örneğin, COBOL genellikle büyük hala kurumsal veri merkezlerinde güçlü ana bilgisayarlar , Fortran mühendislik uygulamalarında betik dilleri de Web geliştirme ve C içinde gömülü yazılım . Birçok uygulama, yapılarında ve kullanımlarında çeşitli dillerin bir karışımını kullanır. Yeni diller genellikle eklenen yeni işlevlerle önceki bir dilin sözdizimi etrafında tasarlanır (örneğin, C++ , C'ye nesne yönelimi ekler ve Java , C++'a bellek yönetimi ve bayt kodu ekler , ancak sonuç olarak, verimliliği ve düşük -seviyede manipülasyon).

hata ayıklama

Bir bilgisayarda soruna neden olan bilinen ilk gerçek hata, 9 Eylül 1947 tarihli bir kayıt defteri girişinde kaydedilen Harvard anabilgisayarının içine hapsolmuş bir güveydi. "Hata", bu hata bulunduğunda zaten bir yazılım hatası için yaygın bir terimdi. .

Hata ayıklama, yazılım geliştirme sürecinde çok önemli bir görevdir, çünkü bir programda kusurların olması, kullanıcıları için önemli sonuçlar doğurabilir. Bazı diller, bazı türdeki hatalara daha yatkındır, çünkü özellikleri, derleyicilerin diğer diller kadar fazla denetleme yapmasını gerektirmez. Bir kullanılması statik kod analizi aracı bazı olası sorunları tespit yardımcı olabilir. Normalde hata ayıklamanın ilk adımı, sorunu yeniden oluşturmaya çalışmaktır. Bu, örneğin paralel süreçlerde veya bazı olağandışı yazılım hatalarında olduğu gibi önemsiz olmayan bir görev olabilir. Ayrıca, belirli kullanıcı ortamı ve kullanım geçmişi, sorunun yeniden oluşturulmasını zorlaştırabilir.

Hata yeniden oluşturulduktan sonra, hata ayıklamayı kolaylaştırmak için program girişinin basitleştirilmesi gerekebilir. Örneğin, bir derleyicideki bir hata, bazı büyük kaynak dosyaları ayrıştırırken onu kilitleyebildiğinde , orijinal kaynak dosyadan yalnızca birkaç satırla sonuçlanan test senaryosunun basitleştirilmesi, aynı çökmeyi yeniden oluşturmak için yeterli olabilir. Deneme-yanılma/böl ve fethet gereklidir: programcı orijinal test senaryosunun bazı kısımlarını kaldırmaya çalışacak ve sorunun devam edip etmediğini kontrol edecektir. Bir GUI'de problemde hata ayıklarken, programcı orijinal problem tanımından bazı kullanıcı etkileşimlerini atlamayı deneyebilir ve kalan eylemlerin hataların ortaya çıkması için yeterli olup olmadığını kontrol edebilir. Komut dosyası oluşturma ve kesme noktası oluşturma da bu sürecin bir parçasıdır.

Hata ayıklama genellikle IDE'ler ile yapılır . GDB gibi bağımsız hata ayıklayıcılar da kullanılır ve bunlar genellikle bir komut satırı kullanarak genellikle daha az görsel ortam sağlar . Emacs gibi bazı metin düzenleyiciler , görsel bir ortam sağlamak için GDB'nin bunlar aracılığıyla çağrılmasına izin verir.

Programlama dilleri

Farklı programlama dilleri, farklı programlama stillerini destekler ( programlama paradigmaları olarak adlandırılır ). Kullanılan dilin seçimi, şirket politikası, göreve uygunluk, üçüncü taraf paketlerinin mevcudiyeti veya bireysel tercih gibi birçok hususa tabidir. İdeal olarak, eldeki görev için en uygun programlama dili seçilecektir. Bu idealden ödün vermek, bir ekip oluşturmak için dili bilen yeterli programcı bulmayı, o dil için derleyicilerin mevcudiyetini ve belirli bir dilde yazılmış programların yürütülme verimliliğini içerir. Diller, "düşük düzey"den "yüksek düzey"e yaklaşık bir spektrum oluşturur; "düşük seviyeli" diller tipik olarak daha makine yönelimli ve daha hızlı yürütülürken, "yüksek seviyeli" diller daha soyut ve kullanımı daha kolaydır ancak daha az hızlı yürütülür. "Yüksek seviyeli" dillerde kod yazmak genellikle "düşük seviyeli" dillerden daha kolaydır.

Allen Downey , How To Think Like A Computer Scientist adlı kitabında şöyle yazıyor:

Ayrıntılar farklı dillerde farklı görünür, ancak hemen hemen her dilde birkaç temel talimat görünür:
  • Giriş: Klavyeden, dosyadan veya başka bir cihazdan veri toplayın.
  • Çıktı: Verileri ekranda görüntüleyin veya bir dosyaya veya başka bir cihaza veri gönderin.
  • Aritmetik: Toplama ve çarpma gibi temel aritmetik işlemleri gerçekleştirin.
  • Koşullu Yürütme: Belirli koşulları kontrol edin ve uygun ifade dizisini yürütün.
  • Tekrar: Genellikle bazı değişikliklerle bazı eylemleri tekrar tekrar gerçekleştirin.

Birçok bilgisayar dili, paylaşılan kitaplıklar tarafından sağlanan işlevleri çağırmak için bir mekanizma sağlar . Bir kitaplıktaki işlevlerin uygun çalışma zamanı kurallarına uyması koşuluyla (örneğin, argümanları iletme yöntemi ), bu işlevler başka herhangi bir dilde yazılabilir.

programcılar

Bilgisayar programcıları, bilgisayar yazılımı yazan kişilerdir. İşleri genellikle şunları içerir:

Programlama medyada biraz matematiksel bir konu olarak sunulsa da, bazı araştırmalar iyi programcıların doğal insan dillerinde güçlü becerilere sahip olduğunu ve kodlamayı öğrenmenin bir yabancı dil öğrenmeye benzer olduğunu gösteriyor .

Ayrıca bakınız

Referanslar

Kaynaklar

daha fazla okuma

  • AK Hartmann, Practical Guide to Computer Simulations , Singapur: World Scientific (2009)
  • A. Hunt, D. Thomas ve W. Cunningham, The Pragmatic Programmer. Journeyman'dan Master'a , Amsterdam: Addison-Wesley Longman (1999)
  • Brian W. Kernighan, Programlama Uygulaması , Pearson (1999)
  • Weinberg, Gerald M. , Bilgisayar Programlamanın Psikolojisi , New York: Van Nostrand Reinhold (1971)
  • Edsger W. Dijkstra , Programlama Disiplini , Prentice-Hall (1976)
  • O.-J. Dahl, EWDijkstra , CAR Hoare, Yapılandırılmış Programlama , Academic Press (1972)
  • David Gries , Programlama Bilimi , Springer-Verlag (1981)

Dış bağlantılar