¿Es difícil seguir 100 días de algoritmos?

Si le gusta leer sobre algoritmos, estas publicaciones son intermedias en términos de claridad y utilidad de explicación. Personalmente, creo que los libros “tradicionales” son mejores opciones: Introducción a los Algoritmos (CLRS, tercera edición de 2009), o los Algoritmos en la serie C (ediciones Sedgewick o C ++). Incluso las descripciones generales simplificadas son buenas alternativas para principiantes o una actualización rápida: Algorithms in a Nutshell (Pollice, et al; 2nd edition 2016), Grokking Algorithms (Bhargava; 2016).

Es una cuestión de tus objetivos y tiempo. No apresure ninguna colección de algoritmos; Tómese el tiempo para resolver los problemas y escriba su propio código en el contexto de los requisitos / problemas que elija.

La evaluación de cualquier material educativo implica el examen de estilos: su estilo de aprendizaje, el estilo de escritura del autor y el estilo de presentación del material (por ejemplo, solo texto, texto + diagramas, código pesado, matemáticas pesadas, interactivo, etc.). Creo que la serie en cuestión es satisfactoria, pero, para mis intereses y opiniones particulares sobre el estilo, no es una opción que recomendaría como introducción de primera línea a los temas. La serie no es difícil de seguir ni de ningún modo objetivamente un problema, pero, como se señaló, creo que hay mejores opciones.

(editar; al releer esta respuesta, me doy cuenta de que suena más negativo de lo que pretendía. Si bien mantengo mi punto original, creo que hay mejores opciones de aprendizaje, el sitio en cuestión es un muy buen trabajo. Ciertamente podría no dedicar el tiempo y el esfuerzo que el autor del sitio ha gastado. Para la audiencia adecuada, probablemente un desarrollador de nivel medio, es una fuente de información útil. Dudo que el autor lo haya pensado como una herramienta educativa para principiantes: fue un desafío para desarrolladores no creado un sitio de aprendizaje, por lo que probablemente cumpla con el objetivo original. Y, no, el sitio no es especialmente difícil de seguir dadas esas advertencias a nivel de desarrollador).

Descargo de responsabilidad: solo he leído algunas de las entradas (ya que acabo de enterarme de esta serie por su pregunta), y esta respuesta se basa en esa primera impresión.

No llamaría a nada allí “difícil de seguir”. Por lo que vi, estaba bien escrito y claramente explicado, y debería ser digerible para un estudiante universitario promedio de CS (supongo que en algunos casos hay algo de jerga de ML que tendrías que buscar si no estás familiarizado).

Sin embargo, propondría que el autor obtuviera * mucho más * al hacer esto de lo que nadie lo haría al leer esos artículos. La información allí es estándar y nada nueva. Un programador decente ya debe tener el conocimiento para poder buscar cualquier información. Por lo tanto, no estoy seguro de que los programadores sean realmente el “público objetivo” aquí.

El valor sería hacer ese análisis e implementación usted mismo y, de ese modo, obtener una cierta comprensión de lo que está involucrado (y quizás lo más importante, darse la oportunidad de pensar en cómo se podrían generalizar los detalles, que es la creatividad importante pero ignorada) aspecto de la programación). Si la serie de artículos inspira a las personas a hacer eso, ¡ese es un resultado increíble!

Finalmente, algunas críticas de lo que vi:

En general, pensé que las opciones de tema estaban por todas partes. Felicitaciones al autor por lograr elegir 100 cosas en 100 días, lo que creo que es la parte más difícil. Pero es extraño tener un artículo dedicado a SCC y otro dedicado a contar 1 bit. Ciertamente dentro del objetivo del proyecto, pero diría que eso solo significa que un objetivo más bien definido hubiera sido mejor: ¡estaría más emocionado de ver “100 días de algoritmos gráficos” por ejemplo!

La navegación para esto es terrible. Estoy seguro de que era más sensato si lo seguías, pero ahora el sitio te combate en cada paso del camino si quieres ver los artículos en orden (¡ni siquiera hay enlaces previos / siguientes!). No es culpa del autor, pero va a su punto sobre “atención”.

Algunos de los enfoques parecían un poco a medias. Teniendo en cuenta que solo miré unos pocos. El día 74 es un ejemplo: un montón de fanfarronadas sobre “eventos de Bernoulli” y bisección cuando todo lo que necesita es una raíz cúbica. Por supuesto, si se redujera a llamar a una función raíz de cubo incorporada, sería difícil contar esto como un “algoritmo”. Si bien implementar la raíz del cubo usted mismo (por ejemplo, ¡con bisección!) Es realmente una tontería en estos días, definitivamente no vale la pena hacerlo en Python de todos modos.

Como se mencionó en otra respuesta, espero que esta respuesta no sea demasiado negativa. Creo que Tomáš hizo un buen trabajo en esta serie, y debería ser elogiado por simplemente seguir adelante con la idea en primer lugar, así como por el claro esfuerzo que puso en la escritura / ilustración de cada publicación.

Yo:

mientras lee el problema 100.

Está bien, lo confieso, no leí. Acabo de elegir uno. Éste:

Día 100: tamiz segmentado de Eratóstenes

Para el algoritmo número 100 elegí un segmentado

Tamiz de Eratóstenes para primos de hasta 10⁹ implementado en Cython. Y esta vez el objetivo es proporcionar un algoritmo que sea lo más rápido posible.

¿Estas cosas incluso se utilizan en el código del mundo real para resolver problemas del mundo real?

No sé acerca de otros desarrolladores, pero estoy demasiado ocupado eliminando errores en el código que tengo en el dominio público. El código que tiene una base de usuarios de más de 20,000 usuarios. Y ese es solo uno de los productos de software que soporto.