Desde joven siempre he sido una persona sumamente curiosa que disfrutaba comprendiendo y resolviendo problemas. Conocí la programación por primera vez en la escuela secundaria y rápidamente me obsesioné con ella por razones obvias.
En la escuela secundaria, los primeros lenguajes y herramientas que recuerdo haber usado fueron cosas como Turing, Processing, GreenFoot y BlueJ. Todas ellas eran herramientas de aprendizaje y, con la excepción de Turing, eran abstracciones de Java centradas principalmente en la programación gráfica. Estas herramientas me permitieron hacer algunas cosas interesantes, muy rápidamente. Estas primeras experiencias son realmente las que inspiraron mi interés.
A partir de ahí quiero ir a la universidad local para estudiar Desarrollo Web. Aquí comencé a aprender cosas como HTML, CSS, JavaScript. Luego pasó a cosas como PHP, Ruby, ASP.NET, Angular y muchas otras habilidades relacionadas fuera del desarrollo puro. Fue un curso maravilloso y me brindó todas las habilidades que necesitaba para ser un desarrollador web altamente eficaz.
Al final de mi carrera universitaria, tenía un conocimiento bastante bueno del desarrollo web en su conjunto. Ciertamente no lo sabía todo pero estaba en un punto en el que nada era un misterio para mí. A partir de aquí mi curiosidad natural me hizo querer profundizar más. Me llevaron por la madriguera de los sistemas operativos, el desarrollo a nivel de sistemas y los sistemas integrados. Como puedes imaginar, el primer paso fue inclinarse por C.
Aprender C fue mucho más difícil de lo que esperaba. El concepto de memoria de pila y montón, así como de punteros, era extremadamente confuso. Especialmente proveniente de lenguajes de nivel superior con recolectores de basura. Rápidamente me di cuenta no de que C fuera simplemente más difícil, en realidad el lenguaje era bastante simple, sino que tenía que desaprender constantemente todos los malos hábitos y suposiciones incorrectas que hice durante los últimos años aprendiendo lenguajes de nivel superior.
¡Esto es lo que ahora llamo la maldición del aprendizaje de arriba hacia abajo!
Me sentí extremadamente frustrado por haber hecho todas estas suposiciones falsas cuando aprendía lenguajes que no eran de nivel de sistemas. También hizo que el proceso de aprendizaje de C tomara tres veces más tiempo de lo que probablemente debería haberlo hecho.
¡No apreciaba las abstracciones que estaba usando!
No me malinterpretes, hay muchas personas que pueden seguir toda una carrera centrándose únicamente en el desarrollo a nivel de aplicaciones o realizando scripts básicos de Python. Sin embargo, si realmente desea ser un ingeniero de software y comprender el campo en su conjunto, desde los sistemas integrados hasta los sistemas operativos y las aplicaciones desarrolladas para esos sistemas operativos, es muy ventajoso aprender desde abajo hacia arriba.
Mi sugerencia para cualquiera que realmente quiera ser ingeniero de software es comenzar con C. Comprenda la diferencia entre la pila y el montón, así como los punteros. Incursione con algún ensamblaje, incluso si eso es solo analizar el ensamblaje que producen sus aplicaciones C más pequeñas. ¡Si comprendes estas cosas fundamentalmente, todo lo demás será mucho más fácil!
Ojalá así fuera como comencé. ¡Apóyate de mis errores!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3