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

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
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

2

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.

1
1

Meus 2 cents,

Apesar de concordar que matematica eh um ramo importante na formacao para um DEV, existem diversos exemplos bem sucedidos na area de Computacao/TI de pessoas que tem graduacao em outras areas (segue a lista no final).

Meu ponto eh: o que todos tem em comum eh uma curiosidade infernal e uma dedicacao visceral em aprender - isso nao pode faltar, voce tem de ser auto-motivado, se depender de estimulos externos para se dedicar a algo, fudeu.


Estrangeiros

Richard Stallman – Física – Harvard University
Criador do movimento GNU e ativista do software livre.

Linus Torvalds – Ciência da Computação – University of Helsinki
Criador do kernel do Linux.

Bjarne Stroustrup – Ciência da Computação – University of Aarhus, PhD em Cambridge
Criador da linguagem C++.

James Gosling – Ciência da Computação – University of Calgary, PhD em Carnegie Mellon
Criador da linguagem Java.

Yukihiro Matsumoto (Matz) – Ciência da Computação – University of Tsukuba
Criador da linguagem Ruby.

Anders Hejlsberg – Engenharia Elétrica (incompleta) – Denmark Technical University
Criador do Turbo Pascal, Delphi e C#.

Tim Berners-Lee – Física – University of Oxford
Criador da World Wide Web.

Mark Zuckerberg – Ciência da Computação e Psicologia (não concluiu) – Harvard University
Co-fundador do Facebook.

Bill Gates – Ciência da Computação (não concluiu) – Harvard University
Co-fundador da Microsoft.

Paul Allen – Ciência da Computação (abandonou) – Washington State University
Co-fundador da Microsoft.

Steve Wozniak – Engenharia Elétrica e Ciência da Computação – University of California, Berkeley
Co-fundador da Apple.

Steve Jobs – Filosofia (não concluiu) – Reed College
Co-fundador da Apple.

John Carmack – Engenharia (não concluiu) – University of Missouri–Kansas City
Criador de Doom e Quake, pioneiro em engines 3D.

Rasmus Lerdorf – Engenharia de Sistemas – University of Waterloo
Criador da linguagem PHP.

Larry Wall – Ciência da Computação e Linguística – Seattle Pacific University
Criador da linguagem Perl.

Niklaus Wirth – Engenharia Elétrica – ETH Zurich, PhD em UC Berkeley
Criador de Pascal, Modula e Oberon.

Martin Fowler – Ciência da Computação – University of Sheffield
Autor e especialista em arquitetura de software e design ágil.

Grady Booch – Engenharia Elétrica – Air Force Academy, mestrado na University of California
Criador da UML e pioneiro em engenharia de software orientada a objetos.

Kent Beck – Ciência da Computação – University of Oregon
Criador do Extreme Programming (XP), influente na metodologia ágil.

Jeff Dean – Ciência da Computação – University of Minnesota, PhD em University of Washington
Engenheiro sênior do Google, co-criador do MapReduce, TensorFlow.

Rob Pike – Engenharia de Software – University of Toronto
Co-criador da linguagem Go, participou do UNIX.

Robert Griesemer – Ciência da Computação – ETH Zurich
Co-criador da linguagem Go.

Chris Lattner – Ciência da Computação – University of Portland, PhD em University of Illinois
Criador do LLVM e da linguagem Swift.

Douglas Crockford – Rádio e Televisão (B.A.) – San Francisco State University
Popularizador do JSON e autor do JavaScript: The Good Parts.


Brasileiros

Augusto Galego Ciência da Computação – não confirmado publicamente

Renato Augusto Análise e Desenvolvimento de Sistemas

Filipe Deschamps Engenharia de Computação – não finalizou;

Alexandre Oliva (cabelo) Ciência da Computação – UNICAMP Membro da FSF, mantenedor do GNU Linux-libre

Fábio Akita Administração – FGV Divulgador Ruby on Rails, criador do canal "Akitando"

Carlos Morimoto Ciência da Computação – UFPR Criador do Kurumin Linux, autor de livros sobre Linux

Gustavo Niemeyer Ciência da Computação – UNESP Desenvolvedor do Ubuntu, criador do Snap e Juju

Henrique Bastos Engenharia da Computação – UERJ Instrutor Python, criador do curso Python Pro

Paulo Silveira Ciência da Computação – USP Fundador da Alura e da Caelum

Felipe Daragon Ciência da Computação – UFU Criador do OSSEC (ferramenta de segurança open-source)

Marcelo Tosatti Física (não completou) – USP Mantenedor do kernel Linux para KVM

Bruno Souza (JavaMan) Ciência da Computação – PUC-SP Evangelista Java, fundador do SouJava

-2

Apesar de concordar que matematica eh um ramo importante na formacao para um DEV, existem diversos exemplos bem sucedidos na area de Computacao/TI de pessoas que tem graduacao em outras areas (segue a lista no final).

  1. O ponto não é se graduar em matemática. O ponto é que Ciência da Computação é matemática.
  2. Aprender a programar e aprender CC não é a mesma coisa. Que também é muito diferente de aprender engenharia de software. Que também é muito diferente de aprender a se vender e crescer na área. Que também é muito diferente de aprender a empreender.

Você falou como se ter sucesso na área fosse um indicativo de que a pessoa aprendeu CC, isso não faz sentido. 99% da galera que trabalha com TI (e que tiveram sucesso) não manjam de CC.