(Translated by https://www.hiragana.jp/)
Προγραμματισμός - Βικιπαίδεια Μετάβαση σしぐまτたうοおみくろん περιεχόμενο

Προγραμματισμός

Από τたうηいーた Βικιπαίδεια, τたうηいーたνにゅー ελεύθερη εγκυκλοπαίδεια

Προγραμματισμός υπολογιστών είναι ηいーた διαδικασία εκτέλεσης ενός συγκεκριμένου υπολογισμού (ή γενικότερα, ηいーた επίτευξη ενός συγκεκριμένου υπολογιστικού αποτελέσματος), συνήθως μみゅーεいぷしろん τたうοおみくろん σχεδιασμό/κατασκευή ενός εκτελέσιμου προγράμματος υπολογιστή . Οおみくろん προγραμματισμός περιλαμβάνει εργασίες όπως ανάλυση, δημιουργία αλγορίθμων, δημιουργία προφίλ γがんまιいおたαあるふぁ τたうηいーたνにゅー ακρίβεια κかっぱαあるふぁιいおた κατανάλωση πόρων τたうωおめがνにゅー αλγορίθμων κかっぱαあるふぁιいおた τたうηいーたνにゅー υλοποίηση αλγορίθμων (συνήθως σしぐまεいぷしろん μみゅーιいおたαあるふぁ επιλεγμένη γλώσσα προγραμματισμού, κοινώς λεγόμενη ως κωδικοποίηση ).[1][2] Οおみくろん πηγαίος κώδικας ενός προγράμματος είναι γραμμένος σしぐまεいぷしろん μία ή περισσότερες γλώσσες πぱいοおみくろんυうぷしろん είναι κατανοητές από τους προγραμματιστές, κかっぱαあるふぁιいおた όχι σしぐまεいぷしろん κώδικα μηχανής, οおみくろん οποίος εκτελείται απευθείας από τたうηいーたνにゅー κεντρική μονάδα επεξεργασίας . Οおみくろん σκοπός τたうοおみくろんυうぷしろん προγραμματισμού είναι νにゅーαあるふぁ βべーたρろーεいぷしろんιいおた μみゅーιいおたαあるふぁ ακολουθία εντολών πぱいοおみくろんυうぷしろん θしーたαあるふぁ αυτοματοποιήσει τたうηいーたνにゅー εκτέλεση μιας εργασίας (ηいーた οποία μπορεί νにゅーαあるふぁ είναι τόσο περίπλοκη όσο ένα λειτουργικό σύστημα ) σしぐまεいぷしろん έναν υπολογιστή, συχνά μみゅーεいぷしろん σκοπό τたうηいーたνにゅー επίλυση ενός δεδομένου προβλήματος. Επομένως, οおみくろん ικανός προγραμματισμός απαιτεί συνήθως εξειδίκευση σしぐまεいぷしろん πολλά διαφορετικά θέματα, συμπεριλαμβανομένου της γνώσης σしぐまτたうοおみくろんνにゅー τομέα εφαρμογής, εξειδικευμένων αλγορίθμων κかっぱαあるふぁιいおた τυπικής λογικής .

Οおみくろんιいおた εργασίες πぱいοおみくろんυうぷしろん συνοδεύουν κかっぱαあるふぁιいおた σχετίζονται μみゅーεいぷしろん τたうοおみくろんνにゅー προγραμματισμό περιλαμβάνουν ελέγχους,εντοπισμό σφαλμάτων, τたうηいーた συντήρηση τたうοおみくろんυうぷしろん πηγαίου κώδικα, τたうηいーたνにゅー υλοποίηση συστημάτων κατασκευής κかっぱαあるふぁιいおた τたうηいーた διαχείριση παραγόμενων τεχνουργημάτων, όπως οおみくろん κώδικας μηχανής προγραμμάτων υπολογιστών. Αυτά συνήθως θεωρούνται τμήμα της διαδικασίας προγραμματισμού, αλλά συχνά οおみくろん όρος ανάπτυξη λογισμικού χρησιμοποιείται γがんまιいおたαあるふぁ αυτή τたうηいーた μεγαλύτερη διαδικασία, ενώ οおみくろんιいおた όροι προγραμματισμός, υλοποίηση ή κωδικοποίηση νにゅーαあるふぁ προορίζονται γがんまιいおたαあるふぁ τたうηいーたνにゅー πραγματική εγγραφή κώδικα. Ηいーた μηχανική λογισμικού συνδυάζει τεχνικές μηχανικής μみゅーεいぷしろん πρακτικές ανάπτυξης λογισμικού . Ηいーた αντίστροφη μηχανική είναι μみゅーιいおたαあるふぁ σχετική διαδικασία πぱいοおみくろんυうぷしろん χρησιμοποιείται γがんまιいおたαあるふぁ τたうηいーたνにゅー κατανόηση κかっぱαあるふぁιいおた τたうηいーたνにゅー εいぷしろんκかっぱ νέου δημιουργία/εφαρμογή από σχεδιαστές, αναλυτές κかっぱαあるふぁιいおた προγραμματιστές.[3]

Ηいーた Άντα Λάβλεϊς, της οποίας οおみくろんιいおた σημειώσεις προστέθηκαν σしぐまτたうοおみくろん τέλος της εργασίας τたうοおみくろんυうぷしろん Λουίτζι Μαναμπρέα περιελάμβαναν τたうοおみくろんνにゅー πρώτο αλγόριθμο πぱいοおみくろんυうぷしろん σχεδιάστηκε γがんまιいおたαあるふぁ επεξεργασία από μみゅーιいおたαあるふぁ Aναλυτική Mηχανή. Συχνά αναγνωρίζεται ως ηいーた πρώτη προγραμματίστρια υπολογιστών σしぐまτたうηいーたνにゅー ιστορία.

Οおみくろんιいおた προγραμματιζόμενες συσκευές υπάρχουν εδώ κかっぱαあるふぁιいおた αιώνες. Ήδη από τたうοおみくろんνにゅー 9οおみくろん αιώνα, ένα προγραμματιζόμενο πρόγραμμα ακολουθίας μουσικής εφευρέθηκε από τους Πέρσες αδερφούς Banu Musa, οおみくろんιいおた οποίοι περιέγραψαν ένα αυτοματοποιημένο μηχανικό φλάουτο σしぐまτたうοおみくろん Βιβλίο Έξυπνων Μηχανών (Book of Ingenious Devices) .[4][5] Τたうοおみくろん 1206, οおみくろん Άραβας μηχανικός Αあるふぁλらむだ-Τζαζάρι εφηύρε μみゅーιいおたαあるふぁ προγραμματιζόμενη μηχανή τυμπάνων σしぐまτたうοおみくろん οποίο ένα μουσικό μηχανικό αυτόματο ήταν φτιάγμενο νにゅーαあるふぁ παίζει διάφορους ρυθμούς κかっぱαあるふぁιいおた μοτίβα τυμπάνων, μέσω καρφιών κかっぱαあるふぁιいおた εκκεντροφόρων .[6][7] Τたうοおみくろん 1801, οおみくろん αργαλειός Ζακάρ μπορούσε νにゅーαあるふぁ παράγει εντελώς διαφορετικές πλέξεις αλλάζοντας τたうοおみくろん "πρόγραμμα" - μみゅーιいおたαあるふぁ σειρά από χαρτόνια μみゅーεいぷしろん διάτρητες τρύπες.

Οおみくろんιいおた αλγόριθμοι παραβίασης κώδικα υπάρχουν επίσης εδώ κかっぱαあるふぁιいおた αιώνες. Τον 9οおみくろん αιώνα, οおみくろん Άραβας μαθηματικός Αあるふぁλらむだ-Κίντι περιέγραψε έναν κρυπτογραφικό αλγόριθμο γがんまιいおたαあるふぁ τたうηいーたνにゅー αποκρυπτογράφηση κρυπτογραφημένου κώδικα, σしぐまτたうοおみくろん Ένα χειρόγραφο σしぐまτたうηいーたνにゅー Αποκρυπτογράφηση Κρυπτογραφημένων Μηνυμάτων (A Manuscript on Deciphering Cryptographic Messages) . Εκεί έδωσε τたうηいーたνにゅー πρώτη περιγραφή της κρυπτανάλυσης μみゅーεいぷしろん ανάλυση συχνότητας, τたうοおみくろんνにゅー παλαιότερο αλγόριθμο διάσπασης κώδικα.[8]

Τたうοおみくろん 1843 θεωρείται ως ηいーた χρονολογία δημιουργίας τたうοおみくろんυうぷしろん πρώτου προγράμματος υπολογιστή, όταν ηいーた μαθηματικός Άντα Λάβλεϊς δημοσίευσε έναν αλγόριθμο γがんまιいおたαあるふぁ τたうοおみくろんνにゅー υπολογισμό μιας ακολουθίας αριθμών Bernoulli, πぱいοおみくろんυうぷしろん προοριζόταν νにゅーαあるふぁ εκτελεστεί από τたうηいーたνにゅー Αναλυτική Μηχανή τたうοおみくろんυうぷしろん Τσαρλς Μπάμπατζ .[9]

Τたうαあるふぁ δεδομένα κかっぱαあるふぁιいおた οおみくろんιいおた οδηγίες αποθηκεύονταν κάποτε σしぐまεいぷしろん εξωτερικές διάτρητες κάρτες, οおみくろんιいおた οποίες διατηρούνταν σしぐまεいぷしろん τάξη κかっぱαあるふぁιいおた ταξινομούνταν σしぐまεいぷしろん πρόγραμμα τραπουλών.

Σしぐまτたうηいーた δεκαετία τたうοおみくろんυうぷしろん 1880, οおみくろん Χέρμαν Χόλεριθ επινόησε τたうηいーたνにゅー έννοια της αποθήκευσης δεδομένων σしぐまεいぷしろん μορφή αναγνώσιμη από μηχανές.[10] Αργότερα, ένας πίνακας ελέγχου (πίνακας βύσματος) πぱいοおみくろんυうぷしろん προστέθηκε σしぐまτたうοおみくろんνにゅー πίνακά τたうοおみくろんυうぷしろん, τύπου 1906, τたうοおみくろんυうぷしろん επέτρεψε τたうοおみくろんνにゅー προγραμματισμό τたうοおみくろんυうぷしろん πίνακα γがんまιいおたαあるふぁ διαφορετικές εργασίες, κかっぱαあるふぁιいおた σしぐまτたうαあるふぁ τέλη της δεκαετίας τたうοおみくろんυうぷしろん 1940, οおみくろん εξοπλισμός εγγραφής μονάδων όπως τたうοおみくろん IBM 602 και τたうοおみくろん IBM 604 προγραμματίστηκαν από πίνακες ελέγχου μみゅーεいぷしろん τρόπο παρόμοιο, όπως ήταν κかっぱαあるふぁιいおた οおみくろんιいおた πρώτοι ηλεκτρονικοί υπολογιστές . Ωστόσο, μみゅーεいぷしろん τたうηいーたνにゅー έννοια τたうοおみくろんυうぷしろん υπολογιστή αποθηκευμένου προγράμματος πぱいοおみくろんυうぷしろん εισήχθη τたうοおみくろん 1949, τόσο τたうαあるふぁ προγράμματα όσο κかっぱαあるふぁιいおた τたうαあるふぁ δεδομένα αποθηκεύονταν κかっぱαあるふぁιいおた χειρίζονταν μみゅーεいぷしろん τたうοおみくろんνにゅー ίδιο τρόπο σしぐまτたうηいーた μνήμη τたうοおみくろんυうぷしろん υπολογιστή .[11]

Γλώσσα μηχανής (Machine Language)

[Επεξεργασία | επεξεργασία κώδικα]

Οおみくろん κώδικας μηχανής ήταν ηいーた γλώσσα τたうωおめがνにゅー αρχικών προγραμμάτων, γραμμένος σしぐまτたうοおみくろん σύνολο εντολών της συγκεκριμένης μηχανής, συχνά σしぐまεいぷしろん δυαδικό συμβολισμό. Σύντομα αναπτύχθηκαν γλώσσες συναρμολόγησης (assembly language) πぱいοおみくろんυうぷしろん επέτρεπαν σしぐまτたうοおみくろんνにゅー προγραμματιστή νにゅーαあるふぁ καθορίσει οδηγίες σしぐまεいぷしろん μορφή κειμένου (πぱい.χかい. ADD X, TOTAL), μみゅーεいぷしろん συντομογραφίες γがんまιいおたαあるふぁ κάθε κωδικό λειτουργίας κかっぱαあるふぁιいおた ουσιαστικά ονόματα γがんまιいおたαあるふぁ τたうοおみくろんνにゅー καθορισμό διευθύνσεων. Ωστόσο, επειδή μみゅーιいおたαあるふぁ γλώσσα συναρμολόγησης είναι κάτι περισσότερο από μみゅーιいおたαあるふぁ διαφορετικό συμβολισμό γがんまιいおたαあるふぁ μみゅーιいおたαあるふぁ γλώσσα μηχανής, δύο μηχανές μみゅーεいぷしろん διαφορετικά σύνολα εντολών έχουν επίσης διαφορετικές γλώσσες συναρμολόγησης.

Ενσύρματος πίνακας ελέγχου γがんまιいおたαあるふぁ μみゅーιいおたαあるふぁ Λογιστική Μηχανή IBM 402 .

Γλώσσες μεταγλωττιστή (Compiler languages)

[Επεξεργασία | επεξεργασία κώδικα]

Οおみくろんιいおた γλώσσες υψηλού επιπέδου έκαναν τたうηいーた διαδικασία ανάπτυξης ενός προγράμματος απλούστερη, πぱいιいおたοおみくろん κατανοητή κかっぱαあるふぁιいおた λιγότερο συνδεδεμένη μみゅーεいぷしろん τたうοおみくろん υποκείμενο υλικό (hardware). Τたうοおみくろん πρώτο εργαλείο, σχετιζόμενο μみゅーεいぷしろん τたうοおみくろんνにゅー μεταγλωττιστή, τたうοおみくろん σύστημα A-0, αναπτύχθηκε τたうοおみくろん 1952 [12] από τたうηいーたνにゅー Γκρέις Χόπερ, ηいーた οποία επίσης επινόησε τたうοおみくろんνにゅー όρο «μεταγλωττιστής».[13] Ηいーた FORTRAN, ηいーた πρώτη ευρέως χρησιμοποιούμενη γλώσσα υψηλού επιπέδου πぱいοおみくろんυうぷしろん είχε λειτουργική εφαρμογή, κυκλοφόρησε τたうοおみくろん 1957,[14] κかっぱαあるふぁιいおた πολλές άλλες γλώσσες ακολούθησαν - ιδιαίτερα, ηいーた COBOL πぱいοおみくろんυうぷしろん στόχευε σしぐまτたうηいーたνにゅー εμπορική επεξεργασία δεδομένων κかっぱαあるふぁιいおた ηいーた Lisp γがんまιいおたαあるふぁ υπολογιστική έρευνα.

Αυτές οおみくろんιいおた μεταγλωττισμένες γλώσσες επιτρέπουν σしぐまτたうοおみくろんνにゅー προγραμματιστή νにゅーαあるふぁ γράφει προγράμματα μみゅーεいぷしろん όρους πぱいοおみくろんυうぷしろん είναι συντακτικά πλουσιότεροι κかっぱαあるふぁιいおた πぱいιいおたοおみくろん ικανοί νにゅーαあるふぁ γενικεύουν τたうοおみくろんνにゅー κώδικα, καθιστώντας εύκολη τたうηいーた εύρεση διαφορών συνόλων εντολών μηχανής μέσω δηλώσεων μεταγλώττισης κかっぱαあるふぁιいおた ευρετικών μηχανισμών. Οおみくろんιいおた μεταγλωττιστές εκμεταλλεύτηκαν τたうηいーた δύναμη τたうωおめがνにゅー υπολογιστών νにゅーαあるふぁ κάνουν τたうοおみくろんνにゅー προγραμματισμό ευκολότερο [14] επιτρέποντας στους προγραμματιστές νにゅーαあるふぁ καθορίζουν υπολογισμούς εισάγοντας έναν τύπο χρησιμοποιώντας συμβολισμό ενθέματος (infix notation) .

Καταχώρηση πηγαίου κώδικα

[Επεξεργασία | επεξεργασία κώδικα]

Τたうαあるふぁ προγράμματα καταχωρούνταν κυρίως χρησιμοποιώντας διάτρητες κάρτες ή χαρτοταινία . Σしぐまτたうαあるふぁ τέλη της δεκαετίας τたうοおみくろんυうぷしろん 1960, οおみくろんιいおた συσκευές αποθήκευσης δεδομένων κかっぱαあるふぁιいおた τたうαあるふぁ τερματικά υπολογιστών έγιναν αρκετά φθηνά, ώστε νにゅーαあるふぁ επιτρέψουν σしぐまτたうαあるふぁ προγράμματα νにゅーαあるふぁ δημιουργούνται πληκτρολογώντας απευθείας στους υπολογιστές. Προγράμματα επεξεργασίας κειμένου (text editor) αναπτύχθηκαν επίσης, τたうαあるふぁ οποία επέτρεπαν πぱいιいおたοおみくろん εύκολες αλλαγές κかっぱαあるふぁιいおた διορθώσεις, σしぐまεいぷしろん σχέση μみゅーεいぷしろん τις διάτρητες κάρτες.

Σύγχρονος προγραμματισμός

[Επεξεργασία | επεξεργασία κώδικα]

Απαιτήσεις ποιότητας

[Επεξεργασία | επεξεργασία κώδικα]

Ανεξάρτητα της προσέγγισης σしぐまτたうηいーたνにゅー ανάπτυξη, τたうοおみくろん τελικό πρόγραμμα πρέπει νにゅーαあるふぁ ικανοποιεί ορισμένες θεμελιώδεις ιδιότητες. Οおみくろんιいおた ακόλουθες ιδιότητες είναι από τις πぱいιいおたοおみくろん σημαντικές:[15]

  • Αξιοπιστία : πόσο συχνά τたうαあるふぁ αποτελέσματα ενός προγράμματος είναι σωστά. Αυτό εξαρτάται από τたうηいーたνにゅー εννοιολογική ορθότητα τたうωおめがνにゅー αλγορίθμων κかっぱαあるふぁιいおた τたうηいーたνにゅー ελαχιστοποίηση τたうωおめがνにゅー σφαλμάτων προγραμματισμού, όπως λάθη σしぐまτたうηいーた διαχείριση πόρων (πぱい.χかい. Υπερχείλιση προσωρινής μνήμης κかっぱαあるふぁιいおた συνθήκες αγώνα (race condition) ) κかっぱαあるふぁιいおた λογικά σφάλματα (όπως ηいーた διαίρεση μみゅーεいぷしろん μηδέν).
  • Ισχυρότητα: πόσο καλά ένα πρόγραμμα προβλέπει προβλήματα πぱいοおみくろんυうぷしろん οφείλονται σしぐまεいぷしろん γενικά προγραμματιστικά σφάλματα / errors (κかっぱαあるふぁιいおた όχι σしぐまεいぷしろん σφάλματα πぱいοおみくろんυうぷしろん παρεκκλίνουν από τたうοおみくろん αποδεκτό αποτέλεσμα / bugs ). Αυτό περιλαμβάνει καταστάσεις όπως εσφαλμένα, ακατάλληλα ή κατεστραμμένα δεδομένα, μみゅーηいーた διαθεσιμότητα τたうωおめがνにゅー απαραίτητων πόρων όπως μνήμη, υπηρεσίες λειτουργικού συστήματος κかっぱαあるふぁιいおた συνδέσεις δικτύου, σφάλμα χρήστη κかっぱαあるふぁιいおた απρόοπτες διακοπές ρεύματος.
  • Ευχρηστία : ηいーた εργονομία ενός προγράμματος: ηいーた ευκολία μみゅーεいぷしろん τたうηいーたνにゅー οποία ένα άτομο μπορεί νにゅーαあるふぁ χρησιμοποιήσει τたうοおみくろん πρόγραμμα γがんまιいおたαあるふぁ τたうοおみくろんνにゅー συγκεκριμένο σκοπό πぱいοおみくろんυうぷしろん δημιουργήθηκε ή, σしぐまεいぷしろん ορισμένες περιπτώσεις, ακόμη κかっぱαあるふぁιいおた γがんまιいおたαあるふぁ απρόβλεπτους σκοπούς. H επιτυχία ενός προγράμματος εξαρτάται ιδιαίτερα από αυτά τたうαあるふぁ ζήτηματα, ανεξάρτητα ακόμα κかっぱαあるふぁιいおた από άλλα θέματα. Αυτό περιλαμβάνει ένα ευρύ φάσμα κειμενικών, γραφιστικών κかっぱαあるふぁιいおた μερικές φορές υλικών στοιχείων πぱいοおみくろんυうぷしろん βελτιώνουν τたうηいーた σαφήνεια, τたうηいーた εύκολη κατανόηση , τたうηいーた συνοχή κかっぱαあるふぁιいおた τたうηいーたνにゅー πληρότητα της διεπαφής χρήστη (user interface) ενός προγράμματος.
  • Φορητότητα: τたうοおみくろん εύρος τたうοおみくろんυうぷしろん υλικού υπολογιστών κかっぱαあるふぁιいおた τたうωおめがνにゅー πλατφορμών τたうοおみくろんυうぷしろん λειτουργικού συστήματος πάνω στις οποίες μπορεί νにゅーαあるふぁ μεταγλωττιστεί / ερμηνευτεί κかっぱαあるふぁιいおた νにゅーαあるふぁ εκτελεστεί οおみくろん πηγαίος κώδικας ενός προγράμματος. Εξαρτάται από τις διαφορές στις εγκαταστάσεις προγραμματισμού πぱいοおみくろんυうぷしろん παρέχονται από τις διάφορες πλατφόρμες, συμπεριλαμβανομένου τたうοおみくろんυうぷしろん υλικού κかっぱαあるふぁιいおた τたうωおめがνにゅー πόρων τたうοおみくろんυうぷしろん λειτουργικού συστήματος, τたうηいーたνにゅー αναμενόμενη συμπεριφορά τたうοおみくろんυうぷしろん υλικού κかっぱαあるふぁιいおた τたうοおみくろんυうぷしろん λειτουργικού συστήματος κかっぱαあるふぁιいおた τたうηいーた διαθεσιμότητα μεταγλωττιστών της συγκεκριμένης πλατφόρμας (κかっぱαあるふぁιいおた μερικές φορές βιβλιοθηκών) γがんまιいおたαあるふぁ τたうηいーた γλώσσα τたうοおみくろんυうぷしろん πηγαίου κώδικα.
  • Συντηρησιμότητα: ηいーた ευκολία μみゅーεいぷしろん τたうηいーたνにゅー οποία ένα πρόγραμμα μπορεί νにゅーαあるふぁ τροποποιηθεί από τους σημερινούς ή μελλοντικούς προγραμματιστές τたうοおみくろんυうぷしろん προκειμένου νにゅーαあるふぁ γίνουν βελτιώσεις ώστε νにゅーαあるふぁ εξατομικευτεί, νにゅーαあるふぁ διορθωθούν σφάλματα κかっぱαあるふぁιいおた τρύπες ασφαλείας ή ώστε νにゅーαあるふぁ προσαρμοστεί σしぐまεいぷしろん νέα περιβάλλοντα. Καλές πρακτικές [16] κατά τたうηいーたνにゅー διάρκεια της αρχικής ανάπτυξης κάνουν μεγάλη διαφορά σしぐまεいぷしろん αυτό τたうοおみくろん κομμάτι. Αυτή ηいーた ποιότητα μπορεί νにゅーαあるふぁ μみゅーηいーたνにゅー είναι άμεσα εμφανής σしぐまτたうοおみくろんνにゅー τελικό χρήστη, αλλά μπορεί νにゅーαあるふぁ επηρεάσει σημαντικά ένα πρόγραμμα μακροπρόθεσμα.
  • Αποδοτικότητα / απόδοση: Μέτρηση τたうωおめがνにゅー πόρων συστήματος πぱいοおみくろんυうぷしろん καταναλώνει ένα πρόγραμμα (χρόνος επεξεργαστή, χώρος μνήμης, αργές συσκευές όπως δίσκοι, εύρος ζώνης δικτύου κかっぱαあるふぁιいおた σしぐまεいぷしろん κάποιο βαθμό ακόμη κかっぱαあるふぁιいおた τたうηいーたνにゅー αλληλεπίδραση μみゅーεいぷしろん τたうοおみくろんνにゅー χρήστη): όσο λιγότερο, τόσο τたうοおみくろん καλύτερο. Αυτό περιλαμβάνει επίσης προσεκτική διαχείριση τたうωおめがνにゅー πόρων, όπως γがんまιいおたαあるふぁ παράδειγμα σしぐまτたうοおみくろんνにゅー καθαρισμό προσωρινών αρχείων κかっぱαあるふぁιいおた σしぐまτたうηいーたνにゅー εξάλειψη διαρροών μνήμης . Ακόμα κかっぱαあるふぁιいおた ηいーた γλώσσα προγραμματισμού επηρεάζει τたうηいーたνにゅー απόδοση, ωστόσο ανάλογα μみゅーεいぷしろん τたうηいーたνにゅー χρήση τους, ακόμη κかっぱαあるふぁιいおた πぱいιいおたοおみくろん αργές γλώσσες, όπως ηいーた Python, μπορούν νにゅーαあるふぁ εκτελέσουν προγράμματα άμεσα από ανθρώπινη προοπτική. Ηいーた ταχύτητα, ηいーた χρήση πόρων κかっぱαあるふぁιいおた ηいーた απόδοση είναι σημαντικά γがんまιいおたαあるふぁ προγράμματα πぱいοおみくろんυうぷしろん "κολλάνε" (bottleneck) τたうοおみくろん σύστημα, αλλά ηいーた αποτελεσματική χρήση τたうοおみくろんυうぷしろん χρόνου τたうοおみくろんυうぷしろん προγραμματιστή είναι επίσης σημαντική κかっぱαあるふぁιいおた σχετίζεται μみゅーεいぷしろん τたうοおみくろん κόστος: περισσότερο υλικό μπορεί νにゅーαあるふぁ είναι φθηνότερο.

Αναγνωσιμότητα τたうοおみくろんυうぷしろん πηγαίου κώδικα

[Επεξεργασία | επεξεργασία κώδικα]

Σしぐまτたうοおみくろんνにゅー προγραμματισμό υπολογιστών, ως αναγνωσιμότητα θεωρούμε τたうηいーたνにゅー ευκολία μみゅーεいぷしろん τたうηいーたνにゅー οποία ένας ανθρώπινος αναγνώστης μπορεί νにゅーαあるふぁ κατανοήσει τたうοおみくろんνにゅー σκοπό, τたうοおみくろんνにゅー έλεγχο της ροής κかっぱαあるふぁιいおた τたうηいーた λειτουργία τたうοおみくろんυうぷしろん πηγαίου κώδικα. Επηρεάζει τις πτυχές της ποιότητας πぱいοおみくろんυうぷしろん είδαμε από πάνω, συμπεριλαμβανομένης της φορητότητας, της χρηστικότητας κかっぱαあるふぁιいおた κυρίως της συντηρησιμότητας.

Ηいーた αναγνωσιμότητα είναι σημαντική επειδή οおみくろんιいおた προγραμματιστές ξοδεύουν τたうοおみくろん μεγαλύτερο μέρος τたうοおみくろんυうぷしろん χρόνου τους διαβάζοντας κかっぱαあるふぁιいおた προσπαθώντας νにゅーαあるふぁ κατανοήσουν κかっぱαあるふぁιいおた νにゅーαあるふぁ τροποποιήσουν τたうοおみくろんνにゅー υπάρχοντα πηγαίο κώδικα, αντί νにゅーαあるふぁ γράφουν νέο πηγαίο κώδικα. Οおみくろん μみゅーηいーた αναγνώσιμος κώδικας οδηγεί συχνά σしぐまεいぷしろん σφάλματα, αναποτελεσματικότητα κかっぱαあるふぁιいおた διπλότυπο κώδικα . Μみゅーιいおたαあるふぁ μελέτη διαπίστωσε ότι μερικοί απλοί μετασχηματισμοί αναγνωσιμότητας έκαναν τたうοおみくろんνにゅー κώδικα πぱいιいおたοおみくろん σύντομο κかっぱαあるふぁιいおた μείωσαν δραστικά τたうοおみくろんνにゅー χρόνο κατανόησής τたうοおみくろんυうぷしろん.[17]

Τたうοおみくろん νにゅーαあるふぁ ακολουθείτε ένα σταθερό σしぐまτたうυうぷしろんλらむだ προγραμματισμού συχνά βοηθά σしぐまτたうηいーたνにゅー αναγνωσιμότητα. Ωστόσο, ηいーた αναγνωσιμότητα δでるたεいぷしろんνにゅー είναι μόνο ένα απλό σしぐまτたうυうぷしろんλらむだ προγραμματισμού. Πολλοί παράγοντες συμβάλλουν σしぐまτたうηいーたνにゅー αναγνωσιμότητα, πぱいοおみくろんυうぷしろん μπορεί νにゅーαあるふぁ έχουν ελάχιστη ή κかっぱαあるふぁιいおた καθόλου σχέση μみゅーεいぷしろん τたうηいーたνにゅー ικανότητα τたうοおみくろんυうぷしろん υπολογιστή νにゅーαあるふぁ μεταγλωττίζει κかっぱαあるふぁιいおた νにゅーαあるふぁ εκτελεί αποτελεσματικά τたうοおみくろんνにゅー κώδικα.[18] Μερικοί από αυτούς τους παράγοντες περιλαμβάνουν:

  • Διαφορετικά σしぐまτたうυうぷしろんλらむだ εσοχής (κενός χώρος)
  • Σχόλια
  • Αποσύνθεση
  • Συμβάσεις ονομασίας γがんまιいおたαあるふぁ αντικείμενα (όπως μεταβλητές, κλάσεις, συναρτήσεις, διαδικασίες κかっぱ.λらむだ.πぱい. )

Τたうοおみくろん πως εμφανίζονται αυτά σしぐまτたうοおみくろんνにゅー κώδικα (όπως εσοχές, αλλαγές γραμμής, επισήμανση χρώματος κかっぱ.λらむだπぱい.) αντιμετωπίζονται συχνά από τたうοおみくろんνにゅー επεξεργαστή πηγαίου κώδικα, αλλά οおみくろんιいおた πτυχές περιεχομένου αντικατοπτρίζουν τたうοおみくろん ταλέντο κかっぱαあるふぁιいおた τις δεξιότητες τたうοおみくろんυうぷしろん προγραμματιστή.

Διάφορες οπτικές γλώσσες προγραμματισμού έχουν επίσης αναπτυχθεί μみゅーεいぷしろん σκοπό τたうηいーたνにゅー επίλυση προβλημάτων αναγνωσιμότητας, υιοθετώντας μみゅーηいーた παραδοσιακές προσεγγίσεις σしぐまτたうηいーた δομή κかっぱαあるふぁιいおた τたうηいーたνにゅー εμφάνιση τたうοおみくろんυうぷしろん κώδικα. Τたうαあるふぁ ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE) στοχεύουν σしぐまτたうηいーたνにゅー ενσωμάτωση όλης αυτής της βοήθειας. Τεχνικές όπως ηいーた ανακατασκευή κώδικα μπορούν νにゅーαあるふぁ βελτιώσουν τたうηいーたνにゅー αναγνωσιμότητα.

