Desde jovem sempre fui uma pessoa extremamente curiosa, que gostava de entender e resolver problemas. Fui apresentado à programação no ensino médio e rapidamente fiquei obcecado por ela por motivos óbvios.
No ensino médio, as primeiras linguagens e ferramentas que me lembro de usar foram coisas como Turing, Processing, GreenFoot e BlueJ. Todas eram ferramentas de aprendizagem e, com exceção de Turing, eram abstrações Java com foco principal na programação gráfica. Essas ferramentas me permitiram fazer coisas muito legais, muito rapidamente. Essas primeiras experiências foram realmente o que inspiraram meu interesse.
De lá, quero ir para minha faculdade local estudar Desenvolvimento Web. Aqui comecei a aprender coisas como HTML, CSS, JavaScript. Mais tarde, passando para coisas como PHP, Ruby, ASP.NET, Angular e muitas outras habilidades relacionadas fora do desenvolvimento puro. Foi um curso maravilhoso e me deu todas as habilidades necessárias para ser um desenvolvedor web altamente eficaz.
No final da minha carreira universitária, eu tinha um bom entendimento do Desenvolvimento Web como um todo. Eu certamente não sabia tudo, mas estava num ponto em que nada era um mistério para mim. A partir daqui a minha curiosidade natural fez-me querer mergulhar mais fundo. Isso me levou à toca do coelho dos sistemas operacionais, desenvolvimento em nível de sistemas e sistemas embarcados. Como você pode imaginar, o primeiro passo foi inclinar-se para C.
Aprender C foi muito mais difícil do que eu esperava. O conceito de pilha e memória heap, bem como de ponteiros, era extremamente confuso. Especialmente vindo de linguagens de nível superior com coletores de lixo. Rapidamente ficou claro para mim não que C era simplesmente mais difícil, na realidade a linguagem era bastante simples, mas que eu tinha que desaprender constantemente todos os maus hábitos e suposições incorretas que fiz nos últimos anos aprendendo linguagens de nível superior!
Isso é o que agora chamo de maldição da aprendizagem de cima para baixo!
Fiquei extremamente frustrado por ter feito todas essas suposições falsas ao aprender linguagens que não eram de nível de sistema. Também fez com que o processo de aprendizagem C demorasse três vezes mais tempo do que provavelmente deveria.
Não gostei das abstrações que estava usando!
Não me interpretem mal, há muitas pessoas que podem seguir uma carreira inteira concentrando-se apenas no desenvolvimento de nível de aplicativo ou fazendo scripts básicos em Python. No entanto, se você deseja realmente ser um engenheiro de software e entender o campo como um todo, desde sistemas embarcados até sistemas operacionais e aplicativos desenvolvidos para esses sistemas operacionais, é altamente vantajoso aprender de baixo para cima.
Minha sugestão para quem realmente deseja ser um engenheiro de software é começar com C. Entenda a diferença entre pilha e heap, bem como ponteiros. Experimente alguma montagem, mesmo que seja apenas analisando a montagem que seus aplicativos C menores produzem. Se você entender essas coisas fundamentalmente, todo o resto será muito mais fácil!
Gostaria que fosse assim que comecei. apoie-se nos meus erros!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3