Τετάρτη 30 Δεκεμβρίου 2015

Η εξέλιξη μου ως προγραμματιστής - Μέρος 2ο

Σε συνέχεια της παλιότερης ανάρτησης Η εξέλιξη μου ως προγραμματιστής - Η αρχή!, σκοπεύω να γράψω κάποιες προσωπικές απόψεις σχετικά με την εξέλιξη ενός προγραμματιστή.

Επισήμανση

Αρχικά να επισημάνω ότι την λέξη "προγραμματιστής" την έχω εντός εισαγωγικών καθώς έχει παρερμηνευτει πολλές φορές. Ορισμένοι χρησιμοποιούν αυτη την λέξη ακόμη και για τον απλό τεχνικό υπολογιστών ενώ αλλοι την χρησιμοποιούν ακόμη και για άτομα που ασχολούνται με την αρχιτεκτονική έργων πληροφορικής μεγάλης κλίμακας. Στην πραγματικότητα υπάρχουν άπειρες ενδιάμεσες βαθμίδες μεταξύ του απλού τεχνικού μέχρι αυτή του αρχιτέκνονα λογισμικού (Software Architect). Προσωπικα θεωρώ οτι το ιδανικο είναι κάθε προγραμματιστής να περνάει απο όλες αυτες τι βαθμίδες ώστε να αντιλαμβάνεται την "δουλειά" σε ολα τα επίπεδα. Να σημειωθεί ότι πολλές φορές ισχύει το παράδοξο να ασχολειται με σχεδιασμό (software design) χωρίς να είχε ποτέ ιδιαιτερη προσωπική τριβή με την συγγρααφή κώδικα (coding) πράγμα που συνήθως οδηγεί σε λάθος εκτιμήσεις κόστους σε χρόνο και χρήμα!

Βαθμίδες προγραμματών

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

Το ξεκίνημα

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

Χαρακτηριστικά παράδειγματα αποτελούν:
  • Τα λογιστικά φύλλα (Spreadsheets)[1], όπου ο χρήστης μπορεί να καταγράψει δεδομένα τα οποία με χρήση συναρτήσεων μπορεί να μετασχηματίσει σε χρήσιμη πληροφορία. Μια πολύ συνηθισμένη χρήση αυτων των εργαλείων είναι η καταγραφή προσωπικών εσόδων-εξόδων και η παρακολούθηση τους.
  • Η ρύθμιση υπηρεσιών, όπως το IFTT (If This Then That), που δίνει την δυνατότητα στον χρήστη να "προγραμματίσει συγκεκριμένες λειτουργείες όταν συμβεί κάτι. Για παράδειγμα μπορεί όταν βγάλει μια μια κάμερα αντιληφθεί κίνηση, να βγάλει μια φωτογραφία και να του την στείλει μέσω email.
  • Η δημιουργία προσωπικής ιστοσελίδας (Wordpress, Blogspot etc) είναι άλλο ένα είδος υπηρεσίας όπου ο απλός χρήστης μπορεί να δημιουργήσει και να αρχίσει να έχει μια βασική επαφή με τον προγραμματισμο, ειδικά όταν θελήσει να προσθέσει κάποιο "προχωρημένο" plugin.

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

Μαθαίνοντας συγγραφή ή συρραφη κώδικα!

Τα πρώτα βήματα στον προγραμματισμό γίνονται με παραδείγματα. Κανένας δεν μπορει να μάθει πως να φτιάξει ενα κομμάτι κώδικα, αν πρωτα δεν έχει δει κάποιο υπάρχον. Τα πλέον κλασσικά κομμάτια κώδικα που χρησιμοποιούνται για εκμάθηση ειναι τα ακόλουθα:
Ενώ η ίσως πλέον κατάλληλη γλώσσα προγραμματισμού για να ξεκινήσει κάποιος με σωστές βάσεις είναι η all time classic ANSI C. Πρόκειται για την γλώσσα στην οποία βασίζονται σχεδόν όλες οι ευρέως διαδεδομένες γλώσσες προγραμματισμού κι άρα η μετάβαση σε κάποια από αυτές θα ειναι εύκολη.

Η εμπειρία ως κλειδί εξέλιξης

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


Τα "σκαλοπάτια"

