Λίγες σκέψεις για τις γλώσσες προγραμματισμού

...ασύγχρονα μαθήματα από τους guru της κοινότητας

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 27 Νοέμ 2011, 23:08

Σε γενικές γραμμές δεν υπάρχουν καλές και κακές γλώσσες, υπάρχουν επίκαιρες και μη. Όλες έχουν τα υπέρ και τα κατά τους και όσες περισσότερες γνωρίζει κανείς τόσο καλύτερα, επειδή μεταξύ άλλων έχει μεγαλύτερη ευκολία στο να επιλέξει την κατάλληλη γλώσσα για το πρότζεκτ (ή το module του πρότζεκτ) που καλείται να υλοποιήσει.

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

Η ιστορική αναδρομή του φίλου που ξεκίνησε το νήμα περιέχει αρκετές ανακρίβειες, όπως για παράδειγμα το ότι η Pascal σταμάτησε στην Lisa, ενώ η πραγματικότητα είναι πως στην Delphi εξέλιξή της μεσουράνησε για πάνω από μια 10ετία στις εμπορικές εφαρμογές (κυρίως 90's προς 00's) ενώ στην Ελληνική αγορά υπάρχουν ακόμα και σήμερα δουλειές για κώδικα που δεν έχει μεταφερθεί ακόμα σε άλλη γλώσσα.

Παρομοίως και για τη Βasic, κυρίως στην VB τροποποίησή της από την Microsoft, για την οποία ακόμα και σήμερα υπάρχει ζήτηση, παρόλο που εδώ και αρκετό καιρό η MS την έχει σαφώς παραγκωνίσει προς όφελος της C#.

Ένας φίλος μίλησε ήδη για την Cobol, που όντως πληρώνεται πολύ καλά διότι σήμερα σπανίζουν όσοι τη γνωρίζουν. Σε αντίστοιχη θέση (και καλύτερη) είναι και η Fortran. περισσότερο στον επιστημονικό τομέα, αλλά με τις αναθεωρήσεις που της έχουν γίνει δεν έχει να ζηλέψει και πολλά από οποιαδήποτε general purpose γλώσσα.

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

Η Java είναι πιο hot γλώσσα επαγγελματικά εδώ και πολλά χρόνια, μπροστά από την C++ που επίσης κυριάρχησε για πολλά χρόνια αλλά δείχνει σημάδια φθοράς.

Η Lisp (τη μισώ :lol:) ήταν η de-facto γλώσσα για τεχνητή νοημοσύνη (μαζί με την Prolog) τομέας στον οποίο παραμένει ισχυρή. Αλλά δεν είναι μόνο για AI, π.χ. ο GNU Emacs καθώς και πλειάδα εργαλείων της GNU είναι γραμμένα σε Lisp.

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

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 28 Νοέμ 2011, 10:31

migf1 έγραψε:Σε γενικές γραμμές δεν υπάρχουν καλές και κακές γλώσσες, υπάρχουν επίκαιρες και μη. Όλες έχουν τα υπέρ και τα κατά τους και όσες περισσότερες γνωρίζει κανείς τόσο καλύτερα, επειδή μεταξύ άλλων έχει μεγαλύτερη ευκολία στο να επιλέξει την κατάλληλη γλώσσα για το πρότζεκτ (ή το module του πρότζεκτ) που καλείται να υλοποιήσει.

Μην επαναλαμβανόμαστε όλα αυτά είναι προφανή αλλά χάνουν το θέμα.

migf1 έγραψε:
Υπάρχουν επίσης λόγοι για τους οποίους θέλει κάποιος να μάθει να προγραμματίζει (εκπαιδευτικοί, χομπίστικοι, επαγγελματικοί, ερευνητικοί) όπως υπάρχουν και διαρκώς μεταβαλλόμενες τάσεις στον καθένα από αυτούς τους τομείς.

Θα αναφερθώ σε αυτό παρακάτω.

migf1 έγραψε:
Η ιστορική αναδρομή του φίλου που ξεκίνησε το νήμα περιέχει αρκετές ανακρίβειες, όπως για παράδειγμα το ότι η Pascal σταμάτησε στην Lisa, ενώ η πραγματικότητα είναι πως στην Delphi εξέλιξή της μεσουράνησε για πάνω από μια 10ετία στις εμπορικές εφαρμογές (κυρίως 90's προς 00's) ενώ στην Ελληνική αγορά υπάρχουν ακόμα και σήμερα δουλειές για κώδικα που δεν έχει μεταφερθεί ακόμα σε άλλη γλώσσα.

