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

[Dúvida] Linguagens de pseudo-baixo nível.

Saudações, seres humanos!

Gostaria de saber a recomendação de cada um de vocês quanto a linguagens de pseudo baixo-nível, sendo que com isso eu quero dizer que são aquelas mais truncadas e consideradas mais difíceis, entretanto, darei o contexto:

Aprendi a programar a cerca de um ano e meio em Python, muito porque eu gostava muito de mexer com Excel e criar ecossistemas complexos, explorei grande parte das coisas básicas e algumas bibliotecas (como Pandas, Numpy, Seaborn, Matplotlib, Tkinter, etc). Entretanto, vendo que a linguagem abstrai muito do que acontece no background, além das oportunidades do mercado estarem ultra-saturadas, decidi aprender Java, tanto pela demanda quanto pelo desafio de ir para uma linguagem um pouco mais verbosa e saber como eu ia lidar. Bom, gostei pra caramba da linguagem, mas ainda sinto que tem bastante lacunas no meu conhecimento, como por exemplo ponteiros, etc, embora eu saiba na teoria o que é, nunca nem utilizei.

Como opções de linguagens pseudo baixo-nível a minha dúvida está entre C, C++ e Rust, sendo que C++ é uma grande vontade por conta de toda a indústria IoT forte, performance, o fato de sistemas operacionais serem feitos nela, etc. Contudo, Rust dizem ser uma dessas linguagens que te dá mais liberdade também, mas de forma um pouco mais jovem, atualizada e descolada. Bem, e C... não me vêm nada em especial que a destaque das outras duas. Ou seja, busco uma linguagem de pseudo baixo-nível que seja tanto visada no mercado quanto que tenha seus atrativos pessoais.

Carregando publicação patrocinada...
2

Desculpe não responder diretamente, mas acho importante frisar uma coisa: não existe uma definição formal, única, canônica e "oficial" sobre os tais "níveis" de linguagens.

Geralmente usam-se os termos "baixo nível" e "alto nível" de maneira informal, mas sempre é algo discutível. Dependendo da fonte, por exemplo, C já foi considerada de baixo, alto e até mesmo médio nível (seja lá o que for isso, as pessoas adoram inventar moda na nossa área).

Sugiro dar uma lida aqui, tem uma pesquisa muito interessante sobre o assunto, e deixa bem claro que definir o que é cada nível é bem mais complicado do que parece. E complica mais ainda quando as pessoas começam a inventar novos níveis.

Enfim, se a ideia é realmente entender o que acontece por debaixo dos panos, então eu diria para estudar C. Mesmo que não vá usar. Afinal, se o objetivo é só entender, ela é excelente pra isso, e de maneira indireta te ajuda a programar melhor nas outras linguagens.

1

Ah, não sabia que ainda era amplamente debatido, pra mim era claro que alto ou baixo nível era de acordo com a abstração que a linguagem propõe, ou seja, o quão simplificado e mastigado é declarar variáveis, fazer um lastro For e While, etc., que são estruturas já prontas.

2

Ainda bem que definiu o termo, porque é algo que ninguém tem conhecimento. Essas linguagens são mais próximas do baixo nível que algumas outras, mas ainda são de alto nível.

Se quer aprender como as coisas funcionam e ter uma noção melhor de como se programa com menos abstrações, que é isso que uma linguagem de alto nível entrega, então a linguagem a escolher é C. Ela é simples, fácil de aprender e expõe tudo o que vai fazer. Junto com um pouco de Assembly, que é baixo nível, pode ter uma noção boa da realidade da programação. C é a verdadeira linguagem universal da computação e está em mais coisas do que imagina.

Se depois sentir que quer um pouco mais de abstração e entender como são feitos os recursos mais poderosos de algumas linguagens pode partir para C++, que é uma linguagem completamente diferente, apesar dela ter uma compatibilidade bem grande com C, e por isso as pessoas acham que uma é continuação da outra, mas isso é um erro, apesar de ser possível.

Rust é uma linguagem difícil de aprender e até de usar (tem alguns pontos mais fáceis), e com conceitos muito diferentes do que as pessoas estão acostumadas. Dependendo do seu objetivo pode ser uma boa, mas não para aprender a base da computação. Eu não a recomendo nem mesmo para quem já tem alguma base, precisa ser muito mais que isso.

Hoje C++ tem mais mercado, e C não está tão longe. Rust está ganhando terreno, mas é mais falada do que usada de fato. C++ é uma das linguagens mais complexas que existem.

