Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Συμφωνώ με τον pmav, κάνοντας μόνο την παρέμβαση ότι το συγκεκριμένο rant που κάνει link ξεφεύγει από τα όρια του δικαιολογημένου κραξίματος (που υπάρχει δικαιολογία για κράξιμο) και ενίοτε φτάνει σε επίπεδα απρόκλητης κρεβατομουρμούρας.

 

Αξίζει να διαβάσει κανείς και αυτό (ιδιαίτερα μιας κι έχει αναφορές σε άλλα γνωστά σχετικά κομμάτια).

  • Like 1
  • Απαντ. 82
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Άρα ρε παίδες.. 

 

Για έναν dev που ασχολούταν με low level programming (embedded systems) και system programming και αρχίζει να γλυκοκοιτάει το web που θα του λέγατε να βάλει τα λεφτά του; Σε PHP, Python ή Ruby; 

Δημοσ.

Timon αν θέλει κανείς να βρει δουλειά αμέσως τότε προφανώς PHP. Επίσης αν θες να κάνεις μια δουλειά τότε η PHP είναι από τις καλύτερες πρακτικές επιλογές σου.

 

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

Δημοσ.

Βρε μαζί σου.... Αλλά

 

Παρατηρώ ότι όλο και πιο content και role based εφαρμογές (π.χ. project management) γίνονται σε ruby (π.χ.). 

 

 

Πρακτικά παρατηρώ πως παίζει πολύ υλικό πάνω σε PHP αλλά αυτό νομίζω ότι μπορεί να δικαιολογηθεί λόγω παλαιότητας. Από εκεί και πέρα, υπάρχει πληθώρα παραδειγμάτων από γλώσσες (π.χ. ocaml) οι οποίες είναι τόσο application specific used που εάν κανείς δεν κάνει κάτι συγκεκριμένο με συγκεκριμένες εφαρμογές ίσως και να μην τις μάθει ποτέ του. 

 

Υπό αυτό το πρίσμα, αξίζει κανείς να δαπανήσει ώρες να μάθει να σετάρει σωστά ένα σύστημα για PHP, για Ruby ή για Python; Αξίζει να μάθει τα τερτίπια της PHP, της Python (για web) ή της Ruby; 

Δημοσ.

Ωραία τα links προς άρθρα που αναθεματίζουν το ένα και το άλλο και με τη σειρά τους έχουν links προς άλλα "credible sources" πλάι-πλάι με χαριτωμένες παρομοιώσεις με "double-clawed hammer" και παπούτσια που καρφώνουν καρφιά στον τοίχο.

 

Στα σοβαρά τώρα και πέρα από τη δημιουργία εντυπώσεων:

 

Οκ, η php δεν είναι η τελειότερη γλώσσα στον κόσμο, μάλιστα θα το δεχόμουν ότι είναι ακόμα και κάτω του μέσου όρου.

Πρακτικά, τι είναι αυτό που σας κάνει να τη μισείτε τόσο ώστε να τη θεωρείτε "για πέταμα";

Αντικειμενικά παρακαλώ.

Δημοσ.

Βρε μαζί σου.... Αλλά

 

Παρατηρώ ότι όλο και πιο content και role based εφαρμογές (π.χ. project management) γίνονται σε ruby (π.χ.). 

 

 

Πρακτικά παρατηρώ πως παίζει πολύ υλικό πάνω σε PHP αλλά αυτό νομίζω ότι μπορεί να δικαιολογηθεί λόγω παλαιότητας. Από εκεί και πέρα, υπάρχει πληθώρα παραδειγμάτων από γλώσσες (π.χ. ocaml) οι οποίες είναι τόσο application specific used που εάν κανείς δεν κάνει κάτι συγκεκριμένο με συγκεκριμένες εφαρμογές ίσως και να μην τις μάθει ποτέ του. 

 

Υπό αυτό το πρίσμα, αξίζει κανείς να δαπανήσει ώρες να μάθει να σετάρει σωστά ένα σύστημα για PHP, για Ruby ή για Python; Αξίζει να μάθει τα τερτίπια της PHP, της Python (για web) ή της Ruby; 

 

