¿Qué sucede si no tengo buenas ideas para implementar una función? [cerrado]

32

Estoy trabajando en mi propia aplicación y estoy atascado. Tengo que implementar una función, pero no puedo encontrar un buen enfoque para implementarla. Estuve pensando en eso por un par de días, y no surgieron buenos pensamientos. Buscar en Internet no me dio ninguna inspiración.

Necesito seguir adelante, pero quiero saber qué es lo mejor:

  • Piensa más, espera más y sigue buscando el mejor enfoque
  • Deje de perder el tiempo y comience con un diseño deficiente, cubriendo todo con pruebas

¿Qué piensas? Como dije antes, estoy trabajando en mi propia aplicación. No tengo plazos, pero también quiero terminar de codificar la aplicación lo antes posible.

usuario21974
fuente
12
@gnat: Estas otras preguntas tratan situaciones en las que los usuarios ya saben cómo implementar algunas funciones de manera limpia, pero pueden querer sacrificar un buen diseño para ser "rápidos y sucios". Esta pregunta, sin embargo, describe una situación diferente, se trata de la resolución de problemas en general cuando no encuentra un buen punto para comenzar, por lo que en mi humilde opinión no hay duplicado.
Doc Brown
nota: si la aplicación es un éxito, nunca "terminarás de codificarla" y las características se rediseñarán de todos modos. Así que iría con implementarlo de la mejor manera que pueda ahora.
Ren

Respuestas:

41

Además de hablar con la gente al respecto (la pregunta sugiere que no tienes colegas en el proyecto), a menudo me parece un buen enfoque enfocarme en las cosas que puedo hacer.

Por lo general, hay alguna parte del código que sé que debo escribir de todos modos. Las cosas que aún no sé cómo escribir, luego se reemplazan por apéndices que devuelven resultados ficticios o usan una aproximación que es lo suficientemente buena como para probar el resto.

Esto te mantiene productivo. Y para cuando necesite implementar la pieza que falta, ya tiene la interfaz. Y ha escrito una gran cantidad de código que rodea el problema, en el mismo dominio del problema, lo que generalmente me ayuda a generar ideas: usted sabe más exactamente qué se requiere para generar y qué otras entradas están disponibles si ayuda a resolver el problema . Además, a menudo la conclusión es que la pieza que falta no necesita ser tan completa como se pensaba inicialmente.

jdv-Jan de Vaan
fuente
66
La desventaja de escribir el código más arriesgado y menos comprendido al final es que puede descubrir que no es posible resolver el problema, o solo es posible resolverlo con cambios sustanciales en la arquitectura del programa, lo que lleva a un gran esfuerzo inútil.
Rich Smith
1
La otra desventaja de este enfoque es que a veces te lleva a: "Puedo resolver el problema X. Todo lo que queda es hacer Y". cuando en realidad, Y no es factible y la solución real es Z.
Brian
@RichSmith, Brian: Sucede, aunque rara vez si me preguntas. Luego puede proporcionarle una mejor comprensión de por qué la parte que falta es tan difícil, lo que mejora sus estimaciones. Y no sugeriría dedicar semanas de trabajo basadas en una división de responsabilidades especulativa y arbitraria.
jdv-Jan de Vaan
Sin embargo, es discutible si esos son inconvenientes o no. ¿Habría pasado mejor su tiempo sin explorar el problema? o por ti sentado adivinando qué funcionaría? Creo que es una buena práctica escribir prototipos rápidos, probar cosas y fallar rápidamente. es la única forma de saber con certeza y ganar experiencia para futuras situaciones similares
sara
14

Si la búsqueda falla, siempre puede implementar utilizando la primera idea (no necesariamente la mejor) que obtuvo y luego refactorizarla más tarde cuando encuentre el enfoque correcto.

Este es el enfoque correcto, ya que incluso si encuentra algo que parece una buena idea, puede resultar malo más adelante. O puede ser bueno en ese momento, pero luego encuentras algo mucho mejor. Entonces aún tendrás que refactorizar.

Al hacer esto, asegúrese de diseñar e implementar de tal manera que sea fácil de refactorizar. Si lo hace correctamente, tendrá que cambiar solo la parte problemática y no comenzar desde el principio.

BЈовић
fuente
1
Parece suponerse en esta publicación, pero me gustaría agregar que es muy importante que escriba su código de una manera que sea fácil de re-factorizar.
c_maker
@c_maker Sí, por supuesto. De lo contrario, no tiene sentido reescribir todo más tarde desde cero. Lo agregaré a la respuesta. gracias
Bћовић
10

¿Qué hay de preguntarle a otra persona? Por ejemplo, podría describir su problema aquí o, si es más un problema de implementación, en stackoverflow.com y pedir ideas. A veces, ya te ayudará si comienzas a escribir el problema, incluso si no obtienes buenas respuestas.

Doc Brown
fuente
Si la interfaz de usuario es un problema, también hay ux.stackexchange.com
Rob Church
si pregunta en SO, entonces las respuestas estarán protegidas por derechos de autor bajo Creative Commons, y dependiendo del proyecto, ese código podría ser inutilizable.
smcg
2
¿El consejo puede tener derechos de autor? ¿Seguramente el autor lo usaría como tutorial, no como copiar / pegar?
grizwako
@smcg: el tema se discutió aquí: meta.stackexchange.com/questions/12527/… - Pero, sinceramente, si eso realmente se está convirtiendo en un problema, creo que se puede evitar esto por la forma en que GrizzLy sugirió.
Doc Brown
@DocBrown IANAL, así que no puedo decir con certeza si eso se mantendría, pero a veces es bueno equivocarse con precaución.
smcg
2

Algunas ideas

  • Lluvia de ideas
    Escriba cada idea estúpida que tenga (en papel o pizarra). Tacha los que estás seguro de que no funcionarán. Seguir escribiendo. Incluya soluciones a problemas del mundo real potencialmente relacionados. Por ejemplo, ¿mezclar pintura, o clavar un clavo en la pared o cambiar el aceite resuelve un símil real?
  • Pide ayuda
    Google, pregunta aquí, pregunta a tus amigos geek, etc.
  • Resolver un problema relacionado
    No puede resolver el problema, pero ¿puede resolver uno mucho más simple? ¿O uno igualmente complejo y relacionado? Haz eso. Luego haga pequeños cambios individuales para acercar su solución a la solución deseada.
  • Simplemente comience a escribir desde afuera
    Independientemente de si su interfaz es un servicio web, página web, forma nativa, cámara, teclado, monitor o lo que sea , hay una interfaz. Escriba algunas líneas de código / pseudocódigo para que la interfaz funcione. Utiliza métodos mágicos que aún no existen. Recurrentemente haga lo mismo para cada método mágico inexistente. Optimizar más tarde.
svidgen
fuente
2

No hay nada de malo en ir con la mala solución. Muchas veces simplemente no sabes lo suficiente sobre el dominio del problema en ese momento. Ir con una mala solución te permite seguir adelante y aprender más sobre el problema. Entonces aún puede regresar y refactorizar su primera solución.

Oliver Weiler
fuente
1

Siempre trato de verlo desde la perspectiva del usuario final. Es muy fácil pensar en una idea "genial" como desarrollador en la que puedas pasar años trabajando y que realmente agregue muy poco a tu aplicación.

Idealmente, desea asignar todas las características de su aplicación y priorizarlas de acuerdo con el beneficio para el usuario final, personalmente uso MOSCoW , aunque siempre que mantenga su método de priorización igual, puede ser tan simple como 1 - 5.

Después de lo cual, si todavía encuentra que esta función es una parte esencial de su aplicación, como ya lo ha dicho la gente, ¡pregunte! No creo que haya encontrado un problema que eventualmente no haya sido resuelto por un colega o por esas buenas personas en Stackoverflow.

Mrk Fldig
fuente
Genial, porque soy de Moscú :)
user21974
¡Ahí tienes una señal!
Mrk Fldig
1

Mi opinión es: ¡nunca escriba código que simplemente funcione! Debería ser muy difícil refactorizar en el futuro.

Es un enfoque muy común para los desarrolladores (y, por supuesto, los PM o jefes). Escuché mucho tiempo "solo haz que funcione" o "lo arreglaré más tarde" (más tarde, ¿cuándo? ¡Nunca!), Pero creo que la calidad no es algo que no puedes obtener en el medio del proyecto.

Mi sugerencia es que dejes de pensar en tu problema por un tiempo ... haz algo diferente y, en algún momento, las soluciones solo salen.

Por cierto, preguntarle a un colega es absolutamente una excelente manera de resolver sus problemas.

Andrea Girardi
fuente