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?
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.
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:
4 Comentários
Ola Vitor, muito bom seu texto, meu nome e Carlos e estou começando a desenvolver um sistema para desktop e estou com uma duvida que já esta me seguindo um tempo, qual a melhor linguagem de programação para desenvolver aplicações para Desktop? vejo vários artigos ou opiniões falando de uma linguagem ou outra, mas no meu resumo geral percebi que o c# ou o Delphi seria as melhores opções, mas o java não seria muito bom pois não se adapta muito bem em aplicações para Desktop, na sua opinião qual seria a melhor opção para este tipo de aplicação?
Olá, Carlos, tudo bem?
Obrigado pelo seu comentário. Fico feliz que tenha gostado do texto.
Realmente existem vária opções e muitos artigos com prós e contras de várias linguagens. Vou te dar minha opinião sincera, eu acredito que as duas variáveis mais importantes para decidir isso são: Sua desenvoltura com a linguagem e a documentação/suporte disponível.
A minha praia é mais programação C, Arduino e Matlab. Se eu fosse desenvolver alguma aplicação para desktop eu escolheria Java, pois é a linguagem de alto nível que eu conheço melhor. Além disso, tenho certeza que não faltariam possibilidades de suporte ou pessoas ao meu alcance que poderiam ajudar, caso necessário.
Do ponto de vista da linguagem em si, eu não sei te dizer se existe uma que seja melhor que outra pensando apenas por esse requisito(ser uma aplicação desktop). O propósito da aplicação também deve ser levado em conta. Se for uma aplicação acadêmica, por exemplo, Python certamente deve ser considerada. Se for uma aplicação genérica, acredito que Java e C# atendam bem, assim como Delphi. Mas se você precisar de uma opinião ou alguém para revisar o sistema, talvez Delphi não seja tão imediato como C# e Java, que são super populares.
Sempre li que Java é uma das linguagens mais populares por se adaptar bem aos ambientes diferentes. A máquina virtual Java dá uma grande flexibilidade para desenvolver aplicações sem se preocupar demais com as especificidades de cada máquina/sistema. C# também oferece essa flexibilidade.
Continue com sua pesquisa e buscando outras opiniões. Embora não exista unanimidade, certamente você vai se sentir mais a vontade com uma escolha. Eu ficaria com Java, pelas razões que comentei e ressalvada qualquer necessidade específica.
Boa sorte!
Abraços
Eu sempre gostei muito de C e de Assembly. Eu sou meio que tido como um “tiozão” (apesar de não ter nem trinta anos ainda) porque, diferente da maioria, não me dou bem com java e C++/C# não consegue me interessar tanto quanto o C “puro”.
O seu artigo ficou muito bom e eu sempre incentivo esse tipo de iniciativa. Assembly é poder, e quem não gosta de se sentir poderoso? Infelizmente a linguagem anda sendo muito desprezada pelos programadores “modernos”, adeptos da linguagem Java e semelhantes.
Eu gostaria muito de aprimorar meus conhecimentos em Assembly, mas ultimamente não ando tendo sorte com livros (pior ainda com material em português). Aliás, se você puder me recomendar bons livros (que cubram os recursos dos processadores mais atuais) eu agradeceria muito.
Paz!
Difícil vencer a velocidade de hoje Yuri. A base da programação já está abstraída nas linguagens novas e assim se ganha produtividade e diminui a curva de aprendizado. Para alguém conseguir ficar produtivo em C leva muito tempo. Já não faz mais sentido ter um monte de progamadores em C ou assembly, e sim uma massa de programadores produtivos com as linguagens modernas…