El proyecto está casi terminado, pero el código de espagueti de procedimiento. ¿Reescribo o sigo intentando enviarlo? [cerrado]

242

Soy un desarrollador web principiante (un año de experiencia).

Un par de semanas después de graduarme, me ofrecieron un trabajo para crear una aplicación web para una empresa cuyo propietario no es muy experto en tecnología. Me reclutó para evitar el robo de su idea, el alto costo de desarrollo cobrado por una empresa de servicios, y para tener a alguien joven en quien confiar a bordo para mantener el proyecto a largo plazo (llegué a estas conclusiones por mí mismo mucho después de ser contratado )

Engreído como era en aquel entonces, con un diploma en ciencias de la computación, acepté la oferta pensando que podía construir cualquier cosa.

Estaba llamando a los tiros. Después de un poco de investigación, me decidí por PHP y comencé con PHP simple, sin objetos, solo código de procedimiento feo. Dos meses después, todo se estaba volviendo desordenado y era difícil avanzar. La aplicación web es enorme. Así que decidí consultar un marco MVC que me facilitaría la vida. Ahí es donde me topé con el chico genial de la comunidad PHP: Laravel. Me encantó, fue fácil de aprender y comencé a codificar de inmediato. Mi código se veía más limpio, más organizado. Se veía muy bien.

Pero, de nuevo, la aplicación web era enorme. La compañía me estaba presionando para que entregara la primera versión, que querían implementar, obviamente, y comenzar a buscar clientes.

Debido a que fue divertido trabajar con Laravel, me hizo recordar por qué elegí esta industria en primer lugar, algo que olvidé mientras estaba atrapado en el sistema educativo de mierda.

Así que comencé a trabajar en pequeños proyectos por la noche, leyendo sobre metodologías y mejores prácticas. Revisé OOP, pasé al diseño y análisis orientado a objetos, y leí el libro Clean Code del tío Bob .

Esto me ayudó a darme cuenta de que realmente no sabía nada. No sabía cómo construir software DE LA MANERA CORRECTA. Pero en este punto ya era demasiado tarde, y ahora casi termino. Mi código no está limpio en absoluto, solo código de espagueti, un verdadero problema para solucionar un error, toda la lógica está en los controladores y hay poco diseño orientado a objetos.

Tengo este pensamiento persistente de que tengo que reescribir todo el proyecto. Sin embargo, no puedo hacerlo ... Siguen preguntando cuándo se hará todo.

No puedo imaginar este código implementado en un servidor. Además, todavía no sé nada sobre la eficiencia del código y el rendimiento de la aplicación web.

Por un lado, la compañía está esperando el producto y no puede esperar más. Por otro lado, no puedo verme yendo más allá con el código real. Podría terminar, envolverlo e implementarlo, pero solo Dios sabe lo que podría suceder cuando la gente comience a usarlo.

¿Reescribo, o simplemente sigo intentando enviar, o hay otra opción que me he perdido?

serpiente solida
fuente
142
Termínelo de la forma en que comenzó y salde la deuda técnica en la próxima versión (si hay una). Tu jefe no sabrá la diferencia. Asegúrate de probarlo bien.
Robert Harvey
45
"pero solo Dios sabe lo que puede pasar cuando la gente comienza a usarlo" ... esa es la diversión del desarrollo de software. Mejor acostumbrarse;)
linac
144
Este será cada uno de los sistemas que construyas.
Despido
57
El software nunca está terminado y una vez que te acercas, siempre tendrás una idea que te hará desear tirar toda la base de código por la ventana. No lo hagas Entregue un producto que funcione y luego domine el arte de la refactorización. Lo cual será una valiosa lección.
Pieter B
14
Mi padre solía decirme "A veces hay que disparar a los ingenieros y enviar".
corsiKa

Respuestas:

253

