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

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση


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

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


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

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

Πολύ χρήσιμες όμως είναι και γλώσσες που δεν πληρούν αυτή τη συνθήκη. Αν και θεωρητικά πιο "αδύναμες", αυτές οι γλώσσες μπορεί να βοηθήσουν πολύ έναν προγραμματιστή, αφού συνήθως είναι σχεδιασμένες για εφαρμογή σε ένα συγκεκριμένο πεδίο προβλημάτων (Domain Specific Languages), και κάνουν τον προγραμματισμό σε αυτό αρκετά ευκολότερο απ' ότι μια γλώσσα γενικής χρήσης (π.χ. SQL). Ένα άλλο παράδειγμα είναι οι γλώσσες markup, για την μορφοποίηση και μετατροπή κειμένου (π.χ. HTML).

Άμεσα συνδεδεμένοι με τις γλώσσες προγραμματισμού είναι και οι μεταγλωττιστές (compilers) ή διερμηνείς (interpreters) τους, τα εργαλεία εκείνα που μεταφράζουν ένα πρόγραμμα στη γλώσσα που καταλαβαίνει ο υπολογιστής, ώστε να μπορεί να εκτελεστεί. Όπου αυτό είναι απαραίτητο θα συζητηθούν μαζί με την γλώσσα.

Το ίδιο θα γίνει και για τους debuggers, τα εργαλεία που χρησιμοποιούνται για τη διάγνωση λαθών όταν κάτι δεν πάει καλά (κάτι που συμβαίνει πιο συχνά απ' ότι φαντάζεστε).

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

Επεξεργαστές Κειμένου

Ένα συχνό λάθος των αρχάριων προγραμματιστών είναι παραμελήσουν αυτό το πολύ σημαντικό εργαλείο. Δεν είναι λίγοι αυτοί που εκπονούν (στην κυριολεξία) προγράμματα στο Notepad, ή που προσπαθούν να γράψουν κώδικα σε Word Processors από Office Suites. Με τον κατάλληλο επεξεργαστή κειμένου, η παραγωγικότητα του προγραμματιστή μπορεί να αυξηθεί σημαντικά. Η χρήση διαφορετικών χρωμάτων και η αυτόματη στοίχιση αναλόγως με τις συντακτικές δομές της γλώσσας θεωρούνται δεδομένα για κάθε τέτοιο επεξεργαστή, αλλά οι δυνατότητες τους δεν σταματούν εκεί.

Επεξεργαστές Κειμένου

Automatic Build Tools

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

Automatic Build Tools

Revision Control

Ένα λιγότερο γνωστό, αλλά εξαιρετικά χρήσιμο εργαλείο για κάθε προγραμματιστή, είναι ένα revision control system. Με ένα τέτοιο εργαλείο μπορεί να διατηρεί πολλαπλές εκδόσεις των προγραμμάτων του, να κρατάει ιστορικό όλων των σημαντικών αλλαγών που έχουν γίνει, και να διαχειρίζεται εύκολα και αποτελεσματικά ένα project στο οποίο δουλεύουν ταυτόχρονα περισσότεροι του ενός προγραμματιστές.

Revision Control Tools

Documentation Tools

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


Integrated Development Environments (IDE)

Στην πραγματικότητα, ένα IDE δεν είναι παρά μια συλλογή όλων (ή λιγότερων) από τα παραπάνω εργαλεία, συνδυασμένα σε ένα ομοιογενές σύστημα, συνήθως με ένα γραφικό περιβάλλον. Αν και εξαιρετικά χρήσιμα σε περιβάλλοντα εργασίας σαν αυτά των Windows, σε Unix-based λειτουργικά σαν το GNU/Linux δεν έχουν τόση αξία, και μάλιστα μπορεί να αποτελέσουν τροχοπέδη για έναν προχωρημένο χρήστη. Ο λόγος είναι ότι το ίδιο το σύστημα έχει σχεδιαστεί με τη λογική του συνδυασμό πολλών εξειδικευμένων εργαλειών για την διεκπεραίωση μιας εργασίας, και ως εκ τούτου αυτό μπορεί να γίνει αρκετά εύκολα, και με τρόπους που οι δημιουργοί των αρχικών προγραμμάτων δεν είχαν καν φανταστεί. Κάτι τέτοιο δεν είναι πάντοτε δυνατό με ένα IDE.