¿Qué puede estudiar un desarrollador de software senior técnicamente competente para seguir mejorando [cerrado]

15

Digamos que has estado programando por más de 10 años. Conoces muchos idiomas, con pocos de ellos a un nivel muy detallado. Ha estado diseñando arquitectura para soluciones, trabajado y entregado proyectos más grandes. Ha estado estudiando patrones, mejores prácticas, pautas de codificación efectivas, pruebas unitarias, subprocesos múltiples, etc.

Y luego, lentamente, sientes que la mayoría de los libros que lees dan información cada vez menos valiosa por cada 100 páginas de texto. Entonces comienzan a dar rendimientos decrecientes. Todavía aprendes, pero ya no mejoras a pasos agigantados.

¿Por qué el aprendizaje se vuelve menos productivo en comparación con cómo era antes?

En aquel entonces, solía cambiar su forma de pensar, le enseñó cosas nuevas y amplió sus horizontes que más tarde mejoraron su profesión actual o le permitieron inventar / administrar / construir algo nuevo. ¿Por qué ya no es el caso?

Descifrador
fuente
99
Según las preguntas frecuentes , las preguntas sobre lo que debe hacer a continuación (proyecto, libro, tecnología o idioma) están fuera de tema. Puedo entender su punto de vista, pero no puede saber todo lo que hay que saber relacionado con el desarrollo de software. Su problema es que se aburrió, tal vez cayó en una rutina intelectual. Lo que te inspira a salir de esa rutina depende mucho de ti , y probablemente sea algo completamente diferente para otra persona. Pero aquí está la respuesta: salga de su zona de confort . Aprenda sobre sistemas embebidos, matemáticas, gráficos o lo que le interese.
Caleb
2
No veo esta pregunta limitada en cuanto a lo que debe hacer el OP a continuación. Se trata más bien de enfoques generales que los profesionales tienen disponibles para continuar su estudio. Tal vez se puede expresar mejor, pero no se lee como "¿qué debería yo hacer a continuación" para mí.
Frank
3
Bueno, sinceramente, no sé qué preguntas no están fuera de tema en estos días. En realidad, se está volviendo difícil encontrar discusiones interesantes aquí últimamente. Ok, w / e, solo bloquea el tema ...
Codificador
2
Creo que la pregunta se puede editar para volver a abrir. Por lo que puedo decir, el problema presentado: "rendimientos decrecientes ... estudiando patrones, mejores prácticas, pautas de codificación efectivas, pruebas unitarias, subprocesos múltiples ..." es bastante sobre el tema para los Programadores
mosquito
2
Obtendrá una comprensión más completa de un tema cuando intente enseñarlo a otra persona.
JeffO

Respuestas:

23

Primero, a pesar de la forma en que se formula su pregunta, no hay fin para ningún estudio, especialmente no en nuestro campo, donde aparecen cosas nuevas más rápido de lo que puede leer sobre ellas. Dicho esto, cuando quieres mejorar, existen las siguientes categorías que consideraría. Para obtener el mayor beneficio / ROI, debe elegir algo de su área más débil, por supuesto.

Conocimiento fundamental

A pesar de conocer los lenguajes de programación y tener experiencia práctica, a menudo se tienen áreas (especialmente autoaprendidas) donde los problemas básicos básicos se dejan incompletos. Piense en cosas como estructuras de datos, algoritmos, estrategias de caché, funciones hash, ...

Tenga en cuenta que esto también incluye los fundamentos de los lenguajes de programación: desde compiladores, técnicas de optimización y sistemas de tipos, hasta teoría de categorías, mónadas y similares.

Si está bien enseñado, como ha obtenido un título universitario durante varios años, es probable que ya sea fuerte en esta categoría (lejos de haber terminado, por supuesto, pero con una base sólida). De lo contrario, intente leer algunos libros en estas áreas para averiguar si hay algo que ni siquiera sabía que faltaba en su repertorio. Esta categoría es la más fácil para sobreestimarse.

Conocimiento Paradigmático

Siempre me sorprende cuando aparecen programadores que piensan que son sabelotodos, pero que ignoran por completo otros paradigmas. Si cree que la orientación a objetos es el final, esta es su categoría para mejorar. Si cree que la programación funcional también existe e incluso podría haber oído hablar de la programación lógica, entonces sigue siendo una buena opción. Hay muchos más paradigmas y aprender sobre ellos tiene el profundo efecto de brindarte algo similar a una nueva visión del mundo de la programación.

Simplemente no lo olvide: a menudo hay argumentos (bastante filosóficos en su naturaleza) sobre lo que puede considerarse un paradigma o no. No te desvíes de estos. Su objetivo debe ser ampliar su horizonte y eso significa aprender sobre estas cosas, ya sea que otra persona considere a X un paradigma por sí solo, o no, no hace ninguna diferencia en eso.

Conocimiento especialista

La más fácil de todas, y la menos útil al mismo tiempo. Por supuesto, puede comprometerse con una sola tecnología y conocer todos sus entresijos, pero debe estar preparado para pagar el precio. Las tecnologías envejecen y lo hacen a una velocidad cada vez mayor, lo que hace casi una garantía de que el tiempo invertido aquí será inútil durante varios años en el futuro.

También el problema de la disminución del rendimiento brilla aquí. Por ser un especialista en algo, significa que tiene que pasar incontables horas en ese tema limitado, y por lo tanto, por definición, le tomará mucho tiempo aprender algo nuevo y esa cosa nueva será una pequeña pieza de rompecabezas que es no va a cambiar las opiniones de nadie sobre nada.

Conocimiento del dominio

Ya sea porque es el dominio de su trabajo, o simplemente se basa en su interés personal, pero ser un experto en informática y un cierto dominio es muy valioso y gratificante. No estoy hablando de áreas secundarias de CS, como gráficos por computadora o IA. En cambio, observe que las computadoras se han apoderado de la vida de todos y eso hace que cualquier otro campo esté sujeto a las computadoras y a un área en la que pueda ingresar.

Este claramente cae en la categoría de "fuera de su campo", sin embargo, no es un "exterior" matemático agudo, sino más bien un campo de aplicación. Considera la medicina: no te aconsejo que seas médico. Sin embargo, vale la pena aprender los fundamentos de la medicina para aplicar su conocimiento existente sobre informática a los problemas de ese campo. Esto abarca desde técnicas de visualización, pasando por robótica, hasta sistemas expertos y mera gestión de datos para contabilidad / administración. Si bien ha hecho todo eso antes, hacerlo en otro dominio puede terminar siendo una experiencia completamente nueva.

Sin embargo, tenga en cuenta que este es un cambio mucho más radical en su dirección que las otras categorías. Es posible que no tenga ningún contacto con ese campo en su trabajo diario, lo que hace que sea extremadamente difícil de lograr. Incluso puede significar cambiar de trabajo. Además, necesitará algún tipo de certificación sobre su nuevo dominio: después de todo, es un novato completo en ese dominio y tiene que competir contra graduados de estudios interdisciplinarios, que ya comenzaron su viaje para convertirse en expertos en ese nicho.

Conocimiento suplementario

Como Mike Brown agregó, también existe el área de conocimiento que de alguna manera acompaña su trabajo actual, pero no es estrictamente necesario. No necesita ser un gerente de proyecto para aprender sobre la gestión de proyectos, pero, como de costumbre, el conocimiento adicional le dará una visión más amplia de cómo funciona el otro lado. Incluso se podría generalizar esto hasta el punto de centrarse en las habilidades blandas. Supongo que todos los que trabajaron en un proyecto real con otras personas conocen el valor de estos.

Franco
fuente
+1, especialmente para "Conocimiento de dominio", eso es algo que al menos funcionó para mí.
Doc Brown
1
Estoy 100% de acuerdo con lo que dices. Me interesa mucho el conocimiento fundamental más profundo. En el sentido de que estoy inscrito en un curso sobre compiladores en este momento. Lo que no mencionó es lo que clasificaría como conocimiento complementario: diseño gráfico, gestión de proyectos, etc.
Michael Brown
+1 para paradigma: había estado haciendo POO / procedimiento durante ~ 10 años (y cansándome de ello) y luego comencé a aprender programación funcional y mis ojos se abrieron a un mundo completamente nuevo.
Paul
9

Creo que el software siempre está evolucionando y, como tal, hay un énfasis en la mejora constante. Entiendo de dónde vienes, me he sentido algo similar recientemente y ahora estoy buscando un MCSM en SQL Server.

Aprenda el próximo nuevo lenguaje, o marco, o lo que actualmente está "de moda". Cada año hay una tecnología, marco o lenguaje que sale o alcanza una masa crítica que se convierte en una palabra de moda por derecho propio. Puedo pensar algunos de estos en los últimos años: node.js, Ruby, jQuery. Es probable que esto también afecte tu forma de pensar para otras plataformas, por ejemplo, mira lo que ROR le hizo a Java con Grails.

Siempre hay margen de mejora. Creo que es muy poco probable que puedas ser un experto en todo, y leo mucho y siempre estoy aprendiendo. Estoy de acuerdo con lo que dices sobre aprender cada vez menos por cada 100 páginas, pero esto es de esperarse cuando eres un experto en la materia.

En términos de lo que puede hacer, aquí hay algunas sugerencias:

  1. Manténgase al tanto de los cambios de la comunidad y de lo que la gente está "metiendo". Aprenda las nuevas pilas, al menos para tener lo suficiente como para recomendarlas cuando corresponda

  2. Participe en sitios de preguntas y respuestas como este, donde puede impartir sus conocimientos sobre otros. Si se toma el tiempo de leer las contribuciones de otras personas, probablemente aprenderá algo y, al menos, probablemente verá las perspectivas que otras personas tienen.

  3. Elija un pasatiempo que tenga alguna relación con su trabajo. Hay muchos pasatiempos con cross-over, pensar AI, tormentas mentales Lego, RaspPi, etc.

  4. Además de tratar de aumentar el ancho de su conocimiento, considere aumentar la profundidad. Por ejemplo, aprenda cómo EF funciona debajo de la tapa, para que pueda diagnosticar esos casos de esquina extraños en lugar de solo usar el marco.

  5. Busque la certificación de nivel superior solo para demostrar que sabe lo que hace

Personalmente, te diré lo que está abriendo mi mente en este momento. Estoy leyendo 97 cosas que todo arquitecto de software debe saber y solo estoy parcialmente pensando en ello, pero arroja muchos consejos sabios. El libro es gratuito para leer en línea en el enlace que proporcioné.

En términos del pasatiempo que finalmente tomé, ingresé al diagnóstico del vehículo (obviamente con la computadora), lo que me permitió mantener completamente mi propio automóvil. Realmente disfruto mucho el tiempo que paso trabajando con mis manos.

Sam
fuente
Es curioso, conozco a uno de los autores de 97 Things;)
Michael Brown
Es un buen libro.
Sam
De nada. Es genial, ¿no?
Sam
1

Después de cierto punto, ha aprendido lo suficiente sobre un tema específico para sentirse cómodo adquiriendo nuevos conocimientos sobre una base ad hoc. Cuando sienta que no hay mucho más que aprender sobre su campo primario, es hora de comenzar a obtener conocimiento complementario que complemente su conocimiento primario.

Para mí, me estoy sumergiendo en UX y diseño gráfico porque siento que eso me hará mejor como desarrollador para proporcionar no solo estructuras elegantes en código sino también interfaces elegantes para el usuario final.

Otros temas que puede abordar incluyen gestión de proyectos, análisis de negocios, administración de sistemas y mejora de procesos de software. Si te encuentras trabajando en un dominio específico, podría tener sentido profundizar en ese dominio. Por ejemplo, últimamente he estado trabajando mucho en el sector de servicios financieros. Me inscribí en cursos en Coursera sobre modelado financiero y similares que me ayudarán a hablar con mis clientes en sus términos.

Siempre hay más para aprender, solo se necesita pensar fuera de la caja.

Michael Brown
fuente
0

Hay dos partes en esta pregunta: ¿por qué es más difícil de aprender y qué puedes hacer?

La primera parte es bastante sencilla: los temas más avanzados son más difíciles. A pesar de lo difícil que es aprender a programar, es un poco más difícil aprender a diseñar bien los programas, y aún más difícil aprender a diseñar aplicaciones grandes. El hecho es que los temas avanzados son más difíciles, o de lo contrario no serían avanzados. Tendrá que pasar más tiempo aprendiéndolos; más tiempo practicando para dominarlos.

En cuanto a lo que puede hacer, parece centrado en los aspectos técnicos de ser un ingeniero de software senior. Puede hacer muchas más cosas para ayudar a su equipo a crear software que aprender idiomas y marcos. Habilidades blandas, como la tutoría de otros desarrolladores, la negociación de requisitos, la gestión de proyectos, el diseño de programas, la comunicación de la visión, la implementación de las normas del equipo ... Todas esas cosas importantes necesarias para que un equipo de desarrolladores sea eficaz en la creación de software, no solo usted.

Telastyn
fuente
-3

Cada vez que voy al sitio Lambda The Ultimate , realmente no puedo / no puedo pensar que lo sé, todo en el campo de las ciencias de la computación.

LtU le dará un buen punto de partida para el paradigma y el conocimiento teórico que queda por aprender.

"Cuanto más sabes, más sabes lo poco que sabes".

Stephane Rolland
fuente
1
¿Cómo responde eso a la pregunta formulada, "¿Por qué el aprendizaje se vuelve menos productivo en comparación con lo que era antes?"
mosquito
Porque cuando voy allí, hay artículos con algo como el 90% de cosas nuevas que debo aprender. Que es precisamente de lo que se queja el OP: la proporción de cosas aprendidas por el número de lectura de línea que se vuelve demasiado baja en su caso. ¿No conoces este sitio tampoco?
Stephane Rolland
@gnat, y usted confunde la pregunta , que se titula: "¿Qué puede estudiar un desarrollador de software senior técnicamente competente para seguir mejorando"?
Stephane Rolland
¿Leíste el contenido de la pregunta después del título?
mosquito
@gnat Sí, por supuesto, he leído su pregunta: es más bien una declaración si OP solo pregunta por qué : después de 10 años, un llamado ingeniero de software senior lee libros que ya no cambian los horizontes porque un senior sabe mucho. Sí, lo he leído. He sonreído Me repito: "Cuanto más sabes, más sabes lo poco que sabes".
Stephane Rolland