Programación de computadoras: Tengo 18 años. Creo que estoy empezando a programar tarde, pero ¿qué puedo hacer para agregar valor a mí mismo? ¿Qué debo aprender específicamente?

Esto se afirma una y otra vez en este barrio de Quora: 18 no es tarde. 50 no es tarde No es tarde el tiempo, siempre y cuando esté dispuesto a aplicar las matemáticas, la planificación y el razonamiento necesarios para escribir el código. Comencé a aprender sobre el mismo tiempo que tú.

Si no está filmando para un tipo particular de trabajo, pruebe algunos lenguajes de programación diferentes bastante pronto en lugar de limitarse a uno solo. Aprender un montón de Python es genial, pero algún día estarás haciendo algo en Python que está usando C o Fortran bajo las sábanas y será muy bueno tener ideas sobre cómo funcionan. Estar familiarizado con el funcionamiento de Python, Haskell, C ++ y JavaScript debería ser suficiente para ayudarte a lidiar con cualquier cosa que se te presente.

Estoy con Jonas que hacer algunos ejercicios y algo de teoría es una buena idea (y lamentablemente estoy de acuerdo en que no todos los doctores en ciencias de la ciencia saben cómo codificar). Mi lista de temas tiene alguna coincidencia con la suya:

  • Representaciones de datos: ¿Qué tipos básicos existen en la forma de almacenar números y letras? ¿Son las cuerdas un primitivo? ¿Cómo se almacenan en su computadora? ¿Cuáles son sus limitaciones y ventajas? ¿Cuándo sabrás que estás usando el incorrecto? ¿Cómo se asegura de poder obtener el tipo correcto de salida en función de los tipos de entrada?
  • Estructuras de datos: muchos cálculos se reducen a la clasificación, el almacenamiento y la búsqueda. Muchas estructuras de datos existen para admitir estas operaciones, con la cantidad de tiempo requerido para estos pasos y la sobrecarga de espacio que varía drásticamente. Si conoce el tipo de datos, el volumen de datos, la velocidad a la que agregará y cambiará las cosas, cómo lo haría y la velocidad a la que buscará las cosas, ¿puede averiguar qué datos? ¿Será la estructura mejor para tus datos? ¿Y puedes entender por qué? Puede ser útil conocer las matrices frente a las muchas encarnaciones de la lista enlazada (pilas, colas, salidas), mapas hash y varios tipos de árbol de búsqueda binaria equilibrada. Es bueno saber cómo implementarlos, pero lo más importante es poder reconocer qué desea y si se implementó de la manera que esperaba según la documentación.
  • Complejidad: Esto se enlaza con las estructuras de datos. A menos que quiera entrar en la teoría, no debería necesitar un entendimiento super sofisticado de la teoría de la complejidad de los algoritmos. Lo que necesitará es la capacidad de hacer comprobaciones para ver si está pasando bien el tiempo. Por ejemplo, mirar una lista sin clasificar una vez para ver si hay algo allí es más rápido que ordenar la lista, pero mirar la lista varias veces cerca de la longitud de la lista es más lento, y sería mejor ordenar primero También es bueno saber qué cosas son difíciles. Si alguien te está pidiendo que resuelvas un problema en el que crees que deberías revisar todas las combinaciones posibles o pedir varias cosas para encontrar la mejor solución, podría ser un problema de NP-Hard, de Wolfram MathWorld, en cuyo caso tienes que elegir entre hacer algo muy lento por más de unas pocas cosas o algo que puede no ser del todo perfecto. No es necesario que conozca todas las formas posibles de hacer frente a los problemas graves de NP, pero al menos debería saber uno cuando vea uno para no pasar demasiado tiempo tratando de hacer algo rápido que nadie en el planeta sabe. para hacer rápido todavía.
  • Partes internas de la computadora: además de saber cómo se almacenan los datos en la escala de bytes, es bueno saber algo sobre la arquitectura de una computadora. La razón principal de esto es que, contrariamente a la creencia popular, la complejidad en términos de número de iteraciones matemáticas tiende a tener un efecto bastante pequeño en la velocidad de los programas modernos. Las computadoras son realmente rápidas para hacer matemáticas con los números que viven en los niveles más rápidos de la jerarquía de memoria. Lo que tiene un gran efecto es la cantidad de cosas que se deben mover en los distintos niveles de caché, memoria y disco. Debe saber qué tipo de operaciones hacen que las cosas se muevan en la memoria, qué llena su memoria rápidamente, cómo se vacía su memoria cuando termina con las cosas (que pueden no ser automáticas) y algunas ideas aproximadas de qué tamaño de Las cosas encajarán en tus diferentes capas de memoria.
  • Lógica: muchas de sus grandes decisiones de programación vienen en la forma de su flujo de control. ¿Qué pasa si, si no, y qué bucles elige utilizar para hacer las cosas? Y muchas veces, este flujo de control se rige por un conjunto de declaraciones condicionales. En el nivel más básico, debe poder razonar sobre el conjunto de casos que tiene y que no ha abordado con su flujo de control en su código. El conocimiento sofisticado de la lógica de predicado y los conjuntos ofrece beneficios adicionales, pero los conceptos básicos pueden ayudarlo mucho.

