¿Cuán limitado seré como programador si soy malo en algoritmos y tengo malas habilidades matemáticas?

Fui bastante malo en matemáticas en la escuela secundaria, probablemente porque estaba más interesado en otras materias. Recuerdo vívidamente que cuando decidiera obtener un título de CS, tendría que cambiar. Me costó esfuerzo, pero lo logré. Entonces, hablando por mí mismo, no pienses que el trabajo duro y el deseo no superarán tus debilidades. No vale la pena rendirse, o pensar que sus luchas pasadas no pueden superarse. Probablemente sepa si es lo suficientemente inteligente o no y tiene el deseo, solo usted puede responder esa pregunta.

Los algoritmos están en el corazón de la programación: escribir código esencialmente expresa algoritmos en cualquier lenguaje de programación que esté utilizando. No importa qué código escriba, definitivamente está en el negocio de crear y depurar algoritmos. Algunos algoritmos son triviales (cuente el número de caracteres en una cadena) y algunos requieren un conocimiento profundo del dominio (abra cualquier libro sobre sistemas operativos, IA, construcción de compiladores para ver algunos de los muchos ejemplos de algoritmos que requieren un estudio cuidadoso).

El análisis de algoritmos involucra matemáticas, y es bueno tomar un curso que cubra este material para comprender los conceptos básicos, pero no piense que tiene que ser un experto en el análisis de algoritmos para utilizarlos, al igual que usted. necesita ser un mecánico experto para conducir un automóvil rápido. En algunos casos, los algoritmos que elegirá usar se publican en libros (existen muchos libros de algoritmos que proporcionan código para algoritmos estándar en el idioma de su elección, o en una forma razonablemente traducible por un programador decente). A veces, se incorporan al lenguaje o sus bibliotecas de soporte (p. Ej., La biblioteca C estándar proporciona una implementación rápida, C ++ tiene listas y hashmaps, etc.).

Lea un libro general sobre algoritmos. Pase por alto las pruebas y las matemáticas difíciles si es necesario, pero aprenda qué es la notación big-O, y sepa por qué O (n log n) es mejor que O (n ^ 2), y qué hace que un algoritmo sea uno u otro . Estudie los algoritmos básicos de clasificación y búsqueda. Compare aquellos que son n ^ 2 o n log n y entienda por qué están designados de esa manera. Encuentre un libro o recursos web que catalogue algoritmos y consúltelo cuando lo necesite durante su carrera. Date cuenta de que las personas más inteligentes de lo que ya has descubierto, hace mucho tiempo, los algoritmos clave y asegúrate de saber dónde buscar.

Cuando estudies el código de otras personas, intenta entender por qué usaron los algoritmos que usaron. Si el autor está cerca, pregúntele por qué eligió usar una tabla hash en lugar de una lista vinculada, o un tipo de inserción en lugar de una clasificación rápida. Tal vez sea porque las búsquedas ocurren mucho, por lo que tiene que ser rápido, y el acto de almacenar elementos puede ser más lento. Tal vez sea al revés. A pesar de la complejidad que puede ver en los textos de algoritmos, por qué uno u otro algoritmo es mejor para un trabajo generalmente se reduce a preguntas simples sobre el espacio y el tiempo requerido del algoritmo y cómo eso afecta la usabilidad de cualquier programa que esté diseñando. No se necesitan matemáticas avanzadas para discutir estos temas.

Si está interesado en alguno de los numerosos subdominios de informática (IA, procesamiento de imágenes, compiladores, rastreadores web, implementaciones de bases de datos, sistemas operativos, la lista es larga …) puede leer documentos y libros que describe los algoritmos fundamentales del dominio y aprende de ellos.

Los “patrones de diseño” también son una buena fuente de conocimiento de algoritmos; Los algoritmos clásicos son solo un comienzo. ¿Cómo se escribe un servidor web eficiente? Existen libros de patrones que describen tales cosas, y creo que debería estudiar los patrones de diseño disponibles para su dominio de interés.

Después de tener todo eso detrás de usted, estará en condiciones de (tal vez) crear sus propios algoritmos complejos, pero no se desanime porque en este momento no siente que es capaz de inventar los suyos propios. La verdad es que la programación es un arte que se aprende mejor leyendo libros y estudiando el código de otras personas, copiando lo que han hecho y ajustándolo a sus necesidades. Después de adquirir algo de experiencia trabajando con los algoritmos de otras personas de esta manera, estará mejor preparado para diseñar algoritmos propios. Pero no se sorprenda si nunca necesita idear algo tan complicado como lo que podría estudiar en un libro introductorio de algoritmos.

