¿La programación que aprendiste en la universidad es útil en el trabajo?
En primer lugar, no hay duda de que programador es un término general para cualquiera que "trabaja en una computadora y escribe código a mano en un lenguaje de programación específico". Lo que vamos a analizar es el trabajo de un programador, que es escribir código.
Personalmente divido el trabajo de escribir código en cinco categorías, lo cual no es necesariamente correcto y completo. Es una clasificación conceptual:
1. Este tipo de trabajo utiliza códigos específicos, segmentos de código (funciones) y bibliotecas de códigos para formar programas con funciones específicas. Estos programas pueden aceptar datos específicos y generar datos específicos. Por ejemplo, la interfaz de un sitio web, la interfaz de un software, algunas funciones de visualización de un software y algunas funciones más complejas, como cómo se comunica el front-end del sitio web con el back-end, cómo distribuir las solicitudes de los usuarios al back-end y cómo manejar dos programas paralelos, procesos de comunicación, sistemas informáticos, etc. El trabajo estructural requiere experiencia y conocimiento de las estructuras de datos existentes y no requiere niveles particularmente altos de matemáticas. Por experiencia me refiero a cómo elegir la lógica del programa y las estructuras de datos para lograr una función específica prevista. Este proceso de selección requiere que los programadores tengan la base de leer y escribir una gran cantidad de código, ser capaces de conectar las funciones a implementar con las funciones que han implementado o visto antes, diseñar una solución e implementarla. Por ejemplo, en diseño web, el proceso de crear una página con elementos HTML y animar elementos de página con JavaScript es básicamente un proceso de "lo que ves es lo que obtienes".
Este es exactamente el tipo de trabajo que requieren la mayoría de las empresas de Internet y los sistemas bancarios actuales. Para lograr funciones específicas, la estructura del programa es muy compleja y muchas personas deben participar en la redacción y prueba, por lo que surgió la disciplina de la ingeniería de software.
El pináculo del trabajo estructural son los sistemas operativos informáticos. Aunque los sistemas operativos de las computadoras son muy complejos, no hay muchos problemas matemáticos involucrados, los problemas matemáticos más complejos son cómo manejar la programación y la gestión de la asignación de memoria de múltiples tareas, y ambos problemas se pueden resumir en matemáticas discretas simples y combinaciones de permutaciones. problema. Sin embargo, la complejidad matemática teórica de un sistema operativo de 10.000 líneas es aproximadamente la misma que la de un sistema operativo de 1.000.000 de líneas; la principal diferencia es estructural, no matemática; Por ejemplo, soporte para más tipos de CPU, periféricos de hardware, protocolos de red, etc.
2. La segunda categoría es el trabajo de eficiencia. Este tipo de trabajo abstrae problemas de ingeniería específicos en problemas matemáticos y luego inventa nuevas estructuras de datos o lógica operativa para optimizar la eficiencia del problema. El ejemplo más simple es la clasificación. El uso de la clasificación por burbujas o la clasificación rápida para organizar grandes cantidades de datos traerá diferencias de tiempo significativas, todos lo sabemos... Los científicos informáticos se dedican principalmente a este tipo de trabajo, que requiere matemáticas combinatorias y gráficos muy altos. conocimiento teórico. Los primeros problemas de eficiencia a menudo dependían de matemáticas discretas más complejas, mientras que en los últimos años la mayoría de los problemas se han resuelto aplicando la teoría de grafos. Resolver tales problemas requiere que los programadores tengan un conocimiento profundo de la mayoría de las estructuras de datos y sean capaces de realizar análisis teóricos rigurosos para indicar claramente la eficiencia del tiempo y la memoria de una estructura de datos específica o de una lógica en ejecución. La estructura de datos inventada por cqf en 2016 mencionada anteriormente pertenece a esta categoría... En general, no tenía aptitudes para este tipo de trabajo y, después de reprobar en matemáticas discretas, obtuve malos resultados en cursos posteriores de algoritmos avanzados.
El pináculo del trabajo eficiente es un conjunto de libros llamado "El arte de la programación informática" escrito por el profesor Donald E. Knuth de la Universidad de Stanford.
Este conjunto de libros contiene el análisis teórico y las formas óptimas de la mayoría de los algoritmos informáticos conocidos por la humanidad, y ha sido reconocido como la biblia de los algoritmos durante 50 años.
Si lees este libro detenidamente, puedes conseguir el mejor trabajo de programador del mundo (Bill Gates dijo, si alguien lee este libro, envíale tu currículum...), por supuesto, esto no es fácil. Hasta ahora sólo he leído con atención el prólogo del primer libro.
Los productos principales de los dos primeros tipos de industrias son Taobao, especialmente alrededor de Double Eleven. Sin explicar demasiado, puedes leer el artículo "Revelando la compleja tecnología detrás de las compras en Taobao". A Google no le ha ido tan bien como a Taobao en este sentido en los últimos dos años porque hay demasiados chinos...
3. Esto se refiere al uso de computadoras para simular la lógica cognitiva humana. Este tipo de trabajo incluye reconocimiento de voz, comprensión de textos, recuperación de información, análisis de datos, etc. Este tipo de trabajo perteneció primero a las categorías de investigación de inteligencia artificial avanzada y procesamiento del lenguaje natural. Posteriormente, con el auge de Internet, poco a poco entró en la atención del público. La base principal de este tipo de trabajos son modelos como estadística de probabilidad, aprendizaje automático y minería de datos, y los conocimientos matemáticos incluidos son principalmente teoría de probabilidades, álgebra lineal y teoría de grafos. Debido a la demanda de aprendizaje automático por parte de las empresas de Internet y las empresas financieras, el conocimiento básico relevante se ha desarrollado de manera muy madura y también existen tutoriales muy estandarizados sobre cómo aprender este tipo de conocimiento. Hoy en día, en Silicon Valley, si los programadores no tienen algunos conocimientos sobre el aprendizaje automático, les da vergüenza salir a saludar a los demás.
La aplicación de este tipo de trabajo es aproximadamente la siguiente: analizando los datos de los usuarios que compran cosas en Taobao, infiere lo que comprará analizando los cambios en el mercado de valores y cierta información del mercado, infiere si; el mercado de valores subirá a continuación. También analiza las palabras clave de búsqueda para proporcionar resultados de búsqueda, analiza las señales de voz en texto, etc. Todas estas diferentes aplicaciones están diseñadas para analizar datos y tienen modelos de procesamiento y métodos matemáticos similares.
En los últimos años se ha inventado el aprendizaje profundo basado en el aprendizaje automático. No sé lo suficiente sobre esto para comentar. Pero sé que el objetivo principal de este tipo de trabajo es imitar las capacidades cognitivas humanas. En particular, los biólogos han demostrado que las redes neuronales, el modelo más básico y conocido en aprendizaje automático, simulan mejor la lógica del cerebro humano.
Este tipo de trabajo puede ser tan fácil o tan difícil como quieras. Todo lo que necesita hacer es tomar su primer año de álgebra lineal, aprender sobre modelos de aprendizaje automático, como redes neuronales y máquinas de vectores de soporte, y luego entrenar sus propios modelos para analizar datos, que es lo que quieren la mayoría de las empresas de Silicon Valley. El nuevo científico jefe de Baidu, Andrew Ng, dio una clase abierta sobre aprendizaje automático en Coursera. Después de terminar la conferencia sobre redes neuronales, dijo: "Muy bien, ahora comprendes el aprendizaje automático mejor que la mayoría de los ingenieros de Silicon Valley (¿no es realmente malo?"). ) Sin embargo, el conocimiento matemático detrás del modelo de aprendizaje automático es muy profundo. Por ejemplo, las redes neuronales pueden ser equivalentes a algunas estructuras topológicas complejas de alta dimensión. El proceso de entrenamiento de la red es en realidad el proceso de transformación topológica de estas estructuras topológicas. . Por ejemplo, si los datos a entrenar tienen una dimensión alta, debe elegir una función adecuada para reducir la dimensión. Para comprender estas cosas, debe estudiar en profundidad conocimientos matemáticos como álgebra lineal, topología y análisis matemático. De hecho, no entiendo realmente de qué estoy hablando. No he estudiado topología de forma sistemática.