Ένα άρθρο από τους φοιτητές του Τμήματος Διοικητικής Επιστήμης και Τεχνολογίας (ΔΕΤ) του Οικονομικού Πανεπιστημίου Αθηνών για την ομότιτλη εργασία που υλοποίησαν στα πλαίσια του μαθήματος “Τεχνολογία Λογισμικού στην Πράξη” υπό την επίβλεψη του καθηγητή κυρίου Διομήδη Σπινέλλη.
Γνωριμία με το Τμήμα, το Μάθημα και την Εργασία
Το Τμήμα ΔΕΤ του Οικονομικού Πανεπιστημίου Αθηνών επιχειρεί να γεφυρώσει το χάσμα ανάμεσα στη Διοίκηση Επιχειρήσεων και την Πληροφορική. Το μάθημα “Τεχνολογία Λογισμικού στην Πράξη” ανήκει στην κατεύθυνση “Τεχνολογίες Λογισμικού και Ανάλυσης Δεδομένων” και διδάσκεται στο έκτο εξάμηνο σπουδών του Τμήματος. Στα πλαίσια αυτού κληθήκαμε να υλοποιήσουμε την εργασία στην οποία αναφέρεται το παρόν άρθρο.
Η εργασία αυτή αφορούσε την επιλογή ενός έργου ανοιχτού λογισμικού από το GitHub και τη συνεισφορά σε αυτό. Απώτερος σκοπός της συνεισφοράς αυτής ήταν η εξοικείωση με τις πραγματικές συνθήκες ανάπτυξης λογισμικού ανοιχτού κώδικα, καθώς και η εντρύφηση στις τεχνολογίες που θα χρησιμοποιούσαμε. Παράλληλα, μας δόθηκε η ευκαιρία να συνεργαστούμε και να αποτελέσουμε μέρος ομάδων ανάπτυξης πέρα των ελληνικών συνόρων, στα πλαίσια αυστηρά καθορισμένων κανόνων και αρχών.
Η Επιλογή του Έργου
Όσον αφορά την επιλογή του αποθετηρίου για τη συνεισφορά μας, διαθέταμε ελευθερία επιλογής, χωρίς περιορισμούς γλώσσας προγραμματισμού και εύρους τεχνολογιών. Μάλιστα, παρακινηθήκαμε να πειραματιστούμε με νέες γλώσσες και εργαλεία που δε γνωρίζαμε μέχρι στιγμής.
Καθ’ όλη τη διαδικασία της επιλογής έργου, τόσο ο καθηγητής όσο και οι βοηθοί μάς καθοδηγούσαν με παρουσιάσεις και συμβουλές, προκειμένου να αποφύγουμε έργα υπερβολικά περίπλοκα ή απλά, έργα πλέον ανενεργά ή που δε λειτουργούσαν με σωστές διεργασίες.
Παρά τη βοήθεια, η πλειοψηφία των φοιτητών ήμασταν άπειροι σε πραγματικές συνθήκες ανάπτυξης λογισμικού. Ως εκ τούτου, δε γνωρίζαμε τι να περιμένουμε και φοβόμασταν το ενδεχόμενο να μην καταφέρουμε τελικά να ανταπεξέλθουμε των προσδοκιών των υπευθύνων.
Η Διαδικασία της Συνεισφοράς
Η προετοιμασία της συνεισφοράς περιλάμβανε αρχικά την εκτέλεση του επιλεγμένου λογισμικού, κάτι που αποδείχθηκε αρκετά δυσκολότερο από ό,τι αναμέναμε. Πολλά λογισμικά αξιοποιούσαν τεχνολογίες με τις οποίες πολλοί δεν ήμασταν εξοικειωμένοι. Για την κατανόηση αυτών, καταφύγαμε στο διαδίκτυο και τους βοηθούς του μαθήματος, κυρίους Αντώνιο Γκορτζή και Tushar Sharma, των οποίων η βοήθεια υπήρξε πολύτιμη.
Έπειτα από την επιτυχή εκτέλεση του λογισμικού, έπρεπε να σχεδιάσουμε τη συνεισφορά μας. Μπορούσαμε είτε να εργαστούμε πάνω σε ένα πρόβλημα του λογισμικού, είτε να δημιουργήσουμε κάποια καινούρια λειτουργία που θεωρούσαμε ότι θα μπορούσε να του προσθέσει αξία.
Περνώντας στην “πράξη”, απαιτούνταν φυσικά η κατανόηση της γλώσσας, του περιβάλλοντος και της δομής του προγράμματος, καθώς και των καθιερωμένων συμβάσεων μεταξύ των μελών της ομάδας ανάπτυξης.
Ολοκληρώνοντας τη συγγραφή του κώδικά μας, ακολουθεί το πρώτο μας Pull Request. Επικρατεί ενθουσιασμός, καθώς καταφέραμε να φτάσουμε στο επιθυμητό αποτέλεσμα, αλλά παράλληλα και άγχος, αφού ο κώδικάς μας θα αξιολογηθεί από την υπεύθυνη ομάδα ανάπτυξης, ευελπιστώντας να δούμε το μήνυμα “Merged”, δηλαδή την αποδοχή και την ενσωμάτωση της συνεισφοράς μας στο λογισμικό.
Παράλληλα με τη διαδικασία της συνεισφοράς, πραγματοποιήθηκαν δύο ενδιάμεσες παρουσιάσεις στα πλαίσια του μαθήματος, με σκοπό την καθοδήγηση και τη σωστή οργάνωση της διαδικασίας και του χρόνου μας, καθώς και την πληροφόρηση του καθηγητή αναφορικά με την πρόοδό μας.
Η Τελική Παρουσίαση
Το τελικό αποτέλεσμα κάθε συνεισφοράς αποτυπώθηκε στην τελική παρουσίαση. Αυτή περιλάμβανε το Σχεδιασμό, την Εφαρμογή, τις Δοκιμές, αλλά και την Ενσωμάτωση του κάθε έργου. Με χρόνο λιγότερο των πέντε λεπτών παρουσιάσαμε τη συνεισφορά μας, τα προβλήματα που προέκυψαν, αλλά και τους τρόπους αντιμετώπισης αυτών.
Αξιοσημείωτα αποθετήρια στα οποία συνεισφέραμε αποτελούν τα Nodeschool, Coördinator, Exercism, Mozilla pdf.js, Teammates, Jarvis και πολλά άλλα.
Συνοπτικά, καταφέραμε να προγραμματίσουμε σε γλώσσες όπως Kotlin, C#, Java, JavaScript, PHP και Python. Αναπτύξαμε κώδικα σε πλατφόρμες και πλαίσια όπως Android, Qt, Linux και npm, πραγματοποιήσαμε τους κατάλληλους ελέγχους του κώδικά μας με βιβλιοθήκες όπως pytest, JUnit, Unit.js, PHPUnit και Scrutinizer, και χρησιμοποίησαμε τεχνολογίες, διεπαφές και εργαλεία όπως MongoDB, Travis CI, Gulp, Drag’n’Drop, JSON, SVG, CSS, VirtualEnv, Svelte, Google Docs API.
Τέλος, πολλών από εμάς ο κώδικας είτε ήδη υιοθετήθηκε από τα αποθετήρια, είτε ήδη τρέχει παραγωγικά, ενώ, ένας από εμάς προσκλήθηκε και έγινε επίσημα μέλος της ομάδας ανάπτυξης.
Η Επικοινωνία με την Ομάδα Ανάπτυξης του Λογισμικού
Η αποτελεσματική επικοινωνία με την ομάδα ανάπτυξης ήταν σημαντικός παράγοντας για την επιτυχία της συνεισφοράς μας στο έργο. Η επικοινωνία γινόταν κυρίως μέσω των Issues στο GitHub, του Gitter και του ηλεκτρονικού ταχυδρομείου. Επίσης, γινόταν μέσω των ίδιων των Pull Requests, στα οποία η ομάδα ανάπτυξης πρότεινε μέσω σχολίων βελτιώσεις στον κώδικα που είχαμε ήδη υποβάλει.
Στην πλειοψηφία των περιπτώσεων, η συνεργασία με τις ομάδες υλοποίησης ήταν αγαστή. Οι υπεύθυνοι ανταποκρίνονταν γρήγορα, με ευγένεια και προθυμία να μας εξυπηρετήσουν. Εντούτοις, υπήρξαν και συγχύσεις με τις προτεινόμενες αλλαγές ή ακόμα και έλλειψη ανταπόκρισης και ενδιαφέροντος από υπευθύνους έργων. Σε άλλες περιπτώσεις, οι συνεισφέροντες κλήθηκαν να προβούν σε έρευνα αγοράς, προκειμένου να γίνει αποδεκτή η πρότασή τους.
Η Σημασία της Συνεισφοράς
Η σημασία της συγκεκριμένης εργασίας διαφέρει σε ένα βαθμό από άτομο σε άτομο, ανάλογα με το ενδιαφέρον του για μελλοντική επαγγελματική απασχόληση στον τομέα αυτόν. Ωστόσο, αυτό για το οποίο είμαστε όλοι σίγουροι είναι ότι κερδίσαμε πολλά σημαντικά εφόδια για τη μετέπειτα πορεία μας.
Ενδεικτικά, αποκομίσαμε νέες γνώσεις στους τομείς της Ανάγνωσης του Κώδικα, της Κατανόησης της Γλώσσας και της Τεχνολογίας, της Συγγραφής, του Ελέγχου, της Δοκιμής και της Μορφοποίησης του Κώδικα, της Επικοινωνίας, αλλά και της Διαχείρισης του Περιορισμένου Χρόνου και της Πίεσης.
Ανακεφαλαιώνοντας, λοιπόν, η διαδικασία της συνεισφοράς σε έργα λογισμικού ανοιχτού κώδικα κάθε άλλο παρά απλή είναι. Ωστόσο, το αίσθημα της ικανοποίησης που κανείς αποκομίζει αντικρίζοντας την ιδέα του ενσωματωμένη σε ένα αποθετήριο αξίζει κάθε κόπο που κατέβαλε.
Πέραν όμως του προγραμματιστικού στοιχείου, αποτελεί σπουδαία ευκαιρία για συνεργασία και αλληλεπίδραση με ομάδες ανθρώπων από κάθε μέρος της γης. Οι γνώσεις, οι συμβουλές, οι κριτικές, οι επιβραβεύσεις που σου δίνουν άνθρωποι άγνωστοι μέχρι χτες μπορούν να έχουν σημαντική επίδραση στην εξέλιξή σου όχι μόνο ως προγραμματιστής, αλλά και ως συνεργάτης.