Αλγοριθμική πολυπλοκότητα

[Επεξεργασία | επεξεργασία κώδικα]

Τたうοおみくろん ακαδημαϊκό πεδίο κかっぱαあるふぁιいおた ηいーた πρακτική της μηχανικής τたうοおみくろんυうぷしろん προγραμματισμού υπολογιστών ασχολούνται σしぐまεいぷしろん μεγάλο βαθμό μみゅーεいぷしろん τたうηいーたνにゅー ανακάλυψη κかっぱαあるふぁιいおた τたうηいーたνにゅー εφαρμογή τたうωおめがνにゅー πぱいιいおたοおみくろん αποτελεσματικών αλγορίθμων γがんまιいおたαあるふぁ μみゅーιいおたαあるふぁ συγκεκριμένη κατηγορία προβλημάτων. Γがんまιいおたαあるふぁ τたうοおみくろん σκοπό αυτό, οおみくろんιいおた αλγόριθμοι ταξινομούνται σしぐまεいぷしろん παραγγελίες χρησιμοποιώντας τたうοおみくろんνにゅー λεγόμενo συμβολισμό Big O, οおみくろん οποίος εκφράζει τたうηいーた χρήση πόρων, όπως οおみくろん χρόνος εκτέλεσης ή ηいーた κατανάλωση μνήμης, ως προς τたうοおみくろん μέγεθος μιας εισόδου. Οおみくろんιいおた έμπειροι προγραμματιστές είναι εξοικειωμένοι μみゅーεいぷしろん μみゅーιいおたαあるふぁ ποικιλία καθιερωμένων αλγορίθμων κかっぱαあるふぁιいおた τις αντίστοιχες πολυπλοκότητές τους κかっぱαあるふぁιいおた χρησιμοποιούν αυτή τたうηいーた γνώση γがんまιいおたαあるふぁ νにゅーαあるふぁ επιλέξουν αλγόριθμους πぱいοおみくろんυうぷしろん ταιριάζουν καλύτερα ανάλογα τις περιστάσεις.

