¿Cómo es poder codificar pero no conocer algoritmos o estructuras de datos?

¿Es posible codificar sin conocer Algoritmos? No lo creo.

Si sabe codificar y su programa devuelve la salida esperada, ¡woahh! Acaba de implementar un algoritmo que funciona perfectamente.

El problema está en no conocer el MEJOR algoritmo. ¡Tal vez cometió un error aficionado al implementar la búsqueda lineal en una matriz ordenada (o algo así)! Aprender nuevos algoritmos es un proceso gradual. La mayoría de los programadores que conozco aprenden nuevos algoritmos a medida que encuentran nuevos problemas que intentan resolver. Si puede codificar, aprender nuevos algoritmos no es nada difícil.

Además, he trabajado tanto en desarrollo front-end como back-end y juro que ningún curso sobre algoritmos ha sido de alguna manera útil para implementar la lógica de visualización en lenguajes de tipo HTML.

Finalmente, aquí está mi consejo antes de comenzar a aprender algoritmos: domine el concepto de encontrar la complejidad temporal de cualquier algoritmo dado y familiarícese con la notación big-O. Esto es necesario para comparar el rendimiento de cualquiera de los dos algoritmos.

Esto solía describirme … alguna vez. Como alguien que no se encontró con la teoría de algoritmos y estructuras de datos hasta varios años después de que comenzaron a programar, creo que tengo una perspectiva útil sobre esta situación.

Describiré el proceso usando la analogía de aprender un segundo idioma, porque creo que es muy aplicable a este escenario. A menudo, incluso como un hablante relativamente nuevo de un idioma, siempre que uno haya desarrollado un vocabulario suficiente, generalmente es bastante fácil leer periódicos, revistas e incluso novelas. Sin embargo, aunque uno comprende (en general) el significado de cada oración, resulta mucho más difícil comprender los temas subyacentes, como las estructuras gramaticales, las expresiones idiomáticas y el lenguaje figurativo que forman el alma de la literatura.

De manera similar, con el código, si uno es competente en la sintaxis, es bastante fácil entender qué está haciendo cada línea de código; sin embargo, es mucho más difícil entender por qué un fragmento de código se escribe de cierta manera y, a veces, incluso cuál es el propósito de un programa, si uno no tiene una comprensión básica de las estructuras de datos y algoritmos.

Otro problema que uno encuentra como aprendiz de un segundo idioma que tiene un vocabulario decente pero carece de habilidades básicas de gramática, es que si bien es bastante fácil entender los mensajes de los demás, es mucho más difícil (si no imposible) formular sus propias oraciones . Es probable que su audiencia eventualmente capte el significado de sus palabras, pero no hace falta decir que el proceso es tedioso para ambas partes y, a menudo, es extremadamente ineficiente. Muchas veces, uno encuentra que necesitará pasar por un proceso complicado para comunicar efectivamente alguna idea, cuando la gramática simple hubiera permitido una transmisión mucho más fácil del mensaje.

Estoy seguro de que la analogía con el código es bastante clara …

No estoy seguro de lo que quieres decir con “código”. Si no conoce las estructuras de datos, presumiblemente ni siquiera usa matrices, y mucho menos estructuras más complicadas. Por lo tanto, los tipos de cosas que puede hacer (al menos, hacer dentro de un período de tiempo razonable y con un número razonable de líneas de código) tienen un alcance extremadamente limitado. Incluso los tipos de datos primitivos pueden considerarse como “estructuras de datos”, pero lo ignoraré aquí. Aún así, hay toneladas de cosas que realmente no puede hacer sin estructuras de datos. Posiblemente podría hacer cosas relacionadas con la recursividad, pero es probable que sin un conocimiento sólido de los algoritmos no pueda escribir la mayoría de las cosas recursivas no triviales con suficiente eficiencia.
Lo que me lleva al siguiente punto. Cualquier pieza de código es técnicamente una implementación de un “algoritmo”, pero también lo ignoraré aquí. Si quiere decir sin las cosas que aprende en un curso de algoritmos, bueno, es triste decirlo, pero muchos ingenieros de software no usan esas cosas de manera regular, o incluso nunca. En muchos trabajos de desarrollo web comunes y corrientes, realmente no necesita conocer algoritmos avanzados. También aprende algunos algoritmos importantes en cursos anteriores, pero incluso esos no son técnicamente cruciales.

TL; DR: Puedes codificar en HTML y cosas así. Aparte de eso, puede escribir código extremadamente feo porque no sabe qué es una matriz o cómo analizar la eficiencia del tiempo de ejecución. Diría que si no conoce algoritmos o estructuras de datos, realmente no sabe cómo codificar, ya que las estructuras de datos simples como matrices + listas se cubrirían en un curso introductorio sobre informática en la universidad o ciencias de la computación AP.

No es muy diferente. Si surge un problema que puede optimizarse con algoritmos, a menudo solo codifica la solución de fuerza bruta. Usted no es completamente consciente de la complejidad asintótica y hace lo que sea que resuelva el problema de la manera más simple.

More Interesting

¿Se ven afectados los trabajos de desarrollo de software debido a los despidos de TI y la automatización para los nuevos en 2017?

¿Cuál sería el mejor enfoque para hacer una plataforma de descarga OTA para teléfonos móviles?

Noté que muchos ingenieros de software prefieren programar en Linux, pero acceden de forma remota a través de una computadora portátil OS X. ¿Volvemos a la configuración de terminales / mainframes?

Cómo no abrumarme por todas las formas en que podría estructurar mi código

¿Cómo es la transición de un ingeniero de producto a un ingeniero de infraestructura?

Al subcontratar el desarrollo de software, ¿cómo se asegura de que el código sea mantenible, seguro y otros requisitos "invisibles"?

Lo importante en la creación de software: la calidad del código o el resultado final del producto.

¿Es una buena idea desarrollar ERP en PHP? ¿Cuáles son los pros y los contras involucrados?

Cómo mejorar en la estimación de tareas en un proyecto de software

¿Cómo se mantiene el enfoque en aprender constantemente como desarrollador de software?

¿Cómo manejan los ingenieros de software el cambio de la programación a la ejecución de una startup?

¿Sería atractivo tener experiencia en desarrollo web si solicita el curso de ingeniería de software en el Imperial College de Londres?

¿El software del teléfono inteligente se hincha deliberadamente para funcionar peor en dispositivos más antiguos?

¿Cuáles son algunas de las frustraciones más comunes para las personas que trabajan en la industria del software?

¿Cuáles son los beneficios de la programación orientada a objetos?