PDA

Επιστροφή στο Forum : Μαθηματικα και Προγραμματισμος



Σελίδες : 1 2 3 [4] 5

Fuzzy
10-07-08, 01:50
ρε παιδιά, μην πάτε μακριά, κάντε ένα κόπο και διαβαστε αυτό (http://en.wikipedia.org/wiki/Computer_science) Ειδικά στην ανάλυση των διαφόρων τομέων της Πληροφορικής, βασικά μαθηματικά βλέπεις.



Η πληροφορική που ξέρεις εσύ είναι τόση όση υδροδυναμική γνωρίζει ένας υδραυλικός :p Η' να πούμε το ανάλογο ενός κτίστη ή μπετατζή με έναν πολιτικό μηχανικό / αρχιτέκτονα.

Επισης οσο Ηλεκτρισμο γνωριζει ενας Ηλεκτρολογος εγκαταστασεων...οσο Μηχανική γνωριζει ενας Μηχανικος αυτοκινητων, οσο Θερμοδυναμικη γνωριζει ενας τεχνικος εγκαταστασεων κλιματιστικων, οσο Ηλεκτρονικη γνωριζει ενας τεχνικος service κινητων τηλ., οσο αρχιτεκτονικη επεξεργαστων γνωριζει ο τεχνικος υπολογιστων, οσο DSP γνωριζει ο ηχοληπτης κοκ :)

simeon.mattes
10-07-08, 09:18
Επισης οσο Ηλεκτρισμο γνωριζει ενας Ηλεκτρολογος εγκαταστασεων...οσο Μηχανική γνωριζει ενας Μηχανικος αυτοκινητων, οσο Θερμοδυναμικη γνωριζει ε τεχνικος εγκαταστασεων κλιματιστικων, οσο Ηλεκτρονικη γνωριζει ενας τεχνικος service κινητων τηλ., οσο αρχιτεκτονικη επεξεργαστων γνωριζει ο τεχνικος υπολογιστων, οσο DSP γνωριζει ο ηχοληπτης κοκ :)

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

mrsaccess
10-07-08, 09:42
Μπορεί τα μαθηματικά να μη τα χρειαστεί ποτέ απευθείας ένας προγραμματιστής (ανάλογα με τα προγράμματα τα οποία γράφει) αλλά σίγουρα θα κάνει πολύ καλύτερα τη δουλειά του αν είναι καλός σε αυτά.

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

Ωστόσο το δεύτερο σενάριο είναι από όσο έχω δει πιο δύσκολο γιατί τα μαθηματικά σε βοηθούν να συγκροτήσεις τη σκέψη σου και το πιο σημαντικό να τη μάθεις και να τη καταλάβεις.
Μπορεί διαισθητικά να γνωρίζεις τα σύνολα και τη θεωρία από πίσω τους ωστόσο αν δεν έχεις διδαχθεί 5 πράγματα πάνω σε αυτά θα αδυνατείς να τα περιγράψεις και επομένως να τα επεξεργαστείς περαιτέρω στο μυαλό σου.

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

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

anon
10-07-08, 10:45
Επισης οσο Ηλεκτρισμο γνωριζει ενας Ηλεκτρολογος εγκαταστασεων...οσο Μηχανική γνωριζει ενας Μηχανικος αυτοκινητων, οσο Θερμοδυναμικη γνωριζει ενας τεχνικος εγκαταστασεων κλιματιστικων, οσο Ηλεκτρονικη γνωριζει ενας τεχνικος service κινητων τηλ., οσο αρχιτεκτονικη επεξεργαστων γνωριζει ο τεχνικος υπολογιστων, οσο DSP γνωριζει ο ηχοληπτης κοκ :)

Εαν πληροφορικάριο θεωρείς τον "κατσαβιδά" που θα συναρμολογήσει έναν υπολογιστή και θα στήσει Windows και Οffice 'α και ξέρει δυο τρείς ρυθμίσεις για έναν ρούτερ, τότε πάω πάσω. Ναι είναι το ανάλογο του μηχανικού αυτοκινήτων και του ηλεκτρολογου εγκαταστάσεων. Οσο για τον ηχολήπτη, ατυχές το παράδειγμα, η εν λόγω ειδικότητα ασχολείται με τον ήχο αυτόν καθαυτό, και οι υπολογιστές είναι απλά ένα εργαλείο. Δεν χρειάζεται να γνωρίζει DSP. Χρειάζεται όμως άλλα, και που έχουν να κάνουν με την ακουστική κλπ κλπ.

Ισως θα πρέπει να ξεχωρίσουμε τα επίπεδα γιατί γιαυτό τον λόγο γίνεται παρερμηνεία. Ενας απλός τεχνικός που θα κάνει τετριμμένα πράγματα, δεν θα χρειαστεί βαθιές γνώσεις μαθηματικών και πληροφορικής ακόμα. Οταν όμως βλέπω μυνήματα ανθρώπουν που δεν γνωρίζουν πως να συνδέσουν πχ δυο δίκτια μεταξύ τους, ή να ορίσει και πως και με ποιά netmask διάφορα subnets, αυτό σημαίνει μεγάλες ελλείψεις όχι μονο μαθηματικών, αλλά στο ίδιο το τμήμα της πληροφορικής. Οταν πριν χρόνια τεχνικός δεν μπορούσε να βάλει ένα δίσκο SCSI, γιατί δεν καταλάβαινε - δεν ήξερε δυαδική αριθμητική για να τζαμπερώσει ανάλογα και να βάλει το αντίστοιχο SCSI ID (ήταν κάποια εποχή που δεν ηταν αυτόματα αυτά), τότε ναι, μιλάμε για ελλείψεις.

Οπότε ίσως θα πρέπει ορισμένοι να αντιληφθούν ότι εαν λειτουργούν σε ένα πολύ περιορισμένο και χαμηλού επιπέδου τομέα, ναι δεν χρειάζονται ίσως μαθηματικά. Εαν ασχολείται κάποιος με programming, είτε πρέπει να έχει μαθηματικό υπόβαθρο και μάλιστα συγκεκριμένων τομέων οπωσδήποτε, και αυτό δεν σημαίνει απαραίτητα να έχει σπουδάσει μαθηματικός αλλά πρέπει να μάθει μαθηματικά σε κάποιους τομείς. Και εγώ δεν γνωρίζω μετασχηματισμούς Fourrier, σε κάποιους τομείς της πληροφορικής όμως χρειάζονται οπωσδήποτε όπως πχ video codecs. Θεωρώ ότι κάποιος που γράφει SQL (και ποιός πλέον δεν γράφει σε τομείς όπως εμπορικολογιστικά ή web εφαρμογές), πρέπει να μάθει μέχρι ενός σημείου θεωρία συνόλων και σχεσιακή λογική. Τουλάχιστον θα καταλαβαίνει τι κάνει και θα βλέπουμε - πιστεύω - καλύτερα προγράμματα.

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

Το αν αυτό σημαίνει ότι πρέπει οπωσδήποτε να έχεις τελειώσει πανεπιστημιο και ίσως μαθηματικος είναι άτοπο. Σίγουρα κάποιες σπουδές θα βοηθούσαν. Μπορείς να μάθεις και μόνος σου, και υπάρχουν και φωτεινά αν και σπάνια παραδείγματα όπως πχ ο Ramanujan (http://en.wikipedia.org/wiki/Srinivasa_Ramanujan) Σίγουρα να προχωρήσεις μόνος στα μαθηματικά είναι δύσκολο, και ίσως οι κακοί μαθηματικοί που μπορει να είχε κάποιος στην 2βάθμια εκπαίδευση ναναι ένας λόγος, αλλά πάντα υπάρχουν λύσεις σε αυτό. Αρκεί να υπάρχει όρεξη και μεράκι. Και σήμερα υπάρχουν άπειρα πράγματα στο διαδίκτυο για να βοηθηθεί κάποιος.

ΩΜΕΓΑ
10-07-08, 11:53
Προσθέτοντας στα παραπάνω, θα ήθελα να αναφέρω ότι υπάρχουν αρκετοί κλάδοι στον τομέα της πληροφορικής.

Αν θεωρήσουμε ότι είμαστε αρχάριοι και μιλάμε για σοβαρό προγραμματισμό τότε θα πρέπει να συνειδητοποιήσουμε ότι κυρίως είμαστε "ΜΗΧΑΝΙΚΟΙ". Ναι ομοιάζουμε αρκετά με αυτούς που μπορεί να σχεδιάζουν και να κατασκευάζουν κινητήρες αυτοκινήτων ή σχεδιάζουν και κατασκευάζουν πολύπλοκα οικοδομήματα ποικίλων υλικών(σίδερο, σκυρόδερμα, μονωτικά, χάλυβα κτλ).


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

Είναι τυχαίο ότι αυτοί που ασχολούνται με πολύπλοκα κατασκευάσματα, όπως μηχανές και κτίρια, αναγκάζονται να μάθουν πολύ καλά μαθηματικά ; Για τους νεανίες των 80'ς πρώτη δέσμη = μαθηματικά.

Fuzzy
10-07-08, 14:19
Οσο για τον ηχολήπτη, ατυχές το παράδειγμα, η εν λόγω ειδικότητα ασχολείται με τον ήχο αυτόν καθαυτό, και οι υπολογιστές είναι απλά ένα εργαλείο. Δεν χρειάζεται να γνωρίζει DSP. Χρειάζεται όμως άλλα, και που έχουν να κάνουν με την ακουστική κλπ κλπ.

Μπορει να ειναι ατυχες και λιγο υπερβολικο το παραδειγμα, αλλα μηπως καλο ειναι να ξερει τι ειναι sampling για παραδειγμα, low pass, high pass φιλτρα,..., cut off frequency, period, phase, amplitude, εστω για να τα χρησιμοποιησει σωστα! Δεν εννοω να ξερει να σχειδαζει φιλτρα, αλλα εστω και για να τα χρησιμοποιησει καποια θεωρια και βασικα μαθηματικα πρεπει να τα ξερει!


Οταν πριν χρόνια τεχνικός δεν μπορούσε να βάλει ένα δίσκο SCSI, γιατί δεν καταλάβαινε - δεν ήξερε δυαδική αριθμητική για να τζαμπερώσει ανάλογα και να βάλει το αντίστοιχο SCSI ID (ήταν κάποια εποχή που δεν ηταν αυτόματα αυτά), τότε ναι, μιλάμε για ελλείψεις.

A μπραβο, εδω συμφωνω απολυτα! Αν και trivial γνωση αριθμητικης bool, χρειαζεται!

:)

kennyyy
14-07-08, 04:08
Αν δεις πιο κάτω στο άρθρο, θα δεις ότι ο Carmack αρνείται πως αυτός ο κώδικας είναι δικός του, και ο συντάκτης του άρθρου μετά από πολλά e-mails καταλήγει σε έναν άνθρωπο της Nvidia που ήταν από τους ιδρυτές της 3dfx (αρχίζω και καταλαβαίνω γιατί έχουμε εδώ στο ADSLgr.com τέτοιους ενθουσιώδεις οπαδούς -ή μάλλον νοσταλγούς- αυτής της εταιρίας) και μεταπήδησε στην Nvidia με την εξαγορά, τον Gary Tarolli.

Με αυτόν τελειώνει ο συντάκτης επειδή ο Tarolli δεν ξέρει ποιος συγκεκριμένα τον είχε γράψει αλλά τον είχε χρησιμοποιήσει και πειράξει, και επίσης ήταν από αυτούς που τον μετέδωσαν.
Οκ μπορώ να γράψω λάθος αλλά αυτό δεν αναιρεί ότι ο carmack ήταν από τους πρώτους προγραμματιστές που έγιναν rockstars μαζί με άλλους που αναφέρεις. Εντέλει, αποκόλλησε τον κώδικα από το "διαβάζω το api και δουλεύω πάνω του" στο λύνω το πρόβλημα με τον πλέον αποδοτικό τρόπο...

Στα υπόλοιπα συμφωνώ με τον anon πρέπει να διαχωρίσουμε για ποιο πράγμα μιλάμε στο θεμα.

........Auto merged post: kennyyy πρόσθεσε 16 λεπτά και 18 δευτερόλεπτα αργότερα ........


...

Ενα παράδειγμα μόνο θα αναφέρω, πχ την χρήση ιεραρχίας πατέρα-παιδιού ή δενδροειδείς διατάξεις μέσα σε SQL που δεν υποστηρίζονται πλήν της Oracle με ειδική εντολή. Η πιο "όμορφη" λύση για τέτοιες διαδικασίες περιγράφεται στο βιβλίο του Celko, σαν nested sets (απο την θεωρία συνόλων). να και ένα σχετικό άρθρο http://www.sqlteam.com/article/more-trees-hierarchies-in-sql νομίζω ότι οι αδαείς περι μαθηματικών μόνο μια τέτοια λύση δεν θα χρησιμοποιούσαν ακόμα και εαν τους δίδονταν έτοιμη, όπως επίσης έχω δεί χιλιάδες προγράμματα να αγνοούν ή μάλλον να μην μπορούν να χρησιμοποιήσουν recursion, λίστες και άλλες δομές δεδομένων ενώ η μόνη μέθοδος σορταρίσματος είναι η BubbleSort εκτός και εαν χρησιμοποιήσουν κάτι έτοιμο. Δεν λέω ότι ένας προγραμματιστής χωρίς μαθηματικό υπόβαθρο δεν θα γράψει πρόγραμμα. Αλλά κατα κανόνα ελάχιστοι ειναι καλοί προγραμματιστές αυτοί - εξαιρέσεις πάντα υπάρχουν.
Ή κάτι τέτοιο...
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
Γενικά το παράδειγμά σου είναι απλοικό γιατί πολύς κόσμος θέλει να αποθηκεύσει ιεραρχικά δεδομένα, θα μου έκανε εντύπωση αν υπάρχει κόσμος που δεν έχει διαβάσει τέτοια άρθρα και θέλει να υλοποιήσει το digg π.χ...