Te has topado con el talón de Aquiles de la mayoría de las educaciones de CS: te enseñan las herramientas y técnicas, pero no el oficio. La creación de software es un oficio, uno que solo se adquiere a través de años de práctica y la experiencia de utilizar su software (los usuarios son críticos mucho más duros que los maestros). La creación de software también es a menudo un negocio, uno donde los objetivos comerciales pueden anular las ambiciones técnicas.

En primer lugar, nave. Si le muestra el software al propietario de la empresa y siente que está listo para enviar, envíe. Si no es a ese punto, pero cerca, termínelo. El único software que importa es el que realmente se usa. El único negocio de software que gana dinero es uno que tiene un producto.

En segundo lugar, ha aprendido muchas cosas valiosas, por lo que debe apreciar la experiencia por lo que le ha enseñado :

  1. Lanzar código sin un plan o arquitectura es una receta para el desastre
  2. La programación es mucho más que escribir código
  3. Los dueños de negocios no técnicos a menudo no entienden el impacto de las decisiones técnicas (como a quién contratar), y corresponde a los desarrolladores explicarles las cosas.
  4. La mayoría de los problemas ya se resuelven mucho mejor de lo que los resolvería en los marcos existentes. Vale la pena conocer los marcos que existen y cuándo usarlos.
  5. Las personas recién salidas de la escuela asignadas a un gran proyecto con poca orientación tienden a producir un plato de código de espagueti. Esto es normal.

Aquí hay algunos consejos más sobre cómo proceder:

  1. Comunicarse, comunicarse, comunicarse. Debe ser muy abierto y franco sobre el estado del proyecto y sus ideas sobre cómo proceder, incluso si no está seguro y ve múltiples caminos. Esto deja al dueño del negocio la opción de qué hacer. Si te guardas el conocimiento, los privas de opciones.
  2. Resista la tentación de la reescritura completa. Mientras está reescribiendo, el negocio no tiene producto. Además, una reescritura rara vez resulta tan buena como la imaginaste. En su lugar, elija una arquitectura y migre la base de código gradualmente. Incluso una base de código horrible se puede salvar de esta manera. Lea libros sobre refactorización para ayudarlo.
  3. Aprenda sobre pruebas automatizadas / pruebas unitarias . Debe generar confianza en el código, y la forma de hacerlo es cubrirlo con pruebas automatizadas. Esto va de la mano con la refactorización. Mientras no tenga las pruebas, realice la prueba de forma manual e integral (intente descifrar su código, porque sus usuarios lo harán). Registre todos los errores que encuentre para poder priorizarlos y corregirlos (no tendrá tiempo para corregir todos los errores, ningún software se envía sin errores en el mundo real).
  4. Obtenga información sobre cómo implementar una aplicación web y mantenerla en funcionamiento. El libro Operaciones web: mantener los datos a tiempo es un buen comienzo.
Joeri Sebrechts
fuente
44
Las personas de negocios no técnicas tienen sus cosas en mente y no entenderán las cosas técnicas de todos modos. Depende de los desarrolladores presentarles las opciones técnicamente viables con costos y beneficios (lo que implica cosas tan notoriamente difíciles y universalmente odiadas como aprender a estimar cuánto tiempo llevarán las tareas).
Jan Hudec
1
Esta es la única situación en la que la reescritura completa podría ser apropiada: si básicamente utilizó la primera versión como herramienta de capacitación, la segunda versión será la "que debería haber escrito". Creo que en todos los demás casos, la reescritura es un mal consejo, pero no aquí. No para alguien que escribió el código sin saber realmente lo que estaba haciendo. Eso sí, arreglarlo debería ser otra excelente oportunidad de entrenamiento.
gbjbaanb
2
Tengo una teoría funcional de que "cada código de producción se reescribe al menos una vez". Hasta ahora en mi experiencia profesional, ha sido bastante cierto tanto a nivel macro (arquitectónico) como micro (método). El truco es aprender cuándo estos refactores son apropiados.
zourtney
11
+1 solo para el primer punto. Recuerde a todos, el envío también es una característica .
thegrinner
55
Si a tus abucheos les gusta el sitio, está hecho. Su jefe abaratado y contrató a un nuevo graduado universitario. Él sabía lo que iba a obtener o merece una educación. Su software tiene errores. Vive con ello. Todos lo hacemos. Eres más inteligente que hace un año. Solicite un aumento de sueldo o encuentre un nuevo trabajo (ya sea bueno). Si busca un nuevo trabajo, asegúrese de elegir un empleador con un equipo del que pueda aprender buenos hábitos.
SeattleCplusplus
114

Esto suena como cualquier otro sistema que me han lanzado para arreglarlo.

Relájate, esto le pasa a mucha gente. Un joven arrojado al fondo sin experiencia, sin ayuda, sin apoyo y sin guía no es exactamente una receta para el éxito. Contratar y esperar que un programador junior construya un nuevo sistema desde cero que funcione bien, funcione bien y sea mantenible no es realista en absoluto. Demonios, tienes suerte si todo eso sucede con un programador sénior.

En mi opinión, tienes que estar limpio. Esto no será divertido. Dígales que ha hecho todo lo posible, funciona (principalmente), pero le preocupa que no funcione bien y que haya muchos errores ( siempre hay errores). Debe ser revisado por un programador senior, y deberían poder solucionar cualquier problema evidente de rendimiento / seguridad con bastante rapidez. O pueden desplegarlo y cruzar los dedos. O bien irá bien, o se volverá humo. Tal vez pueda solucionar los problemas a medida que surjan. Si tiene una gran base de usuarios, tal vez no.

O podría hacer lo que la mayoría de la gente hace en esta situación: tomar el dinero, desaparecer y dejar que lo resuelvan. Dejaré que usted decida cuál es la opción ética.

Editar (ya que esta pregunta tiene muchos votos, también podría agregar más contenido)

Parte de las alegrías de ser un programador es que las personas no técnicas (probablemente su gerente, definitivamente el resto del negocio) no tienen idea de lo que hace. Esto es bueno y malo. Parte de lo malo es que tienes que explicar constantemente cómo funcionan los proyectos de desarrollo de software. Planificación, requisitos, revisiones de código, pruebas, implementación y corrección de errores. Es su trabajo explicar la importancia de las pruebas y reservar tiempo para realizar las pruebas. Usted tiene que defender su posición aquí. La gente no entenderá la importancia ( "¿no podemos empezar a usarlo?") pero una vez que comiencen las pruebas (¡no en el entorno en vivo!) comprenderán rápidamente los beneficios. Una de las razones por las que lo contrataron es porque no saben nada sobre el desarrollo de software, por lo que depende de usted educarlos. Debe enfatizar la importancia de las pruebas y la corrección de errores aquí: recuerde que no son programadores, no conocen la diferencia entre una división entre cero y una etiqueta html rota.

A menudo, muchos de los problemas que surgen en realidad no son errores. Serán problemas de usabilidad, requisitos incumplidos, requisitos que han cambiado, expectativas del usuario (¿por qué no puedo usar esto en mi móvil?) Y luego los errores reales reales reales. Debe solucionarlos antes de ponerlo en funcionamiento; a menudo, se pueden solucionar o solucionar muchos errores unos días después. Si las personas esperan un sistema perfecto, sufrirán mucho dolor. Si esperan errores, su vida será mucho más fácil en las próximas dos semanas.

Ah, y no confunda las pruebas de usuario con las pruebas unitarias ni con las pruebas del sistema.

  • Prueba de unidad: ¿la función de mi código devuelve el valor correcto?
  • Prueba del sistema: ¿arroja un error cuando hago clic en X
  • Prueba de aceptación del usuario (UAT): ¿cumple el programa con los requisitos? ¿Hace lo que te pidieron que hicieras? ¿Se puede ir en vivo?