A maneira como aprende é mais importante do que aprende.

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Maniero, sempre com as respostas mais bem trabalhadas. Bom, então C++ ainda assim traz uma boa abstração referente ao C, então ela seria o certo. Sobre o exemplo de coisas feitas em C, ainda hoje, conseguiria me dar algum exemplo de alguma área que ela "domina"?

Sobre Rust ser difícil de aprender, wow! A sensação que eu tinha era exatamente o oposto. E sobre a abstração maior, já tive contato. Bom, por que muitas linguagens escolheram C++ ao invés de C para adaptar seus recursos? (Por exemplo Numpy de Python)

2

Todos os sistemas de base principais são feitos em C. Sistemas operacionais mais populares e mais nichados, drivers, servidores diversos, como de banco de dados, HTTP, e outros servios, quase todas as linguagens de script (seus compiladores ou interpretadores ou VMs), em embarcados ainda é mais popular, em bibliotecas que fornecem o mais importante em certos nichos para diversas linguagens, um pouco em jogos, ou qualquer aplicativo que exija bastante eficiência (editor de texto, Git, por exemplo) ou interoperabilidade com qualquer coisa. Você usa o uTorrent que eu sei :P :) Ele é feito em C, dá uma olhada.

Você acha que Rust é fácil de aprender porque muita gente está falando isso. Em geral quem nunca a usou, ou tem pouco conhecimento de programação. A pessoa posta para estar na moda. Até mesmo os maiores fãs da linguagem, que a conhecem bem, que sabem programar bem admitem que ela é mais difícil mesmo. Até fazem a ressalva, que é factível, o que é verdade, claro, mas fazem com mais ênfase nisso, é o viés que "todo mundo" tem, até aceitável, azar de quem não conseguir perceber isso. Dizem que é mais fácil usar depois. Isso é bem subjetivo e relativo. Até é verdade em certo ponto, mas não é uma verdade tão grande. Para explicar isso melhor precisaria de um capítulo de um livro. O que farei uma explicação um dia, em algum lugar.

Python é feito em C. Boa parte das bibliotecas que usam por aí com a linguagem são feitas em C. Algumas são C++ porque o original era C++, ou porque o desenvolvedor tinha mais familiaridade, ou porque realmente atendia melhor naquela situação. Tem que ver caso a caso, pode ter até uma explicação esdrúxula, ou mais convincente do que o normal. Parece que Numpy foi escrita em C.

1

Como eu respondi ao outro rapaz, provavelmente acabei confundindo C++ com C e invertendo os destaque delas. Achava que a maioria dos sistemas operacionais, APIs (de hardwares em geral), etc fossem feitas em C++. Ou seja, C++ é tipo um C com um pouco mais de abstração, mas ainda sem perder o desempenho que outras linguagens perdem ou te dar a possibilidade de fazer tudo na mão, se quiser.

Entrementes, já decidi que quando eu for estudar uma linguagem mais "baixa nível" do que as que eu estou acostumado, será C.

1

por que muitas linguagens escolheram C++ ao invés de C para adaptar seus recursos? (Por exemplo Numpy de Python)

No GitHub podemos ver no código fonte do numpy que somente 1,1% é C++, e C corresponde a mais de 35% (tem também uma boa parte em Python, mas a parte "pesada" que faz o grosso do trabalho por debaixo dos panos é C).


Quanto aos usos atuais de C, temos algumas coisas como o Kernel do Linux (e também do iOS, Android, OSX, Windows, etc), os interpretadores/compiladores de várias linguagens (por exemplo, PHP, Python, etc, e muitas outras tem partes em C ou C++), programas "famosos" como o Git, SQLite e outros bancos de dados (Oracle, MySQL, PostgreSQL, etc) e muito, muito mais.

1
0

E qual área C não "domina"?
Seus drivers, seu kernel linux, seu windows e o kernel dele, seu navegador, seu javascript/Lua/Python...

C++ é um complemento da linguagem C, e o fato dela ser tão mais usada hoje é porque C++ trás muito mais agilidade e flexibilidade, por exemplo com o uso dos ponteiros inteligentes, diminuindo as possibilidades de erro, enquanto C te faz usar a manipulação de ponteiros na mão, e aliás, vejo varios programas usando cabeçalhos .h ao invés do .hpp, '

Se você quer o mais proximo do baixo nivel mas que ainda consiga usar um While() aprenda C! kkk Se o While() não 'for' importante, vai direto no Assembly.

2

Como já pontuaram nas respostas aqui, definir uma linguagem em níveis não é algo intuitivo.

Então, eu acredito que a resposta correta para sua pergunta seria a forma "correta" de aprender como as coisas funcionam "under the hood". Infelizmente, para essa pergunta não tem uma resposta simples, principalmente se teu conhecimento em inglês for limitado. De toda forma, quando eu me perguntei a mesma coisa, eu encontrei as respostas em conteúdos acadêmicos, como os seguintes livros:

  1. Computers Systems: A programmer's perspective
  2. Structure and Interpretation of Computer Programs

