¿Cuáles son las peores cosas en las que los desarrolladores inexpertos se olvidan de pensar? [cerrado]

15

Como desarrollador joven, me sería útil obtener algunos consejos sobre cosas en las que pensar para desarrollar una aplicación de alta calidad. En mis cursos universitarios, la mayoría de los maestros enfatizaron la validación de entrada y algunos hablaron sobre preocupaciones de seguridad, pero nadie cubrió la importancia de ciertas otras cosas, como el registro, por ejemplo.

¿Cuáles son algunos errores que los desarrolladores inexpertos tienden a cometer que podrían generar frustración para los desarrolladores más experimentados?

Awmckinley
fuente
1
No llamaría exactamente a la seguridad algo para ir a una "lista de verificación": la seguridad debe considerarse en todos los niveles de un diseño, no agregarse como una ocurrencia tardía. Funciones de seguridad! = Funciones seguras!
Billy ONeal
Tal vez "lista de verificación" implica algo incorrecto. No estoy buscando una lista de cosas en las que pensar al final del desarrollo; Tengo curiosidad por saber qué cosas se deben considerar al desarrollar una aplicación. ¿Tiene alguna sugerencia sobre cómo podría volver a formular mi pregunta?
awmckinley
@awmckinley: Entonces su pregunta es "¿cómo desarrollo una aplicación?", pero esa pregunta es demasiado amplia para responder.
Billy ONeal
@Billy ONeal: Acabo de editar mi pregunta. ¿Tiene esto más sentido?
Awmckinley
1
Tiene más sentido, pero desafortunadamente todavía no está pidiendo mucho más que una larga lista de mejores prácticas. Las preguntas constructivas realmente deberían ser sobre problemas específicos , o al menos requieren que las respuestas sean más que comentarios obstinados de una línea.
Aaronaught

Respuestas:

12

Creo que lo principal que los nuevos desarrolladores olvidan es que en el mundo real a menudo trabajan como parte de un equipo. Esto se muestra como ...

  • Incorporando código que rompe la compilación
  • No reutilizar el código que ya está allí
  • Hacer las cosas a su manera y no de la misma manera que los demás, lo que hace que el mantenimiento sea costoso

Eso no quiere decir que su código no esté a la altura de forma aislada, pero ya no funcionan de forma aislada.

Garry
fuente
+1: fundamentalmente, estos son los problemas que enfrenta. El codificador junior puede ser pobre en la codificación, pero algunos experimentados también son pobres en la codificación. La principal distinción son elementos como estos.
gbjbaanb
8
  1. Pruebas
  2. Pruebas
  3. Más pruebas
  4. Fuente de control
  5. Impuestos apropiados para cualquier programa al que se dirija.