Si no ha anotado los requisitos de lo que le pidieron que haga, UAT será mucho, mucho más difícil. Aquí es donde cae mucha gente. Tener lo que querían que el sistema hiciera escrito en papel hará que su vida sea mucho más fácil. Dirán "¿Por qué no hace X?" y puedes decir "Me dijiste que hiciera Y". Si el programa está mal, corríjalo. Si los requisitos son incorrectos, arregle el documento, solicite uno o dos días adicionales (no, insista en ello), realice el cambio, actualice la documentación y vuelva a realizar la prueba.

Una vez que haya pasado por este proceso varias veces, puede comenzar a buscar Agile ... pero ese es otro mundo :)

TL; La prueba de DR es buena

Rocklan
fuente
77
Verdadero y típico. Diría que incluso es claramente ético irse, no es asunto de los recién llegados los jóvenes administrar la fuerza laboral en el proyecto, por lo que entendería absolutamente si alguien se va por eso.
CsBalazsHungary
1
+1 por admitir que la mayoría de la gente tomaría el dinero y desaparecería. Este tipo de cosas es lo que mantiene a los consultores en el trabajo.
James_pic
No muy buenas definiciones de prueba aquí. La prueba de unidad verifica la especificación técnica de una unidad, la prueba de integración verifica la especificación técnica del sistema de extremo a extremo, la prueba de aceptación (con o sin el "usuario") verifica la especificación comercial de un producto. "Prueba del sistema" podría significar casi cualquier otra cosa que no sea la prueba unitaria. Verificar los valores de retorno no siempre es necesario o útil en una prueba unitaria, y rara vez, si alguna vez, una buena prueba de IU automatizada solo falla si el sistema "arroja un error".
Aaronaught
"Es su trabajo explicar la importancia de las pruebas y reservar tiempo para realizar las pruebas". No soy un programador 'real', pero la mejor manera de explicarlo es si un operador de torno no tuviera un juego de pinzas de marcado en su máquina. La única forma en que sabría que hizo algo malo es cuando QC lo comprueba y le dice que está mal. Si no tiene control de calidad y no tiene pruebas unitarias, es como mecanizar a ciegas una pieza y enviarla por la puerta. Al igual que cualquier otra industria: si no tiene forma de probar su producto, no hay forma de saber si lo que está enviando funcionará.
user2785724
@ user2785724: si estás escribiendo código, eres un verdadero programador. Quizás tengas menos experiencia, pero eso no te hace menos codificador.
Rocklan
61

Siempre que comience desde cero, seguramente cometerá la misma cantidad de errores o más debido al Segundo Síndrome del Sistema . Sus nuevos errores serán diferentes, pero la cantidad de tiempo necesaria para la depuración será similar y, por lo tanto, se desesperará acerca de cómo no encaja bien. También retrasará la implementación en la producción o la implementación de nuevas características si se implementa la primera versión, lo que será un problema grave para la empresa. Joel Spolsky lo llama "el peor error estratégico" que cualquier empresa o desarrollador puede cometer.

El enfoque recomendado es, en cambio, limpiar el desorden inicial poco a poco durante el mantenimiento. Y ni siquiera intentes refactorizarlo por el simple hecho de hacerlo. Además, los gerentes generalmente ven eso como una pérdida de dinero (que a menudo es) y conlleva un riesgo innecesario de introducir nuevos errores. Una vez que haya depurado dolorosamente el código, puede que no sea bonito, pero funcionará. Así que déjelo hasta que necesite tocarlo por otros motivos (ya sea una corrección de errores, una nueva función o simplemente un cambio solicitado por el departamento de marketing). Luego limpie las partes que son más difíciles de ajustar. Esto a menudo se llama la Regla Boy Scout .

Y en ese punto no tiene que discutirlo con el gerente. Solo incluya la refactorización mínima deseada en la estimación de la solicitud. Aprenderá a través de la experiencia cuándo puede darse el lujo de ceder un poco porque la compañía está realmente en una situación y cuando no desea crear problemas en el futuro y simplemente no admite ninguna posibilidad de piratearlo rápidamente.

Por último, un poco más de lectura recomendada: la Gran Bola de Barro .

