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

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

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

accordionman

Γειά σας παιδιά. Θα ήθελα να ασχοληθώ σοβαρά με την εκμάθηση της C. Ετσι , θα ήθελα να μου προτίνετε εάν γνωρίζεται κάποια βιβλία για να την μάθω. Ξερω πως για να την μαθει κανεις αυτη, πρεπει να γινουν πολλα ξενύχτια. Τέλος παντων...

Απαντήστε μου εαν μπορείται.

sstergou

Κατά καιρούς συνάδελφοι έχουν προτείνει διάφορα βιβλία...
Θα σου πρότεινα να ξεκινήσεις με C πάντως και όχι με C++.

https://alkisg.mysch.gr/steki/index.php?topic=2579.0

https://alkisg.mysch.gr/steki/index.php?topic=1709.0

dpa2006

#2
δες και τα εξής:
1, 2, 3
Επίσης δες αυτόν τον οδηγό
Και καλή γνώση αγγλικών γιατί η ελληνική βιβλιογραφία είναι περιορισμένη.
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

itt

Γιατί θες να μάθεις C;Τι θες να γράψεις σε C;Έχεις χρησιμοποιήσει κάποια άλλη γλώσσα;Θες να μάθεις και C++;Ομοίως,γιατί θες να μάθεις C++;

Άμα αμφιταλαντεύσε για σοβαρούς λόγους μεταξύ των δύο,μην ασχοληθείς καν με C.Με τη C++ σχεδόν σε όλες τις περιπτώσεις θα κάνεις καλύτερα,πιο εύκολα και πιο κομψά τη δουλειά σου.Ακόμα και αν χρειάζεται να χρησιμοποιήσεις κάποιο ΑPI γραμμένο σε C,προτίμησε να γράψεις κάποιο wrapper σε C++,εκτός αν μιλάμε για life critical σύστημα.

Άμα θες να μάθεις σε εισαγωγικό επίπεδο τη γλώσσα,στο πνεύμα μιας γενικής εισαγωγής στον προγραμματισμό,ξέχνα το.Μάθε python,πολύ πιο rewarding και εύκολη.

Άμα θες τόσο πολύ να μάθεις C++,αγόρασε (αν δεν έχεις θέμα με τα αγγλικά)  αυτό http://www.amazon.com/C-Programming-Language-Special/dp/0201700735.

accordionman

πρώτα απο όλα.. Δεν έχω ασχοληθεί με καμία γλωσσα προγραμματισμου παρα μονο με την 'Ψευδογλώσσα'..

Φίλε itt , θέλω να ασχοληθώ σοβαρά με την C++..Δηλαδή θέλω να φτάσω σε επίπεδο να μπορώ να φτιαχνω προγραμματα..Ξέρω ομως ότι για να γίνει αυτό , πρέπει να ασχοληθώ με αυτή παρα πολύ καιρό..τώρα οσον αφορά το βιβλίο που πρότεινες , το εχεις χρησιμοποιήσει δηλαδη το προτινεις επειδή σε βόλεψε και έμαθες απο αυτό ή το προτείνεις επειδή εχει καλές κριτικές??

ΥΓ. ΟΣΟΝ ΑΦΟΡΑ ΤΩΡΑ ΤΗΝ ΕΚΜΑΘΗΣΗ ΤΗΣ C Η ΤΗΣ C++ , πολλοι προτείνουν να ξεκινήσω με την C  και μετά με της c++..άλλοι παλι λένε απευθεία με την C. Πραγματικά δεν ξέρω με ποιά απο τις δύο να αρχίσω. Τώρα πολύ εκτός απο τα βιβλίο που πρότεινες , προτινουν και του C.Primer 5th Edition.. Γνωρίζεις μηπως αν και αυτό ειναι καλό??

itt

#5
Αν με το "ξευδογλώσσα"αναφέρεσαι σε αυτή του ΑΕΠΠ,θα σου προτείνα να μην ασχοληθείς με C++.

Άλλα πάμε απο την αρχή.

Τι είδους προγράμματα θες να φτιάχνεις;Σε ποιους θα απευθύνονται;