Στο λογισμικό υπάρχουν πάντα πολλές προσεγγίσεις σε όλα τα θέματα. Η ίδια λογική ισχύει και για το ποιες είναι οι βαθμίδες των προγραμματιστών, αλλά η πλέον συνηθισμένη ειναι ακόλουθη:
  1. Trainee - Εκπαιδευόμενος που ενδέχεται να μην εχει καν πτυχίο. Συνήθως σε αυτό το στάδιο ο "προγραμματιστής" ενδέχεται να μην γνωρίζει καν βασικές δομές κάποιας γλώσσας προγραμματισμού κι απλά να προσπαθεί μέσω "μιμησης" να εξοικειωθεί με τις τεχνολογίες.
  2. Junior - Αρχάριος που έχει στοιχειώδεις γνώσεις αλλά ακόμη δεν μπορεί να αναλάβει κάποιο κομμάτι δουλειάς χωρίς την επίβλεψη κάποιου πιο έμπειρου που μεταξύ άλλων θα του επισημαίνει λάθη και θα τον καθοδηγεί στο πως να δημιουργεί κάτι πιο άρτιο.
  3. Mid level - Μέσου επιπέδου είναι κάποιος προγραμματιστής που μπορεί να αναπτύξη κάποια κομμάτια ενός προγράμματος χωρίς να χρειάζεται συνεχής παρακολούθηση από κάποιον έμπειρο, αλλά δεν διαθέτει την απαραίτητη εμπειρία ώστε να αυτά που αναπτύσει να είναι επεκτάσιμα και επαναχρησιμοποιήσιμα.
  4. Senior - Εμπειρος είναι ένας προγραμματιστής που μπορεί να αναπτύξει λογισμικό χωρίς την παρακολούθηση απο κάποιον πιο έμπειρο και μάλιστα ο κώδικας του έχει την κατάλληλη δομή ώστε να μπορεί εύκολα να επεκταθεί αλλά και να επαναχρησομοποιηθεί. Επιπλέον, ένας έμπειρος μηχανικός λογισμικού είναι αρκετά ικανός ώστε να καθοδηγεί και να εκπαιδεύει προγραμματιστής με λιγότερη εμπειρία.
  5. Lead/Principal - Επικεφαλής είναι ο υπεύθυνος μιάς ομάδας προγραμματιστών. Συνήθως είναι αρκετά έμπειρος τόσο σε τεχνικά θέματα όσο και σε θέματα διαχείρισης ομάδων. Σε αυτό το επίπεδο ασχολείται περισσότερο για το πως θα βελτιστοποιούνται οι διαδικασίες για παραγωγή του καλύτερου δυνατού αποτελέσματος παρά το πως θα γράψει ο ίδιος τον "κωδικα".
  6. Architect - Αρχιτέκτονας θεωρείται ένας μηχανικός λογισμικού που λαμβάνει όλες τις αποφάσεις σχετικά με το ποιες τεχνολογίες θα χρησιμοποιηθούν, πως θα συνδυαστούν αλλά ακομη και το τι δομή θα έχει ο κώδικας. Επιπλέον αποφασίζει για τα standards που πρέπει να ακολουθούνται από τις ομάδες ανάπτυξης λογισμικού.
  7. Chief Architect - Επικεφαλής αρχιτεκτονικής είναι το άτομο που ηγείται όλων και λαμβάνει όλες τις τεχνολογικές αποφάσισεις υψηλού επιπέδου. Να σημειώσω ότι πολλές φορές τυγχάνει αυτός που έχει ουσιαστικά τις αρμοδιότητες του Chief Architect να έχει τον τίτλο του CTO.

Υποσημειώσεις

[1] Λογιστικά φύλλα (Spreadsheets) ειναι πίνακες που επιτρέπουν εύκολους υπολογισμούς πάσης φύσεως. Στον κόσμο της πληροφορικής ταυτίζονται με τα πολύ διαδεδομένα προγράμματα MS Excel, Google Sheets και Numbers for Mac κι άλλα λιγότερο διαδεδομένα που ενδέχεται όμως να είναι ακόμη πιο κατάλληλα για κάλυψη συγκεριμένων αναγκών.
[2] Δυο από τα πλέον αγαπημένα μου βιβλία σχετικά με διαχείρηση ομάδων ανάπτυξης λογισμικου αποτελουν τα ακολουθα:




LinkWithin

Blog Widget by LinkWithin

Mobile edition