En estos días, estoy invirtiendo mucho en estructuras de datos y algoritmos e intento resolver algunos acertijos de programación.
Estoy tratando de codificar y resolver con Java y Clojure.
¿Estoy perdiendo el tiempo? ¿Debería invertir más en tecnologías y marcos que ya conozco para obtener un conocimiento más profundo (los detalles) y poder codificar con ellos más rápidamente?
Al estudiar estructuras de datos y algoritmos, ¿voy a ser un mejor programador o esas materias solo son importantes durante los años universitarios?
learning
algorithms
data-structures
Quirón
fuente
fuente
Respuestas:
Es completamente posible pasar la mayor parte de su carrera haciendo un trabajo significativo y útil, con un conocimiento mínimo de algoritmos y estructuras de datos.
El nivel mínimo de conocimiento para algoritmos y estructuras de datos, para tener éxito, requerirá que:
No hay * máximo * . Si lo desea, puede llevar su estudio al nivel de doctorado y más allá. Su utilidad está directamente relacionada con el tipo de trabajo que le interesa tener y con el tipo de trabajo que le parezca más interesante y gratificante.
Dicho esto, como una guía aproximada (pero no absoluta), cuanto más bajo, más intensivo en recursos y menos automatizado sea el lenguaje, el marco y la aplicación en la que esté trabajando, mayor será el nivel de habilidad requerido cuando se trata a algoritmos y estructuras de datos. Por ejemplo, la implementación del algoritmo de Ukkonen en el ensamblaje probablemente, pero no necesariamente, significa que querrá una comprensión a nivel de maestría del algoritmo y las estructuras de datos involucradas.
En su situación específica, al pasar de un entorno de desarrollo de Java a trabajar en los iOs, en igualdad de condiciones, espere una demanda ligeramente mayor en su comprensión general de algoritmos y estructuras de datos. Querrá poder ejecutar de manera eficiente en un dispositivo con menos recursos disponibles. Además, espere agregar un par de categorías nuevas a su arsenal; sobre todo, querrá saber más sobre la administración de memoria.
fuente
Nah Si recién está comenzando, intente entrar en cosas generales como la programación de la interfaz de usuario y eso simplemente lo detiene. Eventualmente, necesita ir allí y aprender marcos más grandes ... cómo usar las estructuras de datos y los algoritmos que otras personas han escrito. Cuando recién está comenzando, es bueno atenerse a problemas de alcance limitado.
Los algoritmos y las estructuras de datos son básicamente la base de todo, aunque probablemente nunca escriba uno propio una vez que haya pasado la etapa de principiante. Conocerlos, o al menos haberlos conocido, lo convertirá en un mejor desarrollador al final. Sabrá cuándo y por qué usar cada uno porque sabrá CÓMO funcionan. Además, hacer que sus algoritmos y estructuras de datos sean genéricos para que puedan funcionar con cualquier tipo o tipo con la interfaz X realmente ES algo que usará para el resto de su carrera.
Veo a muchas personas saltar a cosas como Qt que terminan haciendo preguntas que muestran cero conocimiento de C ++ (por ejemplo). Están tratando de omitir demasiados pasos y al final les lleva más tiempo aprender. Yo diría que estás en el camino correcto.
fuente
No estás perdiendo el tiempo.
Si, en el curso de su trabajo, necesita usar una herramienta o marco que no haya usado previamente, lo aprenderá y lo usará.
Sin embargo, si necesita utilizar una estructura de datos o un algoritmo que no haya utilizado anteriormente, es probable que ni siquiera sepa que existe, y resolverá su problema utilizando una técnica horriblemente subóptima que requiere mucho más. esfuerzo y escalas terriblemente.
Lo que estoy tratando de decir es que este es el tipo de cosas que no solo aprenderás haciendo, debes aprenderlo aprendiendo , ya sea en una situación académica o mediante una inversión personal de esfuerzo, ya que estás haciendo ahora
fuente
En la práctica, tenga en cuenta cuáles son las estructuras de datos disponibles, cuáles son sus características de complejidad, dónde obtener buenas implementaciones de ellas y dónde guarda su copia de Introducción a los algoritmos para buscar los detalles más adelante.
fuente
Si eso es lo que te hace feliz, entonces definitivamente debes seguir con eso. Si le preocupa no aplicar suficiente teoría, considere un proyecto con mucha teoría. Cree un lenguaje de programación pequeño, como Poción , desde cero. Una implementación completa utilizará tablas Hash, gráficos, árboles y una gran variedad de algoritmos. Si parece interesante, puede profundizar en la optimización, la generación de código nativo o la extensibilidad del usuario.
Te convertirás en un mejor programador cuando te mantengas interesado y enfocado, no cuando trabajes en proyectos que parecen prácticos pero un poco aburridos.
¡Abajo la madriguera del conejo, Dorothy!
fuente
Pasé mucho tiempo hackeando C / C ++ con OpenGL. Conozco los idiomas y la API bastante bien ... y me he convertido en un desarrollador y programador razonable debido a esa experiencia. Dicho esto, el conocimiento algorítmico real requerido para resolver varios problemas encontrados solo realmente he sido capaz de comprenderlo.
Hablando desde la experiencia personal, centrarse en la creación de aplicaciones será una pérdida de tiempo si no conoce la teoría detrás de los dominios de problemas relacionados con lo que está tratando de construir.
Para muchos tipos diferentes de software, estos dominios se derivarán de los fundamentos que aprende al estudiar algoritmos, además de su propia teoría específica basada en nichos (por ejemplo, álgebra lineal en gráficos de computadora, teoría de números / información en criptografía, etc.).
No necesariamente tiene que convertirse en un mago computacional detrás de todo, pero hacer lo que estaba haciendo en el momento de esta publicación es un camino muy, muy necesario para seguir al menos una vez en el viaje de programación, independientemente de si No son autodidactas.
fuente
Supongo que si no los conoces bien, no encontrarás razones para usarlos. Parece que encuentro usos para ellos todo el tiempo. Pero tengo que admitir que con las mejoras en genéricos en la última media docena de años más o menos, la necesidad de rodar el suyo ocurre cada vez con menos frecuencia. Eso aún no elimina los beneficios de saber cómo y cuándo usarlos y pueden simplificar enormemente el código que de otra manera sería complicado.
fuente