Κυριακή 27 Σεπτεμβρίου 2009

The Cathedral and the Bazaar.



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

Όπως μαρτυρεί και ο τίτλος του, ο Eric Steven Raymond συγκρίνει τη δημιουργία λογισμικού με τη κατασκευή ενός έργου όπως ένας καθεδρικός ναός ή μια λαϊκή αγορά τύπου παζαριού. Βρίσκει περισσότερες ομοιότητες με τον απρόβλεπτο/άναρχο τρόπο που φτιάχνεται ένα παζάρι παρά με το συντονισμένο τρόπο της κατασκευής ενός μεγαλοπρεπούς καθεδρικού. Ενώ όμως για μερικούς αυτό ακούγεται κάπως... υποτιμητικό για το έργο ενός μηχανικού λογισμικού (ακούς εκεί να με παρομοιάσουν με μαγαζάτορα παζαριού!), ο Eric Steven Raymond όμως το θεωρεί ακριβώς το μεγάλο του ατού.
Το δοκίμιό του βασίστηκε στην προσωπική του εμπειρία από την ενασχόλησή του με την ανάπτυξη ενός συγκεκριμένου έργου λογισμικού:
το πρόγραμμα διαχείρισης ηλεκτρονικού ταχυδρομείου ονόματι fetchtop και κατόπιν popclient... που τελικά ονομάστηκε fetchmail.
Παρατήρησε λοιπόν πως όπως και το Λίνουξ είναι κι αυτό ανατρεπτικό.

