Εκμάθηση της C++

Ξεκίνησε από accordionman, 01 Μαΐου 2013, 03:29:12 ΜΜ

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

itt

Εμ και επειδή κάτι θα ξέρω περισσότερο απο σένα,προφανώς και υπάρχει λόγος που σε αποτρέπω απο τη C++.Δεν είμαι καθηγήτης σου,ούτε σε αυτό το ύφος σου μιλάω.Στο λέω καθάρα σαν soft dev και μιλώντας σε έναν εν δυνάμει προγραμματιστή.Άμα θες λάθος επιλογές,απλά πήγαινε να παρακολουθούσεις οποιοδήποτε προπτυχιακό τμήμα CS,που δεν κάνει εισαγωγή στον προγραμματισμό με Pascal.

accordionman

Μάλιστα! Θα δώ τι θα κάνω! Σε ευχαριστώ για τον χρόνο σου!

dimitrios67

η προσωπική μου άποψη ειναι να μαθεις C (οπωσδηποτε...), αρχικα....
Μετα για να "πας" σε Object Oriented μπορεις να πας σε Java........
Η ΓΛΩΣΣΑ εχει σχεση με την Pascal, και θα πρεπει να μαθει κανεις pointers κλπ που χρειαζεται η C...

Για βιβλία θα σου προτεινα "Absolute C++" kai "Absolute Java" και τα δυο του Savitch

Στη C θα σου προτεινα αυτο... http://www.amazon.com/dp/0393979504/?tag=stackoverfl08-20,
Το "The C Programming Language" (K&R) νομιζω οτι ΔΕΝ ειναι το καλύτερο textbook....

Ελπιζω να βοήθησα......

itt

Παράθεσηη προσωπική μου άποψη ειναι να μαθεις C (οπωσδηποτε...), αρχικα....
Μετα για να "πας" σε Object Oriented μπορεις να πας σε Java........

Μπορείς να μας συνοψίσεις τους λόγους που πρέπει οπωσδήποτε να μάθει C;Για πιο λόγο θα έπρεπε να προτιμήσει τη C από την python,την jruby η ακόμα και από την pascal;

dimitrios67

Το "οπωσδήποτε" το στηρίζω στο γεγονός ότι (σχεδόν) σε όλα τα Πανεπιστήμια του κόσμου, η εισαγωγική γλώσσα για τον προγραμματισμό είναι η C.
Από την προσωπική μου εμπειρία, λέω ότι με τη C κανείς, μαθαίνει όχι μόνο τις αλγοριθμικές δομές, τον τμηματικό προγραμματισμό, αλλά επίσης θεωρώ ΑΠΑΡΑΙΤΗΤΟ ο φοιτητής, αλλά και καθένας που θέλει να ασχοληθεί με τον προγραμματισμό να ξέρει από pointers, κάτι που μπορεί να το κάνει με τη C. (και όχι π.χ. με τη Java...)

Δυστυχώς δεν ξέρω Python kai jruby, και έτσι δεν μπορώ να απαντήσω επ' αυτών.
Όσο αφορά όμως την Pascal, τα επιχειρήματα υπέρ της C, νομίζω ότι είναι τόσο «προφανή» που δεν είναι ανάγκη καν να αναφερθούν...

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

PS: χωρίς να θέλω να είναι αδιάκριτος, ποια η σχέση σου «ακαδημαϊκά» και επαγγελματικά με την πληροφορική?

itt

#20
ΠαράθεσηΤο "οπωσδήποτε" το στηρίζω στο γεγονός ότι (σχεδόν) σε όλα τα Πανεπιστήμια του κόσμου, η εισαγωγική γλώσσα για τον προγραμματισμό είναι η C.

Kάτι το οποίο είναι subject συζήτησης για την καταλληλότητα της C ως εισαγωγή σε ανθρώπους που δεν γνωρίζουν προγραμματισμό.Επίσης εδώ έχουμε ένα μεμομενομένο άτομο που θέλει να ασχοληθεί μόνο του,οπότε σαφώς και δεν θα υπάρχει καθοδήγηση απο καθηγητή.

