¿Puedo convertirme en un buen programador sin conocimientos de matemáticas y algoritmos?

No.

Para explicar por qué, asumiré que tienes poco o ningún fondo de programación e intentaré usar una analogía. Pido disculpas de antemano si esta respuesta se hace larga.

Digamos que quieres construir una pequeña casa de juguetes con un niño. Usted compra algunos ladrillos de lego y ustedes dos trabajan apilando ladrillos de tal manera que el resultado final se vea
como una casa Eres feliz y el niño es feliz. La casa de juguetes se encuentra en
por un tiempo, ya que los ladrillos de lego son livianos y básicamente indestructibles.

Ahora di que quieres una casa de verdad . Uno en el que puedes vivir con tu familia. ¿Confiaría en una casa que fue construida de la misma manera, sin usar
conocimiento de ingeniería para garantizar su seguridad? Yo diría que la mayoría de las personas sanas en la tierra no lo harían.

La programación sin una buena base en algoritmos y matemáticas es similar a construir la casa de juguetes con lego. Puedes ser bastante bueno con la práctica. Incluso puede comenzar a notar patrones con el tiempo, como el hecho de que algunos arreglos de piezas de lego conducen a mejores resultados. Aún así, será casi imposible hacer declaraciones al respecto, tales como: “esto puede manejar hasta X kg” o “esta casa es segura para vivir” o “podríamos construir uno de estos con cemento y sería válido por sí mismo”.

Peor aún, la brecha en la confiabilidad entre los dos enfoques para la construcción de viviendas aumenta a medida que el proyecto es más complejo. Construir una pequeña cabaña como los niños construyen casas de juguetes con lego podría funcionar, pero es muy poco probable que un gran puente hecho siguiendo ese mismo enfoque se mantenga. Del mismo modo, tareas más simples como escribir un sitio web pequeño serán factibles para un equipo o programadores sin experiencia en matemáticas y algoritmos, mientras que mantener algo tan grande como Amazon o Google trabajando será casi imposible.

La idea de que las matemáticas y los algoritmos no son importantes no es infrecuente entre estudiantes de pregrado o incluso entre programadores experimentados. Yo solía pensar así hace años. Luego ingresé a la universidad y comencé a aprender algoritmos, matemáticas, probabilidad, etc. Incluso me formé para ICPC, que es una competencia entre programadores universitarios que requiere bastante conocimiento en estos campos.

El resultado final de ese proceso es que ahora puedo escribir mejor código en menos tiempo. También soy capaz de escribir código para tareas que no tenía idea de cómo podía realizar una computadora hace años. Y sé cómo analizar el código para tener una buena idea de cómo funcionará cuando se ejecute. En resumen, soy un orden de magnitud mejor de lo que solía ser de muchas maneras diferentes.

Finalmente, me gustaría agregar algo con respecto a la idea de que aprenda algoritmos básicos para poder hacer coincidir patrones. Con eso, me refiero a ser capaz de reconocer cuándo se necesitan estos algoritmos y luego usarlos sin cambios. Esa idea es totalmente errónea. Si bien saber qué algoritmo emplear es una habilidad valiosa, la razón principal por la que uno debería estudiar estas cosas es aprender a pensar y resolver nuevos problemas.

TL; DR: No.

Absolutamente puedes. Como cualquier campo, hay una interacción entre la teoría y la práctica que sigue un patrón: la práctica crea un deseo / uso de la teoría, la teoría fortalece la práctica, esto se repite. Yo recomendaría no tratar de asegurarme de que tenga la teoría necesaria antes de comenzar a programar; prácticamente hablando, sin embargo, la teoría te ayudará mucho, así que déjame ser un poco más específico al respecto.

Primero apagado: algoritmos. No te preocupes por los algoritmos. Hay algunas cosas teóricas que se relacionan con los algoritmos, algunas que describen su naturaleza, algunas que proporcionan una forma de pensar sobre sus consecuencias en términos de cuántos recursos necesitarán para ejecutar. Si te interesa en algún momento, léelo, por supuesto, pero no te preocupes por eso: no va a tener un gran impacto en tu capacidad como programador. Lo que realmente necesitas con respecto a los algoritmos es práctica. Simplemente siga escribiendo algoritmos, vea qué funciona y qué no, mire a otras personas, escriba más, continúe, etc.

Siguiente: matemáticas. Esto es un poco difícil de responder porque las “matemáticas” pueden referirse a muchas cosas. No creo que haya ningún conocimiento particular en matemáticas que mejore mucho su capacidad de programación, con tal vez una excepción: la teoría del lenguaje de programación (teoría del lenguaje de programación). Regresaré a PLT en un momento.

Entonces, lo más sutil de las matemáticas es que, si bien no necesita ningún conocimiento de campos particulares de matemáticas (ver la advertencia anterior), necesita una buena comprensión de la naturaleza de las matemáticas y cómo piensan los matemáticos. La razón de esto es: ¡la programación es matemática! Su “naturaleza” es matemática y lingüística. Por lo tanto, eventualmente, si la teoría lo ayudará, será en obtener una comprensión intelectual profunda de lo que hace cuando programa. Esto llevará años, probablemente continuará durante toda su carrera. Regrese a él cuando pueda y cuando lo desee, pero nunca permita que su ignorancia le impida programar.

Mi recomendación para los primeros pasos en teoría para la programación: aprende un poco sobre cómo el hardware de la computadora ejecuta los programas, luego aprende los rudimentos de la teoría del compilador. Durante mucho tiempo tuve la perspectiva de que los compiladores eran solo estas herramientas secundarias que necesitábamos, pero en realidad, los conceptos detrás de ellos son profundamente relevantes al considerar la naturaleza de los programas en general. Cuando adquieres ese conocimiento general con éxito, es como un mapa que te permite ver constantemente lo que te rodea desde la más breve visión de un terreno nuevo.

Además, recomendaría comenzar algo similar a la meditación religiosa sobre las nociones de abstracción , generalización , parametrización , marco lingüístico , refactorización , instancia , formato . Así es como haces tu trabajo; cada uno de ellos es capaz de convertirse en una comprensión muy rica y multifacética informada mediante la observación de diversos ejemplos, la teoría de la lectura y las percepciones personales obtenidas con esfuerzo. Si hay una cosa con la que esperaría que se correlacione la capacidad de programación, es una gran comprensión de esas nociones y su conexión con el software de escritura. (Además, no afirmo que sea una lista perfecta, aunque estoy seguro de que su contenido es importante; ¡esté atento a conceptos similares, recurrentes y centrales e intente comprenderlos desde tantos ángulos / perspectivas como sea posible!)

Si, mayormente. Puede salirse con la suya con muy pocas matemáticas, y la cantidad de conocimiento de algoritmos que necesita es mucho menor que la afirmación de respuestas “No”.

Tengo un título en ciencias de la computación y he sido desarrollador profesional por más de 20 años. Sin embargo, durante esos años ha habido muy pocas veces que necesitaba algo más que matemáticas básicas (por ejemplo, +, -, *, / y algunas funciones trigonométricas). Y las veces que necesitaba algo más (por ejemplo, un poco de cálculo o alguna relación geométrica o fórmula algebraica), mi amigo Google estaba allí para ayudar, ya que hacía mucho tiempo que había olvidado esas cosas.

Con respecto a los algoritmos, principalmente debe comprender la diferencia entre los algoritmos O (n), O (n ^ 2) y O (log n). Probablemente puedas resolver eso en un día. Esto surge principalmente al escribir bucles. Debe saber cuándo ha creado un algoritmo O (n ^ 2) y cómo evitarlo si es posible

La respuesta más votada (al menos al escribir esto), hace una analogía con la construcción de una casa de Lego. El hecho es que la mayor parte del trabajo que hace la gran mayoría de los programadores es, de hecho, más como armar a Lego, pero con un poco de pegamento.

Por ejemplo, la mayoría de los programadores usan las funciones de clasificación, tablas / diccionarios hash y otras estructuras de datos y algoritmos en el idioma / biblioteca con el que están trabajando. Muy pocos necesitan ir más allá y escribir los suyos.

Del mismo modo, usará otras bibliotecas similares a Lego para solicitudes HTTP, análisis JSON, dibujo de gráficos, etc. Aprender estas bibliotecas y cómo componerlas juntas es realmente lo más importante para la mayoría de los programadores.