Para resumir: gran parte de lo que necesita ya ha sido descubierto por otros, especialmente el tipo de cosas que probablemente necesitará en sus primeros cinco o diez años como ingeniero de software típico. Gran parte proviene de los esfuerzos de la academia y la industria. Aprenda los algoritmos básicos / estándar y encuentre algunas fuentes confiables de código que pueda robar o escribir. Determine lo que su idioma / herramientas ya proporcionan. Aprende los algoritmos básicos de tu dominio. Cuando tenga la oportunidad, haga preguntas a personas más inteligentes (más experimentadas) que usted. ¡Y divertirse! Hay muchos algoritmos geniales e innovadores, y la programación es bastante aburrida sin algoritmos (en serio, si no encuentras estudiar cómo las personas han resuelto los problemas (difíciles) y los algoritmos que resultaron, la programación será aburrida y no tiene sentido y tal vez buscaría una carrera en otro lado. Para mí, la falta de tanta curiosidad es mucho más peligrosa que no ser un estudiante de matemática directo).

Necesita habilidades matemáticas para programar a un nivel avanzado y escribir código de rendimiento, particularmente en un sistema a gran escala.

En términos más generales, la capacidad de pensar de manera abstracta, de generalizar problemas adecuadamente y de medir y cuantificar son importantes cuando se programa.

Por lo tanto, puede parecer que te estoy desanimando. Pero en realidad, no estoy seguro de creer que las personas tienen inherentemente malas habilidades matemáticas. No creo que mi cerebro sea diferente al tuyo. Simplemente me gustaron las matemáticas desde temprana edad y he pasado mucho tiempo estudiándolas.

Como estás interesado en aprender a programar, ya has expresado interés en una forma de matemática aplicada. Y eso lo ayudará a mejorar sus habilidades matemáticas simplemente usándolas cuando programe.

Entonces, en lugar de hacer que sus habilidades de programación dependan de sus habilidades matemáticas, ¿por qué no participar y adquirir habilidades de programación y ver que sus habilidades matemáticas mejoran como un subproducto?

Sin embargo, tenga en cuenta que aprender a programar, como cualquier otra cosa, es un esfuerzo significativo. Es una disciplina compleja con muchas capas de habilidad tras habilidad. Así que prepárate para pasar tiempo y esfuerzo en esto. Pero hay algo muy satisfactorio en decirle a las computadoras qué hacer y ver cómo lo hacen. ¡Mucha suerte con tu estudio!

He estado desarrollando aplicaciones web desde 1996 y he desarrollado una carrera bastante exitosa. Aprendí por mi cuenta cómo programar. Nunca tomé una clase, así que cuando se trata de preguntas académicas sobre algoritmos, soy una mierda. No me ha impedido ejecutar e implementar un excelente software bien probado.

Siempre puede leer sobre ellos o ver videos sobre ellos para completar su conocimiento. El MIT tiene la mayoría de sus cursos en iTunes y ofrecen una serie de conferencias de Introducción a los algoritmos.
http://itunes.apple.com/WebObjec

No quiere decir que no necesites ser bueno en matemáticas o algoritmos para ser un buen programador, será de gran ayuda. Simplemente no dejes que eso te asuste de meterte en eso.

More Interesting

¿Por qué los estudiantes de informática se llaman ingenieros?

Tengo 30 años y tengo un montón de proyectos de software a medio camino que encuentro difíciles de terminar. Son demasiado complejos o existen demasiados sistemas similares. ¿Cómo puedo perforarme para mantenerme en uno y verlo?

¿Qué empresas tecnológicas tienen el equipo de ingeniería más fuerte?

¿Cómo pueden los empleados proteger sus derechos de autor para el software producido fuera del horario laboral?

¿Qué tan difícil fue fusionar su primera solicitud de extracción en Google como nuevo ingeniero de software?

Soy realmente bueno en todos los aspectos teóricos de CS, pero no soy bueno en programación. ¿Qué debo hacer?

¿Cuál es una descripción clara de una arquitectura MVC?

¿Qué rastreador de tareas usan las grandes compañías de software?

¿Cómo se hace la arquitectura de software de Google+? ¿Hay algún diagrama UML sobre este tema?

¿Podrías alguna vez programar software?

¿Hay algún programador o desarrollador realmente técnico / bueno que tenga dislexia?

¿Cuáles son algunas compañías de software que perdieron participación de mercado después de ser interrumpidas por la computación en la nube?

¿Cuáles son todos los diferentes lenguajes de computadora que se pueden practicar en la Mac usando la línea de comando? ¿Y cómo se hace para seleccionar los idiomas en la línea de comando?

¿Cuál es el mejor marco SDLC?

¿Es una buena idea tener revisiones de código obligatorias antes de enviarlas?