Ναι έχω ανακρίβειες αλλά έχουμε και τελείως διαφορετικό νόημα στο τι εννοούμε ζωντανή γλώσσα. Οι «εμπορικές εφαρμογές» είναι φυλακή (και χωρίς τάϊσμα θα επέλθει θάνατος από ασιτία). Η διδασκαλεία στα πανεπιστήμια είναι φίλημα αγίων λειψάνων. Οι δουλειές για κώδικα που δεν έχει μεταφερθεί ακόμα σε άλλη γλώσσα είναι σπασμοί που προκαλούνται από ηλεκτρικό ρεύμα. Ο μόνος ζωντανός απόγονος τής Pascal είναι η Ada και το γεγονός ότι οι «υποστηρικτές» τις Pascal δεν έχουν μεταναστεύσει μαζικά σε αυτήν δείχνει πόσο κολλημένα μυαλά είναι. Κάποιος που απλά αρνείται να μάθει κάτι νέο (για αυτόν) απλά θα έπρεπε να πεταχτεί από την εκπαιδευτική διαδικασία. Το γεγονός ότι δεν αναφέρετε καν την Ada δείχνει ότι στα δικά μου πρότυπα ξεχνάτε πολύ πιο σημαντικά πράγματα από μένα.

migf1 έγραψε:
Παρομοίως και για τη Βasic, κυρίως στην VB τροποποίησή της από την Microsoft, για την οποία ακόμα και σήμερα υπάρχει ζήτηση, παρόλο που εδώ και αρκετό καιρό η MS την έχει σαφώς παραγκωνίσει προς όφελος της C#.

Για την VB τα είπα. Γεννήθηκε σε μια φυλακή και είναι καταδικασμένη να πεθάνει. Για την C# θα τα πω σε λίγο.

migf1 έγραψε:
Η Java είναι πιο hot γλώσσα επαγγελματικά εδώ και πολλά χρόνια, μπροστά από την C++ που επίσης κυριάρχησε για πολλά χρόνια αλλά δείχνει σημάδια φθοράς.

για την java θα τα πούμε σε λίγο.

migf1 έγραψε:
Κλείνοντας θα ήθελα επίσης να σημειώσω πως καμία γλώσσα δεν μαθαίνεται σε μερικούς μήνες.

Εξαρτάται τι εννοεί κάποιος μάθηση. Ανάλογα με το νόημα που δίνουμε η απάντηση μπορεί να είναι ότι κάποιος μπορεί να μάθει αυτό που χρειάζεται σε λίγα λεπτά ή ότι ποτέ κάποιος δεν θα έχει μάθει πραγματικά μια γλώσσα.

θα γράψω εκτενέστερα αργότερα για κάποια πράγματα.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 28 Νοέμ 2011, 12:34

lucinos έγραψε:Μην επαναλαμβανόμαστε όλα αυτά είναι προφανή αλλά χάνουν το θέμα.

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 28 Νοέμ 2011, 13:02

migf1 έγραψε:Ποιο ακριβώς είναι το θέμα; Διαφέρει από την περιγραφή του τίτλου;

Έχεις δίκιο ότι το θέμα είναι γενικό και δεν το περιορίζω σε αυτό που έχω στο μυαλό μου. Το σχόλιό μου ήταν κυρίως αντίθεση στην συνεχιζόμενη επανάληψη μιας κοινοτοπίας. Ένα εργαλείο για «τα πάντα» δεν θα έχουμε ποτέ και ούτε έχει νόημα να θέλουμε κάτι τέτοιο. Αλλά ένα εργαλείο «για όλους» θα έχουμε στο μέλλον. Δεν μπορώ να σε κατηγορήσω προφανώς ότι το σχόλιό σου είναι «εκτός θέματος», αλλά αυτό που έχω στο μυαλό μου είναι η εξέλιξη και κυρίως το μέλλον τών γλωσσών.