Αλγόριθμοι σκακιού ως παράδειγμα

[Επεξεργασία | επεξεργασία κώδικα]

Οおみくろん "Προγραμματισμός ενός υπολογιστή γがんまιいおたαあるふぁ νにゅーαあるふぁ παίζει σしぐまκかっぱαあるふぁκかっぱιいおた" ήταν μみゅーιいおたαあるふぁ εργασία τたうοおみくろんυうぷしろん 1950 που αξιολογούσε έναν αλγόριθμο "minimax" (ελάχιστο-μέγιστο) πぱいοおみくろんυうぷしろん αποτελεί μέρος της ιστορίας της αλγοριθμικής πολυπλοκότητας, ένα μάθημα γがんまιいおたαあるふぁ τたうοおみくろん Deep Blue της IBM (υπολογιστής σκακιού) είναι μέρος τたうοおみくろんυうぷしろん προγράμματος σπουδών της επιστήμης τたうωおめがνにゅー υπολογιστών σしぐまτたうοおみくろん Πανεπιστήμιο τたうοおみくろんυうぷしろん Στάνφορντ .[19]

Τたうοおみくろん πρώτο βήμα στις περισσότερες τυπικές διαδικασίες ανάπτυξης λογισμικού είναι ηいーた ανάλυση απαιτήσεων, ακολουθούμενη από δοκιμές γがんまιいおたαあるふぁ τたうοおみくろんνにゅー προσδιορισμό της μοντελοποίησης αξίας, τたうηいーたνにゅー υλοποίηση κかっぱαあるふぁιいおた τたうηいーたνにゅー εξάλειψη αποτυχίας (debugging). Υπάρχουν πολλές διαφορετικές προσεγγίσεις γがんまιいおたαあるふぁ καθεμία από αυτές τις εργασίες. Μみゅーιいおたαあるふぁ δημοφιλής προσέγγιση γがんまιいおたαあるふぁ τたうηいーたνにゅー ανάλυση απαιτήσεων είναι ηいーた ανάλυση περιπτώσεων χρήσης (Use Case) . Πολλοί προγραμματιστές χρησιμοποιούν μορφές ανάπτυξης λογισμικού Agile, όπου τたうαあるふぁ διάφορα στάδια της τυπικής ανάπτυξης λογισμικού είναι ενσωματωμένα σしぐまεいぷしろん σύντομους κύκλους πぱいοおみくろんυうぷしろん διαρκούν μερικές εβδομάδες αντί γがんまιいおたαあるふぁ χρόνια. Υπάρχουν πολλές προσεγγίσεις σしぐまτたうηいーた διαδικασία ανάπτυξης λογισμικού.

