Προγραμματισμός υπολογιστών είναι η διαδικασία εκτέλεσης ενός συγκεκριμένου υπολογισμού (ή γενικότερα, η επίτευξη ενός συγκεκριμένου υπολογιστικού αποτελέσματος), συνήθως μετο σχεδιασμό/κατασκευή ενός εκτελέσιμουπρογράμματος υπολογιστή . Ο προγραμματισμός περιλαμβάνει εργασίες όπως ανάλυση, δημιουργία αλγορίθμων, δημιουργία προφίλ γιατην ακρίβεια και κατανάλωση πόρων των αλγορίθμων καιτην υλοποίηση αλγορίθμων (συνήθως σεμια επιλεγμένη γλώσσα προγραμματισμού, κοινώς λεγόμενη ως κωδικοποίηση ).[1][2]Οπηγαίος κώδικας ενός προγράμματος είναι γραμμένος σε μία ή περισσότερες γλώσσες που είναι κατανοητές από τους προγραμματιστές, και όχι σε κώδικα μηχανής, ο οποίος εκτελείται απευθείας από τηνκεντρική μονάδα επεξεργασίας . Ο σκοπός του προγραμματισμού είναι ναβρειμια ακολουθία εντολών πουθα αυτοματοποιήσει την εκτέλεση μιας εργασίας (η οποία μπορεί να είναι τόσο περίπλοκη όσο ένα λειτουργικό σύστημα ) σε έναν υπολογιστή, συχνά με σκοπό την επίλυση ενός δεδομένου προβλήματος. Επομένως, ο ικανός προγραμματισμός απαιτεί συνήθως εξειδίκευση σε πολλά διαφορετικά θέματα, συμπεριλαμβανομένου της γνώσης στον τομέα εφαρμογής, εξειδικευμένων αλγορίθμων και τυπικής λογικής .
Οι εργασίες που συνοδεύουν και σχετίζονται μετον προγραμματισμό περιλαμβάνουν ελέγχους,εντοπισμό σφαλμάτων, τη συντήρηση τουπηγαίου κώδικα, την υλοποίηση συστημάτων κατασκευής καιτη διαχείριση παραγόμενων τεχνουργημάτων, όπως οκώδικας μηχανής προγραμμάτων υπολογιστών. Αυτά συνήθως θεωρούνται τμήμα της διαδικασίας προγραμματισμού, αλλά συχνά ο όρος ανάπτυξη λογισμικού χρησιμοποιείται για αυτή τη μεγαλύτερη διαδικασία, ενώ οι όροι προγραμματισμός, υλοποίηση ή κωδικοποίησηνα προορίζονται γιατην πραγματική εγγραφή κώδικα. Η μηχανική λογισμικού συνδυάζει τεχνικές μηχανικήςμε πρακτικές ανάπτυξης λογισμικού . Η αντίστροφη μηχανική είναι μια σχετική διαδικασία που χρησιμοποιείται γιατην κατανόηση καιτηνεκ νέου δημιουργία/εφαρμογή από σχεδιαστές, αναλυτές και προγραμματιστές.[3]
Οι προγραμματιζόμενες συσκευές υπάρχουν εδώ και αιώνες. Ήδη από τον 9ο αιώνα, ένα προγραμματιζόμενο πρόγραμμα ακολουθίας μουσικής εφευρέθηκε από τους Πέρσες αδερφούς Banu Musa, οι οποίοι περιέγραψαν ένα αυτοματοποιημένο μηχανικό φλάουτοστοΒιβλίο Έξυπνων Μηχανών (Book of Ingenious Devices) .[4][5]Το 1206, ο Άραβας μηχανικός Αλ-Τζαζάρι εφηύρε μια προγραμματιζόμενη μηχανή τυμπάνων στο οποίο ένα μουσικό μηχανικό αυτόματο ήταν φτιάγμενο να παίζει διάφορους ρυθμούς και μοτίβα τυμπάνων, μέσω καρφιών καιεκκεντροφόρων .[6][7]Το 1801, ο αργαλειός Ζακάρ μπορούσε να παράγει εντελώς διαφορετικές πλέξεις αλλάζοντας το "πρόγραμμα" - μια σειρά από χαρτόνιαμε διάτρητες τρύπες.
Στη δεκαετία του 1880, οΧέρμαν Χόλεριθ επινόησε την έννοια της αποθήκευσης δεδομένωνσε μορφή αναγνώσιμη από μηχανές.[10] Αργότερα, ένας πίνακας ελέγχου (πίνακας βύσματος) που προστέθηκε στον πίνακά του, τύπου 1906, του επέτρεψε τον προγραμματισμό του πίνακα για διαφορετικές εργασίες, καιστα τέλη της δεκαετίας του 1940, ο εξοπλισμός εγγραφής μονάδων όπως το IBM 602 και το IBM 604 προγραμματίστηκαν από πίνακες ελέγχου με τρόπο παρόμοιο, όπως ήταν καιοι πρώτοι ηλεκτρονικοί υπολογιστές . Ωστόσο, μετην έννοια τουυπολογιστή αποθηκευμένου προγράμματοςπου εισήχθη το 1949, τόσο τα προγράμματα όσο καιτα δεδομένα αποθηκεύονταν και χειρίζονταν μετον ίδιο τρόπο στη μνήμη του υπολογιστή .[11]
Οκώδικας μηχανής ήταν η γλώσσα των αρχικών προγραμμάτων, γραμμένος στοσύνολο εντολών της συγκεκριμένης μηχανής, συχνά σεδυαδικό συμβολισμό. Σύντομα αναπτύχθηκαν γλώσσες συναρμολόγησης (assembly language)που επέτρεπαν στον προγραμματιστή να καθορίσει οδηγίες σε μορφή κειμένου (π.χ. ADD X, TOTAL), με συντομογραφίες για κάθε κωδικό λειτουργίας και ουσιαστικά ονόματα γιατον καθορισμό διευθύνσεων. Ωστόσο, επειδή μια γλώσσα συναρμολόγησης είναι κάτι περισσότερο από μια διαφορετικό συμβολισμό γιαμια γλώσσα μηχανής, δύο μηχανές με διαφορετικά σύνολα εντολών έχουν επίσης διαφορετικές γλώσσες συναρμολόγησης.
Οι γλώσσες υψηλού επιπέδου έκαναν τη διαδικασία ανάπτυξης ενός προγράμματος απλούστερη, πιο κατανοητή και λιγότερο συνδεδεμένη μετο υποκείμενο υλικό (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++, αλλά ως αποτέλεσμα χάνει την αποδοτικότητα καιτην ικανότητα χειραγώγησης σε χαμηλό επίπεδο).
Ο εντοπισμός σφαλμάτων (debugging) είναι μια πολύ σημαντική εργασία στη διαδικασία ανάπτυξης λογισμικού, καθώς η ύπαρξη ελαττωμάτων σε ένα πρόγραμμα μπορεί να έχουν σημαντικές συνέπειες για τους χρήστες του. Ορισμένες γλώσσες είναι πιο επιρρεπείς σε ορισμένα είδη σφαλμάτων, επειδή οι προδιαγραφές τους δεν απαιτούν τόσους ελέγχους από τους μεταγλωττιστές όσο άλλες γλώσσες. Η χρήση ενός εργαλείου ανάλυσης στατικού κώδικα μπορεί να βοηθήσει στον εντοπισμό ορισμένων πιθανών προβλημάτων. Κανονικά, το πρώτο βήμα γιατον εντοπισμό σφαλμάτων είναι η προσπάθεια αναπαραγωγής του προβλήματος. Αυτό μπορεί όμως ναμην είναι μια απλή εργασία, για παράδειγμα, με παράλληλες διεργασίες ή ορισμένα ασυνήθιστα σφάλματα λογισμικού. Επίσης, συγκεκριμένα περιβάλλοντα χρηστών και ιστορικά χρήσεων μπορεί να δυσχεράνουν την αναπαραγωγή του προβλήματος.
Μετά την αναπαραγωγή του σφάλματος, η εισαγωγή του προγράμματος μπορεί να χρειαστεί να απλοποιηθεί γιανα διευκολυνθεί ο εντοπισμός σφαλμάτων. Για παράδειγμα, όταν ένα σφάλμα σε έναν μεταγλωττιστή προκαλεί διακοπή κατά τηνανάλυση κάποιου μεγάλου αρχείου προέλευσης, μια απλοποίηση της δοκιμαστικής περίπτωσης που έχει λίγες μόνο γραμμές σε σχέση μετο αρχικό αρχείο προέλευσης μπορεί να είναι αρκετή γιατην αναπαραγωγή του ίδιου σφάλματος. Απαιτείται διαδικασία δοκιμής και σφάλματος και διαδικασία διαίρει και βασίλευε: ο προγραμματιστής θα προσπαθήσει να αφαιρέσει ορισμένα μέρη της αρχικής περίπτωσης δοκιμής καινα ελέγξει αντο πρόβλημα εξακολουθεί να υπάρχει. Κατά τον εντοπισμό σφαλμάτων του προβλήματος σε μία γραφική διεπαφή χρήστη (GUI), ο προγραμματιστής μπορεί να προσπαθήσει να παραλείψει κάποια αλληλεπίδραση χρήστη από την αρχική περιγραφή του προβλήματος καινα ελέγξει εάν οι υπόλοιπες ενέργειες επαρκούν γιατην εμφάνιση σφαλμάτων. Οι ενέργειες δεσμης (scripting) καιη εύρεση σημείων καμπής (breakpointing) είναι επίσης μέρος αυτής της διαδικασίας.
Ο εντοπισμός σφαλμάτων γίνεται συχνά μεολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE) . Χρησιμοποιούνται επίσης αυτόνομα προγράμματα εντοπισμού σφαλμάτων, όπως οαποσφαλματωτής GNU (GDB), τα οποία συχνά παρέχουν λιγότερο οπτικό περιβάλλον, όπως γραμμή εντολών . Ορισμένοι επεξεργαστές κειμένου όπως τοEmacs επιτρέπουν την επίκληση του GDB μέσω αυτών, γιανα παρέχουν ένα οπτικό περιβάλλον.
Διαφορετικές γλώσσες προγραμματισμού υποστηρίζουν διαφορετικά στυλ προγραμματισμού (που ονομάζονται παραδείγματα προγραμματισμού ). Η επιλογή της γλώσσας που χρησιμοποιείται υπόκειται υπό μελέτη σε τομείς όπως η πολιτική της εταιρείας, η καταλληλότητα για εργασία, η διαθεσιμότητα πακέτων τρίτων ή η ατομική προτίμηση. Ιδανικά, θα επιλεγεί η γλώσσα προγραμματισμού που ταιριάζει καλύτερα στην εργασία. Τα συμβιβασμός από αυτό το ιδανικό περιλαμβάνουν την εύρεση αρκετών προγραμματιστών που γνωρίζουν τη γλώσσα γιανα δημιουργήσουν μια ομάδα, τη διαθεσιμότητα μεταγλωττιστών για αυτήν τη γλώσσα καιτην αποτελεσματικότητα μετην οποία εκτελούνται τα προγράμματα γραμμένα σεμια δεδομένη γλώσσα. Οι γλώσσες σχηματίζουν ένα κατά προσέγγιση φάσμα από "χαμηλό επίπεδο" έως "υψηλό επίπεδου". Οι γλώσσες "χαμηλού επιπέδου" είναι συνήθως πιο προσανατολισμένες στη μηχανή καιπιο γρήγορες στην εκτέλεση, ενώ οι γλώσσες "υψηλού επιπέδου" είναι πιο αφηρημένες καιπιο εύχρηστες, αλλά εκτελούνται λιγότερο γρήγορα. Συνήθως είναι πιο εύκολο να κωδικοποιήσετε σε γλώσσες "υψηλού επιπέδου" παρά σε "χαμηλού επιπέδου".
Ο Άλεν Ντάουνι, στο βιβλίο του Πως Να Σκέφτεσαι Σαν Επιστήμονας Υπολογιστών, γράφει:
Οι λεπτομέρειες φαίνονται διαφορετικές σε διαφορετικές γλώσσες, αλλά μερικές βασικές οδηγίες εμφανίζονται σε κάθε σχεδόν γλώσσα:
Εισαγωγή: Συλλέξτε δεδομένα από το πληκτρολόγιο, ένα αρχείο ή κάποια άλλη συσκευή.
Έξοδος: Εμφάνιση δεδομένων στην οθόνη ή αποστολή δεδομένων σε αρχείο ή άλλη συσκευή.
Αριθμητική: Εκτελέστε βασικές αριθμητικές πράξεις όπως πρόσθεση και πολλαπλασιασμός.
Εκτέλεση υπό όρους: Ελέγξτε για ορισμένες συνθήκες και εκτελέστε την κατάλληλη ακολουθία εντολών.
Επανάληψη: Εκτελέστε κάποια ενέργεια επανειλημμένα, συνήθως με κάποια παραλλαγή.
Πολλές γλώσσες υπολογιστών παρέχουν έναν μηχανισμό γιατην κλήση συναρτήσεων που παρέχονται από κοινόχρηστες βιβλιοθήκες . Εφόσον οι συναρτήσεις σεμια βιβλιοθήκη ακολουθούν τις κατάλληλες συμβάσεις χρόνου εκτέλεσης (π.χ. μέθοδος μετάδοσης ορισμάτων ), τότε αυτές οι συναρτήσεις μπορούν να γραφτούν σε οποιαδήποτε άλλη γλώσσα.
↑Fowler, Charles B. (October 1967). «The Museum of Music: A History of Mechanical Instruments». Music Educators Journal54 (2): 45–49. doi:10.2307/3391092.
↑Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. σελίδες 12–3. ISBN9783319016283.
↑Fuegi, J.; Francis, J. (2003). «Lovelace & Babbage and the Creation of the 1843 'notes'». IEEE Annals of the History of Computing25 (4): 16. doi:10.1109/MAHC.2003.1253887.
↑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.)"
↑Elshoff, James L.; Marcotty, Michael (1982). «Improving computer program readability to aid modification». Communications of the ACM25 (8): 512–521. doi:10.1145/358589.358596.
↑Multiple (wiki). «Readability». Docforge. Αρχειοθετήθηκε από το πρωτότυπο στις 29 Απριλίου 2020. Ανακτήθηκε στις 30 Ιανουαρίου 2010.
↑Piech, Chris. «Deep Blue». In 1950, Claude Shannon published ... "Programming a Computer for Playing Chess", ... "minimax" algorithm