Han pasado seis años desde que he estado codificando. Codificación en todo tipo de cosas como ActionScript, JavaScript, Java, PHP, Ajax, XML HTML, ASP, etc. He utilizado matrices, mapas, listas vinculadas, conjuntos, etc. y donde trabajé personas como yo. Pero cada vez que me entrevistan es muy probable que la gente me haga preguntas sobre hashes, árboles, pilas y colas. Algunas preguntas son sobre el malabarismo de algunos algoritmos de clasificación. No sé si realmente debería conocerlos o si debería dejar de llamarme programador. Hay algo en mí que también me dice que incluso si las personas que hacen todas estas preguntas me seleccionan, nunca me harán trabajar en estas cosas. ¿De verdad estoy obligado a saber todo esto?
interview
self-improvement
algorithms
data-structures
sushil bharwani
fuente
fuente
Respuestas:
Si todo lo que sabes hacer es escribir código de pegamento, puedes llamarte un mono de código. Se debe escribir una gran cantidad de código de pegamento y puede ganarse la vida como un mono de código. Para llamarse a sí mismo Real Programmer TM y ser confiable cuando el código debe escribirse desde cero, debe conocer algoritmos, estructuras de datos, administración de memoria, punteros, lenguaje ensamblador, etc. y comprender cómo usar este conocimiento para evaluar las compensaciones.
fuente
los que no conocen la historia están condenados a reinventarla
fuente
Bueno, trabajar en un lenguaje como JavaScript hace que esto sea bastante obsolote, ya que una matriz es una mezcla entre un vector, un hash y un árbol y se puede usar como una pila o cola. Es muy poco probable que alguna vez necesite o pueda implementar una estructura de datos en JavaScript que supere a la clase Array. Este es también el caso en PHP.
Para Java OTOH, hay una diferencia. Supongo que la biblioteca estándar de Java le proporciona cualquier estructura de datos que necesite. Sin embargo:
Cuando se trata de ordenar algoritmos, no hay mucha necesidad de conocerlos o entenderlos, porque no hay necesidad de implementar uno solo. Sin embargo, si se le proporciona dicho algoritmo, debería poder comprenderlo e implementarlo.
Dos cosas son ciertas:
Las estructuras de datos y los algoritmos son simplemente una cosa, eso es bueno de entender. Y es algo extremadamente claro y formalizado y, por lo tanto, bastante trivial en comparación con las complejidades de la aplicación o la ingeniería de sistemas. Son solo una pequeña pieza en el rompecabezas, pero son fáciles de entender, si está dispuesto a invertir algo de tiempo.
Entonces, no, no los necesita, pero solo sería para su beneficio conocerlos.
fuente
Esta podría ser una ocasión en la que puede haber una distinción semánticamente significativa entre 'programador' e 'ingeniero de software'. En este contexto, específicamente, vemos que usted tiene conocimiento de varios lenguajes de programación y tecnologías relacionadas y que puede usarlos para producir los resultados deseados. Esta es una buena definición operativa de "programador de computadoras".
Me considero un ingeniero de software. En la mayoría de los aspectos cotidianos de mi trabajo, probablemente hago las mismas cosas que tú. Uso lenguaje de computadora y tecnologías relacionadas para producir el resultado deseado. Sin embargo, sí entiendo las estructuras de datos y los algoritmos, y considero que el conocimiento es una base fundamental de mi capacidad para hacer mucho más.
A menudo, aunque no todos los días, mi trabajo consiste en encontrar una solución a problemas complejos para los que no hay soluciones obvias, nada que se aborde directamente por las características del marco que estoy usando o las capacidades del lenguaje en el que estoy trabajando. con. En esto, necesito analizar el problema e idear una solución y, ocasionalmente, este proceso entra en el ámbito de la arquitectura a gran escala.
Si bien una excelente comprensión de estos problemas más profundos es necesaria para hacer ese tipo de trabajo, no es suficiente . En otras palabras, solo saber cómo funciona una tabla hash o por qué un montón suele tener buenas características de rendimiento no es suficiente para ser un arquitecto de sistemas o un ingeniero sénior. Es el punto de partida lógico, y desde allí puede comenzar a profundizar y viajar más ampliamente y obtener la experiencia que también es necesaria para abordar los problemas más grandes.
Supongo que para responder a su pregunta, debe preguntarse: "¿Qué quiero ser? ¿A dónde iré con mi carrera?" Si está contento de continuar haciendo lo que está haciendo, entonces quizás desee aprender suficientes estructuras de datos y algoritmos para superar las preguntas de entrevista en gran medida arbitrarias que enfrenta.
Si quieres crecer en tu carrera y tienes una pasión esencial, debes abrazar estos temas lo más estrictamente que puedas. Si tiene algo de tiempo para trabajar en ellos, una mente abierta y verdadero entusiasmo, encontrará algunas cosas maravillosas y emocionantes. Nunca olvidaré el día que entendí por primera vez quicksort. La sensación de emoción y descubrimiento marcó el rumbo del resto de mi vida, y no podría estar más agradecido por eso. Ahora, no puedo imaginar hacer nada más que trabajar como ingeniero de software.
Mucha suerte con lo que elijas.
fuente
Depende de para qué son los trabajos. Este tipo de cosas son preguntas de entrevista bastante estándar, pero también son poco imaginativas y probablemente no se relacionen con el trabajo en absoluto, ciertamente no es un trabajo que utiliza las tecnologías que enumera.
Para mí, a medida que avanzan las preguntas de la entrevista, son un buen juez de si obtuviste un título en Ciencias de la Computación (y puedo recordarlo) en lugar de cualquier medida de habilidad o conocimiento de programación general.
Te sugiero que o aprendas estas cosas para que puedas completar la entrevista, o simplemente aceptes que preguntar en cualquier lugar no es para ti, pero no, no necesitas saberlo para llamarte programador.
fuente
Gran pregunta Javascript o Java o VC ++ son lenguajes de programación súper inteligentes donde nunca necesitará crear una lista vinculada o una tabla hash desde cero. Pero aún debe tener la capacidad de decidir cuándo usar uno sobre el otro, las penalizaciones de rendimiento y las bonificaciones que se acumulan, etc.
He entrevistado a muchos programadores de API, también conocidos como monos de código, y en la mayoría de las entrevistas no han logrado diseñar sistemas que sean eficientes y escalables. En pocas palabras: conocer un montón de API le dará el pan, pero para la mantequilla necesita comenzar desde los conceptos básicos de la informática.
fuente
Añadiré "sí, por supuesto que todavía puedes llamarte programador". Pero, ¿qué tipo de programador quieres ser? Creo que los mejores programadores tienen al menos cierta base en los fundamentos teóricos. Saben por qué eligieron una estructura de datos / algoritmo particular, así como las compensaciones que vienen con eso. Espero que cualquier desarrollador que entrevisto tenga al menos una comprensión básica, incluso si no usan la misma jerga (aunque no conocer la jerga significa que le resultará más difícil comunicarse con otros desarrolladores).
fuente
¡El conocimiento de los algoritmos le permite decir con confianza cómo se escalarán sus elecciones ! Personalmente considero que esto es necesario para ser un programador senior
fuente
Buen consejo del Análisis de Algoritmos Por Charles E. Leiserson - MIT
fuente
Depende del proyecto: soy ingeniero informático de BEng y trabajo como analista programador.
Pasé mucho tiempo para trabajar en diseño (pruebas, doc, diseño de código). Pero, cuando encuentro un error (o un mal rendimiento) o tengo que codificar una nueva estructura de datos (porque el requisito es muy NUEVO para la aplicación), debo entender dónde está el problema en el algoritmo y debo corregirlo ( Hice esto no muy bien, así que :))
Los algoritmos clásicos y las estructuras de datos son una especie de "patrón de diccionario" en el mundo del desarrollador.
Algunos excelentes enlaces:
fuente
Es posible que sea un buen programador en este momento, pero el conocimiento de la Estructura de datos, los Algoritmos y el conocimiento de otros temas en ciencias de la computación ciertamente ayudarían mucho a mejorarse de muchas maneras:
Es posible que pueda ser más efectivo y más rápido para hacer las cosas. Incluso las personas que ya tienen un título en Ciencias de la Computación y conocen muchos de estos temas tienden a mantenerse al día con los últimos avances para mejorar.
Este conocimiento también será bueno para, si en menor medida, decir si pasa del programador al seguimiento de la gestión más adelante, porque aún podría comprender mejor los aspectos técnicos de los proyectos con este conocimiento.
Por supuesto, la estructura de datos y los algoritmos se solicitan mucho en las entrevistas, por lo que esa es una razón más por la que podría ser útil conocerlos.
fuente
Menciona hashes, árboles, pilas, colas y algoritmos de clasificación. Bueno, las tecnologías que ha mencionado están relacionadas principalmente con páginas web y secuencias de comandos web. Definitivamente deberías entender los árboles como mínimo, para que puedas trabajar bien con el DOM. Pero si las secuencias de comandos son todo lo que necesita hacer, entonces probablemente esté bien. No necesitará la mayoría de las herramientas del oficio para un programador real. Pero eso se debe a que existe una gran diferencia entre el malabarismo de cadenas que constituye la mayoría de los scripts web y lo que la mayoría de nosotros consideramos "programas de escritura".
Trabajo con hashes y árboles prácticamente a diario, y las pilas y colas con menos frecuencia pero con la suficiente frecuencia. La clasificación es básicamente un problema resuelto; casi cualquier idioma tiene una clasificación rápida incorporada en la biblioteca estándar, un método de clasificación en tipos de colección básicos, etc., pero debe saber en qué circunstancias el rendimiento de clasificación rápida puede degradar severamente y las estrategias correctas para retrasar la clasificación.
Si no conociera estos principios y cómo funcionan, probablemente podría hackear soluciones de codificación que funcionen, pero no serían soluciones de muy buena calidad. Corrían lentamente, eran difíciles de leer y difíciles de modificar, reutilizar o ampliar. Entonces, si desea aprender a ser un buen programador, definitivamente debe leer sobre sus algoritmos y estructuras de datos. Realmente mejorarán la calidad de su código.
fuente