Papakaliati Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 9/10 Αυτή η αντίληψη πρέπει να σταματήσει. Αν σε δουλειές που σου αναθέτουν κοιτάς να κάνεις γενικά πράγματα (μήπως χρειαστεί στην κοινωνία) τότε το' χασες το παιχνίδι. Το μόνο που θα καταφέρεις είναι να αργείς/χάνεις χρόνο για κάτι που δεν έχει νοήμα. Στο λέω εγώ που πάντα κοίταγα το ποιο βέλτιστο και να έχει χρήση και αλλού. Είναι κουραστικό και δεν έχει νόημα. Τώρα αν μιλάμε για βιβλιοθήκες γενικού σκοπού ή κάτι στον ελεύθερο σου χρόνο (όχι εργασία δηλαδή), τότε συμφωνώ! Ειναι τελειως διαφορετικο το να φτιαξεις το προγραμμα σου με τον σωστο τροπο, ωστε να ειναι ευκολα επεκτασιμο και τελειως διαφορετικο να προσθεσεις features που δεν ζητηθηκαν. Δεν μιλαμε να σου ζητησει καποιος να κανεις sort μια λιστα 5 στοιχειων και εσυ να προσθεσεις και τριστιαστατη απεικονιση των δεδομενων... Αλλα να υλοποιησεις την λιστα για ν στοιχεια γιατι ειναι μαθηματικα σιγουρο οτι ειτε τα στοιχεια θα γινουνε περισσοτερα, ειτε θα χρειαστεις την συγκεκριμενη μεθοδο ξανα στο μελλον, ειτε απλα επειδη ετσι προτεινουνε τα guidelines να το κανεις ( τα οποια δεν ξυπνησε μια μερα καποιος και σκαρφιστηκε το SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) , εγινε μετα απο πολυ επιπονο trial and error). Δεν λεμε τυφλη υπακοη στα guidelines, αλλα ειναι εξαιρετικα σημαντικο να κατσεις να σκεφτεις για ποιο λογο τα προτεινανε. Food for thought δηλαδη παρα follow blindly. Προσωπικη μου αποψη οτι αμα ασχοληθεις επαγγελματικα και να μην στα μαθει καποιος, θα το αναζητησεις μονος σου οταν θα αποχτησεις λιγη εμπειρια και θα κοιταξεις τα πραγματα λιγο πιο σφαιρικα και θα συχαθεις τον ευατο σου οταν κοιτας code που ειχες κανει λιγες βδομαδες πριν και δεν καταλαβαινεις τι γινεται επειδη το εχεις σχεδιασει οπως σου κατεβαινε εκεινη την στιγμη. Στην τελικη ο καθηγητης φαινεται να κανει αυτο ακριβως που πρεπει να κανει. Και ενα 10χρονο μπορει να σκεφτει να κανει 3 if στην σειρα , το θεμα ειναι να πας στην σχολη να μαθεις εναν τροπο σκεψης.
migf1 Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Παν μέτρο άριστον, που έλεγαν και οι προγόνοι μας. Και οι 2 προσεγγίσεις έχουν τα συν και τα πλην τους, εναπόκειται στην εμπειρία του εκάστοτε developer να επιλέξει πότε (και που) θα χρησιμοποιήσει τη μια και πότε την άλλη. Και λάθος να κάνει, θα συσσωρεύσει γνώση για την επομενη φορά. 1
Papakaliati Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Παν μέτρο άριστον, που έλεγαν και οι προγόνοι μας. Και οι 2 προσεγγίσεις έχουν τα συν και τα πλην τους, εναπόκειται στην εμπειρία του εκάστοτε developer να επιλέξει πότε (και που) θα χρησιμοποιήσει τη μια και πότε την άλλη. Και λάθος να κάνει, θα συσσωρεύσει γνώση για την επομενη φορά. Ελα ομως που η γενικη λυση δεν εχει κανενα πλην και ειναι πιο συντομη και ευαναγνωστη απο το να κανεις 15 ifs... (Σε ποιο απο τα δυο πιστευεις αληθεια ειναι πιο ευκολο να εχεις λάθος και αν εχεις κανει λαθος να σου παρει ωρες να το βρεις; ) Επισης αμα η δευτερη λυση παρει 9/10 η πρωτη ποσο πρεπει να παρει, 15/10; for (int i = 0; i < arr.length; i++) for (int j = i + 1; j < arr.length; j++) { int tmp = 0; if (arr[i] > arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } vs max=a if max<b: max=b if max<c: max=c if a<b<max: mid=b if a<c<max: mid=c if b<a<max: mid=a if b<c<max: mid=c if c<a<max: mid=a if c<b<max: mid=b if a<mid<max: min=a if b<mid<max: min=b if c<mid<max: min=c PS : Ειναι στανταρακι οτι ο καθηγητης εκανε αναφορα στην ταξη για τροπος sorting αριθμων. Ειναι κλασικοτατο παραδειγμα.
migf1 Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Το σχόλιό μου ήταν γενικότερο (όχι δλδ ειδκά για τη συγκεκριμένη άσκηση του νήματος). Γενικώς ισχύει πως η υλοποίηση της γενίκευσης (generalization) είναι αντιστρόφως ανάλογη της ταχύτητας και της πολπυπλοκότητας υλοποίησης της εξειδίκευμένης περίπτωσης (ενδεχομένως με κάποιες εξαιρέσεις, αλλά ο κανόνας είναι το παραπάνω).
Papakaliati Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Το σχόλιό μου ήταν γενικότερο (όχι δλδ ειδκά για τη συγκεκριμένη άσκηση του νήματος). Γενικώς ισχύει πως η υλοποίηση της γενίκευσης (generalization) είναι αντιστρόφως ανάλογη της ταχύτητας και της πολπυπλοκότητας υλοποίησης της εξειδίκευμένης περίπτωσης (ενδεχομένως με κάποιες εξαιρέσεις, αλλά ο κανόνας είναι το παραπάνω). Με συγχωρεις, αλλα απλα αυτο δεν ισχυει. Η συντομη λυση που καλυπτει την εξειδικευμενη περιπτωση με σκοπο την γρηγορη υλοποιηση ειναι μαθηματικα σιγουρο οτι θα καταλυξει σε προχειροδουλεια και στο μελλον θα το βρεις μπροστα σου και θα το μετανειωσεις. Και αν σκεφτεις οτι την γενικευμενη περιπτωση ειναι εξαιρετικα πιθανο να την χρησιμοποιησεις και σε αλλες περιπτωσεις στο μελλον, το οφελος γινεται πολλαπλασιο.
migf1 Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Με συγχωρεις, αλλα απλα αυτο δεν ισχυει. Η συντομη λυση που καλυπτει την εξειδικευμενη περιπτωση με σκοπο την γρηγορη υλοποιηση ειναι μαθηματικα σιγουρο οτι θα καταλυξει σε προχειροδουλεια και στο μελλον θα το βρεις μπροστα σου και θα το μετανειωσεις. Και αν σκεφτεις οτι την γενικευμενη περιπτωση ειναι εξαιρετικα πιθανο να την χρησιμοποιησεις και σε αλλες περιπτωσεις στο μελλον, το οφελος γινεται πολλαπλασιο. Κάνε αν θέλεις ένα απλό πείραμα: γράψε πρώτα μια ρουτίνα ταξινόνησης που λειτουργεί μονάχα για int, και μετά μετέτρεψέ την να δουλεύει ανεξαρτήτως data-type (primary data-types and not). Αν αισθάνεσαι δυνατός, δοκίμασε να κάνεις και μια που δέχεται το μέγιστο πλήθος των στοιχειων ως όρισμα, και μια που δεν θα το δέχεται, αλλά θα λειτουργεί τελείως γενικευμένα. Πόσταρε στο φόρουμ αν θέλεις τα συμπεράσματα της μεταξύ τους σύγκρισης ΥΓ. Πρότεινα ταξινόμηση, επειδή σε αυτήν αναφέρθηκες κι εσύ.
ZAKKWYLDE Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Όπως και να έχει το σημαντικό είναι το 3/10 να έχει την σωστή τεκμηρίωση και να καταλάβει ο φοιτητής που έχει κάνει το λάθος. Όλοι έχουμε γράψει καφρίλες (ακόμα και στη δουλειά ). Η χαμηλή βαθμολόγηση είναι πολλές φορές πιο χρήσιμη απο την υψηλή. Δες το σαν ένα χρήσιμο μάθημα και ψάξε να δεις πως θα βελτιωθείς (άλλωστε στη συγκεκριμένη δουλειά αυτή η διαδικασία δεν σταματάει ποτέ). 1
Papakaliati Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Κάνε αν θέλεις ένα απλό πείραμα: γράψε πρώτα μια ρουτίνα ταξινόνησης που λειτουργεί μονάχα για int, και μετά μετέτρεψέ την να δουλεύει ανεξαρτήτως data-type (primary data-types and not). Αν αισθάνεσαι δυνατός, δοκίμασε να κάνεις και μια που δέχεται το μέγιστο πλήθος των στοιχειων ως όρισμα, και μια που δεν θα το δέχεται, αλλά θα λειτουργεί τελείως γενικευμένα. Πόσταρε στο φόρουμ αν θέλεις τα συμπεράσματα της μεταξύ τους σύγκρισης ΥΓ. Πρότεινα ταξινόμηση, επειδή σε αυτήν αναφέρθηκες κι εσύ. Κοιτα οταν μιλαμε για γενικης χρησης δεν εννοουμε να εχεις μια λιστα με αριθμους και να τους βαζεις σε σειρα, και εσυ να φτιαξεις ενα προγραμμα που βαζει στην σειρα πραγματικους, φανταστικους αριθμους, λεξεις σε αλφαβητικη σειρα και γραφικη παρασταση σε καρτεσιανες συντεταγμενες καθως και να σου δινει τον min, max average και 5 ευρω δωρο... Αλλα προβλεπετε οτι αμα οι αριθμοι απο 3 γινουνε 5 να μην χρειαζεται να προσθεσεις 50 γραμμες ωστε να δουλεψει η αμα σου δωσει ο χρηστης λεξη να μην κρασαρει το προγραμμα αλλα να πεταξει warning... Οπως ανεφερε και ο ZAKKWYLDE εξαιτιας του βαθμου που πηρε εμαθε 5 νεα χρησιμα πραγματα,που αμα ειχε παρει πχ 7 θα τα αγνοουσε παντελως.
migf1 Δημοσ. 29 Ιουνίου 2015 Δημοσ. 29 Ιουνίου 2015 Κοιτα οταν μιλαμε για γενικης χρησης δεν εννοουμε να εχεις μια λιστα με αριθμους και να τους βαζεις σε σειρα, και εσυ να φτιαξεις ενα προγραμμα που βαζει στην σειρα πραγματικους, φανταστικους αριθμους, λεξεις σε αλφαβητικη σειρα και γραφικη παρασταση σε καρτεσιανες συντεταγμενες καθως και να σου δινει τον min, max average και 5 ευρω δωρο... Δεν νομίζω πως υπάρχει στοιχειωδώς σοβαρός προγραμματιστής που να εκλαμβάνει τη γραφική παράσταση σε καρτεσιανό, τον υπολογισμό min, max, average και 5 ευρώ δώρο ως γενίκευση μιας ρουτίνας ταξινόμησης ακεραίων. Αντίθετα, νομίζω πως ο οποιοσδήποτε στοιχειωδώς σοβαρός προγραμματιστής εκλαμβάνει την type-agnostic ταξινόμηση στοιχείων (είτε είναι πραγματικοί, είτε μιγαδικοί, είτε αλφαριθμητικά, είτε οτιδήποτε) ως γενίκευση μιας ρουτίνας ταξινόμησης ακεραίων. Επίσης, η χρήση & εκμετάλλευση ενός sentinel value που να σηματοδοτεί το τέλος μιας αλληλουχίας στοιχείων, νομίζω αποτελεί κοινό τόπο πως πρόκειται για γενίκευση της εκ των προτέρων γνώσης του μέγιστου πλήθους στοιχείων της αλληλουχίας. Αλλα προβλεπετε οτι αμα οι αριθμοι απο 3 γινουνε 5 να μην χρειαζεται να προσθεσεις 50 γραμμες ωστε να δουλεψει η αμα σου δωσει ο χρηστης λεξη να μην κρασαρει το προγραμμα αλλα να πεταξει warning... Ίσως προβλέπεται όμως και το να μην έχεις την παραμικρή ιδέα εκ των προτέρων πόσο πολλοί θα γίνουν οι αριθμοί στο runtime, και άρα να καλείσαι να τους διαχειριστείς δυναμικά. Όπως έγραψα εξαρχής, υπάρχουν συν και πλην και στις 2 προσεγγίσεις. Είναι δικό σου θέμα, βάσει τις ανάγκες του εκάστοτε πρότζεκτ και της εμπειρίας σου, το πότε (και που) θα στοχεύσεις γενίκευση και πότε (και που) εξειδίκευση. Και κατά κανόνα η γενίκευση χρειάζεται πιο αργό ή/και πιο πολύπλοκο κώδικα από την εξειδίκευση. Οπως ανεφερε και ο ZAKKWYLDE εξαιτιας του βαθμου που πηρε εμαθε 5 νεα χρησιμα πραγματα,που αμα ειχε παρει πχ 7 θα τα αγνοουσε παντελως. Καμία αντίρρηση σε αυτό. Ίσα-ίσα που το επικροτώ κιόλας.
fashion Δημοσ. 26 Αυγούστου 2015 Δημοσ. 26 Αυγούστου 2015 Δεν είμαι καθόλου σκληρός. Γιατί; α) Η ύλη που εξετάζεσαι έχει διδαχτεί. Κάτσε να διαβάσεις β) Για προγραμματισμό θα πρέπει να σου κόβει, αν δεν σου κόβει καλύτερα να το αφήσεις γ) Αν δεν μπορείς να μάθεις τα απόλυτα βασικά, το οποίο είναι λογική και μαθηματικό μυαλό, μην περιμένεις με ένα απλό χαρτί να κάνεις καριέρα. Ο βασικός μισθός και το κουτσά κουτσά στην Ελλάδα μπορεί να δουλέψει. όμως εσύ και αρκετές χιλιάδες ομοιοί σου, που πήρατε/θα πάρετε ένα χαρτί, έχετε αποκλείσει την Ελληνική αγορά σε προγραμματιστές όπως εγώ. Που χωρίς να έχει πτυχίο, αλλά 18 χρόνια καριέρα (13 στο εξωτερικό), δεν μπορεί να βρει δουλειά στην Ελλάδα γιατί δεν έχει ένα χαρτί. Αντίθετα στο εξωτερικό (Αγγλία, Δανία που έχω ιδία εμπειρία) ο ίδιος καθαρίζει το μήνα όσα εσείς βγάζετε το χρόνο, και του κάνουν τεμενάδες για να πάει κάπου να δουλέψει. τοσος κομπλεξισμος που δεν παει αλλοημαρτον σε ο,τι αφορα τη βαθμολογια ο μονος λογος να του βαλε 3 ειναι μονο αν τους υπεδειξε συγκεκριμενο τροπο υλοποιησης
Alithinos Δημοσ. 29 Αυγούστου 2015 Δημοσ. 29 Αυγούστου 2015 (επεξεργασμένο) Καλησπερα παιδια! Οπως καταλαβαινετε ειμαι σε σχολη μηχανικων πληροφορικης και οπως καταλαβαινετε εχω και προγραμματισμο.. Στην εξεταστικη μου ζητηθηκε ενα προγραμμα που να δινω 3 αριθμους και να βγαζει μεγαλυτερο μεσαιο μικροτερο σε Pyhton η javascript... Επελεξα Python διοτι τα πηγαινω πολυ καλυτερα και πηρα στο παρακατω προγραμμα 3/10... εσεις τι βαθμο θα βαζατε μονο απο περιεργεια γιατι το εχω δοκιμασει 1000 φορες και δουλευει ρολοι.. Να πω οτι ειμαι τελείως αρχαριος! print("Δώσε 3 αριθμούς") a=input() b=input() c=input() max=a if max<b: max=b if max<c: max=c if a<b<max: mid=b if a<c<max: mid=c if b<a<max: mid=a if b<c<max: mid=c if c<a<max: mid=a if c<b<max: mid=b if a<mid<max: min=a if b<mid<max: min=b if c<mid<max: min=c print("Τελικό αποτέλεσμα") print(max) print(mid) print(min) Βασικά φίλε Γιώργο, εγώ μαθαίνω προγραμματισμό εδώ και λίγους μήνες, ως αυτοδίδακτος όμως. 1) Το πρώτο που παρατήρησα είναι ότι δεν έχεις υπολογίσει τα exceptions. Όταν φτιάχνεις ένα πρόγραμμα θα πρέπει να έχεις υπόψη σου πως επειδή εσύ, ο δημιουργός του, ξέρεις πως να το χειριστείς, δεν σημαίνει ότι απαραίτητα θα ξέρει και ο χρήστης. Αυτό σημαίνει πως εσύ, ο προγραμματιστής, πρέπει να μαντέψεις διάφορους τρόπους με τους οποίους θα θελήσουν να χειριστούν το πρόγραμμά σου οι πελάτες, και να προγραμματίσεις το πρόγραμμά σου με τέτοιο τρόπο ώστε... να μη τους κρασάρει το σύστημα! Για παράδειγμα, παίρνεις 3 αριθμούς από το input, αλλά πως είσαι σίγουρος ότι ο πελάτης αντί να πληκτρολογήσει αριθμητικά ψηφία τύπου '2' , '5', '100', δεν θα εισάγει τους αριθμούς ολογράφως, δηλαδή γράφοντας "δύο", "πέντε", "εκατό" ? Άν το κάνει αυτό ο χρήστης, το πρόγραμμα σου θα κρασάρει. Παρομοίως αν ο χρήστης γράψει 5 αριθμούς και όχι 3, κ.ο.κ. Άρα λοιπόν όλα αυτά πρέπει να τα προβλέψεις, και να σχεδιάσεις το πρόγραμμα σου έτσι ώστε να ανταποκρίνεται σε τέτοια σενάρια χωρίς να κρασάρει. Για παράδειγμα αν ο πελάτης έδινε 5 αριθμούς, να του εμφάνιζε το πρόγραμμα ένα μήνυμα του τύπου "Μη δεκτός αριθμός καταχωρήσεων", και ύστερα π.χ. να του ζητούσε να ξανα εισάγει τιμές, μέχρι να τις πετύχει. 2) Το δεύτερο πρόβλημα, είναι η πολυπλοκότητα του αλγόριθμού σου. Ένα πρόβλημα μπορεί να είναι δυνατό να λυθεί με πολλούς διαφορετικούς αλγόριθμους. Το να βρούμε έναν που απλά να 'λειτουργεί' δεν είναι αρκετό. Εκτός κι αν ήδη γνωρίζουμε πως αυτός είναι ο βέλτιστος για τη περίπτωση. Αλλιώς θα πρέπει να βρούμε έναν αριθμό διαφορετικών αλγόριθμων, και να τους συγκρίνουμε για να διαλέξουμε τον πιο efficient. Για παράδειγμα ναι μεν με τον αλγόριθμό σου βρίσκεις ποιο είναι το μεγαλύτερο, το μικρότερο, και το μεσαίο, αλλά αυτό το κάνεις με 11 if, και 20 συγκρίσεις! Θα σου δείξω ένα παράδειγμα για το πως θα το έκανα εγώ, στη C#. Υπ' όψιν πως μόνο το συντακτικό αλλάζει, η θεωρία παραμένει η ίδια. int max = 0; int med = 0; int min = 0; Console.WriteLine("Δώσε μου μια τιμή για το a:"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Δώσε μου μια τιμή για το b:"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Δώσε μου μια τιμή για το c:"); int c = Convert.ToInt32(Console.ReadLine()); if (a < b && b < c) { min = a; med = b; max = c; } else if (b < a && a < c) { min = b; med = a; max = c; } else if (c < a && a < { min = c; med = a; max = b; } else if (c < b && b < a) { min = c; med = b; max = a; } else if (b < c && c < a) { min = b; med = c; max = a; } else (a < c && c < { min = a; med = c; max = b; } υ.γ. παρέλειψα εντολές εξόδου και exceptions για να επικεντρωθώ στον αλγόριθμο. Ο παραπάνω κώδικας κάνει ότι έκανε και ο δικός σου, με τη διαφορά του ότι χρησιμοποιεί μάξιμουμ 12 συγκρίσεις αριθμών και όχι 20. Δηλαδή πετυχαίνει το ίδιο ακριβώς αποτέλεσμα, με λιγότερα βήματα, που σημαίνει πως καταναλώνει λιγότερους πόρους απ' τον επεξεργαστή, και άρα είναι προτιμότερος. Και ίσως να υπάρχουν ακόμα πιο γρήγοροι αλγόριθμοι... Γενικά πρέπει να βρίσκεις τον αλγόριθμο που θα επιτυγχάνει το στόχο ξοδεύοντας όσο το δυνατόν λιγότερους κύκλους επεξεργαστή και μνήμη. Επεξ/σία 29 Αυγούστου 2015 από Alithinos
Giorgos65ert Δημοσ. 29 Αυγούστου 2015 Δημοσ. 29 Αυγούστου 2015 κοιτά Γιώργο άπλα δίνεις στον user να εισάγει 3 αριθμούς τους κάνεις sort σε έναν array και μετά παίρνεις 0,1,2 οπού 0=min,1=mid,2=max δηλαδή κάπως έτσι στα γρήγορα: #!/usr/bin/env python3 def main(): Values = [] print("Δώσε 3 αριθμούς") for i in range(0,3): try: input_value = int(input("δωσε τον {0} αριθμο\n".format(i+1))) except ValueError: print("επιτρεπονται μονο αριθμοι...") return 0 else: Values.append(input_value) Final(Values) def Final(Values): Values.sort() print("Min -> {0}".format(Values[0])) print("Mid -> {0}".format(Values[1])) print("Max -> {0}".format(Values[2])) if __name__ == "__main__": main() edit: βάλε και τα tabs που χρειάζεται γιατί για κάποιο λόγο δεν τα έβαλε.
defacer Δημοσ. 30 Αυγούστου 2015 Δημοσ. 30 Αυγούστου 2015 Γενικά πρέπει να βρίσκεις τον αλγόριθμο που θα επιτυγχάνει το στόχο ξοδεύοντας όσο το δυνατόν λιγότερους κύκλους επεξεργαστή και μνήμη. Η συμβουλή που δίνεις είναι μεν καλοπροαίρετη αλλά πάρα μα πάρα πολύ επικίνδυνη (επειδή απευθύνεται σε αρχάριο, αλλά πάλι ο έμπειρος δε θα χρειαζόταν τέτοια συμβουλή). Γενικά για εκπαιδευτικούς σκοπούς αυτό που λες ισχύει. Αλλά: Η μινιμαλ χρήση πόρων είναι ένα μόνο από τα επιθυμητά χαρακτηριστικά ενός προγράμματος. Γενικά μιλώντας δεν είναι όμως το σημαντικότερο. Πολύ σημαντικότερα από αυτό είναι το να είναι το πρόγραμμα κατανοητό, σωστό και εμφανώς σωστό. "Premature Optimization is the root of all evil in programming", "It is far, far easier to make a correct program fast than it is to make a fast program correct". Πολλές (σχεδόν όλες) φορές, όπως εδώ, δεν έχει καμία πρακτική σημασία το πόση μνήμη και cpu χρησιμοποιείς. Σε επίπεδο αρχαρίου μπορείς να εκτιμήσεις το αργό/γρήγορο με το μάτι, αλλά σε επίπεδο CPU cycles ούτε λόγος γιατί δεν ξέρεις αρκετά ούτε για να το μετρήσεις αυτό. My point is: υπάρχουν πολύ σημαντικότερα πράγματα τα οποία θα έπρεπε να απασχολούν τον αρχάριο, όπως φάνηκε και από το συγκεκριμένο thread. 5
Alithinos Δημοσ. 30 Αυγούστου 2015 Δημοσ. 30 Αυγούστου 2015 Η συμβουλή που δίνεις είναι μεν καλοπροαίρετη αλλά πάρα μα πάρα πολύ επικίνδυνη (επειδή απευθύνεται σε αρχάριο, αλλά πάλι ο έμπειρος δε θα χρειαζόταν τέτοια συμβουλή). Γενικά για εκπαιδευτικούς σκοπούς αυτό που λες ισχύει. Αλλά: Η μινιμαλ χρήση πόρων είναι ένα μόνο από τα επιθυμητά χαρακτηριστικά ενός προγράμματος. Γενικά μιλώντας δεν είναι όμως το σημαντικότερο. Πολύ σημαντικότερα από αυτό είναι το να είναι το πρόγραμμα κατανοητό, σωστό και εμφανώς σωστό. "Premature Optimization is the root of all evil in programming", "It is far, far easier to make a correct program fast than it is to make a fast program correct". Πολλές (σχεδόν όλες) φορές, όπως εδώ, δεν έχει καμία πρακτική σημασία το πόση μνήμη και cpu χρησιμοποιείς. Σε επίπεδο αρχαρίου μπορείς να εκτιμήσεις το αργό/γρήγορο με το μάτι, αλλά σε επίπεδο CPU cycles ούτε λόγος γιατί δεν ξέρεις αρκετά ούτε για να το μετρήσεις αυτό. My point is: υπάρχουν πολύ σημαντικότερα πράγματα τα οποία θα έπρεπε να απασχολούν τον αρχάριο, όπως φάνηκε και από το συγκεκριμένο thread. Χμμ... κατάλαβα! Το θέμα είναι πως και εγώ αρχάριος είμαι, αλλά όπως είπα σε άλλο ποστ, μαθαίνω μόνος μου. Και αυτό εκ των πραγμάτων με οδηγεί στο να μαθαίνω κάποια πράγματα με διαφορετική σειρά από αυτή που θα τη μάθαινα π.χ. σε μια σχολή, και για αυτό πιστεύω και το σχόλιο που έκανα φάνηκε σωστό μεν επί της ουσίας του, αλλά σε λάθος χρονική στιγμή / απευθυνόμενο σε λάθος παραλήπτη. Να για παράδειγμα, σε 3 μήνες απ' όταν ξεκίνησα γενικά να μαθαίνω, άρχισα να μαθαίνω για τις δομές δεδομένων και τους σχετικούς αλγόριθμους, μιλώντας όμως με έναν φίλο μου που πάει σε σχολή, μου είπε πως αυτά τα έκαναν προς το τέλος της διάρκειας φοίτησης. Το μεγαλύτερο πρόβλημα που έχω αντιληφθεί πως αντιμετωπίζω ως αυτοδίδακτος είναι το ότι προσπαθώ να μάθω τα διάφορα που χρειάζεται 'μπερδεμένα' και όχι με αυτή που φαίνεται να είναι η 'σωστή' σειρά. Και έτσι μου τυχαίνει π.χ. να προσπαθώ να διαβάσω και να μάθω κάτι, και να μη μπορώ να το καταλάβω, να το παρατάω προσωρινά, να επικεντρώνομαι στο να μάθω κάτι άλλο, και καθώς / αφού διαβάσω αυτό το άλλο να έχω στιγμές έκπληξης του τύπου "Α ώστε αυτό εννοούσε!!!", και έτσι όταν επιστρέψω στο να διαβάσω αυτό που πριν μου φαινόταν ακατανόητο, να μου φαίνεται παιχνιδάκι. Για παράδειγμα έμαθα πρώτα το τι είναι το struct, και πως να το χρησιμοποιώ, χωρίς να έχω μάθει αρκετά για τις classes, με αποτέλεσμα να προσπαθώ να χρησιμοποιήσω ένα struct, με τρόπο που χρησιμοποιείται μια κλάση, μη μπορώντας φυσικά να χρησιμοποιήσω τελικά το struct για το σκοπό που το ήθελα, πράγμα που με οδήγησε σε απόγνωση και άγχος. Ύστερα από μερικές μέρες όμως διάβασα περισσότερο για τις κλάσεις και κατάλαβα πως αυτό το χαρακτηριστικό που έλειπε από ένα struct αλλά το χρειαζόμουν, το είχε η κλάση, και άρα απλά θα έπρεπε να φτιάξω μια κλάση. Και άμα είχα διαβάσει πρώτα για τις κλάσεις και ύστερα για τα structs, θα γλίτωνα χρόνο και άγχος...
migf1 Δημοσ. 30 Αυγούστου 2015 Δημοσ. 30 Αυγούστου 2015 ... Το μεγαλύτερο πρόβλημα που έχω αντιληφθεί πως αντιμετωπίζω ως αυτοδίδακτος είναι το ότι προσπαθώ να μάθω τα διάφορα που χρειάζεται 'μπερδεμένα' και όχι με αυτή που φαίνεται να είναι η 'σωστή' σειρά. ... Όντως, αυτό είναι ένα από τα βασικά προβλήματα της αυτοδίδακτης εκμάθησης. Μπορεί να μετριαστεί (έως και να εξαλειφθεί) αν η πηγή εκμάθησης είναι καλή.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα