0xBE57CODE / 0xBADC0DE

Διαβάζω σε αρκετά blogs και forums τις απόψεις σχετικά με το πως πρέπει να γράφεται ή να μην γράφεται ο κώδικας, ποιές εντολές πρέπει να χρησιμοποιούνται και ποιές όχι.

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

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

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