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

Aprendendo linguagem de baixo nível.

Sou técnico em informática e atualmente curso Ciência da Computação. Semana passada começou meu período de férias, o qual vai durar pouco mais de um mês. Nesse tempo decidi que queria aprender uma linguagem de baixo nível; por fim acabei escolhendo C. Como já possuo um conhecimento razoável em lógica, não tive muitas dificuldades nesse início, com a documentação e um aulão no youtube consegui ter um entendimento legal do básico. Agora que entra o problema que estou enfrentando, queria começar um projeto um pouco mais complexo (algo que não ficasse limitado somente a uma entrada e saída no terminal) para tentar aplicar os conhecimentos e aprender coisas novas, porém estou com dificuldades para encontrar um conteúdo que seja um pouco mais intermediário, mas que também não seja muito avançado para eu compreender. Queria a ajuda de vocês com indicações de vídeos e livros que possam me ajudar.

Carregando publicação patrocinada...
3

Mas você escolheu linguagem de baixo nível ou C?

Qual seu objetivo? Aprendeu C para trabalhar com isso? Só assim para precisar fazer algo mais complexo.

O que você chama de intermediário em C? Porque C é uma das linguagens mais básicas que existe, ela não tem nada muito sofisticado, você constrói o sofisticado. Por isso que eu recomendo C para aprender a programar (quase sempre não para trabalhar). Obviamente que tem algumas coisas, mas não para fazer algo muito complexo, mas para atingir certos objetivos.

Em certo momento você começa a depender só da documentação e gente que fala com mais detalhes sobre pontos específicos. Você começa aprender um detalhe e sai pesquisando sobre isso em específico.

Geralmente quando a pessoa começa avançar em C ela começa se virar bem. C exige muito do programador quando começa usar de verdade. Por isso é boa para aprender, mas não para trabalhar (a não ser que dependa dela para o trabalho real). Ao contrário da maioria das outras linguagens, em C praticamente não tem programador seguidor de receita de bolo. Quando a pessoa começa ficar boa nela já se vira com qualquer coisa, que é o que eu chamo de "programador de verdade" (e alguns ficam bravos, mas precisa de um termo para diferenciar uma coisa da outra e as pessoas entendem melhor que falar engenheiro de software). Quem passa ter dificuldade em geral abandona.

Ainda tem um problema da gente saber o que não vai conseguir entender. Porque eu imagino que procurou por "C advanced" e achou coisas muito difíceis. Eu procurei e nem achei tão avançado assim. Alguns inclusive não estavam nem falando de C mais, apenas usando a linguagem para mostrar outras questões de desenvolvimento de software.

Em alguns casos você deve começar estudar as bibliotecas menos usadas e que pode ser o que chama de intermediário. Já viu isto? https://en.cppreference.com/w/c. É obrigatório. Já pesquisou no Stack Overflow? Seguiu algumas coisas da Wikipedia que fazem sentido para seu objetivo? Hoje é muito fácil achar o que estudar. Fez tudo isso e ainda não conseguiu achar links bons ou termos para pesquisar mais?

Uma coisa que eu falo muito é que se você não sabe qual é o próximo passo você ainda não aprendeu bem o anterior.

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

2

Sim, consegui entender o seu ponto. Agora vi que precisava de uma "pancada" dessas para seguir em frente.

C ser uma linguagem de baixo nível foi uma má interpretação minha do livro "The C Programming Language", onde o autor diz "C is a relatively "low-level" language(...)". Já o meu objetivo com C era enteder um pouco mais de como as coisas funcionam "por trás dos panos", já que é uma linguagem que é utilizada no desenvolvimento de sistemas operacionas, SGBDs, etc.

Agora vou procurar algumas bibliotecas e pesquisar mais a linguagem no Stack Overflow. Além disso visitei suas redes sociais, principalmente o Github e vi que você tem um grande currículo, obrigado por tirar um pouco de seu tempo para me ajudar.

2

Complementando: não existe uma definição oficial, canônica, única e livre de controvérsias sobre o que são os tais níveis de linguagens.

Muitas vezes as pessoas usam esses termos ("alto nível", "baixo nível", etc) de maneira leviana, ou então para simplificar alguma explicação. Mas não tome isso como algo definitivo, quanto mais vc pesquisa sobre o assunto, mais descobre que o buraco é mais embaixo.

Sugiro que leia aqui para entender melhor.

1

Até hoje não vejo muito bem C como uma linguagem de baixo nivel, é claro que ela permite que você manipule elementos na memoria, mas ainda vejo C como uma linguagem de praticamente alto nivel, em relação a linguagem de baixo nivel, tenho estudado um pouco de assembly com foco em circuitos RISC-V, achei alguns materiais legais na Unicamp e no Youtube, está me ajudando bastante a entender o real baixo nivel.

https://www.youtube.com/playlist?list=PLEUHFTHcrJmswfeq7QEHskgkT6HER3gK6

