¿Qué tan importante es estudiar algoritmos y la teoría para convertirse en un gran programador? [duplicar]

12

Soy un estudiante de CS. Quiero convertirme en un gran programador, ¿qué debo hacer para ser un gran programador? Aparte de escribir muchos códigos, he oído que estudiar algoritmos y teorías (¡la lógica!) Es una ayuda. ¿Qué recomiendas para convertirte en el mejor? ¿Qué necesito para leer? ¿Qué necesito para estudiar?

    
pregunta Snow_Mac 01.03.2011 - 01:47

7 respuestas

13

La programación es tan vasta y diversa como programas. Podría tener una carrera muy fructífera sin tener que preocuparse por la complejidad algorítmica. He estado desarrollando aplicaciones tipo base de datos que ayudan a salvar vidas todos los días, pero nunca tuve que calcular la notación BigO de todo lo que produje.

Dicho esto, algorítmico es una parte importante del dominio y puede ser un buen activo si lo aprendes. Aprenderlo abrirá tu mente a ciertos problemas que podrías encontrar, cómo medirlo y te enseñará algunos patrones comunes que puedes usar para resolverlos.

Entonces, sí, el estudio algorítmico te hará un mejor programador de lo que estoy seguro.

Creo que una pregunta más importante que debes hacerte en este punto es qué tipo de problemas quieres resolver como una carrera. Saber esto le ayudará a obtener las herramientas adecuadas para darle una ventaja. Algorithmic es una herramienta teórica importante para tener, pero también lo es ergonomía cognitiva , patrones arquitectónicos , teoría de la información . También hay muchos conocimientos prácticos como el aprendizaje de los diferentes patrones en el proceso de desarrollo de software que a menudo se consideran aburridos. y poco interesante mientras aprende el oficio, juega un papel crucial en la creación de software en la industria.

Esto no fue de ninguna manera una lista completa, pero todos son, según mi experiencia, igualmente valiosos para convertirte en un gran programador. Todo depende de los problemas que desee resolver con la programación y del enfoque que desee utilizar para resolverlos.

--- EDITAR --- Como mencionó Earlz en los comentarios después de que aprendiste las habilidades, permanecen contigo todo el camino. Entonces, aunque nunca hice un análisis completo y en profundidad de un sistema, el conocimiento sigue disponible, supongo que le brinda un sentido complementario mediante el cual puede tener una idea del sistema. Una vez me topé con un sistema de registro simple cuya implementación se ejecutó en orden factorial. Creo que si el programador se hubiera enterado de la complejidad algorítmica, se habría dado cuenta de eso y, en lugar de eso, se habría codificado, obtuve la vieja retórica "es solo el registro, no afecta el tiempo de ejecución". Por supuesto, no fue él quien tuvo que decirle al cliente que tuvo que esperar aproximadamente 6.400 millones de años antes de que se completara la importación de datos.

Esto sería cierto para casi todo el cuerpo fundamental del conocimiento. Aunque no lo use activamente, el conocimiento adquirido permanece e influye en sus tareas diarias. Aprender un lenguaje, una metodología o un sistema específico es bueno para el corto plazo, pero está condenado por la obsolescencia antes de que abran el libro.

    
respondido por el Newtopian 01.03.2011 - 02:34
7

Para convertirte en un verdadero programador, definitivamente necesitas estudiar algoritmos al menos hasta cierto punto. Hay mucho allí que no es crucial para la programación, pero sin al menos una cantidad razonable de conocimiento, estás bastante hundido.

Hay una serie de clásicos en el campo, el más obvio:

  1. El arte de la programación de computadoras , por Donald Knuth
  2. Introducción a los algoritmos , por Cormen, Leiserson, Rivest y Stein.

Personalmente, tiendo a preferir Knuth, pero ambos son completamente adecuados, y el otro cubre más algoritmos (aunque la versión más reciente de Knuth es sin duda mejor a este respecto, no he actualizado) Mis copias desde que las compré hace unos 30 años.

    
respondido por el Jerry Coffin 01.03.2011 - 02:01
5

Absolutamente esencial. Central. Nada importa más.

Algunas personas afirman que nunca hacen uso de la basura que aprendieron en la clase de algoritmos.

Sin embargo, extrañamente, parecen saber cuándo evitar los bucles anidados y hacer uso de punteros.

Por lo tanto, pueden afirmar que nunca hicieron uso de él. Pero claramente influye en su codificación.

    
respondido por el S.Lott 01.03.2011 - 02:16
4

Estudiar estructuras de datos. Conocer las estructuras de datos correctas es una gran ayuda para saber cómo organizar un programa, y los algoritmos aplicables tienden a seguirlos.

Por ejemplo, aprenda a entender las especificaciones (de una sola función o un programa completo) si puede mantener los datos en una matriz o si necesita una tabla hash, un árbol, etc.

