No me voy a preocupar demasiado por el ‘súper programador’, ¿qué tal un buen programador? Tendrás que ser así primero.
Hay algo que llamo la prueba App-titude. Si puede hacer que una aplicación funcione y disfrutarla, es posible que tenga lo necesario para ser un programador. Pero lograr que una aplicación funcione no es suficiente para ser un gran programador o producir un gran código.
Recientemente me he encontrado con una aplicación de Android que estoy cambiando. Me hizo darme cuenta de que el autor pasó la al menos parte de la prueba de App-titude; consiguió que la aplicación funcionara. El programador puede ser un programador típico, incluso puede ser decente, pero no fue un programador profesional. Las ideas se extendieron por todo el código. No fue escrito para que alguien lo entienda, ¡pero funcionó!
- ¿Las personas con un título en Informática saben cómo inyectar SQL?
- ¿Qué te hizo elegir la informática?
- ¿Qué habilidades se requieren para unirse a Google?
- ¿Qué debo elegir: matemáticas e informática en IIT Khragpur, un CSE en DTU o nuevos IIT?
- En un sentido general / amplio, ¿los graduados en ciencias de la computación se desempeñan mejor en puestos técnicos específicos en comparación con los graduados del campo de entrenamiento de código?
Tomemos un poco más la prueba App-titude. ¿Puedes responder la mayoría de estas preguntas con un “sí”?
¿Te gusta resolver problemas? ¿Eres bueno resolviendo problemas? ¿Puedes pensar claramente sobre causa y efecto? ¿Tiene la capacidad de agrupar ideas relacionadas y separar ideas no relacionadas?
Se necesitan muchas habilidades, aunque creo que hay tres áreas de habilidades críticas:
Diferenciar el código bueno contra el mal
Debe poder identificar el código bueno y el código malo. No me refiero a la definición habitual de código incorrecto como se expresa en esta función ruby
def bad_code? código
volver no code.written_by_me
fin
def good_code? código
código de retorno escrito_por_me
fin
Debes entender los olores de código. No así: “Este código apesta”. Debe compartir un vocabulario común para expresar los problemas en el código y el diseño. En el libro de Refactorización de Martin Fowler, define una serie de olores de código. Me parece que si puede nombrar un problema, tiene la oportunidad de comunicarlo a otros y resolverlo.
Imagine mejores soluciones
Tenga en cuenta que code.written_by_me == true
no es el criterio. Para visualizar mejores soluciones, debe conocer los principios de diseño, la estructura del código y los patrones de diseño. Necesita saber cómo hacer código con alta cohesión y bajo acoplamiento. ¿Alta cohesión? ¿Acoplamiento bajo? ¡Todos saben eso! No, ellos no. La aplicación que mencioné anteriormente tenía detalles repartidos por la aplicación. El principio de diseño más ignorado o desconocido es el más simple. Se llama Principio de responsabilidad única (parte de los principios SÓLIDOS de Bob Martin). En esencia, el principio fomenta tener funciones, clases y módulos que incorporen una sola responsabilidad. Otros principios dan orientación sobre el acoplamiento, haciendo módulos sustituibles.
Mejor disfruta aprendiendo sobre diseño. Hay mucho que aprender aquí. Hasta ahora creo que lleva toda una vida. No puedes dejar de aprender.
Mantenga el código funcionando
La última de mis tres habilidades críticas es una familia de habilidades con el objetivo de mantener el código funcionando todo el tiempo. Aquí algunas de las habilidades relacionadas: automatización de pruebas, desarrollo basado en pruebas, refactorización y establecimiento de causa y efecto.
Para mantener el código funcionando, necesitará muchas pruebas automatizadas. Tendrá que programar con GUT (Good Unit Tests, gracias Kevlin Henney). La mejor manera que conozco de programación con GUT es TDD. También necesita saber qué es una buena prueba de unidad. Hay mucho que aprender y dominar aquí. Pero no te preocupes, si te gusta resolver problemas, será divertido.
También va a ser decente en la depuración, aunque ser bueno para encontrar y corregir errores no es excelencia técnica. Es parte de la prueba App-titude. Realmente quieres ser bueno para prevenir defectos. TDD y GUT son esenciales.
Cuando realiza mejoras estructurales, desea ser bueno para hacer pequeños cambios y asegurarse de que nada se rompa. Tener GUT y conocimiento de la refactorización paso a paso es posible cambiar su diseño y no romper nada.
No recuerdo haber sido enseñado, hace tantos años, sobre el establecimiento de causa y efecto en la programación. He llegado a confiar en esto como una práctica y habilidad crítica. Fue TDD lo que me hizo consciente de esta práctica de programación fundamental.
Cuando encontré lugares en mi código donde no podía probar, como evolucionar mi sitio web de Rails, hacía los varios cambios que los documentos de Rails decían que necesitaba. Algo no funcionaría. La página se estrellaría. Aunque cavaría y haría cambios. La página sigue fallando. Entonces, finalmente, algún cambio hace que funcione. ¡La magia de todos esos pequeños cambios lo hizo! Más tarde descubriría otro error. Uno (generalmente más) de esos cambios tuvo un problema que finalmente aparece como defecto más tarde. Volvería a depurar. Con TDD rara vez depuro algo significativo. Así que estaba muy consciente de que estaba haciendo esto que trato de evitar.
Empecé a trabajar de manera muy diferente. Hago cambios uno a la vez. Reconozco cuando el mensaje de error cambia al mensaje de error esperado (o finalmente una ruta de trabajo a través del código). Si mi cambio no resultó en el error esperado, retrocedería el cambio e intentaría nuevamente, avanzando lentamente, un comportamiento a la vez. Este enfoque aparentemente lento mantuvo el código funcionando. Mantener el código funcionando es mucho más fácil que arreglarlo después de romperlo.
Pensé que esta sería una respuesta más corta
Gracias por leer hasta el final de esto. Buena suerte en su viaje. Debería ser divertido.
Cualesquiera que sean las habilidades, para ser realmente bueno en algo que tiene que gustarle. Aquí hay una lista de los ingenieros que tomaron mi entrenamiento sobre programación. Puede comprobar que le gustan las cosas similares. Si no lo hace, encuentre algo que le guste hacer.