anon
14-07-08, 10:27
Πάνε μια βόλτα σε όλες τις ελληνικές εταιρίες πληροφορικής, διάλεξε όποια θές, DIS, LOGIC, Singular, Unisoft(Altec) κλπ, και πιάσε αυτούς που δουλεύουν με SQL. Ακόμα χειρότερα πάνε μια βόλτα στους dealers τους που στήνουν και υποτίθεται υποστηρίζουν τα προιόντα τους. Θα πάθεις την πλάκα σου. Μιλάω απο πείρα. Στους 100 ζήτημα οι 2,3 να ξέρουν τι κάνουν... Και το παράδειγμα ήταν απλοικό επίτηδες για ακριβώς αυτόν τον λόγο. Οτι κάτι τόσο απλό (ίσως) και πολύ σύνηθες αντιμετωπίζεται χωρίς γνώση, και όπου γίνεται χρήση πχ nested sets γίνεται με τύπου copy paste όπου ταιριάζει χωρίς κατανόηση γιατι γίνεται έτσι.

simeon.mattes
14-07-08, 11:30
Πάνε μια βόλτα σε όλες τις ελληνικές εταιρίες πληροφορικής, διάλεξε όποια θές, DIS, LOGIC, Singular, Unisoft(Altec) κλπ, και πιάσε αυτούς που δουλεύουν με SQL. Ακόμα χειρότερα πάνε μια βόλτα στους dealers τους που στήνουν και υποτίθεται υποστηρίζουν τα προιόντα τους. Θα πάθεις την πλάκα σου. Μιλάω απο πείρα. Στους 100 ζήτημα οι 2,3 να ξέρουν τι κάνουν... Και το παράδειγμα ήταν απλοικό επίτηδες για ακριβώς αυτόν τον λόγο. Οτι κάτι τόσο απλό (ίσως) και πολύ σύνηθες αντιμετωπίζεται χωρίς γνώση, και όπου γίνεται χρήση πχ nested sets γίνεται με τύπου copy paste όπου ταιριάζει χωρίς κατανόηση γιατι γίνεται έτσι.

:oneup:

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

KLG
14-07-08, 13:19
Δεν το ξερα οτι η Bubblesort είναι μαθηματικά :p

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

Btw είμαστε λίγο off topic, απο που και ως που συγκρίνουμε την πληροφορική με την ειδικότητα "χειριστής Η/Υ" ? Μερικοί "purists" μπορούν να ισχυριστούν οτι ούτε καν το ΙΤ δεν είναι κλάδος της πληροφορικής... θα τους έλεγα οτι συγχέουν το ΙΤ με τον "χειριστή" όμως ;)

A_gamer
14-07-08, 20:07
Πάνε μια βόλτα σε όλες τις ελληνικές εταιρίες πληροφορικής, διάλεξε όποια θές, DIS, LOGIC, Singular, Unisoft(Altec) κλπ, και πιάσε αυτούς που δουλεύουν με SQL. Ακόμα χειρότερα πάνε μια βόλτα στους dealers τους που στήνουν και υποτίθεται υποστηρίζουν τα προιόντα τους. Θα πάθεις την πλάκα σου. Μιλάω απο πείρα. Στους 100 ζήτημα οι 2,3 να ξέρουν τι κάνουν... Και το παράδειγμα ήταν απλοικό επίτηδες για ακριβώς αυτόν τον λόγο. Οτι κάτι τόσο απλό (ίσως) και πολύ σύνηθες αντιμετωπίζεται χωρίς γνώση, και όπου γίνεται χρήση πχ nested sets γίνεται με τύπου copy paste όπου ταιριάζει χωρίς κατανόηση γιατι γίνεται έτσι.

Δε χρειάζεται, διαβάζουμε τον Ζαχαρία. :worthy:
:p


Βέβαια, απο την άλλη υπάρχει κόσμος που αγνοεί την ύπαρξη αρνητικών αριθμών

Ελπίζω να κάνεις πλάκα. Έχεις δει από κοντά τέτοια περίπτωση;


Πάντως μου κάνει εντύπωση οτι κόσμος που δεν καταλαβαίνει την παράγωγο, καταλαβαίνει την επιτάχυνση..

Τι είναι η παράγωγος; :p (Πλάκα-πλάκα δεν το ξέρω, θα το διδαχθώ στο σχολείο φέτος νομίζω...)

KLG
14-07-08, 21:27
Ύπάρχει ένα κτήριο εδώ που είναι 4 όροφοι προς τα κάτω. Η κυρια είσοδος είναι στον όροφο 1 και κάτω κάτω φτάνεις στον όροφο 4 (υπάρχει και εκεί είσοδος). Έψαχνα και εγώ τον όροφο "3" και είχα χάσει την μπάλα. Όταν κουβεντιαζα με τον σεκιουριτά, ρωτησα γιατί δεν κάνανε την κύρια είσοδο 0 και τα υπόλοιπα -1 εως -3, και μου απάντησε οτι έτσι ήταν στην αρχή αλλά ο κόσμος μπερδευονταν... καταραμένες φοιτήτριες κοινωνιολογίας :p

Aν στην φυσική έχεις κάνει επιτάχυνση / ταχύτητα και ο μαθηματικός σας ασχολήθει λίγο μαζί σας θα το καταλάβεις

Ταχυτητα = u(t) = ΔS/Δt (ρυθμός μεταβολής διαστήματος S)
Επιτάχυνση = γ(t) = Δu/Δt (ρυθμός μεταβολής ταχύτητας u)

To σύμβολο Δ δηλωνει διαφορά (απόσταση).

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

mrsaccess
14-07-08, 22:06
Ο προγραμματισμός είναι πολύ ευρύ πεδίο σε αντίθεση με την τέχνη. Πιο σωστό θα ήταν να συγκρίνεις πχ με όλους όσους ασχολούνται με κάποιο είδος «ζωγραφικής». Δηλαδή στον μπογιατζή δεν είναι τόσο βασικό το ταλέντο.

simeon.mattes
14-07-08, 22:58
Ύπάρχει ένα κτήριο εδώ που είναι 4 όροφοι προς τα κάτω. Η κυρια είσοδος είναι στον όροφο 1 και κάτω κάτω φτάνεις στον όροφο 4 (υπάρχει και εκεί είσοδος). Έψαχνα και εγώ τον όροφο "3" και είχα χάσει την μπάλα. Όταν κουβεντιαζα με τον σεκιουριτά, ρωτησα γιατί δεν κάνανε την κύρια είσοδο 0 και τα υπόλοιπα -1 εως -3, και μου απάντησε οτι έτσι ήταν στην αρχή αλλά ο κόσμος μπερδευονταν... καταραμένες φοιτήτριες κοινωνιολογίας :p

.

Δε μιλάς σοβαρά!!!

KLG
14-07-08, 23:03
Δε μιλάς σοβαρά!!!

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

mrsaccess, ο προγραμματισμός είναι ποίηση... θες να σου δείξω κάτι σχόλια που έγραφα παλιά? :lol:

A_gamer
14-07-08, 23:12
Ύπάρχει ένα κτήριο εδώ που είναι 4 όροφοι προς τα κάτω. Η κυρια είσοδος είναι στον όροφο 1 και κάτω κάτω φτάνεις στον όροφο 4 (υπάρχει και εκεί είσοδος). Έψαχνα και εγώ τον όροφο "3" και είχα χάσει την μπάλα. Όταν κουβεντιαζα με τον σεκιουριτά, ρωτησα γιατί δεν κάνανε την κύρια είσοδο 0 και τα υπόλοιπα -1 εως -3, και μου απάντησε οτι έτσι ήταν στην αρχή αλλά ο κόσμος μπερδευονταν... καταραμένες φοιτήτριες κοινωνιολογίας :p

Σκέψου πώς θα καίγεται το "CPU" τους όταν συναντούν την έννοια της απόλυτης τιμής... :lol:

mrsaccess
14-07-08, 23:20
Μη το πάτε μακριά, υπάρχουν αρκετοί μεγάλοι άνθρωποι που δεν γνωρίζουν από δεκαδικά ψηφία. Φανταστείτε τι σοκ έπαθαν όταν ήρθε το ευρώ...

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

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

simeon.mattes
14-07-08, 23:58
Σοβαρά μιλάω, το innumeracy στις προηγμένες κοινωνίες είναι τόσο σημαντική μάστιγα οσο ο αναλφαβητισμός στον τρίτο κόσμο. Προσπάθησε π.χ. να εξηγήσεις σε κάποιον την μέθοδο των τριών.. Πάντως με τα αρνητικά νούμερα
, πρέπει να ισχυεί γενικά.. δες π.χ. πόσα υπόγεια παρκινγκ έχουν αρνητικούς αριθμούς.

mrsaccess, ο προγραμματισμός είναι ποίηση... θες να σου δείξω κάτι σχόλια που έγραφα παλιά? :lol:

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

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

ΤΟ γεγονός ότι υπάρχει αναλφαβητισμός και innumerecy (η αλήθεια είναι ότι σαν όρο πρώτη φορά το ακούω) δείχνει κάτι. Δεν μπορεί το 90% αν όχι παραπάνω να έχουν χαμηλές διανοητικές ικανότητες!!!

Όσον αφορά για την ποίηση, δε μας λες ένα παραδειγματάκι για να καταλάβουμε τι εννοείς;:p Η αλήθεια είναι ότι εγώ έχω συνδέσει τις συναρτησιακές γλώσσες με τη Μουσική και απλά είμαι λίγο περίεργος να δως πως έχεις συνδέσει εσύ τις γλώσσες με την ποίσης :)

Eruyome(MMXGN)
15-07-08, 07:46
Βέβαια υπάρχει και το αλγοριθμικό κομμάτι όπου εκεί παίζουν πιο πολλά μαθηματικά, πχ φτιάχνεις ένα αλγόριθμο που αναγνωρίζει πρόσωπα. Άλλο είδος τέχνης εκεί.

Aυτό έχει να κάνει με μαθηματικά που αφορούν συγκεκριμένο τομέα, όπως είπε ο anon.
Γενικά τα μαθηματικά χρειάζονται για τον συγκεκριμένο τομέα που χρειάζεται να γράψεις ένα πρόγραμμα.
Καθαρά προγραμματιστικά τώρα, αν και δεν είναι απαραίτητο, είναι πολύ καλύτερα αν έχεις ξεκαθαρίσει κάποιες έννοιες (πχ πολυπλοκότητας) ακόμα και όταν σου δίνονται έτοιμα πράγματα, αλλα πέρα απο αυτό, σου αρκούν τα μαθηματικά που χρειάζεσαι για κάθε αντικείμενο ξεχωριστά και όπως νομίζω εννοείται, δεν γίνεται να τα ξέρουμε όλα (όπως πχ anon δεν ξέρεις για Μ/Σ fourier και άρα δεν μπορείς να ασχοληθείς με DSP, έτσι και κάποιος δεν θα ασχοληθεί με ερωτήματα πάνω σε βάσεις δεδομένων αφού δεν ξέρει σχεσιακή άλγεβρα, έκαστος στο είδος του)

anon
15-07-08, 11:35
Ο τομέας των μαθηματικών σε συνδιασμό με τη πληροφορική είναι εξαιρετικά ευρύτατος. Μερικές αναζητήσεις στον γούγλη και θα βρείτε πάρα πολλά. Ακόμη και στα προγράμματα για επιχειρήσεις (εμπορικολογιστικά) υπάρχουν μαθηματικά, όπως πχ απο τον τομέα της Επιχειρησιακής Ερευνας, αλλά νομίζω ελάχιστοι μη-μαθηματικοί γνωρίζουν γιαυτόν τον τομέα.

Ωστόσο ο προγραμματισμός ειναι και τέχνη. Γιαυτο και ο knuth έγραψε σαν τίτλο the art of computer programming (θα προτιμούσα πιο σωστά να έλεγε the art and science of computer programming).


Θυμάμαι πριν πολλά πολλά χρόνια, δούλευα σε Xenix286. 12Mhz. 2MB RAM. Σε μια εφαρμογή εμπορικολογιστική έπρεπε να επαναδιατάξουμε έναν μεγάλο όγκο δεδομένων. fixed length records σε αρχείο. ΟΙ συνάδελφοι γράφανε σε Microsoft C στο DOS, χρησιμοποιήσανε ότι μπορούσαν, για ένα συγκεκριμένο όγκο, η ρουτίνα σορταρίσματος έκανε 5-6 λεπτά. Θεωρήθηκε απαράδεκτος χρόνος, σε production με μεγαλύτερα μεγέθη αρχείων και λιγότερο ισχυρές μηχανές θα είχαμε πολύ χειρότερους χρόνους. Χρησιμοποιήθηκε quicksort απο την βιβλιοθήκη της MicrosoftC. τελικα κάθησε ο συνάδελφος και έγραψε τον κώδικα σε assembly κάνοντας ότι μπορούσε για να μειωσει τον απαιτούμενο χρόνο. Τα πέντε λεπτά γίναν 3. Σημαντική βελτίωση, αλλά όχι τόσο όσο πρέπει. Και αυτα σε μηχανές πιο ισχυρές απο αυτές που δούλευα εγώ. Πήρα το project. Δεν μου πήρε πολύ να καταλάβω ότι το όλο πρόβλημα ήταν ότι σε κάθε recursion της quicksort η αντιμετάθεση τιμών ήταν ουσιαστικά ολόκληρο το record, κάτι πολύ βαρύ. Ουσιαστικά με το profiling που είχα κάνει είχα δεί ότι το 99% του χρόνου του προγράμματος ήταν data moves. Η λύση ήταν πολύ απλή. Μια quicksort σε C τροποποιημένη έτσι ώστε αντί να αλλάζει θέσεις στα πραγματικά δεδομένα, να αλλάζει τους pointers που δείχνουν στα δεδομένα, δηλαδή μια μορφή indirect addressing. Χωρίς assembly, κανονική C, και σε ασθενέστερο μηχανημα, ο δικός μου κώδικας έκανε για την ίδια δουλειά 17 δεύτερα. Αυτο το παράδειγμα είναι και τέχνη και επιστήμη. Ο απλός προγραμματιστής code monkey, απλά θα χρησιμοποιήσει την έτοιμη βιβλιοθήκη, και όσο κάνει. εξάλλου έχουμε συνηθήσει σε κάθε αναφορά για performance, η απάντηση ειναι απλή, πάρτε ισχυρότερο hardware.

Χώρια που τότε, 1989, εργαλεία όπως profiling ή SCCS ήταν άγνωστα σχεδόν σε οποιοδήποτε προγραμματιστή μιλούσα. Εδώ είναι άγνωστα ανάλογα εργαλεία ακόμη και σήμερα! Μην πω για sed/awk και άλλα unix εργαλεία που χρησιμοποιούνται για code management (μαζικές αλλαγες κλπ).

dvm
15-07-08, 12:07
Μην πω για sed/awk και άλλα unix εργαλεία που χρησιμοποιούνται για code management (μαζικές αλλαγες κλπ).


Σήμερα για refactoring τι θα χρησιμοποιούσες; sed/awk ή μια sript γλώσσα όπως python;

anon
15-07-08, 12:20
perl :p

Tώρα πέρα απο πλάκα, εαν δουλεύεις με C, αυτά τα εργαλεία είναι τέλεια για ότι θέλεις, ίσως μαζί με perl. Μπορεί να έχω και άδικο, και ναναι καλύτερα με python, δεν την έχω δοκιμάσει την γλώσσα αυτή, ούτε πχ την ruby. Τα τελευταία χρόνια ασχολούμε με sysadmin/dba....

Eruyome(MMXGN)
15-07-08, 13:40
Ο τομέας των μαθηματικών σε συνδιασμό με τη πληροφορική είναι εξαιρετικά ευρύτατος. Μερικές αναζητήσεις στον γούγλη και θα βρείτε πάρα πολλά. Ακόμη και στα προγράμματα για επιχειρήσεις (εμπορικολογιστικά) υπάρχουν μαθηματικά, όπως πχ απο τον τομέα της Επιχειρησιακής Ερευνας, αλλά νομίζω ελάχιστοι μη-μαθηματικοί γνωρίζουν γιαυτόν τον τομέα.

Όπως και ο τομέας του DSP με πληροφορική, ο τομέας των αυτοματισμών με πληροφορική, ο τομέας των τηλεπικοινωνιών με πληροφορική κ.ο.κ.





Θυμάμαι πριν πολλά πολλά χρόνια, δούλευα σε Xenix286. 12Mhz. 2MB RAM. Σε μια εφαρμογή εμπορικολογιστική έπρεπε να επαναδιατάξουμε έναν μεγάλο όγκο δεδομένων. fixed length records σε αρχείο. ΟΙ συνάδελφοι γράφανε σε Microsoft C στο DOS, χρησιμοποιήσανε ότι μπορούσαν, για ένα συγκεκριμένο όγκο, η ρουτίνα σορταρίσματος έκανε 5-6 λεπτά. Θεωρήθηκε απαράδεκτος χρόνος, σε production με μεγαλύτερα μεγέθη αρχείων και λιγότερο ισχυρές μηχανές θα είχαμε πολύ χειρότερους χρόνους. Χρησιμοποιήθηκε quicksort απο την βιβλιοθήκη της MicrosoftC. τελικα κάθησε ο συνάδελφος και έγραψε τον κώδικα σε assembly κάνοντας ότι μπορούσε για να μειωσει τον απαιτούμενο χρόνο. Τα πέντε λεπτά γίναν 3. Σημαντική βελτίωση, αλλά όχι τόσο όσο πρέπει. Και αυτα σε μηχανές πιο ισχυρές απο αυτές που δούλευα εγώ. Πήρα το project. Δεν μου πήρε πολύ να καταλάβω ότι το όλο πρόβλημα ήταν ότι σε κάθε recursion της quicksort η αντιμετάθεση τιμών ήταν ουσιαστικά ολόκληρο το record, κάτι πολύ βαρύ. Ουσιαστικά με το profiling που είχα κάνει είχα δεί ότι το 99% του χρόνου του προγράμματος ήταν data moves. Η λύση ήταν πολύ απλή. Μια quicksort σε C τροποποιημένη έτσι ώστε αντί να αλλάζει θέσεις στα πραγματικά δεδομένα, να αλλάζει τους pointers που δείχνουν στα δεδομένα, δηλαδή μια μορφή indirect addressing. Χωρίς assembly, κανονική C, και σε ασθενέστερο μηχανημα, ο δικός μου κώδικας έκανε για την ίδια δουλειά 17 δεύτερα. Αυτο το παράδειγμα είναι και τέχνη και επιστήμη. Ο απλός προγραμματιστής code monkey, απλά θα χρησιμοποιήσει την έτοιμη βιβλιοθήκη, και όσο κάνει. εξάλλου έχουμε συνηθήσει σε κάθε αναφορά για performance, η απάντηση ειναι απλή, πάρτε ισχυρότερο hardware.

Χώρια που τότε, 1989, εργαλεία όπως profiling ή SCCS ήταν άγνωστα σχεδόν σε οποιοδήποτε προγραμματιστή μιλούσα. Εδώ είναι άγνωστα ανάλογα εργαλεία ακόμη και σήμερα! Μην πω για sed/awk και άλλα unix εργαλεία που χρησιμοποιούνται για code management (μαζικές αλλαγες κλπ).


Ωραίο το παράδειγμα σου (και μπράβο που το σκέφτηκες) όμως πλέον έχουν βελτιωθεί αρκετά οι βιβλιοθήκες και υπάρχουν και ένα σωρό για κάθε γούστο. Πέρα απο αυτό η επεξεργαστική ισχύς και οι compilers που υπάρχουν κάνουν γενικά τη ζωή πολύ πιο εύκολη. Έπειτα, όπως το βλέπω, δεν σε βοήθησε τόσο η γνώση σου στα μαθηματικά όσο οι γνώσεις αρχιτεκτονικής υπολογιστών που είχες και που πρέπει να έχει κάθε προγραμματιστής αν θέλει να γράφει προγράμματα μεγαλύτερα του hello world.

anon
15-07-08, 14:22
Στο συγκεκριμένο παράδειγμα όχι, ήταν όπως είπες γνώσεις εργαλείων που οι "απλοί" προγραμματιστές δεν δουλεύανε (όπως ο profiler), και πάνω στην αρχιτεκτονική υπολογιστών όπως είπες. Που επίσης είναι ένας τομέας, και με μαθηματικό υπόβαθρο, και σε επίπεδο αρκετά υψηλό, απαξιωμένο επίσης απο τους code monkeys. Ομως θα μπορούσα να σου πω και άλλα παραδείγματα με μαθηματικά.

mrsaccess
15-07-08, 14:28
Ένα απλό πρόβλημα που οι περισσότεροι φοιτητές πληροφορικής δεν καταφέρνουν να λύσουν, τουλάχιστον όχι σε σύντομο χρονικό διάστημα, είναι πως θα ανταλλάξεις τιμές σε δύο μεταβλητές χωρίς να χρησιμοποιήσεις μια τρίτη προσωρινή μεταβλητή. :)

Eruyome(MMXGN)
15-07-08, 16:21
Ένα απλό πρόβλημα που οι περισσότεροι φοιτητές πληροφορικής δεν καταφέρνουν να λύσουν, τουλάχιστον όχι σε σύντομο χρονικό διάστημα, είναι πως θα ανταλλάξεις τιμές σε δύο μεταβλητές χωρίς να χρησιμοποιήσεις μια τρίτη προσωρινή μεταβλητή. :)

Και πάλι όμως, έχεις τον compiler που κάνει την βρωμοδουλειά για σένα :)

Υ.Γ.


:p



a = a xor b
b = a xor b
a = a xor b

KLG
15-07-08, 16:54
Eγώ που δεν ξέρω όμως θεωρία συνόλων :p σκέφτηκα κάτι εξ ίσου απλό:


a,b
a=a-b;
b=a+b;
a=(b-a)/2;
b=(a+b)/2;

dvm
15-07-08, 16:56
Ναι αλλά ποιός κώδικας διαβάζεται πιο εύκολα; Με 3η μεταβλητή ή αυτός με τα xor; Για να καταλάβεις τι κάνει εννοώ. Εξάλλου ο Knuth δεν ήταν που είπε "Early optimization is the root of all evil";

Σχετκά μ'αυτό που λέτε για τον profiler έχει να κάνει και με τον τρόπο εκπαίδευσης νομίζω (τουλάχιστον για όσους το σπουδάσαμε και όχι για αυτοδίδακτους). Σε μαθαίνουν μεν πως να γράφεις κώδικα (τρόπος του λέγειν), αλλά όντως δεν λένε τίποτα για profiling, build tools, continuous integration, source code management.

Που πας ρε καραμήτρο χωρίς ένα subversion κι ένα makefile; Εδώ τη χρήση του debugger από φίλο την έμαθα, όχι από καθηγητή. Για να μην προχωρήσω σε ανάλυση κώδικα κλπ. Βέβαια έχει να κάνει και με την φύση των εκπαιδευτικών προγραμμάτων που δεν ξεφεύγουν σχεδόν ποτέ τις 100 γραμμές και πολλές λέω.

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

Eruyome(MMXGN)
15-07-08, 17:26
Ναι αλλά ποιός κώδικας διαβάζεται πιο εύκολα; Με 3η μεταβλητή ή αυτός με τα xor; Για να καταλάβεις τι κάνει εννοώ.

3. Αυτός που θα χει σαν σχόλιο:
//Here we swap the values of a and b.

KLG
15-07-08, 17:37
ωχ ... βρήκα το πρώτο bug στο δικό μου... 1 bug σε 4 γραμμές :lol:

........Auto merged post: KLG πρόσθεσε 7 λεπτά και 57 δευτερόλεπτα αργότερα ........

Εντάξει ver2:

a,b
a=a-b
b=a+b
a=(b-a)/2


είμαστε γκίκουλες :p

Eruyome(MMXGN)
15-07-08, 17:49
ωχ ... βρήκα το πρώτο bug στο δικό μου... 1 bug σε 4 γραμμές :lol:

........Auto merged post: KLG πρόσθεσε 7 λεπτά και 57 δευτερόλεπτα αργότερα ........

Εντάξει ver2:

a,b
a=a-b
b=a+b
a=(b-a)/2


είμαστε γκίκουλες :p

Χμ

Μάλλον πως πρέπει να βγάλεις το /2 στο τέλος :p

KLG
15-07-08, 18:01
Χμ

Μάλλον πως πρέπει να βγάλεις το /2 στο τέλος :p

Mπα... το καινούριο a είναι το a-b και το καινούριο b είναι το (a-b)+b... οπότε...

το καινούριο a είναι το b-a...

Έχεις δίκιο :lol:

Τώρα που έχουμε τον κώδικα και τον ψευδοκώδικα, μπορούμε να σπαταλήσουμε μια εβδομάδα για το documentation... :p

A_gamer
15-07-08, 18:13
a,b
a=a-b
b=a+b
a=-(a-b)

Τουλάχιστον έτσι νομίζω, θα κάνω τους υπολογισμούς και θα δω.

Edit:


Για να βοηθηθώ αρίθμησα τις μεταβλητές. Το ζητούμενο είναι b2=a1 και a3=b1

a1, b1
a2=a1-b1
b2=a2+b1 !Δηλ. b2=a1-b1+b1=a1 (Εγκρίνεται)



a3=a2-b2=a1-b1-a1=-b1

Άρα σωστά το έκανα.Μήπως όμως είναι καλύτερα με απόλυτο;

Κι άλλο Edit: όχι, το σωστό είναι με το μείον

a,b
a=a-b
b=a+b
a=|a-b|

Eruyome(MMXGN)
15-07-08, 18:27
Mπα... το καινούριο a είναι το a-b και το καινούριο b είναι το (a-b)+b... οπότε...

το καινούριο a είναι το b-a...

Έχεις δίκιο :lol:

Τώρα που έχουμε τον κώδικα και τον ψευδοκώδικα, μπορούμε να σπαταλήσουμε μια εβδομάδα για το documentation... :p

Τι; Έτοιμο;
Και αν έχεις overflow;:p

KLG
15-07-08, 18:27
Το -(a-b) είναι το b-a... οπότε δεν χρειάζονται απόλυτες τιμές...

πάω στην wikipedia να δω τι σημαίνει XOR :p :p

Τι overflows? διαιρέσεις δεν έχουμε... + (+) + = + , - (+) - = - αντε να το κάνουμε με pointers / clean για να μην ξεχάσουμε καμια μεταβλητή.. νομιζω οτι είμαστε έτοιμοι να το πατεντάρουμε :p

A_gamer
15-07-08, 18:39
Το -(a-b) είναι το b-a... οπότε δεν χρειάζονται απόλυτες τιμές...

Ωπ σωστά. Α, και με απόλυτη τιμή είναι λάθος (μόνο το -(a-b) ισχύει, δες Edit), γιατί αν (αρχικό)b<0 και (αρχικά) |b|>a, τότε το πρόσημο του a στο τέλος βγαίνει λάθος.

