¿Cuáles son los pasos para comenzar un proyecto grande, cuando todo lo que tengo es una gran idea? [cerrado]


49

Soy estudiante de ingeniería informática. He estado pensando en cómo puedo manejar un gran proyecto. ¿Cuál debería ser mi primer paso para alcanzar mi meta de una manera más eficiente y efectiva?

Cuando se me ocurre un proyecto, no sé cómo debería comenzar a trabajar en él. Muchas veces, simplemente lo ignoro. Sin embargo, ya no quiero ignorar las ideas de mi proyecto.

Ahora, les pregunto a todos ustedes, ¿alguien puede compartir sus experiencias? ¿Cómo debo comenzar un proyecto cuando todo lo que tengo es una idea?


11
Respuesta: primer paso, comience a usar el control de versiones . Echa un vistazo a cómo lo hacen en los repositorios de código abierto como github, bitbucket, CodePlex, SourceForge, etc.
Spoike

¿Cuál es el significado de "control de versiones"? ¿Puedes describir más?

Vea mi respuesta a continuación.
Spoike

1
Sugeriría una migración a [productividad.se] pero probablemente se cerrará como NARQ allí. Esto realmente no tiene mucho que ver con la programación o los programadores, es increíblemente abierto y es vago (¿qué es un "gran" proyecto? "¿Más" eficiente / efectivo que qué?).
Aaronaught

66
Realmente no es una respuesta a su pregunta, pero: no tenga miedo de fallar. No escuches a las personas que te dicen que no puedes. Las personas famosas sobre las que lees no son famosas porque eran inteligentes o talentosas. Son famosos porque fueron persistentes. Las personas inteligentes y talentosas son una moneda de diez centavos por docena. Las personas persistentes están lejos y son pocas.
Charles Lambert

Respuestas:


64

Olvídese de la codificación y la creación de un entorno de desarrollo por un momento. Si desea embarcarse en un gran proyecto, lo primero que debe hacer es controlar el propósito y el alcance del proyecto.

Lo que recomiendo es abrir un procesador de textos y escribir un documento de 'objetivos del proyecto'. Describa de qué se trata la idea y el propósito general del software que desea escribir. Luego, enumere los objetivos de funcionalidad del proyecto. No me refiero a especificarlo, sino a describir las diferentes funcionalidades que el producto terminado debería soportar. Por lo tanto, si estuviera escribiendo software para administrar una escuela, podría enumerar 'gestión de docentes' como una pieza de funcionalidad y luego describir qué incluiría esa funcionalidad (seguimiento de la información de contacto, horario de clases, etc.).

Luego, la parte más difícil: no es algo que deba hacer desde el principio, sino a medida que avanza. Tan importante como propiedad Características desea agregar está revisando la funcionalidad que se describe en el documento de objetivos, y tenga en cuenta esas características se puede vivir sin en la primera versión del programa. Esto es clave para gestionar el alcance.
Una de las razones principales por las que las personas fracasan en proyectos más grandes es que no saben cuándo dejar de trabajar en ellos. No sienten que está "hecho" porque las ideas siguen llegando y nunca se publica. Eventualmente pierden interés, y tienes otra obra maestra a medio terminar. Por lo tanto, debe asegurarse de tener un buen manejo de la funcionalidad que es realmente importante para lograr la parte básica de su objetivo. Ese es tu primer objetivo.

Así es como comienzo todos los proyectos no triviales ahora. Me ayuda a mantener el enfoque y a evitar que el alcance y el propósito 'evolucionen' durante el desarrollo.


+1 por todo lo que dices. Lea también este libro
treecoder

+1: no es necesario que agregue nada.
temptar

Esta es una respuesta genial. Además, si tiene algún tipo de software de gestión de proyectos, comience a utilizarlo pronto. Hay algunos gratuitos con limitaciones, por supuesto. He usado CampFire ( campfirenow.com/signup , busque "También ofrecemos un plan gratuito: 4 chateadores con 10 MB de almacenamiento") antes.
m4tt1mus

1
Prefiero recomendar mapas mentales en lugar de procesador de textos (no experimentado + página en blanco = el proyecto nunca despegará).
MaR

