- Εισαγωγή στην ένοια του προγραμματισμού
- Παραδείγματα από την βιολογική "καθημερινότητα" όπου ο προγραμματισμός μπορεί να φανεί χρήσιμος
- Βασικά χαρακτηριστικά της Perl. Γιατί επιλέγουμε την Perl για αυτό το μάθημα;
- Κατεβάζοντας, εγκαθιστώντας και τρέχοντας την Perl
- Βασικές εντολές της γραμμής εντολών
- Γράφοντας ένα πρώτο πρόγραμμα στην Perl
Τι είναι προγραμματισμός;
Τι σημαίνει; Η διαδικασία της συγγραφής, ελέγχου, διόρθωσης και συντήρησης του πηγαίου κώδικα ενός προγράμματος.
Και τι σημαίνει αυτό; Ουσιαστικά, είναι η επικοινωνία με μια μηχανή με σκοπό να την κάνουμε να μας κάνει τη δουλειά μας.
Τι μας χρειάζεται; Η μηχανή (υπολογιστής), ένα περιβάλλον (λειτουργικό σύστημα), ένα σύνολο κανόνων (γλώσσα προγραμματισμού) και το κυριότερο...
ένα πρόβλημα!
Τι είναι πρόγραμμα
Ένα σύνολο δομημένων εντολών μεσα σ' ενα εκτελέσιμο αρχείο που ο υπολογιστής μπορεί να διαβάσει και να εκτελέσει
Τι είναι λειτουργικό σύστημα/περιβάλλον; Η επιφάνεια επικοινωνίας μεταξύ χρήστη και υπολογιστή
Τι είναι γλώσσα προγραμματισμού; Το σύνολο των “γραμματικών” κανόνων που μας επιτρέπουν να επικοινωνήσουμε με τον υπολογιστή
Η τέχνη του Προγραμματισμού.
Για να επιλύσουμε ένα πρόβλημα μέσω προγραμματισμού χρειαζόμαστε:
Στοιχεία ενός προγράμματος
Συστατικά μέρη του κώδικα -της γραμματικής δηλαδή- είναι:
Δοκιμάστε μόνοι σας. Ενα πρόγραμμα σε ψευδοκώδικα:
α. Σκεφτείτε πως θα γράφατε ένα πρόγραμμα που θα έπαιρνε έναν ακέραιο αριθμό Ν και θα υπολόγιζε το άθροισμα Σ=1+2+3....Ν. Πώς θα κάνατε το ίδιο αν αντί για περίοδο=1 η περίοδος της σειράς δινόταν σαν παράμετρος Μ (το άθροισμα σε αυτήν την περίπτωση είναι το Σ=1+(1+Μ)+(1+2Μ)+(1+3Μ)....Ν)
β. Να γράψετε τον ψευδοκώδικα για τον υπολογισμό του παραγοντικού γινομένου Ν! (Π=1*2*3....*Ν)
Καθημερινά προβλήματα που μπορεί να αντιμετωπίσουμε
1. Σας δίνεται ένα αρχείο με δεδομένα αλληλουχιών (π.χ. από ένα πείραμα sequencing)
α) Να βρειτε πόσες αλληλουχίες περιέχονται στο αρχείο
β) Να υπολογίσετε το μήκος της κάθε αλληλουχίας
2. Σας δίνεται μια αλληλουχία και σας ζητείται:
α) Να υπολογίσετε το GC content (G+C%)
β) Να βρειτε την αντίστροφη-συμπληρωματική της (reverse complement)
γ) Να εντοπίσετε μέσα στην αλληλουχία συγκεκριμένα ολιγονουκλεοτιδικά μοτίβα π.χ. σημεία πρόσβασης περιοριστικών ενζύμων.
3. Σας δίνεται ένα αρχείο με δεδομένα γονιδιακής έκφρασης και ζητείται:
α) Να αναφέρετε (γρήγορα) τις 20 πιο υψηλές τιμές του αρχείο
β) Να εντοπίσετε το γονίδιο με την μεγαλύτερη διακύμανση στην τιμή έκφρασης (μεταξύ διαφορετικών συνθηκών)
H Perl είναι μια υψηλού επιπέδου (high-level), δυναμική γλώσσα προγραμματισμού 3ης γενιάς για προστακτικού τύπου προγραμματισμό. To high level σημαίνει πως ο χρήστης (προγραμματιστής) χρησιμοποιεί περισσότερα στοιχεία πραγματικής γλώσσας (λέξεις, φράσεις) για να προγραμματίσει αντί για μια low-level διαδικασία όποτε τα προγράμματα έχουν περισσότερα στοιχεία "γλώσσας μηχανής (Η/Υ)" δηλαδή αριθμούς, δυαδικούς κανόνες κλπ.
H Perl δημιουργήθηκε από τον Larry Wall το 1987 με αρχικό σκοπό την ευκολότερη σύνταξη αναφορών κατά τη διενέργεια προγραμματικών διαδικασιών (report processing).
Χρησιμοποιείται ευρέως στη βιολογία γιατί παρέχει μεγάλες δυνατότητες επεξεργασίας κειμένου χωρίς τους περιορισμούς μνήμης των τυπικών εργαλείων του UNIX από τα οποία προέρχεται (sed, awk, shellscripting sh). Είναι ιδανική για τον χειρισμό μεγάλων αρχείων ομοιόμορφου κειμένου (π.χ. αλληλουχιών) αλλά και γενικότερα μορφών δεδομένων στα οποία οι παρεμβάσεις που θέλουμε να κάνουμε είναι σε επίπεδο χαρακτήρων (π.χ. αναζητήσεις "λέξεων", αντικαταστάσεις στοιχείων κειμένου σε μεγάλη/πλήρη κλίμακα) κλπ.
Λόγω της προσαρμοστικότητας, της ευελιξίας της και της ευκολίας χρήσης της, η Perl ονομάζεται το “Ελβετικό αλυσοπρίονο των Γλωσσών Προγραμματισμού” (swiss chainshaw).
Γιατί είναι απλή στη χρήση. Αρκεί ένας επεξεργαστής κειμένου και ένα απλό λειτουργικό περιβάλλον (DOS, UNIX)
Eγκαθιστώντας την Perl
1. Σε συστήματα Linux είναι προ-εγκατεστημένη. Απλώς γράψτε:
> which perl
στη γραμμή εντολών (shell) για να το επιβεβαιώσετε και
> perl -v
για να δείτε την έκδοση που "τρέχει" το σύστημά σας.
2. Σε συστήματα Mac η Perl είναι επίσης προ-εγκατεστημένη
3. Σε συστήματα Windows δεν έχετε παρά να πάτε εδώ:
https://www.perl.org/get.html
και να κατεβάσετε την αντίστοιχη έκδοση (Αctive-State ή Strawberry δεν διαφέρουν για τις ανάγκες του μαθήματος)
Η γραμμή εντολών σε συστήματα Unix/Linux είναι ο βασικός τρόπος με τον οποίον "τρέχουμε" την εφαρμογή της Perl. Στα Windows υπάρχει η δυνατότητα εκτέλεσης προγραμμάτων (στο εξής scripts) της Perl με "παραθυρικό" τρόπο (κάνοντας δηλαδή click σε εικονίδια) αλλά δεν θα την εξετάσουμε καθώς είναι πολύ κακή πρακτική και δεν επιτρέπει τον απαιτούμενο έλεγχο. Για το λόγο αυτό θα χρησιμοποιήσουμε το σύστημα DOS (command prompt) των windows.
To DOS. Είναι ξεπερασμένο ως λειτουργικό σύστημα αλλά το μόνο που μας επιτρέπει να "τρεξουμε" την Perl στα Windows όπως αρμόζει σε αληθινούς προγραμματιστές (και όχι απλώς χρήστες)
Για σκοπούς επίδειξης θα χρησιμοποιηθεί ένας online emulator : https://jamesfriend.com.au/pce-js/ibmpc-games/ αλλά εφόσον δουλεύετε σε windows μπορείτε απλώς να ανοίξετε το DOS.
- Στα Windows 7. Κάντε click Start και τυπώστε cmd
- Στα Windows 8. Στην οθόνη έναρξης τυπώστε cmd
Εντός του DOS η πλοήγηση γίνεται με εντολές που δίνονται απευθείας από το πληκτρολόγιο. Χρειάζεται να γνωρίζουμε κάποιες βασικές για να "πλοηγηθούμε" μεταξύ των φακέλων μας, να μπορούμε να αντιγράφουμε/μετονομάζουμε αρχεία κλπ.
Κάποιες περισσότερες εντολές του DOS και η χρήση τους
cls (Clear Screen)
cls
καθαρίζει την οθόνη, μας επιστρέφει ένα τερματικό χωρίς τις προηγούμενες εντολές
dir
dir
δίνει μια λίστα με τα αρχεία στον φάκελο που βρισκόμαστε
cd
cd /arxeio1
μας μεταφέρει μέσα στον φάκελο arxeio1 (είναι το ισοδύναμο του διπλού κλικ πάνω σε ένα φάκελο Windows).
cd ..
μας μεταφέρει στον μητρικο φάκελο (είναι το ισοδύναμο του up σε ένα φάκελο των Windows).
copy
copy /arxeio/onoma1.ext /arxeio/onoma2.ext
φτιάχνει ένα αντίγραφο του onoma1.ext στο onoma2.ext
rename
rename onoma1.ext onoma2.ext
μετονομάζει το onoma1.ext σε onoma2.ext
type
type onoma1.ext
Μας δείχνει τα περιεχόμενα του onoma1.ext (ουσιαστικά μας δείχνει το αρχείο)
mkdir
mkdir folder1
Δημιουργεί τον φάκελο folder1 (ισοδύναμο του make new folder στα Windows)
exit
(Internal)
exit
έξοδος από το DOS
Μερικές βασικές συμβουλές/οδηγίες
Πάντοτε αφήνουμε ένα κενό ανάμεσα στην εντολή και στα αρχεία που θέλουμε να χειριστούμε.
Προσέχουμε πάντοτε την “διεύθυνση” στην οποία βρισκόμαστε. Αυτο υποδηλώνει σε ποιο φάκελο του υπολογιστή βρισκόμαστε και φαίνεται στη γραμμή των εντολών. Π.χ. αν βλέπουμε στην οθόνη μας το
>My Documents/BIO494/Lecture1
αυτό σημαίνει πως βρισκόμαστε στον φάκελο Lecture1 που βρίσκεται μέσα στο BIO494 που με τη σειρά του βρίσκεται μέσα στο My Documents.
Με ένα απλό cd .. θα βρεθούμε στο ΒΙΟ494.
>My Documents/BIO494
Δοκιμάστε μόνοι σας
Πλοηγηθείτε μέσω DOS στο επίπεδο που θέλετε μέσα στο λογαριασμό σας και δημιουργήστε ένα φάκελο που θα ονομάσετε BIO494 και μέσα στον οποίο θα εργαζόμαστε στα πλαίσια του μαθήματος.
Μέσα σε αυτόν το φάκελο δημιουργήστε ένα αρχείο που να ονομάζεται "hello.pl" (περισσότερα παρακάτω)
Επεξεργαστές απλού κειμένου (text editors)
Καθόλη τη διάρκεια του μαθήματος θα χρησιμοποιήσουμε έναν απλό text editor για τη συγγραφή των προγραμμάτων μας. Η βασική διαφορά των text editors από τους επεξεργαστές κειμένου (όπως το Word π.χ.) είναι ότι δημιουργούν και επεξεργάζονται κείμενο με τη χρήση μόνο των βασικών ASCII χαρακτήρων, χωρίς αλλα στοιχεία μορφοποίησης (χρώματα, υπογραμμίσεις, γραμματοσειρές κλπ).
Χρειαζόμαστε ASCII χαρακτήρες γιατί το πρόγραμμα που κάνει την εκτέλεση ενός Perl script (η Perl δηλαδή) μπορεί να μεταφράσει μόνο αρχεία που περιέχουν αποκλειστικά τέτοιους χωρίς άλλη μορφοποίηση.
Για τις ανάγκες του μαθήματος συστήνουμε τη χρήση του ΤextPad ή Notepad++ για χρήστες Windows και τους default text editors για τους χρήστες συστημάτων Mac, Linux.
Πριν αρχίσουμε
H συγγραφή ενός προγράμματος είναι ένας διαρκής κύκλος edit-run-revise δηλαδή "γράψε-τρέξε-διόρθωσε". Κατά τη διάρκεια της συγγραφής του προγράμματός δεν ξεχνάμε ποτέ:
α. Να σώζουμε περιοδικά τις αλλαγές που κάνουμε σε οποιοδήποτε αρχείο με την εντολή save.
β. Να βάζουμε σχόλια μέσα στο πρόγραμμα για να μπορούμε να παρακολουθούμε τι κάνουμε σε κάθε στάδιο του προγράμματος. Περισσότερα σε λιγο
2. Το πρώτο πρόγραμμα
Ας αρχίσουμε!
Χρειαζόμαστε, ανοιχτό ένα περιβάλλον γραμμής εντολών (ή το DOS) κι έναν επεξεργαστή κειμένου.
Ανοίγουμε έναν φάκελο με το όνομα μας όπου θα αποθηκέυσουμε το πρόγραμμά μας κι έναν επεξεργαστή κειμένου όπου θα το γράψουμε. Ανοίξτε λοιπόν το hello.pl και ξεκινήστε:
α. Η πρώτη γραμμή κάθε προγράμματος Perl πρέπει υποχρεωτικά να περιέχει αυτό:
#! /usr/bin/perl
H γραμμή αυτή λέει ουσιαστικά στον Η/Υ που θα βρει το πρόγραμμα με το οποίο θα "μεταφράσει" τις εντολές που ακολουθούν. Το πρόγραμμα αυτό είναι ο "μεταφραστής" της Perl (Perl Interpreter) και βρίσκεται στο φάκελο με τα binary executables (τα εκτελεσιμα αρχεία του συστήματος) με το όνομα perl (/usr/bin/perl).
Αμέσως κάτω από αυτήν την πρώτη γραμμή θα ήταν καλό να προσθέσουμε τη γραμμή:
use warnings;
Η γραμμή αυτή λέει στην Perl να αναφέρει στην οθόνη μηνύματα προειδοποίησης όταν κάτι δεν πάει καλά. Θα δείτε στο μέλλον πως είναι ιδιαίτερα χρήσιμο για να εντοπίζουμε λάθη στον κώδικα κατά την εκτέλεσή του. Γενικός κανόνας λοιπόν όλα τα προγράμματά μας να ξεκινούν έτσι:
#! /usr/bin/perl
use warnings;
β. Στις επόμενες γραμμές θα γράψουμε κάποια σχόλια. Τα σχόλια, όπως είδαμε και πιο πάνω είναι απαραίτητα για να μας βοηθούν να καταλάβουμε τι περιέχει το πρόγραμμα, τι input χρειάζεται, τι απαιτήσεις έχει, τι πρόβλημα αποπειράται να λύσει κλπ. Μην είστε φειδωλοί με τα σχόλια γιατί ακόμα κι αν κανείς δεν χρειαστεί να τρέξει το πρόγραμμά σας εκτός από εσάς, θα χρειαστεί πολλές φορές εσείς οι ίδιοι να ξαναθυμηθείτε τι κάνει. Τα σχόλια βοηθούν πάντα. Τα σχόλια εισάγονται γενικά με το σύμβολο "#" στην αρχή μιας γραμμής. Οτιδήποτε ξεκινά με "#" δεν μεταφράζεται ως εντολή από τον interpreter και συνεπώς αποτελεί μόνο σχόλιο για αυτόν που διαβάζει το "σώμα" του προγράμματος. Εισάγετε το παρακάτω σχόλιο στη δεύτερη γραμμή του προγράμματός σας:
# This is my first Perl script
αναλόγως μπορείτε να προσθέσετε κάποια επιπλέον σχόλια π.χ.:
# Ιt prints a simple message on the screen
γ. Στη συνέχεια θα προσθέσουμε την πρώτη μας εντολή στο πρόγραμμα. Θα είναι μια απλούστατη εντολή που θα λέει στην Perl να τυπώσει ένα μήνυμα στην οθόνη:
print "Hellow World!\n";
Η συγκεκριμένη εντολή συνίσταται στην εντολή "print" που είναι η βασική εντολή εκτύπωσης της Perl ακολουθούμενης από τη φράση "Hello World!" η οποία δίνεται μέσα σε διπλά εισαγωγικά. Προσέξτε δύο επιπλέον στοιχεία: 1. Το \n που μπαίνει μέσα στα διπλά εισαγωγικά αντιστοιχεί στην οδηγία εκτύπωσης αλλαγής γραμμής (\n=new line) και είναι αυτή που λέει στην Perl να μην τυπώσει απλώς το "Ηello World!" αλλά αμέσως μετά να αλλάξει γραμμή και να αναμένει οδηγίες σε αυτήν την επόμενη γραμμή. 2. Το ";" στο τέλος της εντολής, που είναι απαραίτητο για κάθε εντολή που γράφουμε. Θα πρέπει να το βάζουμε στο τέλος κάθε γραμμής κώδικα αλλιώς θα προκύπτει σφάλμα κατά την εκτέλεση.
δ. Κλείσιμο του προγράμματος. Αυτό δεν είναι τυπικά απαραίτητο αλλά είναι καλό στο τέλος κάθε προγράμματος να υπάρχει η γραμμή
exit;
η οποία και σηματοδοτεί το τέλος της εκτέλεσής του. Με τον καιρό θα δείτε πως είναι χρήσιμο να υπάρχει μια τέτοια γραμμή που να διαχωρίζει το κυρίως πρόγραμμα από δευτερεύοντα προγράμματα, υπορουτίνες, σχόλια τέλους κλπ.
Αφού έχουμε τελείωσει το πρόγραμμα δεν έχουμε παρά να το σώσουμε με το όνομα του (hello.pl). Ιδιαίτερη προσοχή εδώ καθώς χρησιμοποιώντας τον editor το πιο πιθανό είναι να χρησιμοποιηθεί το default extension (.txt) για τα αρχεία κειμένου. Αυτό πρέπει να αποφευχθεί καθώς τα προγράμματα της Perl πρέπει να είναι μεν αρχεία κειμένου αλλά θα πρέπει να κωδικοποιούνται ως perl scripts με την κατάληξη .pl. Για να εξασφαλίσετε ότι το αρχείο θα σώζεται ως τέτοιο πρέπει να κάνετε την αποθήκευση γράφοντας το όνομα του αρχείου μέσα σε διπλά εισαγωγικά στο πεδίο save us του editor που χρησιμοποιείτε. Η διαδικασία είναι:
> File > Save as > "hello.pl"
Eκτελώντας το πρόγραμμα.
Δεν έχουμε πλέον παρά να επιστρέψουμε στο DOS και αφού πλοηγηθούμε στο φάκελο που περιέχει το πρόγραμμα να τυπώσουμε στην γραμμή εντολών την εντολη εκτέλεσης του προγράμματος:
perl hello.pl
και να πατήσουμε enter
Στην οθόνη εμφανίζεται το μήνυμά μας και έχουμε επιτυχώς γράψει, αποθηκεύσει και εκτελέσει το πρώτο μας πρόγραμμα σε Perl.
1. Να γράψετε τον ψευδοκώδικα για τον υπολογισμό του παραγοντικού Ν
2. Να γράψετε ένα πρόγραμμα Perl που θα τυπώνει το όνομά σας και τον αριθμό μητρώου σας σε δύο διαδοχικές γραμμές.