Προτάσεις για βιβλία C και αλγορίθμων/κώδικα.

Ξεκίνησε από tzorvas, 16 Δεκ 2008, 12:55:32 ΜΜ

« προηγούμενο - επόμενο »

evry

  Δεν είπε κανείς ότι αν θες να φτιάξεις κάτι εύκολα και γρήγορα θα το κάνεις σε C. Προφανώς θα επιλέξεις κάτι πιο απλό. Αυτό όμως που ισχύει είναι ότι σε C κάνεις τα πάντα, άλλες φορές εύκολα και άλλες φορές δύσκολα.
  Το σημαντικό όμως είναι η εκπαιδευτική της αξία για έναν φοιτητή πληροφορικής. Οι γνώσεις που θα πάρει από την ενασχόλησή του με τη C θα είναι τόσο ποσοτικά όσο και ποιοτικά ανώτερες από τις περισσότερες "δημοφιλείς" γλώσσες προγραμματισμού. Φυσικά θα είναι δύσκολα αλλά η γνώση δεν κατακτιέται εύκολα. Απόδειξη αυτού είναι ότι ένας που ξέρει C++ μπορεί να μάθει Java σε μια εβδομάδα (παραπάνω δεν του δίνω) ενώ ένας που ξεκίνησε με Java θα μάθει (αν μάθει ποτέ) πολύ δύσκολα καλά  C++. Αυτό είναι λογικό γιατί ενώ η μια γλώσσα σε παίρνει από το χεράκι και τα κάνει όλα για σένα, στην άλλη εσύ έχεις τον πλήρη έλεγχο, για να μην μιλήσω πιο συγκεκριμένα για δείκτες μνήμη κλπ. Φυσικά και στη Java υπάρχει το μήνυμα "Null Pointer exception" αλλά αυτό είναι μια άλλη ιστορία

Παράθεση
Πχ:
"Η C είναι γλώσσα ανωτέρου επιπέδου"!
Το σωστο: Είναι λίγο παραπάνω απο την assembly, ίσως η μοναδικη υπάρχουσα γλώσσα μέσου επιπέδου. "Ανωτέρου επιπέδου" με -μετρημένες- μόλις 28 εντολες (κατα ANSI) ντε γκίνεται, καρντιά μου! Εδω καλα καλα δεν μπορει να βάλει τον κέρσορα εκει που θες σε text screen!
δηλαδή το κριτήριό σου για μια γλώσσα προγραμματισμού είναι αν μπορεί να βάλει τον κέρσορα στην οθόνη? Μάλλον συγχέεις τις εντολές της γλώσσας προγραμματισμού με τις βιβλιοθήκες που έρχονται μαζί με τη γλώσσα. Αλλά μια και αναφέρεις τη Java για πες μας ποια εντολή της γλώσσας βάζει τον κέρσορα στην οθόνη?
Άσε μην το ψάχνεις γιατί δεν υπάρχει, η γλώσσα δεν έχει τέτοιες εντολές. Και μια και το είπες ότι η C έχει μόνο 28 εντολές αλήθεια η Java πόσες έχει?

Παράθεση
Αν φτάσεις, όμως, σε τέτοιο σημείο, ήδη ασχολείσαι με assembly! (ʼρα, η C περιττη.)
Γιατί ασχολείσαι με assembly, επειδή ο κώδικας της assembly είναι πιο μεταφέρσιμος και ευανάγνωστος?

Παράθεση
Προσωπικα σου προτείνω ν' ασχοληθεις με Java - φυσικα αν θες να φτιάξεις προγραμματάκια με εικονίτσες, χρωματάκια, και λοιπα ωραία.
Μα φυσικά, άλλωστε ειδικά το swing είναι ταχύτατο, μέχρι να ανοίξει ένα παράθυρο φτιάχνεις καφέ (όχι φίλτρου, ελληνικό στη χόβολη)
Για αυτό όσοι φτιάχνουν παιχνίδια το έχουν γυρίσει όλοι στην java.

Παράθεση
Ναι, έ; Να με συμαπαθας, αλλα αμφιβάλλω αν είδες ποτε σου κώδικα Linux kernel!
η αλήθεια είναι ότι δεν έχω δει, παραδέχομαι το λάθος μου δημοσίως

Παράθεση
Ειδικα το Linux για τα πισιά (που είχα την περιέργεια και την υπομονη να το ψάξω) είναι ΚΑΙ σε C! :-)
Αυτο το "και" είναι που κάνει τη διαφορα!... Ο κώδικας του πυρήνα είναι (περίπου) 60% assembly 80x86, 35% C και τα ρέστα C++.
Κοίτα πιστεύω ότι ο Linus Torvalds, ο δημιουργός του Linux έχει αντίθετη άποψη με σένα
Torvalds: Stick to C for kernel coding

Επίσης στην wikipedia στη λέξη Linux Kernel  λέει το παρακάτω
Linux is written in the version of the C programming language supported by GCC (which has introduced a number of extensions and changes to standard C), together with a number of short sections of code written in the assembly language

δηλαδή το μεγαλύτερο μέρος του Linux kernel είναι σε C και κάποια συγκεκριμένα κομμάτια που προφανώς έχουν σχέση με το h/w interface είναι σε Assembly.

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Παράθεση από: gia_desimo στις 19 Δεκ 2008, 10:50:19 ΠΜ
Μήπως προγραμματίζεις εύκολα σε παραθυρικο περιβάλλον με δαύτην;

Με Java ή C# είναι όντως πιο εύκολος ο προγραμματισμός GUI, αλλά για την ώρα η αχανής πλειοψηφία των παραθυρικών προγραμμάτων είναι γραμμένα σε C ή C++.

Παράθεση από: gia_desimo στις 19 Δεκ 2008, 10:50:19 ΠΜ
Ο κώδικας του πυρήνα είναι (περίπου) 60% assembly 80x86, 35% C και τα ρέστα C++.

Σόρρυ αλλά αυτό είναι τελείως λάθος. Παραθέτω το ορθό από εδώ:
ΠαράθεσηAccording to SLOCCount, 96.4 per cent of the code is written in C and 3.3 percent in Assembler.

Αυτά μόνο για τον kernel (επειδή αναφέρθηκε), για το λειτουργικό Gnu/Linux προφανώς τα ποσοστά θα είναι διαφορετικά.

Παράθεση από: gia_desimo στις 19 Δεκ 2008, 10:50:19 ΠΜ
Ασπασμους! Καλο Σ/Κ!

Επίσης! :)

mostel

Να μάθει C για εκπαιδευτικούς σκοπούς και μόνο ;

Σόρυ, αλλά διαφωνώ σε αυτό το point, κάθετα. Δηλαδή εσύ μου λες τώρα ότι η C υπάρχει για μουσειακούς/εκπαιδευτικούς λόγους και μόνο αυτό ;


Το λειτουργικό μου είναι σχεδόν ολόκληρο φτιαγμένο πάνω σε C (fbsd) .


Αν ήταν μόνο για εκπαιδευτικούς σκοπούς και μόνο, πώς εξηγείς, γιατί σχεδόν όλα π.χ. τα exploits (τουλάχιστον σε αυτό τον τομέα το 'χω ψάξει λίγο παραπάνω), είναι κατασκευασμένα πάνω σε C embedded with assembly ?





When you see a good move ; Look for a better one .

evry

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

Απλά στην ελληνική αγορά εργασίας σε πόσες εταιρίες θα γράψεις κώδικα σε καθαρή C? στις περισσότερες θα σου ζητήσουν VB, Java άντε και C#. Και αν σου ζητήσουν C++ θα είναι σίγουρα κάτω από το περιβάλλον του Visual Studio.
   
Παράθεση από: mostel στις 19 Δεκ 2008, 06:28:20 ΜΜ
Να μάθει C για εκπαιδευτικούς σκοπούς και μόνο ;

Σόρυ, αλλά διαφωνώ σε αυτό το point, κάθετα. Δηλαδή εσύ μου λες τώρα ότι η C υπάρχει για μουσειακούς/εκπαιδευτικούς λόγους και μόνο αυτό ;

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

mostel

Παράθεση από: evry στις 19 Δεκ 2008, 06:55:42 ΜΜ
Μάλλον με παρεξήγησες [...]


Δεν αναφερόμουν σε εσένα Evry, αλλά στον gia_desimo. Κακώς που δεν έκανα quoting!
When you see a good move ; Look for a better one .

gia_desimo

Πώπώωω, υποστηρικτες πού 'χει η C!!! :)  :)  :)

Για ν' απαντήσω σ' ένα σημαντικο θέμα:

Για μένα, μια γλώσσα είναι ανωτέρου επιπέδου (α) όταν έχει πάνω απο 100 εντολες και (β) μόνον όταν έχω αποτελέσματα αμέσως. Δηλαδη:

(i) Βρίσκω αμέσως στο εγχειρίδιο τα 4-5 βασικα υποσύνολα εντολων που πρέπει να έχει κάθε γλώσσα ανωτέρου επιπέδου ( (α)για σταθερες-μεταβλητες-πίνακες-μαθηματικες πράξεις, (β) για υπορουτίνες κι έτοιμες συναρτήσεις, (γ) για διαμορφωμένη έξοδο σε οθόνη-εκτυπωτη, (δ) για γράψιμο-διάβασμα αρχείων ).
(ii) Γράφω όσον κώδικα έχω να γράψω.
(iii) Καλω τον compiler (χωρις να μου πολυζαλίζει τον έρωτα με παραμέτρους και τέτοια) κι έχω αποτέλεσμα.

Μ' άλλα λόγια, όταν μπορω να ρίξω -σχετικα- απερίσπαστος τον χρόνο μου και την ενέργειά μου στην υλοποίηση των πραγμάτων που έχω στο μυαλο μου. Κι όχι στο να μάθω (ή να ξοδεύομαι σε βιβλία που μασάνε τα λόγια τους... για ν' αγοράσεις και τον β' τόμο!) πώς θα χαϊδεύω και θα κάνω νταχτιρντί αρχαίους και περιορισμένων δυνατοτήτων compilers, μπας και κάποτε μου κάνουν τη χάρη να δουλέψουν.

Αν, τώρα, είναι να ψάχνω με ποια παράμετρο θα καλέσω τον compiler για να κάνω ...πράξεις με δεκαδικους (βλέπε την αγάπη σας τη C), και ν' αγοράζω πέντε βιβλία των 20-25 ευρών έκαστον για να τη βρω ...στο πέμπτο, άσε!... Ευχαριστω, δεν θα πάρω αρχαιολογίες του 1970 και πάω γι' άλλα! (Μ' όλον τον σεβασμο στους κυρίους Κέρνιγκαν και Ρίτσι, να εξηγούμαστε! Αλλα τα λάθη και οι αδυναμίες πρέπει να φανερώνονται, όχι ν' αποκρύπτονται.)

Όσο για το ποσοστο της C στον πυρήνα του Linux: Κατ' εκτίμηση ήταν αυτο που αναφέρω! Βασικα χρειάζεται ένα προγραμματάκι να μετρήσει επακριβως τις εντολες... αλλα ο γράφων αυτη την εποχη αδυνατει να σκαρώσει τοιούτον τι, διότι ασχολείται με προγραμματισμο ...βρεφικου ταΐσματος!  :)

Τώρα, η Java πόσες εντολες έχει; (Που ρωτάει ο evry.) Μέτρησα πρόχειρα καμια 250αρια. (Απ' το -άθλιο- βιβλίο της Laura Lemay.)

Και με την ευκαιρία, μια που το αρχικο ερώτημα ήταν για βιβλιογραφία: Πιστεύω ότι καλα μαθήματα / καλη τεκμηρίωση για όσα συζητάμε εδω (κυρίως C και Java - ειδικα στη Java το βιβλίο του το θεωρω απαραίτητο) έχει η ιστοσελίδα του Bruce Eckel, εδω: http://www.mindviewinc.com/Index.php
Κάποτε μπορούσες να κατεβάσεις δικα του βιβλία δωρεαν σε pdf, σήμερα δεν ξέρω. Δεν έχετε παρα να δοκιμάσετε!
3 και η τρέχουσα μείνανε! (Ολυμπιάδες μέχρι τη σύνταξη.)

gia_desimo

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

Λοιπον, ευχες για ένα καλο 2009! Ό,τι επιθυμείτε, να το βρείτε! Μέχρι και C ανωτέρου επιπέδου, που λέει ο λόγος!  :D

(Για μένα αρκουν 2 μύρια ευρω, για να τα παρατήσω και να κάτσω ...ν' ασχοληθω με τη C με την ησυχία μου!  :) :)  Μη γελάτε, πρόκειται για υπολογισμένα πράγματα! Μένουν καμια 15αρια χρόνια μισθοι απ' το δασκαλίκι, συν -πες- 30 χρόνια ζωη στη σύνταξη, κάνουν χοντρικα ένα μύριο. Συν ακόμη ένα για τη σύζυγο που δεν δουλεύει, δύο. Τα παίρνω προκαταβολικα και παραιτούμαι!)

Ειρήνη στη Γη, ευτυχία, γαλήνη, δημιουργία, και να βάλουν τα γυαλια οι δκοι μας προγραμματιστες στην υπόλοιπη ανθρωπότητα!
3 και η τρέχουσα μείνανε! (Ολυμπιάδες μέχρι τη σύνταξη.)

p-p

“When Kepler found his long-cherished belief did not agree with the most precise observation, he accepted the uncomfortable fact. He preferred the hard truth to his dearest illusions; that is the heart of science.” - Carl Sagan

evry

Παράθεση από: gia_desimo στις 22 Δεκ 2008, 09:41:50 ΠΜ
Πώπώωω, υποστηρικτες πού 'χει η C!!! :)  :)  :)

Παράθεση
Για μένα, μια γλώσσα είναι ανωτέρου επιπέδου (α) όταν έχει πάνω απο 100 εντολες και (β) μόνον όταν έχω αποτελέσματα αμέσως.
Με την Java έχεις αποτελέσματα αμέσως, απλά με τη C έχεις καλύτερα αποτελέσματα

Παράθεση
Όσο για το ποσοστο της C στον πυρήνα του Linux: Κατ' εκτίμηση ήταν αυτο που αναφέρω! Βασικα χρειάζεται ένα προγραμματάκι να μετρήσει επακριβως τις εντολες... αλλα ο γράφων αυτη την εποχη αδυνατει να σκαρώσει τοιούτον τι, διότι ασχολείται με προγραμματισμο ...βρεφικου ταΐσματος!  :)
Τι προγραμματάκι και τι να μετρήσει? Εδώ ο ίδιος ο δημιουργός του Linux λέει ότι το μεγαλύτερο κομμάτι (πάνω από 90%) είναι σε C. Εσύ πως έχεις την εντύπωση ότι είναι σε assembly? Ξέρεις κάτι περισσότερο από τον Linus Torvalds?

Παράθεση
Τώρα, η Java πόσες εντολες έχει; (Που ρωτάει ο evry.) Μέτρησα πρόχειρα καμια 250αρια. (Απ' το -άθλιο- βιβλίο της Laura Lemay.)
οκ, για αυτό σε ρώτησα, γιατί υποψιαζόμουν ότι συγχέεις τη γλώσσα με τις βιβλιοθήκες της. Στην πραγματικότητα η Java είναι πολύ πιο φτωχή γλώσσα από τη C++. Η διαφορά είναι στις βιβλιοθήκες και στην τεκμηρίωση του API που είναι πράγματι πολύ καλή.
  Εσύ προφανώς θεώρησες ότι και οι βιβλιοθήκες γραφικής διεπαφής, io streams κλπ είναι μέσα στην γλώσσα. Όταν μιλάμε για τις εντολές της γλώσσας μιλάμε μόνο για αυτές που υπάρχουν στο specification. Αν είναι έτσι να βάλουμε στη C++ και όλες τις βιβλιοθήκες της μαζί με QT κλπ να δεις πόσες εντολές θα βγουν.


What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

tzorvas

Ευχαριστώ για τη βοήθεια παιδιά :)

Ευρυπίδη θα αγοράσω και το δεύτερο τίτλο..

Προσωπικά στους pointers θέλω πολύωρη εξάσκηση ακόμη..

Προσωπικά πιστεύω πως δεν είναι περιττό το να μάθεις C..

Το γιατί είναι πολύπλοκο και δεν μπορώ να το αναλύσω τώρα :)

Συνεχίστε τις συζητήσεις.. Καλά Χριστούγεννα να έχουμε όλοι :)

Make World Better for all!

Τελειόφητος του 2ου Ε.Λ.Χαλκίδας

Προπτυχιακός Φοιτητής @ ICSD-University of the Aegean