Eruyome(MMXGN)
15-07-08, 19:56
Ωπ σωστά. Α, και με απόλυτη τιμή είναι λάθος (μόνο το -(a-b) ισχύει, δες Edit), γιατί αν (αρχικό)b<0 και (αρχικά) |b|>a, τότε το πρόσημο του a στο τέλος βγαίνει λάθος.

Αν είναι να καλούμε ολόκληρη συνάρτηση για να γλιτώσουμε έναν register πάει το χάσαμε :lol:

A_gamer
15-07-08, 20:11
Αν είναι να καλούμε ολόκληρη συνάρτηση για να γλιτώσουμε έναν register πάει το χάσαμε :lol:

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

Eruyome(MMXGN)
15-07-08, 21:18
Δεν έχεις και άδικο, αλλά απλώς ήταν μία σπαζοκεφαλιά που θέλαμε οπωσδήποτε να λύσουμε, δεν έχει πρακτική εφαρμογή.

Λάθος, έχει.
Έχεις συγκεκριμένο αριθμό καταχωρητών. Όταν έχεις ένα βρόχο που χρειάζεται να κάνεις τέτοιες αντιμεταθέσεις (πχ σε sorting συναρτήσεις) με πάρα πολλές επαναλήψεις, μια μέθοδος βελτίωσης είναι να πάρεις τον βρόχο και να τον ξεδιπλώσεις (πχ εκεί που έκανε 1000 επαναλήψεις της μια εντολ&#180;ξς να κάνει 250 των τεσσάρων, 125 των 8 κτλ) έτσι ώστε γλιτώνεις εντολές που έχουν να κάνουν με τον έλεγχο του βρόχου και που όσο περισσότερες εντολές να βάλεις μέσα, τόσο μεγαλύτερη βελτίωση έχεις. Τώρα αν έχεις πχ 12 καταχωρητές που μπορείς να χρησιμοποιήσεις, σε κάθε επανάληψη με την περίπτωση των 3 μεταβλητών θα μπορούσες να κάνεις το πολύ 4 αντιμεταθέσεις (12 εντολές ανα επανάληψη, άρα γλιτώνεις 3 εντολές διακλάδωσης) , ενώ με αυτή με τους 2 θα μπορούσες 6 (18 εντολές ανα επανάληψη, άρα γλιτώνεις 5) με τον ίδιο αριθμό εντολών.

simeon.mattes
16-07-08, 13:30
Και πάλι όμως, έχεις τον compiler που κάνει την βρωμοδουλειά για σένα :)

Υ.Γ.


:p



a = a xor b
b = a xor b
a = a xor b





Πωω...πραγματικά έξυπνο. Καθόμουν και το χάζευα:worthy:

a xor b xor b = a εξού και b = a
a xor b xor a = b εξού και a= b

Ωραία σπαζοκεφαλιά και πολύ χρήσιμη για μικροϋπολογιστές. Βέβαια με τα σύγχρονα μέσα, μνήμη, ισχύ, μου φαίνεται λίγο σπάνιο για να το χρησιμοποιήσεις. Βέβαια μου θυμίζει assembly την οποία και λίγο απεχθάνομαι

Eruyome(MMXGN)
16-07-08, 15:26
Πωω...πραγματικά έξυπνο. Καθόμουν και το χάζευα:worthy:

a xor b xor b = a εξού και b = a
a xor b xor a = b εξού και a= b

Ωραία σπαζοκεφαλιά και πολύ χρήσιμη για μικροϋπολογιστές. Βέβαια με τα σύγχρονα μέσα, μνήμη, ισχύ, μου φαίνεται λίγο σπάνιο για να το χρησιμοποιήσεις. Βέβαια μου θυμίζει assembly την οποία και λίγο απεχθάνομαι

Η XOR γενικά είναι φίλη μας, έχει ωραίες ιδιότητες, είναι απλή, και δεν πετάει και exception (όπως πχ οι προσθέσεις-αφαιρέσεις κ πολλαπλασιασμοί-διαιρέσεις (οι συγκεκριμένες είναι και πολύ ακριβές) )

Και όμως, είναι πολύ χρήσιμες τέτοιες τεχνικές. Μπορεί να χρησιμοποιηθεί σε βρόχους με πάρα πολλές επαναλήψεις και να βοηθήσει και στον παραλληλισμό (πχ σε μια εξομοίωση monte-carlo) οπότε να αξιοποιήσεις περισσότερο έναν επεξεργαστή που υποστηρίζει (όπως οι σύγχρονοι).
Βέβαια για τις περισσότερες αυτές τεχνικές αναλαμβάνει ο compiler, οπότε δεν χρειάζεται να κάτσεις να το σκεφτείς ιδιαίτερα.

simeon.mattes
16-07-08, 15:37
Η XOR γενικά είναι φίλη μας, έχει ωραίες ιδιότητες, είναι απλή, και δεν πετάει και exception (όπως πχ οι προσθέσεις-αφαιρέσεις κ πολλαπλασιασμοί-διαιρέσεις (οι συγκεκριμένες είναι και πολύ ακριβές) )

Και όμως, είναι πολύ χρήσιμες τέτοιες τεχνικές. Μπορεί να χρησιμοποιηθεί σε βρόχους με πάρα πολλές επαναλήψεις και να βοηθήσει και στον παραλληλισμό (πχ σε μια εξομοίωση monte-carlo) οπότε να αξιοποιήσεις περισσότερο έναν επεξεργαστή που υποστηρίζει (όπως οι σύγχρονοι).
Βέβαια για τις περισσότερες αυτές τεχνικές αναλαμβάνει ο compiler, οπότε δεν χρειάζεται να κάτσεις να το σκεφτείς ιδιαίτερα.

Ναι πράγματι. Το μόνο σίγουρο είναι ότι δε θα πετάξει ποτέ exception. Θα ήταν εύκολο να μου δώσεις ένα μικρό παράδειγμα σε κώδικα για να δω και πρακτικά τι εννοείς; Φαντάζομαι ότι η πιο ενδεδειγμένη γλώσσα για τη συγκεκριμένη περίπτωση θα είναι η assembly...αλλά αν νομίζεις ότι γίνεται και αλλού, όλα καλοδεχούμενα

Fuzzy
16-07-08, 17:48
Ναι πράγματι. Το μόνο σίγουρο είναι ότι δε θα πετάξει ποτέ exception. Θα ήταν εύκολο να μου δώσεις ένα μικρό παράδειγμα σε κώδικα για να δω και πρακτικά τι εννοείς; Φαντάζομαι ότι η πιο ενδεδειγμένη γλώσσα για τη συγκεκριμένη περίπτωση θα είναι η assembly...αλλά αν νομίζεις ότι γίνεται και αλλού, όλα καλοδεχούμενα

Θες σε VHDL; :)

alexisazen
16-07-08, 17:52
a, b = b, a (http://love-python.blogspot.com/2008/02/swap-values-python-way.html)

simeon.mattes
16-07-08, 18:30
Θες σε VHDL; :)

Αν νομίζεις ότι μπορεί να βοηθήσει κάποιον για να καταλάβει αυτό που είπε ο Eruyome(MMXGN) κανένα πρόβλημα. :)