Θέλω να γράψω κάτι πολύ πιο εκτεταμένο για την Python αλλά αυτά που θέλω να γράψω για κάποιες άλλες γλώσσες είναι λίγα και αν και είχα σκοπό να τα γράψω μετά θα τα γράψω τώρα. Η C κατά την γνώμη μου θα ζήσει «για πάντα». Κάποιος που θέλει να γράψει κώδικα και αυτός να είναι άμεσα χρησιμοποιήσιμος ακόμα και στο «μακρινό» μέλλον η ιδανική επιλογή είναι η C. Θα περιοριστεί όμως αρκετά η χρήση της. Η C++, η java και η C# (που αυτήν την στιγμή είναι βεβαίως ζωντανές) θα πεθάνουν. Ότι θα φύγουν είμαι βέβαιος, το θέμα είναι ποιος θα τις αντικαταστήσει. Η γλώσσα που έχει την δυναμική να πάρει κατά το μεγαλύτερο μέρος την θέση τους (και όχι μόνο) και να γίνει διαχρονική αξία είναι η D. Αυτό δεν σημαίνει ότι στο μέλλον θα έχουμε λιγότερες γλώσσες. Οι πιθανότητες είναι ότι θα έχουμε ακόμα περισσότερες γλώσσες και θα γεννούνται διαρκώς νέες αλλά οι περισσότερες θα κάνουν τον κύκλο τους ή θα διατηρούνται σε κλειστούς εξειδικευμένους κύκλους. Ελάχιστες γλώσσες θα είναι σταθερές αξίες διαχρονικά.

Για τον προγραμματισμό στο μέλλον θα έχουμε τελείως διαφορετική άποψη αλλά περισσότερα για αυτό θα πω αργότερα.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 28 Νοέμ 2011, 13:37

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

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

Με λίγα λόγια, όπου υπάρχει ανάγκη για speed-critical ή/και limited-resources εφαρμογές οι natively compiled γλώσσες θα είναι πολύ πιο χρήσιμες από τις scripting/interpreted/ just-in-time compiled (virtual machine, .net cls, κλπ).

Όπως και το ανάποδο, όπου το κόστος παραγωγής υπερσκελίζει σε σημασία το resources-efficiency, οι scripting/interpreted/just-in-time compiled γλώσσες θα είναι πολύ πιο χρήσιμες από τις natively compiled.

Να γράψεις π.χ. τον πυρήνα ενός λειτουργικού συστήματος σε γλώσσες όπως οι σημερινές python & java θα παραμείνει σε γενικές γραμμές χαμηλά στη λίστα επιλογών υλοποίησης. Όπως και το να παράσχεις ένα user-development framework σε γλώσσες όπως ο σημερινές C και C++ θα παραμείνει σε γενικές γραμμές χαμηλά στη λίστα επιλογών υλοποίησης.

Πάρε για παράδειγμα το android, ο πυρήνας του (που είναι Unix) είναι γραμμένος σε C/C++ αλλά το developer framework παρέχεται σε Java. Ως android developer μπορείς να γράψεις αν θέλεις android εφαρμογές σε C/C++ (το οποίο μάλιστα ονομάζεται native code στη συγκεκριμένη πλατφόρμα) αλλά ο κύριος όγκος εφαρμογών γράφεται σε Java (και κατά την άποψή μου, πολύ καλά κάνει στη συγκεκριμένη περίπτωση).

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

Για όσους δεν γνωρίζουν τι είναι τα bindings, είναι η δυνατότητα να γράφεις επιμέρους τμήματα ενός πρότζεκτ σε διαφορετικές γλώσσες. Για παράδειγμα, ο πυρήνας των Windows είναι γραμμένος σε C/C++ ενώ στα υψηλότερα layers χρησιμοποιείται C#. Όπως επίσης μπορείς για παράδειγμα να υλοποιήσεις το μεγαλύτερο μέρος ενός πρότζεκτ ας πούμε σε Python αλλά τα speed-critical μέρη του να τα γράψεις σε C.

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

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 02 Δεκ 2011, 11:57