Entonces, yendo un poco más allá, es MUCHO más importante saber cómo componer sus piezas de Lego disponibles en un programa confiable y funcional que conocer los detalles del algoritmo de clasificación que está utilizando, por ejemplo. Conocer su eficiencia algorítmica suele ser suficiente. Un algoritmo de clasificación ineficiente o una estructura de datos inadecuada generalmente se pueden reemplazar mucho más fácilmente de lo que se puede cambiar la arquitectura general.

Como nota al margen, la industria de la construcción de viviendas está trabajando para que sea posible construir casas con piezas premontadas como los ladrillos de Lego. Esto va a suceder. Aún requerirá que la gente ponga los cimientos de concreto, pero esos trabajos serán mucho menos que los de las personas que ensamblan los ladrillos.

Ahora, habiendo dicho todo eso, comprender algoritmos y estructuras de datos, así como también lenguajes de programación (especialmente lenguajes funcionales como Lisp / Scheme, Haskell y otros) es en realidad una actividad muy estimulante intelectualmente para mí, y una vez que esté familiarizado con los conocimientos básicos programación, de todo corazón recomiendo ir más allá de la madriguera del conejo!

En realidad, creo que sí puedes. Depende de qué tipo de problemas vas a resolver mientras eres programador. La mayoría de los trabajos de programación son más trabajos de tipo ‘hazlo’, sin demasiada complejidad, solo trabajando en contra de los plazos para obtener las características del producto a tiempo. Existen esas excepciones, donde el trabajo requiere una gran cantidad de habilidad matemática para construir algo complejo, y para hacerlo bien, necesitará una matemática decente y podrá comprender algoritmos.

Pero yo diría que en el 80% de los trabajos de programación, podrías ser realmente bueno en eso, sin demasiadas matemáticas. Gran parte de la programación actual involucra diferentes tipos de problemas, como trabajar en el diseño del navegador front-end con Javascript, HTML, CSS y marcos como JQuery; y cosas de back-end como Java, Phyton, Ruby. Solo hacer que las cosas funcionen, retoquen y mejoren, es una gran cantidad del trabajo diario. Crear algoritmos, para la mayoría de las personas, es la parte rara del trabajo, aunque para muchos, lo más divertido e interesante.

Pero diría absolutamente que puedes hacerlo como un programador decente sin ser un experto en matemáticas.

Mi respuesta es SI

Pero, depende del campo en el que trabaje y también de la empresa para la que trabaja.

Campo
Por ejemplo, trabajar en el campo de desarrollo móvil, que es mi campo, no requiere de usted una gran habilidad algorítmica. Requiere habilidades en el sistema operativo en sí, ya sea iOS o Android. Tener grandes habilidades en la resolución de problemas no te ayudará tanto en ese campo.

Por otro lado, si está trabajando en campos de Inteligencia Artificial que analizan algunas entradas y responden con una salida adecuada considerando la variable de tiempo para la eficiencia, necesitará una gran habilidad algorítmica para ser útil en este campo.

Empresa
Por ejemplo, las empresas de nueva creación se preocupan por producir el producto más rápido con un rendimiento razonable más que gastar toneladas de horas para mejorar la velocidad si un algoritmo específico con pocos milisegundos.

Por otro lado, si está trabajando en empresas como Google o Facebook, no podrá unirse al principio sin tener buenas habilidades algorítmicas, independientemente del equipo al que se va a unir.

Depende de qué tipo de programación quieras hacer. Es posible que desee ir al diseño de la interfaz de usuario, a la dinámica de la historia del juego o al mapeo de datos corporativos a estructuras de bases de datos.

Ocasionalmente he usado trigonometría al hacer aplicaciones gráficas, y aunque estoy seguro de que áreas de programación especializadas pueden requerirlo, nunca tuve la necesidad de usar cálculo, álgebra lineal, ecuaciones diferenciales o teoría de grupos, ni nada más que yo estudié como estudiante de matemáticas, cuando trabajaba como programador.

Necesitarás algo de aritmética, pero eso es todo.

Pero “algoritmo” es otro nombre para “programa de computadora”, así que no, ¡no puedes programar sin algoritmos!

Por otro lado, aunque ser capaz de pensar de manera muy lógica y concreta ayuda, todos a su alrededor tendrán esas habilidades y talentos. Si eres fuerte en otras áreas, como descubrir cómo las personas realmente quieren usar software, o en diseño, o en comunicaciones o administración, podrías ser una adición muy valiosa para un equipo de desarrollo.

