Depuis que je suis jeune, j'ai toujours été une personne extrêmement curieuse qui aimait comprendre et résoudre des problèmes. J'ai été initié à la programmation au lycée et j'en suis rapidement devenu obsédé pour des raisons évidentes.
Au lycée, les premiers langages et outils dont je me souviens avoir utilisé étaient des choses comme Turing, Processing, GreenFoot et BlueJ. Tous étaient des outils d’apprentissage et, à l’exception de Turing, étaient des abstractions Java axées principalement sur la programmation graphique. Ces outils m’ont permis de faire des choses plutôt sympas, très rapidement. Ces premières expériences sont vraiment ce qui a inspiré mon intérêt.
À partir de là, je souhaite aller dans mon collège local pour étudier le développement Web. Ici, j'ai commencé à apprendre des choses comme HTML, CSS, JavaScript. Passons ensuite à des choses comme PHP, Ruby, ASP.NET, Angular et de nombreuses autres compétences connexes en dehors du développement pur. C'était un cours merveilleux et m'a donné toutes les compétences dont j'avais besoin pour être un développeur Web très efficace.
À la fin de mon parcours universitaire, j'avais une assez bonne compréhension du développement Web dans son ensemble. Je ne savais certes pas tout mais j'en étais au point où rien n'était un mystère pour moi. À partir de là, ma curiosité naturelle m’a donné envie d’approfondir. Cela m'a conduit dans le terrier des systèmes d'exploitation, du développement au niveau des systèmes et des systèmes embarqués. Comme vous pouvez l'imaginer, la première étape consistait à apprendre C.
Apprendre le C a été bien plus difficile que ce à quoi je m'attendais. Le concept de pile et de mémoire tas ainsi que celui des pointeurs était extrêmement déroutant. Surtout venant de langages de niveau supérieur avec des garbage collectors. Il m'est vite apparu non pas que C était simplement plus difficile, en réalité le langage était en fait assez simple, mais que je devais constamment désapprendre toutes les mauvaises habitudes et hypothèses incorrectes que j'avais prises au cours des dernières années en apprenant des langages de niveau supérieur !
C'est ce que j'appelle désormais la malédiction de l'apprentissage descendant !
Je suis devenu extrêmement frustré d'avoir fait toutes ces fausses hypothèses lors de l'apprentissage de langages non systémiques. Cela a également rendu le processus d’apprentissage du C trois fois plus long qu’il n’aurait probablement dû.
Je manquais d'appréciation pour les abstractions que j'utilisais !
Ne vous méprenez pas, de nombreuses personnes peuvent mener une carrière entière en se concentrant uniquement sur le développement au niveau des applications ou sur les scripts Python de base. Cependant, si vous voulez vraiment être un ingénieur logiciel et comprendre le domaine dans son ensemble, des systèmes embarqués aux systèmes d'exploitation et aux applications développées pour ces systèmes d'exploitation, il est très avantageux d'adopter une approche ascendante.
Ma suggestion à tous ceux qui veulent vraiment devenir ingénieur logiciel est de commencer par C. Comprenez la différence entre la pile et le tas ainsi que les pointeurs. Essayez un peu d'assemblage, même s'il s'agit simplement d'analyser l'assemblage produit par vos petites applications C. Si vous comprenez ces choses fondamentalement, tout le reste deviendra beaucoup plus facile !
J'aurais aimé que ce soit comme ça que j'ai commencé. tirez-vous de mes erreurs !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!