Γνώμη είναι ότι αυτή τη περίοδο αξίζει κανείς να χρησιμοποιήσεις Node.js στο backend. Είσαι που είσαι αναγκασμένος να μάθεις JS για το client-side frontend, ας μη μαθαίνεις και τρίτη γλώσσα για το Backend.

Δημοσ.

Υπό αυτό το πρίσμα, αξίζει κανείς να δαπανήσει ώρες να μάθει να σετάρει σωστά ένα σύστημα για PHP, για Ruby ή για Python; Αξίζει να μάθει τα τερτίπια της PHP, της Python (για web) ή της Ruby; 

 

Δεν είμαι σίγουρος τι απάντηση περιμένεις. Ρωτάς αν αξίζει, αλλά δεν καταλαβαίνω ποιά ακριβώς είναι τα κριτήρια με τα οποία θα βγει το συμπέρασμα. Ιδιαίτερα εφόσον η απάντηση που θέλεις δεν είναι yes/no αλλά συγκριτική (a > b > c) θα πρέπει και η αξιολόγηση να γίνει με συγκεκριμένα κριτήρια.

 

Οκ, η php δεν είναι η τελειότερη γλώσσα στον κόσμο, μάλιστα θα το δεχόμουν ότι είναι ακόμα και κάτω του μέσου όρου.

Πρακτικά, τι είναι αυτό που σας κάνει να τη μισείτε τόσο ώστε να τη θεωρείτε "για πέταμα";

Αντικειμενικά παρακαλώ.

 

Δε γίνεται να σου απαντήσει κανείς αντικειμενικά για ποιό λόγο "μισεί" κάτι. Το μίσος δεν είναι ούτε αντικειμενικό ούτε καν ορθολογικό.

 

Επιπλέον δεν τη μισούμε -- εγώ τουλάχιστον. Προσωπικά έχω την ίδια άποψη που έχω π.χ. και για κάποια software products πάνω στα οποία έχω δουλέψει: θαυμάζω (και προσπαθώ να μαθαίνω από) το γεγονός πως κάτι που είναι τόσο υπερβολικά πολύ κακοσχεδιασμένο τεχνικά παρόλα αυτά σαρώνει τα πάντα στο πέρασμά του στην αγορά. Άσε που τα τελευταία χρόνια το 90% του ψωμιού που τρώω είναι από την PHP.

 

Τώρα γι' αυτό που ρωτάς θα έπρεπε να γράψουμε άλλο ένα σεντόνι με παραδείγματα. Εντελώς ενδεικτικά,

  • Δεν υπάρχει spec ούτε γι' αστείο. Κι άλλες γλώσσες δεν έχουν spec, αλλά τουλάχιστον εκεί ο compiler δεν είναι για τα μπάζα (άπειρα παραδείγματα, π.χ. array dereferencing).
  • Πολλά προβλήματα τα οποία έχουν σα μοναδική αιτία το γεγονός πως ο compiler δεν παλεύεται γιατί είναι γραμμένος να κάνει emit VM opcodes σε ένα πέρασμα, τα οποία δεν πρόκειται ποτέ να διορθωθούν μέχρι να ξαναγραφτεί ένας πιο σοβαρός compiler (καλή τύχη δηλαδή).
  • Τελείως ο,τι νά 'ναι συμπεριφορά σε βασικά πράγματα όπως η empty(), passing constants by ref, χρήση του this μέσα σε closures, nested exceptions -- αυτά τα συγκεκριμένα έχουν διορθωθεί βέβαια.
  • Ο κόσμος των warnings και ο κόσμος των exceptions συνυπάρχουν και αγνοούν ο ένας τον άλλο.
  • Υπάρχει η έκφραση "because PHP" και χρησιμοποιείται. Θα έπρεπε αυτό να μας λέει κάτι.
