Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων

Τετάρτη 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] Δυο από τα πλέον αγαπημένα μου βιβλία σχετικά με διαχείρηση ομάδων ανάπτυξης λογισμικου αποτελουν τα ακολουθα:




Τετάρτη 15 Απριλίου 2015

Programming Mobile Applications for Android Handheld

8-13 June at Found.ation with the co-operation of Pinnatta team

instructors: George Anagnostaros and Vassilis Pigadas



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



Απευθύνεται σε όσους θέλουν να μάθουν πως μπορούν να ανάπτυσουν εφαρμογές Android, που να ειναι συντηρισιμες σε έναν χώρο που συνεχώς μεταβάλλεται. Η γνώση Java είναι απαραίτητη, αλλά οι γνώστες C-like γλωσσών θα μπορέσουν να ακολουθήσουν με σχετική άνεση.


Πρόγραμμα:
Προαιρετικό πρόγραμμα:
  • Πεμπτη 4 Ιουνίου, 18:00-20:00 -Εισαγωγή στην Java
  • Παρασκευή 5 Ιουνίου, 18:00-20:00 - Εγκατασταση και γνωριμία με το Android Studio


Κανονικό πρόγραμμα:
Δευτέρα 8 Ιουνίου, 18:00-20:00 -
Βασικά στοιχεία μιας εφαρμογής Android (1)


Τρίτη 9 Ιουνίου, 18:00-20:00 -
Βασικά στοιχεία μιας εφαρμογής Android (2)
Δραστηριότητες και Προθέσεις (Activities and Intents)


Τετάρτη 10 Ιουνίου, 18:00-20:00 -
Δημιουργία διατάξεων (layouts)


Πέμπτη 11 Ιουνίου, 18:00-20:00 -
Βάσεις δεδομένων και πάροχοι περιεχομένου (SQLite & Content Providers)


Παρασκευή 12 Ιουνίου, 18:00-20:00 -
Υπηρεσίες και ασύγχρονες εργασίες (Services & AsyncTasks)


Σάββατο 13 Ιουνίου, 10:00-14:00 -
Επικοινωνία με το δίκτυο
Beta testing, debugging και δημοσίευση εφαρμογής στο Google Play


Τι θα χρειαστειτε:
  • Φορητό υπολογιστή με τουλάχιστον τα ακολουθα χαρακτηριστικά:
    • 4GB RAM
    • 10GB ελευθερου χώρου στον δισκο
    • Λειτουργικό σύστημα Linux, MAC OS, ή Windows
  • Προαιρετικά, θα ήταν καλό να εχετε και συσκευή με λειτουργικό σύστημα Android 4.0.3 και άνω ώστε να δοκιμασετε τα δημιουργήματα σας.


Σύνολο:
Προαιρετικό πρόγραμμα: 4 ώρες σε 2 μερες
Κανονικό πρόγραμμα: 14 ώρες σε 6 μέρες


Κόστος early bird (κανονικό πρόγραμμα): 95 ευρώ
Κόστος early bird (κανονικό πρόγραμμα + προαιρετικό πρόγραμμα): 110 ευρώ


Κόστος μετά την πάροδο των early bird (κανονικό πρόγραμμα): 110 ευρώ
Κόστος μετά την πάροδο των early bird (κανονικό πρόγραμμα + προαιρετικό πρόγραμμα): 125 ευρώ


Στο τέλος θα δοθούν πιστοποιητικά παρακολούθησης από το Found.ation.
ΒιογραφικάGeorge Anagnostaros
  • Head of Mobile Engineering in Pinnatta.
  • Co-founder & CTO of Apps4Mags
  • Working experience in software development of vast array of projects, since 2006.
  • Developing applications for mobiles since the era of J2ME, back to 2000, but he still learns new technologies (e.g. Swift, Lambda Expressions etc)
  • Education
    • Master of Science in the Management of Business Innovation and Technology
    • BsC, in Applied Informatics & Multimedia


Vassilis Pigadas

  • Android Engineer at Pinnatta
  • Working experience in Android development
  • Education
    • Master of Computer/Information Technology Administration and Management
    • BsC, in Computer Science & Biomedical Informatics

When ?

Monday, June 08, 2015 6:00 PM
-
Saturday, 13 June 2015

Where ?

Found.ation
Evristheos 2


118 54 Athina, Greece

Σάββατο 7 Μαρτίου 2015

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

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

Γιατί έγινα προγραμματιστής κι όχι μαθηματικός ή καθηγητής αγγλικών όπως έλεγα πολύ μικρός[1];

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

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

Ποια ήταν τα πρώτα μου βήματα στον προγραμματισμό;

  • Ίσως το πρώτο πρόγραμμα που έγραψα, στην πραγματικότητα το αντέγραψα απο το βιβλίο "Γνωρίστε τον μικρο-υπολογιστή"! Βιβλίο το οποίο διατηρώ καθαρά για λόγους νοσταλγίας. Ήταν ένα πάρα πολύ απλό παιχνιδάκι σε GWBasic, οπου ζητούσε από τον χρήστη να μαντέψει ένα νούμερο.[2] . Να σημειωθεί οτι αυτο το είχα κάνει πριν καν ξεκινήσω το δημοτικό. Πάντα νιώθω τυχερός που είχα την τύχη να υπάρχει υπολογιστής στο σπίτι κι άρα να έχω το ερέθισμα να ασχοληθώ.

  • "Μεγαλώνοντας" και έχοντας μάθει πλέον πιο πολλά, ανέπτυξα ένα εκπαιδευτικό παιχνίδι για την προπαίδια. Το είχα αναπτύξει κι αυτό σε GW BASIC, που ήταν άλλωστε η πρώτη μου γλώσσα προγραμματισμου! Η εφαρμογή ήταν πάρα πολύ απλή, για τα σημερινά δεδομένα, καθώς εμφανιζε δυο τυχαίους ακέραιους αριθμους απο το 1 μεχρι το 10 και ζητούσε στον χρήστη να γράψει το γινομενο, αν το έγραφες λάθος σε ενημέρωνε για το σωστό! Δεν ξέρω αν αυτό με έκανε να μάθω προπαίδια, αλλά σίγουρα με έκανε να νιώθω οτι ο προγραμματισμός δεν είναι κάτι το ουτοπικό!

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

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

