II.

Γλώσσες προγραμματισμού και δημιουργία λογισμικού

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

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

Γλώσσες προγραμματισμού χαμηλού επιπέδου

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

Η γλώσσα μηχανής (machine code), γνωστή και ως δυαδική γλώσσα, είναι μια σειρά τιμών 1 και 0 που αναπαριστούν μια εντολή για τον επεξεργαστή ενός υπολογιστή (CPU). Η συμβολική γλώσσα (assembly language) είναι πολύ πιο αναγνώσιμη από τη δυαδική γλώσσα. Χρησιμοποιεί μνημονικούς κώδικες για να παραπέμπει σε οδηγίες γλώσσας μηχανής, αντί να χρησιμοποιεί απευθείας τις αριθμητικές τιμές των οδηγιών.

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

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

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

  • Αν θέλετε να εργαστείτε στον προγραμματισμό για μονάδες επεξεργασίας γραφικών (GPU) χρησιμοποιώντας γλώσσες υψηλού επιπέδου όπως οι CUDA ή OpenCL, θα πρέπει να κατανοήσετε τον προγραμματισμό χαμηλού επιπέδου.

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

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

  • Η συμβολική γλώσσα είναι χρήσιμη στην αντίστροφη μηχανική. Πολλά προγράμματα διανέμονται μόνο σε μορφή γλώσσας μηχανής η οποία μπορεί απλά να μεταφραστεί σε συμβολική γλώσσα με έναν αποσυμβολομεταφραστή (disassembler), αλλά είναι πιο δύσκολο να μεταφραστεί σε μια γλώσσα υψηλότερου επιπέδου μέσω ενός προγράμματος αντίστροφης μεταγλώττισης (decompiler).

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

Σωρός ονομάτων γλωσσών λογισμικού
Σωρός ονομάτων γλωσσών λογισμικού

Γλώσσες προγραμματισμού υψηλού επιπέδου

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

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

Note

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

Οι πρώτες γλώσσες υψηλού επιπέδου που αναπτύχθηκαν τη δεκαετία του 1950 ήταν οι FORTRAN, COBOL και BASIC. Επέτρεπαν στα προγράμματα να έχουν προδιαγραφές με αφηρημένο τρόπο, ανεξάρτητα από τις ακριβείς λεπτομέρειες της αρχιτεκτονικής υλικού του υπολογιστή. (Wolfram 2002).

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

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

Note

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

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

Ποιες είναι οι διαφορές μεταξύ των γλωσσών χαμηλού επιπέδου και των γλωσσών υψηλού επιπέδου;

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

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

Γράφοντας τα δικά σας προγράμματα/λογισμικό

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

Τι είναι η μηχανική λογισμικού;

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

Παράδειγμα

Ας δούμε τους διάφορους ορισμούς της μηχανικής λογισμικού:

  • Το IEEE, με το πρότυπο 610.12-1990, ορίζει τη μηχανική λογισμικού ως την υλοποίηση μιας συστηματικής, συνεκτικής, υπολογιστικής προσέγγισης για την ανάπτυξη, τη λειτουργία και τη συντήρηση του λογισμικού.

  • Ο Fritz Bauer την όρισε ως την «καθιέρωση και χρήση τυποποιημένων αρχών μηχανικής. Σας βοηθά, από οικονομικής απόψεως, να αποκτήσετε λογισμικό που είναι αξιόπιστο και λειτουργεί αποτελεσματικά στις πραγματικές μηχανές.»

  • Ο Boehm ορίζει τη μηχανική λογισμικού ως ότι περιλαμβάνει «την πρακτική εφαρμογή της επιστημονικής γνώσης για τον δημιουργικό σχεδιασμό και την κατασκευή προγραμμάτων υπολογιστών. Περιλαμβάνει επίσης τη σχετική τεκμηρίωση που απαιτείται για την ανάπτυξη, τη λειτουργία και τη συντήρησή τους».

Αλλά μήπως η μηχανική λογισμικού περιλαμβάνει περισσότερα από την κωδικοποίηση;

Ναι, υπάρχουν πολλά βήματα που απαιτούνται για τη δημιουργία λογισμικού, τόσο πριν όσο και μετά την κωδικοποίηση. Αυτό το ονομάζουμε κύκλο ζωής ανάπτυξης λογισμικού (Software Development Life Cycle - SDLC), η δομή συνίσταται σε μια σαφώς ορισμένη ακολουθία σταδίων που καθιστά αποτελεσματική τη διαδικασία σχεδιασμού και ανάπτυξης. Τα βήματα είναι τα εξής:

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

  • Η συγκέντρωση των απαιτήσεων αφορά την προσπάθεια συλλογής όσο το δυνατόν περισσότερων πληροφοριών σχετικά με τις απαιτήσεις του πελάτη.

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

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

  • Στον σχεδιασμό λογισμικού η ομάδα αντλεί τις γνώσεις από τις φάσεις απαίτησης και ανάλυσης και σχεδιάζει στην πράξη το προϊόν λογισμικού.

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

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

  • Απαιτείται φάση ενοποίησης εάν το λογισμικό πρέπει να ενοποιηθεί με εξωτερικές οντότητες όπως βάσεις δεδομένων ή άλλα προγράμματα.

  • Η φάση υλοποίησης είναι όταν το νέο λογισμικό είναι έτοιμο και έχει εγκατασταθεί σε μηχανήματα χρηστών.

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

Σταδιακή ανάπτυξη έναντι ευέλικτης ανάπτυξης

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

Σύγκριση μεταξύ σταδιακής και ευέλικτης ανάπτυξης
Σύγκριση μεταξύ σταδιακής και ευέλικτης ανάπτυξης

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

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

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

Note

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

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