Jan Hudec
fuente
1
+ long.MaxValue para c2.com/cgi/wiki Me encanta ese sitio, aunque parece un poco muerto.
AnotherUser
44
Nunca había oído hablar de Joel Spolsky, pero solo pasé una hora sólida leyendo algunas de sus publicaciones de blog. Él es absolutamente gracioso y obviamente muy bien informado.
Adam Johns
99
@ AdamJohns: Pero estás usando su software. Ahora mismo. Él es el tipo principal detrás de este sitio.
Jan Hudec
1
@ JanHudec Él y Atwood.
jpmc26
55
Finalmente, alguien más que nunca escuchó de Spolsky antes de visitar este sitio. Al leer aquí, pensarías que fue la segunda venida.
MDMoore313
29

Olvidé dónde lo leí por primera vez, pero solo quería hacer eco, con algo más de fuerza, de lo que otras personas han dicho:

El envío es una característica.

No hay nada peor que ese tipo que sigue "limpiando" el código existente (posiblemente hacky, feo, sucio) que funciona perfectamente bien , presentando nuevos errores, etc. Lo que importa en el mundo real es hacer su trabajo. Has hecho eso. Embarcacion. No se pierda en los rediseños de un proyecto que funciona perfectamente bien, incluso si es feo debajo del capó. Cuando lo arregles, hazlo de forma incremental y conviértete en un buen conjunto de pruebas para que tengas la menor cantidad de regresiones posible.

Patrick Collins
fuente
No estoy seguro de si es el verdadero original, pero este artículo aparece como el primer éxito de Google. Por Joel, por supuesto (ha escrito bastante sobre el tema y lo ha escrito bastante bien).
Jan Hudec
24

Cada proyecto te deja más inteligente de lo que eras antes. Después de cada proyecto, habrá acumulado más experiencia, lo que habría sido muy útil cuando lo tuvo desde el principio. Sé que es difícil no volver a visitar todo y aplicar lo que has aprendido. Pero recuerda:

Lo perfecto es enemigo de lo bueno.

Para el cliente, siempre es mejor tener un buen software ahora que un software perfecto que nunca se lanzará.

Este fue solo tu primer proyecto. Habrá muchos más proyectos en el futuro donde podrá aplicar todo lo que ha aprendido desde el principio.

Philipp
fuente
15

Leí el código limpio del tío Bob.

Tengo este pensamiento persistente de que tengo que reescribir todo el proyecto.

Este libro tiene una sección llamada, muy apropiadamente, "El Gran Rediseño en el Cielo".

No intentes reescribir todo porque, en el improbable caso de que tengas tiempo para hacerlo, enfrentarás los mismos problemas de todos modos. Cuando haya terminado el rediseño, habrá aprendido cosas nuevas y se dará cuenta de que las primeras partes no son muy profesionales, por lo que querrá volver a escribirlo.

El rediseño y la reescritura son buenos, pero solo si se realizan de forma incremental en un sistema de trabajo. Como señaló otro usuario, siga la Regla de Boy Scout, refactorizando su código poco a poco a medida que trabaja en él.

abl
fuente
66
Muy cierto. He estado iterando el diseño de la misma base de código durante una década, y todavía creo que la arquitectura de lo que hice el año pasado es una mierda. Nunca dejas de aprender.
Joeri Sebrechts
1
Y solo para aclarar, lo que hace factibles las mejoras incrementales es que tiene una batería de pruebas para darle cierta confianza de que no está rompiendo la funcionalidad existente. Si te encuentras pensando "No puedo cambiar eso", entonces has identificado un lugar que necesita cobertura de prueba.
PhilDin
9

Lo estás haciendo bien.

Dices que tu código funciona y está casi listo para enviar, ¿verdad? Y percibes que tu código puede mejorarse enormemente. Bueno.

