Τι είναι ο προγραμματισμός υπολογιστών; Καθορισμός ανάπτυξης λογισμικού.

Ο πεντάχρονος γιος μου, ο Ράμι, με πλησίασε μια μέρα ενώ δούλευα από το σπίτι και ρώτησε: «Τι κάνεις μαμά;»

«Δουλεύω», απάντησα.

Κοίταξε την οθόνη του φορητού υπολογιστή μου και ρώτησε ξανά: «Αλλά τι κάνεις

Σταμάτησα και άρχισα να το σκέφτομαι. Είμαι προγραμματιστής ιστού και προγραμματίζω σε JavaScript. Πώς μπορώ να το εξηγήσω σε πέντε χρονών;

«Γράφω οδηγίες για τον υπολογιστή και ο υπολογιστής κάνει ό, τι του λέω να κάνει. Αυτό ονομάζεται προγραμματισμός », εξήγησα. Η Ράμι κοίταξε μπερδεμένη.

Συνέχισα, "Για παράδειγμα, μπορώ να δώσω στον υπολογιστή οδηγίες για να προσθέσω δύο αριθμούς και θα μου δώσει την απάντηση." Έγραψα μια συνάρτηση που πρόσθεσε 2 + 2 και του έδειξα την απάντηση στην οθόνη μου. Τα μάτια του άναψαν.

Από εκείνο το σημείο, άρχισα να σκέφτομαι τι προγραμματίζει ; Τι πραγματικά συμβαίνει κάτω από την κουκούλα; Όταν άρχισα να μαθαίνω να κωδικοποιώ το 2017 στο freeCodeCamp, χρησιμοποίησα τον ενσωματωμένο επεξεργαστή κώδικα στον ιστότοπο και θα έβλεπα τα αποτελέσματα. Ωστόσο, δεν κατάλαβα πραγματικά τη μαγεία που συνέβαινε πίσω από τα παρασκήνια.

Άρχισα να κάνω κάποια έρευνα και αυτοί ήταν μερικοί από τους όρους που έψαχνα: «Τι είναι ο προγραμματισμός υπολογιστών; Τι είναι το λογισμικό; " Υπάρχουν πάνω από 600 εκατομμύρια αποτελέσματα αναζήτησης στο Google για "Τι είναι ο προγραμματισμός υπολογιστών;" Είναι σαν να κατεβαίνεις μια τρύπα κουνελιού - μπορεί να είναι περίπλοκη και συντριπτική.

Ήθελα να παρουσιάσω μια ολοκληρωμένη εισαγωγή στο τι είναι ο προγραμματισμός υπολογιστών και η ανάπτυξη λογισμικού για αρχάριους. Θα ξεκινήσω με τον προγραμματισμό υπολογιστών και μετά θα καλύψω τις γλώσσες προγραμματισμού υπολογιστών. Τότε θα μιλήσω για ανάπτυξη λογισμικού και λογισμικού. Τέλος, θα προχωρήσω στις τρέχουσες τάσεις και στο μέλλον του προγραμματισμού υπολογιστών.

Εάν σκέφτεστε να μεταβείτε στον κόσμο του προγραμματισμού ή απλά ενδιαφέρεστε να μάθετε να κωδικοποιείτε, τότε αυτό θα σας προσφέρει μια γενική επισκόπηση, χωρίς (πάρα πολύ!) Τεχνική ορολογία.

Ένα μόνο πράγμα που πρέπει να σημειωθεί: μπορείτε να χρησιμοποιήσετε τις λέξεις "Προγραμματιστής" και "Προγραμματιστής" για να σημαίνει κάποιον που γράφει κώδικα.

Τι είναι ο προγραμματισμός υπολογιστών;

Στη Wikipedia, ο ορισμός του «Προγραμματισμός υπολογιστών» είναι:

«Ο προγραμματισμός υπολογιστών είναι η διαδικασία σχεδιασμού και δημιουργίας ενός εκτελέσιμου προγράμματος υπολογιστή για την επίτευξη ενός συγκεκριμένου αποτελέσματος υπολογιστών.

Τι σημαίνει όμως αυτό;

Ένας υπολογιστής δεν είναι έξυπνος. Ναι, είναι ισχυροί και έχουν τη δυνατότητα να εκτελούν εργασίες πολύ πιο γρήγορα από έναν άνθρωπο. Όμως οι υπολογιστές χρειάζονται έναν άνθρωπο για να γράψουν οδηγίες και να τους πουν τι να κάνουν.

Επομένως, ο προγραμματισμός είναι η διαδικασία σύνταξης αυτών των οδηγιών. Χρησιμοποιούμε μια γλώσσα προγραμματισμού για να το κάνουμε αυτό. Αυτές οι οδηγίες μεταφράζονται σε αναγνώσιμη μορφή την οποία ο υπολογιστής μπορεί να κατανοήσει. Στη συνέχεια, οι οδηγίες εκτελούνται από τον υπολογιστή.

Προγραμματισμός πώς να φτιάξετε ένα φλιτζάνι τσάι

Ας πάρουμε για παράδειγμα ένα φλιτζάνι τσάι. Εάν επρόκειτο να δώσετε οδηγίες για το πώς να φτιάξετε ένα φλιτζάνι τσάι, θα μοιάζει με το ακόλουθο:

  1. Βράζουμε λίγο νερό
  2. Ρίξτε ζεστό νερό σε ένα φλιτζάνι με ένα τσαγιέρα
  3. Αφήστε το τσάι να βράσει
  4. Αφαιρέστε την τσαγιέρα
  5. Προσθέστε γάλα ή / και ζάχαρη (αν θέλετε)

Απλό, σωστά;

Αυτό που θεωρούμε δεδομένο είναι ότι η επικοινωνία με έναν άνθρωπο είναι διαφορετική από την επικοινωνία με έναν υπολογιστή. Ένας άνθρωπος έχει προηγούμενη γνώση και εμπειρία ζωής - μπορεί να ξέρει πού να βρει το τσάι. Υποθέτουμε ότι γνωρίζουν ότι το γάλα αποθηκεύεται σε ψυγείο.