1
¿Procesador de textos? Usa lápiz y papel. :)
plegado a la derecha el

41

Creo que Linus lo expresó mejor

Nadie debería comenzar a emprender un gran proyecto. Comienzas con un pequeño proyecto trivial, y nunca debes esperar que crezca. Si lo hace, simplemente sobrediseñará y, en general, pensará que es más importante de lo que probablemente sea en esa etapa. O peor, puede que te asuste el tamaño del trabajo que imaginas. Así que comienza con algo pequeño y piensa en los detalles. No pienses en un panorama general y un diseño elegante. Si no resuelve una necesidad bastante inmediata, es casi seguro que está sobre diseñado. Y no esperes que la gente intervenga y te ayude. Así no es como funcionan estas cosas. Primero debe obtener algo útil a mitad de camino, y luego otros dirán "oye, eso casi funciona para mí", y se involucrarán en el proyecto. -- Linus Torvalds


12

¿Cuál debería ser mi primer paso para alcanzar mi objetivo de una manera más eficiente y efectiva?

Supongo que ya ha realizado proyectos anteriormente y que está en un colegio / universidad que no enseña control de versión / fuente. Si desea ver algunos proyectos, siempre puede ir a repositorios de código abierto como Github (usa Git), Bitbucket (usa Mercurial), Google Code (usa Mercurial, Git y Subversion), CodePlex (Mercurial y Subversion / TFS), SourceForge (Muchos), etc. y eche un vistazo a su código base. Lo que tienen en común es que están utilizando software de control de fuente.

Hay mucha información sobre cómo usarlos, por lo que le sugiero que aprenda cómo usar esto, porque esta es una práctica estándar de la industria. Aquí hay algunas guías visuales para comenzar:

Sabes, cuando se me ocurrió un proyecto, no sé qué debo hacer. Muchas veces lo ignoro.

Solo hay mucho que puede hacer en su tiempo libre. Comience con algo pequeño : cree un proyecto desde cero, póngalo en un repositorio de código fuente. Confirme cambios en su repositorio de código fuente cada vez que desee agregar algo a su pequeño proyecto. Con el tiempo se volverá grande y si alguna vez desea volver, siempre puede revertir o revertir los cambios que ha realizado con el sistema de control de versiones.


99
+1 para comenzar de a poco, ese es el enfoque básico para proyectos grandes: dividirlo en partes más pequeñas y tratarlas de una en una.
Joel C

5

Es perfectamente normal ser golpeado por el síndrome del "papel en blanco".

Tienes un gran proyecto en mente, que se ve fantástico, pero cuando te sientas en el escritorio tratando de hacer algo, de repente bloqueas y no puedes hacer nada. Luego abres el solitario y haces un nuevo disco.

En realidad, debes comenzar a hacer algo relacionado con el proyecto, para que sientas que ha nacido.

Es posible que no desee escribir código de inmediato. Puede comenzar escribiendo lo que su proyecto realmente debe hacer, o le gustaría que lo hiciera. Toma un bolígrafo y papel y comienza a escribir. Puede comenzar desde los detalles o desde una imagen más grande. Pruebe ambos, vea qué es lo mejor.

Puede intentar definir las funcionalidades del proyecto, las diferentes partes, cómo se comunican esas partes entre ellas. Me siento cómodo con el post-it, son divertidos y puedes cambiarlos a medida que progresas. Deja que sigan tu mente e ideas.

O tal vez pueda comenzar a crear prototipos de algunas funciones o clases. Puedes usar el idioma que prefieras para esto, incluso uno que no exista y que acabas de inventar.

Después de algún tiempo, tendrá algo en qué trabajar y su proyecto no solo estará en su mente. Realmente hiciste algo.

Cuando se sienta cómodo para comenzar realmente el proceso de desarrollo, es hora de una cuidadosa planificación, documentación, creación de prototipos, recopilación de todas las tecnologías y software necesarios, etc.

¡Pero no comience hasta que realmente sienta que es el momento adecuado!


4

Los grandes proyectos se forman a partir de muchos proyectos o piezas más pequeñas. Es posible que tenga una gran idea o requisito de proyecto, por ejemplo, una aplicación que administre contactos.

