Thursday, 25 June 2009

Η τέχνη του προγραμματισμού

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

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

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

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

H τέχνη του προγραμματισμού δεν περιλαμβάνει μόνο το γράψιμο κώδικα, αλλά κυρίως την αποσφαλμάτωσή του (debugging). Το πρώτο βήμα είναι η ορθή ανάγνωση του σφάλματος, το οποίο περιέχει αρκετές πληροφορίες για να βρούμε τη λύση του προβλήματος. Στην περίπτωση που το σφάλμα είναι bus error ή segmentation fault τότε αρχίζει η πραγματική τέχνη. Στη διαδικασία της αποσφαλμάτωσης ενά απλό printf διάσπαρτο σε διάφορα σημεία του κώδικα μπορεί να αντικαταστήσει και τον καλύτερο εργαλείο αποσφαλμάτωσης.

Η τέχνη του προγραμματισμού περιλαμβάνει την κατανόηση του πως λειτουργεί, στοιχειωδώς τουλάχιστον, ο μεταγλωττιστής (compiler) ή ο ερμηνευτής (interpreter) της γλώσσας που χρησιμοποιούμε. Μόνο έτσι θα μπορεί να βελτιστοποιήσει κανείς ένα πρόγραμμα ή να βρει ένα δύσκολο λάθος σε άλλο. Tαυτόχρονα να κατανοεί πως λειτουργεί ο υπολογιστής και το λειτουργικό σύστημα, για να κατανοήσει τι σημαίνει θέση μνήμης και δείκτης.

Η τέχνη του προγραμματισμού περιλαμβάνει τη γνώση των απαραίτητων εργαλείων που κάνουν τη ζωή του προγραμματιστή πιο εύκολη, αλλά ίσως και όχι. Τι θέλω να πω; Ο προγραμματιστής οφείλει να μπορεί να διαβάσει το Makefile ή το configure script ενός προγράμματος, να μπορεί να χρησιμοποιήσει debuggers και ταυτόχρονα όλα αυτά από τη γραμμή εντολών. Παρόλ'αυτά αν βρεθεί σε ένα καινούριο περιβάλλον να μπορεί να εξοικειωθεί γρήγορα με τα νέα εργαλεία του.

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

Προγραμματισμός σημαίνει να βρίσκεται η βέλτιστη λύση σε κάθε πρόβλημα. Το κριτήριο όμως της βελτιστότητας κάθε φορά διαφέρει. Άλλες φορές είναι η ταχύτητα εκτέλεσης και άλλες φορές η ταχύτητα συγγραφής. Πολλές φορές η μέθοδος "brute force" είναι αποδεκτή όταν ένας πολύπλοκος αλγόριθμος θα χαλάσει την απλότητα του προγράμματος, χωρίς αυτό να σημαίνει ότι απλότητα είναι πάντα και ωραία.

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

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

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

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

No comments:

Post a Comment