Quiero ser un desarrollador Java empresarial exitoso. ¿Con qué algoritmos y estructuras de datos debo estar bien versado? ¿Qué libros me recomendarías?
Para ser un desarrollador Java exitoso, ¿necesito conocer todos los algoritmos avanzados como los que se proporcionan en CLRS ?
¿Me puede sugerir una lista de los temas que debería aprender en el orden descendente de su prioridad?
Debo saber:
- ¿Buscando?
- ¿Clasificación?
- Gráficos / Árboles?
etc?
java
learning
algorithms
data-structures
Chankey Pathak
fuente
fuente
Respuestas:
Introducción a los algoritmos de Cormen es un buen libro para algunos fundamentos teóricos básicos.
Dicho esto, la mayoría de los algoritmos y las estructuras de datos ya han sido codificados, probados y optimizados por otros, y no hay razón para volver a implementarlos una vez más. Para ser un desarrollador de Java exitoso , necesita conocer The Collections Framework al revés.
fuente
Si va a ser un programador de cualquier tipo, debe comprender todas las estructuras de datos básicas (pilas, colas, matrices, listas vinculadas, tablas hash, árboles, etc.) con cierto detalle. Suficiente al menos para poder implementar cualquiera de ellos por sí mismo si se encuentra en un mundo sin marcos de colecciones para hacer el trabajo por usted.
Con respecto a los algoritmos, me parece que son más herramientas para los trabajos, mientras que sus estructuras de datos son bloques de construcción fundamentales. No creo que sea tan importante conocer los detalles de cómo implementar cada algoritmo con el que te puedas encontrar. Lo que debe poder hacer es evaluar qué tan bien funcionará un algoritmo para un propósito determinado. A veces, la diferencia entre la búsqueda de profundidad primero y de amplitud o el tipo de clasificación que realiza en sus datos puede marcar una gran diferencia en el rendimiento o el éxito general de su código, por lo que saber juzgar eso es muy importante.
fuente
Además de las otras respuestas, me gustaría agregar que el estudio de algoritmos no es solo para conocer técnicas bien conocidas (que todavía es importante), sino también para poder comprender el proceso de pensamiento que entra en la elaboración Una solución a un problema con el que te encuentras en la vida real, no necesariamente bien conocido.
fuente
Es bueno que esté ansioso por ampliar y mejorar sus habilidades de programación. Sin embargo, es importante no tratar los algoritmos como un catálogo de cosas para memorizar. Lo que necesita saber para convertirse en un buen desarrollador (en Java o cualquier otra cosa) es comprender el análisis algorítmico.
Aprende esto aprendiendo unas pocas estructuras de datos y algoritmos, y aprendiendo a analizar su rendimiento en términos de tiempo y espacio (memoria). Búsqueda, clasificación, gráficos, árboles, montones, montones y todas esas cosas buenas. Esto también debería seguir algunos conceptos básicos de la teoría de la computación y las matemáticas discretas (incluso si en el ámbito de Java nunca podemos usar esos dos temas directamente, sus beneficios son indirectos).
Separe el aprendizaje de un lenguaje de programación (en su caso Java) con el aprendizaje del análisis algorítmico (que es diferente de la "memorización" de algoritmos y estructuras de datos).
"Algorithms in a Nutshell" de George T. Heineman, Gary Pollice y Stanley Selkow es un buen comienzo. "Algorithms" de Sanjoy Dasgupta, Christos Papadimitriou y Umesh Vazirani es otro buen libro de texto de pregrado.
Lo mejor es tomar cursos de 9-12 créditos en programación antes de tomar un curso de pregrado, de nivel 3000 en algoritmos. Salvo eso, el autoestudio con los dos libros que mencioné podría ser una buena alternativa (el autoestudio podría no ser para todos).
¡Buena suerte!
fuente