Descomponerlo; pregúntese, '¿cuáles son las piezas más pequeñas que necesito para hacer esto?'

Una vez que haya definido sus partes más pequeñas, repita; Es posible que algunas partes deban desglosarse aún más. La idea es que defina los objetivos más manejables para cada una de las piezas más pequeñas. Aprenda a usar principios disciplinados en el diseño y desarrollo (como Agile-TDD) y se cumplirán los objetivos más pequeños y manejables.


3

Crea un esquema

Tiene una gran idea, pero no sabe cómo va a lograr su tarea. Crea un bosquejo de lo que vas a hacer. Escriba los pasos que tomará, lo que necesitará, los idiomas que usará, etc. Asegúrese de tener todo organizado, o el proyecto será un desastre total.

Programe sus pasos

Mencioné esto antes, pero es realmente importante. Si tiene el tiempo planeado, puede tener una fecha estimada de finalización de cuándo finalizará su proyecto y cuánto tiempo tomará cualquier paso del proyecto. Esto es, nuevamente, organización y lo mantendrá en funcionamiento.

Encuentra las herramientas para el trabajo

Si va a comenzar un gran proyecto, necesitará ayuda. Para la organización del código y un buen sistema de control de versiones, Git es excelente porque mantiene todo su código en un único repositorio. Para obtener más información sobre Git, consulte el enlace que le di.

También deberá asegurarse de estar utilizando idiomas que lo ayudarán a hacer lo que está tratando de hacer. Asegúrese de poder crear su proyecto antes de comenzar. No digo que no aprendas nada nuevo, pero aprende antes de comenzar.

Consigue ayuda

Los grandes proyectos no suelen hacerse solos. Póngase en contacto con otros estudiantes, personas de su comunidad que puedan programar y cualquier otra persona que crea que pueda ayudarlo antes de comenzar. No tengas miedo de preguntar.

¡Empezar!

No bromees, esperando que alguien más comience tu proyecto y luego digas "¡tuve esa idea!". Siempre te perseguirá ...


1

Quizás esté lleno de clichés pero ... lo presentaré.

Para poder manejar un gran proyecto necesitas principalmente una cosa: experiencia. La experiencia te brinda todo lo que necesitas:

  • Conocimiento: cuanto más tiempo pase en proyectos, más conocimiento general y específico obtendrá
  • Confianza: la gestión de grandes proyectos necesita confianza, la confianza proviene del conocimiento y, en general, del hecho de que cada parte del trabajo es algo que ha hecho antes, o ha visto a personas haciéndolo
  • Red profesional: si el proyecto es realmente grande, tendrá que darse cuenta de que no puede lograrlo por su cuenta, así que prepárese para saber a quién puede preguntar o dónde puede encontrar la información clave que está buscando.

Entonces puedes hacer dos cosas:

  • Sumérgete y mira cómo va. Probablemente cometerás muchos errores, pero la clave es aprender de ellos.
  • Obtenga un trabajo donde pueda observar específicamente a las personas que manejan grandes proyectos

Espero que eso ayude.


1

Mi definición de "gran proyecto" es "un proyecto donde el problema principal es la coordinación de los participantes y la comunicación entre ellos" (un proyecto medio es cuando la gestión es tan difícil como los problemas técnicos, uno pequeño cuando los problemas técnicos son más importantes que la gestión; tenga en cuenta que un proyecto a largo plazo de una persona puede ser un gran proyecto: coordinar y comunicarse con su futuro no es muy diferente a hacer lo mismo con otra persona).

El primer paso para poder manejar (con un "tener un papel principal") un gran proyecto es participar en algún gran proyecto sin tener un papel principal. El segundo paso es alcanzar el nivel de rol principal mientras es asesorado por alguien que tiene experiencia con él.

Un enfoque alternativo es aumentar progresivamente el tamaño de los proyectos y aprender de su experiencia ...


1

Algunas ideas están maduras para que un ingeniero salte y comience a escribir código. Estos proyectos pueden ser grandes o pequeños, pero lo que todos tienen una cosa en común: un problema bien definido para resolver. He comenzado proyectos como este innumerables veces, y es solo cuestión de mí construir una disciplina en torno a escribir una buena documentación por adelantado y seguir las mejores prácticas con respecto al control del código fuente, la comunicación y la colaboración.