Su dilema me recuerda mucho a mi primera experiencia con el trabajo independiente (ser contratado durante mi segundo año en la universidad para crear un sistema de TPV multilingüe). Pasé por un interminable cuestionamiento ya que nunca estaba satisfecho con el código, quería escalabilidad, quería reinventar mejores ruedas ... Pero simplemente retrasé el proyecto (aproximadamente 12 meses aproximadamente) y ... ¿qué? Una vez que implemente la cosa, todavía necesita muchas pruebas, pruebas, parches, etc.

¿Tiene experiencia trabajando con bases de código profesionales? Muchas bases de código están llenas de código peculiar y difícil de mantener. Una alternativa para descubrir la complejidad del software al intentar construir un gran programa usted mismo sería mantener / extender un código igualmente desordenado escrito por otras personas.

Los únicos casos en los que he visto reescrituras completas hacen mucho bien es cuando el equipo adoptó simultáneamente una nueva cadena de herramientas / marco.

Si la lógica subyacente (lo que hace el programa, no cómo se presenta como funciones, clases, etc.) es sólida, funcionará igual de bien, por lo tanto, si crees que es un código de espagueti no significa No debe ser desplegado.

Debe dejar que su cliente tenga algo que pueda usar. Luego, cuando le piden que lo mejore / agregue funcionalidad, usted decide si es necesario un refactor, y está bien informarle a su cliente que "se necesita algún trabajo técnico para integrar dicha nueva característica". Por lo cual entenderán que les costará más dinero y tendrán que esperar más. Y lo entenderán (o puedes retirarte).

Un mejor momento para reescribir todo sería cuando otro cliente le pida que cree algo similar.

En resumen, a menos que pueda demostrar que todo el asunto explotará en la cara de todos si se implementa, retrasar la implementación no sería profesional y no beneficiará ni a usted ni a su cliente. Aprender a hacer pequeños refactores mientras corrige errores o agrega nuevas características, será una experiencia valiosa para usted.


fuente
7

La mayoría de lo que diría en respuesta a su pregunta ha sido dicho por otros. Lea "Cosas que nunca debe hacer, Parte I" de Joel Spolsky (junto con algunas de sus otras publicaciones sobre "astronautas de la arquitectura"). Recuerda que "lo perfecto es enemigo de lo bueno". Aprende a refactorizar gradualmente. El envío es importante, etc.

Lo que agregaría es esto: se le ha encomendado algo que un nuevo graduado considera factible trabajar con un pequeño presupuesto / marco de inicio. No debería necesitar nada mucho más sofisticado que una buena programación, estructurada y procesal. (Y para su información, "programación de procedimientos" no es una mala palabra. Es una necesidad en algún nivel en la mayoría de los casos, y es totalmente adecuada para muchos proyectos completos).

Solo asegúrate de hacer una programación estructurada y procesal. La repetición en su código no es necesariamente una señal de que necesita grandes estructuras polimórficas. Podría ser simplemente una señal de que necesita tomar el código repetido y ponerlo en una subrutina. El flujo de control de "espagueti" puede ser simplemente una oportunidad para deshacerse de un mundo.

Si hay aspectos del proyecto que legítimamente requieren polimorfismo, herencia de implementación, etc., sugeriría que tal vez se subestimó el tamaño del proyecto.

usuario1172763
fuente
44
Agregaría que el código de espagueti no se limita al código de procedimiento. El uso incorrecto del polimorfismo y la herencia puede conducir a un desorden que es mucho peor de entender que muchas piezas de procedimiento enrevesadas. No importa si el flujo de control salta por todos lados usando procedimientos mal definidos o herencia en una jerarquía de clase complicada; Todavía salta por todo el lugar y es difícil de seguir.
Jan Hudec
4

Si está realmente interesado en el dilema que tiene, también debe leer "Lean Startup". Muchos de los consejos que te están dando aquí resonarán más contigo si lees ese libro. Básicamente, la tasa de consumo de recursos es su peor enemigo y nada es más valioso para usted y su organización que los comentarios de los usuarios finales / clientes. Por lo tanto, lleve su producto a un estado viable (el Producto mínimo viable - o MVP) y luego envíelo por la puerta (independientemente de cómo se vea realmente el código). Deje que sus clientes dicten sus futuros conjuntos de cambios y versiones, no al revés. Si te enfocas en ese enfoque, tanto tú como tu jefe serán más felices a largo plazo.

