Soy un desarrollador de software pero débil en algoritmo y estructura de datos. ¿Cómo puedo mejorar en los próximos seis meses?

No leas libros. ¡Resuelve problemas reales!

Hay un sitio web llamado Stack Overflow y está lleno de problemas de programación. Y es altamente competitivo, porque hay muchas personas respondiendo preguntas y resolviendo problemas allí, por lo que debes ser rápido. Si puede pasar 45 minutos todos los días durante 6 meses para resolver problemas en Stack Overflow, mejorará y mejorará muy rápidamente en la tarea.

No se preocupe si al principio no es el más rápido o el mejor respondedor. La ventaja de intentar responder una pregunta usted mismo es que primero pensará en el problema, para que sepa todo sobre el problema y luego compare sus pensamientos con los pensamientos de los demás. Así que también puedes aprender de las otras respuestas. Créeme. Esto no se detiene también a medida que mejora. Siempre habrá alguien que responda una pregunta desde un ángulo muy diferente en el que no haya pensado, incluso si ya es bastante bueno para resolver problemas.

Además, puede elegir qué etiquetas desea seguir en Stack Overflow, para que pueda resolver problemas solo para Java o SQL o C # o XSLT o cualquier tecnología en la que le gustaría entrenar sus habilidades de resolución de problemas.

Recuerda siempre (como también señaló Rafał Głowiński en los comentarios): Tienes un músculo. Como persona SQL, lo llamo el “músculo SQL”. ¡Necesita entrenamiento y práctica constantes!

Además después de que la pregunta ha sido modificada:

Estás buscando algo así:

Tutorial de estructura de datos y algoritmos (DSA)

——————————————————————————————————-

¿Qué quiere decir exactamente con “débil en la resolución de problemas”?

  1. ¿Resolver un problema funcional creando un programa informático?
    Para este tipo de resolución de problemas, las técnicas de diseño son relevantes
  2. ¿Resolver problemas (defectos) en el código existente / en el software en ejecución?
    Para este tipo de resolución de problemas, las técnicas de análisis de problemas son relevantes

Para ambas situaciones es esencial:

  • Para encontrar la (s) causa (s) del problema
    Para esto, un análisis de causa raíz podría ser útil
    – por ejemplo, estableciendo una hipótesis sobre la (s) causa (s) y verifíquela
    -eg los cinco por qué preguntas de magra (5 por qué)
    – por ejemplo, el diagrama de espina de pescado de Ishikawa (diagrama de Ishikawa)
    – por ejemplo, el árbol de realidad actual (CRT) en Teoría de restricciones
    Árbol de realidad actual (Teoría de restricciones)
  • Para encontrar (posibles) soluciones para el problema
    – por ejemplo, plantear una hipótesis sobre una solución y verificarla
    – por ejemplo, un diseño existente de pasos lógicos que resuelvan el problema
    (Descomposición funcional)
    – por ejemplo, un árbol de realidad futura (FRT) en Teoría de restricciones
    Teoría de restricciones Proceso de pensamiento Árbol de realidad futura

Donde empezar:

Comience con problemas simples (tal vez incluso obvios) e intente aplicar las diferentes técnicas para encontrar la (s) causa (s) para familiarizarse con ellos y descubrir cuál encaja mejor con sus habilidades personales

Cada vez que experimentas “¡Sí! Lo tengo ”, pasa a un problema que es un poco más difícil y hace lo mismo. Puede repetir esto siempre y cuando no esté satisfecho con el nivel de sus habilidades y pare cuando esté satisfecho. Prepárese para la decepción y la lucha, la resolución de problemas es una habilidad que no es fácil. Requiere perseverancia y esfuerzo enfocado.

Qué no hacer:

No comience con un problema difícil / complejo.

No te rindas

No te engañes a ti mismo: solo pasa a un problema más difícil cuando entiendas completamente la aplicación del proceso de análisis y resolución de problemas para cada paso que des (no hay atajos :-))

Espero que esto te ayude a desarrollar tus habilidades para resolver problemas.

Recomiendo algunas lecturas

  1. Cómo resolverlo: un nuevo aspecto del método matemático (libro de 1957)
  2. Programming Pearls (libro de 1986)
  3. Pensamiento pragmático y aprendizaje

Y luego practica, practica, practica. Desarrolle algunos de los problemas en Programming Pearls probando al menos dos soluciones alternativas. Reflexiona y sigue practicando. Cuanto más lo haces, mejor lo haces.

Actualmente estoy en una situación similar, solo que aún no estoy trabajando. Aquí hay algunas sugerencias que pueden ayudarlo (ojalá lo supiera hace unos años):

  1. Ejercicio: todo el mundo no tiene experiencia antes, en ningún tema. Para tener experiencia en esto, solo tienes que seguir haciendo ejercicio. Hay varios sitios web para este tipo de cosas, como HackerRank, LeetCode y otros sitios web similares. Hágalo a menudo, pero no se esfuerce demasiado. Resolver una pregunta en un día es suficiente. ¡En un mes resolverás 30 preguntas!
  2. No busque la solución exacta para la pregunta: este es un problema grave para mí, cuando trato de resolver un problema y ya transcurridos 30 minutos, generalmente abro la solución. Al hacer esto, aún no puedo recordar cómo resolverlo al día siguiente. Tienes que pensar por ti mismo. Preguntarle a un amigo sería mejor porque generalmente no dan una respuesta directa, por lo que aún puede pensar.
  3. No huyas del tipo de problema con el que eres débil: después de hacer esto por un tiempo, sentirás que algún tipo de pregunta es más difícil que la otra. Es bueno que conozca su debilidad, pero solo tiene que seguir haciendo ejercicio.

Espero que mi respuesta pueda ayudarte.

¿Qué quieres decir con ser débil en la resolución de problemas?

Los problemas generalmente se resuelven usando el siguiente algoritmo:

Haga un modelo mental del problema que está tratando de resolver.
Escribe algo que implemente ese modelo.
Valide el modelo contra algún modelo de realidad (escriba pruebas, implemente como un sistema A / B, use un probador de teoremas, …)
Compruebe si este modelo coincide con la realidad lo suficientemente bien como para resolver el problema comercial que está resolviendo.
Si no, use los comentarios para construir un nuevo modelo mental y pruebe nuevamente.

Si dice que desea obtener más información sobre algoritmos y trabajos de estilo de concurso de programación competitiva, pase tiempo con un buen libro de texto y escribiendo código.

Elige el libro correcto y practica. Alternativamente, es posible que desee consultar primero un curso en línea relevante para obtener orientación y desafío. No hay atajo que no sea hacer el trabajo.

More Interesting

¿Qué ejercicios diarios de algoritmo son mejores para mejorar mis habilidades de desarrollo de software?

¿Las mujeres están menos inclinadas a convertirse en programadoras / desarrolladoras de software? ¿Por qué?

¿Puede un ingeniero de TI trabajar como desarrollador de software?

Cómo elegir un desarrollador de software personalizado

Como desarrollador, ¿cuál es el tipo de datos más interesante con el que ha trabajado y por qué? ¿Qué lenguaje / herramientas / marcos usaste?

¿Es un trabajo de desarrollador de software de 45k / año generalmente más fácil que un trabajo de 65k +?

Para un desarrollador, ¿qué camino es bueno para una carrera futura: desarrollo de .NET / SharePoint o desarrollo móvil (Android / iOS / HTML5)? ¿Cuáles son las perspectivas profesionales y las ganancias?

Desarrolladores de software: ¿Puede describir su primer trabajo en términos de su productividad en comparación con ahora?

¿Cuál es la diferencia entre un diseñador de software, un científico de datos y un desarrollador de software?

Rol del desarrollador de software en el proceso de desarrollo moderno. ¿Cómo ha cambiado en los últimos 10 años y cómo, en su opinión, cambiará en el futuro?

¿Los desarrolladores de software depuran su propio código?

¿Qué compañía es mejor para una más fresca: SAP Labs o Amazon?

¿Qué se debe esperar con una carrera en desarrollo de software?

¿Qué hace un desarrollador de software en principio? Mi designación es esa también, pero solo puedo hacer desarrollo web en el trabajo.

¿Cuáles son las razones para no pasar de la pila de Rails a la pila MEAN?