Durante anos, considerei cavar o que considero linguagens de "baixo nível". Para mim, isso significa C e montagem. No entanto, eu não tinha tempo para isso ainda, nem nunca foi necessário.
Agora, porque não vejo nenhuma necessidade, sinto que devo apenas agendar algum momento no qual estudei o assunto ou desistirei do plano para sempre.
Minha posição
Nos últimos 4 anos, concentrei-me em "tecnologias da web", que podem mudar, e sou desenvolvedor de aplicativos, que dificilmente mudará.
No desenvolvimento de aplicativos, acho que a usabilidade é a coisa mais importante. Você escreve aplicativos para serem "consumidos" pelos usuários. Quanto mais utilizáveis forem esses aplicativos, mais valor você terá produzido.
Para alcançar uma boa usabilidade, acredito que as seguintes coisas são viáveis
- Bom design : recursos bem pensados acessíveis por meio de uma interface de usuário bem pensada.
- Correção : o melhor design não vale nada, se não for implementado corretamente.
- Flexibilidade : um aplicativo A deve evoluir constantemente, para que seus usuários não precisem mudar para um aplicativo B diferente, com novos recursos, que A possa implementar. Os aplicativos que abordam o mesmo problema não devem diferir nos recursos, mas na filosofia.
- Desempenho : O desempenho contribui para uma boa experiência do usuário. Idealmente, um aplicativo é sempre responsivo e executa suas tarefas razoavelmente rápido (com base em sua frequência). O valor da otimização do desempenho além do ponto em que é perceptível pelo usuário é questionável.
Acho que a programação de baixo nível não vai me ajudar com isso, exceto pelo desempenho. Mas escrever um aplicativo inteiro em um idioma de baixo nível por uma questão de desempenho é uma otimização prematura.
Minha pergunta
O que a programação de baixo nível poderia me ensinar, que outras línguas não me ensinariam? Estou faltando alguma coisa, ou é apenas uma habilidade, que é muito pouco útil para o desenvolvimento de aplicativos? Por favor, entenda que eu não estou questionando o valor de C e montagem. É que, na minha vida cotidiana, estou muito feliz que todos os meandros desse mundo sejam abstraídos e gerenciados para mim (principalmente por camadas escritas em C / C ++ e pela própria montagem). Eu simplesmente não vejo nenhum conceito que possa ser novo para mim, apenas detalhes com os quais eu teria que encher minha cabeça. Então, o que há para mim?
Minha Conclusão
Obrigado a todos por suas respostas. Devo dizer que ninguém realmente me surpreendeu, mas pelo menos agora tenho certeza de que abandonarei essa área de interesse até que seja necessário.
Para mim, escrever a montagem hoje em dia para processadores como eles estão em uso nas CPUs de hoje não é apenas desnecessariamente complicado, mas também corre o risco de resultar em desempenho de tempo de execução menor do que um equivalente em C. A otimização manual é quase impossível devido ao OOE, enquanto você não obtém todos os tipos de otimizações que um compilador pode fazer automaticamente. Além disso, o código é portátil, porque usa um pequeno subconjunto de comandos disponíveis ou é otimizado, mas provavelmente funciona apenas em uma arquitetura.
Escrever C não é mais tão necessário, como era no passado. Se eu escrevesse um aplicativo em C, usaria tanto bibliotecas e estruturas testadas quanto estabelecidas, o que me pouparia na implementação de rotinas de cópia de seqüência de caracteres, algoritmos de classificação e outros tipos de coisas que servem como exercício na universidade. Meu próprio código seria executado mais rapidamente com o custo da segurança do tipo. Não estou interessado em reinventar a roda no curso do desenvolvimento normal de aplicativos, nem em tentar depurar olhando os dumps principais: D
Atualmente, estou experimentando idiomas e intérpretes; portanto, se houver algo que eu gostaria de publicar, suponho que portaria um conceito funcional para C, embora C ++ possa fazer o mesmo.
Mais uma vez, obrigado a todos por suas respostas e informações.