Ένα και μόνο γεγονός απαντάει από μόνο του στις περισσότερες από τις απορίες του τύπου "γιατί πλέον γίνεται αυτό έτσι".
Γιατί η Visual Basic μέχρι και την τελευταία έκδοση δεν ήταν γλώσσα πλήρως αντικειμενοστραφής (OO). Γι αυτόν τον λόγο υπήρχαν διάφορα κόλπα και τερτίπια, workarounds αν θέλετε, σε διάφορες πτυχές της γλώσσας με τα οποία ξεπερνιώντουσαν οι περιορισμοί που απορρέουν από το ότι η VB δεν ήταν πλήρως OO. Έτσι λοιπόν, υπήρχε η πολυτέλεια να μπορεί να χρησιμοποιηθεί από προγραμματιστές που δεν γνώριζαν τη θεωρία του ΟΟ προγραμματισμού. Υπήρχε η πολυτέλεια να επιτρέπεται η κατασκευή ActiveX controls και COM Components από προγραμματιστές που δεν ήξεραν παρά μόνο τα βασικά του COM. Υπήρχε η πολυτέλεια να κατασκευάζονται μέσω ADO, client/server εφαρμογούλες από προγραμματιστές που δεν είχαν ακούσει ποτέ για την έννοια του concurency. Βέβαια, αν κάποιος τα ήξερε όλα αυτά, ό,τι έφτιαχνε δούλευε καλύτερα και ήξερε τι έφτιαχνε και τι περιορισμούς και τι όρια είχε αυτό που έφτιαχνε. Από την άλλη μεριά, όσοι δεν τα ήξεραν αυτά τα πράγματα, έφτιαχναν κουτσά-στραβά εφαρμογούλες που δούλευαν, έστω και αν δούλευαν πιο αργά ή ήταν εξαιρετικά δύσκολο να συντηρηθούν.
Η VB.NET λοιπόν - σε αντίθεση με τη VB 6 - είναι μια πλήρως OO γλώσσα προγραμματισμού και κάτι τέτοιο σημαίνει ότι αν κάποιος βγάζει το ψωμί του από τον προγραμματισμό, θα πρέπει να ξέρει ή να κάτσει να μάθει διαβάζοντας και ρωτώντας, τι είναι η κλάση, τι είναι η κληρονομικότητα, τι είναι το interface ή ακόμα τι είναι το disconnected data access, κλπ, κλπ, κλπ. Γενικά, τα περισσότερα αν όχι όλα έτσι όπως γίνονται τώρα, γίνονται γιατί το .NET σχεδιάστηκε από την αρχή και υπήρχε η δυνατότητα να γίνουν τα πράγματα σωστά και οργανωμένα - πιο ορθολογικά! Μπορεί να είχαμε βολευτεί με το control array αλλά αν το εξετάσουμε καλύτερα θα δούμε ότι ήταν μια ανωμαλία. Γιατί υποχρεωτικά να έχουμε controls ίδιου τύπου στο array; Γιατί να είναι συγκεκριμένου τύπου το Array και να μην είναι ένα data structure διαφορετικού τύπου όπως είναι το ArrayList ή το HashTable; Γιατί το event να γίνεται fire για όλα τα control του array; Ή ακόμα-ακόμα, γιατί να πρέπει να τοποθετήσουμε τουλάχιστον ένα control πάνω στη φόρμα προκειμένου να μπορέσουμε να δημιουργήσουμε on runtime κι άλλα controls δυναμικά, με χρήση κώδικα;
Τα κακά νέα λοιπόν είναι ότι πολλά από αυτά που έκανε η VB6 πριν από μας, για μας, έχουν φύγει. Πολλά πράγματα που γινόντουσαν στο παρασκήνιο χωρίς εμείς, καλώς ή κακώς, να έχουμε τρόπο να τα ελέγξουμε έχουν φύγει και είναι απαραίτητο το διάβασμα σε πολλά επίπεδα, ο κόπος για να φτιάξουμε πράγματα που ήδη ξέραμε πως να φτιάχνουμε.
Τα καλά νέα όμως είναι ότι τώρα πλέον υπάρχει πολύ μεγαλύτερη ευελιξία και πολύ περισσότερες δυνατότητες. Επίσης υπάρχει τρομερός όγκος γνώσης σε έντυπη και ηλεκτρονική μορφή για όποιον θέλει να ασχοληθεί και να διαβάσει.
Καμιά φορά, καθώς προγραμματίζω και χρησιμοποιώ κάποια κλάση από το Framework, σκέφτομαι παλιότερα projects και πόσο κώδικα είχα γράψει για να κάνω το ίδιο πράγμα που τώρα βρίσκω έτοιμο στο .NET Framework. Τελικά όλα είναι θέμα trade offs. You win some, you loose some. Προσωπικά, προτιμώ τις δυνατότητες και την ευελιξία και ας χρειάζεται να διαβάσω. Εξάλλου, άπαξ και μπεις στην φιλοσοφία και αποκτήσεις ένα βασικό σύνολο γνώσεων στο .ΝΕΤ, μετά το ψάξιμο και το διάβασμα γίνονται όλο και πιο εύκολα.
Vir prudens non contra ventum mingit