Los grandes proyectos para los cuales todo lo que tengo es el germen de una idea requiere un poco más de preparación en mi experiencia. Lo primero que hago es comenzar a hablar sobre mi idea con otros para ver si alguien comparte mi comprensión del problema que estoy resolviendo y validar mi enfoque planificado para resolver el problema. Así que lleve a un amigo o dos a tomar una cerveza, o invítelos a su dormitorio para Cheetos. Pero diviértase con este proceso porque es a través de este proceso que podría comprender mejor el problema que está resolviendo, encontrar otras grandes ideas que pueda aportar para resolver el problema, practicar la venta de su idea a otros y tal vez incluso comenzar a construir un equipo de personas para ayudarlo a resolverlo.


1

Divide las cosas grandes en cosas más pequeñas.

No se puede trabajar para "lograr la paz mundial". En su lugar, trabaja en la prohibición de las Armas de Destrucción Masiva, fomenta la democracia, proporciona ayuda para el desarrollo, fomenta el intercambio cultural y científico, etc.


1

Creo que algo que muchas de estas respuestas no mencionan es hacer algo tangible y obligarse a hacerlo.

A veces te quedas atascado en la 'tierra de pensamiento' donde sientes que todo lo que queda es el tedio de escribir cosas, pero en realidad comienzas en un pedazo de tu proyecto y la implementación es divertida y desafiante.

Conozco a muchas personas que son así, incluyéndome a mí, hasta que realmente me pongo en marcha, no hago nada, no puedo -solo- pensar y planear comenzar un proyecto. Tengo que elegir una pieza que pueda implementar fácilmente, llegar a ella y luego comienza el flujo.


1

No hay razón para hacer nada sin un propósito. Necesita historias de usuario que muestren la necesidad del código que desea escribir. Debe enmarcar estas historias de usuario en el siguiente formato:

Como [X]
quiero [Y]
para que [Z]

Esto puede parecer demasiado simplista, pero le brinda el marco no solo para definir al usuario, sino también para especificar la necesidad y cuál es el resultado final en una sola oración. Tendrás muchos de estos. Se te ocurrirá más a medida que pase el tiempo. Después de tener algunos, puede comenzar a desarrollar su código. Cuando tienes más ideas o descubres otras cosas. Regresas y escribes más historias de usuarios para no olvidarlas. Ese es el mejor lugar para comenzar.

Behavior Driven Development utiliza este enfoque y el sitio en el enlace tiene varios ejemplos del uso de este formato para expresar historias de usuarios.

Creo que será la forma más rápida y organizada de pasar de la idea al código.


1

Tomaría una pila de notas adhesivas amarillas y un marcador mágico y me sentaría en una habitación donde hay una gran pizarra blanca para poder hacer una lluvia de ideas.

Simplemente comenzaría a escribir frases simples que se me ocurrieran, como Menú principal, Informes, Base de datos, Autenticación, etc. Las pegaría en la pizarra y solo miraría y obtendría más ideas, por ejemplo, cómo debería verse el menú principal :

Abrir archivo, Guardar archivo, Guardar archivo como, Imprimir, etc. y pegarlos en la pizarra en el menú principal.

A medida que las ideas se te ocurren, escríbelas ... bueno, malo, estúpido, lo que sea que se vuelva creativo. Pégalos en el tablero. Al mirar el tablero, surgirán más ideas y surgirán patrones. En algún momento comenzarás a tener una idea de lo que planeas desarrollar.

Los adhesivos amarillos son geniales, se pueden mover con bastante rapidez.

Una vez que las cosas comienzan a juntarse, divide estos pensamientos en grupos. Entonces puedes hacer una lluvia de ideas en un solo nivel grupal. Tomaría fotos de la pizarra en varias etapas en caso de que quiera ver cómo se veía hace veinte minutos antes de que las cosas cambiaran.

Eventualmente, tendrá una idea bastante buena de los principales fragmentos de cosas que deben hacerse. Puede obtener una sola carpeta para cada uno de estos fragmentos y seguir lanzando ideas a medida que se acerquen a usted.


