Ahora mismo tengo un cliente que me exige que desarrolle un sistema de inscripción escolar. Ahora es la primera vez que tengo este tipo de desafío. La mayoría del software anterior que creé no es tan complejo.
Sé que la mayoría de ustedes han creado softwares complejos, solo quiero su consejo sobre esto. ¿Debo diseñar primero el front-end o el back-end?
¡Gracias!
Aquí hay una conclusión de un artículo que encontré en Internet hace un tiempo. Solo que compartir
http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157
Desarrolladores front-end versus back-end (mi opinión)
Mi toma personal
Nuevamente, es una cuestión de entrenamiento, algunas generalizaciones generales del accidente cerebrovascular:
Desarrolladores frontales
- Por lo general, no tengo un título de CS o un título de CS de una escuela de tercer nivel.
- Trabaja en lenguajes similares a los básicos (ver PHP es Básico)
- Tener una habilidad visual para convertir documentos de Photoshop a CSS / HTML / etc.
- Tener una alta tolerancia para la programación iterativa, debido a los lenguajes libres de tipo
Desarrolladores finales
- Tener un título de CS o mucha experiencia
- Me tienden a ser más sistemáticos en su enfoque de resolución de problemas.
- No te importe pasar días buscando el único objeto que está goteando
- Prueba y crea herramientas para resolver problemas
Respuestas:
Si comienza en la parte posterior y avanza, corre el riesgo de malinterpretar al cliente. Como creará cosas que no pueden ver y comprender fácilmente, no pueden participar fácilmente para verificar si cumple con los requisitos. Esto significa que puede desperdiciar mucho trabajo.
Si comienza en la parte delantera y retrocede, corre el riesgo de que el cliente piense que está casi listo, cuando todo lo que ha hecho es dibujar un formulario simple en la pantalla. Luego pueden preguntarse por qué está tomando tanto tiempo, ya que lo terminaron en pocos días. También corre el riesgo de pintarse en una esquina, cuando se da cuenta de que tiene que hacer un trabajo complicado para casar el frente con la parte posterior, cuando un front-end más adecuado hubiera sido más simple.
OMI, deberías trabajar en ella primero. Escriba el frente y el reverso juntos, para cada característica del sistema. Esto le da al cliente una mayor visibilidad del progreso y le da la oportunidad de decir "no, eso no es lo que quise decir", sin causarle demasiada angustia.
Dicho esto, si este es un proyecto muy grande en el que necesita considerar el hardware del servidor o las capacidades de cualquier software en el que confíe (por ejemplo, qué base de datos está usando), entonces probablemente debería pensar primero en esa parte.
fuente
El software tiene muchas dimensiones, por lo tanto, un frente demasiado simple es una pregunta pobre y es muy, muy difícil proporcionar una respuesta sensata y útil.
Una vista es la estructura estática de los datos. Hay al menos tres dimensiones en esta vista: capas arquitectónicas ("de adelante hacia atrás"), casos de uso y actores, así como costos o riesgos de implementación.
Una vista es la estructura dinámica del procesamiento. Hay al menos tres dimensiones para esta vista, también.
Una tercera vista son los componentes arquitectónicos, que se dividen naturalmente en capas, admiten casos de uso y tienen costos y riesgos.
Podría seguir, pero el punto es este.
Es aproximadamente la forma menos útil de ver el problema. Los desarrolladores reales, y sus opiniones sobre ellos, importan muy, muy poco aquí. Lo que importa son
Casos de uso y actores
Modelo de datos lógico para soportar esos casos de uso
Proceso que se realiza como parte del caso de uso
Componentes que usará para construir esos elementos lógicos y de procesamiento del caso de uso.
Es por eso que la mayoría de la gente dice que necesita descomponer su sistema por historia de usuario o caso de uso.
No hacer generalizaciones generales sobre las personas que estarán desarrollando.
fuente
Ninguno. ¿Qué necesita tu aplicación para poder hacer? Asegúrese de que la válvula caliente entregue agua caliente, la válvula fría entregue agua fría, que el agua fluya en primer lugar, que pueda extender las tuberías donde sea necesario y luego preocuparse por implementar la tubería real en todas las habitaciones de la casa o lo que la casa hará En realidad parece exactamente.
La parte frontal es solo una máscara con algunos interruptores y palancas. El back-end es solo una cosa que recibe solicitudes para recuperar y procesar datos. Llegue a un punto donde pueda implementar rápidamente ambos en cualquier combinación deseada primero.
Pero hagas lo que hagas, no dejes que el diseño de uno dicte el diseño del otro. De esa manera yace la locura.
Obtenga las herramientas en su lugar para que sus desarrolladores puedan construir lo que necesiten para su cliente, independientemente de cuántas veces cambien de opinión. Luego compílelo según las especificaciones y vuelva a encenderlo hasta que los pequeños malditos finalmente estén contentos.
Además, comparar desarrolladores front-end con desarrolladores back-end en 2008 es hace mucho tiempo en años web. En aras de la diversión, me gustaría corregir / agregar algunas cosas a esa vieja castaña ya que la hemos vinculado en la pregunta, pero también (con suerte) incluir algunos consejos en:
Desarrolladores frontales
Por lo general, no tengo un título de CS o un título de CS de una escuela de tercer nivel.
Votación a mano alzada. ¿A cuántas personas con títulos de CS se les han enseñado las mejores prácticas en el front-end? ¿O cómo no hacer un lío con JavaScript? ¿O cómo manejar los problemas de CSS de IE6-IE9? La industria de los libros de texto, que dirige la academia, es demasiado holgazana e hinchada para manejar tecnología en constante cambio, por lo que ha recibido muy poca atención "seria" en las universidades. Esto ha sido excelente para los que florecen tarde como yo.
Trabaja en lenguajes similares a los básicos (ver PHP es Básico)
¿Porque PHP es tecnología del lado del cliente? ¿O porque JavaScript, que se inspiró principalmente en Scheme, tiene más en común con Basic que con Visual Basic, que ahora ya no es una preocupación permanente en el front-end y que nunca estuvo realmente, pero todavía está disponible para aplicaciones web .NET de back-end? El blog compara desarrolladores web autodidactas de código abierto con desarrolladores web graduados de CS que usan tecnología popular corporativa en este punto, creo. Me he encontrado insufrible y competente en partes iguales en ambos lados de esa pelea en particular, pero todavía está en OT allí.
Tener una habilidad visual para convertir documentos de Photoshop a CSS / HTML / etc.
Más atención al detalle que "habilidad visual", que es un poco amplia. No todos tenemos habilidades estéticas de diseño. Pero sí, la mayoría de nosotros tenemos que aprender estas cosas al nivel de Jr. y en realidad es bastante crítico para escribir una buena interfaz de usuario que no use martillos JS cuando los escalpelos CSS lo harán.
Tener una alta tolerancia para la programación iterativa, debido a los lenguajes libres de tipo
Esta es la razón por la que quieres que las piezas que mencioné anteriormente estén colocadas primero. Pasamos los botones presionados, usted produce / recupera los productos. Los empaquetamos y los entregamos. No hay ninguna razón para que estas cosas estén estrechamente vinculadas entre sí. También realmente, la mecanografía estricta no debería interferir con un proceso iterativo si no apestas en OOP, que la mayoría de las personas a las que les gusta ser arrogantes acerca de un idioma que técnicamente no tiene clases, de hecho lo hacen, por lo general. Pero incluso si apestan, la parte frontal solo necesita un punto de acceso predecible y puede hacer lo que quiera en la parte posterior siempre que no haga algo tonto como escribir dinámicamente JavaScript que no sea JSON o unir estrechamente el comportamiento exitoso de back-end a la estructura HTML "solo así" * tos * desarrolladores de Java * / tos *
fuente
No hay una única respuesta correcta a esto. Cualquiera de los dos enfoques puede ser bueno (y malo) en ciertas situaciones.
Le recomiendo que considere el enfoque TDD, donde uno es liderado por pruebas (de aceptación y unidad).
Comience armando un esqueleto del sistema: la infraestructura básica, con la funcionalidad mínima absoluta. Esto es solo para mostrar que su concepto funciona y que los diferentes componentes pueden trabajar juntos. Esto también incluye una interfaz de usuario básica (si corresponde), lo suficiente para hacer y / o mostrar algo mínimo.
Luego, desarrolla los detalles, característica por característica : escriba una prueba de aceptación para una característica / escenario específico, haga que falle y luego escriba código para satisfacerla. Esto lo hace trabajar hacia adentro desde el exterior : el sistema recibe algún mensaje de entrada, por lo que debe manejar / convertir ese mensaje, hacer algo con él y luego propagar los resultados a la interfaz de usuario. En el camino descubrirá los conceptos de dominio y los representará con nuevas clases, desde la interfaz de usuario hacia la capa de dominio y viceversa.
Para este enfoque, una lectura recomendada es Crecer software orientado a objetos, guiado por pruebas .
fuente
API primero
Los ingenieros de ambos equipos deben trabajar juntos en la API entre el front-end y el back-end. Luego, ambos equipos pueden comenzar a trabajar según la API diseñada. Esto tiene la ventaja de que otro equipo de front-end también puede comenzar el trabajo (tal vez móvil, después del cliente web) además de la ventaja obvia de que los equipos pueden comenzar a trabajar en paralelo.
Combine con un enfoque iterativo y debería verse así:
fuente
Comience con la interfaz, pero primero, ¿por qué no pueden encontrar una aplicación que ya existe? Esto daría más información sobre este proyecto. ¿Tienen algunos requisitos únicos o creen que se puede construir más barato?
Obtenga una comprensión completa de sus expectativas de seguridad y de lo que exige la ley. No estoy seguro de qué tipo de escuela es esta, pero la información del estudiante generalmente requiere cierta confidencialidad.
Si los estudiantes potenciales ingresan los datos en un sitio web, el diseño gráfico será más problemático.
En función de sus solicitudes, dibuje maquetas de la interfaz. Si crees que la interfaz gráfica de usuario no es directa, es posible que tengas que hacer algo funcional para que puedan verlo en acción. Pueden ver la inscripción como algún tipo de 'asistente' que se ramifica en diferentes direcciones según la entrada de datos.
Entonces puede comenzar a obtener información persistente en la base de datos.
fuente
Sí, me di cuenta de que el OP preguntó hace un tiempo. Comience en el extremo posterior, pero HAGA ARRIBA el extremo frontal para permitir que el usuario vea lo que imagina. La parte delantera, por todo lo que vale, son solo las campanas y los silbatos. La parte de atrás es donde está el dinero, y una vez que lo tienes claro, la FE es solo la salsa sobre la carne.
fuente
Ampliando mi comentario:
Primero reúna los requisitos, luego conviértalos en Casos de uso y diseño.
Primero viene una definición detallada de la base de datos. No me importa si el cliente no lo asimila por completo, los obligo a sentarse y mirarlo, y cerrar la sesión (posiblemente luego obligándome a darse cuenta de que una vez que sus muchachos más expertos en tecnología deberían hacerlo ), antes de continuar.
¿Cómo puedes comenzar con FE, sin BE? ¿FE para qué? Define tu base de datos !! Eso es lo que manipula la FE.
Ok, no habrá problemas y ajustes posteriores, y hacerlo de acuerdo que es bueno para obtener un simple, muestra, interfaz gráfica de usuario frente al cliente lo antes posible, ya que la punta del iceberg particular, es lo que la mayoría entiende más.
Sin embargo, yo 1) enfatizo que esto es solo una maqueta aproximada, para marsopas de discusión, y 2) deliberadamente lo hago feo, pero funcional , de modo que aquellos que no entienden pueden molestar y decirme que haga ese cuadro de entrada exactamente 400px de ancho y el fondo azul claro.
Creo que la mayoría de las respuestas aquí (y las he seguido) tienden a centrarse demasiado en el cliente, pero, desde un punto de vista puramente s / w, afirmo que no se puede diseñar un FE para manipular un BE sin primero diseñando ese BE.
fuente