¿Cuáles son los mayores desafíos para los desarrolladores principiantes?

La lógica es la causa principal de fallas en principiantes. Estoy hablando de declaraciones como if (a y no (b o (c y no d))). Los principiantes intentan darles sentido con inglés conversacional y sentido común, que falla rápidamente a medida que el número de variables aumenta por encima de tres. O tal vez tomaron un curso de filosofía que abarcaba diagramas y silogismos de Venn, que tampoco los equipaba para manejar más de tres variables. Por lo tanto, intentan ocultar la complejidad desembolsándola en la estructura del programa, utilizando ifs anidados o moviendo la mitad de la condición a una función o método. Luego, al ver el código en lo profundo de la estructura, no pueden ver qué condiciones tenían que ser ciertas para llegar allí.

En la escuela primaria, luchaste con problemas de palabras en los que John tenía el doble de manzanas que Sue y una menos que Mary. Tuviste problemas para resolverlos porque no tenías una metodología formal. Luego aprendiste álgebra, una herramienta para manejar problemas de cualquier tamaño. La complejidad ya no era un obstáculo.

La lógica es la base de la programación, pero los programadores principiantes son como los niños de primaria cuando se trata de lógica compleja. Son como ingenieros que nunca aprendieron álgebra de secundaria. Si quieres ser programador, debes saber álgebra booleana.

Las universidades no enseñan álgebra booleana en clases de programación. En cambio, hacen que los estudiantes memoricen tablas de verdad, dejándolos sin equipo para manejar condiciones complejas. Mi consejo es aprender álgebra booleana. Solo toma una hora. Después de que lo sepa, verá cuán lisiados están sus compañeros sin él.

En mi experiencia, el mayor desafío es la falta de motivación. Los desarrolladores que se involucran en esto como una carrera porque alguien dijo que pagó un buen dinero están realmente sorprendidos por los desafíos técnicos. Frecuentemente colapsan bajo la intimidación. Por otro lado, los desarrolladores que realmente están motivados y aman lo que hacen no tienen problemas.

Dominar la modularidad y la simplicidad. Un sistema no debería ser más complicado de lo que debe ser y un sistema debe ser razonablemente capaz de configurar y reconfigurar.

También identifica los puntos críticos en el sistema a probar. El uso de invariantes de bucle es una habilidad práctica para desarrollar.