Ένα λογισμικό IDE σημαίνει «integrated development environment (ολοκληρωμένο περιβάλλον ανάπτυξης)» και είναι μια εφαρμογή που χρησιμοποιούν οι προγραμματιστές για να δημιουργούν προγράμματα υπολογιστών. Σε αυτή την περίπτωση, η λέξη «ολοκληρωμένο» αναφέρεται στον τρόπο με τον οποίο συνδυάζονται πολλά εργαλεία ανάπτυξης σε ένα πρόγραμμα. Για παράδειγμα, ένα τυπικό IDE περιλαμβάνει ένα πρόγραμμα επεξεργασίας πηγαίου κώδικα, ένα πρόγραμμα εντοπισμού σφαλμάτων και έναν μεταγλωττιστή. Τα περισσότερα IDE παρέχουν επίσης μια διασύνδεση έργου που επιτρέπει στους προγραμματιστές να παρακολουθούν όλα τα αρχεία που σχετίζονται με ένα έργο. Πολλά υποστηρίζουν και τον έλεγχο έκδοσης.

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

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

Σύμφωνα με το Wikipedia, υπάρχουν περίπου 700 γλώσσες προγραμματισμού, συμπεριλαμβανομένων των εσωτερικών γλωσσών κωδικοποίησης. Άλλες πηγές που απαριθμούν μόνο τις σημαντικές γλώσσες καταλήγουν σε έως και 245 εκπληκτικές γλώσσες συνολικά. Ένας άλλος κατάλογος, που ονομάζεται HOPL, ο οποίος ισχυρίζεται ότι περιλαμβάνει κάθε γλώσσα προγραμματισμού που υπήρξε ποτέ, εκτιμά ότι ο συνολικός αριθμός ανέρχεται σε 8.945. Μερικοί μάλιστα εκτιμούν ότι το σύνολο ανέρχεται μέχρι και σε 25.000..

Αλλά πώς μπορείτε να επιλέξετε μια γλώσσα προγραμματισμού για να μάθετε; Και μπορείτε να μάθετε να κωδικοποιείτε στην πράξη; Η απάντηση είναι ναι! Μπορείτε και πρέπει να μάθετε, καθώς αυξάνεται η ανάγκη γνώσεων κώδικα για διάφορες θέσεις εργασίας.

Το Carlcheo έχει δημιουργήσει ένα χρήσιμο infographic (γραφικά πληροφοριών) για να μας βοηθήσει να επιλέξουμε ποια γλώσσα προγραμματισμού να μάθουμε και έχει συγκεντρώσει πόρους που συνιστούν μια καλή αφετηρία για να μάθουμε μερικές από τις αναφερόμενες γλώσσες.

  • Αν θέλετε να μάθουν τα παιδιά σας μια γλώσσα, προτείνεται η Scratch, και όταν την ολοκληρώσετε, προτείνεται να συνεχίσετε στην Python.

  • Αν θέλετε να μάθετε μια γλώσσα για να βρείτε δουλειά στη Facebook ή στη Google, η καλύτερη επιλογή σας μπορεί να είναι η Python. Και τυχαίνει η Python να είναι γενικά μια εξαιρετική γλώσσα να επιλέξετε, διότι θεωρείται σχετικά εύκολο να τη μάθετε.

  • Σύμφωνα με τους προγραμματιστές, αν θέλετε να μάθετε μια «εύκολη» γλώσσα, οι επιλογές σας είναι οι Python, Ruby και JavaScript. Αυτές οι γλώσσες μπορούν να σας παρέχουν μια σταθερή βάση όσον αφορά τη λογική και τη σύνταξη του προγραμματισμού. Και μόλις έχετε μια σταθερή βάση, οποιαδήποτε άλλη γλώσσα θα τη μάθετε ευκολότερα.

  • Αν θέλετε να προγραμματίσετε παιχνίδια, η C++ τείνει να είναι η κύρια γλώσσα επιλογής.

  • Αν θέλετε να κωδικοποιήσετε σε σχετικά χαμηλό επίπεδο, συνιστάται να επιλέξετε τις γλώσσες C και C++, καθώς τείνουν να μεταγλωττίζονται απευθείας στη γλώσσα μηχανής της πλατφόρμας που χρησιμοποιείται. Επίσης, οι C και C++ σας επιτρέπουν να γράφετε με τρόπο που είναι αρκετά κοντά στις περισσότερες γλώσσες μηχανής (δείκτες αύξησης κ.λπ.). Μια νεότερη γλώσσα σε αυτόν τον χώρο είναι η Rust.

  • Αν θέλετε να εργαστείτε σε έργα iPhone, δηλαδή έργα που σχετίζονται με iOS, επιλέξτε τη γλώσσα Swift.

  • Αν θέλετε να εργαστείτε σε έργα που σχετίζονται με Android, επιλέξτε τις γλώσσες Java ή Kotlin.

  • Αν σας συναρπάζει η ομορφιά των δικτυακών τόπων, είναι αρκετά πιθανό ότι θα σας ενδιαφέρει να μάθετε τον κώδικα που εμφανίζεται στον χρήστη (ανάπτυξη εφαρμογών web προσκηνίου - front-end web development) και η γλώσσα που θα επιλέξετε θα είναι η JavaScript.

  • Αν σας συναρπάζουν οι διακομιστές (ανάπτυξη εφαρμογών web παρασκηνίου - back-end web development) και οι βάσεις δεδομένων, μπορεί να επιλέξετε τις γλώσσες Ruby ή Python.

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

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

  • Τι είναι αυτό που σας έκανε να ενδιαφερθείτε για τον προγραμματισμό;

  • Τι θέλετε να κάνετε ως προγραμματιστές;

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

Next section
III. Κατανόηση και χρήση του λογισμικού στις συσκευές μας