También, conoce tus bibliotecas; Los lenguajes de programación modernos tienden a organizar sus bibliotecas en torno a estructuras de datos como matrices / vectores, conjuntos, mapas, etc. Es posible que nunca tenga que implementar un árbol rojo-negro, pero sepa cuándo lo necesita y qué parte de la biblioteca estándar implementa. uno (o una estructura similar en términos de rendimiento).

    
respondido por el Fred Foo 01.03.2011 - 01:57
2

Depende de lo que quieras decir con "gran programador". Yo dividiría (arbitrariamente) la grandeza en tres compartimientos iguales:

  1. Creativo: ante un problema nuevo y desafiante, usted determina rápidamente una solución eficiente.
  2. Responsable: usted produce un código lúcido, claro y fácil de mantener y nunca, nunca rompe la compilación
  3. Enciclopédico: dado un problema oscuro que interactúa con el mundo externo de las bibliotecas, los marcos, los sistemas operativos, etc., instantáneamente sabe cómo abordarlo.

Idealmente, a todos nos gustaría ser de todos los tipos, pero eso no es generalmente posible. El lugar donde los algoritmos y la teoría realmente ayudarán es el primer tipo. Como investigador de ciencias de la computación, lo uso todo el tiempo, la experiencia en el tipo 2 con menos frecuencia de la que me gustaría, y el tipo 3 casi nunca.

En cuanto a una referencia: el libro de texto de algoritmos CLR es un clásico y una buena lectura. Probablemente haya algunos usos de la clase en línea que presenten bien --- pruebe el MIT OpenCourseWare. Lo más importante, IMHO, es tener una intuición fuerte para la complejidad asintótica. Si lo hace siguiendo la ruta establecida en un texto como CLR, también terminará con un conocimiento básico de las estructuras de datos y algoritmos que le serán de utilidad.

    
respondido por el user18793 01.03.2011 - 02:03
2

¿Cómo se mide un gran programador? ¿Cómo quieres que te midan?

Las respuestas que dé para estas preguntas podrían ayudarlo a influir hoy, pero continuarán surgiendo a lo largo de su carrera.

Sin duda, tener conocimientos técnicos será fundamental para lograr el éxito. Sin embargo, para distinguirte, hay opciones. A menudo hay más de un camino a casi cualquier destino. Tal vez convertirse en un gran programador puede lograrse mediante una capacidad superior para analizar y digerir un dominio, y un estudio cruzado de un dominio en particular ahora podría ayudar. Quizás se puede lograr de una manera menos específica, a través de una capacidad indispensable para identificar la intención del usuario a través de una comprensión de la psicología y la sociología. Quizás, en cambio, se trata de saber más sobre los negocios: ser efectivo en el marketing para que sepa lo que la gente quiere antes de que se den cuenta de que puede existir, y luego convencerlos de que no solo lo quieren, sino que dependen de él. Quizás sea otra cosa.

El consejo que daría es que, si bien la programación puede ser un oficio que perfeccionas, no omitas a propósito un estudio más profundo de otros campos en los que tienes un talento o interés natural.

    
respondido por el JustinC 01.03.2011 - 04:22
0

Esta es una pregunta un poco difícil de responder, especialmente a medida que obtengamos abstracciones / bibliotecas cada vez más poderosas, habrá poca necesidad de aprender estas cosas.

Fase I :

Miles de ejecutivos de negocios pueden continuar programando en una herramienta llamada Microsoft Excel incluso sin saber que en realidad están programando. Pueden continuar definiendo un flujo de trabajo (heurístico), clasificar datos, gestionar datos, consultar datos. Automatiza sus tareas y lo que no sin siquiera saber una palabra de programación. Excel descubre cuáles son los algoritmos correctos para ellos cuando ordenan y buscan.

Ahora, ¿cómo venderles la idea de algoritmos?

Fase II :

En el pasado, ¿recuerdas que sería imposible implementar una aplicación decente sin recordar realmente la API? Tenías que recordarlos o seguir buscando en el manual. Ctrl-espacio en eclipse ha eliminado en gran medida la necesidad de tal cosa hoy.

Fase III :

En un futuro próximo, los IDE y las herramientas tendrán inteligencia para sugerir qué solución (algorítmicamente) sería más adecuada para usted en función de las aportaciones que le dé. O podría haber funciones como sort () et al. Lo que entrenará de manera inteligente qué algoritmo necesitaría para observar la complejidad del tiempo y el espacio.

Teoría de la complejidad de la cama de agua :

Las abstracciones están ganando a lo grande, no tiene que preocuparse por un nivel de complejidad que ya es manejado por la biblioteca o el idioma. Cada vez que se inventa una abstracción, es menos necesario echar un vistazo a la complejidad que se encuentra debajo.

    
respondido por el kamaal 01.03.2011 - 10:58

Lea otras preguntas en las etiquetas