¿Realmente utilizas los algoritmos informáticos que aprendes en la universidad cuando consigues un trabajo? En caso afirmativo, ¿cuál es el mejor trabajo que puede permitirse en algoritmos?

De hecho, usas algoritmos que aprendes en la universidad en tus entrevistas de trabajo, pero más allá de eso, generalmente esas cosas son completamente inútiles, hasta que se vuelven súper importantes, momento en el que te sientes realmente genial.

A modo de ejemplo, en la universidad era un estudiante de CS con una especialización en matemáticas, y mi concentración en CS era criptografía. Eso significaba que podía entender la teoría detrás de la mayoría de los algoritmos criptográficos, implementar en el código algunos de ellos (aunque versiones más simples de todo hasta AES, que hicimos un poco, pero no todos, a mano), y en general resolver problemas . No estoy muy actualizado en esto, porque nunca lo usas. La regla n. ° 1 de la criptografía NUNCA RODA SU PROPIO ALGORITMO CRIPTOGRÁFICO, porque una buena criptografía es difícil y es trivial cometer un error que nadie atrapará.

Mi primer trabajo fuera de la universidad fue en una empresa de seguridad de la información, y me inscribí debidamente en la lista de correo de criptografía. Había algunas personas realmente inteligentes allí, e hicimos una cantidad muy pequeña de trabajo criptográfico, porque los trabajos para consultores de seguridad en criptografía son bastante bajos, para ser honesto. De todos modos, finalmente recibí un correo electrónico sobre el correo criptográfico por última vez haciendo algunas preguntas extrañas sobre una implementación de RSA en C ++. Una cosa condujo a otra, y me pusieron brevemente en un proyecto para un criptosistema especial que estábamos investigando, realizando un criptoanálisis en el algoritmo e intentando hacer agujeros en la implementación. Ese fue probablemente el mejor proyecto en el que he trabajado.

Ahora, la forma en que usamos algoritmos es principalmente similar a esta historia. En términos generales, tenemos estructuras de datos que ya existen y tenemos algoritmos que ya existen. Sin embargo, dependiendo de cuál sea su trabajo y lo que esté haciendo, es posible que deba diseñar un sistema. En ese punto, puede aprovechar sus estructuras de datos y conocimiento de algoritmos para tomar buenas decisiones. Si, por ejemplo, la recuperación en orden es importante, puede construir un sistema que tenga una clasificación rápida (o clasifique implícitamente los datos). Por otro lado, si necesita algo súper rápido, puede implementar muchas cosas O (1). Muy raramente necesitará implementar un algoritmo real desde cero. Si está interesado en idear / implementar algoritmos, le recomiendo lo siguiente:

  1. Obtenga un título en CS, luego obtenga un doctorado en CS y obtenga un trabajo de investigación o enseñanza donde todo lo que haga es algoritmos. No ganará tanto dinero como un ingeniero de software (muy probablemente), pero hará exactamente lo que quiere hacer.
  2. Contribuya a proyectos de biblioteca de código abierto para el idioma que elija. Es bastante raro que implemente un algoritmo particular en su trabajo real, pero en el mundo de las bibliotecas de código abierto o de terceros, eso es útil. Podría crear fácilmente un paquete de Python para la teoría de grafos, o álgebra abstracta, o lo que sea, que tome ciertas entradas, aplique un algoritmo y produzca salidas. También puede construir adaptadores todo el día para ellos. Ah, y si las personas en el trabajo saben que usted hace esto y surgen problemas cuando buscan un algoritmo (lo cual es raro, pero * puede * suceder), entonces es probable que se siente en la mesa.

¡La mejor de las suertes!

Su pregunta me recordó preguntas similares, como

“Me gusta resolver integrales en Cálculo, ¿hay trabajo para eso?” O

“Soy muy bueno en” problemas de construcción en geometría euclediana, ¿dónde puedo usar esa habilidad? ”

Hay muchos trabajos que involucran algoritmos, pero

  • No esperes usar los algoritmos que te enseñaron “tal cual”
  • Es posible que necesite desarrollar nuevos algoritmos

La escuela se trata de enseñarte fundamentos, que puedes usar para expandir y desarrollar cosas nuevas. Por ejemplo, al principio de mi carrera, tuve que desarrollar algoritmos de programación paralelos para programar algoritmos DSP en una arquitectura paralela. Luego, utilicé mi experiencia de una clase de posgrado en Investigación de Operaciones para desarrollar un nuevo algoritmo de asignación dinámica.

Nunca sabes lo que puedes usar en tu carrera, y en la mayoría de los casos, muy poco, pero sigue aprendiendo y explorando, y es sorprendente cómo el cerebro puede recuperar cosas que nunca pensaste que serían de alguna utilidad.

En el sentido más estricto de la palabra, sí, usará algoritmos todo el tiempo en el lugar de trabajo, ‘algoritmo’ simplemente significa …

“Proceso o conjunto de reglas a seguir en los cálculos u otras operaciones de resolución de problemas”

Entonces, en ese sentido, eso es todo lo que realmente hacemos.

Sin embargo, cuando decimos ‘algoritmos’, eso no es lo que realmente queremos decir, nos referimos a cosas como el tipo de burbuja, y usando ese significado, no, los trabajos del mundo real no tienen mucho de eso.

Usando la clasificación de burbujas como ejemplo, si me vieran implementando mi propio algoritmo de clasificación, obtendría algunas miradas divertidas, ¿por qué no uso el Swift incorporado?

dejar resultado = intArray.sorted ()

¡Ahí vamos, trabajo hecho!

No tengo idea de qué algoritmo usa Swift para el género, y no me importa, no importa.

Verá, en el mundo real, los algoritmos son solo un medio para un fin, es solo un detalle de implementación, y no les dará mucha importancia.

Sí, hay trabajos de programación que implicarán diseñar e implementar este tipo de cosas, es decir, alguien tuvo que escribir el método Swift ‘sorted ()’, pero ciertamente no es común.

Señale una queja no solicitada sobre cómo se enseña la programación …

Enseñamos la programación muy mal, solo el hecho de que esta pregunta se haga es evidencia de eso, debe enseñarse como un oficio o oficio, los aprendizajes tienen mucho más sentido.

Realmente no necesita un conocimiento experto de algoritmos para escribir la mayoría del código comercial.

A menos que esté haciendo algo intensamente técnico, utiliza herramientas estándar. Por ejemplo, si necesita una búsqueda rápida de texto, no escribe su propio árbol de sufijos, usa la biblioteca de terceros de alguien o crea un índice de búsqueda de texto completo en una tabla de base de datos. O con la velocidad y el poder de los sistemas modernos, muchas veces simplemente puede realizar una búsqueda de fuerza bruta del texto, si solo son unos pocos Mb.

Las personas que pasan tiempo codificando sus propios algoritmos tienden a ser acusadas de perder el tiempo, porque muchas veces están perdiendo el tiempo, creando un código complejo para hacer un trabajo que podría haber hecho con herramientas estándar.

Por supuesto, cuando necesita algo completamente a medida, o se encuentra con una situación estándar, las herramientas estándar no le brindarán el resultado que necesita, es posible que tenga que ensuciarse las manos. Pero las herramientas disponibles son bastante buenas: debe agotar las posibilidades razonables antes de hacer algo exótico.

Soy un desarrollador profesional de aplicaciones web / ingeniero de software.

Los uso en el lado del servidor cuando estoy trabajando en la API de mi empresa y necesito crear soluciones personalizadas para transformar / procesar datos.

Cuando estoy trabajando en nuestras aplicaciones front-end, realmente no las uso.

Realmente depende de tu papel. Busque trabajo del lado del servidor si desea trabajar más con algoritmos. Los roles de desarrollo de pila completa y desarrollo de API son populares y divertidos. Mi preferencia es el algoritmo de trabajo también. Si me quedo atascado con las tareas de front-end por un tiempo, me dirigiré a Hacker Rank y haré esos desafíos por un tiempo para mantenerme listo y entretenido.

Utilizo algunos de los algoritmos que aprendí en la universidad, pero no muchos. Sin embargo, eso no significa que aprenderlos no valiera nada. No me arrepiento de las horas de arrancarse el pelo tratando de perseguir punteros colgantes y resolver errores por defecto estudiando esos algoritmos.

Las clases de algoritmos DEBERÍAN enseñarle cómo pensar en posibles soluciones a algunos problemas bastante complejos, cómo desglosar esos problemas y cómo diseñar e implementar estructuras de datos para respaldar esas soluciones.

La mayoría de los algoritmos que se enseñan en la universidad (varios tipos, búsqueda de texto y comparación de patrones, árboles de expansión, etc.) son ejercicios de programación no triviales que requieren mucho pensamiento y una mente capaz de manejar algunos conceptos MUY abstractos.

More Interesting

Cómo convertir la salida de números complejos generada por el algoritmo FFT en frecuencia vs amplitud

Quiero comenzar un proyecto de programación. ¿Cuáles son algunas sugerencias al respecto?

¿Cuáles son algunos ejemplos de problemas que son: (1) NP pero no NP-Complete; (2) NP-Completo; (3) NP-Hard pero no NP-Complete?

¿Cuál es el punto de usar programación dinámica cuando la complejidad de tiempo en la mayoría de los códigos es O (n ^ 2) (que no es tan bueno, es decir, usamos dobles para bucles incluso en DP)?

Supongamos que tenemos una matriz 8 * 8. Cada celda tiene 0 o 1. Se le dará una ubicación y deberá encontrar todas las que se encuentran en la misma isla. ¿Los puntos se encuentran en la misma isla si un punto está en alguna de las celdas adyacentes?

¿Cuál es la solución a este décimo problema polinómico de clase?

¿Cuánta recopilación y análisis de datos se destina a la optimización del tiempo de los semáforos en una ciudad?

Cómo encontrar la menor supercadena de 2 subcadenas

¿Cómo debo estimar la eficiencia del enfoque DP?

¿Cuál es la clave para diferenciar y comparar dos algoritmos de aprendizaje automático?

Cómo construir un algoritmo automatizado de comercio de acciones utilizando mis estrategias sin tener que contratar un programador

Cómo escribir un buen algoritmo

¿Cómo construir un algoritmo hash? ¿Dónde puedo aprender más?

¿Cuán ampliamente se utilizan los algoritmos de bandidos en los sistemas de recomendaciones modernos reales? ¿Y de qué manera?

¿Cuáles son algunos algoritmos que todo programador debe aprender / saber?