Οおみくろんιいおた δημοφιλείς τεχνικές μοντελοποίησης περιλαμβάνουν τたうηいーたνにゅー Αντικειμενοστραφή Ανάλυση κかっぱαあるふぁιいおた Σχεδίαση ( OOAD ) κかっぱαあるふぁιいおた τたうηいーたνにゅー Αρχιτεκτονική βάσει Μοντέλων ( MDA ). Ηいーた Ενοποιημένη Γλώσσα Μοντελοποίησης ( UML ) είναι ένας συμβολισμός πぱいοおみくろんυうぷしろん χρησιμοποιείται τόσο γがんまιいおたαあるふぁ τたうοおみくろん OOAD όσο κかっぱαあるふぁιいおた γがんまιいおたαあるふぁ τたうοおみくろん MDA.

Μみゅーιいおたαあるふぁ παρόμοια τεχνική πぱいοおみくろんυうぷしろん χρησιμοποιείται γがんまιいおたαあるふぁ τたうοおみくろん σχεδιασμό βάσεων δεδομένων είναι ηいーた Μοντελοποίηση Σχέσεων οντοτήτων ( ER Modeling ).

Οおみくろんιいおた τεχνικές υλοποίησης περιλαμβάνουν επιτακτικές γλώσσες ( αντικειμενοστρεφείς ή διαδικαστικές ), λειτουργικές γλώσσες κかっぱαあるふぁιいおた λογικές γλώσσες.

Μέτρηση της χρήσης γλώσσας

[Επεξεργασία | επεξεργασία κώδικα]

Είναι πολύ δύσκολο νにゅーαあるふぁ προσδιορίσουμε ποιες είναι οおみくろんιいおた πぱいιいおたοおみくろん δημοφιλείς σύγχρονες γλώσσες προγραμματισμού. Οおみくろんιいおた μέθοδοι μέτρησης της δημοτικότητας μιας γλώσσας προγραμματισμού περιλαμβάνουν: τたうηいーたνにゅー καταμέτρηση τたうοおみくろんυうぷしろん αριθμού τたうωおめがνにゅー αγγελιών θέσεων εργασίας πぱいοおみくろんυうぷしろん αναφέρουν τたうηいーた συγκεκριμένη γλώσσα,[20] τたうοおみくろんνにゅー αριθμό τたうωおめがνにゅー βιβλίων πぱいοおみくろんυうぷしろん πωλήθηκαν κかっぱαあるふぁιいおた τたうαあるふぁ μαθήματα πぱいοおみくろんυうぷしろん διδάσκουν τたうηいーた γλώσσα (αυτό υπερεκτιμά τたうηいーた σημασία τたうωおめがνにゅー νεότερων γλωσσών) κかっぱαあるふぁιいおた εκτιμήσεις τたうοおみくろんυうぷしろん αριθμού τたうωおめがνにゅー υπάρχουσων γραμμών κώδικα γραμμένων σしぐまτたうηいーた γλώσσα (αυτό υποτιμά τたうοおみくろんνにゅー αριθμό τたうωおめがνにゅー χρηστών στις επαγγελματικές γλωσσές όπως ηいーた COBOL).

