Hui Xinchen est l'expert technique PHP le plus influent de Chine, membre principal de l'équipe de développement PHP, développeur PECL et consultant externe chez Zend Technologies. Il a précédemment travaillé chez Yahoo et Baidu, et est aujourd'hui l'architecte en chef du département Plateforme et Données et consultant PHP en chef chez Sina Weibo. Hui Xinchen est un développeur principal de PHP NG et un développeur majeur de PHP 5.4 et 5.5. En tant que développeur PECL, il a contribué à plusieurs projets open source remarquables, notamment Yaf, Yar, Yac et Taint, et est également mainteneur de projets tels que APC, OPcache et Msgpack.

D'un débutant cherchant des tutoriels PHP en ligne à membre principal de l'équipe de développement PHP, Hui Xinchen estime que tout le processus a été comme « monter de niveau en battant des monstres ». PHP, comme Java, est aussi appelé un langage de cols bleus, mais selon lui, c'est précisément le berceau qui peut former davantage de programmeurs, et à une époque où tout le monde peut coder, il produira forcément plus de personnes remarquables capables de faire progresser la technologie.

Question : Comment avez-vous commencé à vous intéresser à la programmation ?

Ma première « programmation » a probablement eu lieu sur une console d'apprentissage Subor. Plus tard, j'ai étudié l'informatique à l'université, et pendant mes études de master j'étais responsable de la construction de l'informatisation du campus. J'ai fait beaucoup de développement web, activement ou passivement, notamment des sites web pour de nombreux départements secondaires de l'école et la maintenance du BBS du campus. Avec le recul, il ne semble pas y avoir eu un seul événement ou moment où je me suis dit que j'étais tombé amoureux de la programmation. J'ai simplement trouvé naturel d'entrer dans ce secteur, et comme ça ne me déplaisait pas, j'ai continué.

Question : Comment en êtes-vous venu à aimer PHP ? Et comment êtes-vous devenu membre principal de l'équipe de développement PHP ?

À l'époque, pendant mes études supérieures, je devais créer un site web. Je n'avais aucune idée de comment faire, alors j'ai cherché en ligne et je suis tombé par hasard sur un tutoriel PHP expliquant comment créer un site web simple. J'ai essayé de le suivre et j'ai trouvé que l'installation, le déploiement (il n'y avait pas d'outils de déploiement centralisés à l'époque, même s'il existait aussi de nombreux tutoriels sur le déploiement de LAMP), le codage et les tests étaient tous très pratiques. La syntaxe était également très similaire à C, et même de nombreux noms d'API étaient identiques à ceux de l'API libc. Et c'est ainsi que mon lien indissociable avec PHP a commencé.

C'était probablement en 2011. À cette époque, j'ai développé Ap (le projet prédécesseur de Yaf) pour Baidu. Il était plutôt bien utilisé au sein de Baidu, alors j'ai pensé à le proposer à PECL. Après avoir apporté quelques modifications, je l'ai renommé Yaf (Yet Another Framework — le nom est un peu autodérisoire, car il existe déjà de nombreux frameworks PHP). J'ai envoyé un e-mail à la liste de diffusion PHP. Comme mon anglais était assez mauvais, le processus a été assez tortueux. Heureusement, Pierre Joye m'a beaucoup aidé, ce qui a permis à Yaf d'entrer dans PECL.

De plus, avant de soumettre Yaf, j'avais en fait étudié le code source de PHP tout du long, donc j'avais soumis pas mal de rapports de bogues et de correctifs. Par exemple, je me souviens qu'un jour à midi, Rasmus (le père de PHP) a dit sur IRC qu'il avait trouvé un bug, et j'ai fourni un correctif environ cinq minutes plus tard.

Après avoir progressivement fait connaissance avec certaines personnes et gagné la confiance de tout le monde, j'ai soumis une candidature. J'ai ensuite obtenu un accès commit au code cœur de PHP, participé au développement direct de PHP et à la correction de bogues, et suis devenu membre de l'équipe de développement.

Quant au fait d'être un membre principal, cela s'est accumulé lentement ; c'était en fait un processus de confiance mutuelle. Si votre travail est reconnu par les autres, ils respecteront vos opinions. Je suis progressivement devenu familier avec Dmitry Stogov, j'ai obtenu l'accès commit à la partie centrale de Zend, j'ai soumis de nombreuses corrections de bugs du cœur et de nouvelles fonctionnalités, puis je suis devenu consultant externe chez Zend, devenant progressivement développeur principal.

Cela ressemble un peu à une montée en niveau en combattant des monstres, non ?

Question : Quelle a été l'occasion qui vous a conduit à développer Yaf ? Comment Baidu soutenait-il le développement de Yaf à l'époque ?

Avant Yaf, il y avait toujours eu un débat classique sur l'utilisation ou non de frameworks : « L'utilisation d'un framework réduit les performances, tandis que le fait de ne pas utiliser de framework réduit l'efficacité de développement. »

À cette époque, il y avait de nombreux frameworks au sein de Baidu, notamment des frameworks open source comme Yii et ZF, ainsi que certains écrits par des équipes individuelles. Un problème était que les bibliothèques de classes et une partie de l'infrastructure de support ne pouvaient pas interopérer.

Une autre raison était qu'après que de nombreux auteurs de frameworks eurent publié leurs frameworks, ils ont constaté que différentes personnes apportaient diverses modifications au framework, si bien qu'avec le temps, une fois un framework publié, il se transformait en de nombreuses variantes, rendant impossibles les mises à niveau unifiées ultérieures.

J'ai donc décidé d'implémenter un framework sous forme d'extension PHP pour résoudre ces problèmes. Bien sûr, avant d'écrire l'extension, je n'étais pas vraiment confiant et je ne savais pas quel gain de performances une extension pouvait apporter. Heureusement, le résultat final a été très bon.

Question : Pourquoi avez-vous choisi d'écrire Yaf en C ?

PHP est écrit en C, donc ses extensions sont également écrites en C. J'ai donc choisi C pour écrire Yaf.

Question : Pourquoi avez-vous quitté Baidu pour venir chez Sina Weibo ?

Il y avait en fait de nombreuses raisons. Par exemple, chez Baidu, j'avais atteint le niveau T7, et j'étais moins impliqué dans les aspects commerciaux. J'avais l'impression de ne pas avoir tant de choses à faire, et il semblait que je perdais quelque peu mon temps.

De plus, à l'époque j'étais dans le département de recherche commerciale de Baidu et je ne travaillais pas directement avec des systèmes à fort trafic, donc j'espérais aussi trouver une plateforme plus grande pour continuer à me former. Weibo se trouvait être exactement une telle plateforme.

Après mon arrivée chez Weibo, j'ai effectivement rencontré de nombreux défis que je n'avais jamais affrontés auparavant, et j'ai aussi senti que mes connaissances disposaient d'une plus grande scène pour être appliquées.

Question : De quel travail précis êtes-vous responsable actuellement chez Sina Weibo ?

Je suis actuellement au département Technologie de Weibo, à la tête d'une équipe de services de base. Notre travail principal est également mené par étapes. Pendant les deux premières années, le travail principal était l'optimisation des performances de la pile LAMP de Weibo, incluant divers frameworks de base, le développement d'outils, l'optimisation de l'environnement et la formulation de standards.

Au cours des deux dernières années, l'architecture LAMP de Weibo est devenue plus stable, et les performances globales ont été multipliées par plusieurs. Nous avons également notre propre solution globale LAMP haute performance. Ainsi, le travail d'optimisation LAMP a quelque peu diminué. Maintenant, notre énergie principale est concentrée sur la recherche et le développement d'infrastructures, telles que la couche middleware de cache, les services de transcodage, les plateformes de communication, etc.

Question : PHP 7 (PHPNG) a-t-il pris en compte, comme retours importants, les besoins et points de douleur de Sina Weibo dans l'utilisation de PHP ?

