language-agnostic specifications

language agnostic - ¿Es la escritura de especificaciones para proyectos de pasatiempos la única forma de terminarlas?



language-agnostic specifications (23)

Esto es lo que me pregunto. Cada noche que nuestro bebé de 3 meses nos deja dormir, salto a mi computadora y comienzo a programar mis proyectos de hobby. Tengo alrededor de 20 proyectos diferentes en los que estoy trabajando: diferentes tipos de proyectos, desde juegos C ++ hasta aplicaciones web, junto con alguna contribución a proyectos de código abierto. Es realmente una pasión y lo ha sido durante muchos años.

Sin embargo, cuando miro hacia atrás, veo que no he podido completar por completo uno de mis proyectos de hobby. Siempre he hecho los prototipos y configurado las funciones más importantes, pero con el tiempo, en lugar de terminar mi proyecto, termino cambiando a otro proyecto que parece "mucho más genial" en este momento. Por lo tanto, generalmente termino con juegos con errores e incompletos que no tienen final ni historia, motores 3D que tienen la rutina PolygonDraw más rápida que nunca, pero que faltan para implementar cualquier otra cosa, etc. La lista es larga. ¡Creo que debo haber escrito Pong sin terminar más de cien veces diferente!

Me han dicho que el remedio es escribir especificaciones para mis proyectos de hobby.

Por un lado, escribo muchas especificaciones en el trabajo. Sé lo importantes que son para definir la hoja de ruta de un producto y mantenerse dentro de lo programado. Por otro lado, ¡las especificaciones y el proyecto de pasatiempos simplemente no parecen ir de acuerdo! Me parece que la curva de aprendizaje para construir un juego es en realidad lo que lo hace divertido; No el juego en sí. De ahí la diversión de perder tiempo reestructurando un motor completo, la diversión de crear las funciones más inútiles, etc.

Así que aquí viene la pregunta: ¿Alguna vez escribes especificaciones para tus proyectos de hobby? ¿En qué se diferencian entonces las del trabajo? ¿Cómo te las arreglas para completar tus proyectos de hobby?

Me encantaría saberlo mientras trabajo en mi nuevo proyecto: un generador de sonata para piano :)


¡No me funciona! De hecho, cuando estoy escribiendo especificaciones, generalmente hago los proyectos aún más grandes y es menos probable que se terminen.

A veces la mejor manera de hacerlo es simplemente hacerlo.

Ze Frank explica esto mucho mejor que yo: http://www.zefrank.com/theshow/archives/2006/07/071106.html (enlace de video con juramento)

EDITAR: Sólo para añadir. Si está pensando que quiere dejar su proyecto a medio terminar por una nueva gran idea ... ¡hágalo! ¡No mires atrás!

La finalización no es un requisito para sus propios proyectos de mascotas. Nadie te culpará por no terminar cosas que apenas nadie más se molestaría en comenzar.

La razón por la que empezaste fue por la pasión. Eso es muy importante. No debes forzarte a "avanzar" en tu tiempo libre. Vas a agotar tu pasión, que es tu recurso más vital.


¿ Quieres terminarlas?

Creo que es razonable nunca terminar un proyecto de pasatiempo. Puedes seguir trabajando en ello mientras vivas. Aciddose ha estado trabajando en su sistema de instrumentos xhip durante años, sin llegar nunca a la versión 1.0, lo que hace que el programa de personas de los parches de instrumentos no tenga valor de una versión a otra. Sin embargo, él y los usuarios de su softsynth parecen estar pasando un gran momento.

Tal vez si solo apuntas a un "lanzamiento" y no estás "terminado" estarás más satisfecho. Betas te dejan seguir soñando.


Acabo de descubrir recientemente que escribir especificaciones es realmente lo que necesito para realizar mis proyectos.

Me he sentido un poco como tú, muchos proyectos, saltando de uno a otro y nunca terminando las cosas. Hasta hace aproximadamente 6 meses, cuando comencé a escribir especificaciones y tener una especie de hoja de ruta para mis proyectos.

Todo lo que puedo decir es que, en realidad, funciona, porque divide sus proyectos en pasos más pequeños, como una carrera con puntos de control, y cuando comienza a marcar los puntos de control como hechos, se siente bien, adictivo y su enfoque estará en la linea final.

De esta manera, puedes mantener solo 1 o 2 proyectos al mismo tiempo, pero en realidad los terminas. Y, por supuesto, tiene la bonificación extra y bastante valiosa de mantenerse al día con el proyecto, incluso si no lo toca durante aproximadamente un mes o más. Las especificaciones siempre estarán allí para recordarle los objetivos y propósitos de su proyecto.

