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

C ou Rust para estudar conceitos de ciênca da omputação?

Boa noite pessoal! Tem uns poucos meses que comecei a estudar ciência da computação. Até o momento, eu toquei em Python para estrutura de dados(introdução), TypeScript para aplicação de alguns algoritmos por escolha minha, apenas porque eu me sinto mais confortável.

Já toquei em Rust para entender mais sobre owernership, um conceito único de Rust. Foi simplesmente curiosidade por tempo livre e no processo aprendi bastante coisa.

Estou começando a ver uns tópicos menos superficiais, como implementar uma função de hash, e etc... Além disso minha curiosidade cresceu sobre como um software lida com memória.

Para estudar todo o material que está por vir, estou considerando C, Rust e C++, que são muito bem falados pela a comunidade quando o assunto é entender sem superficialidades.

O fato de eu simplesmente não ter escolhido Rust logo de cara, foi por notar que C e C++ tem muito mais material, e poderia acabar perdendo algo ou passando mais tempo para estudar algo simples. Mas também não tenho certeza s e é só impressão minha ou não.

O que vocês acham? Meu intuito é apenas aprender, não pretendo trabalhar com essas linguagens, ao menos até o momento, pois estou inserido num ambiente web, e quero seguir carreira nesse nicho.

Carregando publicação patrocinada...
5

Ah, essa parte me pegou: "Já toquei em Rust para entender mais sobre owernership, um conceito único de Rust."

Com todo o respeito, jovem, isso é quase uma piada.

Você vai aprender de verdade o que é ownership, tempo de vida de variável e gerenciamento de memória quando estiver lutando contra um segmentation fault em C, sem a menor ideia de qual ponteiro inválido causou o problema.

Ownership não é um conceito que você "entende" porque uma linguagem te contou sobre ele; é uma disciplina que você aprende praticando.

Você está colocando o carro na frente dos bois. O compilador de Rust te dá bronca e te impede de fazer besteira. O compilador de C te dá os parabéns e deixa seu programa explodir na sua cara. A segunda opção ensina muito mais.

Na verdade, para aprender Ciência da Computação na essência, a resposta nem é C. É Assembly. E sabe por que o C é a porta de entrada perfeita? Porque a tradução de C para Assembly é praticamente direta. Você escreve um *ptr = ++val; e consegue, com pouco de esforço rastrear exatamente quais instruções aquilo gerou.

Agora, tenta fazer isso com as abstrações de alto nível, macros e a "mágica" do compilador de Rust ou do C++ moderno. É quase impossível em muitos casos.

Se seu objetivo é realmente entender o computador sem superficialidades, o caminho é C. Ele te força a ser o "borrow checker". Ele te força a pensar em cada byte.

Um abraço e bons estudos!

2

Talvez eu tenha sido muito inocente mesmo. Bom, ainda tenho muito para explorar, e ownership é um deles. De fato não me aprofundei muito. É algo que se entende verdadeiramente praticando e praticando e praticando.

Gosto muito dos seus comentários. Foi um deles que me motivou a estudar mais sobre SQL e parar de usar ORMs como uma dependência para tudo.

Sobre C, já deixei prontinho o meu ambiente. Agora estou começando a ler um livro chamado: Computer Systems A Programmer's Perspective, Global Edition para me aprofundar em conceitos usando C.

1
0
3

Rapaz, eu gostei bastante de ter aprendido conceitos básicos em ciência da computação utilizando C, foi uma das aulas que eu mais gostava de ter, porque a gente não tinha tantas bibliotecas já feitas como em Python que trás tudo prontinho pra gente, a gente ia fazendo tudo do zero funcionar e ficava bem legal kkkkk

ps: não tenho ideia do que seja Ownership (o_O)

2

Cara, se você quiser aprender de verdade sobre Ciência da Computação, não vai ser uma linguagem de programação que vai te ensinar. Dennis Ritchie não aprendeu Ciência da Computação programando em C... Como poderia? Foi ele quem fez a linguagem.

Tem uma coisa que a maioria gosta de repetir e desconfie muito de quem diz isso, que é aquele papo furado de que pra ser programador de verdade você tem que aprender C — ou variantes semelhantes.

Essa crença morre já pelo fato de que muita galera foda de CC surgiu antes da linguagem. Na verdade, as pessoas mais fodas de CC surgiram antes de C existir, como: Alan Turing, Babbage, Dijkstra e Von Neumann.

Sabe o que essas pessoas têm em comum? Não, eles não programavam em C, Rust nem assembly. Eram todos matemáticos.

Eu não vou discorrer mais sobre o assunto pelo motivo mais banal possível: Preguiça. Mas creio que você consiga deduzir onde eu quero chegar.

TL;DR

O fato é que se você quer aprender CC "pra valer", você não vai aprender isso programando em linguagem nenhuma (nem mesmo em assembly).

1

A ideia é usar C como minha ferramenta para aprender ciência da computação. Eu tenho em mente que matemática é a chave para realmente entender as coisas. E eu concordo com você, não é uma linguagem que te ensina nada. São ferramentas.

Isso me lembra que houve uma mulher que era considerada uma das maiores cientistas de computadores quando nem havia computadores... infelizmente esqueci o nome dessa lenda.

2

Depende muito do teu objetivo, se você for estudar especificamente estrutura de dados eu acredito que C/C++ é melhor.
Agora se for estudar algoritmos, requisições usando tcp ou upb, tratamento de arquivos e etc, Rust é uma boa pedida.

Minha opinião é se você está começando a aprender eu recomendo usar c/c++ eu adoro Rust mas, ele ainda é uma boa segunda linguagem para aprender, caso saiba C++ e Rust pensando em mercado é um bom combo. Porém se teu objetivo no momento não é aprender pra buscar uma vaga no mercado de trabalho Rust pode encaixar se você gostar mais.

No final eu diria que se se você quer aprender todos esses tópicos em smalltalk, pearl, algol, simula67 ou 4gl n