0

Como eres estudiante, supondré que te refieres a estudiante grande y no profesional. Esto último requiere consideraciones comerciales y de colaboración adicionales. Acabo de comenzar un nuevo proyecto la semana pasada, así que el proceso está fresco en mi mente.

Lo primero que hago es investigar las soluciones y bibliotecas existentes . No me gusta reinventar la rueda siempre que sea posible. Esta investigación también es un factor importante en la elección de un idioma para el proyecto. Algunos idiomas tienen un mejor código existente para ciertas tareas.

Lo siguiente que hago es crear una carpeta y ponerla bajo control de origen . Esto es tan simple como git init .hoy en día.

A continuación me pongo a trabajar "hola mundo" . Esto me permite saber que mi entorno de desarrollo está configurado correctamente.

A continuación, obtengo "hello world" para que funcionen las bibliotecas de terceros . Este es el mínimo necesario para mostrar que estoy enlazando y usando la biblioteca correctamente. Para una biblioteca de base de datos, se conecta y ejecuta una consulta simple, por ejemplo. Para un kit de herramientas GUI, se muestra una ventana.

Luego configuro scripts de compilación y marcos de prueba . Esto es hormiga o makefiles o lo que sea, y es mucho más fácil de configurar cuando su proyecto aún es pequeño.

Luego creo estructuras de datos . También se llama la capa "modelo". Esta es la parte que almacena todo lo que su programa necesita recordar para hacer su trabajo. Hago mucho diseño en papel, luego solo agrego trozos. Esta parte del diseño suele ser la más fácil. Por ejemplo, un programa de ajedrez necesitará objetos para almacenar la grilla del juego, los jugadores, las piezas, las secuencias de movimientos, etc.

En este punto, tengo una base bastante buena para un programa y generalmente es bastante obvio cuál será el siguiente paso para ese proyecto en particular. Luego, doy un pequeño paso a la vez, con un código que funciona hasta cierto punto en todo el camino.


0

Si todo lo que tiene es una "Gran Idea", necesitará muchas cosas (que están muy bien descritas en otras respuestas), y particularmente estas 2: tiempo y motivación .

La mayor dificultad cuando trabaja solo en un proyecto personal es que, por lo general, no tiene mucho tiempo para dedicarlo cada semana, por lo que no ve mucho progreso y comienza a perder rápidamente la motivación.

Entonces, como ya se ha dicho, tome pequeños pasos , esa es la clave.

Pero esto no es todo, ¡debes tomar pasos pequeños y gratificantes ! Es decir, pasos que le brindarán el mayor valor y demostrarán los conceptos clave de su gran idea.

Por ejemplo, si trabaja en un nuevo software de lista de super tareas con excelentes interacciones con el usuario . No comience con el almacenamiento y la base de datos hasta que realmente lo necesite. Comience con la innovadora interfaz de usuario: eso es divertido y tiene valor. Eso lo enorgullecerá, lo mantendrá motivado y le permitirá verificar muy pronto si su idea es realmente buena.


0

Lo primero que debe hacer es sentarse y describir esa idea por escrito. No se convertirá en un proyecto hasta entonces, e incluso entonces, tienes algo de trabajo para pasar de ser algo tan efímero como una idea a algo tan tangible como un proyecto.

Una vez que haya llegado tan lejos, puede comenzar a considerar convertirlo en un proyecto, identificando cómo podría dividirlo en pasos discretos que se puedan implementar de manera lógica.

Luego, esboce una línea de tiempo para implementar esos pasos. Vuelva a revisar el progreso a intervalos determinados para que mantenga cierto control de ese proceso, en lugar de tener ideas raras que nunca pensó en primer lugar y agregarlas a la mezcla.

Identifique una línea de meta inicial y apunte a eso. Cuanto menos se adhiera a eso, más probable es que el proyecto se hunda por debajo del peso de las ideas adicionales, y más desanimado se sentirá al completarlo, ya que parece vivir para siempre.


0