Esta es solo mi experiencia personal, y creo que deberías intentarlo. Esperemos que te entrene también.


Constantemente escribo especificaciones para mis proyectos, en el trabajo, en la universidad y fuera de mi tiempo libre. La mayor debilidad de un programador es su memoria, por lo que me parece bien mantenerme ocupado durante mi tiempo de reflexión al anotar cada uno de mis pensamientos en algún tipo de documento estructurado. Antes de que se dé cuenta, ha escrito un esquema de base de datos completo o tiene una Especificación de requisitos.

En este momento estoy trabajando para mejorar mis habilidades de SQL, y he pasado gran parte de este tiempo libre entre las consultas de escritura escribiendo mi experiencia. Después de un par de retoques, tuve un documento decente que describía lo que había que hacer.


Creo que el problema principal no es la falta de especificaciones, sino que es difícil terminar algo (cualquier cosa).

Es un trabajo duro. Puede parecer que tu programa está terminado en un 90%. Pero hacer el último 10% (eliminar todos los errores, lograr que la aplicación publique calidad, escribir documentación, etc.) requiere tanto trabajo como el primer 90%. Y si quiere ser serio con respecto a la comercialización de su programa, a la respuesta a los correos electrónicos de soporte, a la solución de los errores de otras personas, todavía hay más trabajo. Y tal vez no sea el tipo de trabajo que más le interesa.

También es difícil mentalmente . Un proyecto sin terminar tiene un potencial ilimitado. Es un lienzo vacío donde puedes proyectar tus ambiciones desenfrenadas, ideales elevados y pensamientos revolucionarios. Una vez que está terminado y hecho realidad, hay que verlo por lo que es. Limitado. Defectuoso Nunca tan bonita como la idea que la engendró.

Dicho esto, terminar algo también puede ser muy gratificante. Aprendes mucho, obtienes una revisión de tus ideas, la satisfacción de haber completado algo y puedes ver lo que otras personas piensan de tu trabajo.

Algún consejo:

  • Asegúrate de que realmente quieres terminar el proyecto. Es decir, que las recompensas valen todo el trabajo duro. (Si no es así, acepte ese hecho y permanezca feliz).

  • Encuentra formas de motivarte a ti mismo a través de las partes "aburridas". Especificaciones, tal vez, si te mantiene enfocado. Pero encuentre lo que sea que funcione para usted, ya sea el tictac de elementos de todo, recompensándose con una galleta o soñando con la fama y la fortuna.

  • Libertad anticipada, la liberación a menudo. Cuanto más ahorre para un "lanzamiento grande", mayor será la posibilidad de que ese lanzamiento nunca suceda.

  • Primer lanzamiento, luego reescribir. Cuando sienta la necesidad de hacer una reescritura importante, haga primero un lanzamiento, luego reescriba (si todavía está preparado para ello). El software nunca es perfecto. Si se esfuerza por lograr la perfección sin ninguna presión para liberar su código semicocido (pero existente), nunca terminará.


Desafortunadamente, después de escribir las especificaciones para el núcleo del motor DIFL (no te molestes en buscarlo, ya que no hay rastro de él fuera de los sistemas de mi hogar), todavía no lo terminé.


El único consejo más grande que podría darte sería obtener algo: hacer que la especificación para tu primera versión sea lo suficientemente pequeña como para que realmente sientas que puedes completarla, aunque no tenga casi todas las funciones que deseas.

Una vez que obtengas algo, la presión de los usuarios de tu software será suficiente para mantenerte activo. También garantiza que la dirección que tome en el desarrollo sea la misma dirección en que sus usuarios quieren que vaya.

Si realmente no obtiene ningún usuario, entonces no se sienta tan mal por abandonar el proyecto; si a nadie le interesa, probablemente no valga la pena seguir adelante.

Si la presión de sus usuarios no es suficiente para mantenerlo enfocado, entonces ábralo. Si hay suficiente interés en él, alguien más lo recogerá donde lo dejaste, y eres libre de pasar a cosas más grandes y mejores.


El artículo de Joel sobre la programación basada en la evidencia funciona para mí. Aunque lo implementé de manera diferente.

La idea es dividir el proyecto en tareas pequeñas y dar estimaciones, luego hacer un pronóstico de cuándo finalizará el proyecto según el tiempo que tomaron las tareas terminadas para finalizarlas.

Puede pensar que su proyecto tardará años en terminarse, pero en realidad, según la estimación, solo son dos meses o menos. Si trabaja más y termina las tareas rápidamente, verá que la fecha de finalización viene antes.

Creo que lo más motivador para seguir adelante es ver cómo el objetivo se acerca más hacia donde corres.

Además: crea algo que usarás más tarde. Usar cosas te da un incentivo para mejorarlo más tarde.


He podido hacer algunos proyectos de hobby y terminar algunos de ellos. Intento terminarlos todos, pero algunos simplemente no puedo reunir.

La razón por la que pienso es que la cantidad de detalles que se necesitan para finalizar un proyecto son tantos que van de un proyecto de pasión a una tarea de un proyecto.

Lo que me ayudó a terminar la mayoría de las mías es que siguieron siendo una pasión hasta que se dejaron los toques finales. Así que acabo de hojearlos.

Ayudará una especificación, hasta cierto punto sí. Te meten más en el proyecto, pero casi siempre hay un punto en el que la pasión se desvanece y buscas el siguiente objeto brillante.


La mayoría de los proyectos de hobby míos tampoco se terminan. Mientras esté trabajando en algo y aprendiendo, no creo que eso sea un problema. Actualmente no estoy escribiendo especificaciones, pero estoy practicando / entrenando TDD. Lo menciono a medida que escribo pruebas que son las especificaciones. Algunos días me sentaré y crearé un montón de pruebas que describen lo que debe hacer el software. Algunos días hago que esas pruebas pasen. Es agradable porque no tengo que guardar todo el código en mi cabeza, y en cualquier momento puedo sentarme y seguir avanzando al corregir las pruebas rotas. Las cosas simplemente funcionan, es algo surrealista.


La verdadera pregunta es: ¿cuál es tu hobby? ¿Está terminando un proyecto, o jugueteando? Si obtener las últimas diez yardas es una tarea, tienes que decidir si vale la pena para ti. Escribir especificaciones detalladas funcionará; también lo hará la autoflagelación si te gusta ese tipo de autodisciplina. Nada lo hará fácil si va en contra de tu maquillaje, por lo que debes decidir si el objetivo final vale para ti.

Y, solo para demostrar que no hay nada específico de la programación sobre este punto, puede que realmente te guste este chico . Uno de los puntos principales de su trabajo es que los artistas conceptuales, como Picasso y Da Vinci, nunca se preocuparon realmente por la ejecución final, la idea lo era todo y, una vez que lo afirmaron, estaban extrañamente contentos con que alguien más terminara el trabajo real. o dejando el boceto sin terminar y sin publicar.


Lo mejor que he encontrado para ayudar a avanzar es tener a alguien más trabajando en el proyecto con usted. Encuentre un amigo (o dos) que esté interesado en lo mismo y diseñe / codifíquelo con ellos. No solo tienes a alguien para intercambiar ideas, sino que también tienes a alguien que te motiva, por no mencionar que el progreso es el doble de rápido, así que espero que termines antes de rendirte :)

Por supuesto, requiere control de código fuente, pero ya lo estaba usando para sus proyectos, ¿verdad? :)


Lo que me ayuda mucho es dividir una nueva función en tareas pequeñas que se podrían realizar en una sesión nocturna. Entonces, si tengo tiempo, simplemente escojo una tarea de la lista y simplemente la finalizo. Esto es a menudo suficiente para entrar "en el flujo" y hacer "solo uno más".

Hago esto solo para una función a la vez, por lo que no me distraigo con todas las otras cosas geniales que podría agregar a mi aplicación.


No creo que escribir especificaciones sea la solución a tu problema. Claramente, tus "proyectos de hobby" son cosas que encuentras divertidas. Escribes las partes divertidas pero luego evitas las partes no divertidas que serían necesarias para completar algo.

Si solo estás "programando para divertirte", bien, lo estás logrando. No creo que escribir especificaciones sea divertido.

Si realmente quieres "terminar" algo, la mejor manera no es escribir una especificación, es no saltar a otro proyecto cuando el factor diversión disminuye.


No estoy seguro de que escribir especificaciones sea la solución a tus problemas (o los míos que parecen similares), sin embargo, en el caso de que quiera hacer algo más que un experimento desechable, hay algunas cosas que me ayudan un poco sin quitarme la diversión. de eso

Las especificaciones realmente son bastante ajustadas y deberían ser técnicas, pero para un enfoque de pasatiempo, podría escribir un poco de algo similar mucho más suelto que describa algunas de las cosas que le gustaría presentar y cómo encajan en una especie de borrador de diseño. . Aunque no es tan detallado o restrictivo como una especificación adecuada, podría ayudar a mantener los cambios en la dirección correcta.

En segundo lugar, podría desglosarlo y, dependiendo de sus asignaciones de tiempo, tal vez agregar algunos objetivos. Si se enfoca en construir una parte del proyecto como un tiempo para dividirlo en subproyectos que pueden vincularse al final, da una sensación de avanza a medida que avanzas de una parte a otra, en lugar de sentir que has estado trabajando en lo mismo durante siglos y que ya no puedes molestarte más. Funciona si lo seleccionas en una lista, ya que por lo general tiene que suceder al menos mentalmente de todos modos.

Al decir esto, si su objetivo es jugar con ciertos conceptos y no crear un producto final, es probable que no lo haga porque no está trabajando para lograrlo. Una forma podría ser tomar la idea antes mencionada de dividirla y luego encontrar una manera de agregar algo personalmente interesante en cada parte que te aburra, tal vez intentando agregar un desafío o algo.

Todavía no tengo mucha experiencia en el aprendizaje, pero así es como mantengo mis retoques juntos (a veces, a menos que tenga un bloqueo total por falta de experiencia) y cómo he abordado muchos proyectos multimedia y web en forma de pasatiempos en los últimos años. Aunque el tipo que lo dijo de código abierto cuando te aburres y dejas que alguien más lo recoja, fue una buena idea si quieres ver tu código usado pero ha cumplido tus objetivos personales.


No me complico demasiado, pero enumerar todas las características y requisitos que desea incluir en su aplicación realmente ayuda. Al igual que con la mayoría de los proyectos de pasatiempos, a menudo no solo te sientas y los codificas durante 2 meses y los terminas. Es una hora aquí, dos horas, etc. Básicamente, es muy común olvidar en qué estuvo trabajando en último lugar y cuál fue el propósito original de esta gran idea genial para una aplicación.

Si pasa algunas horas anotando especificaciones y requisitos, será muy valioso para usted 6 meses más tarde cuando tenga tiempo libre o su ADD se cambie a ese proyecto e intente recordar qué es lo que se supone que debe hacer.


Por lo general, escribo un primer conjunto de especificaciones cuando empiezo.

También soy un gran fanático del pensamiento en papel, así que dibujaré pantallas, UML, diagramas, diagramas de flujo, elementos de diseño ... Es solo una cuestión de definir el alcance de su proyecto y poder ver lo que tenía. mente. Realmente me ayuda a pensar.

Estos documentos serán mis especificaciones para todo el proyecto. Agregaré otros a medida que avanzo, pero no estoy tratando de mantener los anteriores tanto como lo haría. Fue un proyecto de trabajo: sé adónde voy y puedo hacer un seguimiento de los cambios observando mi código.

Por supuesto, algunos de mis proyectos de hobby se hacen en colaboración. En estos casos, escribo más especificaciones para tener una mejor comunicación con mi equipo y trato de mantener actualizados documentos como los Diagramas DB.


Respuesta corta: desarrollar especificaciones para un proyecto de pasatiempo no es necesario ni suficiente para garantizar la finalización.

Habiendo dicho eso...

Guardo un cuaderno de ingeniería para todos mis proyectos personales. Utilizo el cuaderno para capturar todo tipo de cosas sobre los proyectos en los que trabajo. Esto incluye la motivación del proyecto, los recursos valiosos aprovechados durante el proyecto, las cosas desarrolladas en el transcurso del proyecto que podrían potencialmente reutilizarse más adelante, las ideas clave adquiridas, etc. También incluye, más a su pregunta, especificaciones para la mayoría de los proyectos . Empleo un enfoque ágil / magro para crear estas especificaciones que, para mí, es convincente desde una perspectiva de costo / beneficio.

por cierto ... Tengo muchos, muchos proyectos personales que no culminaron en un sistema de trabajo completo. Algunos de estos podrían llegar a completar "algún día tal vez". Elegí conscientemente dejar de trabajar en algunos de los otros porque cumplieron su propósito (p. Ej., Me introdujeron en una nueva tecnología, me ayudaron a entender mejor una característica del idioma, etc.). Continuar trabajando en proyectos como estos me habría llevado a disminuir. los retornos, así que decidí reasignar mi tiempo a los proyectos que sentí que tenían un mayor apalancamiento.


Se trata de la ''gestión de proyectos propios'' ... incluso por diversión.

Lo siento por ti ... solía tener muchos repositorios que tendían a atascarse alrededor de la revisión 200 aproximadamente.

Esto es lo que solía suceder, porque no hice la suficiente planificación, después de alrededor de 200 confirmaciones, las cosas se complican y necesitan una reescritura ... luego el interés desaparece porque parece demasiado complicado.

