¿Cuál es una guía para que mi hijo de grado medio tenga una base sólida en software y hardware? Hay muchos idiomas desde Assembly hasta Google Go.

Dijiste tanto software como hardware.

Lo más importante para entender es hacer las lecciones de matemáticas que se están enseñando bien, no solo la puntuación, sino conocer la profundidad. Extraño esos días. Si tuviera la experiencia que tengo ahora, desearía haber prestado más atención en clase.

Las siguientes cosas son especialmente importantes:

  1. Álgebra lineal – extremadamente importante que lo aprendan bien – lo más importante Matrices.
  2. Aprenda y entienda la probabilidad y la estadística.
  3. Precalc y tal vez si le va bien el cálculo.
  4. Matemáticas discretas, especialmente la teoría de conjuntos.
  • Mientras aprende Matemáticas, sugiero comenzar desde Golang o Python y resolver todos los problemas (pruebe tantos, probablemente tome 1 por día) aquí – Acerca de – Proyecto Euler
  • Si bien el aprendizaje de lenguajes de programación ciertamente ayuda, pero la mayoría de las veces es útil que comprenda por qué las cosas se hacen mejor de una manera determinada: busque el libro de patrones de diseño (especialmente Gang of Four) y aplique los problemas en los que está trabajando.
  • Lea un libro ligero sobre estructuras de datos y algoritmos; este es un algoritmo de lectura ligera desbloqueado y quizás fácil de seguir, o pruebe el libro de algoritmos de Sedgewick, que también es una joya.
  • Lea sobre la manipulación de bits.
  • Para comprender el hardware, la mejor y única primera lección que necesita es ensamblar su propia computadora; de esta manera, aprenderá los detalles de la cosa, instale su propio sistema operativo, preferiblemente Linux.
  • Intente comenzar con Golang o C. Recomiendo Golang primero.
  • Definitivamente elige un libro sobre los fundamentos de Unix (prueba Richard Stevens) y scripting de shell …
  • Para obtener exposición al programa funcional, quédese con Python y lea y aplique Map, Reduce, operador lambda.

Una vez que llegue a ser uno de estos conceptos, déjelo probar Scala o Haskell para comprender la programación funcional en profundidad.

La asamblea puede ser una buena opción como un “crédito adicional” – intente nasm.

Perdóname por ser entrometido, pero debo decir que siento un fuerte deseo de tu parte para que él aprenda, y sospecho que no comparte este deseo. Caso en cuestión, eres tú publicando la pregunta, no tu hijo. Obligar a su hijo a trabajar en algo que no le gusta es la forma más eficiente de hacer que lo odie y le moleste. Lo digo como hijo, no como padre.

En cualquier caso, a la pregunta. El mejor primer lenguaje de programación, en mi opinión, es Python. En su valor nominal, tiene un script como la naturaleza, lo que hace que sea muy fácil ejecutar programas simples. Usando la implementación predeterminada, CPython, se puede ejecutar desde la línea de comandos o IDE muy rápidamente, ya que se compila perfectamente en bytecode. Es un lenguaje de alto nivel, de tipo dinámico, lo que significa que no tiene que preocuparse por declarar los tipos de variables: se asignan en tiempo de ejecución. Contiene una gran biblioteca estándar que implementa muchas funciones de uso común, como conjuntos, diccionarios, sockets de red, manipulación de cadenas, etc. Tiene enteros grandes nativos que se usan automáticamente en el desbordamiento, por lo que puede calcular [math] 100! [/ Math ] y mire páginas y páginas de número por.

A continuación, sugiero C o Go, como un nivel inferior, lenguaje de programación de sistemas. Lo aprendí como mi primer idioma. C y Go son muy similares. C es muy utilizado por muchas opciones de diseño arcaico, como la concatenación de archivos de encabezado durante la compilación. Es muy fácil escribir programas incorrectos y que se bloquearán horriblemente y, en general, no son seguros. Requiere compilación y herramientas externas para la depuración.

Go, por otro lado, fue diseñado para reemplazar a C. Tiene características mucho más modernas. Admite de forma nativa la noción de paquetes, por lo que es más fácil escribir código modular y hacer que descargue automáticamente todas sus dependencias. No tiene algunas de las características que se consideran inseguras en C, por lo que es más seguro en general. Es más fácil de depurar.

Finalmente, el ensamblaje solo es realmente necesario para acceder a funciones que no están disponibles en los lenguajes de programación de sistemas. Le dará una idea de cómo funciona el hardware, pero probablemente sea más fácil simplemente leer artículos de Wikipedia sobre hardware. Aprendí ARMv7 y el simple ensamblaje x86 en la universidad y lo encontré muy sencillo. Otro uso para el ensamblaje es escribir código optimizado a mano para computadoras integradas, como los antiguos Arduinos (y clones) basados ​​en AVR.