Luchando como programador. Necesito un consejo [cerrado]

20

He sido desarrollador por varios años. Soy bastante bueno en lo que hago y puedo "hacer el trabajo".

Pero, hay una diferencia entre "hacer el trabajo" y "hacer el trabajo correctamente". Usemos un ejemplo.

Recientemente desarrollé un sitio web desde cero. El sitio web funciona bien y no he tenido problemas. Al revisar el código, pensé que podría haberlo hecho mejor. Podría haber reducido mis consultas MySQL. Podría haber usado MVC haciendo que sea más fácil de extender (ahora necesita extenderse).

Decidí reescribir el proyecto usando CodeIgniter. Me gusta el marco Pero luego me desvió porque para reducir mis consultas de MySQL tuve que aprender uniones avanzadas.

Y este es el problema. Cada vez que hago un trabajo correctamente estoy en una rueda de aprendizaje constante. Y temas como las uniones avanzadas de MySQL toman tiempo para aprender y luego tiempo para implementarse.

No trabajo para una empresa. Hago todo solo. Así que me imagino que si estuviera trabajando como desarrollador de PHP para una empresa, habría equipos separados manejando el SQL.

Estar solo es difícil. Y a veces, aunque mi conocimiento es avanzado, me encuentro preguntando, pregunta tras pregunta. Probablemente tengo mucho orgullo en mi trabajo. Pero si tuviera que trabajar para una empresa que maneja proyectos completos, podría imaginar proyectos que tarden un tiempo porque tendría que aprender más y más para satisfacer mi orgullo y asegurarme de que estoy haciendo las cosas "correctamente".

Planeo conseguir un trabajo después del año nuevo. Necesito la seguridad laboral. Por eso estoy haciendo esta pregunta.

¿Qué consejo puedes dar en términos de autodesarrollo y superación personal? ¿Debería preocuparme menos? ¿O tal vez buscar un trabajo como desarrollador PHP cuando no voy a manejar consultas SQL directamente?

James Guvna Jeffery
fuente
54
si no se quiere estar aprendiendo constantemente se encuentra en el campo equivocado
66
@JamesGuvnaJeffery: si no permiten (en absoluto) tiempo (en absoluto) para aprender durante un proyecto, no me gustaría trabajar allí porque, como desarrollador, dejaría de mejorarme.
Marjan Venema
3
el trabajo es aprender, no te dan este tiempo mágico para estudiar, de hecho lo hacen, se llama "tu tiempo personal". No lo llaman "entrenamiento en el trabajo" sin ninguna razón. Si no se siente cómodo siendo un aprendiz autoiniciado y aprendiendo todo el tiempo sin paga, como dije, probablemente esté en el campo equivocado.
55
Se supone que el viejo código apesta. No te mates por eso; solo trata de mejorar con el tiempo. Reescribir un proyecto de trabajo apenas tiene sentido práctico. Los clientes no pagarán extra por ello. codinghorror.com/blog/2006/10/…
Trabajo
2
No entiendes lo que digo, trabajar para una empresa es exactamente lo OPUESTO de lo que estás defendiendo que te encanta hacer. Está trabajando en el horario de otra persona, usando lo que dictan y cómo lo dictan con nada más que compromisos y sin tiempo para estudiar cosas nuevas en su tiempo y sin tiempo para implementar cosas nuevas y emocionantes que aprendas en tu tiempo personal. Esta es la realidad de ser un desarrollador de software corporativo. Dudo que esté tan dedicado a un entorno corporativo como dice que está a su estilo experimental de investigación y desarrollo al que está acostumbrado.

Respuestas:

33

Consejo: No tenga miedo de aprender cosas nuevas: dio un buen primer paso al reconocer que podría hacerlo mejor y luego hizo el esfuerzo de aprender cómo podría hacerlo mejor. Sí, lleva más tiempo por adelantado, pero la recompensa generalmente vale la pena a largo plazo. Ahora que conoce CodeIgniter, puede usarlo para los próximos proyectos futuros. Puedes ponerlo en tu currículum. Ahora que conoce técnicas avanzadas de SQL, sus proyectos futuros se beneficiarán. Si dejas de aprender, te estancarás.

FrustratedWithFormsDesigner
fuente
21

Lo que estás pasando me suena bastante normal. Así es como trabajamos en nuestro oficio y mejoramos cada vez más en lo que hacemos.

grokus
fuente
10

... Decidí reescribir el proyecto usando CodeIgniter. Me gusta el marco Pero luego me desvió porque para reducir mis consultas MySQL tuve que aprender uniones avanzadas.