Ο τρόπος που προσεγγίζω την πρόβλεψη για το μέλλον, ιδιαίτερα το μεσο-μακροπρόθεσμο, είναι στην πραγματικότητα ιδιαίτερα συντηρητικός. Η αντίληψή μου όμως ότι στην βρισκόμαστε πολύ πιο πίσω από αυτό που θα μπορούσαμε. Όταν λέω είμαστε πίσω δεν εννοώ «τεχνολογικά». Εννοώ στον τρόπο που αντιμετωπίζουμε την τεχνολογία. Για παράδειγμα δεν συνηθίζουμε να δείχνουμε στα μικρά παιδιά πώς να προγραμματίζουν τον υπολογιστή. Στο βιβλίο Invent Your Own Computer Games with Python, ο συγγραφέας αναφέρει ότι παιδιά ηλικίας 9-10 ετών μπορούν να ακολουθήσουν το βιβλίο. Ο συγγραφέας κρίνει (και πολύ σωστά) από τον εαυτό του, που έμαθε να παίζει με την Basic όταν ήταν 9. Έχω προσωπικά την ίδια εμπειρία και μάλιστα και σε ακόμα μικρότερη ηλικία. Σε εμένα είναι λοιπόν ολοκάθαρο ότι στο μέλλον τα παιδιά θα μαθαίνουν προγραμματισμό και αυτό θα φαίνεται τόσο αυτονόητο όσο σήμερα φαίνεται ότι μαθαίνουμε στα παιδιά πολλαπλασιασμό. Αυτό είναι και χρήσιμο και αναγκαίο αν ο άνθρωπος θέλει να διατηρήσει και να βελτιώσει την ποιότητα ζωής του διαφορετικά καθώς οι υπολογιστές γίνονται όλο και πιο σημαντικοί στις ζωές τών ανθρώπων βαδίζουμε σε έναν ψηφιακό μεσαίωνα. Ο μεσαίωνας επιτείνεται από φεουδαρχικού τύπου νόμους για το λογισμικό. Καλύτερα να μην επεκταθώ περισσότερο σε αυτό. Αρκούμαι καλύτερα να πω ότι ένα παιδί που μαθαίνει να προγραμματίζει (χωρίς να το ζαλίσουμε προσπαθώντας πρώτα να του εξηγήσουμε τι είναι οι αλγόριθμοι κλπ) αποκτά έναν ιδιαίτερο τρόπο να σκέφτεται και τού φαίνεται ιδιαίτερα φυσικό για παράδειγμα να ονοματίζει τιμές ή να σκέφτεται πάντα χωρίς δυσκολία με τρόπο αφηρημένο τις πράξεις (και πολλές άλλες έννοιες παίρνουν με φυσικό τρόπο σάρκα και οστά)

Σε προηγούμενο ποστ κάποιος ανέφερε έναν τρόπο κατάταξης τών γλωσσών από τις κατώτερες στις ανώτερες βάζοντας σαν «ανώτερη» την Lisp. Δεν θα διαφωνήσω ακριβώς αλλά αυτή η κατάταξη δεν έχει μεγάλη σχέση με την πράξη. Δεν λέω ότι είναι «κακή». Αυτό που λέω είναι ότι εγώ θα έβαζα στο κατώτερο άκρο την Brainfuck (έτσι λέγεται η γλώσσα!) για να τονίσω την θεωρητική βάση αυτής τής κατάταξης. Έχω μια διαφορετική πρακτική κατάταξη. Κατατάσσω τις γλώσσες σε γλώσσες συστήματος και σε φλοιούς. Κλασσικό παράδειγμα τής πρώτης κατηγορίας είναι η C. Κλασσικό παράδειγμα τής δεύτερης κατηγορίας είναι ο bash. Και οι δύο κατηγορίες είναι προφανώς αναγκαίες. Αυτό που κάνει η Python είναι να βρίσκεται στην μέση. Αυτό είναι πολύ σημαντικό γιατί αυτό διευκολύνει απίστευτα τον προγραμματισμό.