Aprendí a escribir mis propias especificaciones para uso personal.

a

  1. Dame el enfoque para hacer el trabajo, y no te vayas al carril de características.
  2. Recuérdame en qué estoy trabajando
  3. Tener grandes ideas antes de que me programen.
  4. Mantener la cosa más divertida por más tiempo

Para mí, escribir mis propias especificaciones es vital para hacer cualquier cosa.

Usted no iniciaría un negocio sin un plan, ¿verdad?

Para proyectos personales tengo toneladas de libros moleskine llenos de especificaciones e ideas aproximadas. Cuando maduran, migran de los libros de notas a documentos reales y comienza la codificación.

BIG EDIT : en un disco para la eficiencia personal y, para terminar los proyectos. Leí "Getting Things Done" ... A pesar de toda la mierda hippie sobre la "psique" y los diversos niveles de mente (que en realidad no están basados ​​en ninguna ciencia) los consejos son muy buenos.


Si y no. Escribo notas en un cuaderno mientras lo pienso, y lo agrego a medida que lo implemento. Es un proceso algo diferente de los proyectos de trabajo donde alguien más puede tener que ver la especificación.

Termino aproximadamente la mitad de lo que comienzo.


También tengo varios proyectos de hobby que no he terminado. Tengo alrededor de 10 y he escrito una especificación para exactamente uno de ellos, el más grande en alcance (también un juego).

No he terminado ni los que no tienen especificaciones, ni el que tiene. Creo que esto se debe a que nunca publico el trabajo ni se lo muestro a nadie, por lo que permanece lleno de errores y nunca se termina.

Supongo que esto significa que, independientemente de si tiene o no una especificación, no afectará el éxito del proyecto tanto como otros factores, como tener el tiempo, la motivación, la ayuda y la confianza.


Tengo mucho el mismo problema. Una cosa que he notado que HA ayudado, sin embargo, es disminuir mis ambiciones. como el camino es bajo. Escribir una especificación es una forma de dominar las ambiciones, si tiene algún tipo de regla limitante para la especificación, como "La especificación solo puede ser una página", o "la especificación no puede tener más de 300 palabras", o "Especifique solo algo que pueda hacer en un día de codificación". Obtener el equilibrio correcto puede requerir algo de práctica. Si va con el último límite, puede imponer la regla de despido OBLIGATORIO del proyecto si no puede finalizarlo en un día.

Lo bueno de esto, es que te limita a metas alcanzables. Esto puede sonar realmente estúpido o equivocado al principio. O tal vez suene razonable, pero no puedes evitarlo, ¡quieres hacer cosas increíbles, no cosas ordinarias! ¡No pequeñas cosas que solo puedes hacer en unas pocas horas!

pero ten esto en cuenta:

“Se encuentra invariablemente que un sistema complejo que funciona ha evolucionado a partir de un sistema simple que funcionó. La proposición inversa también parece ser cierta: un sistema complejo diseñado desde cero nunca funciona y no se puede hacer funcionar. Tienes que empezar de nuevo, comenzando con un sistema simple de trabajo ".

—John Gall

Es MUCHO más fácil hacer ese proyecto ambicioso, si ya tiene un proyecto TERMINADO y TRABAJANDO para basarlo. Entonces, lo "más complejo" PUEDE ser un proyecto que encaja en un día. Este es el ideal y la filosofía en la que estoy trabajando, porque creo que tiene la mejor oportunidad de tener éxito. Mirando los proyectos exitosos del pasado, la gran mayoría de ellos evolucionó de esta manera, ya sea intencional o no.


He ayudado con el desarrollo de una gama de sistemas desde la aviónica crítica para la seguridad hasta proyectos personales desechables como un solucionador de Sudoku. Obviamente, con los sistemas de aviónica, las especificaciones eran fundamentales para el funcionamiento seguro del sistema y para evitar matar a alguien, pero nunca me molesté con mis proyectos personales.

Creo que esto se debe a que las especificaciones son generalmente aburridas de leer y escribir. Joel escribió un artículo interesante sobre esto y cómo mejorarlos si los escribes:

Especificaciones funcionales indoloras

Desafortunadamente, todavía no he tenido las agallas de intentar que mis especificaciones sean más divertidas para leer en el trabajo.

Tal vez en lugar de escribir especificaciones, ¿deberías intentar trabajar en algunos proyectos para o con otras personas? Eso podría proporcionar alguna motivación externa. Hago algunos desarrollos web para el disco de mi prima en el teatro, y si necesitan una función, no dejarán de preguntarme sobre ella hasta que la termine.