Y este es el problema. Cada vez que hago un trabajo correctamente, estoy en una rueda de aprendizaje constante. Y temas tales como MySQL avanzada se une a tomar el tiempo para aprender, y luego el tiempo para poner en práctica ...

Bien dicho anteriormente, creo que tiene sentido que se concentre en mejorar su capacidad para planificar con anticipación, establecer y priorizar la cola de trabajo, administrar su tiempo, cosas así.

Realmente, esto parece ser lo único que falta en tu actitud. Lo que usted llama "desvío" es esencialmente otro trabajo ("aprender combinaciones avanzadas") que debe planificarse, priorizarse y ponerse en cola.

mosquito
fuente
Gracias @gnat. Realmente aprecio estas respuestas positivas. Definitivamente puedo estar de acuerdo contigo en lo que dijiste.
James Guvna Jeffery
9

Ser un profesional en este campo es aplastarse constantemente contra su propia insuficiencia. Haga eso de 8 a 5 de lunes a viernes, tal vez más si se acerca una fecha límite, tenga un buen fin de semana y regrese por más el lunes. Ese es el trabajo

Hacer software requiere una cierta humildad. Si eres alguien que tiene que estar en lo cierto, y que tiene que demostrar que ya lo sabía todo, este puede no ser el campo para ti.

No puedo entender no aprender algo todos los días. No creo que quiera ese trabajo.

Dan Ray
fuente
Mi experiencia es que está bien ser alguien que tiene que estar en lo cierto, siempre y cuando también pueda tener insuficiencia estomacal. Me pateo sobre cada pequeña cosa que no es perfecta. Es por eso que hago las cosas mejor a medida que pasa el tiempo.
Tom Anderson
Bueno, esa es la paradoja, ¿no? Hubris es una de las tres virtudes del programador. Pero en mi experiencia, ser "impulsado compulsivamente a demostrar que soy inteligente al demostrar que ya sabía todo antes de aprenderlo" es una tendencia que los desarrolladores novatos dejan de lado o no duran mucho en este campo.
Dan Ray
¿Quizás acelerar más que soltarlo? Hace mucho tiempo, afortunadamente, abandoné el hábito de proclamar que sabía cosas que no sabía. Sin embargo, todavía odio admitir que no sé las cosas; La necesidad de cerrar la brecha entre lo que sé y lo que quiero poder decir que sé es un gran motor para mí. ¡No necesariamente para todos!
Tom Anderson
No lo se, Tom. Me parece que ese momento de vergüenza es que aún no sabes que algo es un momento en el que podrías estar aprendiendo. Me gusta saber tanto como el próximo, pero no tengo ningún problema para decir "No sé".
Dan Ray
6

Estar solo es difícil. Por el contrario, cuando trabaja con un equipo de desarrolladores, todos aprenden unos de otros. Como parte del equipo, aprenderá mucho al trabajar con otros desarrolladores y con mucho menos esfuerzo que cuando intenta resolver todo por su cuenta.

Dicho esto, como desarrollador, debes comprometerte a aprender constantemente. Ya sea que esté leyendo documentación para nuevos marcos o libros sobre desarrollo, debe hacer un esfuerzo constante para mantener su conocimiento actualizado y en crecimiento. Sin embargo, ser parte de un equipo puede aclarar sobre qué área necesita aprender más en un momento dado.

Con respecto a su punto sobre volver a visitar su código anterior y reescribirlo: descubrí que mi propio código siempre representa lo mejor de lo que sabía en el momento en que lo escribí. Muchas veces vuelvo a algo que escribí hace años y me golpeo en la frente, cuando veo cuánto mejor podría haber hecho, dado lo que sé ahora . Pero esa es la naturaleza de la experiencia, la obtienes después de que la necesitas ...

Por último, cuando está desarrollando una aplicación, siempre necesita ejercer un buen sentido comercial, para decidir cuándo es mejor cortar las esquinas para terminar más rápidamente, y cuándo es necesario tomarse más tiempo para aprender algo nuevo que mejore el diseño y la calidad. de la aplicación. Hay un universo de cosas para aprender en el mundo del software. Sin ejercer ese tipo de buen juicio, podría encontrarse dando vueltas aprendiendo, pensando, rediseñando, pero nunca haciendo nada.

Sam Goldberg
fuente
+1 para la segunda oración. He aprendido más de mis colegas, trabajando en varias organizaciones diferentes, de lo que he aprendido leyendo (libros o en línea). Parece que su pregunta es que trabajar en equipo por un tiempo le haría un mundo de bien.
Dawood dice reinstalar a Mónica el
3

