Τρία (3) πράγματα που πρέπει να αποφεύγει ο προγραμματιστής

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

1. Πρέπει να μάθω τα πάντα για να είμαι καλός προγραμματιστής

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

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

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

Και όντως, όταν το 2016 ξεκίνησα να δουλεύω ως προγραμματιστής και για 2 χρόνια θεωρούσα πως ήμουν απλά τυχερός και σύντομα θα ανακαλύψουν πόσο άσχετος είμαι και θα με διώξουν. Αυτό το άγχος με έκανε να προσπαθώ να μάθω όσο μπορούσα περισσότερα. Να μάθω wordpress, να μάθω javascript, να μάθω laravel, να μάθω C και C++ (λες και μου χρειαζόταν ως web developer), να μάθω τη σημασία όποιας νέας buzzword έβλεπα στο κόσμο του προγραμματισμού. 

Ευτυχώς, σύντομα κατάλαβα πως το μόνο που χρειαζόμουν ήταν να εστιάσω την προσοχή μου σε μια γλώσσα, σε ένα framework και να μάθω βασικές έννοιες και πως μπορώ να τις αξιοποιήσω στην καθημερινότητα μου ως προγραμματιστής. 

Θα πρέπει ως προγραμματιστές να καταλάβουμε πως δεν μπορούμε να μάθουμε τα πάντα. Οι γλώσσες προγραμματισμού, τα frameworks, οι τεχνολογίες είναι τόσες πολλές εκεί έξω που και 2 ζωές δε θα μας έφταναν για να τα μάθουμε όλα. Αρκεί μόνο να κατανοήσουμε πως το μόνο που πρέπει να μάθουμε είναι τα βασικά, τα fundamentals. Το μοντέλο server-client, recursion,  solid, design patterns. Αυτά έχουν κάποια σύνδεση με μια μόνο τεχνολογία ή γλώσσα αλλά μπορούν να αξιοποιηθούν από τις περισσότερες τεχνολογίες και γλώσσες.

2. Ξέρω τα πάντα είμαι ο καλύτερος προγραμματιστής

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

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

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

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

3. Το πρόβλημα αυτό είναι αδύνατον να λυθεί, δεν το έχει λύσει κανένας ποτέ

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

Καταλαβαίνω τον φόβο που μπορεί να έχει κάποιος για το άγνωστο όμως ο προγραμματιστής δεν υπάρχει για να φτιάχνει απλές CRUD εφαρμογές. Άλλωστε αυτό θα μπορούσε να το κάνει ακόμα και σήμερα μια AI. Ο προγραμματιστής είναι για τα δύσκολα προβλήματα. Και αυτά είναι που τον βελτιώνουν και τον κάνουν καλύτερο.

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

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