Ces derniers temps, on dirait qu’un nouveau sport international est apparu, dont la pratique consiste à dire pourquoi PHP est un mauvais langage (ici ou là) ou au contraire un bon langage de programmation (ici, là). J’avais décidé de ne pas participer à ce championnat, parce que c’est un peu stérile (et aussi parce que j’écris déjà suffisamment d’articles sur le PHP).
Mais finalement, j’ai changé d’idée. Non pas parce que j’ai soudainement envie de prendre la défense du PHP (tout le monde sait que c’est mon langage de prédilection), mais parce que je continue à m’intéresser aux différents langages de programmation ; et il me semble intéressant de partager avec vous quelques éléments qui ressortent de tout ça.
Le web d’abord
Ce n’est pas un scoop, PHP a été inventé pour créer des sites web. Ça fait très longtemps qu’on peut l’utiliser pour complètement autre chose (système de fichier redondé, interface graphique, …), comme n’importe quel langage de script. Mais c’est une réalité inscrite dans ses gènes.
Concrètement, cela se traduit par le fichier de configuration php.ini, qui offre − entre autres − la possibilité de définir la mémoire consommée lors de l’exécution d’une requête, ou la durée maximale d’un traitement. Ce genre de paramétrage est désormais possible avec Perl (grâce à mod_perl sous Apache), mais je n’ai pas trouvé d’équivalent exact avec Python ou Ruby (même en cherchant du côté de mod_python ou de FastCGI). Quoi qu’il en soit, cela explique pourquoi PHP a vite trouvé sa place dans les offres d’hébergement mutualisé.
Un langage qui évolue vite
De tous les principaux langages de programmation, je pense que PHP est celui qui évolue le plus vite. Si on regarde ce qu’il s’est passé ces 10 dernières années, il est indéniable que les concepteurs du langage ont fait un très gros effort d’amélioration et d’ajout de fonctionnalités.
En même temps, le code écrit il y a 10 ans a de grandes chances de fonctionner tel quel. Et l’ajout d’un modèle objet très complet, qui n’a plus à rougir d’aucun autre langage, n’empêche pas qu’il reste possible d’utiliser le PHP comme un simple langage de script procédural.
Les autres langages interprétés cherchent aussi à faire ce grand écart, mais j’ai l’impression que certains connaissent la double peine : ils n’évoluent pas très vite, et quand une version majeure est disponible, son taux d’adoption reste faible (Perl 6, Python 3).
Un langage qu’on connait déjà
Ce qui me semble être l’une des grandes forces du PHP, c’est qu’il emprunte la plupart de ses concepts à des langages très connus. Il suffit d’avoir des notions de C, C++, Java, Javascript, Perl ou Shell pour se sentir en territoire connu.
Le PHP n’est pas un langage académique ; il est rarement enseigné en écoles ou à l’université, au contraire de la plupart des langages sus-cités. Pouvoir passer de l’un à l’autre facilement a forcément contribué à augmenter le nombre de personnes qui développent en PHP. Même si le Python, le Ruby et le Lua font appels à des concepts très intéressants, ces mêmes concepts nécessitent parfois un reset mental qui peut faire un peu peur.
Un langage simple et souple
Les langages de script modernes partagent souvent la caractéristique d’avoir un typage dynamique, voire faible. Cela permet de développer plus rapidement qu’avec des langages à typage statique (souvent associé à un typage fort). Les détracteurs objectent que ça favorise l’écriture non-réfléchie de code, qui devient vite un plat de spaghetti, mais c’est très apprécié dans le cadre de développements incrémentaux.
Nous sommes d’accord que plus personne ne développe le moindre site web en C ou en C++. Dans les langages à typage statique, il me semble que le Java est le seul qui jouisse encore d’un certain prestige auprès des adeptes de méthodes agiles. Mais, de manière générale, la marche du progrès avance en direction des langages dynamiques (PHP, Python, Perl, Ruby, Lua, …).
Au passage, ce typage dynamique/faible facilite l’apprentissage de la programmation. Ce n’est peut-être pas formateur (au sens où le C peut l’être), car le langage lui-même ne force aucune bonne pratique ; on parle parfois de langages permissifs ou laxistes. Mais ça permet à n’importe qui de commencer à écrire un petit script, puis de l’étendre tranquillement tout en gagnant en compétence et en expérience.
Un langage professionnel
En écrivant ça, je prends un risque. Tous ceux qui déversent leur bile contre le PHP me rétorqueront que c’est un langage qui contient tellement d’incohérences qu’il est loin d’être paré pour un usage sérieux en entreprise.
Qu’est-ce qui fait qu’un langage de programmation apparaît assez « solide » pour être qualifié de professionnel ? Ceux qui codent en C/C++, Objective-C, Java, Pascal ou Ada mettent en avant le typage explicite. Même en n’étant pas forcément complètement d’accord, je dois reconnaître que le risque de bugs diminue quand une variable doit être déclarée avant d’être utilisée, et qu’elle ne peut contenir que des données d’un type défini. Lorsque le code est explicite, il devient généralement plus verbeux, mais aussi plus stable. Plus fiable.
À ce niveau, PHP propose un choix un peu hybride. Comme on l’a vu plus haut, c’est à l’origine un langage à typage dynamique, plutôt axé sur la souplesse. Mais contrairement aux autres langages de ce genre, le PHP permet de définir le type des paramètres attendus par les fonctions et les méthodes. Cela reste totalement optionnel ; mais quand on veut écrire du code « rock-solid », on commence par blinder les entrées et les sorties des modules/objets/bibliothèques (appelez-les comme vous voulez) qui composent les programmes.
Donc, pour écrire du code de haut niveau, le PHP offre cette possibilité, qui devient très puissante quand on l’associe à la puissance du modèle objet. Quand on spécifie qu’un paramètre doit correspondre à un certain type d’objet ou d’interface, on est certain d’obtenir une donnée qui soit de ce type (ou qui en dérive).
Du côté du Perl, du Python, du Ruby ou du Lua, il n’est pas possible de typer les paramètres (sauf en Perl 6, qui est encore très peu utilisé). Dans ces langages, on utilise le duck typing : peu importe au final le type réel de la donnée, tant qu’elle présente les interfaces qu’on attend d’elle. Cette manière de faire est suffisante la plupart du temps ; mais quand on veut écrire du code stable et pérenne, ça peut ne pas être assez.
Des petits détails plaisants
Il y a quelques points de détails que je trouve plaisants dans le PHP. Là j’aborde les goûts et les couleurs, donc c’est forcément plus subjectif que les points précédents.
Pour commencer, la vraie force du PHP, ce sont ses tableaux polymorphes. Ils peuvent être utilisés comme de simples listes ou comme des tableaux associatifs, et surtout ils gardent l’ordre dans lequel les données ont été insérées. Par rapport aux dictionnaires de Python, par exemple, c’est très pratique (je sais qu’il existe le type OrderedDict, mais avoir par défaut un type de tableau multi-usage, c’est quand même très pratique).
La gestion de chaînes, et plus particulièrement la concaténation, hérite de ce qui se fait de mieux en la matière : le Perl. L’inclusion de variables dans les chaînes, ou même la présence d’un opérateur de concaténation différent de l’opérateur d’addition, rendent les choses très naturelles à l’utilisation. C’est idiot, mais dans la mesure où on l’utilise à longueur de journée (comme les tableaux), ça a son importance.
Autre détail, la gestion des namespaces est plutôt bien pensée. Au début je la trouvais étrange, comme beaucoup de gens. L’utilisation du caractère backslash comme séparateur de namespace a fait couler beaucoup d’encre, mais c’est finalement pas mal. Une des choses que j’apprécie, c’est qu’il est très pratique de faire commencer un nom par un backslash, pour indiquer clairement qu’il s’agit de la racine des espaces de nommage. Dans les autres langages (notamment le C++, le Perl et le Ruby qui utilisent le séparateur “::”), il y a parfois un peu de flou sur l’utilisation d’un sous-espace de nom, ou d’un espace de nom qui part de la racine.
Pour conclure
Je partage un certain nombre des critiques qui sont adressées à PHP. La bibliothèque standard ressemble à un gros fourre-tout. L’ordre des paramètres de cette bibliothèque standard n’est pas homogène. Le langage gère ses erreurs de deux manières différentes, alors qu’il ferait mieux de n’utiliser que les exceptions.
PHP offre l’avantage, relativement unique à mes yeux, d’être à la fois souple et facile d’accès, mais aussi d’offrir toutes les finesses d’un langage utilisable sur de gros projets.
Comme le disait récemment Rasmus Lerdorf (créateur de PHP) sur la mailing-list interne du langage :
One of the strengths of PHP is that it scales. It scales up to the largest sites in the world while at the same time it scales down to weekend warriors. Doing both in the same codebase is a challenge.
Ce qui pourrait être traduit par :
« Une des forces de PHP est qu’il s’adapte. Il s’adapte vers le haut pour les sites les plus importants du monde, tout en s’adaptant vers le bas pour les développeurs du dimanche. Réussir les deux avec la même base de code est un défi. »
Très bon résumé des forces de PHP. Cracher sur PHP quand on s’ouvre à de nouveaux langages, c’est un peu puéril. ça me fait penser aux gens qui considèrent que leur téléphone ou leur ordinateur est obsolète dès que la version +1 est sortie…
Un bon développeur migre petit à petit vers un nouveau langage et fait même des allers-retours. De plus, même si des langages surpassaient totalement PHP, on ne va pas jeter toutes les applications créés aux oubliettes du jour au lendemain.
Bel énoncé encore une fois !
Pour ma part, je travaille dans plusieurs environnements : PHP avec Zend et ASP.Net (C# ET VB). C’est marrant de voir les analogies dans les deux languages et au final je suis très content des deux… chacun dans leurs contextes.
Je ne vois pas l’intérêt de cracher sur un langage, à la rigueur, il ne convient pas à un projet.
Mais qui peut dire qu’un est meilleur que l’autre ? C’est ce que l’équipe de DEV en fera qui compte et le temps qu’elle demandera pour aboutir.
Votre approche est toujours très diplomate, si seulement les analyses (sous-entendus des autres) pouvaient être aussi objectives et prisent avec du recul !
Ce qui fait que PHP est souvent décrié, c’est les décisions de design du langage complètement loufoques et les tentatives de justification miteuses de la part des développeurs (voir ce bug : https://bugs.php.net/bug.php?id=54547) dont le traitement est encore plus drôle que le bug lui-même.
Ce langage a été bien, mais a très mal vieilli. Bien sûr il y aura toujours des gens pour passer aux nouveaux langages et critiquer le précédent sans argumentation. Pour ma part, je n’ai jamais accroché à PHP mais Python m’a séduit immédiatement.
De plus, Python possède comme avantage qu’écrire un module en code natif (C ou C++) est d’une simplicité enfantine. Faire la même chose en PHP requièrt de « jouer » (ou se prendre la tête) avec les autotools. Encore un aspect du langage qui a très mal vieilli.
Je comprends les réticences des développeurs PHP qui refusent de constater l’évidence parce que ça reviendrait à perdre leur « valeur » en tant que développeur. Mais le nier les placera forcément derrière ceux qui auront eu le courage de boulverser leurs habitudes et de s’habituer à des paradigmes plus adaptés.
@Jerome : Je suis d’accord pour l’écriture d’extensions en C. Le Lua me semble mieux à ce niveau-là (je ne connais cet aspect du Python).
Edit: Et sérieusement, pour faire du développement web, le nombre de fois où j’ai voulu coder une extension en C…
Mais à te lire, le PHP est condamné, tout le monde le sait sauf les développeurs PHP qui jouent l’autruche… « s’habituer à des paradigmes plus adaptés » : PHP n’est pas adapté au développement web ? Faut pas déconner, quand même.
Mmh, dans mon article, j’ai essayé de mettre en avant les points positifs du PHP, de manière factuelle. Ta réponse (et d’autres que j’ai reçues) semble plutôt être du domaine de la croyance. Et la foi n’a pas grand-chose à voir avec l’informatique…
Je ne vais pas débattre, ce n’est probablement pas la place pour.
Oui, je suis assez tragique sur mon ressenti sur PHP, mais de là à dire que je n’expose aucun fait, c’est peut-être un peu faux : tu sembles avoir occulté le lien pourtant très révélateur que j’ai partagé.
Quel est ton avis sur ce bogue et surtout sur la réaction des développeurs face à sa découverte ?
Peut-on vraiment défendre un langage dans lequel, (sous certaines conditions pas les plus courantes, je le concède), on ne peut pas se fier au résultat de l’opérateur de comparaison ?! On ne parle pas ici d’une fonction spéciale utilisée dans de rares cas, mais bel et bien de l’opérateur de comparaison !
J’ai pratiqué le PHP pendant plusieurs années à l’époque, princpalement à défaut d’alternatives. Ça semblait être un moindre mal. La gestion des classes de PHP 4 était chaotique (mais aucun langage n’est parfait dès le début, ce n’est donc pas grave) et heureusement ça a évolué par la suite… mais on a vraiment l’impression que le design général est une succession de patches plus ou moins réfléchis et surtout plus ou moins intégrés au design existant.
Je n’ai pas dit que PHP n’était pas adapté au web, ne me fais pas mentir. J’ai cependant dit qu’il n’était peut-être pas (plus) le plus adapté. Quand je compare la maintenabilité et la quantité de code (les deux étants liés d’ailleurs) entre un code propre PHP et un code propre Python (et j’insiste sur le propre dans les deux cas), le constat pour moi est sans appel.
Je ne vais pas te contredire sur l’attitude de certains développeurs internes à PHP.
Le bug en question est très particulier (très très grand nombre), et ne m’a encore jamais impacté. Je ne dit pas que c’est normal, mais j’imagine qu’on peut trouver des incohérences de ce genre, ou approchant, dans d’autres langages.
Mon point était, de manière générale, de dire que PHP possède un certain nombre de points positifs (si, si). Je ne dis pas que les autres langages n’en ont pas, bien au contraire. Mais ma vision est plutôt que PHP se bonifie avec le temps, ou en tout cas qu’il y a un énorme effort pour faire progresser le langage. Il suffit de voir l’orientation objet de PHP 3 et PHP 4, par rapport à ce qu’on a maintenant en PHP 5.4. C’est un peu le jour et la nuit.
Au sujet de la maintenabilité d’un code propre (et même de la définition de ce qu’est un code propre), c’est quand très subjectif. Un développeur Python trouve propre de se baser sur le duck typing. Un développeur Java trouvera impossible de coder sans typage fort/statique. Qui a raison, qui a tort ? Je ne veux pas répondre à sa question ; par contre, je dis que PHP essaye de satisfaire les deux points de vue, et je trouve personnellement qu’il s’en sort pas mal.
Je ne crache pas sur le Python. Ce n’est pas ma tasse de thé, mais ce n’est pas pour autant que je ne reconnais pas ses qualités.
Merci pour ton article !
J’avoue être de ceux que ce genre d’attaques sur PHP énerve. Pas tant que je sois un fanatique de ce langage mais j’y suis habitué.
Je dois avouer en revanche pour une fois que ce bogue me fait froid dans le dos. Si j’ai bien compris, c’est pas tant l’égalité entre grands nombres qui pose problème que le fait que PHP décide contre attente lorsqu’une comparaison échoue de convertir les deux arguments en un type complètement différent puis de retenter la comparaison !
J’espère que c’est un fake (même si ça n’en a pas l’air) parce que j’imagine assez bien les conséquences catastrophiques que ça peut avoir…
Bon PHP n’a de toute façon jamais été conseillé pour l’écriture de code critique mais plutôt pour le simple rendu des pages, donc l’impact est moindre je suppose.
Tu mélange typage faible et typage dynamique !
Python est un typage dynamique : les variable sont bel et bien typés et tu as des restrictions d usage du a ce type.
Php est un typage faible.
Je viens ajouter ma petite pierre à ce sujet, surtout pour les défenseurs de clocher. Celui/celle qui pense que son langage est le meilleur, et le défends bec et ongle au risque de verser dans le ridicule, n’a pas compris grand chose à l’informatique moderne (marrant quand on lis « courage » et « paradigmes »)
Un langage est un outil qui est adapté à un besoin. Ce n’est ni un texte de loi, ni une fin en soi. Imposer l’outil de base est au moins une stupidité sans nom et, donc, mets en perspective l’esprit de ceux qui critiquent ou ceux qui louent. Personnellement, je ne souhaiterai ni être leur client, ni travailler avec eux
Par contre, assez souvent je constate que les plus ardents (comprendre en réalité abrutis) dans l’une ou l’autre voie sont assez incapables de faire plus que cela (critique et/ou louange béate) et finalement s’en servent de faire valoir pour masquer une réalité quotidienne bien triste dans leur petite vie.
Je commence à comprendre ton point de vue.
Seulement dire « ça ne m’a jamais impacté » ça revient un peu à dire : « je ne mets jamais ma ceinture en voiture, ça ne m’a jamais servi ». Comment imaginer concevoir des applications fiables (et je ne parle pas encore d’applications sécurisées) lorsque les fondements mêmes du langages sont sujets à des incohérences aussi importantes ?
Tu décris ton appréciation du langage et je reconnais que tu le fais plutôt bien, et semble-t-il avec finalement assez peu de fanatisme à l’égard de PHP. Seulement dans le même temps tu dis n’avoir jamais essayé Python (ou trop peu, si j’ai bien saisi) ou un des autres langages si souvent plébiscités en défaveur de PHP. Cette démarche pourra peut-être renforcer le sentiment de ceux qui pensent déjà comme toi, mais peinera certainement à convaincre ceux qui au contraire sont en désaccord, même partiel.
En le faisant, tu pourrais établir une comparaison et mettre en avant les points positifs et négatifs de chacun.
Voici pour ma part, un point que je reproche à PHP il s’agit de sa syntaxe : pourquoi forcer l’ajout d’un $ devant les variables ? C’est sûr que ça facilite le boulot du parser, mais habituellement, c’est le job du programmeur qu’on essaye de faciliter, pas celui du parser !
Qu’on ne me dise pas que ça permet d’éviter certaines ambiguïtés, parce que bien d’autres langages peuvent se passer de ce mécanisme sans faire face à des problèmes d’ambiguïté.
@Simeon: Non, ce n’est pas un fake hélas.
« pourquoi forcer l’ajout d’un $ devant les variables ? » cela confirme ce que je pense … Si c’est le seul argument de poids pour critiquer un langage, c’est faible.
Moi je l’aime bien mon $variable je sais immédiatement si c’est une variable, ou autre (constante, fonction, etc…)
surtout avec les fonctions anonymes (je trouve ca super puissant, et en python ca n’existe pas)
pouvoir faire :
function foo(){return 1;}
$foo = function() { return 2;}
echo foo() . ‘!=’ . $foo();
c’est super !
https://fr.wikibooks.org/wiki/Programmation_Python/Fonction , chapitre « Fonction lambda ». Les fonctions anonymes existent bien en Python.
Cela dit, je suis absolument pas fan de l’utilisation de fonction anonyme. ça semble une bonne idée sur le moment, mais au final au niveau de la maintenance c’est tout simplement une horreur qui ressemble à un gros sac de noeud.
@Armaklan : Non, je ne pense pas mélanger typage faible et typage dynamique.
J’ai bien commencé par écrire :
Et j’ai continué en parlant de “typage dynamique/faible”. C’est vrai que, pour simplifier mon propos, je regroupe un peu typage statique et typage fort, mais cela semble être un raccourci usuel : «Historically, ‘strong typing’ has been associated with static typing.»
Je sais très bien que Python a un typage dynamique et fort.
@Paul : Juste pour info: Les fonctions anonymes existent en python (lambda)
g = lambda x: x*2
g(3) retournera 6
@Jérome : Oui, pas impacté, mais j’ai bien dit que ce comportement n’est pas normal. Bref, passons.
Je n’ai pas codé réellement en Python, mais je l’ai assez étudié pour pouvoir faire des comparaisons qui tiennent la route.
Concernant le dollar devant les variables, je pense que c’est historiquement un héritage du Perl, qui lui-même doit sûrement l’hériter du shell. J’en ai déjà parlé dans un ancien article. L’absence de dollar ne me dérange pas quand je code en C ou en Javascript. Sa présence ne me dérange pas non plus en PHP, c’est une question d’habitude. Ça permet quand même de discerner d’un seul coup d’œil ce qui est une variable de ce qui est une classe, par exemple.
@Armaklan: Oui en python ca existe mais il y a des limitations, il me semble avoir vu qu’il n’était pas possible de faire des instructions de controles. (si je me trompe j’en suis vraiment désolé)
@Gabriel: C’est marrant comme tout le monde occulte le premier argument de poids (le bogue énorme que les dev. PHP ne veulent pas corriger parce que c’est « by design ».) que j’ai cité. Mais peut-être est-ce justement parce qu’il est impossible à défendre ?! 😉
Moi aussi ça m’énerverait de m’être investi dans un langage et de me rendre compte que ses fondements sont bancals, pas de souci. Je comprends parfaitement cette réaction, c’est humain au fond, même si je ne la partage pas.
Concernant le $, je trouve que ça impose une lourdeur à la lecture et franchement : « comme ça je sais si c’est une variable ou pas » => Très bien, mais ça sert à quoi ? L’utilisation d’une variable dans un code se dinstingue habituellement assez facilement de, disons, une fonction par exemple. À moins de nommer ses variables comme des fonctions, cette décoration est parfaitement superflue et au contraire irritante.
Entre :
a = computeValue(b, c, d, e)
Et :
$a = computeValue($b, $c, $d, $e)
Je vois mal ce que le $ lève comme ambiguïté visuelle. Il semble évident que a, b, c, d et e sont des variables.
J’avoue en revanche que tes arguments sont excellents et difficile à contrer. Principalement parce que tu n’en a donné aucun 🙂 (C’est certainement plus simple, je te l’accorde).
le $ permet une grande souplesse et permet de faire ce que peux de langage peuvent :
exemple :
$a = ‘foo’;
$b = ‘a’;
echo $$b; // affichera ‘foo’
Exemple bidon mais qui permet dans certains cas de faire des appel qui autrement sont d’une grande complexité (si foo est une fonction on peut aussi faire $$b();)
Cela sert a rien en soit, mais c’est pratique et permet de faire les choses simplement….
En ce qui concerne le bug rapporté plus haut, il existe d’autre limitation (pas de lien sous la main à l’instant) dans d’autres langage (certes pas sur ce cas là qui est plutôt chiant et dont la justification est aberrante). Néanmoins, une limitation de langage pour des cas particulier (bon ici il est clair que c’est un cas pourri) ne dois pas pour autant occulter le fait que le langage a énormément d’intérêt.
Certes certaines choses ne sont pas parfaite, mais aucun langage ne l’est. Néanmoins lorsque l’on compare PHP à d’autre langage (utilisable pour créer des application web) plusieurs choses intéressantes s’en dégagent qui en fait un choix plus qu’intéressant.
Si je comprends bien, on peut se servir de $ comme pour faire un eval() en fait.
Mais dans le cas que tu cites, pourquoi ne pas stocker directement l’objet fonction ? Est-ce possible ?
En Python par exemple :
def foo():
# Du code, peut importe
print ‘foo’
a = foo
a() # Appelle foo()
Simple, intuitif et élégant.
@Jerome : Il y a des cas où on peut faire des chose particulières, du genre :
$result = $objectName->$methodName();
C’est rarement utile dans la vie de tous les jours, mais il y a des fois où c’est très pratique.
Mais je ne suis pas certain que cette discussion nous mènera vraiment quelque part. Tu penses que le dollar c’est de la merde, et que donc PHP c’est de la merde à cause de ça. OK, pas de soucis. On a compris. On peut peut-être en rester là ? 🙂
@Jerome, oui c’est possible
on pourrait faire un truc aussi inutile et illisible que ceci :
function foo()
{
echo ‘foo()’;
}
$a = ‘foo’;
$b = ‘a’;
// multitude d’appel différents
$a();
$$b();
${$b}();
eval(‘$’ . $b . ‘();’);
// a complexifier cela le plaisir, en utilisant lambda and co…
Sinon c’est encore différent d’un eval (si mes souvenir dont PHP analyse le truc sont bon).
Je réponds juste a titre informatif, mais en attendant cela n’aide pas pour faire avancer le scmilblik
@Amaury: Pourquoi tout le monde s’évertue à me faire dire des choses que je n’ai pas dites ?
Je n’aurais jamais osé dire « C’est de la merde » : en plus de passer pour un rageux, ce serait sacrément pauvre comme argument. Me faire dire ça c’est tellement réducteur.
Par contre j’adore le :
« Cela sert a rien en soit, mais c’est pratique et permet de faire les choses simplement…. »
« C’est rarement utile dans la vie de tous les jours, mais il y a des fois où c’est très pratique. »
Si on m’accuse d’attaquer le langage sur des points trop précis, vous vous le défendez quand même en prétextant que les fonctionnalités que vous présentez sont inutiles dans un cas d’usage réel. Plutôt étrange non ?
PHP est une bonne idée et a su répondre, un temps, à un besoin fort de développement web. Il a hélas atteint ses limites sur certains aspects qu’on rencontre lors de développements modernes. Son évolution est malheureusement handicapée par l’état d’esprit rétrograde des développeurs et même si sa communauté est dynamique, elle peine à imposer ses décisions à ces mêmes développeurs. Vous avez vu combien de fork de PHP existent pour rajouter des fonctionnalités essentielles ?
Je dis simplement que si les développeurs PHP ne veulent pas voir leurs acquis et leur expérience réduits à néant, ils devraient rapidement trouver le moyen d’imposer des mutations importantes du langage et de se faire entendre. Les autres langages plus modernes ont surement tiré parti des erreurs de PHP, mais ils bougent bien plus vite désormais et offrent une syntaxe bien plus efficace et des environnements bien plus agréables.
@Jerome : On ne dit pas que ces fonctionnalités sont complètement inutiles, juste que certaines sont plus souvent utilisées que d’autres. Certaines évolutions de PHP 5.4 sont présentées par Rasmus comme «quasi-inutiles dans la vie de tous les jours, mais ceux qui écrivent des frameworks les attendent avec impatience». C’est aussi un indicateur de la vivacité du langage, quoi que tu en penses.
« En ce qui concerne le bug rapporté plus haut, il existe d’autre limitation (pas de lien sous la main à l’instant) dans d’autres langage »
J’attends ce lien avec impatience parce qu’en attendant, ça reste très vague 😉 « Je connais un type qui a un jour survécu à une chute de 15000 mètres, j’ai pas de preuve ou de témoignage, mais faites-moi confiance ! »
Je dis ça en toute sympathie, mais les réactions des PHPistes ca me fait un peu penser à ces couples de petits vieux qu’on voit à la télé et qui doivent quitter leur maison parce qu’elle est sur le point de s’écrouler : « Je préfère mourir enseveli sous les décombres de ma maison que d’aller en construire une autre ailleurs ! »
Le langage prend l’eau de toute part, mais on essaye encore de sauver les meubles en construisant des monstruosités de frameworks et en collant des rustines sur le navire en espérant que celui-ci ne coule pas.
« De toute façon les autres bateaux c’est pas mieux ! Ils flottent peut-être, et vont plus vite mais bon c’est quand même pas mieux ! ».
« Tiens les autres langages ont des classes. Tout le monde dit que c’est bien, même si on comprend pas trop pourquoi. On va ajouter un support basique et incomplet des classes comme ça on pourra dire qu’on les a aussi ! » Et si par la suite il s’avère que les autres langages font toujours mieux, on aura qu’à piquer des concepts à droite à gauche, les greffer et duper les gens sur les fonctionnalités de notre langage.
« Tiens le typage statique/dynamique/faible/fort est utilisé par machin et bidule => Ajoutons-le aussi, comme on a aucune ligne de conduite claire sur le design du langage, ça changera de toute façon rien. »
Vous aimez ce langage, certes, mais essayez au moins de l’expliquer avec autre chose que de vagues « c’est mon avis et c’est pas mieux ailleurs »…
@Jerome je n’ai plus de lien sous la main car quel est l’intérêt de garder en bookmarks un détail qui sera probablement corrigé dans 6 mois ou 1 an. Je n’ai pas envie de chercher après un tel lien (google peut t’aider). Maintenant, si tu estime que parce que je n’apporte pas un tel lien tout mon propos est a jeté, libre a toi.
Si tu veux des avantages, je pense que tu trouveras d’autre sites plus véhément qui te tarauderons d’avantage les avantage d’un langage à l’autre…
Plusieurs personnes l’ont déjà répété ici, PHP est un langage qui convient a une série de projet mais sur d’autre du java, du c, du perl, du python, … ou autre conviendra mieux. On ne saurait donné de cas précis, car cela reviendrait a en éliminer plein d’autre, ce qui je suis sur plairait a plein de gens.
Maintenant, il est aussi a signaler que plusieurs personnes ici ne sont pas que PHPiste, perso PHP est le langage que je connais le mieux mais je maitrise bien d’autre technologie
J’aurais bien voulu que tu joignes JavaScript à ta comparaison. On ne peut plus trop l’ignorer vu les systèmes serveurs qui sont en train de se développer et déjà utilisé en production avec un minimum de succès.
Au delà de ça, je suis plutôt en accord avec ton argumentaire. Même si 2 points me font haïr PHP par moments :
– ne pas pouvoir forcer de typage si besoin est (on peut indiquer à une fonction une classe précise attendue en paramètre mais pas les types natifs, WTF ?)
– pas d’indication « throws » comme en Java qui permet de toujours savoir ce que potentiellement une fonction va me jeter à la tronche
Le problème Jérôme est que toi, tu es étroit d’esprit par nature.
Qu’il y ai des problèmes dans PHP, personne ne l’a jamais contesté, qu’il y ai des progrès à faire, pareil mais montrer du doigt un langage en gesticulant et brassant de l’air, si ca peut te faire du bien dans ta journée, c’est au moins cela de pris. C’est un peu le problème sur tous les OS, tous les langages, tous les logiciels bref PHP pas plus, pas moins qu’un autre ne fait mieux ou pire que son voisin, comme Python d’ailleurs. Si pour toi Python c’est super parce que « Python c’est super et PHP c’est nul », tout le monde est bien content pour toi
Tellement imbus de ta petite personne, tu spécules sur ce que font et ne font pas les développeurs PHP en supposant que leur monde gravite autour de PHP (comme il semble que le tiens le soit autour de Python). Pour ma part, il y a belle lurette que j’utilise plusieurs plate-forme pour mes différents projets sans aucune honte et avec beaucoup d’enthousiasme.
Sur ce, parce que finalement c’est pure perte de temps de raisonner quelqu’un qui n’a que 3 sous de jugeote, je vous laisse à vos ébats.
« je n’ai plus de lien sous la main car quel est l’intérêt de garder en bookmarks un détail qui sera probablement corrigé dans 6 mois ou 1 an. Je n’ai pas envie de chercher après un tel lien (google peut t’aider). Maintenant, si tu estime que parce que je n’apporte pas un tel lien tout mon propos est a jeté, libre a toi. »
Oui, et puis c’est infiniment plus commode. Ça évite de justifier ses propos et puis on peut avancer n’importe quoi sans trop réfléchir. Pratique, on est d’accord 😉
« À ce qui parait, utiliser Python tue des chatons ! Je n’ai pas de lien sous la main, mais croyez-moi ! »
Encore une fois (décidémment), on essaye de me faire dire un truc que je n’ai pas dit : bien sûr que chaque langage a ses forces, ses faiblesses et ses domaines d’application de prédilection. Faire un module kernel en Python ou Javascript ? Bien sûr que non ! Coder un site web en C ? Évidemment que non, c’est du bon sens.
Mon propos concerne PHP et son incapacité avec rivaliser avec les autres langages que j’ai cité sur tous les aspects clés du développement web. Énoncer des vérités générales (avec lesquelles tout le monde est d’accord) ne fera pas avancer le débat sur ce sujet !
PHP est peut-être adapté pour de l’apprentissage en école, pour faire découvrir la programmation ou que sais-je encore. Je n’ai pas assez étudié la question pour me prononcer. Le sujet est ici le développement d’applications web sérieuses.
Et si le langage que tu maitrises le plus est PHP, je ne peux que vivement t’encourager à rapidement te diversifier, au risque de vieillir aussi mal que le langage 🙁
@MathRobin : Ah, désolé Mathieu, c’est vrai que je n’avais pas le Javascript en tête quand j’ai écris mon article. J’avoue ne pas avoir assez étudié les solutions permettant de coder en Javascript côté serveur, pour le moment.
Question innocente (n’y voir aucun troll svp) : Les 2 choses que tu dis haïr dans le PHP, qu’est-ce que ça donne en Javascript côté serveur ?
@Jerome : Tu tournes un peu en rond, et tu commences à transformer les commentaires en forum trolliste. J’ai vraiment apprécié que tu fasses l’effort de venir discuter sur mon blog, de manière plus construite que les contributions que tu as envoyé sur Twitter.
Maintenant, si c’est pour continuer à dire que les utilisateurs de PHP vont se transformer en dinosaures (sous-entendu : le PHP va bientôt mourir, et ceux qui font du PHP ne savent faire que ça), je pense qu’on a compris ton message et qu’on peut arrêter là, tu ne crois pas ?
@Gabriel: Je vois que mon argument a fait mouche. Désolé d’avoir du taper là où ça fait mal, je n’y prend aucun plaisir hélas, c’est plutôt pour aider.
Tu crois que j’apprécie de voir des gens s’enfoncer dans un langage qui dépérit et refuser toute aide pour s’en sortir ? Bien sûr que non.
L’étroitesse d’esprit, si on en regarde la définition c’est pas de ne pas remettre en question un choix personnel que tout accable ?
J’ai parlé de Python, parce qu’on parle de développement web côté serveur. J’aurais tout aussi bien pu parler de Javascript (qui semble faire des merveilles à ce niveau dernièrement, à suivre) ou de C++, mais là on s’éloigne du sujet.
Tu sembles vouloir me faire dire que « PHP c’est nul » et « Python c’est trop bien » et comme ce n’est pas le cas, tu inventes ces propos et me les attribues. C’est discutable mais j’imagine que tu t’es senti vexé dans ton orgueil, donc on ne peut pas vraiment t’en vouloir.
Ceci étant j’ai eu tort sur un point, je le concède : dans quelques années, il y aura toujours des développeurs PHP. Les programmes existants ne vont pas disparaitre et comme pour le COBOL à son époque, il faudra des vieux de la vieille pour les maintenir quand plus personne ne pourra/voudra le faire.
En un sens je comprends ton choix, en misant sur PHP tu as assuré ton avenir, et c’est tout à ton honneur, sincèrement.
@Amaury: Très bien, chaque espace de discussion a ses limites, je le respecte. Merci en tout cas d’avoir respecté la liberté d’expression et les opinions divergentes.
@Jerome : Merci à toi d’être venu discuter, et de respecter mes limites 🙂
@Amaury : pas de soucis, je n’y vois pas de troll. Je m’attendais à me faire troller par d’autres ceci dit.
Le même problème est là. A la différence qu’aussi bien pour les objets que pour les types natifs, en JS, tu ne peux rien bloquer dans la signature de ta fonction. Ce qui a au moins pour mérite d’être cohérent plutôt que certains types mais pas les plus usités… Pour la gestion des exceptions, on peut tout catcher, mêmes les erreurs (uh? un beau wtf ici aussi ceci dit)
Concernant JS, je t’incite à jeter un oeil/tester si t’en as l’occasion à NodeJS et Wakanda. Je travaille sur le premier mais je connais assez bien le deuxième aussi (rencontrés x fois les développeurs, assisté à x présentations du bousin). On bénéficie de par l’utilisation de JS, de l’asynchrone sur les deux cotés du site, ce qui rend la conception web plus cohérente à mes yeux.
Client : Je demande un truc à mon serveur, j’attends la réponse mais sans me bloquer.
Serveur : Mon client me demande un truc mais j’ai besoin du filesystem ou de la bdd, je répondrais quand ils me répondront. Le client n’est pas bloqué et je peux continuer de répondre à d’autres requêtes pendant ce temps là
C’est quand même assez évident que Jerome n’est venu que pour troller. C’est un peu plus subtil que le troll de base, mais ça reste quand même assez flagrant.
Je ne vois pas pourquoi vous vous êtes évertués à argumenter avec lui, vous ne faisiez que jouer son jeu.
Personnellement j’aime beaucoup coder en PHP mais je lorgne de plus en plus sur le JS, langage que j’apprécie aussi pas mal, et qui est actuellement bien plus hype. Si on veut utiliser des services cool, c’est (généralement) en JS qu’il faut regarder maintenant.
C’est un peu la loi de la masse qui régie ça. PHP a une communauté très large, bien plus que ses concurrents, on y trouve donc bien plus facilement des ressources. Mais maintenant si on veut faire du développement asynchrone pour, par exemple, avoir des applis plus dynamique, c’est du côté de Javascript qu’on va trouver le plus de ressources, même si PHP pourrait très bien être utilisé de façon asynchrone.
Du moment qu’un langage est plaisant à utiliser, je ne vois pas de raison de s’en passer. S’il est meilleur pour la tâche que je veux accomplir ou qu’il a plus de ressources à disposition, je l’utilise. Point.
@MathRobin : Euh oui, bon, pas besoin de m’expliquer l’asynchrone, hein 😉
J’ai regardé rapidement NodeJS… mais c’est un autre sujet dont on pourra débattre tous les deux une prochaine fois.
Concernant les langages (ta remarque initiale), PHP a des incohérences, on est d’accord. Le typage des paramètres avec des types scalaires est prévu pour la version 5.5, d’après ce que m’a dit Julien Pauli. Donc les choses s’améliorent.
Concernant les “throws”, je pense au contraire que c’est logique. PHP reste globalement permissif, avec la possibilité de typer explicitement les paramètres. Le “throws” n’aurait de sens qu’en obligeant son utilisation partout. C’est philosophiquement très différent.
Pour faire un parallèle foireux, ce serait comme demander à ce qu’une méthode doivent être marquée “virtual” pour pouvoir être surchargée, comme en C++. Ça irait complètement à contresens.
@Ou-at : Certes, le Javascript est “tendance” depuis quelques temps (grâce à NodeJS, il me semble). Mais de la même manière que j’aurais du mal à faire du développement embarqué en autre chose qu’en C − même si ça commence à faire bien longtemps que je n’en ai pas fait − j’ai une barrière irrationnelle qui me freine un peu dans l’utilisation de Javascript pour les développements serveur.
J’ai naturellement plutôt envie de me pencher sur Mongrel2. Mais là on est vraiment dans les goûts personnels ultra-subjectifs.
J’aurais personnellement aussi été plutôt du côté de Mongrel2 avec ZeroMQ pour faire du PHP asynchrone. Sûrement parce que c’est le langage que je maîtrise le mieux. Mais ce n’est pas dans ce sens que va la communauté de développeurs (au sens général) et je doute que dans un futur proche on est beaucoup de ressources à disposition en PHP.
Suffit d’aller sur un site comme « http://news.ycombinator.com/ », y’a pas un jour qui passe sans qu’on voit une nouvelle appli « moderne » en JS, par contre niveau PHP c’est bien plus calme.
Le choix se fait naturellement, soit on migre doucement sur du JS pour pouvoir utiliser tous ces trucs cool, soit on reste sur un langage moins plébiscité et on doit refaire en partie ce qui a déjà été inventé ailleurs.
Salut
Je ne vais pas revenir sur les quelques critiques que tu as reçues, comme souvent sans grand intérêt dans ce genre de sujet, ni prendre position.
Je voulais juste faire remarquer que c’est une bonne chose que tu ai l’honneteté de dire que PHP est conçu sur des bases pourries. Bien qu’on en subisse tous les jours es conséquences, il est rare que des développeurs le reconnaissent. Ca n’empêche pas de coder, mais c’est pas vraiment agréable au quotidien.
De plus pour une fois, les arguments ne sont pas forcément formulés de manière parfaite (incroyable, l’auteur est un être humain !), mais au moins ils ne sont pas de mauvaise foi, ce qui est assez rare pour être noté. L’article de fabien potencier, « youpi en PHP tu peux faire fonction_qui_renvoit_un_array()[4] », était ridicule à ce sujet.
Enfin bref, merci pour cet article.
@Clem : Et merci pour ton commentaire 🙂
(mais euh… j’ai pas utilisé le mot “pourri”, hein)
Effectivement, ça c’est pas ton mot, c’est le mien !
Tu es plus poli et déplore simplement l’absence de structure avec laquelle s’est développé le langage. Mais le terme reste adapté 🙂
Ah mince, c’est fini la foire à jérome !! Franchement, pour qui tu te prends ?
« Tu crois que j’apprécie de voir des gens s’enfoncer dans un langage qui dépérit et refuser toute aide pour s’en sortir ? » Oh mère Thérésa ! Merci, nous sommes sauvé !
Qu’il me soit permis de te poser une petite question : Qui t’a sonné ? Oui car c’est quand même un peu fort de voir te voir débarquer en espérant donner des leçons de vie … Tiens cela me rappelle un temps assez lointain où php-fi était aussi prévu à une belle mort … Comme java fut un temps … Ou c++ … Bref tout un tas d’illuminé (je voulais dire allumé à la base) comme toi pensant sauver le monde avec LEUR vision si bonne de la vie (et si étriquée et si OSEF). Le jour où php sera mort et que python sera au top, he bien tout le monde fera du python … et tu sais quoi ? sans même attendre ton avis, dont tous le monde se fout du reste tellement il est ras du sol …
Il n’y a que les paumés, les dérangés ou les refoulés pour venir critiquer gratuitement un blog de qualité juste à propos d’un langage. C’est beau la liberté d’expression ! Par contre, il semble que les années passant, il y a de plus en plus de cas psychopathologique en informatique … moi pensait que ça serait l’inverse …
Mais sans rancune hein, comme partout on ne peut pas condamner quelqu’un qui n’est pas responsable de ses actes … Les hormones, les afflux sanguins dans le corps spongieux c’est un passage pas évident dans une vie 😉
PS/ Amaury, désolé d’être si virulent chez toi 😉
Sans vouloir être méchant Gabriel, Jérôme n’a pas critiquer le blog ou Amary. Il a donné son avis qui est en désaccord avec celui de cet article.
« On ne l’a pas sonné », ben en fait, un peu tout de même. Un article de ce type provoque des réactions positifs et négatifs, c’est tout à fait normal. Amaury semble l’avoir comprit : les commentaires sont activés et il l’assume parfaitement bien. Si il ne voulais pas de retour, il n’aurai pas activé les commentaires.
Donc concernant les hormones, tu ferais peut-être mieux de t’occuper des tiennes avant d’accuser celle des autres…
Je précise que je ne suis pas d’accord avec certains messages de Jérôme (Php a encore beaucoup d’avenir). Je n’aime pas non plus PHP mais pour des raisons qui me sont propre (et une pure question de sensibilité. Mais je vous rassure, je hait davantages Javascript :p ).
Bref, a bon entendeur.
Arma.
OK, tout va bien, c’est passé.
Comme je l’ai écrit dans mon article suivant, tout ça n’est pas vraiment important. Rigolons-en ensemble. Puis passons à autre chose.
En fait, c’est peu être juste une impression, c’est surtout face à Python que la guerre fait rage en ce moment avec Php. Est que les utilisateurs de python se sentent mal aimé ?
Moi j’ai envie de dire « Chapeau ! » à Jérôme parce que sérieusement, j’ai rarement vu un troll aussi subtil. Je me suis laissé berner sur les premiers posts mais il a rendu ça évident par la suite !
Par contre Gabriel mon pauvre je suis désolé de te le dire, mais tu as pris cher. Très cher. Le pire étant ta réponse complètement incontrôlée. Tu as surement écrite sous le fait d’une pulsion de rage, et ce faisant tu l’as laissé te donner le coup de grâce.
Si tu tiens vraiment à défendre PHP à l’avenir, abstiens-toi de commenter face aux détracteurs de ce genre ou fais-toi relire par quelqu’un de plus modéré parce que tu ne rends pas vraiment service à notre communauté en agissant ainsi. PHP n’a pas besoin de davantage de supporters aveugles, ce qui lui faut c’est des gens qui savent reconnaître les forces du langage mais aussi surtout ses faiblesses comme le fait très bien Amaury dans cet article. C’est un ensemble, tout n’est pas noir ou blanc.
@Freak0: J’ai récemment découvert Python et je doit dire que j’ai été plutôt agréablement surpris même si l’indentation particulière m’a un peu perturbé et que je continuerai clairement d’utiliser PHP pour un long moment parce que c’est ce que je maîtrise le mieux et qu’au final, ce qui compte c’est d’être productif. En tout cas je t’assure qu’on peut essayer l’un sans trahir l’autre 😉 Et qu’on devient pas un gros troll ou un vieux rageux 😀
Ah voilà les modérés donneurs de leçons qui sont aussi bas du front que le « Grhum ».
1) je ne suis pas du tout énervé mais quand un idiot-bête attardé tente de nous la faire à l’envers, il convient juste de lui répondre aussi salement que son propos. Question de réciprocité.
2) Arrêtez de vous croire devin ou grand psy, cela vous jouera des tours un jour. Arrêtez de croire comprendre ce que vous n’avez pas lu … (lire le point 3) accessoirement, vos conseils … vous savez quoi en faire ou où vous pouvez vous les mettre 😉
3) Je n’ai pas spécifiquement défendu PHP, à vrai dire je m’en fout pas mal de ce qu’on en pense. j’ai passé l’âge de savoir si la mienne est plus grosse que celle du voisin. Toutefois, quand on voit le niveau d’intervention su Tw, faut peut-être arrêter de baisser la culotte pour faire le grand seigneur. Les grands donneurs de leçon qui affichent en novlang leur maigre petit CV histoire de se donner une importance qu’ils n’auraient pas naturellement, il faut les recadrer à toutes occasions, juste pour leur rappeler qu’ils ne sont pas exempt de dire des conneries (géraume)est un parfait exemple) plus grosse qu’eux et qu’accessoirement PERSONNE n’attends après leurs petits avis minable pour faire quelque chose avec leur clavier. D’ailleurs, « j’ai rome » il critique, il critique mais peut-on voir ce qu’il vaut ? (j’ai une grosse ide de la question vu le discours)
4) quand à la subtilité du Troll … cela se sent à des kilomètres parce que cela fait au moins 10 ans qu’on voit EXACTEMENT les mêmes types d’arguments. Le gamin qui croit avoir mis le doigt sur THE BIG problem vient juste de se ridiculiser en recyclant les mêmes rengaines. J’avoue la variante du bug de comparaison avec des bigints m’a beaucoup fait rire. Je crois que tous les langages, tous les os et tous les logiciels ont eu et ont toujours des problèmes de ce style. Même des processeurs en ont eu …
Donc pour ceux qui doutent encore, je vous invite à relire mon tout premier message où j’explique ma position. Par contre, vous devriez prendre exemple sur notre ami qui cause de mongrel2 et 0mq, car lui parle d’une idée neuve.
Attention, message écrit sous UNE PULSION DE RAGE INCONTROLEE :-)))))
Je n’ais pas du tout apprécié l’attitude condescendante de Jérôme. Passons.
Ce débat est stérile, mais j’en profite pour poster un lien vers une vidéo intéressante sur les attaques par complexité : http://www.youtube.com/watch?v=l43ZAIgsq5Q
Le rapport ?
Au delà du sujet même de la vidéo, on voit que ce soit Php, Python, Ruby, ou Java, que les fonctions de hash utilisés en interne sont ou étaient mal conçus. Avis subjectif, mais je trouve cela plus impactant en situation réelle que le bug de PHP indiqué plus haut dans cette discussion.
@Julien Le lien est intéressant, merci.
Par contre pour le bogue qu’a signalé Jérôme, j’ai l’impression que peu de gens l’ont compris (je passerai sur Gabriel qui n’a semble-t-il de toute façon pas compris grand chose en général, si ce n’est comment passer pour un enfant capricieux).
Tous les langages ont des failles, des bogues, on l’espère le moins possible mais oui, c’est un fait. Par contre le « bogue » en question (qui porte mal son nom) n’en est pas un en fait : cela n’a pas été corrigé car les développeurs prétendent que c’est voulu.
J’avoue avoir du mal à les soutenir sur cette décision… (si on peut plus se baser sur une comparaison, c’est effrayant quand même) et je comprends les réticences de certains (même si ça n’excuse pas leurs provocations !)
J’ai aussi un souci avec PHP: Il est accessible par tous.
Ca se ressent quand on souhaite recruter ou discuter de sujets pointus sur un espace de discussion.
Tu publies une annonce « cherche développeur PHP (+ annonce complète) », t’as tout un tas de bras cassés qui te répondent, qui au final noient les bons profils dans la masse.
J’admets que le rôle du recruteur est justement de dissocier le bon grain de l’ivraie (il est payé pour ça), mais on retrouve un peu moins ce problème en Java, toujours moins en Python, et si tu te mets à rechercher des développeurs OCaml, tu tombes sur une majorité de bon profils.
Quand t’as du métier, tu trouves des méthodes de contournement, comme mettre plutot un frameworks en valeur au lieu du langage, mais le temps de trouver les « astuces », tu as le temps de pester suffisament contre PHP.
Un peu comme rechercher un administeur système et réseau pour entretenir un parc Windows ou FreeBSD.
Bon sinon, grâce à PHP et tout ce qui tourne autour, je gagne raisonnablement bien ma vie, je ne cracherais pas dans la soupe, mais rien n’empeche de critiquer un petit peu 🙂
@rakotomandimby : Oui, c’est vrai, c’est un soucis. N’importe quel mec qui a fait deux fichiers PHP pour son site perso se proclame développeur PHP. De là à conclure que le langage est mauvais… Je suis contre l’idée d’une informatique élitiste.
Mais c’est vrai qu’il faut être d’autant plus rigoureux dans ses recrutements ; d’un autre côté, il faut toujours être rigoureux, quelle que soit la techno. Parce que je connais des gars qui mettaient « OCaml » sur leur CV simplement parce qu’on avait eu un semestre de cours, mais ça n’empêchait pas qu’ils ne valaient rien sur ce langage.
Contrairement à vous, je pense que le débat n’est pas si stérile qu’il n’y parait ! Il permet, selon moi, de faire avancer le langage.
J’apprécie de voir des personnes faire des critiques (à condition qu’elles soient constructives) sur le PHP, parce que j’aime ce langage et, je souhaite que ces critiques remontent sur @internal.
Je suis persuadé que si le typehinting était possible sur les variables scalaires, l’auteur l’aurait utilisé pour « blinder les entrées et les sorties des modules/objets/bibliothèques ».
D’ailleurs, ce « défaut » est l’une des critiques faites au langage, et il y a des chances que ce soit corrigée dans la version 5.5 (cf article de nikic).
Personnellement, je rêve de pouvoir déclarer le type des variables, et d’avoir une option dans le php.ini pour interdire la conversion de types. Comme le fait python : même si le type n’est pas explicite, une fois la variable settée, il est impossible de la setter avec un autre type.
Juste pour revernir à @jerome qui nous fait un blocage psychorigide sur son BUG, si tu avais proprement codé et utilisé le tripple égale pour comparer les deux valeurs en tenant compte du type, tu aurais bien eu une différence entre les deux chaines. Nous en revenons donc toujours au même point : Le gros avantage de PHP est de permettre a n’importe qui de faire sa première page, mais c’est ce qui fait sont plus gros défaut. Ces débutants qui codent n’importe quoi ou n’importe comment sont critiqués par les détracteurs des autres langages.
Par ailleurs, j’utilise fréquemment python dans mes projets perso, mais c’est un langage que je ne pourrais malheureusement jamais utiliser dans le cadre professionnel. Malgré toutes ses qualités et même s’il matchait parfaitement avec mon besoin, python souffre d’un énorme défaut : en france les développeurs qui connaissent ce langage sont super rares ! Et comme mon entreprise ne recrute pas de développeurs et passe exclusivement par les SSII (donc pas d’investissement sur la formation) il est impossible trouver plus de 2 personnes simultanément connaissant ce langage.
Jeremy,
Dans ce cas ce n’est pas du tout un défaut de Python, mais un échec de l’éducatio nationale, qui n’a pas su identifier les besoin des entreprises et du marché. Parceque *si* un outil satisfait les besoin des entreprises, il faut l’enseigner.
Un avantage de PHP est qu’il n’est enseigné nulle part (j’ai encore jamais vu de Fac ou décole avoir un module d’enseignement relatif à PHP) mais tout le monde le connait en sortie 😛
Demande à une SSI de trouvé des compétences Pythons et elle va le faire (enfin « officiellement » en tout cas :p ). Contrairement à Rakotomandimby, je ne pense pas que c’est l’école qui crée les compétences sur un langage en particulier : c’est le milieu professionnel et les besoins.
Typiquement à l’école j’ai fait du C++ et du C#. Depuis que je bosse je n’ai plus fait de .NET et je suis maintenant considéré comme expert Java.
Une entreprise qui embauche un débutant (sortie d’école) sait parfaitement qu’elle va devoir le former (à minima avec une formation sur le tas). Par contre elle le fera si elle en a le besoin. Aujourd’hui les entreprises préfèrent rester sur les techno « à la mode » par simplicité.
Voilà: On recrute « par simplicité », ensuite on a des développeurs par très futés et après on crache sur PHP.
On vient de trouver une des raisons pour lesquelles PHP est trop souvent accusé de ce qu’il n’est pas.
Note: mettez des smileys un peu partout dans ce que j’écris.
Bonjour à tous,
j’ai trouvé très inintéressant tout ce que j’ai lu jusqu’à présent.
Pour ma part, c’est impossible de dire lequel des langages est le meilleur, pour moi, il n’y en a aucun.
( Sauf qu’à la base, il faut préciser que C, C++, JAVA, etc.. n’ont jamais été crées pour le WEB )
Le meilleur langage est celui ou le développeur ce sent bien et confiant. Un peut comme tout dans la vie.
Pour finir, en dehors de la structure du langage,
je pense que les langages PHP et RUBY contrairement aux autres donnent un vrai sens au mot « OPEN SOURCE ».
Je vous souhaites une très bonne journée 😉
Bonjour,
Pardonnez-moi de déterrer un peu ces commentaires, mais j’aimerais rectifier un petit détail qui a été dit :
A vrai dire, j’ai terminé mes études il y a un an, avec une licence Pro spécialisée dans le développement web, et il y avait un module PHP 🙂 Certes, c’était pas extraordinaire, et bien loin d’être aussi poussé que ce que j’avais eu sur JAVA en DUT, mais je pense que ça commence à être appris quand on se spécialise vraiment. Donc dire que PHP n’est enseigné nul part n’est pas tout à fait vrai, même s’il faut avouer que ça ne vaut clairement pas l’apprentissage par soi-même en lisant des tuto et de la documentation… Ce qui fait d’ailleurs sans doute que tant de personnes disent être développeur PHP.
le pb est que c’est ceux qui en parlent le + qui en font le – (comme disait mac cain avec ses frites). c’est long mais vous saurez (presque) tout. on critique souvent ce qu’on a pas essayé jusqu’au bout.
on peut exploiter les potentialité du php que si on a suivi une formation suffisante avec des profs certifiés zend par ex. et là, qd on voit les potentialité du php: on tombe sur le cul. bcp se mettent au php en croyant que c’est un langage ‘facile’, bricolent et le sous-exploite.
oui c’est un langage bordelique mais il a des pepites qu’aucun n’a et est extremement adapté au web.
pour moi, AVANTAGES:
– simplicité d’utilisation qui fait que l’on peut récuperer un morceau de code/classe sur internet et le tester tres vite. en c#, faut souvent taper à pls endroits du site pour faire marcher l’exemple (et on y passe des heures). comme c’est simple, on peut se concentrer sur l’essentiel: le fonctionnel et non des pbs techniques à la c… qui n’ont rien à voir avec le sujet principal
– entièrement gratuit
– fonctions de traitement de chaines tres complètes et dans le web, on arrete pas de traiter des chaines de caractères
– son coté peu verbeux (il faut le double de lignes en C# et java pour faire la meme chose),
– inconvenient à la base, etre peu typé peut devenir un avantage pour faire du code générique facilement (passer dans un meme argument, aussi bien un nombre, chaine, array ou fonction. au concepteur de la bibliotheque de faire les tests necessaires).mais pour les types simples, on s’en fout: « 1 » ou 1, c’est pareil au niveau logique et dans le web on passe sans arret du type chaine à un autre (avec les autres langages, c’est la galère: switch case avec test sur le type et caster/decaster partout. le c# résoud tres peu le pb avec ses types génériques ). de meme qd on récupère des données d’une SGBD, on peut faire des traitements generiques sans aucune complexité qq soit la base.
– son extreme souplesse: fonctions anonymes et cie les doigts dans le nez (essayez les deleguate en C#: à se tirer une balle. car c’est censé faciliter la tache), generation possible de code à la volée (create_function et cie), tableaux asssociatif: y’a pas mieux dans aucun langage (extreme souplesse/simplicité et puissance à la fois et tout est basé dessus -retour de fonctions PDO, …-). possibilité de convertir un tableaux associatif en objet ou en séries de variables: efficacité redoutable parfois (abondamment utilisé dans symfony). En un seul type array, on rassemble ce que font toutes les collections et cie dans les autres langages (fonctionalités réparaties sur pls types: array, dictionnary, …), fonction eval (permet aux utilisateur de cms de placer du code à executer), tampon ob_… pour retravailler le code généré, chaine de caractères extrement souples ( quote et guillemets sont équivalents: permet de jongler avec le code html,js,php sans pb) (en C#, infernal: sans arret des \ » « » partout illisibles). on peut aussi mettre des portions de code dans les chaines, etc.. etc… j’en oublie des tonnes
– la bibliotheque est certe bordelique mais CHAQUE fonction a été poussée à son maximum (avec tout cas possibles d’utilisation des arguments). comparez explode et split de c# (qui se limite UNIQUEMENT à des séparateurs de type caractère et on des chaines: obligé de rédev la fonction split en C#)
– etc… au moins 10 autres avantages.
toute cette souplesse permet donc de faire facilement des cms puissants/souples. j’ai déjà étudié des cms asp.net: c’est d’une rigidité cadaverique et pour ca aussi, qu’ils ne percent pas sur le marché.
INCONVENIENTS :
– trop permissif donc autorise trop à du code alambiqué (bricolos php qui n’ont pas suivi une vraie formation) inmaintenable => d’ou frameworks pour corriger cela
– on peut pas forcer le typage d’une variable ailleurs que dans les params d’une fonction. pour l’autocompletion offerte par les IDE, ce serait encore mieux: on doit pourvoir parfois etre certain de quel classe est l’objet qu’on manipule (pour les types natifs, on s’en fout) et pouvoir lister ses fonctionnalités sans aller fouiller dans le code source ou tout mémoriser (principe de la POO)
– bibliotheque native dénuée de logique au niveau des nommages, ordre des paramètres, mode d’utilisation,… : on se demande bien ce qui est passé par la tete des dev
– pas de vrais paramètres optionnels: cad des paramètres qu’on peut TOTALEMENT ommetre (obligé de mettre null qd param au milieu de la liste)
– pas de possibilité de déclarer plusieurs constructeurs. ce qui complique enormement l’utilisation/conception des bibliotheques et comme pas de vrais paramètres optionels, un constructeurs n’est pas assez souple. idem pour le fait qu’une seul prototype par fonction
– paramètre à nombre variable pas typable: donc on ne sait pas quand on peut passer autant d’argument qu’on veut. (à part convention de nommage)
– certains manques au niveau des concepts de POO (par ex, c# a les classes partielles, la possibilité d’enrichir une classe système -string par ex- mais n’a pas vraiment les « traits » de PHP, etc…)
– gestion des exception limitées aux classes développé. pour les fonctions natives, c’est tout un bordel pour lever des erreurs
– en effet, le fait qu’une variable est estimée fausse si elle vaut « », 0, null ou false ou qu’elle n’existe pas. par ex, j’ai été obligé de réécrire une fonction empty car ca considère « 0 » comme vide !!! ca c’est mega chiant en php mais on s’y habitue à la longue (d’ou formation necessaire pour pas bricoler)
– le passage par ref & n’est PLUS à préciser à l’appel de la fonction ( fonctionX(a,&b,c) ) fait que l’utilisateur d »une classe ne sait pas ce qui va se passer pour son argument. merdique: aucun langage ne le fait. obligé de préfixer l’argument $refXXX pour que ca saute plus au yeux du dev
– le fait que c’est un langage totalement dynamique fait qu’il n’y a pas de compilateur, qui comme en asp.net permet de supprimer 50% des erreurs basiques. donc il faut etre extremement rigoureux en php et tester..tester…tester tout les cas de figure. ou industrialiser ses tests (phpunit). on revérait un mini-compilateur qui permettrait de supprimer au moins les erreurs de bases (syntaxe, arguments en trop/en moins, etc…)
– quand on redefini une methode de la classe mère, pas de mot clé obligatoire de type override donc obligé de scruter ce qui est dans la classe mère: ce qui est contraire aux principes de la POO. mais les IDE comme netbeans corrigent le pb en mettant un flag devant.
– pour ecrire des bibilotheques de fonctionnalités complexes, c# et java est bien plus fiable que php, pas assez blindé et trop permissif. donc pour des tres gros sites d’entreprise type logiciels-web, php est à la ramasse. nottament car pas possibilité de créer des composants et nouvelles balises coté serveur (usercontrols chez asp.net, tres puissant)
« pourquoi forcer l’ajout d’un $ devant les variables ? » programmer en php necessite un niveau min, sinon vous poseriez pas la question. le $ permet entre autres de faire ceci: $this->$$variable ou $this->$$methode cad du code dynamique. en transmettant un nom de variable/fonction, le code s’adapte à l’utilisateur de la classe. cela permet aussi un truc dingue qui peut paraitre hérétique: une classe mère peut invoquer une methode de la fille qu’elle ne connait pas à l’avance. et ceci peut se réveler hyper puissant dans certains cas (par ex pour faire des classes d’ORM facilement).
le php est à sa base génial, mais contient ensuite des énormes manques et illogismes. mais chaque langage a ses avantages et inconvenients et ses domaines de predilection. si php est toujours là apres ~ 20 ans comme java: c’est pas pour rien. quand leurs concepteurs auront enfin corrigés (pris conscience) les points faibles du php, ce sera une tuerie. (espoir?)