Τι με έκανε προγραμματιστή;

1. Δεν υπήρχαν έτοιμα προγράμματα

Μεγάλωσα σε μια εποχή και μια χώρα, όπου μπορούσες να βρεις ελάχιστα έτοιμα προγράμματα.  Συνήθως μόνο εφαρμογές των ακόλουθων κατηγοριών μπορούσες να βρεις:
  • Παιχνίδια, όπως τα αγαπημένο μου Shinobi και Lemmings
  • Eφαρμογές γραφείου, οπως η σουϊτα Microsoft Works και η Lotus 1-2-3 που όμως για να κάνεις το κάτι παραπάνω απαιτούσαν να γράψεις μακροεντολές και έξυπνες συναρτήσεις.
  • Compilers, όπως GW-Basic, QBasic, Clipper κ.α.

2. Το απόλυτο εργαλείο για πειράματα χωρίς επιπλέον εξοπλισμό

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

3. Η χαρά της δημιουργίας

Ενας από τους πιο βασικούς λόγους που λατρεύω την ανάπτυξη λογισμικού είναι ότι μου δίνει την δυνατότητα να υλοποιώ κάτι που ο ίδιος βλέπω και χρησιμοποιώ. 
Ένα απο αυτά τα προγράμματα είναι οι Μαντινάδες, που ανέπτυξα πρώτη φορά το 2001 όταν ήμουν στην Α' Λυκείου χρησιμοποιώντας Visual Basic 6! Στο πλαισιο της συγκεκριμένης εφαρμογής υλοποίησα και έναν μεταφραστη απο ελληνικά σε greeklish ώστε να μπορεί να γίνεται αναγνωση των μαντινάδων μεσω της λειτουργιας Text2Speech που είχαν τα MS Windows, αλλά μονο για αγγλικά. 

4. Η ανάγκη για συνεχή μάθηση και βελτίωση

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

Προγραμματιστής επι πληρωμή

Πάρα πολλοί νεαροί και νεαρές θεωρούν την δουλεία του προγραμματιστή ως ιδιαίτερα επικερδή. Το πρόβλημα ξεκινάει όταν μπερδεύουν το τι παίρνουν οι λίγοι και καλοι αρχιτέκτονες λογισμικού κι όχι τι παίρνει ο απλός εκπαιδευόμενος προγραμματιστής. Ενδεχομένως ακούνε για μισθους της ταξη των $100Κ τον χρόνο στο Silicon Valley και ονειρεύονται.

Η πραγματικότητα είναι λίγο πιο προσγειωμένη για τα ελληνικά δεδομένα. Ένας μηχανικός ξεκινάει έχοντας πτυχίο τριτοβάθμιας εκπαιδευσης με έναν μικτο μισθο της τάξης των 1200€, ως υπάλληλος[4], ενώ αν επιλέξει να εργαστεί ως ελεύθερος επαγγελματιας τότε έχει να αντιμετωπίσει δυο βασικές κατηγορίες "πελατών", αυτοί που θεωρούν τους μηχανικούς λογισμικου επιστήμονες που μοχθούν για να παραξουν το καλύτερο δυνατό αποτέλεσμα και αυτούς που θεωρούν τους coders τεμπέλιδες που έχουν έτοιμα τουβλάκια που τα κουμπώνουν και παράγουν εφαρμογές.

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

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

Σε επόμενο άρθρο σκοπεύω να γράψω:

  • Βαθμίδες προγραμματιστών
  • Πόσα χρόνια προγραμματιστής;
  • Ποιό είναι το επόμενο επίπεδο, μετά απο τον προγραμματισμό;


Υποσημειώσεις:
[1] Αποφάσισα να γίνω προγραμματιστής στην 5η δημοτικού, οπότε το "πολύ μικρός" εννοώ μεχρι την 4η δημοτικού ;-)
[2] Βρήκα ένα αναλυτικό άρθρο για το συγκεκριμενο βιβλίο, στο Asciimation
[3] Η αλήθεια ειναι οτι δεν ήταν πρόγραμμα, αλλά ενα spreadsheet σε Microsoft Works, αλλά τότε μου φαινοταν σαν να εγραφα κώδικα!
[4] Σύμφωνα με την τελευταία συλλογική σύμβαση εργασίας ο πρώτος μικτος μισθος ειναι γύρω στα 1200€, αλλά επειδή τώρα δεν ισχύουν ή κάποιος μπορεί να μην έχει πτυχίο ενδέχεται να λάβει ακόμα χαμηλότερο μισθο!

Σάββατο 17 Δεκεμβρίου 2011

How to export mysql without using the buggy Workbench!

Today I was trying to export a mysql schema, but it was impossible to do so through the MySQL Workbench due to unexpected error!! Thanks God, there was another more traditional and stable way to do so.. this way was by using the mysqldump command through the command line! The syntax is pretty easy and the whole process much faster than through the MySQL Workbench: mysqldump --user=XXXXXXXX --password=XXXXXXXX --databases DB_NAME --tables TABLE_NAME > backup.sql

Πέμπτη 29 Σεπτεμβρίου 2011

Spring Android