En primer lugar, no creo que la edad importe mucho aquí. Por supuesto, es una gran ventaja si tienes un padre que te mostró la programación cuando tienes 9 años y comienzas de inmediato. Tengo 17 años y no tuve un padre así porque el mío quería que yo encontrara mi propio camino. Yo diría que mientras estés completamente comprometido con ello.
Tenga en cuenta que cada lenguaje de programación es un lenguaje y requiere una cantidad similar de tiempo, compromiso y práctica para ser bueno en eso.

¡Primero debes preguntarte en qué estás interesado! ¿Está resolviendo problemas matemáticos? ¿Es el análisis de datos? ¿Está escribiendo aplicaciones útiles para una plataforma determinada? ¿Escribir juegos pequeños? ¿O programar hardware? Dependiendo de su interés, debe ir a buscar los consejos de los programadores y de Google en el idioma que más le convenga.

Personalmente no pude averiguar lo que más quería. Pasé de la loca idea de desarrollar mi propio MMORPG a construir un sistema operativo, primero aprendí los principios de la programación y ahora estoy deseando codificar en un RaspPi y comenzaré a codificar ObjC y Swift para el desarrollo de iOS pronto.

Si tengo un consejo para ti es este: siéntate, trata de descubrir tus intereses y luego investiga a fondo los idiomas. Le ahorra mucho tiempo saltando de un idioma a otro porque se da cuenta de que no se ajustan a sus intereses.

Si sale sin conocer ninguno de sus intereses, solo conozca los principios básicos de la programación. Python es un gran lenguaje para darte una idea de lo que significa escribir un programa, pero ten en cuenta que es un lenguaje de nivel superior en el que no tienes que declarar exactamente tus tipos de datos para las variables. tener en un lenguaje como Java se “deja fuera”.

Espero poder ayudarte.

Mirar la edad es irrelevante, me gustaría que la gente dejara de crear barreras mentales impenetrables para ellos mismos. Si realmente tienes ganas de aprender programación y te han enseñado algunos conceptos básicos sobre el razonamiento deductivo en la escuela (aunque no sea así, no es un gran problema) progresarás con el material de hoy en día con bastante rapidez.

¡Recuerda siempre hacer ejercicios y problemas! Saber mucho de la teoría es bueno, pero poder aplicarlo a varios tipos de problemas es una tarea completamente diferente y muy compleja. (Hoy en día, muchos estudiantes de doctorado no pueden o codifican mal incluso si su conocimiento teórico es excelente)

Heres una lista básica.

  • Lógica proposicional.
  • Lógica de primer orden.
  • Teoría de conjuntos ingenuos o elementales.
  • Teorema del programa estructurado.
  • Sistemas de representación numérica como binario, decimal, hexadecimal.
  • Algunos conceptos básicos de las computadoras internas como cpu, ram, bus, i / o.
  • Algoritmos y estructuras de datos.

Si buscas un libro en particular. Esta sería mi elección:

“Programación Lógica y Diseño, Integral. 8ª edición