Executando verificação de segurança...
12

Aprendendo minha terceira linguagem: Rust

Foto de Código - Rust com Neon

Este não é um post técnico, é apenas um post do estilo 'Blog Pessoal' onde compartilho um pouco da minha jornada aprendendo uma nova linguagem.

Estou estudando sozinho uma nova linguagem (Rust) há cerca de um ano, apenas com ajuda de livros e com perguntas pontuais em grupos da comunidade brasileira.

Neste período de um ano, somente nas horas extras pois meu trabalho é com tecnologias diferentes, pude fazer alguns testes de coisas comuns como CRUD com alguns frameworks, manipulação de dados, etc. Tudo muito legal e divertido como eu esperava, mas um pouco mais complexo do que o previsto.

Quando comecei a trabalhar com NodeJS, eu já tinha uma certa proficiência com JavaScript e alguns anos de experiência com PHP. Então a curva foi de certa forma bem simples, os conceitos de backend já eram claros para mim, assim como a manipulação da linguagem em sí. Foi muito divertido também e a sensação de complexidade foi muito menor.

Linguagens que mantém padrões similares aos que a gente conhece vão ser sempre mais fáceis de aprender. Em um curso que fiz de estrutura de dados que usou Python, não tive muita dificuldade em compreender o básico da linguagem, a sintaxe é limpa e simples (muito bonito inclusive).

Linguagens que resolvem problemas extremamente diferentes e/ou com paradigmas diferentes tornam o desafio muito maior.

No meu caso de exemplo, eu nunca havia programado de forma séria em uma linguagem com tipos fortes, tão pouco de baixo nível. E isso torna o processo bem mais custoso em termos de absorção. Coisas que antes nunca foram uma preocupação, passam a ser. Em contra partida você terá benefícios que nem imaginava, ao meu ver faz um balanceamento legal para o aprendizado.

Algo extremamente fantástico que tenho tido o prazer de brincar e vejo com muito bons olhos, é a possibilidade de construir módulos nativos para aplicações NodeJs e também bibliotecas wasm que podem ser utilizadas até pelo frontend com uma performance surreal.

Em um dos meus projetos de teste, tenho utilizado o Neon para construir um pacote que será utilizado em aplicações NodeJs, veja uma prévia:

Foto de Código - Rust com Neon

Foto de Código - Rust com Neon

Foto de Código - Rust com Neon

Este projeto é um tanto diferentes pois além dele pode ser 'instalado' em um backend NodeJs ele ainda sobe um próprio servidor web em uma thread separada (coisa que ainda estou tentanto entender melhor). Parece um back-door mas estou colocando em prática uma velha ideia para construção de aplicações P2P.

Neste outro exemplo, você pode ver um pouco do que brinquei com wasm:

Foto de Código - WASM para Frontend

Isso parece tão simples mas tem um poder impressionante. As aplicações de frontend estão cada vez mais pesadas e poderosas, acredito que com o progresso do wasm muito do que ainda resta 'instalável' poderá cada vez mais ter versões web. Há um tempo atrás eu até diria o mesmo para jogos, mas considero que o futuro dos games seja totalmente stream, isso é papo para outro post.

Quero pontuar aqui alguns insights sobre meu processo de aprendizagem que talvez ajude você em algum momento.

Lembrando que não estou aprendendo linguagens para falar que sei várias. Meu objetivo é conhecer paradigmas diferentes do que eu já tenho experiência e ter mais poder para resolver problemas mais complexos e delicados no futuro.

1. Ler um livro não te fará saber o suficiente.

Eu nunca tinha lido nenhum livro de linguagem de programação, mesmo com anos de experiência e com o privilégio de trabalhar em vários projetos. Eu já estou no segundo livro de Rust e, definitivamente, sei muito menos de Rust do que sei de JavaScript e PHP.

2. Sozinho o processo é mais lento.

Eu aprendo muitas coisas sozinho, coisas pontuais necessárias (ou apenas curiosidades mesmo) e realmente funciona, muito do que sei aprendi sozinho. Algumas coisas sei até em certa profundidade mas fiz tudo no meu tempo. Mas não posso negar, trabalhando em equipe com PHP e NodeJs o aprendizado é muito mais rápido, a equipe cresce muito rápido quando todos estudam e gostam do que fazem, um puxa (ou empurra?) o outro e a evolução é muito rápida. Não estou dizendo de cursos em turma, estou dizendo do ambiente de trabalho mesmo, o dia-a-dia produtivo.

3. É frustrante

Há coisas que eu faço/entendo muito rápido com minhas linguagens. Agora com o Rust... Coisas simples quando você não sabe, podem parecer impossíveis! O segredo é ver como uma brincadeira mesmo e persistir, com o tempo (e MUITO estudo) tudo fará sentido.

4. É fascinante

Eu não escolhi Rust com 'mamãe-mandou'. Eu analisei minhas habilidades e ambições, mirei para o futuro e decidi Rust. Também tive dúvidas sobre Go Lang, mas me identifiquei muito com Rust. Obviamente já embarquei nesta aventura de forma a ser impressionado com facilidade, mas acabei me impressionando ainda mais com o poder de tudo isso.
Definitivamente eu nunca encontrei muito limite do que eu poderia fazer com as linguagens que já sei, agora aprendendo Rust eu percebo que os limites que existem (sim, eu os vejo agora) podem ser rompidos com este novo conhecimento.

5. Nunca pense que já sabe o suficiente

Mesmo resolvendo tudo que preciso com o conhecimento que já tenho, nunca achei que soubesse muito e penso ainda mais assim agora. Eu tenho consciência que sei o suficiente para resolver muitas coisas mas ainda estou muito longe do meu desejo pessoal para poder considerar que sei muito.
Nota: Eu considerar que sei pouco, não significa que eu não saiba o suficiente para exercer muito bem meu trabalho, estou falando de um sentimento pessoal de querer sempre evoluir.

6. Planeje seu objetivo e não pare até alcança-lo

Isso não tem haver com programação mas é algo que eu levo pra vida e conecto com tudo que posso. Esteja fácil ou difícil, se é seu objetivo, persista!


Vou ficando por aqui hoje, se quiser ver um pouco dos meus projetos pessoais e acompanhar essas brincadeiras com Rust, veja meu github: https://github.com/sr2ds

Em especial este repositório com um resumo em minhas palavras de todo um livro que estudei:
https://github.com/sr2ds/learning-rust

Gostou deste formato de artigo? Deixa seu comentário!

E aí, qual linguagem você esta aprendendo agora e por quê?

A capa deste artigo é do LukasKalbertodt: https://github.com/LukasKalbertodt/programmieren-in-rust/blob/master/slides/20-Rust-Community-Open-Source.pdf

Carregando publicação patrocinada...
5

Curti demais o formato do post David! É como se fosse um refresco em meio ao deserto de informações técnicas hahaha (não que sejam ruins)

Também tive dúvidas sobre Go Lang, mas me identifiquei muito com Rust

O que te fez escolher uma em detrimento de outra? Passei por essa seleção recentemente... e escolhi Python para estudar (já respondendo sua pergunta), pois era uma das linguagens mais recomendadas pela internet em geral para quem está começando. Porém, mesmo seguindo a recomendação pública, não consegui identificar um parâmetro mais pessoal de escolher uma outra linguagem, e fiquei curioso quando disse isso.

print('Abraço!')

3

Fala Lucas! Obrigado pelo comentário!
Cara, parabéns pela escolha do Python, também é lindo e poderoso.

Boa pergunta essa sua, eu acho que o que pesou mais na minha decisão do Rust não foi nem a lingaguem em sí contra o Go, mas no que eu tenho fé em relação ao mercado a longo prazo. Eu acredito que haverá muita muita muita mais ainda demanda de Blockchain em breve (já tem bastante), e eu ví mais coisas com Rust do que com Go. Inclusive, há um ecossistema inteiro que é da Polkadot que permite a criação de blockchains e smart contracts escritos em Rust.

Então para simplificar, eu tive desejo de aprender algo que parecia mais poderoso que meu PHP/Node mas que também me incluísse a longo prazo em um mercado que está crescendo. Nas minhas pesquisas, encontrei muito sobre Solidity, mas não quis a limitação de apenas escrever os contratos. Então caí na Polkadot com o Rust.
Acho que foi essa minha linha de raciocínio, não tenho certeza se respondi de forma clara, então fique a vontade para questionar novamente.

Outro ponto também, eu tenho um grande fetiche por Linux e OpenSource. Eu comecei minha vida na tela preta do shell praticamente, então quando eu ví o poder do Rust e alguns debates sobre algumas probabilidades de uma integração entre Rust e o Kernel do Linux, me bateu aquela nostagia do inicio da minha carreira e, seja verdade ou não, senti que um dia poderei contribuir para algo da comunidade Linux.

Acho que é isso!

Grande abraço

1
2
2
2

Que conteúdo sensacional srdavidsilva!

eu nunca havia programado de forma séria em uma linguagem com tipos fortes, tão pouco de baixo nível.

Meu sonho era aprender C de forma profunda, mas acho que vou acabar trocando por Rust por conta disso que você escreveu:

wasm que podem ser utilizadas até pelo frontend com uma performance surreal.

Eu acredito muito no potencial do wasm... coisa de realmente transformar o navegador num segundo sistema operacional.

Não que eu vou descartar aprender C, mas acho que depois do Rust, o C vai ficar como hobby 😂

E muito obrigado por vir postar esse artigo aqui e não deixe de trazer as novidades sobre os testes que vem fazendo com a linguagem. Algo que quero reimplementar em Rust/wasm é o Fogo do Doom 🤝

3

Obrigado pelo comentário, Mestre.

É tanta coisa top né, eu tbm se tivesse tempo suficiente, viveria academicamente aprendendo e praticando linguagens hahaha

Como li em algum livro do Cortella algo assim (em minhas palavras): "Escolha bem seu trabalho, pois não é você que faz seu trabalho, mas é o seu trabalho lhe faz".

Isso me faz pensar o quanto somos privilegiados e, tendo consciência disso, podemos tomar decisões que, dia-a-dia, vão nos levando mais além!

1

Não sabia que dava para dar um misturada entre node e Rust, achei muito interessante essa maneira. Acredito que ajuda bastante no aprendizado dar uma mesclada com as linguagens que ja sabemos e a que estamos aprendendo.