Τί έμαθα σε έναν χρόνο στην Code.Hub;

Μία συγκινητική ιστορία του Δημήτρη Μουλάκη

Έχοντας κάνει τον προηγούμενο χρόνο μαθήματα java και τον παραπροηγούμενο python στην codehub ήμουν ίδη σίγουρος πως ήθελα εδώ να συνεχίσω να μαθαίνω προγραμματισμό. Το επόμενο βήμα για μένα σε αυτό το ταξίδι ήταν η C++. Έκανα μαθήματα μονάχα 2 ώρες την εβδομάδα αλλά σε μόλις 8 μήνες μπόρεσα να εξοικειωθώ σε αυτήν την σχετικά δύσκολη γλώσσα σε σημείο που μπορώ πια να καταλαβαίνω και να αξιοποιώ βιβλιοθήκες και να κάνω, ουσιαστικά, ό,τι επιθυμώ με αυτό το πολύτιμο εργαλείο.

Τί έμαθα;

Και πώς τα έμαθα;

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

Συγκεκριμένα, έμαθα:

  • Τύπους μεταβλητών
  • Πίνακες μιας και περισσότερων διαστάσεων
  • Δυναμικές λίστες (vectors)
  • Λειτουργίες (Functions)
  • Αντικειμενοστραφή προγραμματισμό (Object Oriented Programming)
  • Επεξεργασία κειμένου
  • Επεξεργασία αρχείων
  • Χρήση διάσημων βιβλιοθηκών (π.χ. wxWidgets)
  • Δημιουργία παιχνιδιών με Unreal Engine

Project 1::Bidding with arrays

Ένα από τα πρώτα projects που κάναμε αφότου αποκτήσαμε μερικές γενικές γνώσεις προγραμματισμού (μεταβλητές, loops και γράψιμο στην γραμμή εντολών) ήταν ένα πρόγραμμα όπου του δίναμε 5 προσφορές σε μια δημοπρασία και ο νικητής είναι, προφανώς, αυτός που δίνει το μεγαλύτερο ποσό. Για να επεξεργαστούμε τις τιμές μάθαμε να χρησιμοποιούμε μονοδιάστατους πίνακες για να σώζουμε μεγάλο αριθμό δεδομένων και να χρησιμοποιούμε λούπες για να διαβάζουμε τα δεδομένα μέσα τους.

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

Bidding With Arrays project code

Project 2::Vector Battleship

Ένα από τα αγαπημένα μου project στα οποία δούλεψα είναι η αναδημιουργία του επιτραπέζιου παιχνιδιού “Ναυμαχία” . Σε αυτό το παιχνίδι ο χειριστής παίζει εναντίον του υπολογιστή. Σε ένα πεδίο 5 * 5 μπαίνουν για τον χειριστή και για τον υπολογιστή, τυχαία, 4 πλοία. Ένα με μέγεθος 4, δύο με μέγεθος 3 και ένα με μέγεθος 2. Στην συνέχεια ρίχνουν ο ένας στο πεδίο του άλλου βόμβες και προσπαθούν να βυθίσουν τα πλοία του. Όποιος τα βυθίσει πρώτος νικάει.

Vector Battleship project code

Αυτό το project ήταν όσο περίπλοκο όσο φαίνεται. Μάθαμε να χρησιμοποιούμε πολυδιάστατους πίνακες και δυναμικές λίστες για αποθηκεύουμε δεδομένα. Εκείνο το project ήταν επίσεις από τα πρώτα στο οποία χρησιμοποίησαμε αντικειμενοστραφή προγραμματισμό και είδαμε πόσο χρήσιμα μπορεί να είναι τα αντικείμενα σε πολύπλοκα προγράμματα. Θυμάμαι πως ο τρόπος που παράγαμε τυχαίους αριθμούς δεν λειτουργούσε στον υπολογιστή μου και ψάξαμε όλοι μαζί μια λύση στο διαδίκτυο, ως οι πραγματικοί προγραμματιστές που ήμασταν! Μου άρεσε πολύ το κομμάτι που τοποθετούμε τα πλοία στο πλαίσιο γιατί έπρεπε να λύσουμε πολλά προβλήματα με λύσεις που θα ήταν και αποδοτικές. Αυτό το project ήταν το κομμάτι που αρχίσαμε να λέμε: “Ναι, ξέρω C++”.

Project 3::Nightmarish Pointers

