PHP, solution de simplicité ?

Billet d'humeur

Ah, PHP…

J’écris ce billet en réponse à ce sujet, où PHP est présenté comme une solution facile.

Et loin de moi l’idée de conseiller le PHP. Sachant que mes deux seuls arguments sont : la "facilité" d’hébergement et de connexion à MySQL.

A-312

Sur le sujet je n’ai pas grand chose à dire mis à part ce que j’ai déjà dit plus haut, php = facilité (ressources/aide/docs/tutos).

#VK

Ayant personnellement commencé la programmation en 2006 avec PHP, j’ai plutôt l’impression de m’être heurté à des murs que je n’aurais pas rencontrés avec d’autres langages.

Un environnement pas si facile

Apprendre PHP, c’est d’abord tout un environnement à mettre en place. PHP est vu, utilisé, et enseigné comme un langage dédié uniquement au web. Cet environnement passe donc par l’installation d’un serveur HTTP, de l’interpréteur PHP, et généralement d’une base de données (MySQL).

En 2006, j’étais un jeune windowsien, et tout cet environnement rimait avec EasyPHP, et c’était loin d’être de la tarte1. Je me souviens encore très bien de mes premières expérimentations.

J’avais bien installé EasyPHP, je le voyais, même : il était là en bas dans la barre de tâches, avec son voyant vert. J’ouvrais mon navigateur pour me rendre à l’adresse 127.0.0.1, sans trop savoir pourquoi, mais je ne trouvais pas mes fichiers. Juste une page d’index vide.

Et oui, il fallait en fait placer les fichiers dans le répertoire www d’EasyPHP !

Débuter en PHP, c’est de plus faire face à un sacré bazar dans le code. Il n’y aura pas seulement du PHP, mais aussi du HTML, du CSS. Et du SQL, parce que les bases de données sont omniprésentes, et « imposées » dès le début de l’apprentissage. Pas que ce soit un mal d’utiliser des bases de données, mais l’environnement web fait que ça vient bien trop vite.

Les bonnes pratiques voudraient que tout ne soit pas mélangé, et c’est ce que fera un bon développeur PHP. Mais on est ici dans le cas d’un débutant, qui se retrouve malgré lui à devoir manier 4 langages (voire 5 avec Javascript), et ne sait pour le moment pas structurer un code.

Cet environnement rend enfin plus ardu le débogage. Quand une erreur se produit, son message – très succinct – est recraché par le navigateur. Message souvent perdu au milieu du code HTML, voire difficilement visible. Les différents niveaux de configuration (serveur HTTP, php.ini) compliquent encore plus la tâche, dans le cas où certaines erreurs sont silencieuses.


  1. Ça manque d’une recette de tarte par ici. 

Un langage rudimentaire

Je ne vais pas ici réécrire le fractal of bad design de l’excellent eevee. Article dont certains points sont maintenant corrigés par les nouvelles versions de l’interpréteur, mais qui reste majoritairement vrai.

Mais la bibliothèque standard du langage est assez compliquée à utiliser. Avec ses noms de fonctions imprédictibles, encore pire pour l’ordre de leurs paramètres, et l’horreur que sont les array, à mélanger tableaux et tableaux associatifs.

Ici, je voulais surtout évoquer le bordel qu’est la bibliothèque standard. Pas d’espaces de noms ou de modules pour réunir les fonctions, juste des préfixes sur les noms… Bibliothèque composée d’extensions, et sans système pour charger une extension dans un projet, il est difficile de savoir ce qui est disponible à l’instant t.

Et je trouve ce qu’elle propose assez rudimentaire. Pour revenir sur le débogage, les outils d’introspection semblent vraiment limités. Je me souviens de print_r et var_dump, s’occupant d’afficher (horriblement) le contenu d’une variable, mais rien à ma connaissance pour connaître les opérations que l’on peut appliquer sur une valeur. Il y a tout de même l’air d’y avoir quelque chose de plus complet pour les classes avec Reflection.

La question des ressources

D’abord, d’abord, y a la documentation.

La documentation de PHP, je ne m’y suis jamais fait. Si je me place par exemple sur la page principale, impossible de trouver les pages consacrées aux array. Mais il y a bien un lien vers Variable and Type Related Extensions, qui lui référence les pages concernant ce type de données pour lequel je voulais voir un aperçu des fonctions.

Alors heureusement, il y a le formulaire de recherche, mais ça implique d’avoir un nom assez précis de ce que l’on recherche. Si je recherche « concatenate string », par exemple, je ne trouve rien.

Ensuite, effectivement, il y a beaucoup de tutoriels, mais pour combien qui enseignent les bonnes choses ? Dans ma traversée du monde PHP, il m’était difficile de trouver des bonnes ressources pour continuer à apprendre. La seule que j’avais trouvée de potable était le tutoriel officiel du SiteDuZéro, qui enseignait les bases.

Il en est sûrement autrement aujourd’hui, avec l’avènement des cadriciels, et j’avoue ne pas m’y être réintéressé de près.

Idem pour les forums, j’ai plus le souvenir de débutants venant proposer des solutions absurdes à d’autres débutants qui présentaient leurs problèmes.

Enfin, pour ce qui est de l’hébergement, il était en effet plutôt facile de trouver une plateforme pour héberger son site. De nombreux hébergeurs gratuits étaient à disposition, disposant de PHP, MySQL, de PhpMyAdmin et d’une connexion FTP. Pour les autres langages, on ne trouvait rien (avant l’arrivée d’alwaysdata), ou il fallait mettre la main à la poche.

Mais voilà, il s’agissait de plateformes gratuites, qui tombaient les unes après les autres. Ça dépannait, mais ça n’avait rien d’idéal. Et restons sérieux : tant que le projet n’était pas avancé, il n’était pas nécessaire de l’héberger.

Puis aujourd’hui, les machines virtuelles et les conteneurs étant passés par là, il est beaucoup plus aisé de trouver un hébergeur pour n’importe quelle technologie.


Tout ça pour dire que non, je ne vois pas en quoi il est facile de commencer avec PHP. Aujourd’hui, je m’en suis éloigné, et j’ai pu réutiliser ce que j’avais appris avec lui. Mais c’est tout de même un environnement qui n’est pas propice aux débutants.

Le web est compliqué. Ce sont de multiples applications qui communiquent ensemble, des serveurs qui répondent aux requêtes client, des langages différents à utiliser conjointement, des problématiques de sécurité qui ne peuvent pas être relayées à plus tard, etc.

Commencer par le développement web, plutôt que par le développement tout court, c’est quand même partir avec une sacrée épine dans le pied. Surtout avec PHP :p

6 commentaires

Ici, je voulais surtout évoquer le bordel qu’est la bibliothèque standard. Pas d’espaces de noms ou de modules pour réunir les fonctions, juste des préfixes sur les noms… Bibliothèque composée d’extensions, et sans système pour charger une extension dans un projet, il est difficile de savoir ce qui est disponible à l’instant t.


D’abord, d’abord, y a la documentation.

La documentation de PHP, je ne m’y suis jamais fait. Si je me place par exemple sur la page principale, impossible de trouver les pages consacrées aux array. Mais il y a bien un lien vers Variable and Type Related Extensions, qui lui référence les pages concernant ce type de données pour lequel je voulais voir un aperçu des fonctions.

Alors heureusement, il y a le formulaire de recherche, mais ça implique d’avoir un nom assez précis de ce que l’on recherche. Si je recherche « concatenate string », par exemple, je ne trouve rien.

Pour la documentation, j’en garde un très bon souvenir. J’ai appris le PHP surtout par ce biais-là. C’est l’une des meilleures documentations que j’ai pu voir, et l’une des meilleures FR (après celle de mozilla). Quand je cherchais une fonction, je réfléchissais à ce que je voulais modifier : une string ? un array ? un nombre ? une fonction plus poussée ? J’avais un mot clé, je savais où chercher. Ensuite je trouvais facilement ce que je cherchais avec Google qui me renvoyait directement sur php.net. Ou je cherchais directement avec le moteur de recherche de la documentation php. Je ne connaissais pas le nom de la fonction, et je ne savais pas si elle existait, mais la description de la fonction permettait au moteur de recherche de tomber juste.

J’ai toujours été critique sur ce que je trouvais sur internet et je cherchais à toujours comprendre chacune des fonctions PHP que j’utilisais. Et je cherchais souvent "hack security [machin]" pour voir si des erreurs d’utilisation étaient récurrentes à ce sujet. Mon plus grand reproche à la documentation/ressource sur le web, c’est qu’aucun contenu ne regroupe les failles/erreurs récurrentes (qui sont fréquentes dans la logique d’un code). Mais peut-on vraiment reprocher à un langage les erreurs des utilisateurs ?

Le problème dans tout ça c’est la prise de conscience. Aucun tutoriel n’indique les problèmes possibles qu’on peut rencontrer. Si on a pas conscience du problème, on ne peut pas trouver une solution pour l’éviter.


Le web est compliqué. Ce sont de multiples applications qui communiquent ensemble, des serveurs qui répondent aux requêtes client, des langages différents à utiliser conjointement, des problématiques de sécurité qui ne peuvent pas être relayées à plus tard, etc.

Le C n’est pas le plus simple pour faire ça. :lol: La base (début) du code en C est un peu complexe à mettre en place. Alors qu’en PHP, il n’y a pas besoin de coder la base de la partie réseau. Tout est prêt, il suffit de faire un simple echo "Hello world !"; et voilà le tour est joué ! Quand la complexité de l’application permet d’utiliser le php.

Comme je l’ai, dis :

Et loin de moi l’idée de conseiller le PHP.

A-312

Je ne conseille pas le PHP ou le déconseille. Mais quand je vois des gros lourdos dire le PHP est nul avec des arguments primitifs, j’interviens pour contrebalancer un minimum.

Les différences entre langage c’est bien. Je me suis bien amusé avec mes petits projets PHP, et j’en garde de très bons souvenirs. J’avais quelque chose de stable.

+6 -0

Eh bien perso je trouve ce billet d’humeur très pertinent !

Le langage a ses avantages et ses défauts, comme tous les langages, mais pour moi le simple argument de l’environnement WEB devrait suffire à l’éliminer de la liste des langages pour débuter.

Le web c’est un des environnements les plus complexes dans lesquels évoluer, c’est pas simple de tout appréhender même pour les devs qui ont une solide expérience en développement !

Les BDD (parce qu’il faut non seulement maîtriser le SQL, mais en plus il faut savoir expliquer à la machine comment composer une requête !), les protocoles réseaux (y’a un paquet de couches), les multiples failles de sécurité qu’il faut éviter même pour des opérations usuelles (combien de devs expérimentés ai-je entendu me demander "franchement, à quoi ça sert de hasher chaque mot de passe avec un sel différent ?").

En PHP on écrit du code qui écrit et manipule du code dans au moins 4 langages différents : SQL, HTML, CSS, JS. Ce n’est pas trivial, c’est même tout le contraire ! C’est encore moins quelque chose qu’on propose à des novices.

Des logiciels multiples qui communiquent avec des serveurs multiples dans des langages multiples dans des architectures réseau de plus en plus complexe, c’est hardcore, pas invivable, mais hardcore, même pour des devs qui ont de l’expérience.

Le nombre hégémonique de devs web qui sont des boulets en développement réseau/BDD/logiciel / me terrifie. Alors par pitié ne lancez pas des novices dans cette fausse aux lions, laissez-les appréhender le dev et ses problématiques propres avant de s’essayer à du dev (de jeu ?) multi-online-persistant.

+10 -0

Je suis d’acord pour le design, en particulier pour la prediction du nom des fonctions… Je n’ai pas beaucoup utilise PHP, mais c’est bien un truc dont je me souviens…

Et c’est clair que la, Python est juste genial…

Pour moi, la seule raison d’utiliser PHP est que c’est facile de trouver un hebergeur… C’est tout.

5 ans après, de tiens à dire que PHP a pas mal évolué et que notamment XDebug, le debugger officiel de PHP a super bien été intégré aux différents outils de développement. Notamment grâce au serveur http de développement intégré.

je déterre ce message car je découvre ce billet alors que je suis en train de faire la classification des objectifs et je trouvais ça intéressant, surtout que mon premier message à l’époque était pas vraiment très présentable, veuillez m’en excuser.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte