Εισαγωγή στον Προγ/μό Υπολογιστών Διαλέξεις 1-2 Διδάσκων: Μιχάλης Τίτσιας
Εισαγωγική διάλεξη 1.7 Μια σύντομη επισκόπηση της ιστορίας των υπολογιστών 1.1 Τι είναι η πληροφορική; 1.2 Μια σύντομη περιήγηση του υλικού του υπολογιστή 1.3 Αλγόριθμοι 1.4 Τα στάδια του προγραμματισμού 1.5 Η Java και το αντικειμενοστραφές μοντέλο 1.6 Η Java και το World Wide Web 1.0 Βασικές πληροφορίες για το μάθημα
Διδάσκοντες Μιχάλης Τίτσιας – Γραφείο: Κορδιγκτώνος 12, 5 ος όροφος – Ώρες γραφείου: Τρίτη 2-3μμ, Τετάρτη 2-3μμ Χρήστος Καλέργης Κωστής Καρόζος Νάντια Μακρυνιώτη Μαρία Τογαντζή Δημήτρης Τομαράς
Επικοινωνία !!!Εγγραφείτε στο μάθημα στο eclass ( – Πληροφορίες, ανακοινώσεις – Διαφάνειες διαλέξεων – Εκφώνηση & παράδοση ασκήσεων – Βοηθητικό υλικό (π.χ., Java) – Ερωτηματολόγιο Απορίες; 1.Ρωτάτε στο forum του μαθήματος (στο eclass) 2.Ελάτε στις ώρες γραφείου
Διαλέξεις Δυο εβδομαδιαίες διαλέξεις Τρίτη 11: :00 Τετάρτη 11: :00 Δεν γίνονται φροντιστήρια σε αυτό το μάθημα (αγνοήστε την ώρα φροντιστηρίου που εμφανίζεται στο πρόγραμμα στην κεντρική σελίδα του aueb!!)
Εργαστήρια 8 εργαστηριακά τμήματα 6 τμήματα Πρωτοετών (Πέμπτη και Παρασκευή) 2 τμήματα για μεγαλύτερα έτη (Δευτέρα και Τρίτη) Δείτε το eclass. Γραφτείτε ΑΜΕΣΑ στα εργαστήρια!!
Τρόπος βαθμολόγησης Αν είστε πρωτοετείς: 3 σειρές προγραμματιστικών ασκήσεων Α = βαθμός ασκήσεων (άριστα =10) Ε = βαθμός εργαστηρίου (άριστα =10) Δ = βαθμός τελικής εξέτασης (άριστα=10) Τελικός βαθμός Τ= 0,6Δ + 0,2Α+0,2Ε, εάν Δ>=5 = Δ, εάν Δ<5 Προβιβάσιμος βαθμός: T>= βάση = 5
Τρόπος βαθμολόγησης Αν δεν είστε πρωτοετείς: Οι 3 σειρές προγραμματιστικών ασκήσεων είναι για σας προαιρετικές Αν επιλέξετε να παραδώσετε εργασίες τότε βαθμολογείστε όπως και οι πρωτοετείς (δες προηγούμενη διαφάνεια) Διαφορετικά βάσει Ε = βαθμός εργαστηρίου (άριστα =10) Δ = βαθμός τελικής εξέτασης (άριστα=10) Τελικός βαθμός Τ= 0,8Δ + 0,2Ε, εάν Δ>=5 = Δ, εάν Δ<5 Προβιβάσιμος βαθμός: T>= βάση = 5
Συγγράμματα 1.«Η Τέχνη και Επιστήμη της JAVA: Μια εισαγωγή στην Επιστήμη των Υπολογιστών», E. Roberts, «Πλήρες Εγχειρίδιο της Java 6», C. Rogers, L. Laura, «Προγραμματισμός με JAVA», Ι. Κάβουρας, Α. Ρουκουνάκη, κωδικός στον εύδοξο: «Εισαγωγή στη JAVA», Γ. Λιακέας, 13681
Πληροφορική Το κύριο αντικείμενο της Πληροφορικής δεν είναι η μελέτη των Η/Υ
Πληροφορική Το κύριο αντικείμενο της Πληροφορικής δεν είναι η μελέτη των Η/Υ Είναι η μελέτη της επίλυσης προβλημάτων των οποίων οι λύσεις τυχαίνει να χρησιμοποιούν υπολογιστές. Π.χ., αλφαβητική ταξινόμηση ονομάτων Η Πληροφορική βασίζεται σε μια σειρά από διανοητικές ικανότητες που περιλαμβάνει πτυχές των μαθηματικών και άλλων κλασικών θετικών επιστημών. # ονομάτωνταχύτηταΌχι έξυπνος τρόπος Λίγο πιο έξυπνος τρόπος 10χωρίς Η/Υ≈ 42 μέρες≈ 1,7 λεπτά 100Η/Υ (PC)≈ 3· αιώνες≈ 100 nanosec
Η παρουσία της πληροφορικής Υπολογιστικά προβλήματα: πρόβλεψη καιρού, δρομολόγηση τρένων, ταυτοποίηση γονιδίων στο DNA, κρυπτογραφία, εύρεση διαδρομών Η πληροφορική διαδραματίζει όλο και πιο σημαντικό ρόλο και σε άλλους κλάδους: –Βιολογία. Κατέστησε δυνατή η χαρτογράφηση του ανθρώπινου γονιδιώματος. –Οικονομία. Επιτρέπει τη δημιουργία καλύτερων οικονομικών μοντέλων. –Ψυχολογία. Η τεχνητή νοημοσύνη μας βοηθά να κατανοήσουμε τον ανθρώπινο εγκέφαλο. –Περιβάλλον. Τα κλιματικά μοντέλα απαιτούν σύγχρονη τεχνολογία των υπολογιστών. –και στους περισσότερους αλλους τομεις...
Αρχιτεκτονική Η/Υ Γλώσσα μηχανής = Εντολές CPU: – ανάγνωση/εγγραφή θέση μνήμης – αριθμητικές πράξεις – Επιλογή θέσης μνήμης επόμενης εντολής CPU (κεντρική μονάδα επεξεργασίας) μνήμη συσκευές εισόδου/εξόδου δίκτυο δίαυλος (σχήμα του Eric Roberts (Stanford)) δευτερεύουσα μνήμη
Αλγόριθμοι Ένα μεγάλο μέρος της Επιστήμης των Υπολογιστών περιλαμβάνει τη μελέτη των αλγορίθμων. Με απλά λόγια, μπορείτε να σκεφτείτε έναν αλγόριθμο απλά ως μια διαδικασία για την επίλυση ενός προβλήματος. Για την κάλυψη ενός πιο επίσημου ορισμού του, ένας αλγόριθμος πρέπει να είναι: –Σαφώς και επακριβώς καθορισμένος. –Αποτελεσματικός, υπό την έννοια ότι τα βήματα του είναι εκτελέσιμα. –Πεπερασμένος, με την έννοια ότι τερματίζει μετά από ένα πεπερασμένο αριθμό βημάτων.
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα αταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα ταξινομημένη στοίβααταξινόμητη στοίβα ?
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα ταξινομημένη στοίβααταξινόμητη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα Τέλος! Η τράπουλα ταξινομήθηκε. ταξινομημένη στοίβα
Ταξινόμηση τράπουλας Δεδομένα = μη ταξινομημένη τράπουλα 1.Επιλογή πάνω φύλλου από τη μη ταξινομημένη στοίβα 2.Εισαγωγή στην ταξινομημένη στοιβα με τη σωστή σειρά 3.Επανάληψη των 1,2 μέχρι να μη μείνουν αταξινόμητα φύλλα Mέθοδος λύσης = αλγόριθμος ταξινομημένη στοίβα
Προγραμματισμός Υπολογιστών Υλοποίηση αλγορίθμου = προγραμματισμός Απαιτείται η χρήση γλώσσας προγραμματισμού Π.χ., στη γλώσσα Java: void sort(int[] A) { for(int i = 1; i = 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } }
Προγραμματισμός Υπολογιστών Π.χ., στη γλώσσα C ή C++: void sort(int A[], int length) { for(int i = 1; i = 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } }
Προγραμματισμός Υπολογιστών Π.χ., στη γλώσσα Scheme: (define (sort sent) (if (empty? sent) ‘() (insert (first sent) (sort (bf sent)) ))) (define (insert num sent) (cond ((empty? sent) (se num)) ((< num (first sent)) (se num sent)) (else (se (first sent) (insert num (bf sent)))) ))
Τα στάδια του προγραμματισμού Κάθε σύστημα υπολογιστή καταλαβαίνει μια χαμηλού επιπέδου γλώσσα που είναι συγκεκριμένη για το είδος του υλικού, αυτή ονομάζεται γλώσσα μηχανής. Οι προγραμματιστές γράφουν συνήθως τα προγράμματά τους σε μία γλώσσα υψηλότερου επίπεδου, που είναι πιο εύκολο για τους ανθρώπους να κατανοήσουν. Η εγγραφή ενός προγράμματος σημαίνει την δημιουργία ενός αρχείου πηγαίου κώδικα (source file) που είναι ουσιαστικά «κείμενο» που ακολουθεί του κανόνες του συντακτικού της γλώσσας προγραμματισμού. Για να εκτελεστούν προγράμματα γραμμένα σε μια γλώσσα υψηλότερου επίπεδου, ο υπολογιστής πρέπει να υιοθετήσει μία από δύο στρατηγικές: –Compilation (μεταγλώττιση): Η κλασική αυτή προσέγγιση μεταφράζει το σύνολο του πηγαίου κώδικα της υψηλότερου επιπέδου γλώσσας σε γλώσσα μηχανής. Η διαδικασία αυτή δημιουργεί ένα μοναδικό εκτελέσιμο αρχείο (executable file). –Interpretation (διερμηνεία): Αυτή η δεύτερη προσέγγιση δεν δημιουργεί ένα εκτελέσιμο αρχείο, αλλά προσομοιώσει κατά κάποιο τρόπο την διαδικασία του προγράμματος, διαβάζοντας την δομή του και εκτελώντας τις αναγκαίες λειτουργίες καθώς προχωρά.
Τα στάδια του προγραμματισμού Για να εκτελεστούν προγράμματα γραμμένα σε μια γλώσσα υψηλότερου επίπεδου, ο υπολογιστής πρέπει να υιοθετήσει μία από δύο στρατηγικές: –Compilation (μεταγλώττιση): Η κλασική αυτή προσέγγιση μεταφράζει το σύνολο του πηγαίου κώδικα της υψηλότερου επιπέδου γλώσσα σε γλώσσα μηχανής. Η διαδικασία αυτή δημιουργεί ένα μοναδικό εκτελέσιμο αρχείο (executable file). –Interpretation (διερμηνεία): Αυτή η δεύτερη προσέγγιση δεν δημιουργεί ένα εκτελέσιμο αρχείο, αλλά προσομοιώσει κατά κάποιο τρόπο την διαδικασία του προγράμματος, διαβάζοντας την δομή του και εκτελώντας τις αναγκαίες λειτουργίες καθώς προχωρά. Η Java χρησιμοποιεί μια υβριδική στρατηγική: –Τα προγράμματα γίνονται compiled σε ενδιάμεση γλώσσα που χρησιμεύει ως η γλώσσα μηχανής για την Java Virtual Machine (JVM). –Μετά η Java ερμηνεύει τα προγράμματα, προσομοιώνοντας το JVM.
Προγραμματισμός Υπολογιστών void sort(int[] A) { for(int i = 1; i < A.length; i++) { int value = A[i]; int j = i - 1; while(j >= 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } }
Προγραμματισμός Υπολογιστών Οι Η/Υ δεν «καταλαβαίνουν» καμμία γλώσσα προγραμματισμού εκτός τη γλώσσα μηχανής. = εντολές «χαμηλού επιπέδου» της CPU void sort(int[] A) { for(int i = 1; i < A.length; i++) { int value = A[i]; int j = i - 1; while(j >= 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } } ? x
Προγραμματισμός Υπολογιστών void sort(int A[], int length) { for(int i = 1; i < length; i++) { int value = A[i]; int j = i - 1; while(j >= 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } } Μεταγλωττιστής C για PC γλώσσα μηχανής PC
Προγραμματισμός Υπολογιστών void sort(int A[], int length) { for(int i = 1; i < length; i++) { int value = A[i]; int j = i - 1; while(j >= 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } } Μεταγλωττιστής C για PC γλώσσα μηχανής PC Mac
Προγραμματισμός Υπολογιστών void sort(int A[], int length) { for(int i = 1; i < length; i++) { int value = A[i]; int j = i - 1; while(j >= 0 && A[j] > value) { A[j + 1] = A[j]; j = j - 1; } A[j + 1] = value; } } Μεταγλωττιστής C για PC γλώσσα μηχανής PC Μεταγλωττιστής C για Mac γλώσσα μηχανής Mac Mac
Η διαδικασία της μεταγλώττισης #include main() { printf("hello\n"); } Compiler (μεταγλωττιστής) source file (πηγαίος κώδικας) object file other object files and libraries executable file (εκτελέσιμο αρχείο) linker
Ο διερμηνέας της Java import acm.program.*; public class Hello public void run() { println("hello"); } CA FE BA BE A C B 4C 6A 61 compiler source file class file D 00 1F F A A C C other class files CA FE BA BE A C B 4C 6A D 00 1F F A A C C JAR archive linker JVM Hello hello
Η Java και το αντικειμενοστραφές μοντέλο Οι γλώσσες προγραμματισμού υποστηρίζουν συνήθως ένα συγκεκριμένο στυλ χρήσης, το οποίο ονομάζεται προγραμματιστικό μοντέλο. Παραδοσιακές γλώσσες όπως οι FORTRAN, Pascal και C χρησιμοποιούν το διαδικαστικό (Procedural) μοντέλο, στο οποίο ο προγραμματιστής ορίζει χωριστά τις αλγοριθμικές λειτουργίες και τις δομές δεδομένων. Οι σύγχρονες γλώσσες όπως η Java τείνουν να προκρίνουν το αντικειμενοστραφές μοντέλο όπου δεδομένα και λειτουργίες ενθυλακώνονται σε εννοιολογικά ενιαίες οντότητες που ονομάζονται αντικείμενα. Στην Java, τα προγράμματα γράφονται ως συλλογές τάξεων, οι οποίες χρησιμεύουν ως πρότυπα για μεμονωμένα αντικείμενα. Κάθε αντικείμενο είναι ένα στιγμιότυπο μιας συγκεκριμένης τάξης. Μια τάξη μπορεί να χρησιμεύσει ως πρότυπο για πολλά διαφορετικά αντικείμενα.
Η Java και ο Παγκόσμιος Ιστός Μέρος της επιτυχίας της Java οφείλεται στο γεγονός ότι είναι η πρώτη γλώσσα που έχει σχεδιαστεί ειδικά για να επωφεληθεί από τη δύναμη του World Wide Web, το οποίο εμφανίστηκε λίγο πριν από την κυκλοφορία της Java, το Εκτός από τα παραδοσιακά προγράμματα, η Java δίνει τη δυνατότητα να γράψετε μικρά διαδραστικά προγράμματα που ονομάζονται μικροεφαρμογές (applets) και λειτουργούν υπό τον έλεγχο ενός web browser. Η αρχιτεκτονική του Παγκόσμιου Ιστού έχει εξελιχθεί και οι μικροεφαρμογές δεν έχουν πλέον απήχηση. Θα τις χρησιμοποιήσουμε αποκλειστικά για εκπαιδευτικούς σκοπούς. Τα προγράμματα που θα μάθετε να γράφετε σε αυτό το μάθημα θα λειτουργούν είτε ως εφαρμογές ή ως μικροεφαρμογές, πράγμα που σημαίνει ότι μπορείτε να τα μοιραστείτε εύκολα στο διαδίκτυο.
Τρέχοντας μια μικροεφαρμογή Java Το πρόγραμμα περιήγησης διαβάζει και ερμηνεύει το HTML κώδικα για την ιστοσελίδα. 5. Η εμφάνιση της ετικέτας applet στο HTML αρχείο προκαλεί το πρόγραμμα περιήγησης να κατεβάσει το applet μέσω του δικτύου. 6. Ένα πρόγραμμα επαληθευσης στο πρόγραμμα περιήγησης ελέγχει τη μικροεφαρμογή ωστε να διασφαλίσει ότι δεν παραβιάζει την ασφάλεια του συστήματος του χρήστη. 7. Βήματα που γίνονται από το συντάκτη Ο χρήστης εισάγει τη διεύθυνση URL για τη σελίδα με το applet σε ένα πρόγραμμα περιήγησης στο web. 4. Βήματα που γίνονται από τον Χρήστη Ο συντάκτης της ιστοσελίδας γράφει κώδικα για ένα πρόγραμμα που θα τρέξει σαν applet. 1. /* File: HelloProgram.java */ import acm.graphics.*; import acm.program.*; public class HelloProgram extends GraphicsProgram { public void run() { add(new GLabel("hello, world", 75, 100)); } HelloProgram.java Ο συντάκτης του applet χρησιμοποιεί τον Java compiler για να δημιουργήσει ένα αρχείο που περιέχει το ενδιάμεσο κώδικα για τη μικροεφαρμογή. 2. CA FE BA BE D 00 1F F 07 C A A A 00 5F C C C 72 A C 6A F F 00 FF HelloProgram.jar 3. Ο συντάκτης applet δημοσιεύει μια ιστοσελίδα που περιλαμβάνει μια αναφορά στο compiled applet. HelloProgram <applet archive="HelloProgram.jar" code="HelloProgram.class" width=300 height=150> HelloProgram.html Ο διερμηνέας Java στο πρόγραμμα περιήγησης τρέχει το applet και παράγει την επιθυμητή εμφάνιση στην κονσόλα του χρήστη. 8. HelloProgram hello, world
Μια σύντομη ιστορία των υπολογιστών Αν και οι ηλεκτρονικοί υπολογιστές είναι σχετικά νέοι, οι μηχανικοί υπολογιστές είναι πολύ αρχαιότεροι. Ο άβακας είναι σχεδόν 4000 χρόνων. Τον 17ο αιώνα, αναπτύχθηκαν στην Ευρώπη πολλές μηχανικές συσκευές υπολογιστών. Ανακατασκευή της μηχανής Wilhelm Schickard του 1623 (Deutsches Museum, Munich) Blaise Pascal’s 1641 “Pascaline” machine (Musée des Arts et Metiers, Paris) Ο υπολογιστικός τροχός του Gottfried Wilhelm von Leibniz (~1671) (IBM) Οι σημαντικότερες εννοιολογικές καινοτομίες, όμως, συνέβησαν στις αρχές του 19ου αιώνα...
Η μηχανή του Babbage Charles Babbage ( ) Ο Charles Babbage είναι ένα από τα πιο συναρπαστικά πρόσωπα στην ιστορία των υπολογιστών. Γοητευμένος από την ιδέα ότι θα μπορούσε να φτιάξει μια μηχανή που θα παράγει μαθηματικούς πίνακες, ο Babbage σχεδίασε δύο μηχανές, τη Difference Engine και την Analytical Engine, που προανήγγειλαν πολλά από τα χαρακτηριστικά που συναντάμε στους σύγχρονους υπολογιστές. Αν και ο Babbage δεν μπόρεσε να τελειώσει καμία από τις δυο κατά τη διάρκεια της ζωής του, το Μουσείο Επιστημών του Λονδίνου κατάφερε να κατασκευάσει σε πλήρη κλίμακα μια Difference Engine για την 200η επέτειο από τη γέννησή του.
Ada Byron, ο πρώτος άνθρωπος που προγραμμάτισε Augusta Ada Byron, Lady Lovelace (1815–1852) Η Augusta Ada Byron, κόρη του γνωστού Άγγλου ποιητή Λόρδου Βύρωνα, ενθαρρύνθηκε από την μητέρα της να ασχοληθεί με τα ενδιαφέροντα της, την επιστήμη και τα μαθηματικά, σε μια εποχή που λίγες γυναίκες είχαν τη δυνατότητα να μελετήσουν τέτοια θέματα. Στην ηλικία των 17, η Ada συνάντησε τον Τσαρλς Μπάμπατζ και εντυπωσιάστηκε από της μηχανές του. Η Ada ήταν πεπεισμένη για τις δυνατότητες της Αναλυτικής Μηχανής του Babbage και συνέγραψε εκτενείς σημειώσεις σχετικά με το σχεδιασμό της, καθώς και αρκετά πολύπλοκα μαθηματικά προγράμματα που έχουν οδηγήσει πολλούς ανθρώπους να την χαρακτηρίζουν ως την πρώτη προγραμματίστρια. Το 1980, το Υπουργείο Άμυνας των ΗΠΑ ονόμασε την γλώσσα προγραμματισμού Ada προς τιμή της.
Η Γέννηση του Σύγχρονου Υπολογιστή Η απάντηση στο ερώτημα "ποιος εφηύρε τους σύγχρονους υπολογιστές" δεν είναι εύκολη, λόγω των ανταγωνιστικών αξιώσεων για αυτό το επίτευγμα Το 1939, οι John Atanasoff και Clifford Barry έφτιαξαν έναν πρωτότυπο υπολογιστή στο Iowa State και μια μεγάλη μηχανή το Ο πρώτος μεγάλης κλίμακας υπολογιστής ήταν ο Electronic Numerical Integrator and Computer (ENIAC), που ολοκληρώθηκε το 1946 υπό την καθοδήγηση των J. Presper Eckert και John Mauchly στη Σχολή Moore του Πανεπιστημίου της Pennsylvania. Ο Conrad Zuse στη Γερμανία και η Αγγλική ομάδα κρυπτογραφίας (Bletchley Park) έφτιαξαν επίσης πρώιμους υπολογιστές κατά τον Β‘ Παγκόσμιο Πόλεμο. Άλλες σημαντικές συνεισφορές κατά τα πρώτα έτη περιλαμβάνουν την έννοια του αποθηκευμένου προγράμματος που αποδίδεται γενικά στην John von Neumann και την χρήση κυκλωμάτων μεταγωγής για την δυαδική αριθμητικής απο τον Claude Shannon.
Διάβασμα για το σπίτι Κεφάλαιο 1 από «Η Τέχνη και Επιστήμη της JAVA: Μια εισαγωγή στην Επιστήμη των Υπολογιστών», E. Roberts.