Οι άνθρωποι έχουν επίσης διαίσθηση. Εάν δεν μπορείτε να βρείτε ένα κύπελλο, τότε μπορείτε να αναζητήσετε τα ντουλάπια. Υπάρχει επίσης ανάγνωση μη λεκτικών ενδείξεων ανθρώπων, όπως η γλώσσα του σώματος.

Όσον αφορά τον προγραμματισμό, πρέπει να είστε πολύ συγκεκριμένοι. Συνεχίζοντας με το πώς να φτιάξετε ένα φλιτζάνι τσάι, μπορείτε να γράψετε οδηγίες σε ψευδο-κώδικα όπως αυτό:

  1. Πήγαινε στην κουζίνα
  2. Εντοπίστε το βραστήρα
  3. Ανοίξτε το καπάκι του βραστήρα
  4. Γεμίστε το βραστήρα με νερό
  5. Ενεργοποιήστε το βραστήρα
  6. Περιμένετε να βράσει στους 100 βαθμούς Κελσίου
  7. Βρείτε ένα φλιτζάνι

Και ούτω καθεξής.

Τι γίνεται αν οι οδηγίες όπως αυτές παραπάνω δεν είναι αρκετές; Ίσως χρειαστεί να προσθέσετε κάποια λογική για να λάβετε υπόψη όλα τα σενάρια. Για παράδειγμα: 2) Εντοπίστε το βραστήρα. Λοιπόν, είναι ηλεκτρικός βραστήρας ή είναι βραστήρας που φοράτε εστίες; Θα πρέπει να προσθέσετε μια προϋπόθεση ότι εάν πρόκειται για ηλεκτρικό βραστήρα, τότε κάντε xyz. Διαφορετικά , κάντε xyz για ένα βραστήρα που βάζετε σε εστίες.

Ακόμα και όταν νομίζετε ότι έχετε λάβει υπόψη κάθε πιθανή κατάσταση και έχετε δώσει συγκεκριμένες οδηγίες, υπάρχουν πράγματα που ενδέχεται να μην προβλέψετε. Αρχίζετε να φτιάχνετε φλιτζάνι τσάι και κάτι πάει στραβά. Ωχ όχι! Ο βραστήρας σας σταματά να λειτουργεί αφού αρχίσετε να το βράζετε.

Τι συνέβη? Υπάρχει ένα σφάλμα στον κωδικό σας! Ένα σφάλμα είναι σφάλμα ή ελάττωμα στον κώδικά σας που μπορεί να οδηγήσει σε απρόσμενα αποτελέσματα. Για να διορθώσετε τον κωδικό σας, περνάτε από μια διαδικασία "εντοπισμού σφαλμάτων", όπου μπορείτε να βρείτε τα προβλήματα στον κώδικά σας και να επιλύσετε τα προβλήματα.

Σε αυτήν την περίπτωση, οι οδηγίες σας δεν περιελάμβαναν την πλήρωση του βραστήρα σας στα 0,8 λίτρα για να καλύψετε το θερμαντικό στοιχείο. Έτσι ο βραστήρας απενεργοποιείται ως μέτρο ασφαλείας.

Για να αποφευχθεί η εμφάνιση σφαλμάτων μετά την εκτέλεση του προγράμματός σας, οι προγραμματιστές πραγματοποιούν δοκιμές και δοκιμές μονάδων στα προγράμματά τους. Το Unit-testing είναι το σημείο όπου γράφετε δοκιμές για μέρη του κωδικού σας. Οι δοκιμές είτε αποτυγχάνουν είτε πετυχαίνουν.

Για παράδειγμα, γράφετε μια συνάρτηση που προσθέτει δύο αριθμούς: 1 + 1. Στη συνέχεια, γράφετε ένα τεστ μονάδας όπου η αναμενόμενη έξοδος είναι 2. Όλες οι απαντήσεις θα αποτύχουν εκτός αν είναι 2.

Περνάτε τον κωδικό σας έως ότου όλα λειτουργούν χωρίς απρόσμενα προβλήματα. Ο προγραμματισμός είναι επομένως μια λεπτομερή προσανατολισμένη και επαναληπτική διαδικασία όπου βελτιώνετε συνεχώς αυτό που έχετε γράψει προηγουμένως.

Πώς κατανοεί ο υπολογιστής σας τον κωδικό σας;

Αυτό που γράφουν οι περισσότεροι προγραμματιστές ως «κωδικός» είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου. Είναι αφηρημένο από το σχεδιασμό. Η αφαίρεση σε αυτό το πλαίσιο σημαίνει ότι απομακρύνεται περισσότερο από τον κώδικα του μηχανήματος και οι γλώσσες προγραμματισμού είναι πιο κοντά στις ομιλούμενες γλώσσες.

Αλλά ένας υπολογιστής δεν μπορεί να κατανοήσει τον κώδικα που βασίζεται σε κείμενο. Πρέπει να μεταγλωττιστεί (να μεταφραστεί) σε κώδικα μηχανήματος. Ο κωδικός μηχανήματος είναι ένα σύνολο οδηγιών που μπορούν να γίνουν κατανοητές από την κεντρική μονάδα επεξεργασίας του υπολογιστή (CPU). Σκεφτείτε τη CPU ως τον εγκέφαλο ενός υπολογιστή. Ο κωδικός μηχανήματος αποτελείται από αυτούς και μηδενικά. Αυτό ονομάζεται δυαδικό.

Για παράδειγμα, με αυτόν τον τρόπο θα γράφατε το "Hello World" σε δυαδικά:

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

Όπως μπορείτε να δείτε, το δυαδικό δεν είναι ευανάγνωστο για τους ανθρώπους, οπότε τείνουμε να αποφεύγουμε τον προγραμματισμό σε κώδικα μηχανής!

Τι ακριβώς είναι η γλώσσα προγραμματισμού;