Questions and accepted answers

  1. Do you want to develop a native android application? YES
  2. Will your application contact some server using REST, JSON or XML? YES/NO/MAYBE
  3. Will your application be integrated with social networks? YES/NO/MAYBE
  4. Do you want to do it from scratch? NO
Results

In case that you gave the accepted answers to the questionnaire then you can try Spring Android. Spring Android is an extension of the well known Spring Framework that aims to simplify the development of native Android Applications. In general, it uses the tools that Android SDK provides. You keep developing Android native apps using Eclipse, but you do not have to code everything from scratch or search for individual libraries. In fact it is an integration of existing libraries[1] so that you will not need to spend your useful development time on how they will all work together.
The tricky part is how to install everything that is necessary to work with Spring Android. The answer is the included References, see "What to install in order to use Spring Android", but in addition I would like to add that in order to check your setup using spring-android-showcase client, you will need to:
  • Create an Android Virtual Device named "7" and using Android 7 (2.1_R1) or change in pom.xml the value of the /project/properties/android-emulator



  • Add YOUR_PATH_TO_THE_ANDROID_SDK_HOME element under the configuration/sdk of the plugin "maven-android-plugin"


Notes:

[1] Additional libraries that Spring Android includes: httpclient, httpcore, commons-codec, xmlParserAPIs, xpp3, jackson, gson, simple-xml


References:

  1. What to install in order to use Spring Android: http://blog.springsource.com/2011/02/09/spring-android-and-maven-part-2/
  2. Spring Android home page: http://www.springsource.org/spring-android
  3. Android Maven Plugin that is used to build native Android applications using maven: http://code.google.com/p/maven-android-plugin/
PS: If you would like to me to explain something in more detail simply ask me to do so!

Τετάρτη 27 Ιουλίου 2011

Απολύστε με! (Fire Me!) 2

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

Εαν έχετε το οποιοδήποτε σχόλιο ή ιδέα για βελτίωση θα χαρώ πολύ να μου αφήσετε σχόλιο!

Σάββατο 16 Ιουλίου 2011

Απολύστε με!

Σήμερα έφτιαξα άλλη μια εφαρμογή για iOS συσκευές. Πρόκεται ένα πολύ απλό εργαλείο υπολογισμού της αποζημείωσης, συμπληρώνοντας μόνο το τρέχον μηνιαίο μισθό και τα χρόνια προϋπηρεσίας! Σύντομα θα είναι διαθέσιμο στο App Store, ώστε να το αποκτήσετε! Να σημειωθεί ότι το έχω δοκιμάσει έτσι ώστε να λειτουργεί και σε συσκευές με iOS 3!

Δείτε τι θα έχει η δεύτερη έκδοση στο "Απολύστε με! (Fire Me!) 2"


Δευτέρα 30 Μαΐου 2011

Ακόμα και οι compilers έχουν χιούμορ!

Οι προγραμματιστές που έφτιαξαν το πρόγραμμα Dev C++ το οποίο προορίζεται για προγραμματισμό σε C και C++ πρέπει να είχαν καλή διάθεση όταν το έφτιαχναν!Αυτό το υποθέτω γιατί όταν δημιουργείς ένα κενό έργο και πας να το εκτελέσεις σου εμφανίζει το παρακάτω χαριτωμένο παράθυρο λάθους:

Δευτέρα 28 Μαρτίου 2011

Τι ειναι αντικειμενοστραφής προγραμματισμός;

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


Στο συγκεκριμένο video θα παρακολουθήσετε μια σύντομη παρουσίαση όλως των βασικών εννοιών που υπάρχουν στον αντικειμενοστραφή (Object Oriented - OO) προγραμματισμό.


Σάββατο 5 Δεκεμβρίου 2009

BPEL (Business Process Execution Language)

Όπως έχω αναφέρει και σε παλιότερο post, ασχολούμαι με Web Services. Καθώς έχει γίνει πλέον ένα must για όλα τα μεγάλα συστήματα να προσφέρουν δυνατότητα διασύνδεσης με άλλα συστήματα. Αλλά αυτή την εβδομάδα έχω αρχίσει να ασχολούμαι με κάτι που παλιότερα μου φαινόταν περίπλοκο και ανεφάρμοστο, αλλά πλέον το βλέπω ως αρκετά χρήσιμο. Ο λόγος για την BPEL, μια γλώσσα που περιγράφει το πως μπορούν να συνδυαστούν υπηρεσίες ώστε να παραχθεί κάποια σύνθετη.
Για παράδειγμα μέσω BPEL μπορεί να φτιαχτεί μια σύνθετη υπηρεσία που θα αναζητεί αεροπορικό εισιτήριο, αυτοκίνητο προς ενοικίαση και ξενοδοχείο με την μία, συνδυάζοντας τις υπηρεσίες αναζήτησης αεροπορικού εισιτηρίου, την υπηρεσία αναζήτησης αυτοκινήτου και την υπηρεσία αναζήτησης ξενοδοχείου που υπάρχουν. Το πλεονέκτημα με την BPEL είναι ότι δεν χρειάζεται να γραφτεί κώδικας, αλλά να περιγραφεί σε μορφή XML, για την δημιουργία του οποίου υπάρχουν γραφικά εργαλεία όπως το SOA Plugin του NetBeans.

Περισσότερες λεπτομέρειες:

Χρησιμοποιώντας Wicket..

Το τελευταίο καιρό έχω αρχίσει να ασχολούμαι με ένα ακόμα web framework, το wicket. Το wicket είναι ένα framework για Java που ανήκει στην μεγάλη οικογένεια του Apache Foundation. Το ιδιαίτερο χαρακτηριστικό που έχει, σε σχέση με άλλα παρόμοια, είναι ότι διαχωρίζει την εμφάνιση από την λογική. Αυτό επιτυγχάνεται με το να απαιτείται για κάθε τι που εμφανίζεται αφενός ένα στοιχείο HTML σε κάποια σελίδα και αφεταίρου αντίστοιχο Wicket Component's instance που να δημιουργείται στον Constructor κάποιας ομώνυμης με την σελίδα κλάσης. Επίσης διαθέτει δυνατότητα χρήσης Ajax αλλα παράλληλα και κλασικού submit/refresh.