Το βιβλίο που σου πρότεινα το έχει γράψει ο Stroustrup,ο αρχικός σχεδιαστής της C++,είναι άψογο και πολύ καλό για μια βασική εισαγωγή.Το Primer(που ανέφερες) είναι επίσης καλό βιβλίο,κατέβασέ τα και τα δύο να τα έχεις.

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

Όπως γράφω και στην αρχή,πρέπει να ξεκαθαρίσεις τι είδους εφαρμογές θες να γράφεις.Η C++ μπορεί να μην είναι η ιδανική επιλογή,δεδομένου του expotential curve της εκμάθησής της και για άπειρους άλλους τεχνικούς λόγους.

accordionman

Φαντάζομαι πως όλα τα προγράμματα μπορεί να γραφούν στην C++.M μπορεί να κάνω και λάθος.  Προφανώς η C oσο και η   C++ δεν απευθύνονται σε όλους! άρα και τα προγράμματα που φτιάχνονται σε αυτές απευθύνονται σε γνώστες του αντικειμένου. τωρά οσον αφορά το είδος των προγραμμάτων που θα υλοποιήθουν σε αυτες, ειναι αγνωστο για την ώρα!  :D

itt

Aφού γενικά δεν έχεις ασχοληθεί με κάποια γλώσσα,πιάσε μάθε python.   

https://alkisg.mysch.gr/steki/index.php?topic=4733.0 Εδω υπάρχει  μια συζήτηση για ebooks στα ελληνικά.

Oρίστε και ένα αγγλικό πολύ καλό βιβλίο: http://www.diveintopython.net/toc/index.html

Γιατί python;


  • Είναι ένα καλό σύστημα.χωρίς να μπω σε λεπτομέρειες για συγκεκριμένα πλεονεκτήματα.
  • Υπάρχει η IronPython που στην ουσία είνα .NET υλοποίηση οπότε μπορείς όταν ανεβαίνεις επίπεδο,να χρησιμοποιήσεις μείγμα python+C#.
  • Είναι πολύ εύκολη στην εκμάθηση,παίζεις χωρίς να χρειάζεσαι ντουζίνες βιβλιοθηκών
  • Υπάρχει μια ενθουσιώδη και μεγάλη κοινότητα που την υποστηρίζει.
  • Μπορείς να εστιάσεις στο πρόβλημα και όχι να πολεμάς με συγκεκριμένες γλωσσικές δομές.
  • Yπάρχει το django για RAD web εφαρμογών.Πολύ,καλό in par κατά τη γνώμη μου με το Ruby on Rails.

Το να μάθεις python για αρχή,είναι μια πολύ καλή επένδυση.Η C++ είναι μια multiparadigm αχανής ήπειρος,που θα σου πάρει καιρό να την μάθεις άρτια.Τι εννοώ;

Ο compiler της C++ δεν σου προσφέρει το δίχτυ ασφαλείας που χρειάζεται κάποιος αρχάριος.Θα αφήσει να γίνουν compiled πράγματα που σου φαίνονται αθώα,αλλά που θα σε βάλουν στη διαδικασία του debugging ανούσιων σημείων.Θα συνηθήσεις σε μη αποδοτικές τεχνικές επειδή απλά "δουλεύει".Θα πρέπει να ασχοληθείς με low-level και πολλές φορές platform-dependant λεπτομέρειες,αντί να ασχολείσαι με την ουσία,id est το πρόβλημα που θες να επιλύσεις/αλγόριθμο που υλοποιείς.

Μην νομίζεις πώς είμαι κατά της C++ per se,είναι σίγουρα μία απο τις πιο ισχυρές γλώσσες,που σου δίνει την ευελιξία να κάνεις πολλά πράγματα.Αλλά κατα τη γνώμη μου,δεν υπάρχει λόγος να ασχοληθείς με αυτή όντας/ούσα αρχάριος/α,ώς πρώτη επαφή με μία pragmatic γλώσσα.

YΓ. Κάτι που ίσως σου φανεί άσχετο,αλλά είναι πολύ σχετικό άμα το αναλογιστείς.Δεν ξέρω ποια είναι η σχέση σου με τα αγγλικά.Πρέπει να μάθεις σε ένα ικανοποιητικό επίπεδο,αν θες να προχωρήσεις.Είναι η lingua franca της επιστήμης,δεν αναφέρομαι απλώς στο επικοινωνιακό κομμάτι.Συνήθησε την ορολογία,βρες ένα λεξικό,αλλά με την ίδια ευκολία που σου έρχεται στο μυαλό ο αόριστος του "είμαι",πρέπει να αντιμετωπίζεις το bijective function π.χ.

accordionman

Μετα Αγγλικά δεν εχω κανένα προβλημα ! Εχω Proficiency  ! Δεν μου λες, και στην C++ τι ειδους προγραμματα μπορεις να φτιαξεις? Φανταζομαι τα παντα ετσι?

itt

Mπορείς να φτιάξεις πολλά,κάποια είναι πιο εύκολα να τα γράψεις κάποια όχι.Να ρωτήσω προς τι το κόλλημα με τη C++;

accordionman

 Δεν εχω κολλημα! Απλως ρωτω για να μαθω!  :D

itt

#11
Θες να μάθεις τι προγράμματα; Δες μερικά.


accordionman

Να , φτιαχνεις κατι τετοια τετοια και βγαζεις λεφτα!  ;)

itt

Κάτι το οποίο δεν έχει και πολύ σχέση με αυτό που συζητάμε βέβαια.Μπορεί αυτοί που γράψανε σε Lisp να βγάλανε πιο πολλά απλώς και μόνο επειδή υπήρχε συγκεκριμένο target group.Αυτή τη στιγμή το flow είναι το web developing,στο οποίο υπάρχουν πολύ καλύτερες λύσεις απο C++.


accordionman

Προφαν'ως, για να το λες κάτι περισσότερο θα ξερεις απο μένα! τελικά πηρα την αποφαση μου! Θα ασχοληθώ με την C++! Αν και θα δυσκολευτω πολυ! Δεν βαριεσαι! Οτι ξέρει κανείς ειναι καλο! :)

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 άρθρα,χρόνο δηλαδή μελέτης μέσω του υπολογιστή.Τα περισσότερα θα είναι στα αγγλικά.Θα μπορούσες να βρεις καλά βιβλία στα ελληνικά,μεταφράσεις ίσως καλών ξενόγλωσσων τίτλων,αλλά άμα έχεις τόσο πρόβλημα να αφιερώνεις χρόνο μελέτης πάνω απο τον υπολογιστή,ίσως δεν αξίζει και να κάθεσαι να παιδεύεσαι.Αυτό εννοούσα,προς αποφυγή παρεξηγήσεων.

striker

Παράθεση από: itt στις 25 Ιουν 2013, 06:42:10 ΜΜ
Μπορείς να ξεκινήσεις μα κάτι πιο απλό,αντί C++.Ἀλλα άμα έχεις αυτές τις δύο "αδυναμίες"που λες,καλύτερα να ασχοληθείς με τίποτα άλλο,no offense.

Νομίζω ότι δεν κατάλαβες τι εννοούσα.Όταν λέω ότι δεν  μπορώ να μελετήσω μέσω του υπολογιστή,δεν εννοώ ότι έχω πρόβλημα με το γράψιμο του κώδικα.Στο θεωρητικό κομμάτι είναι το πρόβλημα.Δεν μπορώ πχ να κατεβάσω ένα βιβλίο σε PDF μορφή και να το μελετάω μπροστά στην οθόνη.Το πρακτικό κομμάτι,δηλαδή να φτιάχνω προγραμματάκια,είναι η ευχαρίστησή μου!

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

Τέλος πάντων,θα ξεκινήσω την C++ και θα δω τι θα καταφέρω...

itt

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

striker

Παράθεση από: itt στις 25 Ιουν 2013, 07:19:23 ΜΜ
Δεν εννοούσα ότι έχεις πρόβλημα στο να γράφεις κώδικα,εννοούσα πώς έχεις πρόβλημα στο να διαβάζεις 10 πράγματα θεωρητικά στο γιατί δεν δουλεύει ο κώδικας  :P Εμείς πάντως εδώ είμαστε,άμα μπορούμε να σε βοηθήσουμε σε κάτι θα το κάνουμε.

Μόλις είδα το edit που έκανες.Άρθρα και σχετικές ιστοσελίδες μπορώ να διαβάσω.Αυτό που δεν μπορώ να διαβάσω είναι ένα PDF βιβλίο των 500 σελίδων.Πιστεύω ότι υπάρχει διαφορά άναμεσα σε αυτές τις δυο περιπτώσεις.

itt

Εχω και εγώ πρόβλημα,αλλά για αυτό υπάρχουν τα ebook readers(π.χ kindle).Εναλλακτικά,μπορείς να τα εκτυπώνεις.Είναι πιο οικονομικό απο το να τα αγοράζεις(ακόμα και το kindle είναι πιο οικονομικό),δεδομένου πώς ένα καλό βιβλίο απο την Addison-Wesley θα πάει κοντά στα 40 ευρώ.

itt

Επίσης,έψαξα λίγο για το βιβλίο του Χατζηγιαννάκη,αναφέρεσαι σε αυτό; http://www.klidarithmos.gr/main/index.php?dispatch=products.view&product_id=33159


ΥΓ. Λάθος,είδα πώς έχει βγάλει και κάτι για C++,θα ψάξω να το βρω.

evry

Κάθε χρόνο φτιάχνω ένα γκρουπάκι μαθητών στο σχολείο και κάνουμε μαθήματα προετοιμασίας για τον πανελλήνιο διαγωνισμό πληροφορικής. Από την εμπειρία μου όλα αυτά τα χρόνια έχω καταλήξει στο γεγονός ότι το καλύτερο για κάποιον που θέλει να μάθει C++ αλλά δεν ξέρει C, είναι να ξεκινήσει με το C κομμάτι της C++.
Το καλύτερο βιβλίο για να το κάνεις αυτό από το 0 είναι κατά τη γνώμη μου το C++ How To Program, Deitel & Deitel.
Υπάρχει μεταφρασμένο και στα ελληνικά, αλλά καλύτερα να πάρεις το Αγγλικό. τα αγγλικά του είναι απλά , δεν θα έχεις πρόβλημα.

Επίσης το βιβλίο του Roberts ποπυ είχα αναφέρει σε άλλο post είναι πολύ καλό για C, και μου αρέσει γιατί σε εισάγει και σε καποιες βασικές έννοιες αλγοριθμικής , αν δεν βιάζεσαι τόσο να πας στη C++. Δεν θα σου κάνει κακό να δουλέψεις λίγο σε C και να μεταβείς μετά στη C++. Έτσι θα εκτιμήσεις περισσότερο τη C++ όταν φτάσεις εκεί και λιγότερο τη Java  ;)  όταν έρθει η ώρα της
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

itt

ΠαράθεσηΕπίσης το βιβλίο του Roberts ποπυ είχα αναφέρει σε άλλο post είναι πολύ καλό για C, και μου αρέσει γιατί σε εισάγει και σε καποιες βασικές έννοιες αλγοριθμικής , αν δεν βιάζεσαι τόσο να πας στη C++. Δεν θα σου κάνει κακό να δουλέψεις λίγο σε C και να μεταβείς μετά στη C++. Έτσι θα εκτιμήσεις περισσότερο τη C++ όταν φτάσεις εκεί και λιγότερο τη Java    όταν έρθει η ώρα της

Δεν νομίζω να έχει πρόβλημα.Για τόσο trivial κώδικα,οι αλλάγες που θα χρειαστεί να κάνει για να γίνει compiled με C++ compiler θα είναι ελάχιστες.Όπως είπες και εσύ,μπορεί απλούσταστα να περιοριστεί σε ένα subset της C++ που είναι κοντά στη C.

Άμα θέλει να μάθει κάποια στοιχειώδη αλγοριθμικά πράγματα,δεν χρειάζεται να ασχοληθεί καν με C,C++,D και άλλα τέτοια χαριτωμένα.Δεν θέλει java;C# μέσω monodevelop,ακόμα και η pascal που ξέρει τον καλύπτει για τους αλγόριθμους.Γιατί να θέλει κάποιος να ξεκινήσει να μαθαίνει προγραμματισμό με την C++ είναι beyond me που λένε και οι Άγγλοι.</rant>

evry

Παράθεση από: itt στις 25 Ιουν 2013, 10:20:43 ΜΜ
Όπως είπες και εσύ,μπορεί απλούσταστα να περιοριστεί σε ένα subset της C++ που είναι κοντά στη C.
Το καλύτερο κατά τη γνώμη μου είναι αυτό. Δηλαδή χρησιμοποιείς για έξοδο cin, cout, δεν μιλάς καθόλου για pointers, δεσμεύεις μνήμη με new/delete, και από εκεί και πέρα το πόσο βαθιά θα πας είναι δικό σου θέμα. Την τακτική αυτή τη χρησιμοποιώ τα τελευταία 2 χρόνια που κάνω C++ στην Β Λύκειου στο μάθημα της επιλογής. (όταν λέω κάνω C++ προφανώς δεν κάνω αντικειμενοστρεφή, αλλά αυτό το subset που λέμε. Τα παιδιά όμως τρελαίνονται αν τους πεις "θα κάνουμε C++" και μπορείς να τους κρατήσεις για κάποια μαθήματα με απλά προγραμματάκια, τα οποία τους δίνεις έτοιμα και τα παιδιά τα τροποποιούν)

Παράθεση
Γιατί να θέλει κάποιος να ξεκινήσει να μαθαίνει προγραμματισμό με την C++ είναι beyond me που λένε και οι Άγγλοι.</rant>

Ας πούμε ότι κάποιος θέλει να ξεκινήσει προγραμματισμό. Προφανώς κάποια στιγμή θα χρειαστεί να εμπλακεί με κάποια από τις C, C++, Java, θα τις βρει μπροστά του. Για ποιο λόγο λοιπόν να μάθει Pascal ? δεν του προσφέρει τίποτα. Το μόνο θετικό της Pascal είναι ότι μοιάζει λίγο στη σύνταξη με τη ΓΛΩΣΣΑ. Έτσι ξεκινώντας με αυτό το υποσύνολο της C++ που λέω, και μαθαίνει στοιχειώδη προγραμματισμό αλλά και "είναι πιο κοντά" στην δομή/σύνταξη αυτών των γλωσσών που είναι παράγωγα της C.

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

Για να συνοψίσω η γνώμη μου είναι ότι αν κάποιος θέλει να ασχοληθεί με τον προγραμματισμό θα πρέπει να δει τουλάχιστον μια γλώσσα από την οικογένεια C#, C++, Java (με προτιμότερη τη C++) και μια script γλώσσα όπως javascript ή python με προτίμηση στην python.

ΥΓ. Παρατηρώ ότι αποτρέπεις τον κόσμο να ασχοληθεί με τη C. Γιατί   ???
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

itt

ΠαράθεσηΑς πούμε ότι κάποιος θέλει να ξεκινήσει προγραμματισμό. Προφανώς κάποια στιγμή θα χρειαστεί να εμπλακεί με κάποια από τις C, C++, Java, θα τις βρει μπροστά του. Για ποιο λόγο λοιπόν να μάθει Pascal ? δεν του προσφέρει τίποτα. Το μόνο θετικό της Pascal είναι ότι μοιάζει λίγο στη σύνταξη με τη ΓΛΩΣΣΑ. Έτσι ξεκινώντας με αυτό το υποσύνολο της C++ που λέω, και μαθαίνει στοιχειώδη προγραμματισμό αλλά και "είναι πιο κοντά" στην δομή/σύνταξη αυτών των γλωσσών που είναι παράγωγα της C.

Μιλώντας για κάποιον που δεν ξέρει τίποτα πέρα απο την λογική της ΓΛΩΣΣΑΣ,μου φαίνεται αρκετά αποδεκτό να δει pascal.Υπάρχει η delphi,υπάρχουν διάφορα.Γενικά δεν θα το συνιστούσα σε κάποιον αλλά δεν είναι και τόσο εξωπραγματικό.Στους ΗΜΜΥ αρκετά χρόνια κάναν pascal.

ΠαράθεσηΕπίσης αυτό το υποσύνολο της C++ είναι και η καλύτερη επιλογή για όποιον θέλει να ασχοληθεί με τους διαγωνισμούς πληροφορικής.
Δεν διαφωνώ,στο code jam γράφανε C++ με STL,άμα ξέρεις τι κάνεις,θα έχεις απίστευτο αποτέλεσμα.Δεν ξέρω και πώς λειτουργούν οι συγκεκριμένοι διαγωνισμοί που ανέφερες,άμα έχουν περιορισμό στο performance προφανώς και θα αξίζει C ή C++.Αλλά εντάξει,στα δύο άτομα που είχα γράψει σε αυτό το νήμα,δεν νομίζω να τους απασχολούσε σε πρώτη φάση η συμμετοχή σε διαγωνισμό.

ΠαράθεσηΓια να συνοψίσω η γνώμη μου είναι ότι αν κάποιος θέλει να ασχοληθεί με τον προγραμματισμό θα πρέπει να δει τουλάχιστον μια γλώσσα από την οικογένεια C#, C++, Java (με προτιμότερη τη C++) και μια script γλώσσα όπως javascript ή python με προτίμηση στην python.

Γιατί να μην ασχοληθεί με C# και να προτιμήσει C++;Επειδή είναι ΜS;Είναι σε κάθε περίπτωση πιο rewarding,ειδικά τώρα που υπάρχει και το VS express και μπορείς να κάνεις πολύ πιο εύκολα πράγματα που στην C++ σου βγαίνει το λάδι να τα γράψεις(και να τα κάνεις debugg).

ΠαράθεσηΥΓ. Παρατηρώ ότι αποτρέπεις τον κόσμο να ασχοληθεί με τη C. Γιατί   
Δεν αποτρέπω γενικά κόσμο.Αποτρέπω αυτούς που θέλουν να ασχοληθούν με προγραμματισμό και δεν έχουν εμπειρία.Άμα θες να γράψεις κάτι για linux και να το κολλήσεις στον kernel,φυσικά και θα σου πω να γράψεις C.Εξαρτάται απο το τι θες να κάνεις.Η C και η C++,δεν μου φαίνεται πώς προσφέρουν κάτι σε κάποιον που ξεκινάει.Το έχω ξαναγράψει.Θα κάτσουν να μάθουν λεπτομέρειες που αρχικά,δεν θα έπρεπε να τους απασχολούν.Λεπτομέρειες,που δεν έχουν σχέση με το πρόβλημα που επιλύουν.Πιστεύω πώς είναι πιο ευχάριστο να προσπαθήσεις να λύσεις το knight tour,από το να προσπαθείς να λύσεις γιατί η συνάρτηση δεν δουλεύει,επειδή δεν αρχικοποιήθηκε ο τάδε pointer ή επειδή κάνει mutate το state της τάδε δομής.

Ακόμα και η java,που θα προσπαθούσα να την αποφύγω σε κάθε περίπτωση,σε βοηθάει να εστιάσεις εκεί που θες,τις περισσότερες φορές.Αλλά δεν έχω πρόβλημα με τη C.Εντάξει,να γράφεις wrappers πάνω στα ugly C ΑPIs δεν είναι και ότι πιο ευχάριστο,αλλά κάποτε έπρεπε να γίνει.Κατα τη γνώμη μου για έναν αρχάριο python > C(και C++) .


(Έχω πρόβλημα με την java πάντως  ;D )


striker

http://www.papasotiriou.gr/product/c-how-to-program-264220

Κύριε Ευριπίδη,αυτό το βιβλίο λέτε; Ωραία, άμα είναι θα το αγοράσω στα αγγλικά(αφού είναι καλύτερο).
Το πρόβλημα είναι ότι δεν έχω τα χρήματα για την άμεση αγορά του, οπότε θα ξεκινήσω με το βιβλίο του Χατζηγιαννάκη.

itt:Έχω διαβάσει ότι η python είναι η κατάλληλη γλώσσα για να ξεκινήσει κάποιος αρχάριος.Άμα μπορείτε, στείλτε μου κάποιο βιβλίο.Φυσικά προτεραιότηταέχει η C#/C++, οπότε με την python θα ασχοληθώ αργότερα.

evry

Κοίτα, εγώ πρότεινα ένα βιβλίο με το σκεπτικό ότι θα αγόραζες όυτως ή άλλως κάποιο. Να σου πω και την αλήθεια είχα την εντύπωση ότι ήταν πιο φτηνό. Τώρα που βλέπω την τιμή δεν ξέρω αν αξίζει τα λεφτά του και νιώθω και άσχημα που στο πρότεινα. Τες πα δίνω 1-2 επιλογές για μελέτη και ελπίζω να βοήθησα:

ένα δωρεάν καλό βιβλίο για C++ είναι του Eckel, όχι πολύ σύγχρονο αλλά καλο κατά τη γνώμη μου.
Το κατεβάζεις , το εκτυπώνεις ή το πας σε ένα φωτοτυπάδικο και στο δένει κιόλας και έχεις το βιβλίο σου.

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Μια άλλη λύση είναι να δεις μαθήματα πανεπιστημιακών τμημάτων σε C, C++ και να κατεβάσεις το υλικό.

Έχω ανεβάσει κάποια στη σελίδα μου εδώ
users.sch.gr/evripides/pdp.html

Τώρα αν θέλεις κάπως να οργανωθείς , δηλαδή να έχεις συγκεκριμένη ύλη και εργασίες ανά εβδομάδα, σου συνιστώ ανεπιφύλακτα να γραφτείς σε κάποιο από τα online μαθήματα που υπάρχουν σε διάφορες πλατφόρμες. Άξιζει και τον κόπο και τον χρόνο. Δεν χρειάζεται να πάρεις κανένα βιβλίο, όλο το υλικό είναι εκεί πάνω.
Αν θέλεις να πάρεις το μάθημα προγραμματισμού στο MIT και δεν έχεις τι να κάνεις το καλοκαίρι, να η ευκαιρία  :)

https://www.coursera.org/course/interactivepython
https://www.coursera.org/course/programming1
https://www.coursera.org/course/cs101
https://www.edx.org/course/harvard-university/cs50x/introduction-computer-science/254
https://www.edx.org/course/mit/6-00x/introduction-computer-science/601

πολύ Python όπως βλέπεις. Δες τι σου ταιριάζει, γράψου και περίμενε να ξεκινήσουν

@itt
Νομίζω ότι αυτό το μάθημα είναι ότι πρέπει  :D  C++ For C Programmers


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

itt

#41
Παράθεση@itt
Νομίζω ότι αυτό το μάθημα είναι ότι πρέπει    C++ For C Programmers

To coursera είναι πολύ καλό site,παρακολουθώ το μάθημα του Odersky για την Scala και κλαίω που δεν το είχα πάρει στην ώρα του,για την πιστοποίηση.Με τη Scala,δεν θα ξαναγράψω ούτε μιση γραμμή snippet java στη ζώη μου  ;)

Το μάθημα(και η Scala φυσικά) είναι καταπληκτικό,ξαναμαθαίνεις να προγραμματίζεις και το χαίρεσαι.Ακόμα και στη C++ κάνω refactor ότι μπορώ με functional λογική πλέον.

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

Δεν υπάρχει καλό βιβλίο για C++ σε καλή τιμή.Της Addison-Wesley που είναι με διαφορά τα καλύτερα,οι τιμές είναι εξωπραγματικές.Αλλά ας πούμε εντάξει,αυτό του Χατζηγιαννάκη δεν είναι δυνατόν ο Κλεδάριθμος να το δίνει 65 ευρώ,δεν πάνε καλά.

itt

#42
Παράθεσηitt:Έχω διαβάσει ότι η python είναι η κατάλληλη γλώσσα για να ξεκινήσει κάποιος αρχάριος.Άμα μπορείτε, στείλτε μου κάποιο βιβλίο.Φυσικά προτεραιότηταέχει η C#/C++, οπότε με την python θα ασχοληθώ αργότερα.

Tώρα είδα ότι το είχες γράψει αυτό.Η python είναι εξαιρετική επιλογή για να ξεκινήσεις.Ορίστε ένα πολύ καλό βιβλίο,είναι και free.

Άμα θες C#,αυτό είναι ότι καλύτερο.Ψάξε άμα δικαιούσε ως φοιτητής να κατεβάσεις το Visual Studio(το 10) από το Spark,αλλιώς κατέβασε το Visual Studio Express.

itt


striker

Σας ευχαριστώ και τους δυο για το υλικό που μου δώσατε.Ήδη έχω ξεκινήσει την Python.Άμα έχω καμιά απορία, θα την διατυπώνω εδώ.