En Windows, estos impuestos son :

  • Manejo de entornos de DPI alto
  • Perfiles de usuarios itinerantes
  • Cambio rápido de usuario
  • Escritorio remoto (p. Ej., No desea utilizar el almacenamiento en búfer doble cuando RDP está en vigor
  • Jugar bien con la gestión de almacenamiento jerárquico
  • Monitores múltiples
  • Windows de 64 bits

En casi todas las plataformas, tendrás que lidiar con:

  • Unicode
  • Localización
  • Administración de poder
Billy ONeal
fuente
Lo siento Billy. Tal vez no estaba claro en la forma en que hice mi pregunta: no estoy buscando tanto las prácticas de desarrollo (como el control de fuente). Creo que eso se cubrió bastante bien en ¿Qué agregaría en esta Lista de verificación de proyectos de desarrollo de software? . Sin embargo, la sección de "impuestos" es definitivamente útil.
Awmckinley
3
@awmckinley: La razón por la que menciono el control de código fuente es que no podrá administrar las versiones de manera efectiva sin tener múltiples jefes de desarrollo, incluso si solo es un desarrollador en solitario. Debe pensar en la versión n + 1 incluso cuando esté trabajando en la versión n.
Billy ONeal
5

En mi experiencia, lo único que casi todos los desarrolladores inexpertos no tienen en cuenta es que (casi siempre) está trabajando en un entorno comercial. Tu código tiene que ser bueno, pero no perfecto. Lo más importante no es la perfección, es que tu código se envía.

Dicho de otra manera, entregar el código perfecto tres meses después de que su empresa se arruine no es bueno para nadie.

En mi opinión, esta es una de las formas más significativas en que el desarrollo en el mundo real difiere del desarrollo que se enseña en la universidad.

Simon Whitaker
fuente
3

Pregunta realmente amplia; contestar en detalle es ... múltiples libros.

Aquí hay una lista de verificación general de definición de sistemas para comenzar:

  • ¿Cuáles son los recursos críticos en el sistema y cómo podrían cambiar sus demandas?
  • ¿Cuáles son las capacidades de rendimiento del sistema y cómo podrían necesitar crecer?
  • ¿Qué áreas de requisitos podrían volverse innecesarias y removibles?
  • ¿Existe la posibilidad de tener diferentes versiones del sistema con diferentes capacidades?
  • ¿Cuáles son las implicaciones en la mano de obra y los recursos informáticos si se producen los cambios identificados?
  • ¿Qué impacto tendrá el nuevo sistema en los sistemas operativos existentes?
  • ¿Qué áreas de función tienen la mayor posibilidad de requerir cambios a la luz de la experiencia con el sistema?
  • ¿Quiénes son los futuros usuarios del sistema?
  • ¿Cuáles son los futuros mantenedores del sistema?
  • ¿Cuáles son las mejoras futuras que los futuros usuarios del sistema pueden identificar como posibles?
  • ¿Cómo encaja el sistema en los planes generales del usuario y cómo se espera que se desarrolle?
Steven A. Lowe
fuente
1

El desacoplamiento limpio del sistema en la máquina de desarrollo de uno y la máquina de destino, para que uno no termine con situaciones de "Bueno, funciona en mi máquina".

¿Y qué tan rápido puede reconstruir su máquina de desarrollo?

  • ¿Sabes qué paquetes necesitas?
  • ¿Tiene una solución de botón para reconstruir su base de datos?
  • ¿Tiene una solución de botón para probar la integridad del código fuente?
indi
fuente
1

Creo que probablemente sea diseño, es decir, el enfoque de pensar en lo que vas a hacer antes de hacerlo.

A demasiados codificadores inexpertos (recuerden cuando comenzaron) les gusta saltar y poner algo en marcha, luego agregue un poco más y anuncie un poco más y agregue un poco más. Este enfoque puede funcionar si ha planeado hacerlo de esa manera (después de todo, cada bit se puede probar a medida que avanza), pero la mayoría de los codificadores inexpertos solo se centran en la parte que están escribiendo ... por lo que todas las adiciones tienden a ser pirateadas en la parte superior. ¡Y todos hemos visto código que ha evolucionado así!

La organización es lo siguiente, a menudo están demasiado centrados en el código que han escrito para recordar cómo lo hicieron y lo que se requería. Entonces se olvidan de agrupar o documentar una dependencia que se requiere. También tienden a poner las cosas donde caen, tuve que criticar a un junior la semana pasada que revisó su código en el directorio raíz, incluidos 3 wsdls, 2 de los cuales eran el mismo archivo y un conjunto de archivos de terceros que cometió en un subdirectorio y el directorio raíz. El código no estaba formateado para ningún estándar que se pudiera imaginar, y había varias funciones que estaban presentes pero que nunca se llamaron.

Obviamente lo hizo funcionar, pero no estaba ordenado, y eso significaba que la instalación y el mantenimiento habrían sido problemáticos.

gbjbaanb
fuente
1

Creo que las mayores diferencias están en la técnica de codificación. Todos tienen un enfoque ligeramente diferente, pero los desarrolladores sin experiencia tienden a producir código que:

  • no maneja casos límite
  • es mucho más largo de lo necesario
  • tiene malas características de rendimiento en escenarios relevantes
  • tiene poca separación de preocupaciones
  • carece de técnicas de autoprotección como el uso de const, sellado, solo lectura, etc.
  • formas extrañas de devolver datos y colecciones de datos
    • esto demuestra más inexperiencia con una plataforma
Kevin Hsu
fuente
0

Debido a que preguntaste lo peor, entonces mi respuesta es la siguiente:

  1. Se me olvidó pensar en desinfectar la máquina de desarrollo de spywares, malwares y virus troyanos.
  2. Olvidé pensar en hacer una copia de seguridad regular guardada en almacenamientos seguros que se encuentran en diferentes ubicaciones geográficas.
xport
fuente
0

Mi mayor es recordar planificar la flexibilidad. En las clases, los requisitos casi siempre se establecen al principio y nunca cambian. En el software, a menudo sucede lo contrario: obtienes un conjunto vago de requisitos, y cambian a menudo (incluso a diario). Lo mejor que puede hacer para ayudar con esto es codificar de manera flexible: acoplamiento flexible, funciones pequeñas que se pueden usar de manera confiable en múltiples situaciones y evitar la codificación de las cosas lo más posible.

Con el tiempo, es probable que aprenda a) qué cosas tienen más probabilidades de cambiar y, por el contrario, qué probablemente no cambiará, yb) cómo anticipar las solicitudes de cambio y planificarlas.

Caleb Huitt - cjhuitt
fuente