Muchos de mis estudiantes de primer año ya conocen algo de php, algunos lo escuchan en la escuela, muchos son autodidactas. Hay muchas cosas que puedes aprender solo de Internet. Pero hay muchas trampas.
Aquí hay algunos ejemplos de código problemático que he visto de primera mano. Trataré de explicar cuál es el problema subyacente en todos los casos:
No queriendo entender el código
Muchas personas solo quieren aprender suficiente PHP para resolver un problema en particular
problema. Entonces, su primera entrada en la programación es copiar y pegar
método: encuentre un programa que se ajuste a sus necesidades, cópielo, haga un mínimo
cambios
Algunas personas se sienten atraídas por la programación por esto, quieren
entienden la lógica del código, quieren aprender a escribir mejor
código. Otras personas no lo hacen. Usan código que no (quieren) entender,
y terminar con Cargo Cult Programming
http://en.wikipedia.org/wiki/Car …
Eso no es algo que veo con los estudiantes de primer año de CS, es más típico
para principiantes diseñadores web.
Escribiendo C en PHP
Kartik Ayyar escribió mucho sobre cosas que los programadores de C saben. En mi opinión, la mayoría son cosas que los programadores de PHP no necesitan saber. El objetivo de utilizar un lenguaje de nivel superior es apegarse al nivel superior que es más expresivo [2] y, por lo tanto, ser más productivo que un programador en C. Vea el artículo seminal de John Ousterhouts “Scripting: programación de nivel superior para el siglo XXI” [1] y Lutz Pretchelds “Una comparación empírica de C, C ++, Java, Perl, Python, Rexx y Tcl para un programa de búsqueda / procesamiento de cadenas” [3]
- http://www.tcl.tk/doc/scripting… .
- http://en.wikipedia.org/wiki/Com …
- http://page.mi.fu-berlin.de/prec …
Si solo usa esas partes de PHP que son equivalentes a las construcciones en C, escribirá un código PHP incorrecto.
Un ejemplo simple sería el manejo de cadenas: en PHP hay una interpolación variable . No utilice la cadena de contacto si no tiene que:
echo " Número de teléfono para". $ n. "
";
echo "". $ no. "
";
Esto solo agrega ruido al código y lo hace menos legible. Utilice la interpolación variable cuando sea posible:
echo " Número de teléfono por $ n
";
echo " $ no
";
Otro problema es el uso adecuado de matrices asociativas . Las matrices asociativas son uno de los tipos de datos integrados de un lenguaje de script, tiene sentido usarlos. Así que no use dos matrices para la búsqueda:
función de búsqueda ($ consulta) {
$ nombre [0] = "kili"; $ phone [0] = "+99 2398 983298";
$ nombre [1] = "fili"; $ phone [1] = "+99 9983 983298";
$ nombre [2] = "bifur"; $ phone [2] = "+99 298 398 3298";
$ nombre [3] = "bofur"; $ phone [3] = "+99 2 398 9 83298";
$ nombre [4] = "bombur"; $ phone [4] = "+99 2398 983298";
$ resultado = falso;
for ($ i = 0; $ i
Use una matriz asociativa
función de búsqueda ($ consulta) {
$ nombre ["kili"] = "+99 2398 983298";
$ nombre ["fili"] = "+99 9983 983298";
$ nombre ["bifur"] = "+99 298 398 3298";
$ nombre ["bofur"] = "+99 2 398 9 83298";
$ nombre ["bombur"] = "+99 2398 983298";
return $ name [strtolower ($ consulta)];
}
Tutoriales / documentación obsoletos
PHP ha existido por más de 15 años. el lenguaje ha evolucionado, se resolvieron problemas, se hicieron mejoras. pero los tutoriales y el código de ejemplo en Internet no muestran signos de envejecimiento. Como principiante, no se puede distinguir el estado actual de la tecnología de muy desactualizado.
Por ejemplo: inyección SQL . El problema es tan antiguo como PHP, las soluciones ofrecidas por PHP han cambiado y mejorado con los años.
En tutoriales, libros y cursos muy obsoletos, el problema simplemente se ignora:
$ id = $ _GET ['id'];
mysql_query ("BORRAR DEL artículo DONDE id = '$ id'"); // no lo hagas !!!! usa este código
Básicamente, PHP ofrece dos formas de tratar con la inyección SQL: analizar + escapar de la entrada o consultas parametrizadas. Los expertos en Stackoverflow están de acuerdo en que las consultas parametrizadas son la solución preferida http://stackoverflow.com/questio ...
¡Pero la documentación oficial de PHP ni siquiera los menciona!
http://at2.php.net/manual/en/fun ...
http://php.net/manual/en/securit ...
Fracaso en comprender conceptos avanzados
Es trivial buscar comandos individuales en la documentación, es más difícil encontrar buenos tutoriales que enseñen habilidades básicas de programación. Es realmente difícil aprender conceptos más avanzados en línea: estas cosas están ocultas en los libros (ya sabes, las grandes cosas de papel).
Un resultado de solo aprender la sintaxis y no la forma de usar un concepto sería el uso gratuito de las clases :
por ejemplo, a menudo veo código en el que las personas envuelven PDO (una interfaz de base de datos orientada a objetos en PHP) en su propia clase sin agregar ninguna funcionalidad, a menudo eliminando parte de la funcionalidad. Su comprensión de la programación orientada a objetos parece ser: agregar una clase hace que todo sea mejor.
Otro ejemplo sería crear una clase para cada página web que desee servir.
Defectuoso entendimiento de la optimización
Los programadores autodidactas a menudo caerán en la trampa
de "optimizar" partes de su programa que no necesitan optimización - un desperdicio
de su tiempo y a menudo en detrimento de la legibilidad.
ejemplos:
usando la concatenación de cadenas en lugar de la interpolación variable "porque es más rápido", una práctica que hace que el código sea menos legible y le dará microsegundos de tiempo de ejecución del programa.
construyendo un sitio web de 5 páginas cargando el contenido con ajax en index.php, dejando la URL de todas las páginas igual, manteniendo los motores de búsqueda leyendo su página, haciendo imposible que otros sitios se vinculen a las páginas individuales de su sitio.
Las personas no parecen entender que las herramientas que tienen (PHP, MySQL, Apache) son perfectamente adecuadas para servir páginas web a cientos de personas; no es necesario optimizar nada.
La cita de Donald Knuth es muy aplicable al desarrollo web del lado del servidor:
"Deberíamos olvidarnos de las pequeñas eficiencias, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal"
Knuth, Donald. Programación estructurada con ir a declaraciones , ACM Journal Computing Surveys , Vol. 6, Núm. 4, diciembre de 1974. p.268.
Si hay un lugar para la optimización en el desarrollo web, probablemente esté del lado del cliente, no del lado del servidor. Vea el trabajo de Steve Sounders y sus equipos, incluidas las herramientas yslow y los libros Sitios web de alto rendimiento e incluso sitios web más rápidos.
Las buenas noticias
Muchos programadores autodidactas logran evitar estos problemas, encontrar los libros, tutoriales, páginas web y blogs adecuados para aprender y convertirse en grandes programadores.
Muchos más ingresan a la universidad, donde encuentran una comunidad de expertos y compañeros para aprender.