Τώρα υπάρχει γενικότερα η (λανθασμένη!) άποψη ότι οι διερμηνευόμενες γλώσσες όπως η Python είναι αργές. Αν έχω ασχοληθεί ιδιαιτέρως με κάτι στον προγραμματισμό αυτό είναι η βελτιστοποίηση. Η απάντησή μου στο θέμα είναι κάπως «μη συμβατική». Οι διερμηνευόμενες γλώσσες δεν είναι πιο αργές. Από πρακτική άποψη αυτό που κάνουν είναι να ζητάνε την εκτέλεση ενεργειών και μαντέψτε· εκτελούνται με την μέγιστη δυνατή ταχύτητα, τόσο γρήγορα όσο ποτέ δεν θα μπρούσε να ξεπεραστεί από οποιαδήποτε «γρήγορη» γλώσσα όπως η C. Μάλιστα το γράψιμο ενός προγράμματος σε C άριστα βελτιστοποιημένο είναι πολύ δύσκολη υπόθεση. Αυτό που συμβαίνει είναι ότι η Python δεν παύει να μην είναι γλώσσα συστήματος. Αυτό σημαίνει απλά ότι αν συγκρίνουμε «ίδιο» κώδικα σε Python και «ίδιο» κώδικα σε C θα βρούμε την Python πολύ πιο αργή. Πόσο συχνά όμως χρειαζόμαστε κάτι τέτοιο; Μήπως δεν συγκρίνουμε ομοειδή πράγματα;

Συνεπώς «η Python είναι αργή» μεταφράζεται σε: «Η Python δεν είναι γλώσσα συστήματος και αν επιχειρήσεις να την χρησιμοποιήσεις σαν να ήταν το αποτέλεσμα είναι να χάσεις τραγικά σε ταχύτητα.

Λίγα λόγια σχετικά με την βελτιστοποίηση. Ο περισσότερος κόσμος κάνει λάθος υποθέσεις για το τι καθυστερεί τον υπολογιστή. Μην πιστεύετε τίποτα, μην υποθέτετε τίποτε, μετρήστε και δείτε. Για παράδειγμα στο ερώτημα: τι είναι ταχύτερος; ο πολλαπλασιασμός αριθμών απλής ακρίβειας ή διπλής ακρίβειας; Μην απαντήσετε χωρίς να έχετε μετρήσει και μην υποθέτετε ότι το ίδιο ισχύει για όλους τούς υπολογιστές. Εδώ κρύβεται και ένα άλλο λάθος που κάνει ο κόσμος. Συγκρίνει για παράδειγμα ένα παλιό λογισμικό με ένα νέο και λέει το παλιό είναι ταχύτερο ή το νέο είναι ταχύτερο. Η αλήθεια είναι ότι μπορεί σε παλιότερο υπολογιστή το παλιό να είναι ταχύτερο και σε νεώτερο υπολογιστή το νεώτερο να είναι ταχύτερο.

Διαβάζοντας το "Learning Python":
Python has shined as a tool that allows programmers to get more done with less effort. It is deliberately optimized for speed of development

The NumPy extension, for instance, has been described as a free and more powerful equivalent to the Matlab numeric programming system.

Even at today’s CPU speeds, though, there still are some domains that do require optimal execution speeds. Numeric programming and animation, for example, often need at least their core number-crunching components to run at C speed (or better). If you work in such a domain, you can still use Python—simply split off the parts of the application that require optimal speed into compiled extensions, and link those into your system for use in Python scripts.

To Python programs, components written in Python and C look the same. Because of this, it’s possible to prototype systems in Python initially, and then move selected components to a compiled language such as C or C++ for delivery. Unlike some prototyping tools, Python doesn’t require a complete rewrite once the prototype has solidified. Parts of the system that don’t require the efficiency of a language such as C++ can remain coded in Python for ease of maintenance and use.