Codificador desconocido
fuente
4

Por razones que otros han explicado a fondo, es hora de terminar el proyecto y enviarlo, por muy doloroso que pueda ser.

Solo me gustaría enfatizar que probar la aplicación también es parte de "terminarla". Si no se han ejercido a fondo piezas significativas de funcionalidad y se han confirmado los resultados correctos, entonces está justificado su preocupación de que las personas tendrán problemas con esta aplicación cuando se implemente.

Las pruebas unitarias y las pruebas automatizadas de nivel superior son excelentes y son cosas que debe tener tanto como pueda antes de intentar refactorizar (o reescribir) esta aplicación. Pero en este momento, principalmente, debe probarlo , incluso si tiene que ejecutar cada prueba "a mano" y confirmar el funcionamiento correcto "a ojo". Si puede descubrir cómo automatizar esas pruebas más adelante, eso ayudará cuando llegue el momento de comenzar a trabajar en la próxima versión del producto.

Algunas personas tienen la habilidad de sentarse frente a un nuevo proyecto de software como usuarios de pruebas alfa y hacer que las cosas salgan mal. Es decir, son buenos para romper cosas. Si tiene la suerte de tener una persona tan talentosa trabajando con usted, permítale que pruebe la aplicación primero para que tenga la oportunidad de corregir cualquier error obvio antes. Si tiene que hacer esta tarea usted mismo, entonces:

  • Sé metódico
  • Prueba todas las funciones.
  • Imagina que eres un usuario inexperto con tu aplicación. Cometa errores estúpidos y vea cómo los maneja el software.
  • Escriba lo que está haciendo para que pueda volver a intentarlo después de pensar que ha solucionado los problemas.
David K
fuente
Estoy totalmente de acuerdo con esto. No olvide probar manualmente en producción también. No importa cuántas pruebas haya realizado en el entorno de desarrollo, siempre debe realizar pruebas de cordura en el entorno en vivo después de cada implementación. Puedes pedirles a tus colegas que te ayuden con esto.
Will Sheppard
1

Su pregunta dice: "Comenzó mal, debería comenzar de nuevo", mientras que el texto adicional en realidad dice "Proyecto terminado, pero lo hice mal, debería comenzar de nuevo". Solo para el título de la pregunta: si la cantidad de trabajo de programación que ha realizado es pequeña en comparación con el trabajo total necesario, entonces comenzar de nuevo tendrá sentido. Eso sucede mucho cuando el problema es complejo y mal entendido, y se dedica bastante tiempo a descubrir cuál es realmente el problema. No tiene sentido continuar con un mal comienzo, si tirarlo y comenzar de nuevo, esta vez con una buena comprensión del problema, significa que realmente terminará más rápido.

gnasher729
fuente
0

Esto es lo que haría personalmente:

  1. Renunciar, poner una excusa y rendirse (incluso puede devolver parte de su salario para que no se vea mal)
  2. Limpia tu código tanto como sea posible
  3. Haga documentación sobre todas las partes buenas de su trabajo, como su buen diseño, buenas ideas, etc.

¿Por qué te sugiero todo esto?

Porque piensa en el futuro. Habrá tiempo en el futuro cuando ciertas personas se apoderarán de este código. Harán todo tipo de suposiciones y juicios sobre usted y su habilidad. No les importa cuando lo escribiste, no les importa la circunstancia. Solo quieren ver en él lo que quieren ver para confirmar lo que quieran confirmar.

Usted será calificado como cualquier mal nombre, término que puedan llegar a tener un impacto negativo en usted. Y aunque usted en el futuro bien podría ser totalmente diferente en términos de habilidad técnica, habilidades, conocimiento, estilo y la situación será muy diferente, este código se usará en su contra de todas las formas posibles. Es como un tribunal donde pueden decir todas las cosas malas sobre usted y su código y diseño, y ni siquiera lo saben para poder explicarse y defenderse. (y es posible que aprenda muy a menudo que están profundamente equivocados, repetidamente). No lo haga. Rendirse.

