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.
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).
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
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.
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.
Existe sites onde você pode exercitar o que você aprendeu e ter alguns projetos com vários problemas de programação e até competições. Sites abaixo:
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.
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.