El esfuerzo del código suele ser alrededor del 20% (+ -10%) del presupuesto de un proyecto. Centrarse en obtener el código correcto no tiene sentido, hay un 80% del esfuerzo que no ha abordado, por lo que obtener una administración de código perfecta aún le deja con solo 20 del trabajo realizado.

¿Qué pasa si su proyecto no tiene usuarios? ¿Qué pasa si es perfecto pero se publica una semana después del archivo "Acme Patent Trolls" para obtener una patente sobre la idea, y resulta ser el próximo Facebook?

Observe los siguientes problemas estándar del ciclo de vida del proyecto Requisitos, diseño, código, prueba, integración, implementación, seguimiento y corrección de defectos, gestión de cambios de requisitos (solicitudes de mejora). Planes de lanzamiento, asignación de recursos (cuántas horas al día planea hacer y qué hará realmente en el proyecto), Legal (Freedon para operar), etc.

Si todo lo anterior está en su lugar, incluso el código muy malo tendrá éxito. Si ninguno de los anteriores está en su lugar, el mejor código fallará.

No soy un apostador, pero apostaría su primer proyecto "grande" que fracasará, en muchas y variadas formas que no puede imaginar. No se preocupe, siga adelante y falle, aprenda de ello y haga lo siguiente. No comenzar sería el verdadero crimen. Si tiene éxito la primera vez, tiene una sólida carrera en gestión empresarial, no en programación.

Entonces, para responder a su pregunta, guarde las herramientas de software y extraiga sus herramientas de "planificación empresarial". Determine POR QUÉ lo está haciendo, para QUIÉN, luego POR QUÉ y CUANDO lo quieran (Puedes ser tu propio cliente, pero haz el ejercicio de todos modos). Escriba esto en un "Plan de negocios" y construya a partir de ellos.


0
  1. ¿Cómo es el éxito?
  2. ¿Cuáles son las incógnitas en el proyecto?
  3. ¿Cuáles son los conocimientos en el proyecto?
  4. ¿Qué puedes hacer para eliminar / descubrir las incógnitas, para convertirlas en conocimientos?
  5. ¿Qué puedes hacer para reunir los conocimientos para lograr el éxito?
  6. ¿Cuál es el próximo paso concreto a seguir que impulsa el proyecto?

repita el último paso hasta que el proyecto esté terminado; acepta que puede llevar años y sigue avanzando


0

Todas las respuestas aquí son agradables y todas, pero con toda honestidad, no importa cuánto control de versión, git, diagrama de flujo y marcas, solo importa que tenga una aplicación funcional, una aplicación funcional se define como uno que resuelve el problema para el que fue concebido, todas las demás cosas son prácticamente irrelevantes.

Comience a codificar, codifíquelo en una fase funcional, ejecute algunas pruebas, depure, inicie y vuelva a iterar con nuevas características y funcionalidades (si lo considera necesario), muy en la forma de un inicio lean, que es un método ágil de administración y desarrollo para crear menos desperdicio (o como alguien definió: obras maestras a medio terminar).


-1

Lista de cosas que hacer al comenzar un nuevo proyecto:

  1. crear nuevo directorio
  2. crear un archivo MAKE copiando alguna plantilla de archivo MAKE existente
  3. crear algunos encabezados y archivos de implementación
  4. asegúrese de que se compila
  5. comenzar a usar el control de versiones
  6. decidir la convención de nomenclatura para clases, funciones, miembros de datos, variables
  7. escribe tu primera clase
  8. asegúrese de que su clase sea independiente y que cada función miembro sea independiente de otras funciones miembro
  9. crear varios objetos creando funciones como main ()
  10. repita los pasos 7-10 hasta que su programa esté listo
  11. compilarlo
  12. enviarlo a usuarios finales

Se trata de codificación, pero no es ingeniería, y no funciona más allá de cierta escala. En cambio, debe hacer algo a partir de historias o requisitos de usuario o algún tipo de especificación; eso lo ayudará a elegir su tecnología de implementación para comenzar. 'escribir algunas historias', 'ordenar sus historias' son los dos primeros pasos, el control de versiones viene antes que cualquier código, y la primera historia es siempre 'tecnologías de implementación de investigación' (que es mucho más que 'elegir un idioma').
Andrew McGregor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.