5 πράγματα που πρέπει να γνωρίζετε σε μια συνέντευξη προγραμματισμού

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

Αυτή η μη εξαντλητική λίστα ερωτήσεων κυλούσε συνεχώς στο μυαλό μου.

  • «Πρέπει να μιλήσω μέσω του κωδικού μου;»
  • «Πόσο συχνά πρέπει να επικοινωνώ με τον ερευνητή;»
  • «Θεέ μου, ξέχασα να δημιουργήσω τη μεταβλητή μου! Είμαι καταδικασμένος ;! "
  • «Τι πιστεύει ο ερευνητής για την απάντησή μου;»
  • "Είναι εντάξει αν το κάνω αυτό;"

… Και η λίστα συνεχίζεται…

Είναι μια πολύ τρομακτική εμπειρία. Είναι πολύ δύσκολο. Και είναι εξαιρετικά δύσκολο να λειτουργεί μέσα σε αυτό το κενό όταν εξετάζεστε για κάθε πράγμα που λέτε και για ό, τι γράφετε.

Κάνετε συνέντευξη για τη δουλειά των ονείρων σας, κάτι που ονειρευτήκατε από τα 12 σας. Και όλα καταλήγουν να εντυπωσιάσουν κάποιον που δεν έχετε γνωρίσει ποτέ μέσα σε 60 λεπτά.

Ο αγώναςείναι αληθινό.

1. Σκεφτείτε πάντα μπροστά

Συχνά, θα ακούσετε έναν ερευνητή να το ρωτάει: «Εντάξει, νομίζω ότι φαίνεται καλό. Τώρα, πώς θα βελτιώσετε αυτόν τον κώδικα; "

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

  • ποιότητα κώδικα
  • ορισμένες ανησυχίες / σημεία συμφόρησης που δεν αναφέρθηκαν στη συνεδρία προγραμματισμού αλγορίθμων
  • πώς θα κλιμακώσατε τη λύση στο χέρι.

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

Για παράδειγμα, όταν κοιτάξετε αυτό το κομμάτι κώδικα παρακάτω, τι κάνει; Πώς θα το βελτιώσετε; Τι θα μπορούσε να το κάνει να σπάσει;

Επιτρέψτε μου να ξέρω στα παρακάτω σχόλια. Θα ήθελα πολύ να ακούσω τις σκέψεις σας.

Έκπληξη;: Το να μπορέσεις να βρεις μια λύση εργασίας είναι το b που πρέπει να ληφθεί υπόψη για τη θέση. Τ ερωτήσεις hese είναι βασικές δοκιμές ικανότητας. Αυτό που διαχωρίζει τους καλούς υποψήφιους από τους σπουδαίους είναι η ικανότητα σκέψης πέρα ​​από αυτό που απαιτείται.

Τι σημαίνει αυτό σε μια συνεδρία κωδικοποίησης

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

2. Υπάρχουν περισσότερες από μία απαντήσεις

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

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

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

Μια άσκηση προγραμματισμού για να δείξει το σημείο μου:

Συγχώνευση δύο ταξινομημένων λιστών. (Συνδέεται με τον Leetcode εάν θέλετε να δοκιμάσετε την επίλυση). Βασικά μπορείτε να το αντιμετωπίσετε με διάφορους τρόπους:

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

Ποιοι άλλοι τρόποι μπορείτε να σκεφτείτε;

3. Το OOP δεν είναι νεκρό

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

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

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

Η σύνταξη κώδικα για κατανοητούς υπολογιστές είναι εύκολη. Η συγγραφή κώδικα για τον άνθρωπο είναι δύσκολη.

4. Δημιουργήστε το βιογραφικό σας

Φανταστείτε ότι πηγαίνετε στο χορό της νύχτας με το πρόσωπο των ονείρων σας, και εμφανίζεται στο κατώφλι του με σαγιονάρες και ένα αμάνικο μπλουζάκι.

Το βιογραφικό σας είναι η επαγγελματική σας κάρτα. Είναι η πρώτη εντύπωση της εταιρείας για εσάς.

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

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

