Ο Καλλιτεχνικός Τρόπος Προγραμματισμού

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

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

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

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

Κανόνες αντίχειρα που ξαναγράφτηκαν για το λειτουργικό παράδειγμα:

Η ανάγνωση-εγγραφή και οι μετασχηματισμοί (αλγόριθμοι) πρέπει να είναι ξεχωριστοί.

Χρησιμοποιήστε αμετάβλητες μεταβλητές. Αποθαρρύνετε τη χρήση δηλώσεων αλλαγής ανάθεσης.

Αποθαρρύνετε τις παρενέργειες (είσοδος/έξοδος ή αλλαγή οποιασδήποτε μεταβλητής επιτόπου), κάθε συνάρτηση θα πρέπει ΜΟΝΟ να επιστρέφει το αναμενόμενο αποτέλεσμα.

Χρησιμοποιήστε αναφορικά διαφανείς συναρτήσεις (μερικές φορές ονομάζεται καθαρές συναρτήσεις) χωρίς παρενέργειες, π.χ. εάν x = y, η f(x) και η f(y) θα πρέπει να είναι ίδια για πάντα.

Η δοκιμή μονάδας είναι απαραίτητη για κάθε λειτουργία.

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

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



Source by Kapil Rajak

Σχολιάστε