Confía en mí, hay personas que hicieron muchas suposiciones sobre ti porque hiciste algo para cualquier propósito en cualquier momento. Para ellos, si les gustó esto en la situación A, lo harán en la situación B. Piensan que es muy simple.

InformadoA
fuente
0

Dos sugerencias más, apostaría al menos una de estas que no ha hecho.

1) Coloque un rastreador de errores y enséñele a su jefe a usarlo. Esto puede ser parte de la conversación sobre cómo te equivocaste, aprendiste mejor y lo arreglarás de manera planificada

2) Comience a usar el control de versiones, aunque espero que ya lo esté haciendo.

Hay montones de sistemas alojados que ofrecen tanto lo anterior de forma gratuita en pequeñas cuentas. Soy particularmente aficionado a FogBugz, que también tiene un excelente sistema de estimación y finalización de tareas que le dará a su jefe aún más certeza de que está abordando las cosas de una manera bien administrada.

editar

Wow, a alguien realmente no le gustó esto: ¿un voto negativo Y una bandera de eliminación? ¿Por qué?

He estado desarrollando software durante más de treinta años, incluyendo mucho trabajo de consultoría y heredando el código de otras personas. Una gran cantidad de los sistemas problemáticos que he visto han sido donde las personas cavaron un pozo y no tenían notas detalladas sobre cómo llegaron allí ni tenían control de versiones.

Andy Dent
fuente
-2

Para responder a su pregunta: como tantos otros han dicho, no. Envíalo y límpialo poco a poco en el proceso de corregir errores.

Además, si bien los libros / StackExchange / webforums son buenos recursos de aprendizaje, es probable que descubra que nada puede igualar el aprendizaje que recibirá al trabajar (o incluso hablar sobre el trabajo) con otros programadores. Encontrar y asistir a un grupo local para una tecnología que está utilizando o le gustaría aprender es una maravillosa inversión de su tiempo. Además del conocimiento técnico que se va a adquirir, es una forma fácil de establecer contactos que es invaluable a medida que esperas conciertos futuros.

Chris Kelly
fuente
-2

Tu jefe estaba al tanto de tu nivel de experiencia cuando te contrató. Solo expresa tus preocupaciones y hazle saber que estás nervioso por eso. También hágale saber cuánto ha aprendido y cuánto mejor puede hacer el próximo proyecto.

David Carpenter
fuente
-2

Eres un desarrollador web principiante, sin un buen desarrollador presente que te aconseje, tu jefe te contrató sabiendo esto completamente bien. Creo que lo estás haciendo tan bien como cualquiera podría esperar que lo hagas. En realidad, el hecho de que tenga la idea de que el trabajo podría haber sido mejor, y de que realmente aprendió cosas que le permitirían hacerlo mejor, significa que lo está haciendo mejor que la mayoría. Recuerde por su propia cordura que la versión de usted que comenzó el trabajo no podría haberlo hecho mejor. Alguien más experimentado (y por lo tanto mejor pagado), o usted con un proyecto de experiencia, podría haberlo hecho mejor.

Qué hacer ahora : Sé feliz de ser un mejor desarrollador que hace un año. El próximo proyecto lo hará mejor (y al final volverá a tener más experiencia y no estará contento con lo que ha hecho; eso es normal). Cambiar o reescribir el último proyecto le dará al negocio muy poco beneficio por el costo. Lo que puede hacer es reemplazar el código incorrecto con un código bueno cuando necesite hacer cambios de todos modos; eso tiene sentido porque modificar código mal mantenible puede ser más difícil que reemplazarlo con un buen código. Y si consigue que un nuevo desarrollador inexperto lo ayude, dígales que este código no es un ejemplo que deberían copiar.

gnasher729
fuente