Creo que sus inquietudes son válidas, pero no debe perder el sueño. Creo que un ser tecnólogo viene con el siguiente equipaje:

  • Debes aprender constantemente cosas nuevas. O aprendes a amar esto, o no.
  • Hay muchas más cosas que querrás dominar de lo que uno podría saber.
  • Desarrollará habilidades durante un proyecto que desearía tener durante el proyecto.
  • Como resultado, siempre querrá regresar y rehacer ese proyecto. Es muy difícil lanzar algo que sabes que podría ser mejor.

Al final, parece que te importa construir software de calidad, que es algo que no puedes aprender . Sepa que necesita diferenciar la construcción de una solución de alta calidad con la construcción de algo que sea perfecto. Parece que eres como yo, y nunca sentirás que es perfecto. Sería más preocupante si no sintiera que tiene la oportunidad de mejorar usted mismo y su trabajo.

Es difícil ser un experto en todos los oficios (maestro de ninguno), pero realmente necesita descubrir cómo identificar las cosas que son más interesantes y útiles para usted, y centrarse en ellas. Descubra la mejor manera de "subcontratar" otro trabajo a otras personas o herramientas .

Joe
fuente
2

Creo que debe preocuparse menos por "hacerlo correctamente". Esfuércese por la perfección, pero tenga en cuenta que realmente no es posible diseñar una solución perfecta, más aún la primera vez. El hecho de que esté lo suficientemente preocupado por hacerlo correctamente para hacer esta pregunta significa que ya está en el camino correcto.

En cuanto a su frustración por aprender cosas nuevas, descubrí que trabajar en grupo y poder preguntar y discutir el problema con otros programadores eliminó el dolor de descubrir qué era lo que necesitaba aprender y lo reemplacé con la alegría de descubriendo algo nuevo y aprendiendo cómo aplicarlo.

Me encanta escribir software, pero a veces hay dolor no en el aprendizaje real de algo nuevo, sino en encontrar qué es exactamente lo que necesitas aprender para poder lograr lo que quieres hacer.

Por lo que entiendo, he estado en una posición similar a la tuya. Codificar algo solo puede ser frustrante y difícil a veces, y gratificante y algo divertido en otros momentos.

Haz exactamente lo que planeas hacer, encuentra un trabajo en el que serás parte de un equipo (y haz todo lo posible para asegurarte de conseguir un trabajo en algún lugar que no apesta). Trabajar con otras personas que usan las mismas tecnologías y diseñan el mismo software ampliará su comprensión y aplicación de esas tecnologías y patrones de diseño casi de la noche a la mañana.

En cuanto a saber cómo hacer algo bien la primera vez, bueno, ¿cómo sabrías que hay una mejor manera a menos que ya lo hayas hecho de cierta manera la primera vez? La habilidad en el diseño de software a menudo depende en gran medida de la experiencia. Joel Spolsky es un genio del software, pero si lee muchos de sus artículos, notará que son el resultado de la experiencia y la inteligencia.

En cuanto a la parte de SQL, como desarrollador de .NET todavía tengo que trabajar en cualquier lugar que tenga un desarrollador de base de datos dedicado, todos escribimos nuestro propio SQL, pero a menudo hay desarrolladores que son realmente buenos en SQL y están dispuestos a ayudarlo. con las cosas más profundas.

Suenas como un tipo inteligente, no creo que debas ser tan duro contigo mismo.

333Mhz
fuente
1

Esto es totalmente normal y no es algo de lo que deba preocuparse demasiado. Necesitas aprender continuamente nuevas habilidades, pero también debes aprender a priorizar y administrar tu tiempo. También debe evitar la trampa de la reconstrucción innecesaria.

El programador inexperto a menudo se verá arrastrado a la trampa de la reurbanización:

No escribí este programa perfectamente, y ahora necesito extenderlo o modificarlo. Va a ser mucho trabajo modificar el código existente debido a la forma en que lo escribí. He aprendido mucho más desde entonces, estoy seguro de que lo mejor sería reescribir todo el programa. Estoy seguro de que podría escribirlo mucho mejor esta vez.

Hay varias cosas mal con esta lógica.

  • Es mucho trabajo modificar o agregar al código existente, pero ¿no será mucho más trabajo reescribir todo?
  • si reescribe todo, hay una buena posibilidad de que crees nuevos errores, y te tomará más tiempo de lo que piensas (especialmente si no tienes experiencia). ¿Está considerando todo lo que implica escribir el sistema? (recuerda cuánto tiempo te tomó la primera vez)
  • has aprendido mucho desde que escribiste originalmente el programa (por lo que puedes mejorarlo), pero también tendrás más información el próximo mes / año. ¿Qué te hace pensar que no querrás volver a escribir todo de nuevo en algún momento en el futuro?
  • La prueba final de un programa es que funciona . ¿No tienes nada mejor que hacer?