Τα μαθήματα που προσκόμισε είναι λοιπόν τα εξής:
1. Κάθε καλό λογισμικό ξεκινάει από το διακαή πόθο του μηχανικού δημιουργού του.
2. Οι καλοί προγραμματιστές ξέρουν να γράφουν κώδικα. Οι μεγάλοι προγραμματιστές ξέρουν πώς να ξαναγράφουν και να ξαναχρησιμοποιούν (βελτιώνοντας το ήδη υπάρχοντα πγαίο κώδικα), κάτι που ονομάζει "εποικοδομητική τεμπελιά"
3. Σχεδίασε τι θα πετάξεις. Στο τέλος θα πετάξεις κάτι ούτως ή άλλως.
4. Αν έχεις τη σωστή τάση, θα βρεις ενδιαφέροντα πράγματα στο δρόμο σου.
5. 'Οταν πάψεις να ενδιαφέρεσαι για κάποιο πρόγραμμα, το τελευταίο σου καθήκον είναι να το κληροδοτήσεις σε έναν ικανό διάδοχο.
6. Να συμπεριφέσαι στους χρήστες του λογισμικού σου σαν να ήταν συν-δημιουργοί του. Μ' αυτόν το τρόπο θα πετύχεις γρήγορα τη βελτίωση του κώδικα και θα διορθωθούν τα υπάρχοντα λάθη.
7. Κυκλοφόρησε το λογισμικό σου νωρίς. (Μην καθυστερείς.) Πραγματοποίησε συχνές εκδόσεις. Άκου τους χρήστες σου.
[Αυτό ακριβώς έκανε ο Linus Torvalds κατά τη διαδικασία ανάπτυξης του Λίνουξ.
Έμπασε όσο δυνατόν μεγαλύτερο αριθμό παιχτών, ικανοποιώντας τον προσωπικό τους εγωισμό (ναι, κι εγώ συνέβαλα στο πρωτοποριακό αυτό έργο!), δίνοντάς τους κίνητρα επειδή τους ενημέρωνε με συνεχείς όλο και πιο βελτιωμένες (με τη δική τους συνεισφορά) εκδόσεις.]
8. Με τη δημοσίευση της δοκιμαστικής έκδοσης (beta), κάθε νεο πρόβλημα θα εντοπιστεί από τους χρήστες.
O περίφημος... νόμος του Linus: όσο περισσότερα μάτια κοιτάζουν, τόσο πιο ρηχό είναι το πρόβλημα.
Εδώ ίσως έγκειται και το μεγάλο πλεονέκτημα που έχει το ελεύθερο λογισμικό έναντι του ιδιοταγούς.
Αντί για λίγους προγραμματιστές, διαθέτει μια στρατιά πρόθυμων συν-δημιουργών, με αποτέλεσμα τα προβλήματα να επιλύονται ταχύτητα με την εξυπνότερη κατά περίπτωση λύση.
Αυτό το κοινωνικό φαινόμενο, που ονομάστηκε Delphi effect, φαίνεται πως ισχύει ακόμη και για πολύπλοκα έργα όπως ο πυρήνας ενός λειτουργικού συστήματος.
Θα μπορούσε εδώ να παρατηρήσει κάποιος πως ο μεγάλος αριθμός των συμμετεχόντων προγραμματιστών θα προκαλούσε αναπόφευκτα προβλήματα που ανακύπτουν κατά την επικοινωνία όλων αυτών των συν-δημιουργών. Τα λάθη στον πηγαίο κώδικα συγκεντρώνονται ακριβώς στα σημεία διεπαφής. Ο Eric Steven Raymond όμως τονίζει πως αυτό... δεν ισχύει στην περίπτωση του λογισμικού ανοικτού κώδικα. Είναι κοινό μυστικό πως οι βασικοί προγραμματιστές του Λίνουξ εργάζονται σε ξεχωριστά παράλληλα "υποκαθήκοντα" κατά μόνας, και ελάχιστα επικοινωνούν μεταξύ τους!
9. Οι έξυπνες δομές δεδομένων και ο χαζός κώδικας τα πάνε μια χαρά, παρά το αντίστροφο.
10. Όταν φέρεσαι στους ελεγκτές της δοκιμαστικής σου έκδοσης σαν να ήταν ο πιο σημαντικός σου πόρος, τότε θα γίνουν ο πιο σημαντικός σου πόρος.
11. Το δεύτερο σημαντικότερο πράγμα από το να σου έρθει μια φαεινή ιδέα ειναι να αναγνωρίσεις τις φαεινείς ιδέες των χρηστών σου.
Καμιά φορά μπορεί να είναι και καλύτερες.
12. Συχνά, οι πιο καινοτόμες λύσεις προέρχονται από τη συνειδητοποίηση πως η γενική ιδέα του προβλήματος είναι λανθασμένη.
13. Η τελειότητα επιτυγχάνεται όχι όταν δεν υπάρχει κάτι άλλο να προσθέσεις, αλλά όταν δεν υπάρχει κάτι ακόμη να αφαιρέσεις.
14. Κάθε εργαλείο έχει την αναμενόμενη χρήση του. Αλλά το πραγματικά μεγαλοφυές εργαλείο θα χρησιμοποιηθεί και εκεί που δεν το περίμενες.
15. Όταν γράφεις λογισμικό, μην ταράξεις τη ροή δεδομένων παρά μόνον όταν ο παραλήπτης σε αναγκάσει.
16. Όταν η γλώσσα σου δεν πλησιάζει την πληρότητα Turing, λίγη συντακτική ζάχαρη θα βοηθήσει.
17. Ένα σύστημα ασφαλείας είναι τόσο ασφαλές όσο το μυστικό του. Προφυλάξου λοιπόν από τα ψευδο-μυστικά.
18. Για να λύσεις ένα ενδιαφέρον πρόβλημα, ξεκίνα βρίσκοντας ένα πρόβλημα που να ενδιαφέρει εσένα προσωπικά.
19. Όταν ο συντονιστής του έργου διαθέτει την επικοινωνιακή ευκολία που παρέχει το διαδίκτυο, και ξέρει πώς να καθοδηγεί χωρίς καταναγκασμό, τα περισσότερα μυαλά είναι αναπόφευκτα καλύτερα από το ένα.

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

Το δοκίμιο μπορείτε να το διαβάσετε φυσικά δωρεάν.
Eric Steven Raymond (2000) The Cathedral and the Bazaar.
Verion 3
στον ιστότοπο του συγγραφέα
http://catb.org/~esr/writings/homesteading/cathedral-bazaar/
ή
σε μορφή pdf
http://www.si.umich.edu/~rfrost/courses/SI110/readings/IntellecProp/Cathedral-Bazaar.pdf

Δεν υπάρχουν σχόλια: