Απορίες με την Assembly και τον προγραμματισμό

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Βοήθεια! Δεν βγάζω άκρη...

Δημοσίευσηαπό pmav99 » 21 Αύγ 2011, 15:58

Όπως δεν καρφώνεις με κατσαβίδι, έτσι, ούτε βιδώνεις με πένσα. Στην ανάγκη, ενδεχομένως και να μπορείς να το κάνεις, αλλά αν έχεις επιλογή προτιμάς το κατάλληλο εργαλείο. Η κάθε γλώσσα προγραμματισμού είναι ένα εργαλείο. Δε θα χρησιμοποιήσεις fortran 77 για Ι/Ο, αλλά ούτε και C για να γράψεις ένα GUI.

Ανάλογα με το τι θες να κάνεις λοιπόν, υπάρχουν και τα αντίστοιχα εργαλεία. Αν αυτό που θέλεις να κάνεις είναι να μάθεις και να καταλάβεις, τότε οι γλώσσες χαμηλού επιπέδου είναι καλύτερες, γιατί δε σου κρύβουν το τι συμβαίνει. Αν αυτό που θέλεις να κάνεις είναι να γράψεις μια εφαρμογή που θα δίνει λύση σε ένα συγκεκριμένο πρόβλημα, τότε μια γλώσσα υψηλού επιπέδου είναι προτιμότερη γιατί μέσω των abstraction layers που εισάγει, μειώνει την πολυπλοκότητα. Αυτό συνήθως μεταφράζεται σε μειωμένο development time. Οι τύποι των προγραμμάτων που το execution time είναι ο απολύτως κρίσιμος παράγοντας είναι περιορισμένα (πχ αριθμητική ανάλυση, που και για αυτά υπάρχουν wrappers για τις βιβλιοθήκες της C και της Fortran).
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Βοήθεια! Δεν βγάζω άκρη...

Δημοσίευσηαπό M.Jackson » 21 Αύγ 2011, 18:42

Καλα ειναι να μαθεις τα ελαχιστα βασικα για την Assambley και πληρες την θεωρια της παρα να την εχεις ως επιλογη για να λυσεις ενα προβλημα. Ειναι πιο εξυπνο να χρησιμοποιείς μια γλωσσα που χρησιμοποιεί τον Η/Υ λιγοτερο αποδοτικα αλλα το δικο σου χρονο καλυτερα αποδοτικα (καπου το διαβασα αυτο; ;p).

Καλυτερα να ξερεις την θεωρια της και γιατι ολα τα λειτουργικα την εχουν pre-installed παρα να μαθεις να προγραμματιζεις σε αυτη. Δεν νομιζω να θελεις να φτιαξεις ενα προγραμμα που να μετραει τους χτυπους της καρδιας για να θελεις την ακρος εξωφρενικα γληγορη γλωσσα!!
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Απορίες με την Assembly και τον προγραμματισμό

Δημοσίευσηαπό migf1 » 23 Αύγ 2011, 20:58

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

Assembly δεν νομίζω πως χρειάζεται να μάθεις στην παρούσα φάση, κυρίως γιατί η χρήση της όχι μόνο είναι εξαιρετικά περιορισμένη αλλά διαφέρει κι από αρχιτεκτονική σε αρχιτεκτονική. Άλλωστε μη ξεχνάς πως ένα από τα ψευδώνυμα της C είναι "Super Assembly" ακριβώς γιατί σου επιτρέπει να κάνεις σχεδόν ότι και με την Assembly, σε παραπλήσιες ταχύτητες και χωρίς τον περιορισμό της εξάρτησης από την εκάστοτε αρχιτεκτονική του επεξεργαστή που τρέχει το μηχάνημα στο οποίο προγραμματίζεις.

