¿Cómo equilibran los estudiantes graduados en ingeniería de software la profundidad y la amplitud de la tecnología de aprendizaje?

En lo que respecta a la tecnología, creo que si realmente queremos profundizar, debemos hacerlo en el futuro.

Por ejemplo, en C++, naturalmente entrará en contacto con la sintaxis al principio y utilizará una sintaxis simple para hacer algunas cosas simples, como imprimir el triángulo de Yang Hui.

Luego entrarás en contacto con las ideas orientadas a objetos y comenzarás a aprender las ideas de abstracción, encapsulación y polimorfismo. Luego comenzarás a hacer algunas cosas más complejas. -Ideas orientadas a expresar la realidad. Luego, cuando llegues aquí, usarás STL con más frecuencia y luego comenzarás a sentir que STL es realmente algo bueno y tiene muchas cosas.

Luego te preparas para aprender sobre STL y descubres que STL utiliza tecnología de plantilla C++. Entonces descubres que se te ha abierto un mundo nuevo y empiezas a maravillarte. ¡El programa original todavía se puede reproducir así! Comienza a explorar con entusiasmo tecnologías de plantillas, como SFINAE, metaprogramación de plantillas, plantillas de longitud variable, etc. En este momento, algunas personas se "obsesionan" en el acto y son completamente incapaces de liberarse. La gente de la industria generalmente lo llama cariñosamente el "principito de las plantillas", el "maestro de las plantillas" y la "plantilla loca".

También hay algunas personas que no están tan "obsesionadas". Aprecian las ideas y diseños del diseño moderno en C++ y comienzan a comprender STL en profundidad y a aprender su belleza. Luego descubren que hay muchos patrones de diseño, como el patrón de estrategia y el patrón de adaptador, y descubren que tienen que aprender patrones de diseño para comprender mejor lo que hay dentro. Luego, como decía el diseño moderno de C++, se descubrió que STL aún necesita mejoras, como la asignación de memoria. Entonces comencé a comprender el concepto de memoria. En este momento, si descubre que su sistema operativo y la estructura organizativa de su computadora son deficientes, no sabe qué hacer. Si quiero diseñar un puntero inteligente asignado automáticamente, especialmente utilizando tecnología de recuento de referencias, existen muchos problemas en este momento. Si un subproceso está destruyendo y reduciendo el recuento de referencias, y otro subproceso está copiando y aumentando el recuento de referencias, es un poco urgente en este momento y siento que necesito comprender la concurrencia y los subprocesos múltiples. Sin embargo, cuando aprendí sobre los sistemas operativos, descubrí que tales operaciones eran atómicas, y luego comencé a entender qué era atómica, y luego regresaría y resolvería este problema. Luego, en ese momento, descubrí que a veces había referencias circulares en el recuento de referencias, que no podía liberar, y luego comencé a aprender a diseñar semántica débil. Aunque me fui temblando, estaba emocionado. Aprende uno por uno y resuélvelos uno por uno. ¡Se siente tan satisfactorio! Luego, comencé a considerar admitir dispositivos de eliminación personalizados y, gradualmente, sentí el clímax y descubrí que era un poco más fuerte. Después de diseñarlo, me pregunté si mi asignador de memoria incorporado no era lo suficientemente eficiente, así que comencé a buscar libros sobre sistemas operativos e incluso kernels de sistemas operativos para ver cómo otras personas asignan memoria, y después de terminarlo, descubrí que era un un poco feroz!

Luego continúe, al diseñar punteros inteligentes, hay un hilo, y luego sé que C ++ 11 tiene un hilo, así que comienzo a aprender o diseñar hilos por mi cuenta. En ese momento entendí más claramente qué es un hilo y qué es un candado, y una vez más lamenté la importancia del sistema operativo. Si desea diseñarlo usted mismo, debe comprender las API de pthread de UNIX y CreateThread de Windows, y luego abstraerlas. Después de terminarlo, descubrí que tenía una comprensión más profunda de los subprocesos y la concurrencia, y luego comencé a mirar los modelos de concurrencia de Java y golang, y luego descubrí que la rutina en golang es algo bueno. ¿Se puede agregar C++? El chico es tan ingenioso, esto es exactamente lo que significa C ++ 17, y luego te llamas el "principito de la concurrencia".

Luego continúa, simula otras bibliotecas STL y descubre que se requiere conocimiento de estructuras de datos y algoritmos, como pilas, colas, algoritmos, etc. Luego complementé el conocimiento de estructuras de datos y algoritmos, y también descubrí que hay muchos algoritmos y estructuras de datos en STL, como teoría de grafos, KMP, etc. , y luego comienzas a agregarlos. Al buscar información, descubrí que Boost también existe, pero te resististe a no mirarlo, lo experimentaste tú mismo y luego lo comparaste con Boost. Finalmente, descubres un mundo más grande. Las personas que se lamentaron de Boost eran realmente fanáticos de las plantillas, pero también descubrieron muchas cosas, incluido Boost ASIO, y luego descubrieron que este lugar parecía estar muy activo. Luego, comienza a usar ASIO, estudia ASIO y se lamenta de que parece necesitar complementar sus conocimientos de programación de redes. Luego te echaste al hombro tres Biblias de Stevens y las devoraste. Mirando hacia atrás a ASIO, es un poco poderoso.

Crees que puedes diseñar una biblioteca de red tú mismo y luego comienzas a desarrollarla. Aunque no es tan bueno como ASIO, puedes hacerlo tú mismo. ¡Después de terminarlo, siento que he profundizado mis habilidades!

Entonces, empiezas a estar insatisfecho con el status quo y empiezas a prestar atención a la dinámica de nuevos lenguajes como C++17, especialmente STL, para ver qué cosas nuevas tienen. agregado y experimentará lo siguiente. ¿Empiezas a descubrir cosas como la reflexión, los sistemas de archivos, y luego sigues las sugerencias y ejemplos y descubres que parece que puedes hacerlo sin un compilador utilizando nuevas funciones del lenguaje? ¿Y luego intentar hacerlo, fracasar, fracasar, fracasar, triunfar? ¡Entonces sentí que había aprendido mucho sin siquiera darme cuenta!

Luego, cuando miras hacia atrás en tu código, sientes que puede ser mejor, como patrones de diseño, como refactorización, como organización de proyectos, como construcción automatizada, como pruebas automatizadas, como como gestión de versiones. ...

Más tarde descubriste que cuanto más profundizas, ¿por qué necesitas tantos? Pero parece sentirse bien... Incluso de vez en cuando pienso en una imagen así:

Entonces, encontrarás que todos los idiomas parecen ser nubes flotantes. De hecho, es porque básicamente entiendes todo menos el lenguaje. Empiezas a decir: "En realidad, el idioma no importa".

Luego sigues caminando detrás, empiezas a entrar en contacto con expertos más poderosos y empiezas a descubrir: "¿Eh? ¿Qué es esto? ¿Qué es? ¿Cómo es que no he oído hablar de eso? Entonces comienzas a estudiar tecnología y aprendes de los expertos, y tu corazón cambia de abrumador a silencioso, porque cuanto más profundizas, más te sientes. aprendes, y menos pareces saber. Luego te embarcas en un nuevo viaje de aprendizaje como antes, excepto que esta vez es un mundo más profundo, más misterioso y más complejo, y tú mismo eres mucho menos impetuoso. ......