Ορισμένες γλώσσες είναι πολύ δημοφιλείς γがんまιいおたαあるふぁ συγκεκριμένα είδη εφαρμογών, ενώ ορισμένες γλώσσες χρησιμοποιούνται συχνά γがんまιいおたαあるふぁ τたうηいーた σύνταξη πολλών διαφορετικών ειδών εφαρμογών. Γがんまιいおたαあるふぁ παράδειγμα, ηいーた COBOL εξακολουθεί νにゅーαあるふぁ είναι ισχυρή σしぐまεいぷしろん εταιρικά κέντρα δεδομένων [21] συχνά σしぐまεいぷしろん μεγάλους κεντρικoύς (mainframe) υπολογιστές, ηいーた Fortran σしぐまεいぷしろん εφαρμογές μηχανικής, γλώσσες δέσμης ενεργειών (scripting languages) σしぐまτたうηいーたνにゅー ανάπτυξη Ιστού κかっぱαあるふぁιいおた ηいーた C σしぐまεいぷしろん ενσωματωμένο λογισμικό (embedded software) . Πολλές εφαρμογές χρησιμοποιούν έναν συνδυασμό πολλών γλωσσών σしぐまτたうηいーたνにゅー κατασκευή κかっぱαあるふぁιいおた τたうηいーた χρήση τους. Οおみくろんιいおた νέες γλώσσες σχεδιάζονται γενικά γύρω από τたうηいーた σύνταξη μιας προηγούμενης γλώσσας μみゅーεいぷしろん επιπρόσθετη νέα λειτουργικότητα, (γがんまιいおたαあるふぁ παράδειγμα ηいーた C++ προσθέτει αντικειμενοστραφή λειτουργία σしぐまτたうηいーたνにゅー C κかっぱαあるふぁιいおた ηいーた Java προσθέτει διαχείριση μνήμης κかっぱαあるふぁιいおた bytecode σしぐまτたうηいーた C++, αλλά ως αποτέλεσμα χάνει τたうηいーたνにゅー αποδοτικότητα κかっぱαあるふぁιいおた τたうηいーたνにゅー ικανότητα χειραγώγησης σしぐまεいぷしろん χαμηλό επίπεδο).

Εντοπισμός σφαλμάτων

[Επεξεργασία | επεξεργασία κώδικα]
Τたうοおみくろん πρώτο γνωστό πραγματικό σφάλμα πぱいοおみくろんυうぷしろん προκάλεσε πρόβλημα σしぐまεいぷしろん έναν υπολογιστή ήταν ένας σκόρος, o οποίος παγιδεύτηκε μέσα σしぐまεいぷしろん έναν κεντρικό υπολογιστή τたうοおみくろんυうぷしろん Χάρβαρντ, κかっぱαあるふぁιいおた καταγράφηκε σしぐまεいぷしろん μみゅーιいおたαあるふぁ καταχώρηση σしぐまτたうοおみくろん ημερολόγιο μみゅーεいぷしろん ημερομηνία 9 Σεπτεμβρίου 1947.[22] Τたうοおみくろん "Bug" ήταν ήδη ένας κοινός όρος γがんまιいおたαあるふぁ περιγραφη ενος ελάττωματος λογισμικού όταν εντοπίστηκε αυτό τたうοおみくろん σφάλμα.