5. Να επικοινωνείτε νωρίς και να επικοινωνείτε συχνά

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

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

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

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

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

Τι σημαίνει αυτό σε μια συνεδρία κωδικοποίησης

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

6. [Extra] Χρησιμοποιήστε αφαίρεση

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

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

Τι σημαίνει αυτό σε μια συνεδρία κωδικοποίησης

Ας συγκρίνουμε και αντιπαραθέτουμε αυτά τα δύο κομμάτια κώδικα:

Κατά τη γνώμη μου, νομίζω ότι η δεξιά πλευρά φαίνεται πολύ πιο καθαρή και πολύ πιο κατανοητή. Μπορώ έπειτα να αφιερώσω χρόνο για να εφαρμόσω getNeighborsή isEmpty, ανάλογα με το τι μου ζητείται.

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

Γιατί θέλω να μοιραστώ την εμπειρία μου;

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

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

Ας ελπίσουμε ότι αυτές οι συμβουλές μπορούν να βοηθήσουν έναν άλλο αναζητητή εργασίας εκεί έξω! Καλή τύχη! ;

Εάν σας άρεσε αυτό το άρθρο, εδώ είναι μερικά ακόμη προτεινόμενα άρθρα που έγραψα:

  • Πώς προσγειώθηκα προσφορές από Microsoft, Amazon και Twitter χωρίς πτυχίο Ivy-League
  • Πώς να γράψετε ένα εξαιρετικό βιογραφικό για μηχανικούς λογισμικού
  • Πώς αυτοματοποίησα την αναζήτηση εργασίας μου δημιουργώντας έναν ανιχνευτή ιστού
  • Τρόπος σχεδιασμού συστήματος

Προτείνω πόρους και εργαλεία

  • Στοιχεία συνεντεύξεων προγραμματισμού: Ιδανικό για πιο δύσκολα προβλήματα κωδικοποίησης
  • Συνέντευξη Cracking The Coding: Ιδανικό για την κάλυψη του θεμελιώδους CS
  • OneNote: Το χρησιμοποιώ για να αποθηκεύσω όλα τα αποσπάσματα κώδικα
  • Evernote: Για οτιδήποτε άλλο
  • CodeRunner: Μου αρέσει αυτή η εφαρμογή Mac! Το χρησιμοποίησα πολλές φορές για να τρέξω ad-hoc σενάρια / λειτουργίες Python και λειτουργεί απλώς εκπληκτικά καλά. ;
  • Jobscan: Ένας φίλος διευθύνει αυτήν την εταιρεία. Έχω ακούσει πολλά ωραία πράγματα για αυτό και θα πρέπει να τα δοκιμάσετε για το βιογραφικό τους εργαλείο ελέγχου.
  • Refdash: Εκτελείται από μια ομάδα πρώην Googlers. Η ποιότητα των πλαστών συνεντεύξεων εδώ είναι; Οι ερευνητές είναι πρώην Googlers. Συνιστώ ανεπιφύλακτα να τα δοκιμάσετε.
  • CodePath: Ένας μη κερδοσκοπικός οργανισμός που βοηθά τους ανθρώπους να προετοιμαστούν για μια καριέρα στην τεχνολογία. Ο Nathan και ο Tim είναι υπέροχοι άνθρωποι και έχω μάθει πολλά από αυτούς. Η κοινότητα είναι πολύ χρήσιμη και όλοι είναι πρόθυμοι να δώσουν ένα χέρι.
  • Δείκτες λεπτών σημείων: Φέρτε τους στη συνέντευξή σας. Συνιστώ ανεπιφύλακτα!

Η Zhia Chong είναι μηχανικός λογισμικού στο Twitter. Εργάζεται στην ομάδα μέτρησης διαφημίσεων στο Σιάτλ, μετρώντας τον αντίκτυπο των διαφημίσεων και την απόδοση επένδυσης (ROI) για διαφημιζόμενους.

Μπορείτε να τον βρείτε στο Twitter και στο LinkedIn.