- Localisation d'une personne avec des micros.
- Un environnement de développement Rust sous MacOS avec VSCode
Ah, PHP…
J’écris ce billet en réponse à ce sujet, où PHP est présenté comme une solution facile.
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.
-
Ç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