Εαν θέλετε να μάθετε περισσότερα μπείτε στην επίσημη ιστοσελίδα του project: http://wicket.apache.org/
ή ζητήστε μου να γράψω περισσότερα.

Δευτέρα 7 Σεπτεμβρίου 2009

Πρώτη επαφή με το Grails

Σε παλιότερη άναρτηση είχα αναφερθεί στο framework Ruby On Rails. Ένα πακέτο που με χρήση scripts δημιουργεί την βασική δομή του προγράμματος και με την προσθήκη διαφόρων οδηγιών και εντολών ολοκληρώνεται η κατασκευή μιας πλήρως λειτουργικής εφαρμογής.
Ένα αντίστοιχο πακέτο είναι το Grails. Το Grails είναι ουσιαστικά η μεταφορά της λογικής του RoR σε ένα περιβάλλον όπου ο κώδικας γράφεται σε Groovy.
Η Groovy είναι μια γλώσσα βασισμένη στην Java αλλά με ελευθερία αντίστοιχη αυτής της Ruby. Οπως και στο RoR έτσι και στο Grails στοχος είναι η αποφυγη χρήσης περίπλοκων αρχείων ρυθμίσεων και η μη επανάλληψη κώδικα. Εφαρμοζεί το μοντέλο MVC (Model View Controller) στο ακέραιο και οδηγεί τον προγραμματιστή με τέτοιο τρόπο ώστε να παραμείνει στην λογική του αποδεδειγμένα καλού αυτού μοντέλου.
Ελπίζω σύντομα να μου δωθεί η ευκαιρία να αναπτύξω κάποιο ιστοχώρο με χρήση αυτής της τεχνολογίας ώστε να σας πω τις απόψεις μου σε επίπεδο εφαρμογής.

Σάββατο 9 Μαΐου 2009

Τι είναι Ruby On Rails;


To Ruby On Rails (ROR) είναι ένα framework, δηλαδή κατ' ουσίαν μια βιβλιοθήκη κώδικα, για την ανάπτυξη εφαρμογών ιστού (web applications κοινώς!). Στόχος του συγκεκριμένου framework είναι να οδηγίσει τον προγραμματιστή με απλά βήματα στην ανάπτυξη μιας εύκολα και σωστά δομήμένη εφαρμογής που να είναι ταυτόχρονα εύκολα συντηρίσιμη! Όσο κι αν αυτό μοιάζει ουτοπικό, με την ROR γίνεται εφικτό.

Η ανάπτυξη γίνεται εύκολα χάρη στα διάφορα scripts που χρησιμοποιούνται για την δημιουργία ενός αρκετά μεγάλο μέρος του γενικού κώδικα, αλλά και η ύπαρξη αρκετών έτοιμων κομματιών κώδικα που κυκλοφορούν στο Δίκτυο. Να σημειωθεί ότι το ROR είναι και database independent καθώς η βάση δεδομένων δημιουργείται αποκλειστικά και μονο με σχετικό script

Η ανάπτυξη γίνεται σωστά λόγο του ότι υπάρχουν δύο βασικές αρχές που προσπαθεί να τηρήσει, η πρώτη αρχή είναι Don't Repeat Yourself (DRY) που είναι και γενικότερα γνωστή ως επαναχρησιμοποίηση του κώδικα, ενώ η δεύτερη είναι η Convention Over Configuration (COC), δηλαδή καλύτερα να ακολουθείται μια τυποποίηση στην ονοματολογία παρά να έχουμε άπειρες ρυθμίσεις που προσπαθούν να επιτύχουν αυτο το αποτέλεσμα.

Αν εχετε οποιαδήποτε απορία ή θέλετε περισσότερες πληροφορίες αφήστε σχόλια ή στείλτε μου email, θα σας απαντησω σύντομα!

Τετάρτη 6 Μαΐου 2009

Ξεκινόντας με το iPhone SDK

Εδω και αρκετές βδομάδες έχω μπει στο τρυπάκι να μάθω άλλες γλώσσες προγραμματισμού, πέρα απο την Java που θεωρώ ότι έχω φτάσει σε ένα αρκετά καλό επίπεδο. Για να πω την αλήθεια, οδηγήθηκα σε αυτή την ανάγκη κυρίως επειδή ήθελα να αναπτύξω εφαρμογές για το iPhone. Οπότε αναγκάστηκα να αρχίσω να μαθαίνει Object-C. Μια γενική γνώση της C την είχα, οπότε μου ήταν σχετικά εύκολο να την κατανοήσω. Βέβαια βοηθάει πάρα πολύ το γεγονός ότι η ίδια η Apple έχει πάρα πολλά παραδείγματα, οδηγίες και φυσικά το πραγματικά καταπληκτικο XCode, που πριν το γνωρισω μέσω των διαφόρων tutorials, το θεωρούσα δυσνοητο!
Σας προτρέπω, αν έχετε κι εσείς MAC και μανια με το iPhone, να κατεβάσετε το iPhone SDK και να δοκιμάσετε. Τουλάχιστον με τον προσομοιωτή είναι δωρεάν η ανάπτυξη εφαρμογών, αυό που πληρώνεις είναι 99$ τον χρόνο εάν θέλεις οι εφαρμογές σου να διατίθενται από το App Store και να εγκαθίστανται σε πραγματικές συσκευές. Επίσης έχει και το αλλο πακέτο των 299$ για την περίπτωση εταιριών που θέλουν να αναπτύσουν εφαρμογές αλλά να μην τις διαθέτουν μέσω του App Store.
Προσωπικά έχω ξεκινήσει τις διαδικασίες στέλνοντας κι ένα fax, δυστυχως στην ελλάδα επειδή δεν εχει online store, πρέπει να στείλεις fax στην Αμερική! Ακόμα δεν έχω λάβει τον κωδικό επιβεβαίωσης, αλλά ούτε μου έχει γινει καποια χρέωση. Όταν θα έχω ολοκληρώσει την διαδικασία θα σας ενημερώσω σχετικά με το πόσο διαρκεί.
Τέλος θα ήθελα να σημειώσω ότι εκτός από το καταπληκτικό υλικό που προσφέρει η μαμά εταιρεία, έχω βρει και πάρα πολλές άλλες πηγές. Ειδικά όμως, επειδή μου αρέσει να παιζω και με 3D, μου αρέσουν τα free tutorials του τρομερού Αυστραλού Simon Maurice που μπορείτε να βρείτε εδώ.