Οι γλώσσες προγραμματισμού εμπίπτουν τόσο στο φάσμα γλωσσών χαμηλού επιπέδου, όπως γλώσσες συναρμολόγησης και υψηλού επιπέδου, όπως η JavaScript.

Αλλά τι είναι ακριβώς μια γλώσσα προγραμματισμού; Η καλύτερη αναλογία που μπορώ να σκεφτώ είναι οι ομιλούμενες γλώσσες που χρησιμοποιούμε σήμερα. Όλες οι γλώσσες εκφράζουν την ίδια ιδέα, αλλά με διαφορετικούς τρόπους σε ένα άλλο άτομο:

Αγγλικά: Γεια σας

Γαλλικά: Bonjour

Ισπανικά: Hola

Οι γλώσσες προγραμματισμού είναι διαφορετικοί τρόποι έκφρασης της ίδιας ιδέας, αλλά αντί αυτού σε έναν υπολογιστή. Τα παρακάτω θα εκτυπώσουν το "Hello" σε τρεις διαφορετικές γλώσσες προγραμματισμού:

JavaScript: alert(“Hello”);

Πύθων: print(“Hello”)

Perl: print "Hello";

Κάθε γλώσσα προγραμματισμού έχει τη δική της σύνταξη. Στα αγγλικά, έχουμε γραμματική. Το ίδιο ισχύει για τις γλώσσες προγραμματισμού - καθεμία από αυτές έχει το δικό της σύνολο κανόνων.

Πώς ξέρετε εάν μια γλώσσα προγραμματισμού είναι μια γλώσσα προγραμματισμού;

Αυτό μπορεί να φαίνεται περίεργο ερώτημα. Είναι γραμμένος όλος ο κώδικας σε γλώσσα προγραμματισμού; Τεχνικά, όχι. Για παράδειγμα, υπάρχει μια λανθασμένη αντίληψη ότι το HTML (HyperText Markup Language) είναι μια γλώσσα προγραμματισμού. Στην πραγματικότητα είναι μια «δηλωτική» γλώσσα, η οποία σύμφωνα με τη Wikipedia είναι:

"... ένα στυλ οικοδόμησης της δομής και των στοιχείων των προγραμμάτων υπολογιστών - που εκφράζει τη λογική του υπολογισμού χωρίς να περιγράφει τη ροή ελέγχου του."

Με άλλα λόγια, η HTML παρέχει τη δομή μιας ιστοσελίδας, αλλά δεν ελέγχει τον τρόπο με τον οποίο συμπεριφέρεται ή λειτουργεί ο ιστότοπος.

Μπορείτε να προσδιορίσετε εάν μια γλώσσα είναι γλώσσα προγραμματισμού από το αν είναι "Turing ολοκληρωμένο". Το Turing Machine είναι μια υποθετική μηχανή που περιγράφεται από τον Alan Turing το 1936. Για να ολοκληρωθεί η γλώσσα προγραμματισμού Turing χρειάζεται:

  1. Υπό όρους διακλάδωση (την οποία αναλύω παρακάτω).
  2. Η ικανότητα ανάγνωσης και εγγραφής σε άπειρη χαρτοταινία. Αυτό σημαίνει ουσιαστικά τη δυνατότητα αποθήκευσης δεδομένων στη μνήμη.

Δεν πρόκειται να διερευνήσω αυτό το θέμα σε βάθος, αλλά αν σας ενδιαφέρει αυτό το βίντεο είναι μια χρήσιμη εισαγωγή.

Ποια είναι τα βασικά στοιχεία μιας γλώσσας προγραμματισμού;

Υπάρχουν ορισμένα βασικά στοιχεία που συνήθως εμφανίζονται. Αυτό περιλαμβάνει μεταβλητές, βρόχους, δηλώσεις υπό όρους, δομές δεδομένων και αλγόριθμους. Αυτά είναι τα δομικά στοιχεία των περισσότερων γλωσσών προγραμματισμού.

Τι είναι το «for loop»;

Για βρόχους είναι χρήσιμο αν πρέπει να εκτελέσετε επανειλημμένα ένα σύνολο οδηγιών. Για παράδειγμα, έχετε απογευματινό τσάι και πρέπει να φτιάξετε πέντε φλιτζάνια τσάι για τους καλεσμένους σας. Για να φτιάξετε ένα φλιτζάνι τσάι, πρέπει να ακολουθήσετε ένα σύνολο οδηγιών, όπως το προηγούμενο παράδειγμα.

Αντί να γράψετε τις οδηγίες πέντε φορές, μπορείτε να πείτε στον υπολογιστή να πραγματοποιήσει τις ίδιες οδηγίες πέντε φορές. Αυτό σας δίνει τη δυνατότητα κλιμάκωσης.

Ακολουθεί ένα παράδειγμα ενός βασικού forβρόχου:

for (let i = 0; i < 5; i++) { console.log("Make Tea!"); } //expected output: "Make Tea!" "Make Tea!" "Make Tea!" "Make Tea!" "Make Tea!" 

Τι είναι μια δήλωση υπό όρους;

Στο JavaScript έχουμε if...elseδηλώσεις υπό όρους. Αυτά χρησιμοποιούνται όταν θέλετε να εκτελέσετε διαφορετικές ενέργειες με βάση μια συνθήκη.

Επιστρέφοντας στο προηγούμενο παράδειγμα, ρωτάτε τον χρήστη εάν θέλει γάλα στο τσάι του. Αν θέλουν γάλα, προσθέστε γάλα στο τσάι, αλλιώς μην κάνετε τίποτα.

Ακολουθεί ένα παράδειγμα if...elseδήλωσης σε JavaScript:

if(milk == true) { // add milk } else { // don't add milk } 

Τι είναι οι δομές δεδομένων;

"Μια δομή δεδομένων είναι ένας τρόπος οργάνωσης δεδομένων έτσι ώστε να μπορούν να χρησιμοποιηθούν αποτελεσματικά ... Είναι απαραίτητα συστατικά για τη δημιουργία γρήγορων και ισχυρών αλγορίθμων."

(Δομές δεδομένων Εύκολο σε προχωρημένο μάθημα, William Fiset)

Οι κοινές δομές δεδομένων που μπορείτε να βρείτε σε πολλές γλώσσες προγραμματισμού είναι πίνακες, αντικείμενα, πλειάδες και συνδικάτα. Θα πάρω πίνακες ως παράδειγμα.

Στο JavaScript, ένας πίνακας μπορεί να αποθηκεύσει μια σειρά δεδομένων, όπως αριθμούς και συμβολοσειρές (κείμενο). Λατρεύω τα μπισκότα με το τσάι μου, οπότε θα τα αποθηκεύσω στη σειρά μου:

biscuits = [“shortbread”, “digestive”, “ginger nut”]; 

Αυτά τα μπισκότα αποθηκεύονται στη μνήμη του υπολογιστή και εσείς, ως προγραμματιστής, μπορείτε να αποκτήσετε πρόσβαση σε ένα συγκεκριμένο μπισκότο με αναφορά στο ευρετήριό του. Αρχίζετε να μετράτε το ευρετήριο από το 0. Το ευρετήριο είναι σαν τη θέση του μπισκότου σε ένα κουτί μπισκότων. Μπορείτε να το αναφέρετε χρησιμοποιώντας τη σημειογραφία του αγκύλη.

biscuits[0]; // “shortbread” biscuits[1]; // “digestive” biscuits[2]; // “ginger nut” 

Αν θέλετε να πάρετε ένα χωνευτικό μπισκότο, μπορείτε να έχετε πρόσβαση θέση του δείκτη: biscuits[1]. Μπορώ να το βρω εύκολα γιατί ξέρω πού είναι αποθηκευμένο.

Να θυμάστε ότι το πρώτο στοιχείο του πίνακα είναι το ευρετήριο 0. Επομένως, όταν αναφέρεστε στο ευρετήριο 1, είναι στην πραγματικότητα το δεύτερο στοιχείο του πίνακα.

Επομένως, οι δομές δεδομένων είναι ένας τρόπος διαχείρισης δεδομένων. Αυτό περιλαμβάνει την αποθήκευση και ανάκτηση δεδομένων. Είναι πιο αποτελεσματικό να εκτελείτε αλγόριθμους εάν τα δεδομένα είναι οργανωμένα σε μια δομή δεδομένων.

Τι είναι ο αλγόριθμος;

Ένας αλγόριθμος είναι ένα συγκεκριμένο σύνολο οδηγιών που επιλύει ένα πρόβλημα. Είναι μια αφηρημένη έννοια. Ακολουθεί ένας σύνδεσμος για ένα σύντομο βίντεο από το TED στο "Τι είναι ένας αλγόριθμος;".

Θυμάστε όταν γράφαμε οδηγίες για το πώς να φτιάξετε ένα φλιτζάνι τσάι νωρίτερα; Αυτός είναι ουσιαστικά ένας αλγόριθμος: ένα σύνολο διαδοχικών οδηγιών.

Όταν έγραψα την πρώτη μου λειτουργία σε JavaScript, δημιούργησα τον πρώτο μου αλγόριθμο χωρίς να ξέρω ότι ήταν αλγόριθμος! Μια συνάρτηση είναι μια εφαρμογή ενός αλγορίθμου.

Όπως και στην πραγματική ζωή, υπάρχουν συχνά πολλές λύσεις για ένα πρόβλημα κωδικοποίησης. Για παράδειγμα, ας πούμε ότι σκοπεύετε να πάτε σε ένα καφέ που δεν έχετε επισκεφτεί ποτέ πριν. Υπάρχουν διάφοροι τρόποι για να φτάσετε στον προορισμό σας. Ορισμένες διαδρομές διαρκούν περισσότερο από άλλες, αλλά τελικά, όλες σας μεταφέρουν στο ίδιο μέρος. Στην ιδανική περίπτωση θέλετε να επιλέξετε την ταχύτερη, πιο αποτελεσματική και ευκολότερη διαδρομή.

Η ίδια αρχή μπορεί να εφαρμοστεί στον προγραμματισμό. Υπάρχουν συνήθως μερικοί τρόποι επίλυσης ενός προβλήματος κωδικοποίησης και οι προγραμματιστές προσπαθούν να βρουν την πιο κομψή και αποτελεσματική λύση.

Οι προγραμματιστές συχνά δεν τα καταλαβαίνουν στην πρώτη προσπάθεια! Ακριβώς όπως θα έγραφα ένα πρώτο προσχέδιο για ένα άρθρο, το ίδιο ισχύει και για την κωδικοποίηση. Θα αναδιατύπωσα ένα άρθρο αρκετές φορές, όπου μπορώ να αλλάξω τη δομή, να επεξεργαστώ, να ξαναγράψω ενότητες και να αποκόψω περιττές προτάσεις. Στον προγραμματισμό περνάμε από μια παρόμοια διαδικασία και το αποκαλούμε αναδιαμόρφωση του κώδικα μας.

Ποιες είναι οι κύριες γλώσσες προγραμματισμού που χρησιμοποιούνται σήμερα; Πόσοι είναι εκεί?

Φαίνεται να υπάρχει κάποια συζήτηση σχετικά με τον συνολικό αριθμό γλωσσών προγραμματισμού στο Διαδίκτυο. Ορισμένοι ιστότοποι, όπως η Wikipedia, απαριθμούν περίπου 700 από όλες τις «αξιοσημείωτες» τρέχουσες και ιστορικές γλώσσες προγραμματισμού. Άλλοι ιστότοποι όπως το Tiobe παρακολουθούν και παρακολουθούν 250 από τις «πιο δημοφιλείς» γλώσσες.

Στο Github, η πιο δημοφιλής γλώσσα προγραμματισμού του 2019 ήταν η JavaScript:

Γιατί υπάρχουν τόσες πολλές γλώσσες προγραμματισμού; Πώς εξελίχθηκαν οι γλώσσες προγραμματισμού;

Αναπτύσσονται διαφορετικές γλώσσες προγραμματισμού για την ικανοποίηση διαφορετικών αναγκών. Αυτό αποδεικνύεται σε όλη την ιστορία των γλωσσών προγραμματισμού. Ανατρέξτε σε αυτό το διάγραμμα του O'Reilly που απεικονίζει την ιστορία των γλωσσών προγραμματισμού από τη δεκαετία του 1950 έως το 2004.

Στα μέσα της δεκαετίας του 1950, το FORTRAN (Formula Translation) δημιουργήθηκε για να επεξεργαστεί πολύπλοκα μαθηματικά, στατιστικά και επιστημονικά προβλήματα. Το COBOL ("Common Business Oriented Language") δημιουργήθηκε το 1959 για να διευκολύνει τις επιχειρήσεις να χρησιμοποιούν κώδικα. Υπάρχουν μερικές γλώσσες που είναι πιο κατάλληλες για στατιστική ανάλυση όπως η R (1976).

Υπήρξε η άνοδος των γλωσσών προγραμματισμού γενικού σκοπού από τη δεκαετία του 1970 και μετά, όπως C, C ++, C # και Java. Όπως μπορείτε να δείτε στο παραπάνω γράφημα, οι γλώσσες γενικού σκοπού κυριαρχούν στις 10 πιο δημοφιλείς γλώσσες.

Το JavaScript, που δημιουργήθηκε το 1995, είναι μια δημοφιλής γλώσσα για τον Ιστό. Δίνει στους ιστότοπους τη διαδραστικότητα και τη ζωή τους.

Πιο πρόσφατα, έχουμε δει τη γέννηση νέων γλωσσών όπως το Go από την Google, η οποία είχε σκοπό να διατηρήσει αποτελεσματικά μεγάλα συστήματα λογισμικού. Πιθανότατα θα δούμε ακόμη περισσότερες γλώσσες προγραμματισμού να δημιουργούνται στο μέλλον.

Συγκεντρωμένες έναντι ερμηνευμένες γλώσσες προγραμματισμού

Καθώς αρχίζετε να εξοικειώνεστε με τις γλώσσες προγραμματισμού, θα συναντήσετε μεταγλωττισμένες και ερμηνευμένες γλώσσες προγραμματισμού. Ποιά είναι η διαφορά?

Τι είναι η μεταγλωττισμένη γλώσσα;

Οι γλώσσες προγραμματισμού όπως C, C ++ και Java έχουν μια διαδικασία "build" όπου ο κώδικάς σας καταρτίζεται σε μια πιο ευανάγνωστη μορφή (γλώσσα μηχανής) για τον υπολογιστή.

Μπορεί να είναι ευκολότερο να σκεφτούμε δύο άτομα που δεν μιλούν την ίδια γλώσσα, αλλά πρέπει να συνεργαστούν. Ο John μιλάει αγγλικά και η Chloe μιλάει γαλλικά. Η Chloe γράφει ένα σύνολο οδηγιών για το πώς να φτιάξετε ένα σουφλέ σοκολάτας στα γαλλικά, αλλά ο John δεν μπορεί να το καταλάβει. Χρειάζονται έναν μεταφραστή που να μιλάει Αγγλικά και Γαλλικά. Είναι πιο εύκολο εάν ο μεταφραστής μπορεί να μεταφράσει τις οδηγίες της Chloe εκ των προτέρων προτού αρχίσουν να μαγειρεύουν μαζί.

Αντ 'αυτού, οι προγραμματιστές «μιλούν» μια γλώσσα προγραμματισμού όπως Java ή Python. Χρειάζονται τον κωδικό τους για να μεταγλωττιστεί (μεταφραστεί) στη γλώσσα του μηχανήματος προτού εκτελεστεί ένα πρόγραμμα, ώστε ο υπολογιστής να μπορεί να το καταλάβει.

Τα προγράμματα που δημιουργούνται από μια μεταγλωττισμένη γλώσσα είναι ευκολότερα κατανοητά από έναν υπολογιστή και συνεπώς εκτελούνται πολύ γρήγορα.

Τι είναι μια ερμηνευμένη γλώσσα;

Τα JavaScript, PHP και Python είναι παραδείγματα ερμηνευμένων γλωσσών προγραμματισμού. Δεν υπάρχει διαδικασία κατασκευής και ο κωδικός δεν χρειάζεται να μεταγλωττιστεί. Ο κώδικάς σας ερμηνεύεται ή διαβάζεται ανά γραμμή καθώς εκτελείτε το πρόγραμμα.

Επιστροφή στην αναλογία μου για τους Chloe και John. Ο John γράφει ένα σύνολο οδηγιών για το πώς να φτιάξετε μια πίτα βοσκών. Ο μεταφραστής δεν μεταφράζει εκ των προτέρων τις οδηγίες του Τζον, αλλά αντ 'αυτού τις ενώνει για τη μαγειρική τους. Ο μεταφραστής μεταφράζει κάθε γραμμή των οδηγιών του John από τα αγγλικά στα γαλλικά καθώς μαγειρεύει η Chloe. Εξαιτίας αυτού, η Chloe χρειάζεται περισσότερο χρόνο για να προετοιμάσει και να μαγειρέψει το γεύμα.

Επομένως, οι ερμηνευμένες γλώσσες είναι πιο αργές από τις μεταγλωττισμένες γλώσσες. Πρέπει να μεταφραστούν εν συντομία, ώστε ο υπολογιστής να καταλάβει.

Αλλά με τους μεταγλωττιστές just-in-time (JIT), οι ερμηνευμένες γλώσσες γίνονται ταχύτερες και πιο αποτελεσματικές.

Ποιες γλώσσες προγραμματισμού πρέπει να επιλέξω να μάθω;

Οι γλώσσες προγραμματισμού κάνουν σχεδόν το ίδιο πράγμα, αλλά είναι απλώς διαφορετικοί τρόποι έκφρασης των ίδιων οδηγιών σε έναν υπολογιστή. Μόλις κατανοήσετε τις έννοιες και τις βασικές αρχές μιας γλώσσας προγραμματισμού, η καμπύλη εκμάθησης για την εκμάθηση μιας άλλης γλώσσας δεν θα είναι τόσο απότομη.

Η γλώσσα προγραμματισμού που πρέπει να επιλέξετε να μάθετε πρώτα εξαρτάται από διάφορους παράγοντες. Για παράδειγμα, ήθελα να γίνω προγραμματιστής ιστού, γι 'αυτό επέλεξα τη JavaScript ως κύρια γλώσσα προγραμματισμού. Άλλες γλώσσες για τον Ιστό που μπορείτε να μάθετε είναι PHP και Ruby on Rails.

Εάν θέλετε να γίνετε επιστήμονας δεδομένων, τότε η Python μπορεί να είναι μια επιλογή. Η Python θεωρείται ένα από τα καλύτερα εργαλεία επιστήμης δεδομένων για την ανάλυση μεγάλων δεδομένων. Ανέφερα το R νωρίτερα, η οποία είναι μια άλλη γλώσσα που χρησιμοποιείται ευρέως μεταξύ των επιστημόνων και των στατιστικών.

Η Python είναι μια γλώσσα προγραμματισμού γενικής χρήσης και είναι επίσης χρήσιμη για να μάθετε αν θέλετε να μπείτε στον τομέα της Μηχανικής Μάθησης και της Τεχνητής Νοημοσύνης.

Εάν θέλετε να γίνετε Μηχανικός Λογισμικού, τότε η Java θα μπορούσε να είναι μια επιλογή. Η Java είναι μια από τις πιο δημοφιλείς και δημοφιλείς γλώσσες στον κόσμο. Είναι μια ευέλικτη γλώσσα που μπορεί να χρησιμοποιηθεί για την ανάπτυξη λογισμικού μικρών έως μεγάλων επιχειρήσεων.

Σκεφτείτε λοιπόν τι ρόλο στην τεχνολογία θα θέλατε και τι είδους εταιρείες θέλετε να εργαστείτε.

Η επιλογή μιας γλώσσας προγραμματισμού εξαρτάται επίσης από το λογισμικό που προσπαθείτε να δημιουργήσετε. Αυτό μας οδηγεί όμορφα στην επόμενη ενότητα μας.

Τι είναι το λογισμικό;

Πόσες φορές αλληλεπιδράτε με λογισμικό σε μια δεδομένη ημέρα;

Το λογισμικό είναι παντού. Είναι ενσωματωμένο ως ενσωματωμένα συστήματα σε καθημερινές συσκευές, όπως φούρνο μικροκυμάτων, πλυντήρια ρούχων, αυτοκίνητα, τηλεοράσεις, παιδικά παιχνίδια και τηλεχειριστήρια. Στη συνέχεια, υπάρχουν πιο προφανείς συσκευές που σχετίζονται με υπολογιστές που διαθέτουν εφαρμογές ή / και λογισμικό συστήματος όπως tablet, έξυπνα τηλέφωνα, φορητούς υπολογιστές, επιτραπέζιους υπολογιστές και οικιακούς βοηθούς όπως η Alexa.

Ο μέσος άνθρωπος πιθανώς αλληλεπιδρά με λογισμικό μερικές δεκάδες φορές την ημέρα, αν όχι περισσότερο. Είναι μέρος της καθημερινής μας ζωής.

Όλο το λογισμικό προγραμματίζεται από προγραμματιστή. Το λογισμικό είναι ευέλικτο από τη φύση του και μπορεί να επαναλαμβάνεται συνεχώς. Το λογισμικό και το υλικό είναι αλληλένδετα. Φανταστείτε το τηλέφωνό σας χωρίς τις εφαρμογές και το λειτουργικό του σύστημα. Το τηλέφωνο θα ήταν ουσιαστικά ένα ακριβό τούβλο! Επομένως, το λογισμικό δίνει ζωή στο υλικό και το υλικό είναι το πώς αλληλεπιδρούμε με το λογισμικό.

Η πλειονότητα του λογισμικού που δημιουργείται από προγραμματιστές είναι γραμμένη σε γλώσσα προγραμματισμού υψηλού επιπέδου.

Τι είναι η ανάπτυξη λογισμικού;

Η ανάπτυξη λογισμικού είναι τα πάντα, από τη σύλληψη μιας ιδέας έως την ανάπτυξη και την ανάπτυξη. Αυτή η διαδικασία, από τη σύλληψη μιας ιδέας έως την ανάπτυξη λογισμικού, είναι επίσης γνωστή ως κύκλος ζωής του λογισμικού.

Υπάρχουν διάφορα στάδια του κύκλου ζωής του λογισμικού: ανακάλυψη, σχεδιασμός, προγραμματισμός / δημιουργία, δοκιμή και ανάπτυξη / εκτέλεση. Περιλαμβάνει επίσης οτιδήποτε άλλο στο οικοσύστημα ανάπτυξης λογισμικού, όπως συντήρηση, τεκμηρίωση και διορθώσεις σφαλμάτων.

Δεν θα αναφερθώ σε λεπτομέρειες εδώ, καθώς το θέμα της ανάπτυξης λογισμικού εγγυάται το δικό του άρθρο.

Τρέχουσες τάσεις στην ανάπτυξη λογισμικού και στον προγραμματισμό υπολογιστών

Τεχνητή νοημοσύνη και μηχανική μάθηση

Τα τελευταία χρόνια πιθανώς έχετε ακούσει όρους όπως η τεχνητή νοημοσύνη και η μηχανική μάθηση. Μερικές φορές χρησιμοποιούνται εναλλακτικά, αλλά είναι τα ίδια;

Όχι, δεν είναι ακριβώς το ίδιο πράγμα. Η μηχανική μάθηση είναι όπου μια μηχανή μαθαίνει μέσω εμπειρίας. Ενώ η τεχνητή νοημοσύνη είναι μια ευρύτερη ιδέα ότι οι μηχανές μπορούν να εκτελούν εργασίες έξυπνα. Η μηχανική μάθηση είναι ένα υποσύνολο της Τεχνητής Νοημοσύνης.

Τι είναι η Τεχνητή Νοημοσύνη;

Έχω καλύψει τον τρόπο λειτουργίας των γλωσσών προγραμματισμού - ο προγραμματιστής γράφει ένα σύνολο οδηγιών για την εκτέλεση του υπολογιστή. Η τεχνητή νοημοσύνη (AI) είναι μια ευρύτερη έννοια όπου οι υπολογιστές μπορούν να μιμούνται τον τρόπο λειτουργίας του εγκεφάλου. Εκπαιδεύει μια μηχανή να «σκέφτεται» σαν τον άνθρωπο.

Το μεγάλο ερώτημα είναι: μπορείτε να αναπαραγάγετε την ανθρώπινη νοημοσύνη σε μια μηχανή; Μπορείτε να μιμηθείτε τον τρόπο που ένας άνθρωπος μαθαίνει, αιτιολογεί και αντιλαμβάνεται; Ο Άλαν Τούρινγκ έθεσε αυτήν την ερώτηση στο άρθρο του το 1950:

«Μπορούν οι μηχανές να σκεφτούν;»

(Υπολογιστικά μηχανήματα και νοημοσύνη, 1950 από τον Alan Turing)

Στο άρθρο του Turing πρότεινε το «τεστ Turing» στο οποίο μια μηχανή θα χαρακτηριζόταν ως «έξυπνη» αν ένα άτομο δεν μπορούσε να πει τη διαφορά μεταξύ των απαντήσεων ενός ανθρώπου και της τεχνητά έξυπνης μηχανής.

Μετά από 70 χρόνια, προγραμματιστές τεχνητής νοημοσύνης, ακαδημαϊκοί, επιστήμονες και ερευνητές προσπαθούν ακόμη να απαντήσουν σε αυτό το ερώτημα και να δημιουργήσουν μια τεχνητά έξυπνη μηχανή. Δεν νομίζω ότι είμαστε εκεί ακόμα. Έχετε δοκιμάσει να συνομιλήσετε με τη Siri ή την Alexa; Οι συνομιλίες με αυτές τις δύο συσκευές εξακολουθούν να είναι βασικές. Ωστόσο, είμαι σίγουρος ότι είναι θέμα χρόνου πριν βελτιωθεί η τεχνολογία.

Εταιρείες όπως η DeepMind ερευνούν αυτήν την ιδέα και κατά πόσον οι μηχανές είναι ικανές να γνωρίσουν. Το πρόγραμμα AlphaGo του DeepMind έφτασε στα πρωτοσέλιδα όταν νίκησε έναν επαγγελματία παίκτη στο Go. Αυτό ήταν ένα τεράστιο ορόσημο για την τεχνητή νοημοσύνη.

Τι είναι η Μηχανική Εκμάθηση;

Η μηχανική εκμάθηση (ML) είναι ένα υποσύνολο τεχνητής νοημοσύνης. Το ML είναι ένας διαφορετικός τρόπος προγραμματισμού. Είναι η ιδέα ότι ο υπολογιστής έχει τη δυνατότητα να μάθει χωρίς να έχει προγραμματιστεί ρητά. Ο Άρθουρ Σάμουελ βρήκε για πρώτη φορά την ιδέα της μηχανικής μάθησης στο άρθρο του το 1959:

"Ο προγραμματισμός υπολογιστών για μάθηση από την εμπειρία θα πρέπει τελικά να εξαλείψει την ανάγκη για μεγάλο μέρος αυτής της λεπτομερούς προσπάθειας προγραμματισμού."

Όταν δίδασκα στον γιο μου πώς να αναγνωρίζει μια γάτα, θα του έδειχνα φωτογραφίες από γάτες. Το έκανα επανειλημμένα έως ότου μπόρεσε να αναγνωρίσει μια γάτα χωρίς να τον προτρέψω.

Η μηχανική μάθηση είναι παρόμοια με αυτήν. Δίνεις στον υπολογιστή σου εκατό εικόνες (είσοδος) γάτας. Στη συνέχεια μαθαίνει τα μοτίβα στα δεδομένα και δημιουργεί ένα σύστημα ταξινόμησης μέσω επανάληψης. Εάν δώσετε στον υπολογιστή σας περισσότερες εικόνες από γάτες και άλλα ζώα, θα πρέπει να είναι σε θέση να προσδιορίσει εάν το ζώο στην εικόνα είναι γάτα ή όχι γάτα. Έχει μάθει ουσιαστικά πώς πρέπει να μοιάζει μια γάτα.

Η ML δίνει στον υπολογιστή σας δεδομένα και παραδείγματα, και με τη σειρά του, είναι σε θέση να μάθει από μόνη της, όπως κάνουν τα μωρά και τα μικρά παιδιά. Αντί για προγραμματιστές που δίνουν τις οδηγίες σε έναν υπολογιστή, ο υπολογιστής δημιουργεί το δικό του σύνολο οδηγιών που πρέπει να ακολουθούν - αλγόριθμοι μηχανικής μάθησης. Οι αλγόριθμοι μηχανικής μάθησης είναι ένα υποσύνολο του ML, μια έννοια γνωστή ως «Deep learning».

«Το AI είναι ένα από τα πιο βαθιά πράγματα που εργαζόμαστε ως ανθρωπότητα. Είναι πιο βαθύ από τη φωτιά ή τον ηλεκτρισμό ... "

(Sundar Pichai, Παγκόσμιο Οικονομικό Φόρουμ, Ιανουάριος 2020)

Το απόσπασμα από τον Sundar Pichai, Διευθύνοντα Σύμβουλο της Alphabet Inc, συνοψίζει τη σημασία των AI και ML.

Ποιο είναι το μέλλον του προγραμματισμού υπολογιστών;

Αυτή η τελευταία ενότητα θα είναι οι προβλέψεις μου για το μέλλον του προγραμματισμού υπολογιστών.

Οι προγραμματιστές θα συνεχίσουν να δημιουργούν νέες γλώσσες προγραμματισμού. Οι γλώσσες προγραμματισμού θα γίνουν πιο αφηρημένες και, ως εκ τούτου, προσβάσιμες σε άτομα που μαθαίνουν να κωδικοποιούν.

Πιστεύω ότι θα δοθεί μεγαλύτερη σημασία στην κωδικοποίηση και τον προγραμματισμό της εκπαίδευσης στα προγράμματα σπουδών της πρωτοβάθμιας και δευτεροβάθμιας εκπαίδευσης. Η ζήτηση για προγραμματιστές και προγραμματιστές θα αυξηθεί μόνο όταν η τεχνολογία και το λογισμικό ενσωματώνονται ολοένα και περισσότερο στην καθημερινή μας ζωή. Ο προγραμματισμός θα γίνει πανταχού παρών.

Θα δούμε τη συνεχή αύξηση και δημοτικότητα των ML και AI για να βοηθήσουμε τους προγραμματιστές στη διαδικασία ανάπτυξης λογισμικού. Αυτό περιλαμβάνει την αυτοματοποίηση των δοκιμών, καθώς και τον εντοπισμό και την πρόληψη τρωτών σημείων και σφαλμάτων.

Το AI θα φέρει επανάσταση σε όλες τις πτυχές της κοινωνίας μας, όχι μόνο στον προγραμματισμό και την ανάπτυξη λογισμικού. Για παράδειγμα, έχουμε δει μεγάλα βήματα στον τομέα της τεχνητής νοημοσύνης και των αυτοκινούμενων αυτοκινήτων.

Μία από τις κορυφαίες εταιρείες στον κόσμο που αναπτύσσουν αυτοκινούμενα αυτοκίνητα είναι η Tesla, που ιδρύθηκε από τον Elon Musk. Με την επίβλεψη ενός ανθρώπου οδηγού, ένα αυτοκίνητο Tesla μπορεί τώρα να αλλάζει αυτόματα λωρίδες, να πλοηγείται αυτόνομα σε αυτοκινητόδρομους περιορισμένης πρόσβασης και ο ιδιοκτήτης μπορεί να καλεί το αυτοκίνητο από και προς γκαράζ ή θέση στάθμευσης. Στόχος της Tesla είναι να δημιουργήσει ένα πλήρως αυτοματοποιημένο, αυτόνομο αυτοκίνητο χωρίς καμία ανθρώπινη επίβλεψη.

Καθώς οι μηχανές γίνονται πιο έξυπνες, μπορεί να φτάσουμε σε ένα σημείο όπου οι μηχανές ξεπερνούν την νοημοσύνη των ανθρώπων. Αυτό αναφέρεται ως μοναδικότητα. Μπορεί να φαίνεται σαν πλήρης επιστημονική φαντασία αυτή τη στιγμή! Αλλά αξιοσημείωτα στοιχεία όπως ο Ray Kurzweil προβλέπουν ότι μηχανήματα με ανθρώπινο επίπεδο πληροφοριών θα είναι διαθέσιμα μέσα στα επόμενα 20 χρόνια. Ο Kurzweil είναι γνωστός για τις ακριβείς προβλέψεις του για το πώς θα προχωρήσουν οι τεχνολογίες. Έγραψε ένα βιβλίο για αυτό: Η εποχή των πνευματικών μηχανών.

Πώς θα αλλάξει η κοινωνία μας ως αποτέλεσμα εξαιρετικά έξυπνων μηχανών;

Τελικές λέξεις

Η τεχνολογική επιρροή και ο κώδικας αγγίζουν σχεδόν κάθε μέρος της ζωής μας. Από την επιλογή της ψυχαγωγίας μας (διαδικτυακά παιχνίδια, ροή) και τον τρόπο με τον οποίο ψωνίζουμε, μέχρι την επιλογή του τι τρώμε και ακόμα και το πώς χρονολογούμε! Ο κώδικας είναι σημαντικός και περισσότερες θέσεις εργασίας θα αλλάξουν και απαιτούν από τους ανθρώπους να έχουν τουλάχιστον κάποια βασική κατανόηση του προγραμματισμού.

Ωστόσο, υπάρχουν μόνο περίπου 23,9 εκατομμύρια προγραμματιστές στον κόσμο σύμφωνα με τη μελέτη του Global Developer Population and Demographic 2019. Για να το θέσουμε σε προοπτική, μόνο το 0,3% του παγκόσμιου πληθυσμού ξέρει πώς να προγραμματίζει. Όπως ανέφερα νωρίτερα, η εξάρτησή μας από λογισμικό και τεχνολογία αυξάνεται. Σύμφωνα με τις στατιστικές του Γραφείου Εργασίας των ΗΠΑ, η ζήτηση για μηχανικούς λογισμικού αναμένεται να αυξηθεί κατά 21% από το 2018 έως το 2028. Επομένως, πρέπει να αυξήσουμε τον αριθμό των προγραμματιστών.

Εάν σκέφτεστε να γίνετε προγραμματιστής, ξεκινήστε σήμερα. Είναι μια απίστευτα συναρπαστική στιγμή για να το κάνετε! Υπάρχουν πολλοί πόροι εκμάθησης κώδικα. Υπάρχουν πλατφόρμες αυτο-ρυθμού όπως το freeCodeCamp. Υπάρχει επίσης μια υπέροχη ανάρτηση από τον Laurence Bradford που συγκεντρώνει όλους τους καλύτερους πόρους για να μάθετε να κωδικοποιείτε δωρεάν. Κάντε κάποια έρευνα και μάθετε ποιος πόρος ταιριάζει στο στυλ μάθησης σας.

Εάν έχετε οποιεσδήποτε ερωτήσεις ή απλώς θέλετε να πείτε γεια, βρείτε με στο Twitter @PhoebeVF.

Ιδιαίτερες ευχαριστίες στην Κατερίνα Λιμπιτσούνη από το Undraw για τη δημιουργία των εικονογραφήσεων για αυτό το άρθρο.