Usted puede; muchos programadores nunca usan matemáticas y rara vez o nunca usan algoritmos complejos. En realidad estudié matemáticas como parte de mi título, pero durante catorce años de ser desarrollador de software, nunca pude usarlo. No en el trabajo, de todos modos. Tampoco utilicé el ordenamiento de burbujas ni ningún otro algoritmo significativo, como tal. Usé soluciones integradas listas para usar cuando las necesitaba. Mis habilidades matemáticas se atrofiaron en gran medida.

¿Eso me convierte en un mal desarrollador de software? Definitivamente desarrollé una gran cantidad de software y funcionó.

No puedo afirmar que nunca estuve a la vanguardia tampoco. Desarrollé muchas secuencias de comandos de procesamiento de datos, rediseñé el software existente, solucioné muchos errores, desarrollé algunos programas desde cero. Entonces, si quieres estar a la vanguardia, probablemente necesites aprender algoritmos.

El conocimiento de algoritmos tiene muy poco que ver con la habilidad de programación. Como dijo alguna vez un tipo al azar * en Internet: “En caso de duda, use la fuerza bruta”. Desempaquemos lo que esto significa.

Un buen programador sabe cómo implementar un algoritmo de diccionario en Python. Un gran programador sabe que alguien más inteligente que ella ya ha implementado un diccionario como parte del lenguaje python, y confía en que funcionará lo suficientemente bien para la mayoría de los propósitos.

Un buen programador intenta elegir el mejor algoritmo en términos de rendimiento. Un gran programador elige el algoritmo no estúpido más simple y solo considera cambiarlo más tarde si el rendimiento es un problema (casi nunca lo es), si cambiar el algoritmo mejorará significativamente el rendimiento general (casi nunca lo hace), y si la mejora del rendimiento justifica el costo de realizar el cambio (¿cuántos dólares vale una mejora general del 5%?).

Los buenos programadores tienen una comprensión profunda de la notación big-O. Los grandes programadores saben que en el mundo real, las batallas se ganan y se pierden en los coeficientes. (Esto es particularmente cierto en la codificación del kernel y del compilador).

Los buenos programadores saben que pasarán 98 días / año depurando y 2 días / año haciendo la optimización del rendimiento. Los grandes programadores inclinan esa proporción hacia la optimización eligiendo algoritmos más simples que son más fáciles de entender y más fáciles de depurar.

Para dar una analogía: realmente no necesita comprender el lenguaje ensamblador para ser un gran programador, a menos que esté escribiendo un código de sistema operativo o compilador. Del mismo modo, realmente no necesita una comprensión profunda de los algoritmos a menos que esté escribiendo bibliotecas matemáticas, en cuyo caso, sí.

* Ken Thompson.

Mi respuesta a esto, podría ser más realista. Está entre sí y no.
El saldo tiende más a No y poco a Sí.
Todo cuenta, ¿qué quieres crear? La programación es puramente matemática, pero en algunas ocasiones no es necesaria. Pero en todo momento se necesitan algunas matemáticas simples.
Todos los lenguajes de programación dependen de variables y estructuras de datos. Entonces las matemáticas son imprescindibles.
Incluso el programa más simple necesita matemática simple como 1 + 1 = 2, pero no se necesitan algoritmos complejos, pero este equilibrio tiende más a Sí y poco a No.
La mayoría de los lenguajes de programación tienen una función incorporada, por lo que esas funciones tienen algunos algoritmos listos para usar, incluso si no programa ningún algoritmo, hay algoritmos simples detrás.
Entonces todo depende de lo que quieras crear. Pero un buen programador significa saber cómo resolver todos los problemas y hacer todos los trabajos, por lo que, si se le solicita un trabajo complejo, no podrá hacer el trabajo.

Si quieres crear un videojuego, olvídalo sin algoritmos ni matemáticas.
Si desea crear un software simple que guarde y almacene nombres o datos simples, no necesita algoritmos complejos o ni siquiera algoritmos y matemáticas muy simples.

Pero no irás lejos. Siempre serás un programador aficionado.

Ingeniería: necesita muchos algoritmos y matemáticas.
Contabilidad: necesita muchas matemáticas, si no algoritmos.
Medicina: necesita muchos algoritmos y matemáticas.
Almacenamiento: no necesita muchas matemáticas ni algoritmos.
Desarrollo de software: necesita muchos algoritmos y matemáticas.
Desarrollo web: necesita muchos algoritmos y matemáticas.
Automatización industrial: necesita muchos algoritmos y matemáticas.
Diseño: necesita muchos algoritmos y matemáticas.
¿Diseño gráfico? sin algoritmos y sin matemáticas complejas.

Y preguntarás. ¿Es posible que existan algoritmos sin matemáticas?

Esta es un área donde un poco de conocimiento puede recorrer un largo camino. Podrás construir algunas cosas útiles sin esto. Por ejemplo, algunos programadores trabajan en sistemas que dependen en gran medida de una base de datos y, por lo tanto, la gran mayoría de la optimización, etc., la realiza la base de datos.

Sin embargo, estará limitado en los problemas que puede abordar y probablemente creará algunos cuellos de botella de rendimiento innecesarios. Un ejemplo común es crear múltiples bucles anidados para manejar un problema y no pensar adecuadamente acerca de cómo el número de iteraciones a través de estos bucles se escalará con el tamaño de la entrada. Esto es a menudo evitable con un poco de conocimiento de estructuras de datos y algoritmos.

Si decides que te gustaría aprender matemáticas y algoritmos más avanzados, hay muchos recursos buenos en línea para varios niveles de habilidad. Para las matemáticas, consulte Khan Academy, hay buenos recursos para estadísticas y probabilidad, así como una variedad de otras materias. También hay cursos en varios niveles disponibles en Coursera ( https://www.coursera.org/courses …), EdX ( https://www.edx.org/course?searc …) o Udacity ( https: // www .udacity.com / cursos # …) y otros proveedores de cursos en línea.

Luego, una vez que tenga una base razonable en estadística y probabilidad, considere tomar una clase en algoritmos y / o estructuras de datos.

Las matemáticas y la programación en realidad no están relacionadas. Puede usar las matemáticas para crear algunos algoritmos geniales, y debe tener una comprensión única de las matemáticas para escribir un sistema de codificación efectivo o códec. Pero para la mayoría de la programación, se requiere muy poca matemática más allá de lo básico de la escuela primaria.

La programación consiste en poder expresar instrucciones precisas con un lenguaje limitado. Gran parte de lo que escriben los programadores tiene que ver con la automatización de algo que se puede hacer a mano, y luego con la mejora de esa automatización.

Por lo tanto, si no desea escribir la próxima herramienta de compresión o sistema de encriptación, entonces realmente no necesita habilidades matemáticas avanzadas a menos que esté escribiendo un sistema basado en matemáticas (como programas CAD o solucionadores de problemas). Los desarrolladores de juegos Moat ni siquiera necesitan matemática avanzada, ya que usan la GPU hacen sus matemáticas.

Si quieres obtener un título en ciencias de la computación, se te pedirá que obtengas un nivel de cálculo matemático en la mayoría de las universidades, pero luego, es un título en ciencias y esto es más que solo programación.

no podrá crear un sistema de reconocimiento de patrones (como lo que se requeriría para una conducción autónoma) sin un poco de matemática avanzada.

SI. Porque soy el ejemplo vivo de tal confirmación. Apelo en matemáticas, solo tengo matemáticas básicas (+, -, x, ÷ y%) y vi algoritmos en la universidad después de 14 años de experiencia en programación autodidacta (que incluye 5 de experiencia profesional). No necesita conocimientos de matemáticas y algoritmos si solo tiene lógica . Eso es lo más básico que necesitas. Sin él, no puede pensar si es lógico seguir copiando una función en lugar de reutilizarla. Sin él, no puede descubrir cómo desarrollar el flujo de su programa, y ​​así sucesivamente.

En todo caso, los algoritmos vendrán naturalmente a medida que continúe programando. Si vas a desarrollar juegos y cosas así, bueno, sí, necesitas matemáticas y física, pero si quieres desarrollar aplicaciones móviles, sitios web, frontend / backend, trabajar con redes TCP / IP y tal, las matemáticas básicas son suficientes.

Actualización 2018: todavía estoy atascado en las matemáticas, y estoy trabajando como desarrollador de Fullstack usando Angular 4, Typecript, .NET y otras herramientas y marcos variados 🙂

Depende de lo que quieras decir.

La mayoría de la programación es algo matemática y utiliza algoritmos. Con eso, quiero decir que usa al menos una lógica algebraica simple (o no podrás hacer mucho) y escribes código que implementa algoritmos (conjuntos de pasos que llevarán a cabo una tarea en un tiempo finito).

Entonces, estrictamente hablando, la respuesta a su pregunta es “no”. Pero creo que quiere decir que puede convertirse en un buen programador sin estudiar matemáticas y sin un estudio formal de algoritmos.

Entonces la respuesta es un sí calificado. Es cierto que hay temas en informática que utilizan diferentes tipos de matemáticas. Sin embargo, no es necesario tocar estos temas para ser un buen programador. También es cierto que hay programas que se ocupan de la costura, pero sería una tontería decir que tienes que ser un experto con una máquina de coser para ser un buen programador.

No aprender algoritmos no significa que no puedas ser un buen programador, pero te pone en desventaja. Muchos de ellos están destinados a resolver ciertos problemas comunes. Puede escribir absolutamente su propia lógica de cola prioritaria, pero se está perjudicando al no observar cómo la gente ha hecho esto en el pasado.

Además de eso, parte de ser un buen programador es aprender lo que necesitas aprender. Si su conocimiento es estático, incluso podría ser un buen programador hoy, pero no lo será en unos años. No tenga miedo de aprender algunas cosas que lo ayudarán a mejorar.

En cuanto a los algoritmos, no puedes.

Algoritmos bien conocidos son el legado de muchos grandes programadores en el pasado. Han estado luchando durante decenas de años para inventar y mejorar esos algoritmos.
Por lo tanto, no puede convertirse en un buen programador a menos que sea lo suficientemente inteligente como para hacer lo mismo en unos pocos años. En otras palabras, un programador novato dispuesto a aprender algoritmos está muy por delante de usted.

(Agregado como respuesta al comentario “¿Qué algoritmos debo aprender?”)

En mi opinión, vale la pena aprender todos los algoritmos conocidos, por ejemplo, los algoritmos en CLRS, independientemente de si los usará o no. Aprender buenos algoritmos es como rastrear los pensamientos de grandes programadores en el pasado. La experiencia le dará muchas pistas al escribir su propio programa.

Todos tienen una definición diferente de lo que significa un “buen” programador, pero desde mi perspectiva, no puedes convertirte en un buen programador sin una sólida formación en matemáticas y algoritmos. Y mi definición de un “buen” programador es alguien que contrataría cualquier compañía de software respetada como Google, Microsoft, Facebook o Apple. Puedes estar seguro de que todos te asarán en algoritmos.

Es un poco como preguntar “¿Puedo ser un buen médico sin conocimientos de biología?” Claro, puedes buscar en Google todo, pero realmente no me gustaría ver a un médico que solo busque todo sin un conocimiento realmente profundo.

Ahora, quizás lo que realmente está preguntando es si puede ser un buen programador sin capacitación formal en matemáticas o ciencias de la computación. Si ese es el caso, entonces la respuesta es un rotundo ¡SÍ! Conozco a muchas personas que son programadores autodidactas, sin capacitación formal, y pueden ser programadores muy exitosos.

TL; DR: No, ya que un buen programador es uno que se mantiene constantemente actualizado y ansía aprender cosas nuevas todos los días .

Respuesta más larga: no es como si aspiraras a ser, digamos, un gran latinista (sin ofender a las personas que estudian o enseñan latín para ganarse la vida, por supuesto) y una vez que alcanzas un alto nivel de competencia con tu materia puedes decir “ahora lo hice”.

Las cosas en TI cambian e innovan a un ritmo asombroso, por lo que si ya lo está limitando desde el principio, pagará mucho a largo plazo.

En cuanto a las habilidades que menciona y muchas otras, depende de lo que aspire a hacer: para ser un gran desarrollador web, es posible que necesite poco o ningún conocimiento de matemáticas y solo algos muy, muy básicos .

Para ser un ingeniero completo en proyectos complejos, los requisitos son proporcionalmente más exigentes.

En una nota más ligera, tenga en cuenta que se supone que no debe saber perfectamente ni siquiera el algo más oscuro . Es más una cuestión de reconocimiento de patrones, por lo que encuentra el problema X o la tarea Y, sabe que necesitaría una ruta más corta o un algoritmo de distancia de Levenshtein para hacer el trabajo y siempre puede buscar el código específico o alguno más específico info.

Intente un poco de codificación competitiva para aprender las cuerdas básicas y posiblemente divertirse mientras lo hago: supongo que tenía una buena formación matemática, por ejemplo, pero aprendí muchos puntos nuevos e interesantes al probar suerte en cualquiera de los Proyectos Euler (advertencia: esto uno es DURO después de los primeros problemas) o CodeWars (mucho más amigable con n00b y con una comunidad increíble).

Espero que esto ayude y feliz codificación 🙂

Sí y no. Dejame explicar.

Sí: puede ser un “buen” programador sin matemáticas ni algoritmos, siempre que no aborde problemas muy complejos, como el aprendizaje automático o la inteligencia artificial. Casi todas las tareas de programación de baja y media complejidad no involucran demasiadas matemáticas o algoritmos. Puede que tenga que ordenar una matriz o calcular un desplazamiento de píxeles, pero eso es algo fácil. En este caso, “bueno” significa que probablemente obtendrá un buen salario, hará un trabajo válido, incluso si no será la solución más elegante, pero de nuevo probablemente la compañía no pagará por “elegante” de todos modos.

No: si quieres ser un excelente programador, no solo bueno, entonces definitivamente necesitas matemáticas y algos. Un excelente programador trabaja con big data, IA, aprendizaje automático, AR y VR, y todos estos necesitan rendimiento. Para el rendimiento necesitas algoritmos. Y a veces necesitas matemáticas complejas, para que puedas aplicar algunas funciones a lo que estás haciendo, y esas cosas no son algo que solo puedas googlear y copiar / pegar.

En pocas palabras, ¿qué quiere decir exactamente con “un buen programador”? ¿Uno capaz de ganarse la vida con la programación o capaz de mover el mundo?

No Porque por definición, lo que sea que escriba como programa, usará un algoritmo. Sí, las soluciones de fuerza bruta, las no-brainers, las soluciones de una línea, etc., tratan con algoritmos. Si alguien de alguna manera es capaz de liberarse por completo del conocimiento algorítmico, no podrá escribir ningún programa.

Del mismo modo, saber 1 + 1 = 2 es conocimiento matemático. Si no tiene conocimientos matemáticos, es como decir que no puede contar hasta tres. Obviamente no podrá escribir ningún programa si no puede contar hasta tres …

OKAY. Dejemos de bromear y pongámonos serios …

cuánto, y qué algoritmo y matemática necesitas, dependen en gran medida de tu aplicación. Si está escribiendo una animación, por ejemplo, le gustaría comprender el sistema de coordinación y los vectores y similares. Si está escribiendo una base de datos, necesita mucho conocimiento algorítmico. Si está analizando datos, necesita muchas matemáticas.

El conocimiento algorítmico y las matemáticas pueden ser útiles o no de inmediato, pero conocerlos asegurará su versatilidad.

Depende de lo que estés trabajando. Si está trabajando en la interfaz de usuario y el diseño frontend en general, las matemáticas y los algoritmos no son relevantes la mayoría de las veces. Si está trabajando en algo que es crítico para el rendimiento donde las entradas son de millones o miles de millones, entonces necesita algoritmos eficientes para hacer el trabajo. Poder analizar cuánto trabajo va a realizar su algoritmo es fundamental, ya que determina el tiempo de ejecución de su programa. Aquí es donde entra en juego la matemática. Es simplemente un lenguaje para expresar cuán bueno o malo es su algoritmo para una entrada dada. Necesita un buen control sobre este lenguaje (el Math) para descartar soluciones que son inaceptables cuando se aplica a una escala gigantesca.

El pensamiento lógico y las matemáticas son habilidades separadas. La programación usa mucho más pensamiento lógico. Las matemáticas y la programación de computadoras son la aplicación de conceptos lógicos y lógicos, no la lógica misma. También es totalmente posible aprender a programar en los idiomas más populares, incluido Python, sin matemáticas. No necesita ser bueno en matemáticas para algo como el desarrollo web. Las matemáticas de nivel universitario pueden ser útiles para aprender ciencias de la computación, cosas como algoritmos y estructuras de datos (aunque, de nuevo, no es absolutamente necesario). Creo que deberías poder entender y crear algoritmos y fórmulas, pero no necesariamente ser un genio de las matemáticas.

Escuela Holberton