Οおみくろん εντοπισμός σφαλμάτων (debugging) είναι μみゅーιいおたαあるふぁ πολύ σημαντική εργασία σしぐまτたうηいーた διαδικασία ανάπτυξης λογισμικού, καθώς ηいーた ύπαρξη ελαττωμάτων σしぐまεいぷしろん ένα πρόγραμμα μπορεί νにゅーαあるふぁ έχουν σημαντικές συνέπειες γがんまιいおたαあるふぁ τους χρήστες τたうοおみくろんυうぷしろん. Ορισμένες γλώσσες είναι πぱいιいおたοおみくろん επιρρεπείς σしぐまεいぷしろん ορισμένα είδη σφαλμάτων, επειδή οおみくろんιいおた προδιαγραφές τους δでるたεいぷしろんνにゅー απαιτούν τόσους ελέγχους από τους μεταγλωττιστές όσο άλλες γλώσσες. Ηいーた χρήση ενός εργαλείου ανάλυσης στατικού κώδικα μπορεί νにゅーαあるふぁ βοηθήσει σしぐまτたうοおみくろんνにゅー εντοπισμό ορισμένων πιθανών προβλημάτων. Κανονικά, τたうοおみくろん πρώτο βήμα γがんまιいおたαあるふぁ τたうοおみくろんνにゅー εντοπισμό σφαλμάτων είναι ηいーた προσπάθεια αναπαραγωγής τたうοおみくろんυうぷしろん προβλήματος. Αυτό μπορεί όμως νにゅーαあるふぁ μみゅーηいーたνにゅー είναι μみゅーιいおたαあるふぁ απλή εργασία, γがんまιいおたαあるふぁ παράδειγμα, μみゅーεいぷしろん παράλληλες διεργασίες ή ορισμένα ασυνήθιστα σφάλματα λογισμικού. Επίσης, συγκεκριμένα περιβάλλοντα χρηστών κかっぱαあるふぁιいおた ιστορικά χρήσεων μπορεί νにゅーαあるふぁ δυσχεράνουν τたうηいーたνにゅー αναπαραγωγή τたうοおみくろんυうぷしろん προβλήματος.

Μετά τたうηいーたνにゅー αναπαραγωγή τたうοおみくろんυうぷしろん σφάλματος, ηいーた εισαγωγή τたうοおみくろんυうぷしろん προγράμματος μπορεί νにゅーαあるふぁ χρειαστεί νにゅーαあるふぁ απλοποιηθεί γがんまιいおたαあるふぁ νにゅーαあるふぁ διευκολυνθεί οおみくろん εντοπισμός σφαλμάτων. Γがんまιいおたαあるふぁ παράδειγμα, όταν ένα σφάλμα σしぐまεいぷしろん έναν μεταγλωττιστή προκαλεί διακοπή κατά τたうηいーたνにゅー ανάλυση κάποιου μεγάλου αρχείου προέλευσης, μみゅーιいおたαあるふぁ απλοποίηση της δοκιμαστικής περίπτωσης πぱいοおみくろんυうぷしろん έχει λίγες μόνο γραμμές σしぐまεいぷしろん σχέση μみゅーεいぷしろん τたうοおみくろん αρχικό αρχείο προέλευσης μπορεί νにゅーαあるふぁ είναι αρκετή γがんまιいおたαあるふぁ τたうηいーたνにゅー αναπαραγωγή τたうοおみくろんυうぷしろん ίδιου σφάλματος. Απαιτείται διαδικασία δοκιμής κかっぱαあるふぁιいおた σφάλματος κかっぱαあるふぁιいおた διαδικασία διαίρει κかっぱαあるふぁιいおた βασίλευε: οおみくろん προγραμματιστής θしーたαあるふぁ προσπαθήσει νにゅーαあるふぁ αφαιρέσει ορισμένα μέρη της αρχικής περίπτωσης δοκιμής κかっぱαあるふぁιいおた νにゅーαあるふぁ ελέγξει αあるふぁνにゅー τたうοおみくろん πρόβλημα εξακολουθεί νにゅーαあるふぁ υπάρχει. Κατά τたうοおみくろんνにゅー εντοπισμό σφαλμάτων τたうοおみくろんυうぷしろん προβλήματος σしぐまεいぷしろん μία γραφική διεπαφή χρήστη (GUI), οおみくろん προγραμματιστής μπορεί νにゅーαあるふぁ προσπαθήσει νにゅーαあるふぁ παραλείψει κάποια αλληλεπίδραση χρήστη από τたうηいーたνにゅー αρχική περιγραφή τたうοおみくろんυうぷしろん προβλήματος κかっぱαあるふぁιいおた νにゅーαあるふぁ ελέγξει εάν οおみくろんιいおた υπόλοιπες ενέργειες επαρκούν γがんまιいおたαあるふぁ τたうηいーたνにゅー εμφάνιση σφαλμάτων. Οおみくろんιいおた ενέργειες δεσμης (scripting) κかっぱαあるふぁιいおた ηいーた εύρεση σημείων καμπής (breakpointing) είναι επίσης μέρος αυτής της διαδικασίας.

Οおみくろん εντοπισμός σφαλμάτων γίνεται συχνά μみゅーεいぷしろん ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE) . Χρησιμοποιούνται επίσης αυτόνομα προγράμματα εντοπισμού σφαλμάτων, όπως οおみくろん αποσφαλματωτής GNU (GDB), τたうαあるふぁ οποία συχνά παρέχουν λιγότερο οπτικό περιβάλλον, όπως γραμμή εντολών . Ορισμένοι επεξεργαστές κειμένου όπως τたうοおみくろん Emacs επιτρέπουν τたうηいーたνにゅー επίκληση τたうοおみくろんυうぷしろん GDB μέσω αυτών, γがんまιいおたαあるふぁ νにゅーαあるふぁ παρέχουν ένα οπτικό περιβάλλον.

Γλώσσες προγραμματισμού

[Επεξεργασία | επεξεργασία κώδικα]

Διαφορετικές γλώσσες προγραμματισμού υποστηρίζουν διαφορετικά σしぐまτたうυうぷしろんλらむだ προγραμματισμού (πぱいοおみくろんυうぷしろん ονομάζονται παραδείγματα προγραμματισμού ). Ηいーた επιλογή της γλώσσας πぱいοおみくろんυうぷしろん χρησιμοποιείται υπόκειται υπό μελέτη σしぐまεいぷしろん τομείς όπως ηいーた πολιτική της εταιρείας, ηいーた καταλληλότητα γがんまιいおたαあるふぁ εργασία, ηいーた διαθεσιμότητα πακέτων τρίτων ή ηいーた ατομική προτίμηση. Ιδανικά, θしーたαあるふぁ επιλεγεί ηいーた γλώσσα προγραμματισμού πぱいοおみくろんυうぷしろん ταιριάζει καλύτερα σしぐまτたうηいーたνにゅー εργασία. Τたうαあるふぁ συμβιβασμός από αυτό τたうοおみくろん ιδανικό περιλαμβάνουν τたうηいーたνにゅー εύρεση αρκετών προγραμματιστών πぱいοおみくろんυうぷしろん γνωρίζουν τたうηいーた γλώσσα γがんまιいおたαあるふぁ νにゅーαあるふぁ δημιουργήσουν μみゅーιいおたαあるふぁ ομάδα, τたうηいーた διαθεσιμότητα μεταγλωττιστών γがんまιいおたαあるふぁ αυτήν τたうηいーた γλώσσα κかっぱαあるふぁιいおた τたうηいーたνにゅー αποτελεσματικότητα μみゅーεいぷしろん τたうηいーたνにゅー οποία εκτελούνται τたうαあるふぁ προγράμματα γραμμένα σしぐまεいぷしろん μみゅーιいおたαあるふぁ δεδομένη γλώσσα. Οおみくろんιいおた γλώσσες σχηματίζουν ένα κατά προσέγγιση φάσμα από "χαμηλό επίπεδο" έως "υψηλό επίπεδου". Οおみくろんιいおた γλώσσες "χαμηλού επιπέδου" είναι συνήθως πぱいιいおたοおみくろん προσανατολισμένες σしぐまτたうηいーた μηχανή κかっぱαあるふぁιいおた πぱいιいおたοおみくろん γρήγορες σしぐまτたうηいーたνにゅー εκτέλεση, ενώ οおみくろんιいおた γλώσσες "υψηλού επιπέδου" είναι πぱいιいおたοおみくろん αφηρημένες κかっぱαあるふぁιいおた πぱいιいおたοおみくろん εύχρηστες, αλλά εκτελούνται λιγότερο γρήγορα. Συνήθως είναι πぱいιいおたοおみくろん εύκολο νにゅーαあるふぁ κωδικοποιήσετε σしぐまεいぷしろん γλώσσες "υψηλού επιπέδου" παρά σしぐまεいぷしろん "χαμηλού επιπέδου".

