¿Es necesario que conozcamos todas las estructuras de datos y algoritmos a fondo para los trabajos?

Sería impresionante poder codificar un árbol splay desde la memoria. O describa cómo aplicar los métodos de Monte Carlo para encontrar un ciclo hamiltoniano en un gráfico. Conocer un par de algoritmos para encontrar los componentes conectados en una imagen también puede ser útil. Codificación de video fractal? Genial pero oscuro. La enumeración de coset de Todd-Coxeter es más un algoritmo especializado, pero si descubriera que usted lo sabía, probablemente tendríamos una buena discusión.

Nunca esperaría que un candidato a empleo (o un compañero de trabajo) supiera nada de esto. La familiaridad con el algoritmo y la estructura de datos se debe en gran medida a la experiencia educativa y laboral de una persona. Hay mucha variación en lo que los desarrolladores ven a lo largo de su carrera y no es una gran medida para determinar la capacidad de alguien para programar. La mayoría de las preguntas que he formulado en entrevistas requieren solo familiaridad con algoritmos básicos y estructura de datos.

Algunos trabajos muy especializados pueden requerir familiaridad con algoritmos particulares. Por ejemplo, alguien que trabaja en aprendizaje automático probablemente debería saber sobre el descenso de gradiente estocástico. Incluso entonces, probablemente no sea un requisito previo. Ni siquiera sabía sobre este algoritmo hasta que comencé a trabajar en PNL en Google.

Después de 20 años, puedo decir con seguridad que no conozco todas las estructuras de datos y que no conozco todos los algoritmos.

Cada industria tendrá sus estructuras, patrones de diseño y algoritmos.

Por ejemplo, Dependency Inject es ideal para desacoplar código para cambios más fáciles, sin embargo, puede hacer que los juegos se ejecuten lentamente. El Modelo de dominio puede ser excelente para abstraer cosas de la base de datos, y los ORM parecen geniales a menos que su aplicación requiera muchas consultas avanzadas.

Incluso las cosas básicas como un Hashmap tienen fortalezas (Rápido) y debilidades (memoria).

Si está programando un pequeño dispositivo electrónico, es posible que desee evitar el uso de funciones intensivas de memoria y pasar a un lenguaje de nivel más bajo para obtener la optimización, trayendo un conjunto completamente nuevo de algoritmos, patrones de diseño y estructuras de datos.

Big data, por otro lado, le ofrece un nuevo conjunto de desafíos, para mover las cosas rápidamente. Las tecnologías como Lambda generalmente brindan el beneficio de pequeñas funciones que se mueven en lugar de estructuras de datos masivas.

La conciencia es clave

Dependiendo de su trabajo, no necesita estar completamente informado de cada pequeño detalle, sin embargo, es importante que tenga una visión general de los desafíos y sepa cómo usar herramientas (como Google o quizás incluso Quora) para encontrar Las mejores respuestas.

Yo diría que lo más importante que debes saber sobre la programación de computadoras es:

Todos los patrones de diseño, algoritmos, estructuras de datos, filosofías, metodologías y procesos, tanto en el diseño de software como en la vida, todos tienen beneficios, defectos, limitaciones y debilidades.

No es necesario conocerlos a todos, pero reconocerlos y comprender cómo elegir la mejor opción es muy importante para ser un gran ingeniero de software.

No, desde mi punto de vista, todo lo que aprendemos y equipamos es solo para ayudarnos a buscar en la dirección correcta. Escribir código es el 75% de googlear y el 25% del código real. Las estructuras de datos y los algoritmos que lee le ayudarán a reducir su búsqueda y a llegar a una solución más rápido. En resumen, U NO NECESITA MEMORIZAR nada en informática. Todo lo que necesita hacer es obtener experiencia práctica y comprender los conceptos a fondo. Para todo lo demás hay google 😉

Al leer la pregunta, me parece que piensa que hay pocos algoritmos y estructuras de datos (A&DS) en el mundo. Eso definitivamente no es el caso. Los A&DS que encuentra en su libro de texto son algunos de los más simples y de uso común. Se usan muchos más A&DS. Por lo tanto, ningún empleador sensato esperaría que los conozca a todos . Lo que esperarían sería que usted entendiera dónde y cuándo se requieren. Además, lo que es más importante, esperan que comprenda los diversos temas relacionados con los algoritmos, como las complejidades de tiempo y memoria, la medición del rendimiento, etc.

No. Necesitas poder pensar.

Conocer algunas estructuras de datos y algoritmos básicos, ¡y conocerlos bien! – es una base importante, ya que le permite razonar sobre las compensaciones de ingeniería.

Más allá de ese conocimiento básico, la mayoría de los algoritmos y las estructuras de datos son composiciones naturales de los conceptos básicos. Aquí es donde la capacidad de pensar y razonar se vuelve crucial, porque puede evaluar cientos o miles de posibilidades diferentes en su cabeza a un bajo costo (en términos de tiempo) y establecer una solución que generalmente está optimizada para su conjunto de problemas.

(Recorte … cortando cosas irrelevantes …)

Es decir que la simplicidad es la clave. Si sus diseños se sienten demasiado complejos en su cabeza, entonces es probable que se vuelvan más complejos en realidad.

No.

Pero sí, para borrar una entrevista, debe conocer a fondo la mayoría de las estructuras y algoritmos de datos que el entrevistador pregunta en ese momento. No importa si lo sabes todo o no, pero si conoces el algoritmo que el entrevistador te ha pedido, lo lograrás. Puede ser que él no conozca los algos que tú conoces. A veces, lo único que importa es de qué lado de la mesa estás.

Capital NO.

Debe tener algunos algoritmos estándar y estructuras de datos básicas.

Pero debe saber cómo implementar y modificar algo y la estructura de datos existente.