Nunca está de más contemplar y planificar una remodelación. Eso significa considerar cómo te gustaría reescribir tu programa e intentar identificar cualquier problema que encuentres. En este caso, habría identificado las "combinaciones avanzadas de SQL" que ahora necesita, y luego investigará cómo funcionan y aprenderá sobre ellas.

Si cree que no habría identificado la brecha de conocimiento de unión avanzada a través de la planificación (sin comenzar el desarrollo), entonces necesita mejorar sus habilidades de planificación. Trate de pensar qué parte del plan no fue lo suficientemente detallada. Debe entrar en tantos detalles como sea necesario hasta que esté seguro de que todo el sistema es técnicamente posible.

Este enfoque le permitirá aprender con anticipación .

Finalmente, aprender en el trabajo es una parte normal de la programación. Sin embargo, esto no significa que comience una tarea y luego se dé cuenta de que tiene que detenerse durante una semana para aprender, por ejemplo, HTML básico. Puede detenerse durante unas horas para conocer algo, pero su empleador solo le está pagando para hacer el trabajo. Aprenda eficientemente: no lea la introducción y el historial, solo cómo funciona y cómo encajará en su programa. Si tiene que dejar de trabajar durante días para aprender cómo completar una parte del programa, lo está haciendo mal.

Kirk Broadhurst
fuente
1

Puede pensar que aprender nuevas tecnologías y problemas es una pérdida de tiempo. Pero no se asuste. Es normal. Aprender es parte de su práctica como programador ... o de lo contrario todos estaríamos atrapados con COBOL.

Los profesionales independientes ajustan sus comisiones en consecuencia y los períodos de aprendizaje son, entre muchas otras cosas, algo que debe tenerse en cuenta en sus estimaciones de tiempo. La próxima vez que decida incorporar un nuevo marco, asegúrese de planificar con tiempo suficiente para aprenderlo.

Spoike
fuente
0

Pero, hay una diferencia entre "hacer el trabajo" y "hacer el trabajo correctamente".

No, no la hay, y creo que esa es la raíz de tu problema aquí. Me parece que estás demasiado obsesionado con preocuparte por hacer las cosas "correctamente" porque, como desarrollador individual, no ves cómo operan los demás. ¿Pero correctamente según quién? ¿Quién es esta persona mágica que llega a decretar que lo que estás haciendo es 'correcto'? Tome 100 de los mejores programadores del mundo, y le garantizo que no habrá dos que estén de acuerdo al 100% en cada tema de programación.

En última instancia, lo que importa es si sus clientes están contentos. Si los programas que crea están resolviendo los problemas que se supone que deben resolver, y si lo hacen de manera rentable, lo están haciendo correctamente. No es más inherentemente correcto, por ejemplo, usar codeigniter que usar su propio marco. El corolario de eso es que si produce una pila de basura, lo está haciendo 'mal' independientemente de los procesos o 'mejores prácticas' seguidas.

Que estás revisando tu código y viendo formas de mejorarlo es una parte normal del proceso de desarrollo. No es una señal de que no estás haciendo las cosas "correctamente". Es una señal de que estás dedicado a aprender y mejorar. De todo lo que veo en tu publicación, no tienes ningún problema.

Ahora ve a patear un poco * * *

Gran maestro B
fuente
No estoy de acuerdo con esto. Hay formas de programación que son mucho más fáciles de mantener y más fáciles de leer que otras, y hay montones de libros dedicados a mejorar el programador para que puedan escribir un mejor código.
TehShrike
Gracias @grandmasterB. TehShrike, y referencia a estos libros?
James Guvna Jeffery
3
" no hay dos que estén de acuerdo al 100% en cada tema de programación ", tal vez, pero al menos el 80% estará de acuerdo en al menos el 80% de los temas de programación. Ese es el consenso profesional. No existen 'derechos' absolutos, pero existen mejores prácticas y vale la pena conocerlas.
Kirk Broadhurst
1
Todo bien, pero si su programa no está resolviendo el problema, se supone que, las mejores prácticas o no, se ha hecho incorrectamente. Hay un medio objetivo para saber si un programa se realiza correctamente: si el cliente entrega hojas de papel verdes u otro pago a cambio de su trabajo. Cualquier otra medida es simplemente opinión.
GrandmasterB
2
Y cuando su cliente siente que su cotización para un cambio es excesiva y encuentra a otro experto para confirmar esos sentimientos porque estaba mal codificado, está sin trabajo.
JeffO