Bien sûr, oui. Depuis que j'ai rejoint l'équipe de développement, j'ai eu des débats similaires avec de nombreux autres membres : je pense que la performance est très importante, tandis que certains pensent que les nouvelles fonctionnalités sont très importantes. Donc, quand une nouvelle fonctionnalité affecte la performance, nous avons des disputes.

Je suis très obsessionnel en matière d'améliorations de performance. C'est aussi pourquoi j'ai ensuite davantage coopéré avec Dmitry Stogov, parce qu'il se soucie lui aussi particulièrement de la performance.

La principale raison pour laquelle je me soucie de la performance est que j’apprécie très concrètement la valeur que chaque amélioration de performance de 1% peut apporter à une plateforme comme Weibo, la plus grande plateforme LNMP de Chine. Bien que la performance globale de Weibo se soit considérablement améliorée par rapport à il y a deux ans, je réalise que sans affecter l’efficacité de développement, les améliorations supplémentaires ne peuvent dépendre que d’améliorations de performance du langage et de l’environnement. Cette partie est aussi une exigence de Weibo envers PHP.

Comparé à PHP 5.6, PHP 7 offre plus de 100% d’amélioration réelle de performance (QPS) sur WordPress. Je crois que l’année prochaine, après la sortie de PHP 7, toutes les activités de la plateforme LAMP globale de Weibo pourront également atteindre une amélioration de performance de 100%.

Question : Quel a été le processus de votre participation au développement de PHP 7 (PHPNG) ? Comment avez-vous coopéré avec les autres membres de l’équipe de développement ?

PHPNG était un projet secret à l’époque. Les participants initiaux n’étaient que Dmitry et moi. Je me souviens que c’était au début du printemps cette année. À cette époque, le projet JIT sur lequel nous travaillions, basé sur PHP 5, a été mis en suspens parce que les résultats n’étaient pas satisfaisants, et tout le monde était assez abattu.

Dmitry a dit qu’il avait une idée : reconcevoir ZVAL et compresser sa taille pour réduire l’utilisation de la mémoire. Ensuite, nous en avons discuté tous les deux. Parce qu’en fait, nous avons toutes sortes d’idées chaque jour, à l’époque nous avons simplement pensé : « Hmm, cette idée pourrait fonctionner. » Mais nous n’étions pas très confiants.

L’idée principale à l’époque était de créer rapidement un prototype exécutable pour tester l’effet. Durant ce processus, nous discutions principalement d’idées, puis chacun implémentait ses propres parties, et ensuite nous les fusionnions.

Le principal outil de collaboration était encore Skype. Cependant, comme il est à Saint-Pétersbourg et qu’il y a un décalage horaire avec nous, nous communiquions aussi par e-mail et nous passions le code en revue via GitHub.

Plus tard, lorsque le projet avait presque atteint sa conclusion, nous avons constaté : « Hé, cette idée est bonne, ça marche. » Ensuite, nous l'avons rendue publique. Après cela, c'est devenu le modèle de collaboration normal : si vous avez une idée, soumettez une RFC, soumettez un patch, votez, tout le monde examine, puis on fusionne.

Question : Quelles fonctionnalités ont été ajoutées ou supprimées dans PHP 7 jusqu'à présent ? Avant la sortie, comment les performances seront-elles encore améliorées ?

Il y en a beaucoup. Outre la branche PHPNG qui apporte principalement des améliorations de performance, nous avons aussi la prise en charge de l'AST (arbre syntaxique abstrait), la syntaxe uniforme des variables, la prise en charge des chaînes de longueur 64 bits, un peu de nouveau sucre syntaxique, et plus récemment Native TLS, entre autres.

PHP 7 sera officiellement publié en octobre 2015. Avant cela, nous avons encore quelques idées à essayer, par exemple, utiliser zend_array pour remplacer directement Hashtable ; par exemple, réduire les défauts de iTLB en spécifiant le re-sectionnement et l'ordonnancement des fonctions ; par exemple, introduire certaines techniques d'optimisation du JIT (inférence de type) dans PHP, combinées à certains gestionnaires d'opcodes spécifiques au type pour accélérer les choses ; et par exemple, améliorer encore la localité du code et des données afin de réduire les défauts de cache, etc.

Bien sûr, nous avons aussi un projet JIT mené en parallèle. C'est juste que je m'inquiète de savoir si ce projet pourra être prêt au moment de la sortie de PHP 7.

Question : La nouvelle version de PHP va-t-elle sauter PHP 6 et passer directement à PHP 7 ? Pourquoi ?

La principale raison est que PHP a déjà eu une version de développement appelée PHP 6, mais cette version a ensuite échoué et n'a jamais été publiée. Cette nouvelle version devrait donc être PHP 7.

Q : Quelle est la relation entre Hack, le langage publié par Facebook, et PHP ? Le but de Hack est-il de remplacer PHP ? Quels sont les avantages respectifs de ces deux langages l'un par rapport à l'autre ?

Il n'y a pas vraiment de relation ; Hack n'est pas PHP. Quant à remplacer PHP, je pense qu'ils (Facebook) pourraient avoir cette idée, mais cela dépend de si la communauté l'accepte ou non.

Je ne connais pas particulièrement Hack, il m'est donc difficile de me prononcer précisément.

Q : Certaines personnes pensent que, parce que PHP est facile à apprendre et a une faible barrière à l'entrée, il a attiré des personnes qui n'étaient pas vraiment faites pour la programmation. Que pensez-vous de ce point de vue ?

Je ne peux vraiment pas être d'accord avec ce point de vue. Lorsque j'ai obtenu mon diplôme de premier cycle, j'ai aussi essayé de trouver des emplois de développement, j'ai passé des entretiens dans plusieurs entreprises et j'ai été refusé par toutes. Peut-être qu'aux yeux des personnes qui m'ont interrogé à l'époque, j'étais quelqu'un qui n'était pas fait pour la programmation.

Mais parce que PHP a une faible barrière à l'entrée, il permet aux gens de voir rapidement les résultats de leur « programmation », ce qui crée une incitation par retour positif pour les débutants et rend les personnes intéressées encore plus intéressées. Et plus il y a de personnes qui programment, plus la probabilité qu'il y ait des experts et des personnes qui contribuent à l'avancement de la technologie dans son ensemble est grande.

De plus, les langages de programmation à l'avenir évolueront certainement vers une plus grande facilité d'utilisation, abaissant encore la barrière à la programmation. Peut-être qu'un jour tout le monde pourra programmer, qui sait !

Q : À quoi devrait ressembler la structure de connaissances d'un ingénieur PHP qualifié ?

Je me souviens d'un vieux dicton : « Les ingénieurs PHP sont des touche-à-tout. » En fait, ce dicton ne s'applique pas seulement aux ingénieurs PHP ; il devrait s'appliquer à tous les ingénieurs.

La structure de connaissances doit être très large. Le développement web implique pas mal de domaines techniques. Outre HTML, CSS, JS et SQL, vous devez aussi connaître certaines méthodes courantes pour configurer, maintenir et dépanner Nginx, Linux et MySQL. Vous devriez en savoir un peu sur tout cela.

Q : En dehors des compétences techniques, sur quoi d'autre vous concentrez-vous lors des entretiens ?

J'accorde une attention particulière à la clarté de la réflexion, de la communication et de la manière de parler. Essentiellement, si nous devons travailler ensemble à l'avenir, je veux savoir s'il y aura des obstacles, et si le potentiel de croissance est important.

Q: Chen Bole, l'ancien webmestre de phpe.net, vend désormais des chaussettes pour hommes. Quels sont vos projets pour l'avenir ? Serez-vous toujours codeur ?

En fait, je suis une personne très paresseuse. Je ne pense jamais trop à l'avance ; je vis au jour le jour. Donc je ne suis pas vraiment sûr non plus de l'avenir. Je sens simplement que pour l'instant j'aime toujours la programmation, et j'aime que mon travail profite à tout le monde et gagne les éloges de la communauté. Je trouve ça formidable, alors je vais continuer.

Source : http://www.ituring.com.cn/article/142454