ΠαράθεσηΑπό την προσωπική μου εμπειρία, λέω ότι με τη C κανείς, μαθαίνει όχι μόνο τις αλγοριθμικές δομές, τον τμηματικό προγραμματισμό, αλλά επίσης θεωρώ ΑΠΑΡΑΙΤΗΤΟ ο φοιτητής, αλλά και καθένας που θέλει να ασχοληθεί με τον προγραμματισμό να ξέρει από pointers, κάτι που μπορεί να το κάνει με τη C. (και όχι π.χ. με τη Java...)

Το θέμα δεν είναι να μάθει pointers που ακόμα και σε enterpise-level C++ δεν χρησιμοποιούνται σε raw μορφή.Το θέμα είναι να επιλύει το πρόβλημα που έχει στα χέρια ή να αναπτύξει τον αλγόριθμο που θέλει.Όπως ήδη έγραψα με άλλες γλώσσες 
ΠαράθεσηΜπορείς να εστιάσεις στο πρόβλημα και όχι να πολεμάς με συγκεκριμένες γλωσσικές δομές.
κάτι που στο οποίο οι pointers σαφώς και θα είναι τροχοπεδή.

ΠαράθεσηΔυστυχώς δεν ξέρω Python kai jruby, και έτσι δεν μπορώ να απαντήσω επ' αυτών.
Δεκτόν,αλλά αντιλαμβάνεσαι πώς μια απάντηση απο κάποιον που δεν προτείνει εναλλακτικἠ είναι τουλάχιστον biased.

ΠαράθεσηΌσο αφορά όμως την Pascal, τα επιχειρήματα υπέρ της C, νομίζω ότι είναι τόσο «προφανή» που δεν είναι ανάγκη καν να αναφερθούν...
Προφανή;Σοβαρολογείς;Δεν απευθύνεσαι μόνο σε μένα αλλά και στο νηματοθέτη,ο οποίος είναι μαθητής.Αυτός τι προφανές πρέπει να καταλάβει;Η pascal είναι πιο κοντά σε αυτό που κάνει ως μαθητής κάτι που απο μόνο του στέκει ώς επιχείρημα υπέρ της.Plus υπάρχει και η Delphi οπότε και μπορείς να προχωρήσεις σε αυτό
ΠαράθεσηPS: χωρίς να θέλω να είναι αδιάκριτος, ποια η σχέση σου «ακαδημαϊκά» και επαγγελματικά με την πληροφορική?
Δεν πιστεύω πώς έχει σχέση με το θέμα,δεδομένου πώς τεκμηριώνω της απαντήσεις μου.Οπότε και προφανώς μπορεί οποιοσδήποτε να αντικρούσει αυτές.Δεν υπάρχει περίπτωση σε αυτόν τον χώρο να επικαλεστώ την αυθεντία μου οπότε μην οδηγείς τη συζήτηση εκεί που δεν πρέπει.

itt

#21
Αλλά ας αναπτύξω γιατί η C δεν είναι καλή ιδέα για αρχάριους.Θα επικεντροθώ αρχικά στο ότι ο νηματοθέτης θέλει να μάθει C++.

Η C++ μπορεί να χαρακτηριστεί ως superset της C.Προσφέρει OO κομμάτι,generic programming είναι γενικά,multiparadigm.Έχει πιο χαλαρούς κανόνες σε κάποια κομμάτια(variable declarations).Φέρει δομές της C,όπως τα structs αλλά σε ένα superset manner.

Αλλά δεν είναι αυστηρό superset.Υπάρχουν πολλές διαφορές και θα αναφέρω ενδεικτικά κάποιες.

Αυτή η δήλωση :

extern void func();


Είναι διαφορετική στις δύο γλώσσες.Στη C++ αυτή είναι μια συνάρτηση η οποία δεν έχει value return και δεν παίρνει καμμια παράμετρο,οπότε και καλείται για όποιο side-effect έχει.Αλλά στη C είναι μια συνάρτηση η οποία δεν έχει return value αλλά δεν υπάρχει πληροφορία για το argument list της.

Αυτό :

int *i = malloc(sizeof(int) * 3);


Είναι valid στη C γιατί το standard της επιτρέπει implicit conversion απο void* σε άλλου τύπου pointer.

Στη C++ πρέπει να γίνει expilict cast :

int *i = static_cast<int*>(malloc(sizeof(int) * 3));

  //Η μήπως να μην μπλέκουμε τα sets oπότε

          int *i = (int*) malloc(sizeof(int)*3);


Επίσης το sizeof(char) είναι διαφορετικό σε κάθε γλώσσα.

Αυτό που θέλω να πω πάντως,είναι πώς με δυσκολία, μπορείς να γράψεις κώδικα που γίνεται compiled και στις δύο γλώσσες.Δεν υπάρχει κανένα πλεονέκτημα απο το να μάθεις C πρώτα.Επίσης υπάρχουν πάρα πολλά ιδιώματα (acceptable) της C,που στη C++ αποτελούν κακό practise.Preprocessor abuse,αστόχαστη χρήση primitive pointers,τα semantics των structs.

Καλύτερα να μάθει Objective C,αυτή είναι κανονιστικό superset της C(Οχι της C99 όμως).


Τώρα ειδικά γιατί όχι C :

Mου έρχονται πάρα πολλά πράγματα στο μυαλό,θα προσπαθήσω να στοιχειοθετήσω μερικά.Τα strings στη C είναι POD arrays(Με end-marker).Χρειάζονται functions για βασικές λειτουργίες επί των strings.Τα arrays σε function calls γίνονται decayed σε pointers.Υπάρχει χρήση jumps για κάτι σαν εμβρυακό "exception handling".Μπορώ να αναλύσω πιο δεξιοδικά άμα το ζητήσει κάποιος,αλλά υποθέτω προς το παρόν πώς επαρκούν αυτά.

Η C θα σου δώσει ένα abstraction layer πάνω απο ένα εύρος αρχιτεκτονικών επεξεργαστών.Γιατί απλούστατα να μην μάθεις μια high-level γλώσσα και χρήσιμα paradigms;Άμα κάποιος θελήσει να εμβαθύνει στο υλικό,μαθαίνει assembly RISC αρχιτεκτονικής,δεν χάνει το χρόνο του πάνω σε abstractions.

Eδώ μιλάμε για αρχάριους όμως.Δεν βλέπω κανένα λόγο να μάθει C αρχικά.Όταν αποφασίσει ότι χρειάζεται να κατανοήσει κάποια πιο low-level στοιχεία,ας προσπαθήσει C++ ή έστω και C(Κάτι που και πάλι δεν το συνιστώ).
Δεν μαθαίνεις κάποιον να κολυμπάει πετώντας τον στα νερά με τους καρχαρίες.Τον βάζεις στα ρηχά με μπρατσάκια.

Ορίστε και ένα κείμενο απο κάποιον που μπορείς να εμπιστευτείς  τη σχέση του με το computer science.



striker

Παίδια θέλω να μάθω c++.Το βιβλίο που έχω είναι  Η γλώσσα c++ σε βάθος του Χατζηγιαννάκη.Το πρόβλημα είναι ότι δεν έχω τις κατάλληλες βάσεις για να ξεκινήσω την μελέτη της c++.Ξέρω μόνο βασικές γνώσεις της pascal-την έδωσα ως εξεταζόμενο μάθημα στις πανελλήνιες.Μου πρότειναν να μάθω c και μετά να πάω στην c++.

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


itt

Δεν χρειάζεται να διαβάσεις C για να μάθεις C++.

Τα  reference βιβλία είναι :


Για αρχάριους,θα πρότεινα το Programming:Principles and Practice Using C++,του Bjarne Stroustrup,ο οποίος δημιούργησε και την γλώσσα.

Bιβλία για καλές πρακτικές  :

Effective C++
Effective STL


Πιο προχωρημένα :


Mερικά πολύ προχωρημένα είναι τα Modern C++ Design:Generic Programming and Design Patterns Applied(Πάρα πολύ καλό βιβλίο,αλλά προϋποθέτει αρκετή εξοικείωση με τη γλώσσα και με κάποια απο τα παραπάνω βιβλία) και το C++ Concurrency in Action:Practical Multithreading(Τhread library,atomics library,το C++ memory model,locks,mutexees και διάφορα θέματα debugging multithreaded εφαρμογών).

Υπάρχουν και καλά(προχωρημένα όμως) βιβλία για TMP σε C++,όπως το Advanced C++ Metaprogramming
.

Όπως είπα δεν χρειάζεται να μάθεις C για να προχωρήσεις στη C++.Σε αυτό το νήμα έχει γίνει μια συζήτηση και είχα εξηγήσει γιατί δεν είναι και ιδαίτερα καλή ιδέα να ασχοληθείς με την C++ σαν αρχάριος anyway.

striker

Δηλαδή μου προτείνεις να πάω από την pascal κατευθείαν σε c++;

Για το βιβλίο του Χατζηγιαννάκη,τι έχεις να πεις;

itt

ΠαράθεσηΔηλαδή μου προτείνεις να πάω από την pascal κατευθείαν σε c++;

Nαι,στο προτείνω.Το ότι η C++ έχει διάφορα paradigms,δεν σημαίνει πώς θα κάτσεις να τα μάθεις όλα ταυτόχρονα.Id est,δεν χρειάζεται να μάθεις procedural και OO ταυτόχρονα.

ΠαράθεσηΓια το βιβλίο του Χατζηγιαννάκη,τι έχεις να πεις;

Δεν το έχω διαβάσει,αλλά αυτά τα βιβλία που σου έγραψα είναι από τα καλύτερα που υπάρχουν για C++.Γενικά δεν διαβάζω τίποτα από Έλληνες,πέρα απο τα βιβλία του Παπαδημητρίου,οπότε δεν μπορώ να σου προτείνω κάποιο ελληνικό.

Keep Growing

Ο Έρωτας (του Εκπ/κου Πληροφορικού) στ' αλώνια της καλδέρας (του υπνωτισμού).

itt

Αρκετά παλιό,αλλά δεν μου φαίνεται άσχημο για εισαγωγή.

striker

Παράθεση από: itt στις 25 Ιουν 2013, 06:16:36 ΜΜ
Nαι,στο προτείνω.Το ότι η C++ έχει διάφορα paradigms,δεν σημαίνει πώς θα κάτσεις να τα μάθεις όλα ταυτόχρονα.Id est,δεν χρειάζεται να μάθεις procedural και OO ταυτόχρονα.

Δεν το έχω διαβάσει,αλλά αυτά τα βιβλία που σου έγραψα είναι από τα καλύτερα που υπάρχουν για C++.Γενικά δεν διαβάζω τίποτα από Έλληνες,πέρα απο τα βιβλία του Παπαδημητρίου,οπότε δεν μπορώ να σου προτείνω κάποιο ελληνικό.

Ωραία,θα κάνω μια προσπάθεια- αν και δεν νιώθω έτοιμος.

Θα ξεκινήσω με το βιβλίο που έχω.Καλώς-κακώς έχω δυο αδυναμίες: 1)Δεν μπορώ μελετήσω μέσω του υπολογιστή
2) Δεν με "βολεύουν" τα ξενόγλωσσα βιβλία.

itt

ΠαράθεσηΘα ξεκινήσω με το βιβλίο που έχω.Καλώς-κακώς έχω δυο αδυναμίες: 1)Δεν μπορώ μελετήσω μέσω του υπολογιστή
2) Δεν με "βολεύουν" τα ξενόγλωσσα βιβλία.

Μπορείς να ξεκινήσεις μα κάτι πιο απλό,αντί C++.Ἀλλα άμα έχεις αυτές τις δύο "αδυναμίες"που λες,καλύτερα να ασχοληθείς με τίποτα άλλο,no offense.



Edit :

Δεν ήθελα να φανώ συγκαταβατικός ή κάτι τέτοιο.Μαθαίνοντας μια programming γλώσσα,θα χρειαστεί να περάσεις πολύ χρόνο σε sites,blogs άρθρα,χρόνο δηλαδή μελέτης μέσω του υπολογιστή.Τα περισσότερα θα είναι στα αγγλικά.Θα μπορούσες να βρεις καλά βιβλία στα ελληνικά,μεταφράσεις ίσως καλών ξενόγλωσσων τίτλων,αλλά άμα έχεις τόσο πρόβλημα να αφιερώνεις χρόνο μελέτης πάνω απο τον υπολογιστή,ίσως δεν αξίζει και να κάθεσαι να παιδεύεσαι.Αυτό εννοούσα,προς αποφυγή παρεξηγήσεων.