Para aprender la codificación, ¿primero se debe aprender un lenguaje o algoritmos?

A2A (y tengo una fuerte opinión sobre esto)

A la mayoría de las personas les resultará difícil entender los algoritmos hasta que hayan aprendido un poco sobre al menos un lenguaje de programación. Cualquiera que esté en condiciones de comprender algoritmos sin experiencia en codificación realmente no tendría que hacer la pregunta.

Hay varios contribuyentes prolíficos de Quora que responden a todas las preguntas sobre el aprendizaje de idiomas con “No aprendas idiomas, aprende programación. Aquí hay un libro sobre algoritmos, comience allí ”. Creo que, si bien tienen un punto, ese consejo es inútil y posiblemente más que inútil. Trataré de explicar por qué …

Un algoritmo es una forma práctica de resolver un problema dado. Ahora

  1. Es difícil apreciar su valor hasta que te has golpeado la cabeza contra la resolución de algunos problemas por tu cuenta.
  2. Por lo general, hay más de una opción de algoritmo (o combinación de ellos) que puede usar para resolver un problema. Esas alternativas tienen características de rendimiento diferentes y se adaptan mejor a algunas arquitecturas / lenguajes / paradigmas que a otros.
  3. Es difícil elegir entre esas alternativas sin alguna experiencia y conocimiento del lenguaje / plataforma / arquitectura
  4. Obligar a los recién llegados a aprender algoritmos cuando no tienen ninguna experiencia y conocimiento simplemente los somete a un aprendizaje memorístico.
  5. Usamos computadoras para resolver problemas. Los algoritmos son posibles soluciones a un problema. La verdadera comprensión es entender el problema.

Creo que aprender algoritmos establecidos es muy útil y no debe ser descuidado. Creo firmemente que es importante ver los conceptos informáticos reales, que los detalles de un lenguaje pueden ocultar fácilmente. Pero a nadie se le debe negar la pura diversión de aprender a controlar las computadoras por sí mismos y, por favor, que disfruten de eso por un tiempo sin matar su creatividad.

Aquellos que insisten en que comienzas con algoritmos están terriblemente preocupados de que de lo contrario lo harás mal y lo pensarás mal . Se arriesgan a evitar que pienses en ello.

Así que elige un idioma y diviértete resolviendo problemas. Luego busque los libros serios sobre algoritmos y estructuras de datos. Vea cuánto significa algo para usted. Luego vuelve a divertirte un poco. Vuelve a aprender un poco más. En el camino, inventarás un montón de algoritmos para ti.

Ni la diversión ni el aprendizaje nunca tienen que parar.

Imagina que fuiste a aprender un algoritmo llamado DFS, luego lees algo como esto:

  1. Comience desde un nodo primario no visitado.
  2. Usando la recursividad, vaya a todos sus hijos, márquelos como visitados, luego inicie DFS nuevamente desde cada uno de ellos.

Este es un ejemplo muy simple, un algoritmo muy simple, pero ¿crees que una persona que no sabe lo que llamamos “codificación” será capaz de entenderlo?

Los algoritmos en general son formas sistemáticas de resolver problemas, pero no olvide que, si desea resolver un problema, debe conocer algunas cosas a su alrededor, algunos conceptos.

En los algoritmos computacionales, también debe tener en cuenta algunas cosas, no me gusta el término “codificación”, ya que no se trata solo de escribir código, se trata de conceptos.

Por lo tanto, realmente puede aprender algoritmos computacionales sin poder escribir código, siempre y cuando pueda comprender conceptos como los que mencioné anteriormente (recursión, gráfico, nodo, padre, hijo). Entonces, realmente puede comenzar a hacer algoritmos antes de “codificar” , tampoco está disponible, pero creo que es la forma correcta de aprender algoritmos, aprenderlos teóricamente (comprenderlos bien) y luego comenzar a escribir código más tarde después de ser lo suficientemente bueno con los conceptos y el pensamiento en algoritmos informáticos.

Según aprender “codificación” antes de los algoritmos, todos (desafortunadamente) lo hicimos, y no creo que sea la forma correcta, pero funcionará, ya que aquí estamos, lo hicimos de la manera incorrecta, pero de todos modos aprendido.

Prefiero aprender un idioma. Aquí hay un algoritmo de un artículo que acabo de leer ( http://www.utd.edu/~kxh060100/wa …):

¿Entiendes esa mierda? ¡Yo no!

El código es mucho más limpio porque expresa su intención sin derivados, integrales, etc.

Por ejemplo, la serie infinita sinusoidal estándar es:

[matemáticas] sin (x) = \ sum_ {n = 0} ^ {\ infty} \ frac {(- 1) ^ nx ^ {2n}} {(2n)!} [/ matemáticas]

Pero se puede expresar claramente en código como:

función sin (x) {
var mxx = -x * x;
var sin = 1;
var n = 0;
término var = 1;
para (var i = 1; i <= 2 * iterNum; i ++) {
n = n + 2;
term = term * mxx / (n * (n + 1));
pecado = pecado + término
}
sin = x * sin;
console.log (sin + “= mi función”);
console.log (Math.sin (x) + “math.sin”);
}

** Actualización **

Notación matemática actualizada

La codificación (o “programación”) es algo que realmente solo se aprende a través del ejemplo y la práctica. Es muy difícil aprender la teoría y luego poder implementarla de manera que pueda hacer algo más complejo que una aplicación CLI de preguntas y respuestas. Al menos a la mayoría de las personas les resulta imposible hacer lo contrario. Por esta razón, debe elegir un idioma como vehículo utilizado para aprender algoritmos.

En realidad, su opción más importante (y la primera) es el tipo de programas que desea hacer. Eso te guiaría a los idiomas que deberías usar.

Luego intenta encontrar recursos para aprender. Ya sean cursos, libros, tutoriales, etc. En línea o de otra manera. Estos tienden a ser mucho más específicos para cualquier idioma en particular. Todos ellos le enseñan algoritmos (y estructuras de datos), simplemente usando su elección específica del lenguaje como vehículo a través del cual se enseñan los ejemplos y ejercicios de práctica.

Algunos cursos intentan ser “independientes del idioma”, pero la mayoría simplemente siguen la ruta de introducir más de un idioma. Cambiando a un idioma diferente en algún momento o teniendo múltiples ejemplos en varios idiomas. Pensé en algo como esto, donde mi curso comenzó con Pascal, pasé a C ++ y luego a Java. Aunque he sido programador autodidacta durante algunos años antes de comenzar ese curso, mis primeros idiomas fueron Basic y AutoLisp, seguidos de C y Common Lisp.

Realmente no importa tanto el idioma que elijas. La mayoría son muy similares. Especialmente si los mira desde un aspecto teórico de cómo se hacen los algoritmos y las estructuras de datos. Y, por lo tanto, cualquier idioma tiende a enseñarle las habilidades relevantes necesarias para cualquier otro (en la mayoría de los casos). La única razón real por la que debería preocuparse por un idioma específico al principio es porque desea encontrar trabajo lo antes posible; por lo tanto, elegir uno que se use comúnmente en el dominio elegido es probablemente su mejor opción. Después de este aprendizaje, otros te hacen mejor y más empleable.

Me gusta proponer un tercer componente más importante. Virtual, todos los programadores, hackers e inventores conocidos no aprendieron a escribir código ni a hacer algoritmos. En su lugar, se toparon con un problema interesante que necesitaba una solución. Algún tipo de desafío, la emoción de: ¿Qué pasa si puedo hacer que este dispositivo haga X en lugar de para lo que está hecho?

Y eso los hizo estudiar más duro, más enfocado y capaz de absorber información que cualquier otra cosa.

¿Cómo aprendiste a hablar francés? ¿Fue la gramática o las palabras lo que te atrajo? ¿O fue esta valiente señorita morena con esta voz baja y labios pecaminosos lo que sonrió ante mis intentos de cerrar la brecha verbal?

Ninguno .

Para codificar, todo lo que necesitas es lógica . Solo intenta resolver los problemas haciendo un pseudocódigo .

Luego estudie sobre un lenguaje y algoritmos simultáneamente. Los idiomas cambian a lo largo del tiempo y su sintaxis cambia, la lógica es lo que permanece con nosotros para siempre.

No dedique su tiempo a una sola tarea, a saber. Lenguaje o algoritmos. Te acostumbrarás a la sintaxis de un idioma con práctica y aprenderás algoritmos a lo largo del tiempo.

Solo mira algunos videos básicos en YouTube sobre cualquiera de los idiomas que prefieras usar y prueba sus ejemplos practicando en IDEs o puedes consultar algunos buenos libros.

La práctica es la clave.

Usted es libre de publicar sus consultas en los comentarios.

Gracias.

Como alguien que preguntó lo mismo hace 9 meses, diría que debes elegir un lenguaje de programación y aprender la sintaxis básica y las bibliotecas antes.

Elegí Java y comencé con 30 días de desafío de código en HackerRank (no lo hice en 30 días, más como 3 meses).

Recomiendo el curso Algorithm Toolbox de la Universidad de California-San Diego en Coursera. Realmente aprendí mucho con eso (C ++, Java o Python 3 son los principales lenguajes compatibles), pero toma al menos 2/3 meses para aprender tu idioma antes para que no tengas problemas menores (como lo hice).

A menos que esté en curso por adelantado, no quisiera aprenderlos por separado.

Al principio pueden complementarse muy bien. Probablemente recomendaría aprenderlos en paralelo. La teoría te enseña a pensar sobre los conceptos y el problema real que hay que abordar. La programación no solo hace que las cosas sean concretas, sino que te ayuda a organizar y expresar tus pensamientos de una manera muy estructurada con una forma “automática” de verificar si realmente funciona a través de un compilador y probar casos. El compilador se asegura de que su pensamiento algorítmico realmente analice algo sensato y los casos de prueba se aseguran de que la idea (lo más probable) funcione.

Al final, podría estar más inclinado a hacer más uno u otro, pero al principio para su propio beneficio, ¡recomiendo ambos!


No me di cuenta de que escribiste “un lenguaje o algoritmos” en tu pregunta, leí “codificación o algoritmos” que me gusta distinguir entre los dos. Recomiendo ** no ** centrarse demasiado en el idioma. Los idiomas, en serio, no importan tanto. Creo que lo codifiqué durante aproximadamente 7 meses todos los días y matlab durante casi un año y Python durante un año tal vez. En este momento no creo recordar ninguno de ellos muy bien (excepto tal vez alguna pitón). Los idiomas van y vienen y son relativamente fáciles de aprender. Además, el aprendizaje de la sintaxis es extremadamente aburrido. En lugar de eso, enfóquese en llegar a un idioma que lo haga pensar algorítmicamente tan pronto como sea posible con las menores barreras y si realmente necesita saber qué son los punteros, puede pasar a un idioma diferente. Pero inicialmente debe intentar obtener un lenguaje en el que pueda codificar lo más rápido posible, aprender más y, por supuesto, divertirse lo más posible.

Aprecio tu honesto dilema porque pasé por lo mismo una vez. Un error que he visto que los maestros cometen con mayor frecuencia al introducir la codificación es introducir un idioma directamente. No. Puedes aprender la semántica en cualquier momento. Primero debe saber lo que necesita construir: el algoritmo. Es como si pudieras aprender a hablar alemán o francés, pero debes saber lo que quieres hablar. Solo entonces puedes entender todo el potencial de un idioma.

Necesitas aprender ambos. Lea Teach Yourself Programming in Diez años para obtener más información.

More Interesting

¿Hay alguna diferencia entre los algoritmos estocásticos y los probabilísticos?

Un k-palíndromo es una cadena que se transforma en un palíndromo al eliminar como máximo k caracteres de él. Dada una cadena S y un número entero K, ¿encuentra si S es un k-palíndromo o no? Restricciones: S tiene como máximo 20,000 caracteres y 0 <= k <= 30

¿Se puede resolver un cubo de Rubik sin sus algoritmos?

¿Cuáles son los beneficios del árbol de búsqueda binario?

¿Hay un problema DP estándar similar a SPOJ Farida?

¿Qué algoritmo usa Google para GMaps?

¿Tengo que hacer programación competitiva si estoy aprendiendo la estructura de datos y los algoritmos, mientras que la programación competitiva me distrae o primero tengo que aprender la estructura de datos y el algoritmo por completo y luego saltar a la programación competitiva?

Cómo implementar el algoritmo de similitud de oraciones

¿Por qué los algoritmos de compresión de datos sin pérdida no funcionan bien en archivos de video?

¿Alguien puede explicar la solución del problema LabelMaker de Hacker Cup de Facebook?

Una función de densidad de probabilidad, f, no es cero cuando a <x 0. ¿Cuáles son las restricciones en a, by k?

¿Cuál es la diferencia entre las funciones recursivas estáticas y las funciones recursivas no estáticas C / C ++?

En el algoritmo de búsqueda A * deberíamos tener una lista abierta y otra cerrada. ¿Cómo los implementa utilizando tanto el hashmap como una cola prioritaria en Java?

¿Es obligatorio aprender matemáticas discretas para aprender algoritmos y estructuras de datos?

¿Cuál sería el plan de trabajo general o el calendario para as en programación competitiva?