Αντί για Assembly, θα σου πρότεινα καταρχήν να αφιερώσεις χρόνο στο να κάνεις κτήμα σου τα βασικά της C (π.χ. να είσαι σε θέση να λύνεις αν όχι όλες τουλάχιστον το 90% των ασκήσεων του "The C Programming Language" των K&R, και να δώσεις ιδιαίτερο βάρος στις δομές δεδομένων και τους αλγόριθμους που τους χρησιμοποιούν (υπάρχουν βιβλία μόνο για αυτό). Pointers, Strings και Data Structures είναι 3 τομείς στους οποίους αν εμβαθύνεις με τη C θα έχεις κάνει πολλά και ουσιαστικά βήματα!

Αν θυμάμαι σωστά, σε σένα είχα προτείνει να βάλεις ως στόχο σου να φτιάξεις σε C ένα calculator που θα μετατρέπει το input από infix σε reverse polish notation και κατόπιν θα χρησιμοποιεί στοίβες για να κάνει τους υπολογισμούς (συμπεριλαμβανομένων και των προτεραιοτήτων των πράξεων, με και χωρίς παρενθέσεις). Αυτό είναι κατά τη γνώμη μου ιδανικό για 1ο project γιατί θα σε αναγκάσει να χρησιμοποιήσεις και τους 3 παραπάνω τομείς (και άρα να μάθεις πολλά μέρη τους).

Τέλος, μη βιαστείς να περάσεις σε παραθυρικό προγραμματισμό. Η κονσόλα έχει να σου προσφέρει πάαααααρα πολλά και ουσιαστικά, κυρίως επειδή δεν σε αποπροσανατολίζει από την ουσία!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Απορίες με την Assembly και τον προγραμματισμό

Δημοσίευσηαπό UnKnown96 » 24 Αύγ 2011, 15:08

migf1 έγραψε:Καταρχήν θα σε συγχαρώ για το ότι επιλέγεις τον δύσκολο δρόμο, γιατί αυτός είναι ο δρόμος που θα σε βοηθήσει να κατανοήσεις πως και γιατί λειτουργούν τα πράγματα. Είναι σίγουρα χρονοβόρος και δύσβατος, αλλά από τη στιγμή που για σένα δεν υπάρχει πίεση χρόνου (π.χ. δεν δουλεύεις σε κάποια εταιρεία που έχει βάλει προθεσμία) είναι κατά την άποψή μου η καλύτερη επιλογή που θα μπορούσες να κάνεις, εφόσον σε ενδιαφέρει να ασχοληθείς σοβαρά με τον προγραμματισμό. Θα αργήσεις να δεις αποτελέσματα, αλλά οι βάσεις που θα πάρεις με τη C είναι οι πιο στέρεες που θα μπορούσες να πάρεις και αργότερα θα σου λύσουν κυριολεκτικά τα χέρια για να περάσεις σε οποιαδήποτε άλλη γλώσσα θελήσεις πάρα πολύ γρήγορα!

Assembly δεν νομίζω πως χρειάζεται να μάθεις στην παρούσα φάση, κυρίως γιατί η χρήση της όχι μόνο είναι εξαιρετικά περιορισμένη αλλά διαφέρει κι από αρχιτεκτονική σε αρχιτεκτονική. Άλλωστε μη ξεχνάς πως ένα από τα ψευδώνυμα της C είναι "Super Assembly" ακριβώς γιατί σου επιτρέπει να κάνεις σχεδόν ότι και με την Assembly, σε παραπλήσιες ταχύτητες και χωρίς τον περιορισμό της εξάρτησης από την εκάστοτε αρχιτεκτονική του επεξεργαστή που τρέχει το μηχάνημα στο οποίο προγραμματίζεις.

Αντί για Assembly, θα σου πρότεινα καταρχήν να αφιερώσεις χρόνο στο να κάνεις κτήμα σου τα βασικά της C (π.χ. να είσαι σε θέση να λύνεις αν όχι όλες τουλάχιστον το 90% των ασκήσεων του "The C Programming Language" των K&R, και να δώσεις ιδιαίτερο βάρος στις δομές δεδομένων και τους αλγόριθμους που τους χρησιμοποιούν (υπάρχουν βιβλία μόνο για αυτό). Pointers, Strings και Data Structures είναι 3 τομείς στους οποίους αν εμβαθύνεις με τη C θα έχεις κάνει πολλά και ουσιαστικά βήματα!

Αν θυμάμαι σωστά, σε σένα είχα προτείνει να βάλεις ως στόχο σου να φτιάξεις σε C ένα calculator που θα μετατρέπει το input από infix σε reverse polish notation και κατόπιν θα χρησιμοποιεί στοίβες για να κάνει τους υπολογισμούς (συμπεριλαμβανομένων και των προτεραιοτήτων των πράξεων, με και χωρίς παρενθέσεις). Αυτό είναι κατά τη γνώμη μου ιδανικό για 1ο project γιατί θα σε αναγκάσει να χρησιμοποιήσεις και τους 3 παραπάνω τομείς (και άρα να μάθεις πολλά μέρη τους).

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


MigF1, σε ευχαριστώ και πάλι, θα έχω υπ' όψην τα λόγια ενώς έμπειρου προγραμματιστή σαν και εσένα. Συμφωνώ ότι τώρα δεν μου χρειάζετε η Assembly και όπως είπα στο αρχικό μου post θα αρχίσω με αυτήν ίσως και μερικά χρόνια αργότερα διότι η C δεν είναι και η πιο απλή γλώσσα, εκτώς από την θεωρία χριάζομαι και αρκετή εξάσκηση...
Το θέμα με την αρχητεκτονική, δεν είναι πρόβλημα, έχω όρεξη να μάθω και πηστεύω πως δεν θα έχει και μεγάλη διαφορά η μία με την άλλη. Με το βιβλίο που αναφέρεις υπάρχει ένα προβληματάκι γιατί όταν αποφάσισα να αγοράσω βιβλίο δεν ήξερα ότι ο δημιουργός είχε φτιάξει δικό του... Αυτό που αγόρασα είναι αρκετά καλό αν εξερέσουμε λίγο με την ασάφεια του σε μερικές ασκήσεις, τα εξηγεί όλα πολύ καλά. Θα μελετήσω ιδιαίτερα τους τομείς που ανάφερες δίχως αμφιβολία και ο ένας από αυτούς είναι εκί που βρήσκομαι τώρα! Για το Calculator που είπες, ναι εγώ είμουν αυτός που το πρώτεινες και θα κάνω αυτό που μου πρώτεινες αφού τελειώσω το βιβλίο και τις ασκήσεις του. Όσο για το παραθυρικό προγραμματισμό, δεν με ενδιαφέρει καθόλου, αρκεί τα προγράμματα μου να κάνουν αυτό που ζητάω. Σε ευχαριστώ και πάλι!
Άβαταρ μέλους
UnKnown96
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 370
Εγγραφή: 08 Ιουν 2010, 15:23
Τοποθεσία: Ρόδος
Εκτύπωση

Re: Απορίες με την Assembly και τον προγραμματισμό

Δημοσίευσηαπό migf1 » 24 Αύγ 2011, 16:15

Ευτυχώς που δεν αγόρασες το 'The C Programming Language" γιατί ναι μεν είναι εξαιρετικό να το έχεις ως σημείο αναφοράς για να φρεσκάρεις τη μνήμη σου, αλλά δυστυχώς για εκμάθηση της γλώσσας είναι αρκετά δύστροπο και πλέον και παρωχημένο (κυρίως ως προς το συντακτικό που χρησιμοποιεί, αλλά και κάποια άλλα στοιχεία) αφού από τότε έχει αναθεωρηθεί η γλώσσα.

Έχει όμως εξαιρετικές ασκήσεις, τις οποίες αν φτάσεις στο σημείο να λύσεις μόνος σου το 80% με 90% από αυτές θα έχεις αποκτήσει πολύ καλές γνώσεις της γλώσσας! Μπορείς να βρεις τις λύσεις τους σε αυτό εδώ το link: http://clc-wiki.net/wiki/K&R2_solutions, αλλά προφανώς ο στόχος σου θα πρέπει να είναι να τις λύσεις μόνος σου.

Το βιβλίο σε ηλεκτρονική μορφή (pdf) μπορείς να το κατεβάσεις π.χ. από εδώ αν και νομίζω πως πρόκειται για την 1η έκδοση (γιατί κυκλοφόρησε και 2η, με χαρακτηρισμό ANSI C, όταν έγινε η 1η αναθεώρηση της γλώσσας).

Εγώ από αυτό το βιβλίο ξεκίνησα να μαθαίνω C, με την ειδοποιό όμως διαφορά πως εγώ το διδάχτηκα σε πανεπιστημιακό περιβάλλον (και μάλιστα στο εξωτερικό, άρα στα Αγγλικά, γιατί κυκλοφορεί και μεταφρασμένο στα Ελληνικά... δεν θα στο πρότεινα). Δεν το προτείνω καν σαν 1ο πρώτο βιβλίο για κάποιον που προσπαθεί μόνος του να μάθει τη γλώσσα.

Μετά όμως θα σου είναι πολύτιμο σαν σημείο αναφοράς για όποτε χρειαστεί να φρεσκάρεις τη μνήμη σου.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Προηγούμενη

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι