Πόσο καιρό χρειάζεται ένας έμπειρος προγραμματιστής για να μάθει μια νέα γλώσσα προγραμματισμού;


Απάντηση 1:

Εξαρτάται από το τι εννοείτε με το "μάθετε" και τι εννοείτε με το "νέο".

Κατά την τελευταία μέτρηση, μπορώ να μιλήσω για 60 γλώσσες προγραμματισμού, σε διαφορετικά επίπεδα ευχέρειας. Υπάρχει ένα σημείο όπου, εκτός αν η γλώσσα προγραμματισμού είναι πολύ διαφορετική από ό, τι γνωρίζετε ήδη (και αν επιλέξατε με σύνεση, αρχίζουν να τρέχουν μαζί γύρω από την δεκαετία του '30), μπορείτε να πάρετε μια γλώσσα το απόγευμα.

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

Πάρτε Java ως παράδειγμα. Η ίδια η γλώσσα είναι αρκετά απλή: η διαδικαστική γλώσσα, το μοντέλο αντικειμένων τύπου Simula, η σύντομη σύνταξη του τύπου C, μερικά σύγχρονα χαρακτηριστικά γνωρίσματα όπως τα γενικά και το lambdas, τα οποία προσκολλούνται ως μια δεύτερη σκέψη. Ωστόσο, για να αποκαλείτε τον "προγραμματιστή Java", πρέπει να ξέρετε για όλα αυτά τα κοινά εργαλεία και πλαίσια (π.χ. Swing, Spring, Eclipse, Maven). Αυτό απαιτεί πραγματικά το χρόνο. Θα μπορούσε να διαρκέσει χρόνια και είναι ένας συνεχώς κινούμενος στόχος.

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

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


Απάντηση 2:

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

ξέρω

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

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

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

Το Smalltalk, μάλιστα, είναι μία από τις μικρότερες και απλούστερες γλώσσες στον κόσμο.


Απάντηση 3:

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

Για παράδειγμα, υπάρχει ένας μεγάλος αριθμός γλωσσών με παρόμοια σύνταξη. Οι γλώσσες Java, C ++ και C # βασίζονται στη σύνταξη τους στη γλώσσα C. Ειδικά η Java και η C # έχουν πολύ παρόμοια σημασιολογία - έχουν το ίδιο μοντέλο αντικειμένων (μεμονωμένη κληρονομιά υλοποιήσεων, πολλαπλή κληρονομιά διεπαφών) και μια παρόμοια διάκριση μεταξύ τύπων τιμής και αναφοράς. Το C # έχει μάλλον καλύτερα σχεδιασμένο σύστημα τύπου - μπορείτε να δημιουργήσετε τους δικούς σας τύπους αξίας. Στην Java, οι μόνοι τύποι τιμών είναι τα αρχέτυπα γλώσσας (αριθμητικά, boolean και χαρακτήρες), οπότε ο μεταγλωττιστής τα αντιμετωπίζει ως μια "ειδική περίπτωση".

Δεν εκπλήσσει λοιπόν, δεν είναι δύσκολο να μάθουμε C # από ​​την Java ή αντίστροφα. Θα σας πάρει περισσότερο χρόνο για να ασχοληθείτε με τα πλαίσια και τις βιβλιοθήκες που θα χρησιμοποιήσετε, με το καθένα να είναι διαφορετικό, αλλά δεν χρειάζεται να κατανοήσετε νέες ιδέες.

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

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

Και έπειτα έχουμε το περίεργο outlier, JavaScript. Η JavaScript υπονομεύει τους προγραμματιστές που έχουν μάθει γλώσσες στην οικογένεια "C" σε μια ψεύτικη αίσθηση ασφάλειας. Η σύνταξη φαίνεται τόσο παρόμοια! Αλλά κάτω από αυτό, οι σημασιολογίες είναι άγρια ​​διαφορετικές. Υπάρχει ένα τελείως διαφορετικό μοντέλο αντικειμένων (πρωτότυπα παρά κατηγορίες και κληρονομιά). Αυτό είναι δροσερό, γιατί σας επιτρέπει να κάνετε όλα τα πράγματα που δεν θα μπορούσατε ποτέ να κάνετε στις έντονα δακτυλογραφημένες γλώσσες. Αλλά το JavaScript είναι επίσης η μόνη γλώσσα που γνωρίζω ότι απομακρύνει την απλή κατανόηση της αριθμητικής boolean (True and False), προσθέτοντας δύο νέες έννοιες (Truthy και Falsey!).