¿Cuánto debe saber un desarrollador web sobre estructuras de datos y algoritmos?

Hay dos partes en esta respuesta: una se refiere a lo que debe saber y la segunda a lo que debe saber. Se les preguntó a ambos y los veo muy diferentes. El primero es el mínimo para sobrevivir y el segundo es lo que te prepara para el éxito futuro.

En primer lugar, es importante definir “Desarrollador web” para comprender la necesidad de saber. Si hablamos de un ingeniero front-end, veo que se requieren los siguientes idiomas comunes:

  • HTML
  • CSS
  • JavaScript (incluido un par de marcos)

Para HTML y CSS, hay una cantidad mínima de estructura de datos y conocimiento algorítmico requerido (una vez más … requerido ).

Pero para escribir JavaScript efectivo o incluso usar marcos JS comunes, es muy importante tener una buena comprensión de:

  • Estructuras de datos: al menos hashmap (cada objeto JS es realmente solo un hashmap), matrices / listas.
  • Algoritmos comunes para ordenar / buscar y sus compensaciones: esto es importante para escribir JS eficientes. Digamos que si tiene un gran conjunto de datos en la memoria, ¿cuál es la mejor manera de mostrarlo al usuario en orden ordenado? Es posible que no siempre necesite escribir esto usted mismo, pero es muy importante comprender cómo funciona.
  • Uso y eficiencia de la memoria: es posible que no necesite saber exactamente cómo se asigna la memoria en el navegador, pero definitivamente debe conocer las formas más eficientes de almacenar datos en la memoria y cómo eso puede afectar al rendimiento.

Para cualquier desarrollo web:

  • Comunicación HTTP / Red: esto es realmente importante para los problemas de depuración (cosas como el elemento de inspección de Chrome). Sepa cómo funciona cada pestaña y para qué sirve.

Ahora, para la segunda parte: lo que debes saber.

¡Todas las anteriores!

Si comienza a trabajar en el front-end de aplicaciones web o sitios web como ingeniero de front-end, inevitablemente se encontrará con problemas o interacciones con los sistemas de back-end. En estos casos, es muy ventajoso poder saber una o dos cosas sobre los sistemas de back-end, cómo funcionan (¡o todo!) Y las estructuras de datos y las técnicas algorítmicas utilizadas.

En la mayoría de los sistemas, es de vital importancia tener al menos un conocimiento básico sobre cómo funciona la pila completa. Esto lo ayudará a depurar problemas que pueden manifestarse en el front-end, pero que tienen una causa en algún lugar del sistema o incluso en el hardware en el que se ejecuta el software.

No digo que tenga que saber todas estas cosas el día 1, pero es un objetivo útil tener una comprensión lo más completa posible del sistema, incluso si se está especializando en el front-end.

1. ¿Más que el más común? Supongo que la respuesta es no. De hecho, si puede manejar correctamente las listas de doble enlace, en teoría puede resolver todo. Saber cómo funcionan los árboles es interesante (conceptualmente es fundamental para la manipulación del DOM), así como el equilibrio y todas esas cosas interesantes. ¿Es fundamental? No. Puede buscarlo según sea necesario, en la mayoría de los casos.

2. Analizar el tiempo de ejecución? Bueno … No realmente, pero interesante al menos aproximado. Saber si algo es O (n) u O (n ^ 2) es increíblemente importante para la optimización de la velocidad. Pero esto no es * tan * difícil. Aparte de eso, generalmente no se necesita un análisis más detallado. Y si en algún caso lo es, puede obtener ayuda o aprender cómo hacerlo mejor.

3. ¿Probar matemáticamente? No. Soy matemático por formación, desarrollador web (entre muchas otras cosas) como oficio / trabajo. Y hasta ahora he necesitado demostrar nada. Por supuesto, si hace una pieza de software muy compleja junto con una interfaz web, tal vez necesite probar (en el sentido de descartar todas las demás posibilidades) que algo sucede. Pero no es necesario ir al registro (log (n)) aquí.

4. Diseño de estructuras de datos? Probablemente no sea necesario. Y en cierto sentido, la mayoría de las estructuras de datos ya están creadas. No estoy hablando en serio de esto, pero en un lenguaje donde puedes tener estructuras / objetos y matrices / árboles de ellos, por lo general no necesitas ser más elegante. Probablemente, la única estructura que creará repetidamente que no se maneja fuera de la caja en todos los idiomas es un duplet del tipo {string, int} y que desea ordenar por int (PHP lo tiene, Go necesitaría un clasificador específico escrito, Javascript también)

5. ¿Debajo del capó? Probablemente no valga la pena. Como desarrollador web, tiene un 90% de probabilidades de utilizar un lenguaje recolectado de basura (PHP, Go, Python, Javascript, creo) y tal vez correr en una “máquina virtual de lenguaje” (Javascript, PHP). Entonces, ¿qué es realmente? De todos modos, esto es bastante abstracto. Poder hacer un perfil de dónde puede estar perdiendo memoria es imprescindible, pero generalmente solo necesitará un conocimiento pasajero. Y probablemente, aprender sobre los grupos de recursos para evitar el recolector de basura.

6. Arquitectura de la computadora? Bueno, es interesante tener un conocimiento pasajero de cómo funcionan las redes, la memoria y las CPU, pero no es esencial. Pero piense en ello como “cultura general”, cosas que probablemente quiera saber a largo plazo.

Yo diría en un contexto completo.

La mayoría de las veces solo requeriría que utilicemos las estructuras de datos proporcionadas de manera adecuada. El programador necesita entender cómo dif. cosas que está usando funciona. Puede definir su propio punto de referencia para esto, pero primero debe aprender a pensar como programador y luego como “desarrollador web”.

Puede consultar mi blog sobre el aprendizaje del desarrollo web con Rails en el siguiente,

Pautas de desarrollo de rieles – Parte 1 – Introducción

Pautas de desarrollo de rieles – Parte 2 – Requisitos previos fundamentales

Pautas de desarrollo de Rails – Parte 3 – Fundamentos de OOP, SQL, Web y Rails

Gracias

Si su objetivo es poder hacer aplicaciones CRUD estándar, debería poder usar estructuras de datos. No tienes que saber lo interno. Probablemente no va a construir nuevos algoritmos.

Si va a diseñar soluciones, que incluyen la selección de hardware y la toma de decisiones sobre tecnologías, entonces debe estar muy familiarizado con las arquitecturas informáticas para poder comprender cómo funcionan conjuntamente esas tecnologías y hardware. Debe saber lo suficiente sobre algoritmos para que las personas no se cubran los ojos y también para evaluar el riesgo. Probablemente no construya algoritmos por su cuenta.

Sin embargo, probablemente necesite saber cómo diseñar bases de datos.

Tendrá que crear sus propios algoritmos si va a hacer algo que nadie más ha hecho. Para el 95% de las personas, puede comprar o pedir prestado algo que le funcione.

Estaba trabajando en una empresa que estaba creando motores de búsqueda, y había un par de personas que siempre estaban haciendo una lluvia de ideas sobre algoritmos. Nunca lo hice yo mismo, aunque creé suficiente comprensión y apreciación de los algoritmos de construcción. Finalmente, todo el proyecto murió porque Apache Lucene tenía suficientes características que podríamos usar Lucene en lugar de crear nuestras propias cosas.

Más o menos, necesita saber lo suficiente para poder apreciar lo que implica el desarrollo de algoritmos. Te da la nariz para ello.

Para la programación frontend, los DS y algoritmos básicos serían suficientes, como hashes, listas, árboles, la clasificación sería más que suficiente. No harás nada tú mismo, sobre todo usarías funciones de lenguaje y bibliotecas incorporadas. Sin embargo, comprender los fundamentos lo convertirá en un mejor tomador de decisiones mientras codifica.

Para la programación de backend no hay límite. Según la popularidad de un sitio web, la complejidad de los problemas aumenta y se utilizan todo tipo de DS y algoritmos con ventaja para escalar los servicios. En algunos casos, se inventan nuevos DS y algoritmos.

Hablando pragmáticamente, no esperaría que los desarrolladores web o incluso los ingenieros de software en general necesiten aplicar el conocimiento de algoritmos y estructuras de datos y escribir pruebas rigurosas a diario. Prefiero concentrarme en los patrones de diseño de software, la criptología y las tecnologías web.

Generalmente durante el desarrollo nadie codifica un algoritmo desde cero. Siempre hay una biblioteca bien mantenida que puede reutilizar en su código. Por ejemplo, es posible que sepa la clasificación rápida de memoria, pero siempre hay un método de clasificación disponible en general que ya proporciona el lenguaje que podría utilizar. Por supuesto, antes de usar cualquier método de este tipo, lea su documentación para ver si se ajusta a su propósito y expectativas de rendimiento.

El conocimiento de la administración de memoria sería un regalo al trabajar con navegadores. Además, como sucede con este tipo de conocimientos, contar con ellos le ayudaría a tomar cada decisión de una manera más informada.

Todo lo que un desarrollador web tiene que hacer es poder desarrollar una página web.

Si está preguntando acerca de los requisitos previos de una empresa específica, le sugiero que al menos tenga una comprensión general de esos algoritmos y estructuras de datos comunes y básicos, y sí, POR FAVOR, sepa al menos una o dos cosas sobre la asignación de memoria.

Los desarrolladores web front-end pueden no necesitar un conocimiento profundo de algoritmos y estructuras de datos. Para los desarrolladores web de back-end, es obligatorio. Los desarrolladores de back-end pueden necesitar conocimientos de arquitectura en caso de casos extremos o errores oscuros, pero la mayoría de las veces deberían estar bien. Si usted es el desarrollador senior de back-end, es posible que deba tomar decisiones sobre qué tecnologías y / o hardware se utilizan. Necesitarías una base teórica sólida. Yo personalmente creo en aprender todo lo que puedas.

More Interesting

¿Cuál es mejor para el futuro, ingeniería informática o ingeniería de software?

¿Qué hacen los ingenieros de software en empresas como Google y Facebook?

¿Cuáles son las diferentes posiciones en una empresa de productos de software y cuáles son sus roles?

Como arquitecto tradicional, ¿tendría sentido para mí cambiarme a una compañía de software?

¿Es posible cambiar a software?

¿Cómo es la transición de la ingeniería eléctrica al aprendizaje automático y la ingeniería de software?

¿Cuáles son los mayores desafíos para los desarrolladores de iOS a tiempo completo?

Si fuera a escribir un nuevo sistema operativo con un objetivo de IA, ¿qué idioma y proyectos de código abierto utilizaría para ayudarlo?

¿Cuál es su mayor logro como ingeniero de automatización de pruebas de software?

¿Qué son las listas de verificación de pruebas en las pruebas de software?

¿Es una empresa de consultoría un buen lugar para comenzar una carrera de ingeniero de software para un recién graduado, si quiero hacer la transición a Google, Apple, Blizzard, etc., después de dominar la programación?

¿Debo transferir debido a mi horrible GPA?

Cómo ganar dinero de otras fuentes mientras trabaja en una empresa de software

¿Cuáles son los beneficios del software personalizado?

Cómo obtener una visión general razonable de los métodos y herramientas de programación suficientes para permitirme comprender lo que se requiere para construir una solución de tecnología web como algunos de los sitios principales