Caso a parte teórica não seja tua praia, tu pode referenciar esse repositório e ter um contato direto com a implementação do código.

Bom, eu falei tudo isso porque para mim, o importante não é, necessariamente, aprender uma linguagem que vai te dar liberdade pra alocar memória ou mexer com ponteiros, mas sim aprender como as coisas funcionam "de verdade":

  1. O que é, tecnicamente falando, um ponteiro?
  2. Como C, Rust ou outras linguagem implementam ponteiros e por que algumas não possuem?
  3. Como arrays funcionam?
  4. O que são bits, bytes e seguintes?
  5. Como inteiros, char (e por que não strings) e outros tipos primitivos são representados no nível processador?

Quando tu souber responder essas perguntas, níveis de linguagens não vão mais importar, e sim o quanto elas pagam.

Só uma nota: se tu faz faculdade, vale a pena dar uma fuçada na biblioteca dela, sempre tem um material ótimo (e provavelmente em português).

1

Vamos lá para o meu entendimento sobre estes assuntos:

  1. Ponteiros são como indicadores para endereço de memória, é como se fosse um "CEP" de referência para indicar ao processador aonde está a informação que deve ser processada, independente do seu tamanho.
  2. A forma como o C ou Rust usam ponteiros é mais manual, entretanto, isso não significa que as outras linguagens não possuem. Por exemplo, toda linguagem lida com vetores (arrays) e vetores são automaticamente uma forma de lidar com ponteiros. O que muda de uma linguagem para outra é que isso está numa camada de abstração tão alta que é quase imperceptível.
  3. Arrays são basicamente uma série de valores que possuem um índice ou chave que servem como ponteiro para eles. São extremamente mais intuitivos ao modo humano de lidar com linguagens por encapsular uma série de valores referentes ao mesmo contexto.
  4. Bits, bytes, são as unidades de medida na computação, tanto de velocidade quanto de espaço utilizado no armazenamento.
  5. Através de números binários, sendo a ausência ou a existência de "tics" elétricos a nível de hardware para sinalizar 1 ou 0. Se não me engano, os char seguem a tabela ASCII e Strings o modelo Unicode.

Se estas minhas concepções estão certas ou não é outros quinhentos. E não, não faço faculdade, cheguei a começar duas já, uma delas na área de programação, mas tranquei, entretanto, fiz prova da Fatec fim de semana passado e estou esperando os resultados (sem expectativas, já que não estudei).

Por fim, obrigado por tudo, inclusive os questionamentos que me ajudaram a refletir e nivelar meu conhecimento. Destas, tive que pesquisar apenas a 2, pois queria saber se alguma linguagem não tinha ponteiros e como era possível isso já que conflitava com a minha perspectiva.

1

De todas que vc citou, pela importância no mercado, eu iria de C/C++. Essas duas linguagens são incríveis, com vasto material disponível e umas das linguagens mais importântes da história.
Rust é massa, mas é recente, se você quer aprender os conceitos e tudo mais C/C++ é a sua pegada.

1
1

Vou separar a resposta em partes:

  • Você já está empregando e recebendo seu dinheiro com trabalho em TI? (supondo que esse seja seu interesse)
    • Sim: Acho que pode investir em linguagens mais nichadas como Rust ou não tão nichadas com Go. Ambas tem um mercado de trabalho aquecido e carecem de profissionais.
    • Nao: Continue com python até conseguir um trampo na área que pague suas contas. Depois vc foca em alternativas que te levem mais perto do que gosta e menos do que faz dinheiro.
1

É que o mercado de Python está beeem competitivo, porque todo mundo que aprende, aprende com Python. Entretanto, é um tapa na cara para eu ficar pulando de linguagem e linguagem e me especializar em alguma e aprender seus respectivos framework (Springboot pra Java e Django pra Python) que mais empregam.

Vou levar seu conselho como ato, mas sem descartar a resposta dos outros. Porque o mais importante é entrar no mercado de TI de vez.

1

Vc já considerou trabalhar com freelancing?
Os gráficos nesse post te dão uma luz de outros caminhos nos quais pode seguir.

Freelancing uma forma muito boa de adquirir experiência e fazer uma grana ao mesmo tempo e te garanto que python tem espaço; talvez vc precise rodar o projeto para saber exatamente quanto espaço. No hype de IA tenho certeza de que vc pode conseguir um freela para integrar qualquer coisa com o Gepeto (ChatGPT).

0