OT: php te daña la cabeza

Alvaro Herrera alvherre en alvh.no-ip.org
Mar Jul 25 15:59:17 CLT 2006


Juan Martínez escribió:

> Cada herramienta para lo que sirve y punto.

O sea PHP para el tacho de la basura y punto.

> Nadie critica a un carpintero por que solo martilla y atornilla, ni a un 
> electrico por que solo pela cables... :-) Pero ambos se necesitan para 
> edificar casas o hasta edificios de ultima generacion.

Si un carpintero solo martillea y atornilla, yo diria que es un muy mal
carpintero.  Si un electrico solo pela cables, es muy mal electrico.
Ambos *deben*, para hacer bien su trabajo, ser capaces de llevar a cabo
labores mucho mas complicadas.  Las herramientas que ambos usan van
mucho mas alla que las que has puesto de ejemplos, y el que uno solo
conozca esas es un buen indicador de que no tiene idea de esos oficios.


> PHP es bueno para la web, y al que le interesa solo hacer web-devel bien 
> por el.

PHP no es bueno para la web.  Para lo unico que es bueno PHP es para que
gente que no tiene idea de programar se ponga a hacer tonteritas que
funcionan en la web.

PHP es un lenguaje tremendamente inconsistente.  Para observar eso, nada
mas fijate que los argumentos de algunas funciones no tienen un orden
logico; incluso funciones dentro de las mismas familias tienen cierto
tipo de argumentos primero, otros despues.  Para poder hacer cualquier
cosa es necesario tener el manual abierto: "como era para las
sustituciones con expresiones regulares?" "como era el orden de
substr()"?  etc.

Por otro lado, mira el exito que tuvo Perl en su tiempo como procesador
de strings -- cual era su ventaja principal?  Debe ser obvio de
inmediato que el hecho de tener expresiones regulares como constructo de
primerisimo nivel es tremendamente importante.  Como se las arregla
PHP?  De la peor manera posible, es decir igual que C: usando funciones
para hacer cada operacion.  De esta manera es igual de verboso que C,
igual de incomodo.  Cual es la ventaja que tiene sobre C entonces?

Luego puedes observar las distinciones entre los distintos tipos de
asignacion en PHP.  Que es =, que es =&?  En que casos debes usar cada
uno?  Como se comportan?  Yo tuve que modificar un sistema usando eso;
quise hacerlo usando OOP porque el problema se adaptaba naturalmente a
eso.  Pero!  El gran problema era saber cuando usar = y cuando usar =&,
y realmente el soporte que el lenguaje le da a esos constructos es tan
incomodo que la unica manera de saber si realmente lo estabas haciendo
bien era probar con uno y luego probar con otro y ver que partes del
programa funcionaban y cuales no.

Mira Ruby.  Cual es la _gran_ ventaja de Ruby?  Te lo puedo decir sin
ser un programador Ruby: la enorme potencia que tiene al poder construir
sentencias potentes pero simples.  Con PHP no puedes hacer nada de eso,
porque el parser de PHP es tremendamente tonto.  Un ejemplo trivial:
(http://www.loudthinking.com/arc/000205.html)

doc = REXML::Document.new(File.new("articles.xml"))
 
doc.elements.each('articles/item/title') { |title| 
  puts title.text
}


El manejo de OOP en PHP es espantoso.  Un metodo que retorna un objeto,
en cualquier otro lenguaje lo puedes usar como objeto e invocar un
metodo sobre el.  En PHP esto no es posible, nuevamente porque el parser
es demasiado tonto.


Por otro lado, cuando fue la ultima vez que simplemente por instalar una
nueva version menor del paquete del lenguaje, la mitad de los scripts de
tu sistema dejo de funcionar?  O porque cambiaste una configuracion?
Con PHP esto es normal.  Y los desarrolladores dicen "ah, bueno, es que
no lo estabas usando como estaba documentado asi que lo unico que tienes
que hacer es rehacer tus programas enteros de nuevo".  Con eso lo unico
que reafirman es que hace algunos años cuando hicieron el lenguaje no
tenian realmente idea de lo que estaban haciendo.


> Preferible PHP antes de Perl...para la web, o no?

No!  Prefiero Perl a PHP.  Otros prefieren Python a Perl.  Otros, Ruby.
Los que prefieren PHP es simplemente porque no conocen ninguna otra
cosa (o porque no tienen alternativa, como sucede cuando recibes un
sistema que ya estaba hecho).


Si alguien quiere defender a PHP me gustaria oir sus *argumentos*.
Ojala sea mas que solo llanterio eso si.

-- 
Alvaro Herrera       Valdivia, Chile   ICBM: S 39º 49' 18.1", W 73º 13' 56.4"
The easiest way to resolve [trivial code guidelines disputes] is to fire
one or both of the people involved.                      (Damian Conway)


Más información sobre la lista de distribución Linux