Πέμπτη 12 Ιουλίου 2007

ΤΙ ΠΡΟΓΡΑΜΜΑ ΧΡΕΙΑΖΕΤΑΙ ΓΙΑ ΝΑ ΕΡΓΑΣΤΩ ΣΕ JAVA

Βλέποντας ότι κάποιος επισκέπτης ήθελε να μάθει "ΤΙ ΠΡΟΓΡΑΜΜΑ ΧΡΕΙΑΖΕΤΑΙ ΓΙΑ ΝΑ ΕΡΓΑΣΤΩ ΣΕ JAVA" θεώρησα καλό να γράψω ένα κείμενο παρουσίασης του πως μπορείτε να δουλέψετε σε Java.
Κατ' αρχήν να σας πληροφορήσω ότι τα περισσότερα είναι ΔΩΡΕΑΝ, για αυτό μην νομίζεται ότι μονο τα επί χρήμασι είναι καλά. Υπάρχουν πολλά κι ίσως και καλύτερα προϊόντα που είναι δωρεάν. Και είναι καλύτερα γιατι τα βλέπουν και τα φτιάχνουν άνθρωποι με μεράκι. Χωρίς να κοιτάζουν πως θα κερδίσουν χρήματα. Απλά και μονο για το πάθος τους.
Το καλύτερο περιβάλλον ανάπτυξη, κατα την γνωμη μου, ειναι το eclipse, το οποίο μπορείτε, για δικια σας διευκόλυνση να το βρειτε προρυθμισμένο στην έκδοση EasyEclipse [υπάρχουν 3 βασικές εκδόσεις σε EasyEclipse, μια για αναπτυξη για κινητα, μια για stand alone και μια για web applications]
Ένα άλλο, αρκετά καλο. Αλλά με υπερβολικές απαιτήσεις σε πόρους, είναι το εργαλείο της SUN. Το γνωστό IDE, NetBeans. Που η αλήθεια είναι ότι είναι αρκετά όριμο και προσφέρει πολλούς οπτικούς τρόπους ανάπτυξης λογισμικού. Σημείο στο οποίο υστερή η βασική έκδοση του Eclipse.
Αλλά ότι κι αν επιλέξετε πρέπει πρώτα απο όλα να περάσετε μια βόλτα απο την επίσημη σελίδα της Java. Ώστε να κατεβάσετε το JDK, δηλαδή τον "compiler" και το JVM ώστε να μπορείτε να κάνετε "compile" τον κωδικά σας και να τον εκτελείται.


Keyword: Java, JDK, JRE, JVM, JAVA IDE, NETBEANS, ECLIPSE

Σάββατο 7 Ιουλίου 2007

Πως να γίνεις προγραμματιστής

Τις τελευταίες 2-3 μέρες πρόσθεσα έναν μετρητή επισκεπτών. Ώστε να βλέπω αν έχω κανέναν επισκέπτη, ή αν μονος τα γράφο, μονος τα διαβάζω! [Η μέτρηση γίνεται με το sitemeter, αν πάτε στην κάτω μεριά της σελίδας στο κέντρο υπάρχει το εικονιδιο]. Αυτό μου δίνει την δυνατότητα να βλέπω το πως με βρήκανε και αν διαβάσανε κάποια συγκεκριμένη ανάρτηση [post] ή γενικά μπήκαν στο blog μου, αλλά και το σε ποια σελίδα πήγανε..
Ολα αυτά τα γράφω για να πω οτι το έχω κάνει ώστε να βλέπω αν αυτοι που με βρίσκουν τους ικανοποιώ! Δηλαδή αν ψάχνει κάποιος για το Α, τότε εγώ του δίνω αυτό το Α ή με βρίσκει κατα τύχη; Ανάμεσα στις αναζητήσεις, όπου οι περισσότερες αφορούσανε το θέμα που με έχει ευαισθητοποιήσει περισσότερο απο όλα, δηλαδή την στην Πάρνηθα, βρήκα και μια για το "πως γίνεσαι προγραμματιστής".
Η αλήθεια είναι ότι ειδικότητα μου είναι ο προγραμματισμος, αυτή άλλωστε ειναι η δουλειά μου! Έχω πλέον και 12 μήνες ένσημα και γενικά 15 μήνες προϋπηρεσία ;-). Αλλά ως τώρα δεν είχα σκεφτεί αν γράψω κάτι τέτοιο.. Είναι κάτι περίπλοκο. Ένας συνάδερφος μου λέει οτι είναι απλά να ακολουθείς κάποιες διαδικασίας, εγώ απο την άλλη θεωρώ ότι ειναι να έχεις ταλέντο. Να έχεις τον περίπλοκο τρόπο σκέψης, ή μάλλον τον προσαρμόσιμο τρόπο σκέψης. Πρέπει να μην είσαι απλά μαθηματικό μυαλό. Πρέπει να μπορείς να βλέπεις τα πράγματα πιο χαοτικά. Και πάνω απο όλα να μπορείς να δομής την σκέψη.
Δομημένη σκέψη σημαίνει ότι όταν πρέπει να ξεκινήσεις απο το Α να πας στο Ω πρέπει να περιγράψεις όσο πιο απλά γίνεται την διαδρομή ώστε να μπορέσεις να βρεις εύκολα το τι λάθος έκανες. Γιατι αυτό που πρέπει να ξερει απο την αρχή ένας προγραμματιστής είναι ότι στόχος δεν ειναι να μην κάνει λάθη, είναι αδύνατον, αλλά να μπορεί να τα εντοπίζει εύκολα. Για αυτό πρέπει πάντα να φτιάχνει ένα σχεδιαγραμμα και γενικά να μελετά πρώτα στο χαρτί το πως θα λειτουργεί το προγραμμα του, πριν το γράψει σε κώδικα. Είναι όπως ο μηχανικός στις οικοδομές. Φτιάχνει τα σχέδια πρώτα, αφού έχει μελετήσει. Και μετά ρίχνει μπετά, δηλαδή υλοποιεί τα σχέδια.
Άλλωστε και ο προγραμματιστής τι είναι; Μηχανικός λογισμικού είναι. Άρα και ο προγραμματιστής πρέπει να ξέρει να σχεδιάζει το οικοδομημα του πριν ρίξει τα μπετά, δηλαδή γράψει κώδικα. Οποιος αρχίζει και γράφει γραφει γραφει, σιγουρα κάποια στιγμή θα το πετάξει ολοκληρο! Εκτώς βέβαια κι αν κάνει κάτι το πάρα πολύ εύκολο οποτε και δε θα έχει προβλημα.
Αυτά τα σχέδια φτιαχνονται συνήθως με χρήση μιας τυποποιημένης γλώσσας, που είναι η UML, ή με αυτοσχέδιες μεθόδους ;-) Στην πτυχιακή μου εργασία είχα ασχοληθεί με την UML και πως μπορεί να επεκταθεί έξυπνα ώστε να καλύψει κάποιες ανάγκες επεκτασιμοτητας συστηματων. [Κάποια στιγμή θα την ανεβάσω στο Δίκτυο να την διαβάσει όποιος ενδιαφέρεται! Αν κι αν είστε τυχεροί και είναι πάνω ο server της βιβλιοθήκης του ΤΕΙ, μπορείτε να την δείτε κι εδώ]. Οι ανάγκες επεκτασιμότητας που καλύπτονται απο την δικιά μου πτυχιακή είναι ανάγκες όπως προσαρμοστικότητα, δηλαδή για παραδειγμα πρόγραμμα που φτιάχτηκε να παίζει σε υπολογιστή, να θέλουμε να παίζει και σε κινητο. Με χρήση της UML, με τον τρόπο που προτείνω στην πτυχιακή μου, αποφεύγεται ο πλήρης επανασχεδιασμός. Οπότε έχει μικρότερο κόστος σε χρόνο, χρήμα αλλά και κίνδυνο ;-) Γενικά ο σχεδιασμός είναι το πρώτο βήμα που πρέπει να μάθει κάποιος, αν θέλει να γίνει προγραμματιστής κι όχι απλά ένας code monkey.
Αλλωστε, το επόμενο βήμα απο το να είσαι ένας απλό προγραμματιστής πρέπει να είναι να γίνεις αναλυτής. Δηλαδή να είσαι αυτός που θα κάνει τα σχέδια για ολόκληρο το σύστημα. [τα σχέδια που κάνει ένας απλός προγραμματιστής αφορούν πιο συγκεκριμένα θέματα, που είναι πιο κοντά στην υλοποιηση, σε σχέση με τον αναλυτή. Αν και συνήθως μπλέκονται οι αρμοδιοτητες ;-)]
Μετά απο αυτό το βήμα, του σχεδιασμού, πρέπει να μπορεί να γράψει και κώδικα. Δηλαδή να μετατρέψει αυτά τα διαγράμματα σε μια γλώσσα προγραμματισμου, το οποίο είναι το πιο εύκολο αλλά, λόγο των ιδιαιτεροτήτων κάθε γλώσσας, χρειάζεται εξοικείωση.
Τέλος το τρίτο και εξίσου σημαντικό με το πρώτο βήμα είναι η δοκιμή. Δηλαδή ο έλεγχος του ότι αυτό που υλοποιήθηκε κάνει αυτό που ζητήθηκε. Εδώ χρειάζεται προσοχή. Δεν δοκιμάζουμε αν αυτό που σχεδιάστηκε είναι αυτό που υλοποιήθηκε, αλλά αν αυτό που ζητήθηκε είναι αυτο που υλοποιήθηκε ;-). Πολλές φορές μου έχει συμβεί αυτό το μπέρδεμα. Σχεδιάζω κάτι λάθος, οποτε στον έλεγχο συγκρίνω το υλοποιημένο με το σχέδιο και βλέπω ότι είναι σωστό. Αλλά στην πραγματικότητα έχει γίνει λάθος απο την αρχή. Για αυτό το λόγο πρέπει το πρώτο βήμα να το προσέχουμε πάρα πολύ, ώστε να μην μπαλώνουμε μετά.

Συνοψίζοντας:
Αν θέλεις να γίνεις καλός προγραμματιστής πρέπει να μπορείς να κάνεις τουλάχιστον τα 3 ακόλουθα:
  1. Σχεδιασμός συστήματος, βάση κάποιων απαιτήσεων του πελάτη
  2. Υλοποιηση σε κάποια πραγματική γλώσσα προγραμματισμού
  3. Δοκιμή ότι το υλοποιημένο καλύπτει τις απαιτήσεις
