Μια συνέντευξη με τον Erik Schierboom, στην οποία αυτός και ο Jeremy Walker συζητούν τον συναρτησιακό προγραμματισμό, τη συντήρηση των tracks του Exercism και την επερχόμενη στατική ανάλυση των λύσεων του Exercism.
Γεια σου Erik. Ευχαριστούμε που συμμετείχες στο πρώτο Αφιέρωμα Συντελεστών του Exercism! Θέλαμε να αναδείξουμε τη δουλειά σου, γιατί νιώθουμε ότι συνεισφέρεις σε κάθε κομμάτι του Exercism και έχεις πολύτιμες γνώσεις από τη δουλειά σου σε όλο το έργο!
Λοιπόν, για λίγο ιστορικό, πώς ασχολήθηκες για πρώτη φορά με το Exercism;
Το 2014 έκανα ένα μάθημα συναρτησιακού προγραμματισμού που χρησιμοποιούσε τη Scala ως γλώσσα του. Αφού τελείωσα εκείνο το μάθημα, έψαξα για πόρους ώστε να βελτιώσω περαιτέρω τις δεξιότητές μου στη Scala και βρήκα το Exercism. Δεν άργησα να κολλήσω και άρχισα να κάνω και άλλα tracks γλωσσών στο Exercism. Επειδή είχα ωφεληθεί πολύ από τα σχόλια που άφηνε ο κόσμος στις λύσεις μου, άρχισα κι εγώ να σχολιάζω λύσεις στο track της C#. Κάποια στιγμή μου ζητήθηκε να γίνω συντηρητής του track της C#, κάτι που δέχτηκα με χαρά. Πέντε χρόνια αργότερα, είμαι μέντορας στα tracks της C# και της F#, συντηρητής στα tracks της C#, της F# και της Scala, και βοηθώ στη δουλειά πάνω στις προδιαγραφές προβλημάτων που μοιράζονται όλα τα tracks.
Ωραία. Μπήκες στο Exercism πολύ νωρίς στην πορεία του. Για όσους δεν το ξέρουν, θα μπορούσες να εξηγήσεις τι σημαίνει να είσαι συντηρητής στο Exercism;
Βεβαίως. Σε αφηρημένο επίπεδο, ένας συντηρητής στο Exercism είναι υπεύθυνος για την "υγεία" ενός track. Στην πράξη, αυτό μπορεί να σημαίνει πάρα πολλά πράγματα, όπως να υλοποιείς νέες ασκήσεις, να ενημερώνεις υπάρχουσες ασκήσεις ή να ελέγχεις pull requests από άλλους συντηρητές. Μια άλλη σημαντική πτυχή είναι η σωστή σειρά των ασκήσεων ενός track, ώστε οι μαθητές να έχουν την καλύτερη δυνατή μαθησιακή εμπειρία. Σημείωσε ότι το να είσαι συντηρητής δεν σημαίνει ότι πρέπει να ασχολείσαι με όλες τις παραπάνω δραστηριότητες. Είναι απολύτως θεμιτό για έναν συντηρητή να επικεντρώνεται μόνο σε μία ή δύο δραστηριότητες.
Ευχαριστώ! Πέρα από την ενασχόλησή σου με τη C#, τη F# και τη Scala, έχεις δουλέψει λίγο πολύ με κάθε track γλώσσας στο Exercism. Έχεις κάποια ιδιαίτερη αδυναμία από τη σκοπιά του μαθητή;
Αν και έμαθα πάρα πολλά από κάθε track με το οποίο ασχολήθηκα, το αγαπημένο μου track πρέπει να είναι αυτό της Haskell. Όχι μόνο είναι μια εξαιρετική γλώσσα με πολλές ενδιαφέρουσες έννοιες, αλλά η ποιότητα των μεντόρων της ήταν απολύτως καταπληκτική. Άλλα αγαπημένα μου είναι τα tracks της Kotlin και της F#, με την Kotlin και την F# να είναι εξαιρετικά καλοσχεδιασμένες και πραγματιστικές γλώσσες στις οποίες λατρεύω να προγραμματίζω.
Ναι, ακούω πολλά καλά λόγια για τους μέντορες της Haskell! Φαντάζομαι ότι δουλεύοντας τόσα πολλά tracks απέκτησες ένα σωρό ενδιαφέρουσες γνώσεις για τον προγραμματισμό. Υπήρχαν κάποια πράγματα ειδικά που έμαθες από αυτή την εμπειρία;
Ω, ναι, ένα σωρό πράγματα! Το να δουλεύεις με μια μεγάλη ποικιλία γλωσσών σε φέρνει σε επαφή με πολλούς διαφορετικούς τρόπους προσέγγισης προβλημάτων. Αυτές οι διαφορετικές προσεγγίσεις έχουν επηρεάσει όλες με κάποιον τρόπο το στυλ προγραμματισμού μου, αν και οι συναρτησιακές γλώσσες είναι πιθανώς αυτές που με επηρέασαν περισσότερο. Τώρα διαπιστώνω ότι χρησιμοποιώ συναρτησιακές έννοιες όποτε μπορώ, ακόμα και σε μη συναρτησιακές γλώσσες (οι οποίες ενσωματώνουν σιγά σιγά συναρτησιακά χαρακτηριστικά).
Έμαθα επίσης ότι, ενώ κάθε γλώσσα είναι διαφορετική, πολλές είναι στην πραγματικότητα αρκετά παρόμοιες. Κατά συνέπεια, το να μάθεις μια νέα γλώσσα γίνεται πολύ πιο εύκολο μόλις ξέρεις μερικές. Για παράδειγμα, το να ξέρεις Haskell σημαίνει ότι θα μπορούσε κανείς να μάθει σχετικά γρήγορα τη F# ή τη Scala. Το να μάθεις λοιπόν νέες γλώσσες θα μπορούσε να είναι και μια καλή κίνηση για την καριέρα σου, αφού θα μπορείς να εναλλάσσεσαι πιο εύκολα μεταξύ γλωσσών.
Τέλος, έμαθα ότι το να σε καθοδηγούν μέντορες όσο μαθαίνεις μια γλώσσα κάνει τη διαδικασία πολύ πιο ευχάριστη και αποτελεσματική.
Το ίδιο έχω διαπιστώσει κι εγώ. Το να μαθαίνεις από τους άλλους λειτουργεί πολλαπλασιαστικά! Από πρακτική σκοπιά, πώς τα κατάφερνες με όλες τις ρυθμίσεις για τις διάφορες γλώσσες; Συχνά βρίσκω την ιδέα του να μάθεις ένα νέο IDE λίγο τρομακτική. Παρέμεινες σε έναν επεξεργαστή που ήξερες όσο δούλευες με τις γλώσσες, ή τον άλλαζες προσπαθώντας να αποκτήσεις μια πιο ιδιωματική εμπειρία;
Για κάποιες γλώσσες, το να στήσεις ένα νέο περιβάλλον ανάπτυξης ήταν παλιά λίγο μπελάς, αλλά σήμερα οι περισσότερες γλώσσες είναι αρκετά εύκολο να στηθούν. Έπειτα προσπαθώ να βρω ένα IDE που μου δίνει την καλύτερη εμπειρία για τη συγκεκριμένη γλώσσα. Επειδή δουλεύω εναλλάξ σε Windows και Mac OS, το IDE πρέπει επίσης να είναι πολλαπλών πλατφορμών. Ένα παράδειγμα εξαιρετικού IDE πολλαπλών πλατφορμών είναι το Visual Studio Code, το οποίο χρησιμοποιώ για τα tracks των Haskell, JavaScript, TypeScript, Elm και Elixir. Για τα άλλα tracks χρησιμοποιώ ένα IDE της JetBrains: το Rider για τη C# και τη F#, το IntelliJ IDEA για τη Java, τη Scala και την Kotlin, και τέλος το RubyMine για τη Ruby (σημείωση: αυτά είναι επίσης IDE πολλαπλών πλατφορμών). Όπως βλέπεις, χρησιμοποιώ πολλούς επεξεργαστές για να έχω την καλύτερη εμπειρία σε κάθε γλώσσα (αν και τα IDE της JetBrains είναι προφανώς αρκετά παρόμοια).
Συμβουλή: αν είσαι βασικός συντελεστής σε ένα έργο ανοιχτού κώδικα, η JetBrains σου επιτρέπει να κάνεις αίτηση για δωρεάν άδεια ανοιχτού κώδικα!
Αυτό είναι εξαιρετικά χρήσιμο. Ευχαριστώ! Λοιπόν, είσαι συντηρητής για τη C#, τη F# και τη Scala. Τι σε τραβάει ιδιαίτερα σε αυτές τις γλώσσες;
Η C# έγινε αμέσως η αγαπημένη μου γλώσσα όταν κυκλοφόρησε το 2002. Είναι μια καλοσχεδιασμένη, κομψή γλώσσα με εξαιρετικά εργαλεία και τεκμηρίωση. Η γλώσσα επίσης εξελίσσεται αρκετά γρήγορα, που σημαίνει ότι πάντα υπάρχουν καινούργια πράγματα να μάθεις! Ένα τελευταίο πλεονέκτημα είναι ότι τρέχει στο εξαιρετικό framework .NET (Core).
Η F# ήταν επίσης έρωτας με την πρώτη ματιά. Με κομψή σύνταξη και ένα πλούσιο σύνολο (συναρτησιακών) χαρακτηριστικών γλώσσας, ανακάλυψα ότι μπορούσα να κάνω περισσότερα με λιγότερο κώδικα, ειδικά όταν έκανα μοντελοποίηση πεδίου. Είναι επίσης μια πολύ πραγματιστική γλώσσα, με αντικειμενοστρεφή χαρακτηριστικά και εξαιρετική διαλειτουργικότητα με υπάρχοντα κώδικα .NET (τρέχει στο ίδιο framework .NET (Core) με τη C#). Μια επιπλέον δύναμη είναι τα εργαλεία της, που είναι από τα καλύτερα διαθέσιμα για συναρτησιακές γλώσσες. Ως μπόνους, έχει επίσης μία από τις αγαπημένες μου εισαγωγές σε γλώσσα, στον ιστότοπο fsharpforfunandprofit.
Η Scala ήταν η γλώσσα που με μύησε στον συναρτησιακό προγραμματισμό, οπότε για αυτόν τον λόγο έχει ξεχωριστή θέση στην καρδιά μου. Όπως η F#, είναι μια πραγματιστική γλώσσα, για πολλούς από τους ίδιους λόγους. Με την ενσωμάτωσή της στο οικοσύστημα της Java, βοήθησε πραγματικά στη διάδοση του συναρτησιακού προγραμματισμού.
Είναι ενδιαφέρον ότι ξεκίνησες τον συναρτησιακό προγραμματισμό μέσω της Scala, είσαι μέντορας στη F#, αλλά θεωρείς τη Haskell το καλύτερο track. Για κάποιον που θέλει να βουτήξει στον συναρτησιακό προγραμματισμό στο Exercism, ποια από αυτές θα του πρότεινες να δοκιμάσει πρώτα;
Καλή ερώτηση! Η ψήφος μου πάει στη F#, καθώς νιώθω ότι είναι η πιο εύκολη γλώσσα για να ξεκινήσεις. Αυτό οφείλεται κυρίως στο ότι η F# είναι λιγότερο πολύπλοκη από τις άλλες δύο. Τα εξαιρετικά εργαλεία και η τεκμηρίωση της F# είναι επίσης μεγάλο πλεονέκτημα όταν ξεκινάς. Παρόλα αυτά, συνιστώ ανεπιφύλακτα να μπεις και στο track της Haskell μόλις τελειώσεις με το track της F#, καθώς η Haskell έχει κάποια φανταστικά, προηγμένα χαρακτηριστικά που δεν έχει η F#.
Έχεις γίνει κοινωνός αρκετών από τα σχέδιά μας για το μέλλον του Exercism. Υπάρχει κάτι που σε ενθουσιάζει ιδιαίτερα για το έργο;
Από όλες τις βελτιώσεις που σχεδιάζονται, αυτό που με ενθουσιάζει περισσότερο είναι η στατική ανάλυση των λύσεων. Η ιδέα είναι ότι θα στήσουμε ένα σύστημα που μπορεί να σχολιάζει αυτόματα τις υποβληθείσες λύσεις, αναλύοντάς τες προγραμματιστικά για κοινά προβλήματα ή προτάσεις. Αυτό θα βοηθήσει πολύ τους μέντορες, καθώς δεν θα χρειάζεται πλέον να σχολιάζουν αυτά τα κοινά προβλήματα ή τις προτάσεις και θα μπορούν να επικεντρώνονται σε πιο ενδιαφέροντα ζητήματα.
Αν ενδιαφέρεσαι, ρίξε μια ματιά στο (πρώιμο) πρωτότυπό μου ενός analyzer για το track της C#, που χρησιμοποιεί την .NET Compiler Platform για να αναλύει στατικά κώδικα C#.
Ναι, η στατική ανάλυση είναι λίγο πολύ το πιο συναρπαστικό πράγμα και για μένα. Είναι φοβερό που βλέπω ότι έχεις ήδη έτοιμο ένα πρωτότυπο. Πιστεύω ότι οι βελτιώσεις στην ταχύτητα που θα μας δώσει η στατική ανάλυση θα βελτιώσουν δραματικά το Exercism, και είμαι πραγματικά ενθουσιασμένος για το πώς μπορούμε να την επεκτείνουμε ώστε να μάθει προγραμματισμό σε εντελώς αρχάριους. Πιστεύω ότι αλλάζει πραγματικά τα δεδομένα.
Τελευταία ερώτηση: έχεις προσωπικά έργα ή σκοπούς που σου είναι πολύ αγαπητοί και θα ήθελες να τους αναφέρεις;
Για μένα, το να ασχοληθώ με το Exercism, να συνεισφέρω στη βάση κώδικα ανοιχτού κώδικα και να καθοδηγώ ανθρώπους ως μέντορας ήταν μια απίστευτα ανταποδοτική εμπειρία. Έμαθα πάρα πολλά πράγματα, γνώρισα κάποιους πολύ σπουδαίους ανθρώπους και νιώθω ότι κατάφερα να βοηθήσω πολλούς ανθρώπους.
Θα ήθελα να ενθαρρύνω τον κόσμο να δει αν μπορεί να ασχοληθεί κι εκείνος. Αν έχεις μια γλώσσα για την οποία είσαι παθιασμένος και θέλεις να βοηθήσεις άλλους να τη μάθουν, γράψου ως μέντορας στο Exercism. Αν προτιμάς να γράφεις κώδικα, διάλεξε ένα έργο ανοιχτού κώδικα και συνεισέφερε. Υπόσχομαι ότι είναι πολύ λιγότερο τρομακτικό από ό,τι ακούγεται και θα νιώσεις υπέροχα κάνοντάς το!
Υπέροχα! Ευχαριστώ που πήρες τον χρόνο να συζητήσουμε και για όλη τη δουλειά σου στο Exercism!