Faragiri

Εκμάθηση: Από τον κώδικα στην παραγωγή Προγραμματισμός υπολογιστών

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

6Ενότητες
6Λεπτά ανάγνωσης
2Βάθος

Το μάθημα που δεν το ανακοίνωσε κανείς

Κανένα από αυτά δεν γυρίζει μόνο του, γι' αυτό αποτυγχάνει η μάθηση ένα ένα

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

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

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

Ο Στράτος Καραγιάννης συντηρεί το πρόγραμμα παραγγελιών ενός τυπογραφείου στο Αγρίνιο και το ανεβάζει αντιγράφοντας έναν φάκελο με FTP, πράγμα που δούλευε δύο χρόνια. Μια Πέμπτη ανέβασε μια αλλαγή στο κομμάτι της τιμολόγησης, και η διαβίβαση στο myDATA άρχισε να γυρίζει πίσω απορριμμένη. Το τυπογραφείο έμεινε δύο μέρες με 63 τιμολόγια στη σειρά, και η προηγούμενη έκδοση δεν υπήρχε πουθενά: την είχε γράψει από πάνω.

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

Πρώτα αναστρέψιμο, και ύστερα οτιδήποτε άλλο

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

Η ίδια ιδέα, ένα στρώμα πιο κάτω, είναι ο λόγος που κρατιέται ιστορία. Δύο εντολές αναιρούν πράγματα και δεν είναι εναλλάξιμες: το git revert φτιάχνει νέα καταγραφή, το git reset μετακινεί τον κλάδο. Το πρώτο είναι ασφαλές πάνω σε ό,τι έχει ήδη κάποιος άλλος, επειδή προσθέτει μια αλλαγή που αναιρεί μια αλλαγή και αφήνει και τις δύο στο αρχείο. Το δεύτερο ξαναγράφει το πού δείχνει ο κλάδος, που είναι το σωστό εργαλείο σε δουλειά που δεν την είδε κανείς και τρόπος να καταστραφεί το απόγευμα ενός συναδέλφου σε δουλειά που την είδε. Εκεί ζει το πρακτικό μισό του Ελέγχου εκδόσεων.

Το μηχάνημα που δεν έχει τίποτα

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

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

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

Δύο κατάλογοι και ένας σύνδεσμος, σε φιλοξενία λίγων ευρώ

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

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

  • releases/2026-09-04-1420/ ανεβαίνει ολόκληρος πριν αλλάξει οτιδήποτε
  • ln -sfn releases/2026-09-04-1420 current είναι η εγκατάσταση
  • ln -sfn releases/2026-08-28-0930 current είναι η επαναφορά, ίδια εντολή με άλλη ημερομηνία

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

Πέμπτη απόγευμα

Τι σταματάει το κάθε στρώμα, και τι το περνάει κατευθείαν

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

  1. Η σουίτα δοκιμώνΣυμπεριφορά που δούλευε και τώρα δεν δουλεύειΌ,τι δεν σκέφτηκε κανείς να περιγράψει, και κάθε διαφορά περιβάλλοντος
  2. Το χτίσιμο από το μηδένΤην αδήλωτη βιβλιοθήκη και τη μεταβλητή που ζει σε ένα προφίλ φλοιούΚώδικα που είναι λάθος με τρόπο που χτίζεται τέλεια
  3. Το κοντέινερΤη διαφωνία διακομιστή και φορητού για μια έκδοσηΜια κακή αλλαγή, πιστά και πανομοιότυπα, παντού
  4. Η κρατημένη προηγούμενη έκδοσηΌ,τι άφησαν να περάσει τα άλλα τρία, για όσο χρειαστεί ώσπου να το προσέξει κάποιοςΤίποτα, και είναι το στρώμα που σβήνεται για να γλιτώσει χώρος
Μία αλλαγή, καθ' οδόν

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

Τα τεκμήρια, και για τι χρησιμεύουν στ' αλήθεια

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

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

Η σειρά, και το κόλλημα που έχει ελληνικό όνομα

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

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

Τι ανοίγετε το 2026, και τι κοστίζει από την Ελλάδα

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

Το GitHub Actions είναι η προεπιλογή για έργα που βρίσκονται ήδη εκεί, είναι δωρεάν για δημόσια αποθετήρια, και αντικατέστησε το Jenkins για τις περισσότερες μικρές ομάδες, που είναι αυτό που υποθέτουν ακόμη οδηγοί παλαιότεροι από το 2019 περίπου. Το Docker παραμένει ο τρόπος που χτίζονται τα κοντέινερ και είναι δωρεάν για ατομική χρήση.

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

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

Δίπλα σε αυτό

Πάνω από αυτό