Je pense qu'il est important de rester critique par rapport aux langages que nous utilisons, mais dénigrer sans raison me semble une perte de temps complète. Je reviens ainsi sur l'article de sebsauvage sur PHP qui critique le langage en ces termes :
un langage assez amobifreux (de la contraction de "abominable" et "affreux")
Et de s'étonner ensuite du choix effectué par des projets comme Facebook, Wikipedia ou Wordpress d'utiliser ce langage, pourtant "abominable", "affreux" et "moche".
Je suis d'accord pour accepter le fait que PHP a une histoire plutôt anarchique, avec des incohérences et des comportements bizarres. Mais dire que c'est un langage "abominable", qui serait horrible en comparaison par exemple de Python, c'est un peu se tromper je pense.
De nos jours PHP, depuis au moins la version 5.2 et plus encore depuis la version 5.3, est un vrai langage moderne et agréable à utiliser au quotidien, il permet un peu tout ce dont on attendrait d'un vrai langage objet, et souvent de manière simple et efficace, avec toujours l'avantage de pouvoir déployer de manière très simple un peu partout et surtout de bénéficier d'une excellente documentation (et notamment les commentaires associés qui sont souvent très utiles).
Après, je me demande si la critique est réellement fondée. Autant j'apprécie beaucoup sebsauvage, que je lis depuis des années, et autant j'apprécie ses idées, autant son code PHP me semble dater d'un autre âge : souvent procédural, rarement objet, mélangeant allègrement définition de fonctions et code fonctionnel, etc.
Par exemple le code de Shaarli commence par la configuration du logiciel :
$GLOBALS['config']['DATADIR'] = 'data'; // Data subdirectory
Suivi de :
ini_set('max_input_time','60'); // High execution time in case of problematic imports/exports.
et autres gestion des directives INI, puis des define, puis un appel à des fonctions, puis des inclusions, suivi d'envoi de headers HTTP (alors qu'on n'a même pas encore défini à ce stade dans quel contexte nous sommes), puis des define, du code, des require, et enfin des définitions de fonctions, puis des define et des définitions de directives INI, encore des définitions de fonctions, suivies d'includes, de code procédural, puis ensuite de classes, etc etc. Je vous laisse regarder le code de Shaarli si ça vous intéresse.
Rien que dans tout ça on peut voir que le code est anarchique, pas structuré, bref impossible à maintenir à long terme car impossible de savoir où se trouve telle ou telle partie. Le problème n'est pas qu'au niveau de l'organisation du code, mais dans tout le reste aussi, par exemple parfois les erreurs sont gérées avec des exceptions, parfois avec des die().
Le code en lui-même est parfois alambiqué, par exemple :
$last=strtolower($val[strlen($val)-1]);
Il faut relire deux fois la ligne pour comprendre ce que ce code est censé faire, alors qu'il aurait été plus simple de faire :
$last = strtolower(substr($val, -1));
Évidemment on est très loin de la lisibilité du Javascript (un autre langage "horrible" mais pourtant tellement génial) :
var last = val.toLowerCase().substr(-1);
Mais c'est dû à la syntaxe de PHP surtout.
On peut également noter que le code semble avoir été réalisé en PHP4, et n'utilise aucun avantage d'un PHP moderne, par exemple :
function linkdate2timestamp($linkdate)
{
$Y=$M=$D=$h=$m=$s=0;
$r = sscanf($linkdate,'%4d%2d%2d_%2d%2d%2d',$Y,$M,$D,$h,$m,$s);
return mktime($h,$m,$s,$M,$D,$Y);
}
<snip ... />
return date('r',linkdate2timestamp($linkdate));
Pourrait très bien gagner en clarté et en efficacité comme cela :
$date = DateTime::createFromFormat('Ymd_His', $link_date);
return $date->format(DATE_RFC822);
Je ne vais pas procéder comme cela pour tout le code, mais il est assez simple de se rendre compte que PHP n'est pas si terrible que ça, si on a la rigueur de vouloir l'utiliser de manière correcte. Mais il semble que pour de nombreuses personnes PHP n'a pas évolué depuis PHP 3 ou PHP 4, alors que PHP 5 est disponible depuis 8 ans, et PHP 5.2 depuis 6 ans.
Au final, la question n'est pas vraiment celle du langage qui est plus une affaire de préférence personnelle mais, comme pointé dans l'article de Jeff Atwood cité par sebsauvage, de la compétence du développeur rapport au langage utilisé.
Critiquer pour critiquer n'apporte rien, si on utilise un langage le plus utile est de participer à son évolution, par les rapports de bugs, par les corrections de documentation, et les changements apportés au langage lui-même. Un excellent exemple est le travail de suivi et explication du développement de PHP sur le Mageekblog de Frédéric Hardy ou encore les billets du blog de Pascal Martin.