Talvez você deveria dar uma chance ao baixo nível

Um passo para trás para dar dois para frente :footprints:

As linguagens de alto nível são chamadas assim pelo seu alto nível de abstração, lógico que o mundo “deve caminhar pra frente”, mas quem sabe ficar somente nelas pode impedir você evoluir como programador inclusive na sua linguagem favorita.

Falando em relação a mim, eu comecei a programação com Java e logo depois aprendi o framework SpringBoot para trabalhar com backend web, mas chegou um momento que eu cansei de fazer CRUD e queria fazer algo mais divertido, já que eu não consegui emprego na área de programação(me contratem, sou formado em ADS) comecei a criar meus próprios Driver’s em C, aquele sentimento de ser desafiado a aprender algo voltou com intensidade, e quando pego o Java ou então o Kotlin, eu sinto uma fluidez bem melhor ao “codar”.

Você não precisa ser um mecânico para dirigir um carro, mas saber um pouco de como ele foi construído lhe dará vantagens ao manusear e sair passeando por aí. Não obstante, a sua linguagem favorita de alto nível provavelmente foi construída em cima de outra com menos abstrações(basicamente só assembly que é baixo nível, mas existe um debate sobre a “altura” das linguagens).

Gostaria de lhe propor a aprender um pouco mais como as coisas funcionam por “baixo do capô”, não precisa se tornar um expert, mas entender o aquilo que vem de mais baixo te auxiliará a performar melhor na sua linguagem de alto nível.

Ideias para aprender uma linguagem com menos abstrações💡

  • Adquirir um Arduíno ou Esp32
  • São peças de baixo custo e você utilizará majoritariamente C.
  • Refazer lógica da programação e estrutura de dados em Rust ou C
  • Isso lhe dará uma ótima visão de como as coisas realmente funcionam e você terá uma visão diferente quando voltar para sua linguagem favorita.
  • Consumir conteúdos sobre o assunto
  • Mesmo que você não queira aprender C, ou seja lá o que seja, você pode consumir conteúdos sobre o assunto que lhe dará bastantes insights.
  • 3 curtidas

    taí uma dúvida que o senhor vai tirar pra mim. se o primeiro compilador foi feito em assembly, que não precisava de compilador, porque não continuaram com ele, em vez de usar compilador? não entendo nada de programação e, por isso, é difícil compreender essa aparente complicação que criaram.

    1 curtida

    Falta de eficiência e produtividade.

    Normalmente a gente tenta entender a história do reverso. Se tal linguaguem foi compilada em outra, quem compilou essa tal linguagem?

    Se a gente ver a história de frente para trás fica mais fácil.

    No começo a gente tinha binário, dá pra programar direto em binário, mas a falta de produtividade, facilidade, e debug é muito complicado.

    É mais eficiente e gasta menos ram, mas não é fácil humanamente falando.

    Lançaram o assembly pra facilitar mais um pouco a vida, já era um pouco menos difícil. Mas a tecnologia foi evoluindo e esse primeiro compilador não era tão eficiente, foram criando outros, e nisso a bagaceira foi comendo solta com esse tanto de linguagem que tem por aí. Inclusive antes de C tem a linguagem A e B. E tem a linguagem D também.

    Resumindo, falta de produtividade e eficiência.

    Edit: por isso que no post eu falo do debate de C não ser baixo nível. C é alto nível.

    Ai tem uma galera que fala que C é médio nível, java alta nível e python altíssimo nível(praticamente um framework de C)

    2 curtidas

    “Compilar” código em assembly é basicamente somente trocar os nomes bonitos pelos códigos de máquina. É um trabalho extremamente simples.

    Só que programar em assembly é bastante complicado, precisa saber praticamente tudo da arquitetura para fazer coisas simples como listar números de 1 a N, sendo N escolhido pelo usuário.

    Uma das primeiras invenções de alto nível foi o BASIC, que trouxe várias abstrações de modo a facilitar a programação pro usuário. Vale a pena procurar algum vídeo histórico sobre isso, e vai fazer bastante sentido. O Basic foi programado em assembly, ele não tinha capacidade de se “auto compilar”.

    Somente mais tarde que outras linguagens surgiram, mas daí já com esse propósito de serem “auto compiláveis”. Então fazia-se uma primeira versão em assembly, e a partir daí o compilador poderia compilar ele mesmo com novas alterações para ficar cada vez mais complexo. Perceba que em nível de programação de compiladores, nunca se abandona a necessidade de verificar e inspecionar código de máquina, pois centenas de passos de otimização precisam ser testados e verificados que geram código válido.

    3 curtidas

    Só um detalhe/curiosidade:

    O debate acontece porque nem tudo é preto e branco, isso é um exemplo, C é alto nível se considerar todas as formas de programação incluindo as que não são linguagem de programação, via de regra se é linguagem de programação está acima de linguagem de montagem (Assembly e companhia) que está acima de linguagem de máquina (notação de Turing) logo é alto nível, porém se a gente considerar linguagem de programação apenas, C se torna baixo nível, porém se a gente considerar tudo, mesmo Assembly é alto nível já que abaixo dela tem a notação de Turing

    E por aí vai, agora olha que interessante, dá pra Python (eu poderia até colocar Lua que é mais próxima ainda nesse ponto) ser considerado baixo nível: acima das linguagens de programação temos a linguagem natural de escopo fechado (acima ainda de pseudo código)

    se o arquivo teste.txt não existir, crie ele
    coloque no arquivo teste.txt a frase Olá mundo!

    Que em Python seria:

    if not os.path.exists("teste.txt"):
        with open("teste.txt", "w") as f:
            f.write("Olá mundo!")
    
    
    3 curtidas