¿Por qué no necesito conocer algoritmos para lenguajes de programación modernos como Java o Python?

Básicamente, estoy de acuerdo con Garry Taylor. Probablemente podrá resolver el 99% de los problemas sin tener en cuenta el conocimiento de algoritmos (profundos). Sin embargo, si solo pasa un par de semanas o meses para terminar de leer uno o dos libros de algoritmos. le ayudará a pasar la entrevista y aumentará la confianza en la programación. Hay dos libros que me gustaría recomendarles. Puede elegir uno de ellos para leerlo una vez, dos veces … hasta que tenga el concepto / conocimiento básico sobre los algoritmos más utilizados (clasificación, búsqueda binaria …), está totalmente bien omitir los algoritmos avanzados (Gráfico …) si no te interesa

  • Introducción a los algoritmos, 3a edición
  • Estructuras de datos y algoritmos en Java, sexta edición

(Actualizado el 24/12) Creo que lo que quiere decir el autor es: Muchas de las estructuras de datos más utilizadas (Lista / Conjunto / Mapa / Montón …) y Algoritmos (Ordenar, Búsqueda binaria) ya se han implementado en los lenguajes de programación modernos. No es necesario inclinar las estructuras de datos / algoritmos profundamente para tener la capacidad de implementarlos usted mismo. Sin embargo, para aprender un lenguaje de programación y usarlo eficientemente, necesitará los conceptos básicos sobre las estructuras / algoritmos de datos más utilizados.

Significa que probablemente deberías elegir otro libro porque el autor de este no tiene una pista sobre la programación.

No, haber escrito un libro no es prueba suficiente de que sabes de lo que estás hablando, y hay muchos libros muy pobres. Algunos simplifican demasiado y hacen falsas promesas y declaraciones, otros complican demasiado las cosas y hay muchas otras formas de escribir libros pobres.

Este parece caer en la primera categoría. Algunas colecciones de libros completos son de esta categoría. Por ejemplo, la serie “Enséñate a programar con algún lenguaje en 21 días” está diciendo claramente una mentira. Simplemente elegirás los conceptos básicos de un idioma en unas pocas semanas. Si ya conoce otros 2 o 3 idiomas, eso podría ser suficiente para usarlo. Si es tu primer lenguaje de programación, no sabrás mucho para entonces.

Como sugiere el título Head First . El libro que está leyendo intenta evitar casi toda teoría y, en cambio, ir a muestras prácticas de uso de un idioma. La palabra Algoritmo se usa en ese contexto como sinónimo de teoría y se supone implícitamente que oculta algo complejo, lo que simplemente no es cierto. Si sabe cómo realizar sumas o restas a mano, ya conoce algunos algoritmos algebric clásicos. ¿No sabes cómo realizar una adición? Es probable que incluso conozca algunos algoritmos bastante sofisticados, por ejemplo, los que se utilizan para realizar la multiplicación o división a mano.

Comprobar (en el mundo físico) si una pila de revistas está ordenada, como pasar del primero al último de la pila y verificar que las fechas siempre estén en orden creciente es un algoritmo. Bueno, si eres realmente inteligente , podrías usar el número de problema en lugar de la fecha porque sabes que las dos variables están relacionadas.

Probablemente ni siquiera pienses conscientemente al realizar tales tareas. Este es el tipo de algoritmos que encontrará en la programación diaria. Esto es cierto con los lenguajes de programación modernos y ya era cierto hace 30 años con los lenguajes disponibles en ese momento.

Si puede comprender cómo realizar tareas de ese nivel, será suficiente para aprender a programar. Si no … bueno, deberías probar otra cosa, la programación no es para ti. Pero realmente , ¿conoces a muchas personas que no pueden verificar si una pila de revistas está ordenada en números de números de fechas crecientes? Yo sí, pero están clasificados como discapacitados mentales.

Los algoritmos realmente significan una comprensión simple de la lógica base y las estructuras de datos necesarias para resolver los problemas en cuestión. Se trata de entender lo que estás haciendo. Y promete enseñarte programación sin hacerte entender lo que estás haciendo, no parece una idea tan brillante …

¿Por qué no necesito saber algoritmo para lenguaje de programación moderno como Java, Python?

Veamos primero la definición de Algoritmo: un algoritmo es básicamente una instancia de lógica escrita en software por desarrolladores de software para que sea efectiva para la (s) computadora (s) objetivo (s) para que las máquinas objetivo produzcan resultados a partir de una entrada dada (tal vez nula) . (Src: Wikipedia).

El algoritmo es solo una lógica y es independiente de cualquier lenguaje. De hecho, también es independiente de la informática. Puede pertenecer a cualquier campo.

Si trato de poner de manera más simple, incluso si haces 2+ 2 = 4, también es un algoritmo simple. Por lo tanto, no puede mantenerse alejado del algoritmo, incluso si lo desea. Cualquier cosa que hagas puede desglosarse en un algoritmo. No tiene que venir en un libro ni debe ir siempre a algunas ecuaciones matemáticas complejas.

Veamos otro escenario: si desea ir a la casa de un amigo, normalmente tomará el camino más corto. Esto también es un algoritmo.

Entonces no hay una pregunta como ¿Por qué no necesito …? , siempre debe conocer el algoritmo si programa. El algoritmo nos proporciona una forma clara de enfoque y luego nos ayuda a mejorar.

En los lenguajes de programación modernos tenemos algunos algoritmos como buscar y ordenar ya implementados en forma de funciones / métodos, pero eso es solo la punta del iceberg. La mayoría de la estructura de datos también se ocupa de idiomas como Java. Pero no es el caso de que todo esté siempre disponible en el plato y ese es el desafío y la diversión de programar.

Si se ha implementado algún problema utilizando algún algoritmo, entonces es un buen hábito idear el nuestro también. Puede que no sea mejor o mejor que el presente, pero definitivamente ayudará a mejorar nuestras habilidades para resolver problemas.

Los algoritmos no son solo pasos para resolver, sino que nos muestran cuán grandes matemáticos o personas que crearon deben haber pensado y podemos aprender de ello siempre.

Pensar y desarrollar algoritmo.

Feliz codificación.

Cuídate 🙂

¡¿Qué?! Creo que leíste mal ese libro. Los algoritmos no solo son necesarios para usar Java y Python, sino que son uno de los fundamentos de la programación.

– actualización –
Basado en su adición a los detalles de la pregunta de la sección relevante del libro, diría que están siendo bastante descuidados en su uso. De hecho, puede ser menos necesario conocer ciertos algoritmos, como la ordenación, que generalmente se implementan en las bibliotecas de idiomas. Sin embargo, como observó Vishal Anand, los algoritmos son los bloques de construcción lógicos de una aplicación.

El conjunto de algoritmos posibles es infinito, por lo que una biblioteca de idiomas solo implementará unos pocos de uso común. Todavía tiene que codificar aquellos que son únicos para su aplicación en particular, o que son demasiado triviales para implementar en una biblioteca.

Además, es cierto que la implementación de la biblioteca de cosas como la ordenación es probablemente más rápida y eficiente de lo que probablemente pueda codificar de manera efectiva. Aun así, es bueno entender lo que está sucediendo en esa implementación de “caja negra”, así como sus variantes y opciones, para poder usarla de manera más eficiente.

Los detalles de la pregunta responden la pregunta. Leamos eso de nuevo:

Hoy en día … los lenguajes de programación hacen mucho por ti.
Por ejemplo, si necesita ordenar algo en Python, puede
llame al método sort () en un objeto o use el sorted () incorporado
función, y la cosa con la que está trabajando está debidamente ordenada.

Estoy de acuerdo. Conocer algoritmos, por ejemplo, el material enseñado en un curso típico de algoritmos de pregrado, aún lo convertirá en un mejor programador, pero ahora es mucho menos importante que antes de los días de bibliotecas extensas. Estoy seguro de que hay un puñado de programadores de Python que no pueden usar el “algoritmo” en una oración para ti, pero aún así hacen el trabajo.

Otros respondedores parecen estar interpretando el “algoritmo” en un sentido inútilmente amplio. Tal interpretación hace que la pregunta sea inútil y tautológica: “¿Por qué no necesito saber cómo codificar para poder codificar en ciertos idiomas?” Hay muchas preguntas tontas sobre Quora, pero al menos demos al beneficiario el beneficio de la duda.

d = {}

Crea una estructura de datos de diccionario en Python.

El algoritmo sobre cómo se implementó se trata en este video aquí -> http://pyvideo.org/video/276/the

De esta manera, se incluyen muchos procedimientos de uso común en todos los lenguajes de programación modernos para que sea mucho más rápido escribir programas.

Para un desarrollador de aplicaciones, el conocimiento de algoritmos no es tan necesario, pero lo ayudará a escribir mejores códigos de alto rendimiento. Los desarrolladores de aplicaciones generalmente se concentran en aprender patrones de diseño.

Pero cuando un desarrollador de aplicaciones sube de nivel para convertirse en diseñador de bibliotecas. Realmente necesitas saber algoritmos.

Desde un punto de vista muy práctico, realmente no necesita saber mucho sobre algoritmos para escribir la mayoría de los programas. Los usarás todo el tiempo, pero ¿ escribir el tuyo ? Muy raramente escribirás uno de mucha complejidad.

Personalmente, creo que la programación, con o sin algoritmos, es mucho más complicada de lo que solía ser, básicamente porque se espera que logremos mucho más. Compare un juego más vendido en un Commodore 64 con un juego más vendido en una Playstation 4.

Escribir un sistema operativo para una computadora de escritorio solía estar dentro de las capacidades de una o dos personas, en estos días, bueno, en realidad no.

Entonces, desde mi punto de vista, la programación es significativamente más compleja de lo que solía ser, pero los algoritmos no tienen nada que ver con eso.

Además, diría que los lenguajes tampoco tienen mucho que ver con eso, puedes escribir algoritmos en C, Java o lo que quieras, ya no es necesario o no es necesario para ningún lenguaje dado.

Dependiendo de las tareas que realice, es posible que necesite una fuerte capacidad de algoritmo, una capacidad de algoritmo medio o casi ninguna. Solo depende del programa que estés escribiendo.

Estoy de acuerdo con la respuesta de Christophe Grosjean, que el autor del libro está equivocado.

Debe estar al menos vagamente familiarizado con todos los algoritmos y estructuras de datos más populares, sin importar el idioma que utilice. No estoy diciendo que debería poder escribir el código en el comando, pero cuando vea un problema que obviamente tiene alguna solución existente, debería ser capaz de reconocerlo, y simplemente conocer los nombres de las funciones en el estándar La biblioteca no te ayudará.

Por ejemplo, alguien preguntó aquí en Quora cómo resolver un rompecabezas de encontrar una palabra en francés. ¿Mi respuesta? Usa un trie. Ahora, Python no tiene intentos (pero tiene buenos dictados, que te acercan mucho), pero incluso si lo hiciera, ¿qué me haría pensar en eso si no supiera qué era un trie y cómo funcionaba? ?

Un algoritmo es un método para hacer algo. La definición en el libro es algo así como la definición de “algoritmo”, pero no lo llamaría ni siquiera cerca, más como “en la misma ciudad, pero no cerca del estadio”.

Aprender algoritmos es aprender a resolver un problema paso a paso. Si no puede hacer eso, no puede escribir un programa (que es, básicamente, resolver un problema paso a paso).

Se dice que leerlo en Internet no significa que sea cierto (leí en Internet que Abraham Lincoln lo publicó originalmente), y leerlo en un libro tampoco significa que sea cierto.

Cualquiera puede escribir un libro, lo único que les importa a los editores es si venderá, no si es correcto.

“No es necesario que conozca algoritmos para los lenguajes de programación modernos” es como “COBOL se auto-comenta”, una broma para programadores experimentados que tienen algo con lo que romper la monotonía de corregir errores de novato.

Creo que al menos necesita conocer las estructuras de datos o algoritmos correspondientes implementados en la biblioteca de estos lenguajes, ya que importa mucho el rendimiento relacionado con el tiempo o la complejidad de la memoria.

More Interesting

¿Por qué es 5n + 8n ^ 2 + 100n ^ 3 = O (n ^ 4)?

Un problema importante con los algoritmos de programación prioritarios es el bloqueo indefinido o la inanición. ¿Puede explicar el concepto de inanición y cómo a menudo se resuelve en la programación de prioridades?

¿Qué puedes hacer con los algoritmos?

¿Qué representan realmente los números de Grundy en un juego?

¿Cómo encontramos la altura de un árbol binario? ¿Cómo se relaciona con el nivel?

¿Cómo se representa a los usuarios en código en el sitio web de Quora o en cualquier otro sitio de redes sociales?

¿Por qué no hay soluciones a pedido de Hadoop para múltiples inquilinos?

Cómo aprender a utilizar el algoritmo lenguaje de programación

¿Resolver problemas en Topcoder / Codeforces es una buena manera de aprender Java Collections Framework?

¿Hay algo llamado Algoritmo de Manhattan?

Cómo comenzar a hacer mi propia solución de divide y vencerás

Dada una biblioteca que proporciona una coincidencia aproximada de cadenas, ¿cuáles son algunos procedimientos adicionales que pueden explicar una mejor coincidencia de cadenas?

¿Cuáles son los algoritmos detrás de las simulaciones de partículas en C / C ++?

¿Pueden los algoritmos de aprendizaje automático predecir el precio de las acciones en los mercados de valores?

Actualmente estoy en USACO Gold, pero apenas puedo resolver nada. ¿Qué debo hacer para ser más competente? ¿Dominar el oro es solo una cuestión de aprender toneladas de algoritmos, o necesita más que eso?