Δημοσ.
Τώρα γι' αυτό που ρωτάς θα έπρεπε να γράψουμε άλλο ένα σεντόνι με παραδείγματα. Εντελώς ενδεικτικά,

  • Δεν υπάρχει spec ούτε γι' αστείο. Κι άλλες γλώσσες δεν έχουν spec, αλλά τουλάχιστον εκεί ο compiler δεν είναι για τα μπάζα (άπειρα παραδείγματα, π.χ. array dereferencing).
  • Πολλά προβλήματα τα οποία έχουν σα μοναδική αιτία το γεγονός πως ο compiler δεν παλεύεται γιατί είναι γραμμένος να κάνει emit VM opcodes σε ένα πέρασμα, τα οποία δεν πρόκειται ποτέ να διορθωθούν μέχρι να ξαναγραφτεί ένας πιο σοβαρός compiler (καλή τύχη δηλαδή).
  • Τελείως ο,τι νά 'ναι συμπεριφορά σε βασικά πράγματα όπως η empty(), passing constants by ref, χρήση του this μέσα σε closures, nested exceptions -- αυτά τα συγκεκριμένα έχουν διορθωθεί βέβαια.
  • Ο κόσμος των warnings και ο κόσμος των exceptions συνυπάρχουν και αγνοούν ο ένας τον άλλο.
  • Υπάρχει η έκφραση "because PHP" και χρησιμοποιείται. Θα έπρεπε αυτό να μας λέει κάτι.

 

Μα εγώ ζήτησα επιχειρήματα. Τι εννοείς "άλλο ένα σεντόνι"; Που είναι το πρώτο;

Γιατί το array dereferencing της php δεν σου κάνει; Τι στραβό έχει;

Ποια είναι τα προβλήματα που αντιμετωπίζεις εσύ από το γεγονός ότι "ο compiler κάνει emit σε ένα πεασμα"; Τι αλλάζει στη ζωή σου/δουλειά σου;

Πως συνυπάρχουν οι κόσμοι των warnings και exceptions; Μπορείς δηλαδή να κάνεις try...catch και να πιάσεις warning?!?!?

Και τι ακριβώς "specs" θέλεις; Είναι μία γλώσσα με συγκεκριμένη σύνταξη, συγκεκριμένους κανόνες και λειτουργία, κι όλα αυτά καλύπτονται από εκτενέστατο manual. Τι άλλο θα μπορούσες να ζητήσεις, και τι απόσταση έχει αυτό από το "double-clawed hammer";

 

Μέχρι τώρα, δεν έχω διαβάσει κάτι συγκεκριμένο και αντικειμενικό σαν επιχείρημα.

Δημοσ.

Μα εγώ ζήτησα επιχειρήματα. Τι εννοείς "άλλο ένα σεντόνι"; Που είναι το πρώτο;

Το πρώτο (και δεύτερο και τρίτο κλπ) είναι τα blog post στα οποία δώσαμε link και άλλα πολλά στα οποία δεν δώσαμε.

 

Γιατί το array dereferencing της php δεν σου κάνει; Τι στραβό έχει;

Πλάκα κάνεις;

 

Πρώτον μέχρι πρότινος δεν υπήρχε καν.

 

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

 

$foo = [42]; echo $foo[0]; // works
echo [42][0]; // compiler error

Προφανώς το πρόβλημα δεν είναι πως θα θέλω να κάνω τόσο συχνά index σε array literal, αλλά πως τέτοιου είδους "αυτόματες" μετατροπές κώδικα που θα έπρεπε να εννοείται πως είναι βιώσιμες βάσει μαθηματικών, στην PHP δεν είναι.

 

Ακόμα και τώρα ένα άλλο κλασικό πρόβλημα της PHP (references σε temporaries) σε εμποδίζει από το να πάρεις το πρώτο στοιχείο ενός πίνακα χωρίς να ξέρεις το key που αντιστοιχεί σ' αυτό σαν μέρος ενός expression, δηλαδή έτσι

 

echo reset(get_my_array());

ή να περάσεις default τιμή σε μια function έτσι

function foo(&$x = null, &$y = null) { ... }
foo(null, 4);

και πρέπει αντί γι' αυτό να χρησιμοποιήσεις κάποιου είδους hack (συνήθως το να δηλώσεις μια local μέσα στο ίδιο expression).

 

Ποια είναι τα προβλήματα που αντιμετωπίζεις εσύ από το γεγονός ότι "ο compiler κάνει emit σε ένα πεασμα"; Τι αλλάζει στη ζωή σου/δουλειά σου;

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

 

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

 

