En un nivel alto, ¿cuáles son los buenos hábitos de programación en los que debería trabajar para desarrollarme?

Algunos consejos en varios idiomas que daría:

Preste atención a los “tipos”, incluso en idiomas que no tienen ideas sólidas de tipos. Cuando escriba funciones, sea muy consciente de los tipos que devuelve. Una función que a veces devuelve una matriz, y otras veces un solo valor, y algunas veces un nil causará errores en el futuro.

Divida el cómo y el por qué del tanto como sea posible. Por ejemplo, si estuviera creando una página de administración de la organización, donde un usuario puede agregar / eliminar / cambiar permisos, habría un puñado de clases interactuando para hacer partes del trabajo.

# Coordina el trabajo para hacer un cambio.
# Esto puede ocultar el mecanismo del cambio, potencialmente dentro de más clases (o no, depende de la complejidad).
# (actualizar columna db,
# escribir una nueva fila en una tabla de permisos,
# actualizar un servicio de terceros).
# Yo escribiría esta clase como mayormente (enteramente si es posible)
# llama a otras funciones y clases, y lógica muy simple.
UserPermission.adjust_permission (adjusting_user, target_user,: admin)

# “Puedo hacer eso” es respondido por esto
# Debería ser utilizado por adjust_permissions, pero la lógica lo haría
# ser reutilizado en la interfaz de usuario para ofrecer el botón en primer lugar
UserPermissionPolicy.new (user) .adjust_permissions? (Adjusting_user, target_user,: admin)

# Tengo que hacerle saber al usuario que ha sido ajustado
# Oh, pero tal vez su jefe también?
# Envíe una notificación de websocket para informarles del cambio.
NotifyNewPermission.send (target_user,: admin)

Hay tantas ventajas para dividir las cosas de esta manera

  • terminas con un “idioma” de dominio para hablar cuando trabajas con tu aplicación. Este código de ejemplo en Ruby (y presumiblemente Rails) ahora me permite abrir una consola y forzar manualmente que ocurran ciertas cosas.
  • Podría proporcionar una política de CustomerSupport a estas clases que sea más permisiva (para que los administradores del sitio puedan ayudar a los usuarios).
  • Las pruebas pueden hacer uso de estas clases para configurar los datos.
  • El siguiente desarrollador puede responder más fácilmente a preguntas como: “¿Qué clase de control controla quién puede configurar a un usuario para que sea un: ¿administrador_grupo?”

Las herramientas son importantes, pero no el objetivo. Sé bueno en un editor, pero realmente no importa cuál. Aprende la línea de comandos bastante bien, pero no el nivel de gurú. Conozca las herramientas de prueba, alineación de código, control de fuente e implementación que usa lo suficientemente bien como para saber qué hacer en Google para cuando lo necesite.

El conocimiento ambiental de muchas cosas es útil. Tenga un conocimiento de 20 minutos en wikipedia de muchas herramientas, técnicas y proyectos. Por ejemplo, nunca he usado Hadoop en un proyecto real. Pero puedo decirles lo básico “por qué querría eso”. Lo mismo para estructuras de datos como CRDTs o Bloom Filters. Lo mismo para las compensaciones generales entre las bases de datos Columnar y Document. Realmente no conozco ninguno de estos en un nivel profundo, pero sé lo suficiente como para conectar mis problemas concretos con estos apéndices de conocimiento para profundizar más cuando surja.

Eso fue todo un ramillete, espero que ayude.

Hay algunas sugerencias que se aplican a cualquier idioma:

¡DOCUMENTO!

No vas a recordar lo que hace esa extraña línea de código dentro de un mes, y mucho menos un año. Asegúrese de poner algo en los comentarios junto a él explicando lo que hace. Si trabaja en un proyecto o biblioteca importante, asegúrese de mantener actualizado el sitio web de documentación. Puede significar la diferencia entre los días o más desperdiciados y el progreso.

Centrarse en la reutilización

Cuando vaya a escribir su código, piense continuamente en cómo se puede mejorar esto o si el código es necesario. ¿Este problema que necesito resolver se solucionará mejor agregando algunas líneas a una función existente o creando una completamente nueva? Trate de planificar funciones para que tengan un propósito general en lugar de aquellas que solo hacen una cosa estrecha.

Limitar la interacción

Como una forma de hacer que su código sea más fácil de mantener, debe limitar la interacción entre sus clases, aparte de las que son estrictamente necesarias. No debería preguntarse qué función que dibuja tal y tal tiene un error. Solo debería haber uno.

Si aún no lo has hecho, usa SVN

Usar bitbucket o alguna otra forma de mantener un registro de su código es esencial. Le salvará de la agonía de sobrescribir accidentalmente su nuevo código o de volver a introducir un error antiguo. También le permite trabajar en la introducción de una nueva función al tiempo que conserva el código que funciona de manera confiable. Siempre, siempre, usa SVN.

Apéndice

Si tiene algún interés en aprender más acerca de la programación, visite Holberton School. Le darán instrucciones sobre las mejores prácticas y le brindarán una educación en varios idiomas adecuados para aplicaciones de escritorio, desarrollo web y más. Tampoco harás ejercicios simples de aprendizaje de libros: te asignan proyectos complejos y te dan las herramientas para completarlos.

Vea mi respuesta a una pregunta similar:

La respuesta de Tony Flury a ¿Qué conjuntos de habilidades tienen realmente buenos desarrolladores de Python?

Ninguna de mis respuestas es relevante para Python, se aplican en todos los ámbitos.