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?
fuente
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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:
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 .
fuente
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.
fuente
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:
Hay varias cosas mal con esta lógica.
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.
fuente
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.
fuente
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 * * *
fuente