Επίσης αν παρακολουθείς το php tag στο StackOverflow ξέρεις ότι ερωτήσεις του στυλ πώς κάνω array dereferencing/πώς καταλαβαίνω ότι κάτι είναι reference/πώς γράφω variable variable access σ' αυτή την περίπτωση γίνονται συνέχεια. Αυτό κάτι σημαίνει.

 

Ενίοτε εμφανίζονται και αναπάντεχα μαργαριτάρια που καταλήγουν σε απαντήσεις όπως αυτή και αυτή.

 

Συνοψίζω λέγοντας πως το κοινό σημείο σε όλα αυτά είναι πως προκύπτουν όχι φυσικά από κάποιο specification (δεν υπάρχει) ούτε καν εκούσια (documentation επίσης δεν υπάρχει) αλλά επειδή τι να κάνουμε τώρα έτσι είναι γραμμένο το engine και ο compiler.

 

Ρώτησες τι αλλάζει στη ζωή μου: στην τελική όχι πολλά. Γι' αυτό λέω ότι η PHP είναι για πέταμα σα γλώσσα αλλά εξαιρετικά χρήσιμη σαν εργαλείο.

 

 

Πως συνυπάρχουν οι κόσμοι των warnings και exceptions; Μπορείς δηλαδή να κάνεις try...catch και να πιάσεις warning?!?!?

 

Φυσικά και δε μπορείς, και αυτό είναι μέρος του προβλήματος.

 

Έχεις δοκιμάσει ποτέ να καλέσεις την getimagesize() και να κάνεις σοβαρό error handling? Δε νομίζω.

 

Και τι ακριβώς "specs" θέλεις; Είναι μία γλώσσα με συγκεκριμένη σύνταξη, συγκεκριμένους κανόνες και λειτουργία, κι όλα αυτά καλύπτονται από εκτενέστατο manual.

Κάποτε στο μέλλον θα διαβάζεις αυτό που έγραψες εδώ και θα γελάς. Αυτό το "εκτενέστατο" με σκότωσε πραγματικά.

 

Μέχρι τώρα, δεν έχω διαβάσει κάτι συγκεκριμένο και αντικειμενικό σαν επιχείρημα.

Δεν είναι δουλειά μου να σε πείσω αν δε θέλεις να πειστείς.

Δημοσ.
  • Πολλά προβλήματα τα οποία έχουν σα μοναδική αιτία το γεγονός πως ο compiler δεν παλεύεται γιατί είναι γραμμένος να κάνει emit VM opcodes σε ένα πέρασμα, τα οποία δεν πρόκειται ποτέ να διορθωθούν μέχρι να ξαναγραφτεί ένας πιο σοβαρός compiler (καλή τύχη δηλαδή).

 

Από την άποψη ότι με τον τρόπο που είναι δομημένος είναι σχεδόν αδύνατο να προσθέσουν ή να υλοποιήσουν κάποια πράγματα εντελώς σωστά (λόγω της παραγωγής κώδικα σε ένα πέρασμα) στην γλώσσα;

Δημοσ.

Το πρώτο (και δεύτερο και τρίτο κλπ) είναι τα blog post στα οποία δώσαμε link και άλλα πολλά στα οποία δεν δώσαμε.

Όχι δεν είναι. Υποκειμενικά και δογματικά είναι. Αν έχετε κι άλλα που δεν δώσατε, δώστε στο λαό! Μπορεί να αξίζουν κάτι...

 

Πλάκα κάνεις;

 

Πρώτον μέχρι πρότινος δεν υπήρχε καν.

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

 

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

 

$foo = [42]; echo $foo[0]; // works
echo [42][0]; // compiler error

 

Φυσικά, αφού είναι συντακτικό λάθος...

When in Rome...

 

Προφανώς το πρόβλημα δεν είναι πως θα θέλω να κάνω τόσο συχνά index σε array literal, αλλά πως τέτοιου είδους "αυτόματες" μετατροπές κώδικα που θα έπρεπε να εννοείται πως είναι βιώσιμες βάσει μαθηματικών, στην PHP δεν είναι.

Αυτό είναι άποψή σου, και ο τρόπος που θα ήθελες να δουλεύουν τα πράγματα. Παραδέξου το. Τα μαθηματικά δεν έχουν να κάνουν.

 

