Recomendar varios libros para aprender C
Un cálculo rápido muestra que llevo diez meses trabajando y en dos meses será el umbral para trabajar durante un año razonable. Vale la pena reflexionar y resumir lo que he aprendido y perdido este año al comienzo del nuevo año; de lo contrario, el futuro puede ser aún más ciego. . . . .
Pensando en la primera vez que busqué trabajo en 2008, solo aprendí C Primer y leí la mayoría de los capítulos anteriores de "Programación con MFC", pero pude encontrar un trabajo sin problemas: ) Ahora parece que la mayoría de ellos Los graduados tienen una formación puramente académica, o incluso una especialización, y ni siquiera saben cuáles son los estándares. ¡Ni siquiera sé cuál es la biblioteca estándar -_-! No es exagerado decir que esta es una realidad que aprendí solo después de comenzar a trabajar, y también aprendí esto después de comunicarme con algunos estudiantes universitarios posteriores. Por lo tanto, aunque sentí que no sabía mucho en ese momento, la empresa descubrió que parecía saber mucho :)
Plan de entrada: como alguien que se especializó en comunicaciones electrónicas, pero terminó En la industria del software puro, conozco mis propias deficiencias. Mi conocimiento básico es demasiado débil, lo que puede limitar mi desarrollo futuro. Lo supe tan pronto como comencé a trabajar. No creo que, a partir de nuestra empresa, estar más familiarizado con la sintaxis de C se convierta en una ventaja para toda la vida. Esto será en vano después de un año de trabajo. . . . Entonces, al principio, me propuse algunas metas:
1. En primer lugar, por supuesto, continuar aprendiendo C e intentar terminar la mitad de "C efectivo" que leí antes. buscando trabajo, intente leer "C más efectivo" y "STL efectivo".
2. Siempre he pensado que la estructura de datos y las partes del algoritmo son lo que más me faltan, porque después de todo, el curso "Fundamentos de tecnología de software" que estudié en la universidad está demasiado lejos de la verdadera carrera de informática. así que siempre pienso que al menos lo soy. El plan del curso de recuperación dentro del primer año de la escuela es estudiar la "Descripción C del análisis de algoritmos y estructura de datos" y la "Descripción C del análisis de algoritmos y estructura de datos" de Weiss. Descripción del análisis C" y "Descripción del análisis C de estructura de datos y algoritmos" 》. Análisis de algoritmos C Descripción" e "Introducción a los algoritmos".
3. Cuando me uní a la empresa por primera vez, me asignaron al grupo de servidores de juegos en línea y comencé a desarrollar servidores por mi cuenta. Estaba muy interesado en los programas de red, por lo que, naturalmente, planeé aprender conocimientos sobre redes. La idea en ese momento era aprender "Programación multiproceso Win32" para Windows y "Programación avanzada en entorno Unix" para Linux, y el primer volumen de "Explicación detallada de TCP / IP". Explicación detallada de TCP/IP" Volumen 1, "Programación de redes Unix" Volumen 1.
Lo anterior es lo que debería aprender por mi cuenta después de un año de trabajo. . . . . . . . , mirando hacia atrás ahora con emoción, porque aunque solo quedan dos meses al año, en realidad hay demasiadas cosas por hacer.
Parte inacabada: Sólo he terminado de leer el primer paso de "Efectivo C". . . . Debido a que compré todos los libros originales en ese momento, leí "Effective C" de principio a fin. Más tarde, sentí que tenía poca energía y no tenía el coraje de seguir leyendo, o sentí que no. Tenía cada vez más cosas importantes que hacer, así que no seguí leyendo.
Siempre he sentido que el segundo paso es muy importante, y comencé a aprender en el medio hace un tiempo, no solo leí la "Descripción C del análisis de algoritmos y estructura de datos" de Weiss. también viene con sincronización. Después de leer el libro "Análisis de código fuente STL" de Hou Jie, lo más absoluto es que como acabo de terminar de aprender varios idiomas, quiero usar varios idiomas para implementar algoritmos y estructuras de datos. en el libro. Pero después de aprender la parte del árbol binario, mi trabajo pasó a anti-trampas, porque realmente me gusta este tipo de trabajo de bajo nivel, así que pasé la mayor parte de mi tiempo después de salir del trabajo (no mucho en realidad) en ensamblaje y estructuras de datos. El estudio fue interrumpido.
El tercer paso es que, además del libro "Programación multiproceso Win32", que leí de principio a fin, la empresa me organizó la lectura "Programación avanzada en entorno Unix" durante mi descanso para cenar y descanso por la tarde, pero solo leí el principio, y luego mi trabajo pasó del grupo de servidores al cliente. En ese momento, los servidores de la empresa estaban apretados y solo había un servidor Linux. Me asignaron al lado de la red para trabajar en la base de datos. Ni siquiera podía iniciar sesión en un servidor Linux de la empresa, así que me di por vencido y me llevé el libro a casa de la empresa de inmediato. en ese momento paré. Los libros TCP y UDP en el primer volumen de "Explicación detallada de TCP/IP" Debido a que recién comencé a trabajar como servidor, bajo la guía de mi supervisor (de hecho, me pidieron que lo leyera durante las horas de trabajo), probablemente leí el primero. volumen de "Programación de redes Unix", por la misma razón, también miré la parte sobre el uso de sockets para escribir programas TCP y UDP simples, pero no miré las demás más tarde.
En resumen, desde la perspectiva de completar el programa, mi año fue un fracaso porque no parecía leer lo que debería haber leído. No aprendí lo que necesitaba aprender. Pero mirando hacia atrás, cuando comencé a estudiar este curso, recién había comenzado a trabajar y no sabía mucho, no bajé el ritmo de aprendizaje, solo porque encontré algo que me interesaba más o que me interesaba más. Pensé que era importante para mí. Si hiciera algo más útil, me desviaría del camino.
Los planes no son tan buenos como los cambios: De hecho, lo que pasó después es que los planes no son tan buenos como los cambios -_-! Debido a que mi primer trabajo real no tenía nada que ver con Internet, mi estudio del conocimiento de las redes se interrumpió cuando comencé a trabajar. Cualquiera que haya leído mi resumen anterior sabrá que lo primero que hice cuando llegué a la empresa fue un ". Sistema de volcado anormal fuera de control". No sé cómo describir este trabajo. Quizás "Error Dump" sea más expresivo en inglés. No sé cómo describir este trabajo. Quizás "Error Dump" pueda expresarse mejor en inglés. Al hacer este trabajo, el director quería dejarme entender SEH, así que sacó su "Programación central de Windows" y me lo mostró. Después de leer este capítulo, sentí que había encontrado un tesoro que debía leer. Este libro es un buen libro. Incluso si leyera 12 capítulos de repente, todavía sentiría que no podía parar. ¡Finalmente compré este libro en línea y lo aprendí a fondo! ¡Mucho beneficiado! Recomiendo este libro ^^
Cuando leí este libro, mi segundo trabajo también estaba en pleno apogeo. Básicamente, lo que estaba leyendo en la empresa en ese momento era "Programación central de Windows", estaba mirando. "C efectivo" en casa Mi segundo trabajo (sin cambiar de empresa, solo cambiar de contenido) fue crear un sistema de archivos, ¡algo tan grande! Para mí, acabo de empezar a trabajar hace menos de un mes, lo que significa que la empresa todavía tiene una buena opinión de mí. Siempre lo he pensado así :) De hecho, la reparación y optimización de este sistema de archivos ha estado a lo largo de mi trabajo este año. - _-! ¡Hasta hace poco, había un error inexplicable y no esencial que seguía sin resolverse -_-!
Fue durante este trabajo que escribí documentos de diseño como el diseño de esquema y el diseño detallado por primera vez, y comencé a diseñar y escribir el código de un módulo independiente. Respecto a la importancia de este conocimiento, Luego me di cuenta. Pensando en ello, no puedo sobreestimarlo. Por eso estoy muy, muy agradecido con la empresa por brindarme una oportunidad tan importante al principio. En ese momento, también aproveché las necesidades de la empresa y aprendí. el conocimiento de ingeniería de software (¿cuál era la demanda en ese momento? No entiendo el significado -_-! ) y conocimiento de UML. Siento que me he beneficiado mucho. Para un sistema tan grande, gradualmente tengo algunas ideas sobre cómo codificar para que pueda modificarse y mantenerse bien en la etapa posterior, especialmente la sensación de que mi comprensión de las ideas de OO ha alcanzado un nivel superior. Después de todo, cuando comencé a trabajar, no había ideas formadas, solo sintaxis C.
El siguiente trabajo es muy interesante. Tengo que trasplantar el sistema de archivos de Windows que escribí a Linux. Durante este período, comencé a involucrarme realmente en el trabajo de Linux (solo jugaba con Linux cuando estaba estudiando. pero en realidad rara vez involucra programación), durante este período, aunque el marco original del trabajo ya estaba bien establecido y no había mucho que necesitara aprender, todavía aprendí algo. lugar, pero todavía aprendí a escribir Makefiles, usar g y usar Vim nuevamente. Jaja, en ese momento, en el modo de escribir en el servidor usando Putty, parecía que no tenía otra opción que Vim. Pero en ese momento todavía apenas me adaptaba a Vim. En este momento, también entiendo aproximadamente qué funciones pueden extenderse a MS, cuáles son ISO y cuáles son POSIX. Al menos entiendo estos conceptos, por lo que no tengo que escribir un programa de trasplante y cometer errores al usar. API Win32 en el futuro :)
Lo más interesante es que después de trabajar en el cliente durante tanto tiempo, el servidor ya no me necesita por el momento, así que sigo trabajando en el cliente, incluido TCP para un juego. El trabajo del lado del cliente, incluida la función TrayIcon del juego y la ventana de chat externo, me dio una buena idea del encanto de GameUI. Luego es hora de analizar y elegir el mejor analizador XML para el motor del juego, luego crear las clases subyacentes para el juego, agregando el patrón de fábrica. De hecho, no entendí qué era XML en ese momento y por qué tuve que pasar por tantos problemas para configurar el juego a baja velocidad. No entendí en ese momento que la idea de reconstrucción era en realidad. utilizado en el proceso de optimización, y no entiendo cuál es la función del patrón de diseño del modo de fábrica, solo consulte la implementación de CEGUI e insista en copiarlo. Pero, para ser honesto, no fue este tipo de experiencia. Cuando encontré la necesidad de conocer patrones de diseño por segunda vez, no pude decidirme y finalmente leí el libro original completo "Design Patterns" de GOF. . . . .
Después de eso, mi trabajo se volvió más interesante. El director del cliente me pidió que estudiara Lua detenidamente para poder agregar un sistema de secuencias de comandos al cliente. Realmente se estaban produciendo cambios en ese momento y el conocimiento en esta área estaba completamente fuera del plan, porque la empresa me permitió usar mi tiempo en el trabajo durante todo el día para leer cuando estaba en el trabajo o después de salir. Cuando terminé de estudiar un libro llamado "Programación LUA", me beneficié mucho al comprender las características de los lenguajes de secuencias de comandos y aprendí más sobre los lenguajes de secuencias de comandos integrados y nativos como LUA. En este momento, aunque la compañía consideró que dado que el juego estaba básicamente terminado, ya no era adecuado agregar dicho sistema de secuencias de comandos, por lo que el trabajo con Lua se interrumpió. Sin embargo, mi interés en los lenguajes de secuencias de comandos no se ha interrumpido. No solo no he renunciado a estudiar LUA, sino que incluso quería levantarme y terminar el estudio anterior, e interrumpí mi estudio de Python para terminar de leer el libro "Python Core Programming". Después de aprender Python, mi interés por los lenguajes de programación se volvió aún más abrumador. Me sorprendió la belleza de la sintaxis de Python y la riqueza de sus bibliotecas. Por eso pude enseñarle Python a mi novia :) ¡Fue una experiencia diferente a enseñarle C -_-!
El aprendizaje de Python llegó a su fin y nunca tuve la oportunidad de usarlo. Posteriormente, con mi interés en Linux, comencé a explorar por mi cuenta y aprendí Bash leyendo el libro "Bash Advanced". Programación". Esta fue la primera vez que lo aprendí. Tres lenguajes de programación, pero para ser honesto, siento que Bash es el más difícil de los tres lenguajes de programación -_-. Pero fue el estudio de Bash lo que me hizo sentir que Linux ya no es un sistema operativo complejo. Todo se hace a través de Bash, que es muchas veces más rápido y efectivo que la interfaz gráfica. Esto es un verdadero progreso, porque en el pasado. Siempre fue molesto escribir código repetidamente en la línea de comando. Después de aprender Bash, comencé a saber qué es un "programador vago".
Después de aprender Bash, comencé a saber qué es un "programador vago", es decir, no haría nada paso a paso si pudiera automatizarse :) Además, después de aprender Lua, Python y Bash, ahora Puedo usar Vim de manera uniforme y mi uso de Vim ha pasado de apenas adaptarme a él a ser ahora inseparable de él. Siempre estoy dispuesto a tomarme el tiempo para aprender herramientas que son tan complicadas que vomitan sangre al principio y me vuelven adicto después de familiarizarme con ellas. También me dan algunas ideas y pueden ahorrarme tiempo. Dedica tiempo a aprender, porque no importa lo complicada que sea, la curva de aprendizaje es larga, pero una vez que la aprendas, ¡te beneficiarás mucho! ¡Esto jugó un papel decisivo en mi productividad posterior y en mi voluntad de tomarme el tiempo para aprender cualquier herramienta que pareciera que podría ayudarme! Sabes, hace mucho tiempo, siempre creí que el lenguaje es lo primero, que las herramientas son solo herramientas, no tienen contenido técnico y nadie puede aprenderlas. En ese momento, poco a poco entendí lo que decía el director: "¡Si quieres hacer un buen trabajo, debes hacer un buen uso de las herramientas"! Por lo tanto, estoy dispuesto a dedicar tiempo a aprender Total Command para mejorar la eficiencia de mi administración y operaciones de archivos diarias, aprender Visual Assist para mejorar la eficiencia de mi codificación, aprender AQTime para mejorar la eficiencia de mis archivos de configuración y aprender DevPartner para Mejore la eficiencia de las pruebas posteriores al desarrollo, aprenda SoftIce, OllyDbg, IDA, etc. OllyDbg, IDA Pro para mejorar mi eficiencia de desmontaje, ¡todos estos están relacionados con mi experiencia con Vim desde reacio a inseparable!
Más tarde escribí un servidor de registro para registrar los datos del juego. Aunque usé la API C de MySQL, nunca pensé en volver a aprender SQL y MySQL. ¡Esta fue la primera vez desde que comencé a trabajar -_ -! Probablemente las únicas cosas que encontré en el trabajo y que no me molesté en aprender en profundidad fueron las bases de datos, incluido SQL Sever, que todavía no he aprendido en profundidad desde que comencé a usarlo nuevamente.
Más tarde, comencé a completar el sistema más grande en mi trabajo: el sistema de monitoreo de servidores de juegos. Este sistema es un sistema a gran escala que incluye operaciones de monitoreo diseñadas para la administración futura de todos los servidores de la empresa. ¡Diseño del sistema y codificación casi todo yo solo! En la etapa de diseño del esquema inicial, diseñé el punto de monitoreo y mis colegas diseñaron el centro de monitoreo. Posteriormente, a excepción de la parte frontal de la interfaz de monitoreo, que no la completé, me hice cargo de todo el diseño y la codificación. trabajo de otras partes.
Este trabajo me ha permitido mejorar mi comprensión del sistema general, el diseño y la codificación para implementarlo, lo cual no se puede subestimar. La trama más interesante es que al final del punto de monitoreo, utilicé el modelo de máquina de estados, que es un libro recomendado por mi jefe para leer "Patrones de diseño" de GOF. Aunque solo me pidió que mirara el modelo de máquina de estados. , el trabajo se completó, pero de acuerdo con mi inercia laboral, finalmente terminé de leer los 23 patrones de diseño completos en "Patrones de diseño", es una lástima que no haya trabajado en el desarrollo del sistema desde entonces, así que. Todavía tengo todas las cosas que aprendí. Aquí no hay forma de actuar.
Después, al trabajar en el módulo de administración de memoria, obtuve una comprensión más profunda del mayor defecto de C/C: la administración de memoria. Sin embargo, debido a la prisa, mi comprensión final fue muy limitada. Sin embargo, leer la sección del asignador de memoria en la parte superior de "Anatomía del código fuente STL" me ayudó mucho y casi sin esfuerzo entendí esta parte que debería haber sido muy difícil.
Más tarde, comencé a hacer herramientas -_-! Este es el trabajo más aburrido. Aunque es optimización, casi lo hago de nuevo. Necesito reflexionar aquí porque no tenía idea de escala en ese momento y me tomó mucho tiempo completar lo que podría haberse completado en poco tiempo. Trabajo, pero en este momento se formaron lentamente en mi mente algunas preguntas sobre la optimización del código C. Durante este tiempo, comencé a aprender estructuras de datos según lo planeado.
Luego, fui un paso más allá y optimicé el sistema de archivos original para hacerlo más rápido, y fue entonces cuando me enamoré de AQTime, que es una herramienta que permite la optimización desde la inserción del código GetTime hasta la codificación y ejecución. y herramientas para ver tus datos!
Desde entonces, comencé a trabajar contra las trampas y todavía lo sigo haciendo. Sin embargo, poco a poco descubrí que las ideas del jefe son diferentes a las mías. Siempre quise evitar las trampas. Plug-in tanto como sea posible, pero el jefe a menudo siente que una cierta escala es suficiente, porque después de todo, no somos expertos y no vale la pena dedicarle demasiado tiempo. Durante este tiempo, dediqué toda mi energía al desmontaje y leí mucho código de desmontaje de C. En combinación con el libro "Inside C Object" que leí hace algún tiempo, entendí muchas cosas a través del desmontaje. También aprendí algo sobre cómo llamar a código ensamblador en C/C y cómo llamar a funciones C/C en código ensamblador, lo que definitivamente será útil al realizar la optimización del ensamblado en el futuro. Honestamente, me alegro de haber podido hacer un trabajo como este tan temprano en mi carrera, aprendiendo sobre shells, estructuras de archivos PE, etc. ¡Este trabajo me beneficiará de por vida! ¡Tampoco se compara con el conocimiento de la estructura de datos! Quería poner toda mi energía en esto mientras aprendía el ensamblaje de Win32, pero ahora parece que no tengo mucho tiempo. También hay un episodio en el medio. Para evitar que se desmonte demasiado fácilmente, agregamos algunos elementos de Python a todo el sistema anti-complementos. Naturalmente, esta parte del trabajo me la dejaron a mí porque ya había aprendido Python antes. Y estoy particularmente familiarizado con Python. Después de instalar la interfaz API de C, debo haber completado la tarea rápidamente :) ¡Esto es realmente dramático! ¡El aprendizaje fuera del trabajo finalmente ayudó a mi trabajo! Y al final también ayudó a mi trabajo. Después de todo, aprendí mucho :)
Red, este es mi objetivo más importante en los dos meses restantes. Espero que después de un año de trabajo, pueda escribir programas de red generales, ¡o incluso marcos de red pequeños y eficientes!
Este artículo proviene del blog de CSDN:/vagrxie/archive/2009/02/09/3868743.aspx