Και μόνο το γεγονός ότι μπορώ να έχω κάτι ισχυρότερο και πιο ευέλικτο από το Matlab πραγματικά με ενθουσίασε. (Ταυτόχρονα περιορίζεται και η χρησιμότητα τού Octave τού οποίου το βασικό πλεονέκτημα γίνεται μόνο η συμβατότητα με το Matlab.) Αλλά όταν διάβαζα το τελευταίο η απορία μου ήταν πώς μπορεί να το λέει έτσι απλά. Ο κόσμος θα έπρεπε να χαλάει από τα ζήτω. Κάτι ακόμα για τις διερμηνευόμενες γλώσσες. Αν σε απασχολεί πραγματικά η ταχύτητα σε βάζουν χωρίς προσπάθεια στον σωστό δρόμο για μια σωστή βελτιστοποίηση. Εμπειρικά ο κώδικας που πρέπει να γραφτεί σε μια γλώσσα συστήματος για να είναι αποδοτικός είναι κατά βάση απλές διαδικασίες και φωνάζει πώς πρέπει να γίνει. Αν δεν συμβαίνει αυτό τότε όλος ο σχεδιασμός τού προγράμματος είναι λανθασμένος και αν γίνει σωστά θα κερδηθεί πάρα πολύς χρόνος όσο δεν περιμένει κανένας. Όλο το υπόλοιπο που συχνά είναι και περισσότερο δεν έχει κανένα απολύτως κόστος σε απόδοση η υλοποίησή του σε μια διερμηνευόμενη γλώσσα (γιατί κάτι που τρέχει εν ριπή οφθαλμού δεν διαφέρει σε ταχύτητα από κάτι που τρέχει εν ριπή οφθαλμού). Όταν θέλεις να κάνεις βελτιστοποίηση είναι πολύ βασικό να κάνεις οικονομία πρώτα από όλα στον δικό σου χρόνο. Αν μπορείς κατ αρχάς να το κάνεις να δουλέψει σε μία διαρμηνευόμενη γλώσσα έχεις γλυτώσει απίστευτα πολύ χρόνο, είσαι ήδη στον σωστό δρόμο (πράγμα που δεν είναι καθόλου εγγυημένο αν δουλεύεις σε μια γλώσσα συστήματος) και πρόκειται να γλυτώσεις πάρα πολύ χρόνο και γιατί είσαι στον σωστό δρόμο αλλά και γιατί οι χρονομετρήσεις είναι απλούστατη διαδικασία σε μια διερμηνευόμενη γλώσσα (απλά το τρέχεις). Η σωστή χρονομέτρηση διαφορετικά είναι πολύ πιο δύσκολο από όσο νομίζετε και αν γίνει λάθος μπορεί να οδηγήσει σε λανθασμένα συμπεράσματα. Για αυτό έλεγα ότι είναι πρόωρη βελτιστοποίηση η επιλογή γλώσσας με βάση μόνο την ταχύτητα. Συμφέρει να προγραμματίσεις σε μια γλώσσα που υπόσχεται ταχύτητα ΜΟΝΟ όταν ξέρεις καλά τι κάνεις. Και αυτό δεν συμβαίνει πολύ συχνά.

Όταν λοιπόν πιστεύω ότι θα υπάρχει μια γλώσσα χρήσιμη σε μικρά παιδιά που φτιάχνουν προγραμματάκια, σε σοβαρές δουλειές και σε επιστημονική έρευνα αυτό δεν είναι μια τρελλή μελλοντολογία. Η Python είναι πολύ κοντά σε αυτό αρκεί να αντιληφθούμε σωστά αυτό που έχουμε μπροστά μας.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό Dimitris » 02 Δεκ 2011, 12:39

Θα συμφωνήσω απόλυτα με τα λεγόμενά σου. Τις απόψεις αυτές περί βελτιστοποίησης της αναφέρω εδώ και καιρό. Ένα προσωπικό παράδειγμα. Δούλευα σε ένα κώδικα matlab για αντίστροφα προβλήματα στη γεωθερμία, με level set και πεπερασμενά στοιχεία. Σε κάποιο σημείο είχα μια συνάρτηση που έκανε παρεμβολή μεταξύ δύο πλεγμάτων. Όσο αύξανε το μέγεθος των πλεγμάτων γινόταν εκνευριστικά αργή. Και αυτή θα καλούνταν σε ένα εξωτερικό βρόχο πολλές φορές. Η αρχική υλοποίησή της ήταν σε matlab. Πώς βρήκα ότι αυτή η συνάρτηση έφταιγε και όχι κάποια άλλη; Χρησιμοποίησα το εργαλείο του matlab που χρονομετρεί κάθε συναρτηση, γραμμή κώδικα, κλπ. Αφού όμως είχα την πλήρη έκδοση του κώδικα σε λειτουργία.
Η βελτιστοποίηση που έκανα ήταν να γράψω μόνο αυτή τη συνάρτηση σε C και να τη συνδέσω με MEX στο matlab. Αν είχα ξεκινήσει να γράφω το πρόγραμμα αυτό στη C ακόμη θα έγραφα και δε θα ήμουν ούτε στα μισά, ενώ το project ολοκληρώθηκε επιτυχώς σε 1 χρόνο και 3 μήνες.

Και θα τονίσω κι εγώ ότι:

"Η επιλογή της C ως γλώσσα προγραμματισμού είναι πρόωρη βελτιστοποίηση"

Σχετικά με την εκπαίδευση παιδιών, ρίξε μια ματιά στο pdf του why-the-lucky-stiff για την εκμάθηση της ruby. Η ruby είναι κι αυτή πολύ καλή γλώσσα για εκμάθηση και σοβαρές δουλειές. Για επιστημονική έρευνα της λείπουν ακόμη οι βιβλιοθήκες. Επιπλέον έχει και closures που η python δεν έχει, τα οποία διευκολύνουν σε πολλές καταστάσεις.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 02 Δεκ 2011, 13:02

Φίλε lucinos, τα περισσότερα από όσα αναφέρεις στο τελευταίο σου post περιγράφονται λακωνικά σε 1 φράση: η πιο χρήσιμη γλώσσα προγραμματισμού είναι τα bindings (η δυνατότητα δηλαδή να χρησιμοποιείς την καταλληλότερη γλώσσα για το κάθε επί μέρους τμήμα ενός πρότζεκτ, μιας και όπως έχουμε πει καμιά γλώσσα δεν είναι κατάλληλη για τα πάντα, παρόλο που οι περισσότερες μπορούν να κάνουν σχεδόν τα πάντα). Το να φτάσεις όμως σε σημείο να είσαι σε θέση να γνωρίζεις ποια γλώσσα, που και πως πρέπει να χρησιμοποιηθεί, προφανώς δεν είναι τετριμμένη διαδικασία.

Από εκεί και πέρα, high-level γλώσσες και ιδιαίτερα γλώσσες όπως η Python, η Java, η C#, κλπ που χρησιμοποιούν virtual machines ή πατάνε πάνω σε έτοιμα frameworks για να εκτελέσουν κώδικα, μπορούν με ευκολία να παρομοιαστούν με low-level γλώσσες + χρήση βιβλιοθηκών, που όμως προσφέρονται ως πακέτο με συγκεκριμένες ντιρεκτίβες για στανταρισμένη χρήση. Επισπεύδουν δραματικά τον χρόνο παραγωγής, με αντίτιμο το κόστος στη χρήση πόρων (κυρίως μνήμη και χώρος δίσκου) και στην ταχύτητα εκτέλεσης.

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

Στη βάση τους δηλαδή είναι απλά τα πράγματα. Περιπλοκές προκύπτουν αργότερα, κυρίως από την ανομοιογένεια και το εύρος των αναγκών (π.χ. χρόνος παραγωγής vs βελτιστοποίηση, dedicated vs shared, single vs multi thread, κλπ, κλπ, η λίστα είναι μακριά)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό migf1 » 02 Δεκ 2011, 13:08

Dimitris έγραψε:
...
Η βελτιστοποίηση που έκανα ήταν να γράψω μόνο αυτή τη συνάρτηση σε C και να τη συνδέσω με MEX στο matlab. Αν είχα ξεκινήσει να γράφω το πρόγραμμα αυτό στη C ακόμη θα έγραφα και δε θα ήμουν ούτε στα μισά, ενώ το project ολοκληρώθηκε επιτυχώς σε 1 χρόνο και 3 μήνες.

Και θα τονίσω κι εγώ ότι:

"Η επιλογή της C ως γλώσσα προγραμματισμού είναι πρόωρη βελτιστοποίηση"

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

http://en.wikipedia.org/wiki/List_of_nu ... nd_C.2B.2B
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Λίγες σκέψεις για τις γλώσσες προγραμματισμού

Δημοσίευσηαπό lucinos » 02 Δεκ 2011, 13:09

migf1 έγραψε:
Μίλησες για παράδειγμα για numeric systems, δηλώνοντας εντυπωσιασμένος από τη διαθεσιμότητα του NumPy στην Python. Κατά βάση σε τι διαφέρει ας πούμε από το να είσαι C programmer και για εξειδικευμένους μαθηματικούς υπολογισμούς να χρησιμοποιείς μια από τις πολλές, εξωτερικές, μαθηματικές βιβλιοθήκες για C;

Πίστεψέ με διαφέρει πάρα πολύ.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Το Σχολείο του Φόρουμ - Ασύγχρονα Μαθήματα

cron