Βεβαίως αυτα προϋποθέτουν υπομονή, επιμονή, συνεχή όρεξη για λάθη, διάθεση για επίλυση κάθε προβλήματος. Και γενικά ένας προγραμματιστής πρέπει να έχει μια βασική αρχή,
"ΔΕΝ ΥΠΑΡΧΟΥΝ ΠΡΟΒΛΗΜΑΤΑ, ΜΟΝΟ ΠΡΟΚΛΗΣΕΙΣ"

ΥΓ: Αν έχεται κάποιες ερωτήσεις, ή σχόλια παρακαλώ προσθέστε τα και θα προσπαθήσω να ανταποκριθώ το συντομότερο ;-)

Τετάρτη 4 Ιουλίου 2007

Πόσα πρέπει να μάθω πια;

Αύριο γράφω το τελευταίο μάθημα [ελπίζω] για το πτυχίο.. από την μια είμαι αισιοδοξος ότι "εντάξει, τελευταίο είναι. Ενα μάθημα ειναι. Θα διαβάσω. Θα πω κάτι και στην καθηγητρια. Θα το περασω." αλλά απο την άλλη σκέφτομαι, "γιατι ρε beeeep πρέπει να κάθομαι να διαβάζω και να μαθαίνω ένα σωρό άχρηστα πράγματα; Γιατι; Γιατι; Γιατι;"
Αλλά μετά απο αυτές τις αντικρουόμενες σκέψεις.. ξανανοίγω το βιβλίο και διαβάζω. Αλλά τώρα κοντεύω να τελειώσω. Δεν αντέχω αλλό 9.00-12.20 είναι αρκετα, πιστεύω ;-). {Να σημειωθεί ότι έχω ξαναδιαβάσει κι ό,τι τώρα κάνω απλά επανάλληψη}
Η απορία όμως παραμένει, γιατι πρέπει να μαθαίνουμε τόσα πολλά, οπότε έχουμε ένα πτυχίο που ουσιαστικά λέει οτι ξέρουμε λίγο από όλα; Γιατι να μάθω τηλεπικοινωνίες για να γίνω προγραμματιστής; Γιατι ο άλλος να μάθει προγραμματισμό για να πάρει πτυχίο για τηλεπικοινωνίες και να κάνει σχεδιασμό δικτύων; Γιατί δε φτιαχνουν πιο συγκεκριμένες σχολές; Έτσι ώστε να ήταν 3 χρόνια, επείδη θα είχε συγκεκριμένο αντικείμενο..γιατι; γιατι; γιατι;
Κι όλα αυτά τελικά γιατί τα κάνουμε; Για να ανεβούμε κοινωνικα; Για να ανεβούμε οικονομικά; Ή για να "ξεφύγουμε" απο την μάζα [μαζι ομως με εμάς προσπαθεί να φύγει κι ολη η μάζα, οποτε απλά όλη η μάζα πάμε κάπου αλλου, αλλά πάλι μάζα μένουμε]..
Α και κάτι άλλο, "καλημέρα, είναι 4 Ιουλίου 2007 [Ημερα της Ανεξαρτησίας, που σε λίγα χρόνια θα την γιορτάζουμε κι εμείς, ως επαρχία..{όχι πως τώρα δεν ειναι ολη η Ευρώπη επαρχία, απλά δε μας το λένε για να μην πάθουμε ψυχολογικό..}]".

GOD BLESS AMERICA.
ΖΗΤΩ Ο ΜΠΟΥΣ ΚΑΙ ΟΙ ΦΟΝΙΑΔΕΣ ΤΩΝ ΛΑΩΝ, ΟΙ ΑΜΕΡΙΚΑΝΟΙ.
ΜΕΣΑ ΟΙ ΒΑΣΕΙΣ ΚΑΙ ΤΟ ΝΑΤΟ.

Παρασκευή 29 Ιουνίου 2007

Είναι τέχνη ο προγραμματισμός;