Ακόμα και τώρα ένα άλλο κλασικό πρόβλημα της PHP (references σε temporaries) σε εμποδίζει από το να πάρεις το πρώτο στοιχείο ενός πίνακα χωρίς να ξέρεις το key που αντιστοιχεί σ' αυτό σαν μέρος ενός expression, δηλαδή έτσι

 

echo reset(get_my_array());

Μια χαρά δουλεύει αυτό. Εκτός κι αν δεν κατάλαβα κάτι...

 

ή να περάσεις default τιμή σε μια function έτσι

function foo(&$x = null, &$y = null) { ... }
foo(null, 4);
και πρέπει αντί γι' αυτό να χρησιμοποιήσεις κάποιου είδους hack (συνήθως το να δηλώσεις μια local μέσα στο ίδιο expression).

 

Μπερδεύεις τα php references με τους pointers. ΔΕΝ είναι το ίδιο, you should know better.

Αν θα ήθελες τα references να συμπεριφέρονται σαν pointers, αυτό είναι ευσεβής πόθος, και όχι λάθος της γλώσσας.

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

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

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

 

... Γι' αυτό λέω ότι η PHP είναι για πέταμα σα γλώσσα αλλά εξαιρετικά χρήσιμη σαν εργαλείο.

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

Όπως λέμε δηλαδή ότι ένας τραγουδιστής έχει γαμάτη φωνή αλλά "χάλια σκηνική παρουσία"; Σε τέτοιο στυλ;

 

Φυσικά και δε μπορείς, και αυτό είναι μέρος του προβλήματος.

...

Δηλαδή εσύ θα ήθελες να μπορείς να κάνεις catch τα warnings?!? Και το γεγονός ότι δεν μπορείς είναι μέρος του προβλήματος?!?

Με συγχωρείτε ρε παιδιά, αλλά σε ποια γλώσσα κάνεις catch τα warnings; Ενημερώστε με τον αδαή!!!

Κάποτε στο μέλλον θα διαβάζεις αυτό που έγραψες εδώ και θα γελάς. Αυτό το "εκτενέστατο" με σκότωσε πραγματικά.

Δεν νομίζω να έχω τόσα χρόνια μπροστά μου...

Αλλά δεν μου απάντησες, γιατί ένας προγραμματιστής που προτίθεται να γράψει σε μία γλώσσα χρεάζεται specs; Αν δεν έχεις σκοπό να φτιάξεις πχ έναν νέο php compiler, τι τα θές τα specs?!? Το (έστω, φτωχό!) manual, σε ποιο ακριβώς σημείο δεν σε καλύπτει;

 

Δεν είναι δουλειά μου να σε πείσω αν δε θέλεις να πειστείς.

 

Προφανώς δεν είναι δουλειά σου. Απλά σου ζήτησα να στηρίξεις την άποψή σου. Θα μπορούσες να πεις απλά "όχι δεν γουστάρω", και τέλος. Φαντάζομαι όμως ότι, κι αυτός ο έρμος που άνοιξε το topic, δεν περίμενε να του πετάνε στη μούρη links προς δογματικά άρθρα, αλλά να του εξηγήσουν με απλά λόγια γιατί να ασχοληθεί ή να μην ασχοληθεί με τη γλώσσα.

 

Τώρα, το ότι δεν θέλω να πειστώ, είναι πασιφανέστατη προκατάληψη.

Δημοσ.

Εγώ πάντως δεν γουστάρω με τίποτα τα $ :P οπότε μακρυά απο PHP!

Ναι, κι εμένα μου τη σπάνε... από την πρώτη μέρα.

Όπως και το ότι χρειάζεται να γράφω συνέχεια $this-> μέσα στις μεθόδους.

Όπως και το ότι δεν μπορώ να κάνω αυτό:

 

function an_array()
  {
  return array('foo','bar');
  }
 
echo an_array()[0]; // oops!

 

Αλλά χρειάζονται πιο σοβαροί λόγοι για να πω "μακριά από τη γλώσσα"...

Συν το ότι αυτά είναι πράγματα που δεν γουστάρω εγώ. Δεν μπερδεύω τον τρόπο που σκέφτομαι με την αντικειμενική πραγματικότητα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...