A_gamer
16-07-08, 18:39
a, b = b, a (http://love-python.blogspot.com/2008/02/swap-values-python-way.html)

Μπράβο η Python! :worthy:

Eruyome(MMXGN)
16-07-08, 18:53
Ναι πράγματι. Το μόνο σίγουρο είναι ότι δε θα πετάξει ποτέ exception. Θα ήταν εύκολο να μου δώσεις ένα μικρό παράδειγμα σε κώδικα για να δω και πρακτικά τι εννοείς; Φαντάζομαι ότι η πιο ενδεδειγμένη γλώσσα για τη συγκεκριμένη περίπτωση θα είναι η assembly...αλλά αν νομίζεις ότι γίνεται και αλλού, όλα καλοδεχούμενα

Χμ, σε ψευδο-assembly o κώδικας σε C

(Θέλουμε να ανταλλάξουμε τις Α,B και C,D, άχρηστος κώδικας αλλα τέσπα)





for(i=0;i<1000;i++){
E=A;
A=B;
B=E;

G=C;
C=D;
D=G;


}



θα γίνει:




L1:
addi r4,r4,#1 # i++;
add r2,r1,r1 # r2: E, r1: A
add r1,r3,r3 # r3: B
add r3,r2,r2

add r5,r6,r6 # G=C;
add r6,r7,r7 # C=D;
add r7,r5,r5 # D=G;

bne r4,#1000,L1 # Έλεγχος του βρόχου




*Αυτό, σε ένα dual-core σύστημα θα μπορούσε να σπάσει στους:



L1:
addi r4,r4,#1 # i++;
add r2,r1,r1 # r2: E, r1: A
add r1,r3,r3 # r3: B
add r3,r2,r2
bne r4,#1000,L1

L2:
addi r8,r4,#1 # i++;
add r5,r6,r6 # G=C;
add r6,r7,r7 # C=D;
add r7,r5,r5 # D=G;
bne r8,#1000,L2



Οι οποίοι θα τρέχανε παράλληλα εκτελώντας την δουλειά στο μισό χρόνο.
Τώρα αν έχεις 32 καταχωρητές γενικού σκοπού, με την πρώτη περίπτωση (με ανταλλαγή με 3 μεταβλητές)
χρειάζεσαι 1+3 καταχωρητές για κάθε βρόχο ξεχωριστά(μέτρα τους να δεις), δηλαδή θα μπορούσες να έχεις
μέχρι και 8 παράλληλους βρόχους (swap μέχρι και 8 μεταβλητές ταυτόχρονα). Στην δεύτερη περίπτωση (με 2 μεταβλητές) θές μόνο 1+2, οπότε μπορείς να έχεις 10.

Αν έχω κάνει κάποιο λάθος στον συλλογισμό πείτε μου.

Y.Γ. Python ftw :P

simeon.mattes
16-07-08, 21:06
Βασικά σε ψιλοέχασα λιγάκι. Με μπερδέψανα λίγο τα add που έβαλες. Εγώ περίμενα να δω τίποτα xor....τσπ. Μάλλον κάτι δεν έχω πιάσει:hmm:

π.χ.
add r3,r1,r2 => r3<-r1+r2

Κάνω λάθος; ΤΣΠ...το προσπερνάω μιας και γράφεις στα σχόλιά σου τί υποτίθεται ότι κάνει η κάθε εντολή;

Μετά έσπασες τον κώδικα σε δύο μέρη...Αυτό όμως είναι παράδειγμα ταυτοχρονισμού (τσπ. προτιμώ τη λέξη concurrency, αλλα ...:rolleyes:). Τι σχέση έχει με την αλλαγή μεταβλητών;

Κάτι δεν καταλαβαίνω

........Auto merged post: simeon.mattes πρόσθεσε 13 λεπτά και 43 δευτερόλεπτα αργότερα ........

Φαντάζομαι σε έπιασα αλλά μου φαίνεται ότι δεν το έχεις πει καλά...:)



L1:
addi r4,r4,#1 # i++;

mv r2,r1 # r2: E, r1: A
mv r1,r3 # r3: B
mv r3,r2

bne r4,#1000,L1

L2:
addi r8,r4,#1 # i++;

mv r5,r6 # G=C;
mv r6,r7 # C=D;
mv r7,r5 # D=G;

bne r8,#1000,L2



ενώ με το xor που είπες θα είχαμε



L1:
addi r4,r4,#1 # i++;

xor r1,r1,r2 # A <- A xor B
xor r2,r1,r2 # B <- A xor B
xor r1,r1,r2 # A <- A xor B

bne r4,#1000,L1

L2:
addi r3,r4,#1 # i++;

xor r4,r4,r5 # C <- C xor D
xor r5,r4,r5 # D <- C xor D
xor r4,r4,r5 # C <- C xor D

bne r3,#1000,L2



και επομένως ενώ στο 1ο θα έχουμ 3+1 καταχωρητές στη 2η έχουμε 2+1, δηλ στην 1η μέχρι 32/4=8 παράλληλους βρόχους ενώ στη 2η 32/2=10 (οι 2 δώρο :) ) επομένως έχουμε παραπάνω παραλληλισμό.

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

A_gamer
16-07-08, 22:02
Μετά έσπασες τον κώδικα σε δύο μέρη...Αυτό όμως είναι παράδειγμα ταυτοχρονισμού (τσπ. προτιμώ τη λέξη concurrency, αλλα ...). Τι σχέση έχει με την αλλαγή μεταβλητών;

Δείχνει τον ίδιο κώδικα σε multithreaded μορφή. Όταν μιλάμε για πιο οικονομικό κώδικα, δεν έχει σχέση αυτό;

Eruyome(MMXGN)
17-07-08, 00:25
Βασικά σε ψιλοέχασα λιγάκι. Με μπερδέψανα λίγο τα add που έβαλες. Εγώ περίμενα να δω τίποτα xor....τσπ. Μάλλον κάτι δεν έχω πιάσει:hmm:

Ναι συγγνώμη, αν προτιμάς βάλε όπου add X,Y,Y => mov X,Y
Ο κώδικας που έγραψα είναι για ανταλλαγή χρησιμοποιώντας 3η προσωρινή μεταβλητή. Σε αυτήν την περίπτωση θέλουμε 4 registers ανα βρόχο (όχι βρόγχο), 1 για το i και 3 για τις μεταβλητές, ενώ στην περίπτωση με τις xor 1 για το i και 2 για τις μεταβλητές.

........Auto merged post: Eruyome(MMXGN) πρόσθεσε 0 λεπτά και 47 δευτερόλεπτα αργότερα ........


Δείχνει τον ίδιο κώδικα σε multithreaded μορφή. Όταν μιλάμε για πιο οικονομικό κώδικα, δεν έχει σχέση αυτό;

Ναι σε πόρους, λιγότεροι πόροι ανα χρήση => περισσότερος παραλληλισμός.

@ ADSLgr.com All rights reserved.