Το παρακάτω project φαίνεται σαν να είναι το πιο εύκολο και είναι σίγουρα το πιο δύσκολο που έχουμε κάνει. Όποιον προγραμματιστή C++ έχετε βρεί, σίγουρα θα σας έχει πει για τα pointers και το πόσο πιο ανώτερός σου που είναι για να τα ξέρει. Δεν αστειεύεται. Το memory management είναι ένα από τα πιο δύσκολα κομμάτια της C++ και μάλιστα η δυσκολία αυτή ενέπνευσε την δημιουργία μιας ολόκληρης άλλης γλώσσας . Σε αυτό το project καταφέραμε όμως να καταλάβουμε αυτόν τον εφιάλτη και τον τρόπο που λειτουργεί η μνήμη γενικά.

Αυτό το project τονίζει και κάτι άλλο που κάνει η CodeHub που λατρεύω. Σου τα εξηγεί όλα με πολύ βάθος. Δεν μάθαμε απλά να χρησιμοποιούμε pointers επειδή αυτό δεν έχει ουσία, μάθαμε πώς λειτουργούν μέσα στην μνήμη και πώς λειτουργεί η ίδια η μνήμη το οποίο βοήθησε και στην κατανόηση τους. Στο τέλος του μαθήματος πήρα αμέσως όσους φίλους μου που κάνανε python και τους κορόιδευα που δεν μπορούν να κάνουν memory management.

Nightmarish Pointers project code

Project 4::Spoon

Η C++ είναι πραγματικά παντοδύναμη. Δεν μπορώ να σκεφτώ πρόγραμμα που να μην μπορείς να το κάνεις με C++ (Μπορείς ακόμα και websites πια!). Αποφασίσαμε, λοιπόν, πως ήμασταν αρκετά εξοικειωμένοι για να γράψουμε την δική μας γλώσσα προγραμματισμού, την Spoon. Έπρεπε να χρησιμοποιήσουμε όλα σχεδόν όσα είχαμε μάθει για να την φτιάξουμε. Χρειαζόμασταν δυναμικές λίστες, αντικείμενα, επεξεργασία αρχείων και κειμένου. Ήταν μια πραγματική δοκιμασία και πήρε περίπου 3 μαθήματα για να την ολοκληρώσουμε.

Αυτό είναι σίγουρα το αγαπημένο μου project. Αν και έχει μερικά bugs, λειτουργεί και είναι turing complete. Μαζί με αυτό ήταν και το πιο δημιουργικό μας project επειδή έπρεπε να σκεφτούμε την σύνταξη και τον τρόπο που θα φτιάχναμε την κάθε λειτουργία που χρειάζεται μια γλώσσα. Μπορείτε να κατεβάσετε την spoon και να γράψετε κι εσείς ή να δείτε πώς δουλεύει.

Spoon project code

Τα projects

Ο ευχάριστος και αποτελεσματικός τρόπος που μαθαίνεις στην Code.Hub

Αυτό που μου αρέσει στην Code.Hub είναι πως μαθαίνουμε φτιάχνωντας πραγματικές εφαρμογές και συμμετείχαμε οι ίδιοι στην εκπαίδευσή μας. Δουλεύαμε όλοι μαζί στον κώδικα, μας δίνονταν προβλήματα για να λύσουμε μόνοι μας και όταν το project τελείωνε, επιλέγαμε εμείς τί θα δουλέψουμε την επόμενη φορά. Παρακάτω θα δείξω μερικά από τα projects τα οποία κάναμε μέσα στον χρόνο και αυτά που μάθαμε δουλεύοντας το. Για να καταλάβετε καλύτερα πώς λειτουργεί κάθε πρόγραμμα, προτείνω να τα κατεβάσετε πατώντας τις εικόνες και να τα τρέξετε.

Η αλήθεια είναι ό,τι και να σας πω, δεν μπορώ να διατυπώσω πόσο ευχαριστήθηκα τα μαθήματα της Code.Hub. Από την πρώτη μέρα που έκανα python εως σήμερα που κάθομαι σε γραφείο τους φτιάχνωντας αυτήν την σελίδα, ο ενθουσιασμός μου να μαθαίνω κώδικα δεν μειώθηκε ούτε λίγο. Οφείλεται αυτό στην προσωπική μου αγάπη για τον προγραμματισμό ή στον τρόπο που μου τα μαθαίνουν; Πιστεύω πως είναι και τα δύο, αλλά ξέρω πως στην CodeHub αυτός ο ενθουσιασμός μου αναγνωρίζεται και μου έχουν προσφέρει κάτι που κανένας άλλος δεν μπορεί. Και τώρα θα σταματήσω τα μαθήματά τους; Όχι βέβαια, ακόμα περιμένω να προσφέρουν μαθήματα rust, αν το κάνουν ποτέ, αλλά μέχρι τότε θα συνεχίσω είτε με C++ είτε με κάτι καινούριο.

Δημήτρης Μουλάκης, Summer 2022