¿En qué áreas deberían centrarse los ingenieros de software a medida que aumenta su nivel de experiencia? Mis amigos mayores me están sugiriendo que ahora me centre en el diseño y la lógica empresarial, y que deje de lado la locura de la programación. ¿Cómo debo seguir adelante?

Ingenieros de software son una moneda de diez centavos

Así que necesitas hacerte un nicho para ti mismo. Nicho donde hay menos expertos y más por hacer. Tales nichos existen en la especificación y el diseño de un buen software. Cualquiera puede escribir código. Demasiados pueden escribir buen código. Pocos pueden diseñar sistemas grandes y complejos que resuelvan un problema empresarial real. Así que estas pocas personas con habilidades de diseño están en demanda.

La experiencia en el dominio siempre es extremadamente valiosa. Ser un experto en dominios significa que usted también comprende los aspectos internos de los procesos de negocios. Y esto le permite cerrar la brecha entre los negocios y la ingeniería.

La diferencia a la que me refiero es cuando su Gerente de Producto dice “Quiero una interfaz de usuario fluida y eficaz” y usted puede traducir eso a especificaciones reales. ¿Son 2 segundos suaves para tu usuario? ¿Su usuario necesita 10 ms lisos? Tienes una aplicación de chat, entonces 10 ms suave es mejor. Usted opera una herramienta de inteligencia empresarial, entonces 1 segundo está bien. Necesitas conocer tu dominio y tus usuarios para decidir esto.

Ambos estos te hacen un activo. Un activo indispensable ya que aprender el dominio o ser bueno en el diseño requiere tiempo, esfuerzo y práctica.

No hay “Aprende a diseñar sistemas de software en 24 horas”

En cuanto a mi desarrollo personal hago lo siguiente.

  1. Desarrollar habilidades de resolución de problemas. Ser capaz de tomar un problema más grande y romper en pedazos pequeños, luego resolver los pedazos y juntarlos. Ser capaz de diseñar una solución antes de implementarla.
  2. Buena comunicación. Necesita explicar a los demás (tomadores de decisiones en su empresa) sobre lo que está haciendo.
  3. Listo para aprender cosas nuevas. Aprender nuevos paradigmas como la programación funcional. Lea sobre patrones de diseño y diseño de software a gran escala. Aprende al menos unos pocos idiomas. Mi selección sería C (para saber cómo funcionan las cosas), Java (para trabajo), Scala (para programación funcional), JavaScript (para asíncrono y funcional)
  4. Adáptate a lo que quieras para trabajar. Es posible que tenga que hacer UI y Back-end y Base de datos todos juntos.
  5. Un poco de algoritmos y estructuras de datos , solo lo básico, los implementados en JDK son suficientes para la mayoría de los casos.
  6. Aprende de los demás. Lee blogs de programación, mira proyectos de github.
  7. Responda y ayude a sus compañeros en la oficina y en quora o stackoverflow.
  8. Conscientemente dedicar tiempo al aprendizaje. Establezca algún tiempo fuera de su horario para esto.
  9. Amas lo que haces. Si no te gusta, entonces no irás lejos.
  10. Habilidades matematicas.
  11. Aprendizaje automático y IA.

No quiero repetir los consejos que recibes en casi todos los foros, blogs / artículos motivadores y aquí en Quora:

¿Quieres hacer lo que tus amigos o compañeros de trabajo te dicen que hagas? ¿O perseguir tu pasión?

No estoy seguro de su dominio / industria, pero he escuchado que no todas las compañías de software tienen una división adecuada entre la escala técnica y administrativa. Entonces, incluso si usted es un buen programador, puede ser difícil subir la escalera en esos lugares.

Si le apasiona la programación y no hay muchas oportunidades en el lugar en el que se encuentra actualmente, haga un movimiento (a los 3 años debería ser fácil moverse)

Si desea estar en la misma compañía / dominio , entonces, ¡quizás debería escuchar a sus compañeros de trabajo!

Si su objetivo es obtener roles de administración / liderazgo, entonces es mejor que se centre en otras cosas que no sea la programación.

Una nota sobre los desafíos de codificación: los desafíos de codificación no lo ayudarán a crear y mantener un código de calidad de producción. Al hacer eso, puede que sea mejor al pensar en soluciones, también puede familiarizarse con algoritmos avanzados, pero escribir un software limpio , fácil de mantener y que pueda soportar la prueba del tiempo es un juego de pelota totalmente diferente. Se necesita mucha práctica deliberada, leer un buen código (FOSS [1]) y esforzarse por escribir más código modular, extensible y legible [con casos de prueba unitarios, interfaces bien definidas y limpias, documenación sucinta, …] usted mismo.

Notas al pie

[1] ¿Qué es el software libre o de código abierto? Definición de Webopedia

Bueno, como ingeniero de software, su responsabilidad más importante sería comprender los aspectos de ingeniería de la aplicación. Podría ser cualquier fase del ciclo de desarrollo de software, como los Requisitos a través del Soporte.

Es oxímoron cuando dices que eres apasionado y bueno en la codificación de los desafíos contra un programador no tan bueno. Esto significa claramente que está más interesado en participar en los desafíos que en completar la tarea asignada en su trabajo.

Los consejos que reciba de sus adultos mayores pueden considerarse si son genuinos. No estoy seguro de por qué te están sugiriendo que te concentres en esas áreas. ¿Podría ser por el olor del código?

Esa podría ser una de las razones por las que dicen que dejes ir tu locura de programación.

Hackathons no implica necesariamente prácticas de ingeniería de software como la gestión de requisitos, escritura y ejecución de casos de prueba extensos, etc.

Tendrá que discutir con sus mayores para comprender la razón detrás de su sugerencia.

Los críticos siempre serán tu ayuda para crecer. Nunca te lo tomes personalmente, más bien busca un cambio.

¡Espero que esto ayude!

Esta pregunta puede tener innumerables respuestas diferentes, debido a que el tipo de área no se pregunta en particular.

Por ejemplo, uno puede sugerir ir en inteligencia artificial y aprendizaje profundo (diferentes campos de programación) o puede pedir un patrón de diseño y lógica empresarial diferentes.

Por lo que entiendo, usted desea aumentar su habilidad (desarrollo) y no importa en qué campo.

Para eso hay una sugerencia:

Aprende el código de otras personas.

Y por otras personas me refiero a programadores más avanzados.

Abra el código fuente de algunas bibliotecas e intente comprenderlas. Lo creas o no, te ayudará a aprender todo lo que necesitas aprender. Simplemente te señala la dirección de codificación correcta.

Vaya con los comentarios de los adultos mayores, debe centrarse en el diseño y en cómo el diseño es útil para las empresas. Su código no debe ser torpe, debe estar limpio y cualquier persona que quiera adaptarse puede hacerlo rápidamente sin mucha confusión. Escriba blogs, haga presentaciones, contribuya al código abierto y trate de hacer lo mejor en su día a día.

Eso es !

Faizan Ahemad lo entendió bastante bien.

En lugar de aprender a resolver el problema de negocios utilizando el código, necesita concentrarse en por qué existe el problema. Debe usar los 5 por qué para entender el problema comercial antes de escribir una línea de código.

La mayoría de la programación es un desperdicio. La lógica empresarial que no resuelve el problema correcto es un desperdicio. Gran diseño que no resuelve el problema correcto es un desperdicio. Los desarrolladores senior son aquellos que pueden resolver el problema real , no aquellos que crean soluciones asombrosas para el problema equivocado.