https://www.youtube.com/playlist?list=PLBw9d_OueVJRZ34oo1HB6q55rAIjuP6Ib

1

Algumas sugestões de recursos que podem te ajudar:

Vídeos:

"C Programming Tutorial" do canal do Derek Banas: Esse tutorial abrange vários aspectos da linguagem C e mostra exemplos práticos de como aplicar esses conceitos em projetos.

Livros:

"C Programming Absolute Beginner's Guide" de Greg Perry e Dean Miller: Esse livro é voltado para iniciantes e apresenta conceitos fundamentais de programação em C de forma clara e prática.

"The C Programming Language" de Brian W. Kernighan e Dennis M. Ritchie: Este livro é um clássico e é amplamente considerado como uma referência indispensável para quem quer aprender C. Ele explora a linguagem de maneira detalhada e oferece exemplos de código úteis.

Espero ter ajudado.

1

Um pouco fora do que você pediu, mas tente fazer alguma coisa utilizando ponteiros e multi threading. Se estiver usando Linux procure por pthreads, com certeza vc terá que passar dados via ponteiros ou usar function pointers.

Acho que isso pode te ajudar.

Abs.

1
1

Se quer mexer com baixo nível e aprender uma coisa diferente devia dar uma olhada em Rust.
Só de pegar os conceitos base da linguagem ja vai ter aprendido muita coisa.

Eu segui a playlist do canal let's get rusty, quando tava pegando o básico, ele aborda o The book em um formato audiovisual.

1

Sou formado em Engenharia da Computação e trabalho mais de 4 anos com desenvolvimento embarcado, geralmente em C ou C++, então vou dar meu pitaco nessa área.

C, como já disseram, é considerada a melhor linguagem para se aprender a programar. A maior diferença entre C e as outras, é que com C você precisa entender como funciona a memória do seu dispositivo, seja um computador com 16 GB de ram, ou um PIC com meros 8 KB. Linguagens de "alto" nível você sai alocando variáveis, objetos, recursos e não se importa com o tanto de ram necessária pra rodar, chegando até a gastar mais ram em prol da legibilidade do código (criando diversas variaveis com nomes diferentes só pra entender o que está acontecendo ao invés de reutilizar variável), coisa que em sistemas embarcados tudo é feito em prol da performance.

Eu não sei até onde vai o seu interesse e a profundidae em querer entender como realmente funcionam as coisas, mas não tem como você entender nada profundamente sem ao mesmo aprender Arquitetura de Computadores, essencial quando se programa em C.

Se você gosta de dispositivos, um pouco de eletrônica, e tem vontade de criar um projetinho maker seu, sugiro aproveitar o embalo do C e brincar um pouco com ESP32, um microcontrolador super barato com Bluetooth, Wi-Fi, acesso à Alexa, podendo automatizar qualquer coisa em sua casa. Você vai aprender C (ou C++), um pouco de hardware, alocação de memória, ponteiros, tarefas concorrentes (famoso threads, aliás, sistemas embarcados usam muito o FreeRTOS), e no fim, ainda vai ter um projeto físico seu funcionando.

Agora, se você não quer saber de hardware nem nada e pretende focar apenas em dispositivos desktop (raspberry é desktop), se atraca num linux da vida.

Boa sorte nos estudos e nunca desista.

1

O que você falou sobre ser a melhor linguagem para aprender programar também serve se a pessoa substituir por C++, ou o que disse está relacionado somente com C? Eu gosto do ambiente linux, customizar e automatizar pequenas coisas do SO e futuramente quero começar aprender mais sobre o kernel, mas estou na dúvida ferrenha se concentro em C ou C++ já que ambas podem me oferecer o que eu quero, e também quero ser um bom desenvolvedor.

1

Tudo o que você faz com C, faz também com C++. É a mesma sintaxe, mesma biblioteca, mesmo compilador. Mas o inverso não é verdadeiro. C não tem classe, como tem no C++.

Problema ao meu ver de você usar C++ é o nível de abstração que você pode ter com ele em relação ao C e você vai acabar caindo na facilidade do C++, nunca tendo que passar os perrengues super necessários ao trabalhar com C (não que não vá passar outros perrengues em C++).

Kernel até onde sei é tudo feito em C. Posso estar enganado.

Sugiro aprender a base do C e depois ir pra C++, até porque aprendendo C você automaticamente vai estar aprendendo a base do C++. Não será perda de tempo.

1

Oi, obrigado pela contribuição.

Tive o básico de Arquitetura de Computadores no curso de técnico em informática e sei que terei a matéria um pouco mais aprofundada na faculdade futuramente, então deixarei essa parte para o futuro. Agora a questão do ESP32 por coincidência eu adquiri um recentemente com o intuito de aprender eletrônica, só estou esperando chegar da china para "brincar" com ele.