Οおみくろん Άλεν Ντάουνι, σしぐまτたうοおみくろん βιβλίο τたうοおみくろんυうぷしろん Πως Νにゅーαあるふぁ Σκέφτεσαι Σしぐまαあるふぁνにゅー Επιστήμονας Υπολογιστών, γράφει:

Οおみくろんιいおた λεπτομέρειες φαίνονται διαφορετικές σしぐまεいぷしろん διαφορετικές γλώσσες, αλλά μερικές βασικές οδηγίες εμφανίζονται σしぐまεいぷしろん κάθε σχεδόν γλώσσα:
  • Εισαγωγή: Συλλέξτε δεδομένα από τたうοおみくろん πληκτρολόγιο, ένα αρχείο ή κάποια άλλη συσκευή.
  • Έξοδος: Εμφάνιση δεδομένων σしぐまτたうηいーたνにゅー οθόνη ή αποστολή δεδομένων σしぐまεいぷしろん αρχείο ή άλλη συσκευή.
  • Αριθμητική: Εκτελέστε βασικές αριθμητικές πράξεις όπως πρόσθεση κかっぱαあるふぁιいおた πολλαπλασιασμός.
  • Εκτέλεση υπό όρους: Ελέγξτε γがんまιいおたαあるふぁ ορισμένες συνθήκες κかっぱαあるふぁιいおた εκτελέστε τたうηいーたνにゅー κατάλληλη ακολουθία εντολών.
  • Επανάληψη: Εκτελέστε κάποια ενέργεια επανειλημμένα, συνήθως μみゅーεいぷしろん κάποια παραλλαγή.

Πολλές γλώσσες υπολογιστών παρέχουν έναν μηχανισμό γがんまιいおたαあるふぁ τたうηいーたνにゅー κλήση συναρτήσεων πぱいοおみくろんυうぷしろん παρέχονται από κοινόχρηστες βιβλιοθήκες . Εφόσον οおみくろんιいおた συναρτήσεις σしぐまεいぷしろん μみゅーιいおたαあるふぁ βιβλιοθήκη ακολουθούν τις κατάλληλες συμβάσεις χρόνου εκτέλεσης (πぱい.χかい. μέθοδος μετάδοσης ορισμάτων ), τότε αυτές οおみくろんιいおた συναρτήσεις μπορούν νにゅーαあるふぁ γραφτούν σしぐまεいぷしろん οποιαδήποτε άλλη γλώσσα.

  1. Bebbington, Shaun (2014). «What is coding». Tumblr. Αρχειοθετήθηκε από τたうοおみくろん πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 3 Μαρτίου 2014. 
  2. Bebbington, Shaun (2014). «What is programming». Tumblr. Αρχειοθετήθηκε από τたうοおみくろん πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 3 Μαρτίου 2014. 
  3. Eliam, Eldad (2005). Reversing: Secrets of Reverse Engineering. Wiley. σしぐまεいぷしろんλらむだ. 3. ISBN 978-0-7645-7481-8. 
  4. Koetsier, Teun (2001), «On the prehistory of programmable machines: musical automata, looms, calculators», Mechanism and Machine Theory (Elsevier) 36 (5): 589–603, doi:10.1016/S0094-114X(01)00005-2 
  5. Kapur, Ajay; Carnegie, Dale; Murphy, Jim; Long, Jason (2017). «Loudspeakers Optional: A history of non-loudspeaker-based electroacoustic music». Organised Sound (Cambridge University Press) 22 (2): 195–205. doi:10.1017/S1355771817000103. ISSN 1355-7718. 
  6. Fowler, Charles B. (October 1967). «The Museum of Music: A History of Mechanical Instruments». Music Educators Journal 54 (2): 45–49. doi:10.2307/3391092. 
  7. Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield
  8. Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. σελίδες 12–3. ISBN 9783319016283. 
  9. Fuegi, J.; Francis, J. (2003). «Lovelace & Babbage and the Creation of the 1843 'notes'». IEEE Annals of the History of Computing 25 (4): 16. doi:10.1109/MAHC.2003.1253887. 
  10. da Cruz, Frank (10 Μαρτίου 2020). «Columbia University Computing History – Herman Hollerith». Columbia University. Columbia.edu. Αρχειοθετήθηκε από τたうοおみくろん πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 25 Απριλίου 2010. 
  11. «Memory & Storage | Timeline of Computer History | Computer History Museum». www.computerhistory.org. Ανακτήθηκε στις 3 Ιουνίου 2021. 
  12. Ridgway, Richard (1952). «Compiling routines». Proceeding ACM '52 Proceedings of the 1952 ACM National Meeting (Toronto). ACM '52: 1–5. doi:10.1145/800259.808980. ISBN 9781450379250. https://dl.acm.org/citation.cfm?id=808980. 
  13. Maurice V. Wilkes. 1968. Computers Then and Now. Journal of the Association for Computing Machinery, 15(1):1–7, January. p. 3 (a comment in brackets added by editor), "(I do not think that the term compiler was then [1953] in general use, although it had in fact been introduced by Grace Hopper.)"
  14. 14,0 14,1 Bergstein, Brian (20 Μαρτίου 2007). «Fortran creator John Backus dies». NBC News. Αρχειοθετήθηκε από τたうοおみくろん πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 25 Απριλίου 2010. 
  15. «What is it based on». ComputerWorld: σしぐまεいぷしろんλらむだ. 13. April 9, 1984. «Is it based on ... Reliability Portability. Compatibility» 
  16. «Programming 101: Tips to become a good programmer - Wisdom Geek». Wisdom Geek (σしぐまτたうαあるふぁ Αγγλικά). 19 Μαΐου 2016. Ανακτήθηκε στις 23 Μαΐου 2016. 
  17. Elshoff, James L.; Marcotty, Michael (1982). «Improving computer program readability to aid modification». Communications of the ACM 25 (8): 512–521. doi:10.1145/358589.358596. 
  18. Multiple (wiki). «Readability». Docforge. Αρχειοθετήθηκε από τたうοおみくろん πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 30 Ιανουαρίου 2010. 
  19. Piech, Chris. «Deep Blue». In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm 
  20. Enticknap, Nicholas (11 Σεπτεμβρίου 2007). «SSL/Computer Weekly IT salary survey: finance boom drives IT job growth». 
  21. Mitchell, Robert (21 Μαΐου 2012). «The Cobol Brain Drain». Computer World. Ανακτήθηκε στις 9 Μαΐου 2015. 
  22. «Photograph courtesy Naval Surface Warfare Center, Dahlgren, Virginia, from National Geographic Sept. 1947».