Vale a pena aprender o bom e velho Assembly?

AGRADEÇA AO AUTOR COMPARTILHE!

Aprender linguagens de programação é fundamental na carreira de qualquer desenvolvedor. Mais do que isso, aprender as linguagens certas, de acordo com seus objetivos e com o que suas oportunidades apresentarem, é determinante para se tornar um profissional capacitado.

Nesse ponto, a grande riqueza do mundo da programação, com uma grande gama de linguagens e paradigmas diferentes, é também um fator de cautela. Não dá para ser especialista em todas as linguagens. No entanto, é importante ter um background forte pelo menos naquelas que forem mais importantes para o mercado e para a academia.

O presente texto parte deste pano de fundo: Um mercado com uma gama de linguagens e demandas de nichos diferentes e, ao mesmo tempo, linguagens menos usadas e mais especializadas. Vale a pena aprender, por exemplo, a linguagem Assembly, com tantas opções mais demandadas e com maiores aplicações práticas?

Típico código Assembly

Típico código Assembly

Escolhemos falar de Assembly, pois é a linguagem de baixo nível por excelência. É a linguagem de máquina escrita de uma forma diferente. Cada processador tem o seu instruction set com comandos e mnemônicos próprios. Em geral, ela é ensinada em alguns cursos de sistemas embarcados e alguns livros da área apresentam seus códigos nessa linguagem. Apesar de ser o último passo antes dos 0’s e 1’s que o processador trabalha e esta ligado à arquitetura dos computadores em si, possui aplicação prática baixíssima e está longe das linguagens mais usadas no mercado.

Mesmo para sistemas embarcados, valeria a pena investir tempo e esforço sendo que C/C++ são a base para a larga maioria das aplicações? A resposta, como é de se imaginar, é que depende dos seus objetivos e prioridades. Mas para além disso, pode-se discutir também os benefícios em aprender Assembly. 

Benefícios em se aprender o bom e velho Assembly

Se vale a pena ou não aprender, depende de onde você quer chegar. Se seu trabalho e direcionamento profissional apontam para um caminho no qual você nunca irá usá-la, os benefícios serão mais restritos, embora ainda existam. A linguagem ensina o que a CPU está fazendo e como funciona a execução de suas operações em cada instante. Certamente, entender um pouco de Assembly dá uma visão muito interessante de como são executadas as tarefas para as quais estão programadas.

Para algumas carreiras, notadamente na área de sistemas embarcados e desenvolvimento de firmware, conhecer Assembly é um diferencial interessante e com certeza contribui para te destacar como profissional. Em 2016, de acordo com o índice TIOBE de linguagens de programação mais populares, o Assembly viveu um pico de popularidade, tendo alcançado posições próximas ao top ten e até integrado o pelotão de frente por um certo tempo. Embora tenha sido por um curto período de tempo, o surto de popularidade destaca algumas das razões para se aprender a linguagem:

  • Desenvolvimento de compiladores;
  • Programação de microcontroladores;
  • Desenvolvimento de drivers para dispositivos eletrônicos;
  • Escrever rotinas de baixo nível;
  • Entender o funcionamento da CPU e ter um bom feeling sobre problemas de baixo nível da execução de firmware;
  • Desenvolvimento de sistemas operacionais em tempo real(RTOS);

Em todos esses tópicos, aprender a linguagem Assembly é útil. Assim, as motivações para aprender, ainda que seja uma linguagem com baixíssima demanda de mercado, são principalmente as carreiras na área de sistemas embarcados e os benefícios para a formação enquanto desenvolvedor e engenheiro.

Sistemas embarcados é um nicho em que Assembly ainda tem demandas profissionais

Sistemas embarcados é um nicho em que Assembly ainda tem demandas profissionais

Não há nada de errado em aprender uma linguagem apenas por ser interessante e ajudar na formação geral do conhecimento. Mas nesse caso, há de se fazer a pergunta se não valeria a pena investir em outra linguagem com mais apego profissional e que traria outras vantagens.

Mesmo para a área de sistemas embarcados, embora seja um diferencial, investir em certificações nas linguagens mais importantes, como C, C++, Linux, etc, talvez faça mais sentido profissionalmente. Feitas essas ressalvas, a pergunta que fica é: quanto de Assembly vale a pena aprender?

O quanto de ASM você deve saber?

Uma forma interessante de pensar o aprendizado de Assembly é que é uma linguagem que você deve saber ler, mas não necessariamente escrever um código assim que requisitado. Isso diz muito sobre o quanto é vantajoso aprender da linguagem. Saber ler significa ser capaz de identificar as instruções mais comuns, as estruturas mais usadas e associar os blocos de instruções Assembly com as estruturas de programação mais convencionais, como for, while, if-else, e por aí vai.

Para saber ler um código assembly e entendê-lo completamente, é necessário conhecimento adicional do set de instruções do processador para o qual o código está sendo escrito. O datasheet e a documentação do processador é essencial. Saber ler esse tipo de documento e compreender como o set de instruções funciona é um conhecimento extremamente útil.

Em resumo, a não ser que haja uma demanda específica (profissional, acadêmica ou mesmo um projeto pessoal) para que você escreva um código Assembly, vale a pena aprender a linguagem a nível introdutório e saber lê-la e compreendê-la razoavelmente, principalmente para profissionais que atuam com programação de MCUs e desenvolvimento de firmware. 

Os benefícios, além de um diferencial em certos nichos do mercado, é um conhecimento que agrega e fornece um bom insight sobre o que acontece por trás das linhas de código em alto nível que estamos acostumados a escrever.

Conclusão

Respondendo à pergunta do título, aprender Assembly vale a pena sim para certos perfis de profissionais, que trabalham em nichos como sistemas embarcados, IoT e desenvolvimento de firmware. E de maneira mais ampla, vale a pena desde que, relativamente às suas outras prioridades profissionais, seja um investimento sensato e que atenda a um objetivo seu de ter um bom entendimento da linguagem de máquina e de como as coisas acontecem em baixo nível de verdade.

Mesmo quando não há uma aplicação imediata, você vai aprender muito sobre arquitetura de computadores, sobre como eles fazem e executam cálculos. Essas outras habilidades também agregam para a sua cultura e formação como engenheiro e desenvolvedor.

É importante ter em mente que existem limitações em relação ao seu uso prático e profissional. No entanto, certamente é um conhecimento que agrega valor à formação.

Deixo abaixo alguns cursos online e indicações de livros para quem quiser conhecer/relembrar um pouco da linguagem:

AGRADEÇA AO AUTOR COMPARTILHE!

Vitor Vidal

Mais artigos deste autor »

Engenheiro eletricista apaixonado por eletrônica e desenvolvimento de sistemas de hardware e software. Mestrando em Engenharia Elétrica no CEFET-MG. Produtor de conteúdo e redator na área de tecnologia. Escritor e poeta nas horas vagas.


Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">