Κάποτε, πριν απο αρκετά χρόνια ήταν ένα μικρό αγοράκι με πράσσινα μάτια.. τα οποία λάμπανε όταν βρισκόταν στην μονοχρωμη οθόνη ενος [τότε] σύγχρονου υπολογιστή.. ενός 8088 [υπερβολικά παλιός για την εποχή μας, δες παραπομπές] ο οποίος ήταν εξοπλισμένος με έναν τεράστιο σκληρό δίσκο, απίστευτης χωρητικότητας των 20 ΜΒ! Με οδηγό δισκέτα 51/4" των 640ΚΒ.. και το οποίο διέθεται και ποντίκι!
Αυτό το τότε αγοράκι είμαι εγώ.. ένα παιδί που αν και μεγάλωσα στο Αιγάλεω, και παρότι οι γονείς μου δεν είναι απόφοιτοι πανεπιστημίου, είχα την τύχη να έχω υπολογιστή απο όταν γεννήθηκα. Βεβαίως όταν θα ήμουν σε ηλικία πλήρους αξιοποιησής του θα ήταν πολύ παλαιάς τεχνολογίας.. αλλά δεν περίμενα εκείνη την ηλικία. Από μικρός ήθελα εγώ να του λέω τι να κάνει, να έχω τον έλεγχο, να του λέω "είσαι βλάκας" και να λέει "ναι, είμαι βλάκας". Οπότε και άρχησα τον προγραμματισμό..
Θυμάμαι το πρώτο προγραμμα που έγραψα [βασικά το αντέγραψα!]. Ήταν ένα παιχνίδι τύχης, "Βρες με 10 προσπάθειες πόσους κροκόδειλους έχει το ποτάμι". Και μάλιστα θυμάμαι και την πρώτη τροποποίηση που του έκανα.. είχα σκεφτεί οτι 10 είναι λίγες
προσπάθειες, οπότε τις έκανα αρχικά 100 [είδα ότι κάπου έλεγε 10 και χωρίς να καταλαβαίνω, έβαλα ένα μηδενικό στο τέλος ;-) ]. Βέβαια θα μου πείτε, "χαρας το σπουδαίο, δεν χρειάζεται να εισαι ιδιοφυία για να το σκεφτείς", κι εγώ θα απαντήσω, "δικιο έχεις, δεν χρειάζεται ενα παιδί νηπιαγωγου να είναι ιδιοφυια για να το σκεφτει ;-)". Έτσι στην ηλικία των 4-5 ετών είχα την πρώτη μου επαφή με το άθλημα..
Από τότε συνέχεια έψαχνα ιδέες, ή έτοιμα προγράμματα για να υλοποιήσω ή να πειράξω. Και πάντα όλο και κάτι έβρισκα. Δυστυχώς δεν υπήρχε τότε Διδικτυο, αλλά υπήρχαν περιοδικά και βιβλία και πάνω από όλα δίψα για δημιουργία. Το αντιμετώπιζα όπως άλλα παιδιά αντιμετώπιζαν την ζωγραφική ή το ποδόσφαιρο. Το έβρισκα πολύ σπουδαίο ακόμη και το να γράψω μια γραμμή κώδικα που θα κάνει τον υπολογιστή να πει "μπιπ" [πράγμα που στην σύγχρονη εποχή φαντάζει γελοίο, τότε δεν ήταν!]... έτσι έγραψα πρώτα κώδικα σε GWBasic, Pascal, C μετά εξελίχθηκα και πήγα στην Visual Basic που λάτρεψα, εως ώτου πήγα λύκειο οπότε είχε αρχήσει να οριμάζει η Java, την οποία αρχικά έβλεπα καχύποπτα.. αλλά σιγά σιγά την ερωτεύτηκα και πλέον έχουν μια μονιμη σχέση, αγάπης και εμπιστοσύνης ;-)
Αλλά όλα αυτά είναι απλά ένα απόσπασμα της αυτοβιογραφίας μου [λέμε τώρα!].. αλλά το θέμα μου είναι "είναι τέχνη ο προγραμματισμός;", για εμένα προσωπικά είναι τέχνη, είναι έκφραση της δημιουργικής φαντασίας, είναι σπαζοκεφαλιά είναι κάτι το οποίο σε κάνει να σκέφτεσαι με πολλούς τρόπους για να μπορείς να λύνεις το ίδιο πρόβλημα με πολλές διαφορετικές μεθόδους, ώστε μετά να επιλέγεις την καλύτερη.. Αλλά θα ήθελα, όποιος έχει διάθεση να μου γράψει και την δικια του γνώμη..



Παραπομπές:
  1. 8088 (Wikipedia)
  2. GW-Basic (Wikipedia)
  3. Pascal (Wikipedia)
  4. Visual Basic (Wikipedia)
  5. Java (Wikipedia)

ΥΓ: Αν κάποιος θέλει βοήθεια σε προγραμματισμό, ειδικα σε Java ή Basic, ας αφήσει ένα σχόλιο με το προβλημα του και θα προσπαθήσω σύντομα να βοηθήσω ;-)

Παρασκευή 15 Ιουνίου 2007

Τι ειναι η Java

Εγώ ειμαι ο Γιώργος, αλλα ποια είναι η Java?

Λοιπον, η Java [ελληνιστί Ιάβα] ειναι [από οσο ξέρω δηλαδή] δύο πραγματα
  1. το πρώτο ειναι ένα "νησάκι" κάπου στην Ινδονησία.
  2. Αλλά για εμένα όπως και για πάρα πολλους προγραμματιστές είναι η αγαπημένη γλώσσα προγραμματισμού. Η οποία έκανε τα πρώτα δειλά βήματα την δεκαετία του '90 [όπου σχεδόν κανείς δεν της έδινε σημασια, καθώς ήταν ένα μικρο βρέφος] αλλα σήμερα έχει κανει πάταγο.
Αλλα τι το ιδιαίτερο έχει η Java;
Η Java ειναι μια γλώσσα προγραμματισμού που σχεδιάστηκε ώστε να μπορεί ο κωδικας να εκτελείται σε "οποιοδήποτε" μηχανημα, ασχετα απο το σε τι πλατφορμα τρέχει, χωρις τροποποιήσεις [Στην αρχή, αλλα και τώρα, έχει το χαρακτηριστικο "WORA" {=Write Once, Run Anywhere}]. Το οποίο βέβαια δεν το έχει απόλυτα γιατι η κάθε πλατφορμα προσφέρει κάποια επιπλέον χαρακτηριστικά που οι προγραμματιστές θέλουν να χρησιμοποιήσουν, οποτε καταλήγει να γράφουν μεν Java αλλα με συγκεκριμένες προδιαγραφές...Αλλα ας μην αρχίσω τα τεχνικά [καθώς θα μπορούσα να μιλάω χρονια για τεχνικά θέματα].. Να σημειωσω εδώ ότι έχω πάντα κάθε διαθεση να βοηθήσω οποιον έχει αποριες για Java [ή να φτιάξω προγραμματα, με αναλογο κόστος{όχι πάντα οικονομικό!}]

ΥΓ: Αν δεχτώ σχόλια που να ζητάτε το οτιδήποτε τεχνικό ή να γράψω καποιο κώδικα, θα κάνω post ώστε κι αλλοι να μπορούν να το αξιοποιήσουν..

Java Technology [SUN]
Java (Programming Language) [wikipedia]

LinkWithin

Blog Widget by LinkWithin

Mobile edition