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

Você definitivamente deveria aprender C e esses são os motivos:

Para este artigo fazer sentido, acho que vale começar me apresentando :D

Me chamo Letícia, tenho 21 anos, sou desenvolvedora júnior backend e atuo na área há quase 2 anos. Aprendi a programar com python (acho que a maior parte das pessoas começam assim hoje em dia né rs) e nas minhas experiências profissionais até hoje sempre trabalhei com NodeJS e Javascript.

Sempre estudei por conta própria, geralmente através de livros e conteúdos espalhados pela internet. Fui me aventurando em projetos pessoais de pequeno e médio porte que, junto com as tasks do trabalho, foram me ensinando da forma mais difícil a maior parte das coisas que sei hoje.

Me considero uma boa programadora. Tenho bastante conhecimento sobre algorítmos e estruturas de dados, design patterns, clean code, programação orientada à objetos, etc. Mas esse ano decidi dar um passo importante na minha carreira: fazer faculdade.

Sei que esse é um tópico controverso e bastante discutido, mas vamos pular essa parte aqui. Fato é: para fazer a prova de transferência para um dos cursos de computação da USP, precisei aprender a programar em C e essa foi uma das melhores coisas que me aconteceram durante minha carreira.

A ideia desse conteúdo é discutir as principais coisas que aprendi programando em C e porque você deveria se aventurar nesse caminho também.

1 - Aprendi que não sabia nada sobre como um computador funciona

Como C é uma linguagem de baixo nível, nela precisamos nos preocupar com coisas que não nos preocupamos em outras linguagens (como alocação de memória, variáveis e apontadores, espaço de alocação dos diferentes data types, etc).

Essas são coisas que as engines e os compiladores das linguagens de alto nível fazem por debaixo dos panos e nós não fazemos ideia! Compreender como a memória funciona, como nossas variáveis são armazenadas, o que é um byte, um bit, a diferença entre uma variável e seu endereço... tudo isso com certeza vai te fazer um desenvolvedor melhor. Você vai passar a entender porque algumas soluções funcionam e outras não, vai saber como otimizar a utilização dos recursos da sua máquina, vai perceber que memória e processamento não são coisas infinitas rs e muito mais!

Por exemplo: Um erro muito comum na vida dos programadores é o stack overflow. Você por acaso sabe o que raios é a stack e o que é um overflow? Pois aprenda a programar em C e você vai descobrir logo nos primeiros dias :D

2 - Aprendi que coisas aparentemente simples são bastante complexas por debaixo dos panos

Logo que aprendemos a programar, descobrimos o poder dos arrays, listas ou vetores (como quiser chamá-los) e conforme vamos nos aprofundando em determinadas linguagens, vemos que elas geralmente têm uma caixa de ferramentas cheia de funções prontinhas para fazer a manipulação desses arrays.

Se você nunca estudou como as coisas funcionam por debaixo dos panos, pode parecer muito simples adicionar ou remover um elemento de um array, fazer uma cópia ou mesmo iterar sobre cada elemento. Porém, quando você programa em C, descobre que essas funções não existem, você precisa cuidar de cada detalhe e eles nem sempre são simples.

Aprender como fazer essas operações na mão vai te mostrar que existem formas muito eficientes e formas muito ineficientes de fazer a mesma coisa. Vai te forçar a pensar melhor sobre as estruturas de dados que você escolhe usar no seu programa (porque a escolha errada pode te dar muuuuita dor de cabeça) e isso vai fazer de você um desenvolvedor muito melhor.

3 - Aprendi a usar a tipagem estática

A maior parte das linguagens de alto nível têm tipagem dinâmica. Isto é, você geralmente não precisa declarar uma variável antes de usá-la. Se precisa declarar, não precisa explicitar o seu tipo. Pode mudar o tipo de uma variável (de int para char, por exemplo) durante a execução do programa e, falando de objetos, não precisa declarar todos os campos logo na sua inicialização.

Em C é tudo diferente. Se uma variável foi declarada como int ela será int para sempre. Ao declarar funções, enviar um parâmetro do tipo char quando este deveria ser int gera erro. Se você declarar um objeto data, por exemplo, com os campos dia, mês e ano, não poderá adicionar um novo campo hora durante a execução do programa.

Entender o por quê uma linguagem de baixo nível precisa ter uma tipagem estática e aprender a trabalhar com ela vai te ensinar muito sobre a gestão de contratos de entrada e saída nas suas aplicações.

4 - Aprendi de vez o que é, onde vive e do que se alimenta a memória

Eu já perdi a conta de quantas vezes falei sobre memória nesse artigo, mas é porque aprender mais sobre alocação de memória é provavelmente a coisa mais valiosa que C me ensinou. Saber a diferença de uma alocação estática para uma alocação dinâmica, o que é a stack e o heap, quanto espaço uma variável do tipo char ocupa, quanto espaço uma variável do tipo int ocupa, etc... tudo isso me fez olhar para a programação de um jeito completamente diferente.

As coisas agora são mais concretas, mais palpáveis. Existe motivo e justificativa para cada operação. As operações com strings fazem sentido e pra mim essa foi a beleza de aprender a programar em C: o sentido que a linguagem dá pras coisas mais simples e óbvias.

Pra finalizar

Vou terminar dizendo uma coisa óbvia: a ciência da computação é uma ciência. Foram anos de investimento de capital financeiro e humano para desenvolver as ferramentas que temos hoje e, apesar de você não precisar ser um expert em linguagens de baixo nível para conseguir um emprego na área, saber da onde viemos e porque as coisas são do jeito que são, faz de você um profissional acima da média.

Ler uma documentação ou um quick start de uma linguagem e aprender a usar seus operadores e funções é algo que qualquer pessoa é capaz de fazer, mas só um desenvolvedor (ou um cientista da computação) sabe o que acontece por baixo dos panos, o que o compilador e a engine estão fazendo e porque algumas decisões de projeto se justificam e outras não.

Todas as profissões exigem tempo e dedicação e o caminho mais fácil geralmente nunca é o melhor. Dominar as bases da ciência da computação vai te dar a habilidade de aprender qualquer linguagem e qualquer tecnologia numa velocidade incrível.

Vou deixar aqui os links e materiais que usei nos meus estudos. Eles são bastante completos e junto com a boa habilidade de pesquisar no google o que não encontrar lá, vão te dar uma noção bem aprofundada da linguagem C e seus recursos.

Espero ter contribuído com vocês :D

https://www.ime.usp.br/~pf/algoritmos/
https://www.ime.usp.br/~hitoshi/introducao/

Carregando publicação patrocinada...
10

Acho massa que tenha aprendido coisas novas e essa é a vantagem de aprender linguagens diferentes: você sempre aprende maneiras diferentes de resolver problemas.

Só tem alguns erros no artigo que eu gostaria de corrigir. Espero que interprete meu comentário como um convite para aprender mais e não uma "crítica".

  1. C é uma linguagem de alto nível. Eu sei que a maioria das pessoas vão lhe dizer o contrário, mas como uma pessoa que estuda Programming Language Theory e é apaixonado por baixo nível, posso lhe afirmar que C é uma linguagem de alto nível. Uma linguagem de baixo nível é uma linguagem que abstrai muito pouco, praticamente nada, o código de máquina da arquitetura. E o código que a gente escreve em C não se parece nenhum pouco com o código de máquina, acredite.
  2. C é um pano. Do ponto de vista de quem programa em Python, C pode parecer "por debaixo dos panos" mas na real C é um "pano". É verdade que C não tem implementações de estruturas de dados na sua biblioteca padrão mas isso não faz com que programar em C seja ver as coisas por debaixo dos panos. Tem muito mais coisas para se estudar e entender por baixo dos panos da linguagem C.
  3. «Entender o por quê uma linguagem de baixo nível precisa ter uma tipagem estática[...]» - Bom, como eu disse C é uma linguagem de alto nível. Mas falando de linguagens de baixo nível é falsa a afirmação de que "precisam" ter tipagem estática. Assembly (que é baixo nível de verdade) não tem tipagem nenhuma (nem estática nem dinâmica).
  4. C abstrai a memória. Você não está lidando diretamente com como a memória de fato funciona programando em C. Até mesmo os ponteiros são abstrações, eles não refletem necessariamente como um endereço de memória funciona na arquitetura. Um exemplo: na arquitetura x86 os ponteiros abstraem o conceito de segmentação de memória. Além disso usar malloc() não faz com que você lide manualmente com alocação dinâmica de memória, a única coisa que o uso do combo malloc() e free() fazem é te dar o controle do lifetime de um objeto, que é por quanto tempo um objeto permanece alocado. Isso não é lidar com alocação dinâmica de memória manualmente, é uma abstração e lidar com isso manualmente é muito mais complicado do que só invocar uma função. Portanto dizer que "aprendeu de vez o que é memória" talvez seja um exagero.

Se quiser aprender mais sobre como as coisas funcionam por debaixo dos panos, sugiro estudar:

  1. Programming Language Theory (PLT): que é o ramo da ciência da computação que estuda a teoria e a implementação de linguagens de programação. Coisas como sistemas de tipos, paradigmas de programação, modelos de computação, metaprogramação, compiladores etc.
    1. Material sobre sistema de tipos: https://lucacardelli.name/papers/typesystems.pdf
    2. Material sobre paradigmas: https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
    3. Livro sobre compiladores: Compiladores: Princípios, Técnicas e Ferramentas (ISBN: 978-8588639249)
  2. Sistemas operacionais: assim você aprende sobre como programas são executados sobre sistemas operacionais e aprende como a memória funciona por debaixo dos panos. Além de outros pontos importantes como threads (mais concorrência e paralelismo), filesystem, sockets, system calls, interrupções, I/O etc.
    1. Livro sobre SO: Sistemas Operacionais Modernos (ISBN: 978-8543005676)
  3. Executáveis: assim você aprende sobre arquivo objeto e como executáveis funciona. Veja sobre os formatos ELF (usado no Linux e outros UNIX-Like) e/ou PE (usado no Windows).
  4. Bibliotecas dinâmicas e estáticas: assim você aprende como, por exemplo, a libc é carregada e como suas funções podem ser usadas por programas em C.
    1. Já escrevi um artigo que fala um pouco sobre isso, apesar desse não ser o foco do artigo: https://freedev.medium.com/hook-de-fun%C3%A7%C3%B5es-no-linux-fafa51c966b1
  5. Veja como malloc() funciona: assim você aprende como a alocação dinâmica de memória funciona por debaixo dos panos.
    1. Já escrevi um artigo sobre isso: https://www.mentebinaria.com.br/artigos/entendendo-malloc-e-heap-na-glibc-r70/
  6. Assembly: é essencial aprender Assembly para entender como as coisas funcionam por debaixo dos panos. E como bônus você vai entender porque C não é uma linguagem de baixo nível.
    1. Eu escrevi um livro gratuito sobre Assembly x86-64. No livro inclusive eu ensino como o código de máquina da arquitetura funciona: https://mentebinaria.gitbook.io/assembly/
  7. A especificação da linguagem C: assim você aprende mais a fundo sobre a linguagem e aprende melhor sobre PLT.
    1. Pode baixar drafts gratuitos aqui: https://www.iso-9899.info/wiki/The_Standard

Bom, repito que espero que entenda que meu objetivo é lhe convidar a aprender mais sobre o assunto e não criticar.

Eu tenho uma comunidade no Discord onde a gente fala bastante sobre C, Assembly, segurança e outros temas legais de computação. Se tiver interesse em participar me dá um contato seu que eu mando o convite (pode ser o próprio nick no Discord).

Ou se não quiser mandar contato publicamente aqui, veja meus contatos no GitHub (tem meu e-mail lá): https://github.com/Silva97

3
1

Estou gostando muito do seu livro gratuito sobre Assembly x86-64.
Há tempos atrás aprendi um pouco de Assembly do Z80 e de alguns PIC, mas preciso me atualizar.

Quanto à classificação em linguagens de Alto e Baixo nível é útil mas é uma classificação antiquada; na época em que essa classificação começou a ser utilizada (há mais de 40 anos), era trivial separar as linguagens de Alto e Baixo nível; atualmente temos linguagens de mais Alto nível com relação umas às outras e de mais Baixo nível com relação umas às outras. Quero dizer que: Python é de mais alto nível do que PHP, que é de mais alto nível do que C++, que é de mais alto nível do que C, que é de mais alto nível do que Assembly, que por fim é de mais alto nível do que o executável.

3

Eu iniciei na area de programação a pouco tempo também, trabalho apenas com Pascal no momento (Delphi), o que não é muito comum por ai 😅, mas é o que a empresa onde trabalho usa (comecei como suporte).

E no Delphi é tipagem estatica também, quando vejo outras linguages usando tipagem dinamica, eu me perco todo, acho mais simples e com muita menos chance de dar erro o uso tipagem estatica.

Sobre o C, realmente do pouco que conheço quando fiz ADS, ele é essencial para entender de baixo dos panos.

Recomendo muito o canal do Fabio Akita a esse respeito.
Principalmente (a respeito do C) esse video:
Hello World Como Você Nunca Viu! | Entendendo C

e em seguida esse:
O que vem DEPOIS do Hello World | Consertando meu C

1

Eu fui primeiro fuçar se já não tinham postado video do Akita, porque era o que eu iria comentar hehehe.

Tem muita coisa nesses video do Hello World. Pra quem já trabalhou com rom hacking (hack de jogos), tem muita coisa ali que depois fez mais sentido pra mim hehehe.

3

Meu primeiro contato com programação foi usando linguagem C. De fato, foi quando desenvolvi paixão pela área.

Segue o link do CS50, a melhor introdução à ciência da computação que alguém pode ter, e o lugar onde tive meu primeiro contato com C e também passei a entender melhor sobre esses tópicos que você mencionou de memória e como o computador funciona. E mais a frente no curso, até mesmo como que a internet funciona.

Eu vou ser puxa saco desse curso a vida toda. Sou fãzasso.

3

Pra mim o CS50 é um patrimônio da nossa área haha. Meu primeiro emprego consegui depois de fazer o web50 (sobre python e django).

Foi lá que aprendi sobre banco de dados, mvc, git e coloquei meu primeiro site em produção. Foi a base que eu precisava para entrar na área.

1

Concordo plenamente. E que maneiro, parabéns.

Sobre o CS50W, de fato, é uma maravilha. Ele aborda tópicos muito interessantes e que somam muito para quem quer ser programador web. É uma pena que eu não tenha finalizado. Parei no problem set do leilão. No momento é meio apertado devido à rotina, mas tenho vontade de continuar algum dia.

2

Eu comecei o CS50 mas parei na semana 4, infelizmente tive muita dificuldade com os exercícios, teria alguma dica, como foi que ultrapassou os obstáculos?

1

Mano, de fato o começo pode ser complicado. Eu diria que a week 3 foi a mais desafiadora pra mim. Eu comecei o CS50 em Agosto/Setembro de 2020. Fui progredindo pouco a pouco, mas comecei a ter dificuldade com exercícios também e acabei desanimando. Então parei, nessa semana 3.

Só que um tempo depois, em Novembro, eu pensei comigo mesmo que poderia me esforçar mais. Raciocinei no grande ganho que aquilo proporcionaria mais à frente, e no quanto eu estava gostando do que estava aprendendo, e que não valia a pena desistir.

Sendo assim, recomecei o curso e fui vendo cada tópico com calma, praticando bastante, inclusive procurando fazer mais exercícios do que apenas os Problem Sets. Percebi que no fundo eu não tinha absorvido plenamente alguns conceitos, e isso me ajudou. Além disso, quando enfrentei o Problem Set 3 denovo, me forcei a não desistir. Eu fazia algumas pausas, e depois voltava.

Depois que consegui resolver aquilo, senti que conseguiria resolver qualquer outro problema. Aprendi que muitas vezes só é preciso ter paciência, e que nesse mundo da programação, todos os problemas podem ser resolvidos, de uma forma ou de outra, alguns apenas levam mais tempo.

Depois de finalizar as semanas que falam sobre linguagem C, recomendo fazer um projeto pessoal usando essa ferramenta. Tente implementar os algoritmos e estruturas de dados apresentados nas aulas, por conta própria, isso faz toda a diferença.

Vale lembrar que você pode se juntar à comunidade do CS50 em vários canais de comunicação. Eu gostava de usar o Discord. Você pode tanto responder a dúvida de outros como também colocar suas próprias. Tem tanta gente lá, passando pelos mesmos problemas (e também que já passaram), que dentro de pouco tempo você é respondido.

E sobre começar em 2022 e continuar em 2023, isso é de boa, no próprio site eles te orientam como fazer isso, na página dos problem sets. No meu caso eu fui até a semana 4 em 2020, e continuei a partir da semana 5 em 2021.

2

Tabém aprendi programar sozinho, com python também. Era bom nisso, até conhecer C kkk e essa foi a melhor coisa que fiz também. C te força a programar de verdade, força sua lógica, diferente do python, onde você vai jutando um monte de código feito por outras pessoas(cada import é um programador diferente kkkk).

A coisa que mais me pegou em C foi tentar fazer um simples printf(reescrever a função print eu mesmo). Recomendo esse exercicio, tente refazer uma função dessas que usamos todos os dias, cês vão ver como não era tão simples kkkk

2

Olá Letícia, muito bom o seu texto sobre a linguagem C. Eu faço Sistemas de Informação, na UFLA, e baisicamente tudo o que você falou eu já sabia porque aqui aprendemos a programar em C++. Confesso que odiava essa linguagem, porque acho ela muito difícil principalmente para quem nunca teve contato com a programação antes igual eu, mas vou mudar de ideia depois de ler seu texto. A partir de hoje vou levar mais a sério e reforçar meus estudos em C++.

2

Olá Letícia! Gostei muito da sua descrição de experiência com a linguagem C e como eu - também desenvolvedor python - reafirmo que sua afirmação é correta: Aprender C é essencial! Para contribuir com uma boa referência deixo esta playlist no youtube do canal De aluno para aluno... Foram estes vídeos que me ajudaram demais a aprender C na época da universidade (Também Ciências da Computação)! Muito obrigado pelo baita conteúdo mais uma vez!

2

Comecei a programar com java, mas C foi a primeira linguagem que me fez enxergar a programação com mais clareza, hoje trabalho com python, mas às vezes ainda volto no bom e velho C.
Um tempo atrás comecei a aprender Rust e consegui progredir bem rápido graças a compreensão de funcionamento do computador que o C me deu.
Seu post esta muito bom, parabéns por mais programadores como você.

1
1

Que tooop a publi, to a um ano estudando javascript (node de back, typescript e react no front) já pensei varias vezes em estudar java pra pegar forte a POO, e pensei em estudar C pra pegar os fundamentos a fundo de programação, mas será que vale a pena realmente ou com o typescript me aprofundando nas tipagens eu já conseguiria uma base boa??

1

De fato, a linguagem C é essencial para um aprendizado melhor das outras que estão aí no mercado e que as que irão surgir. A parte que eu acho interessante é que aprendendo C, as demais ficam muito mais fáceis de de utilizar. Digo por experiência própria.

1

Nossa eu aprendi a programar escrevendo em um papel kkkk, porque o cara que estava me ensinando tinha a mentalidade de que se eu aprendesse a codar sem ficar compilando e testando toda hora eu iria conseguir imaginar melhor antes de sair digitando.

E pior que funcionou, a primeira linguagem que eu aprendi foi C, e foi de boa, a dificuldade foi so aprender como alocar memoria, e aritmetica de ponteiros.

Acabei implementando filas, arvores, hash tables, etc

1

Parabéns Letícia! Excelente iniciativa. Reforçando: Ciências da Computação (com maiúsculas) é uma Ciência, e exige dedicação às vezes de uma vida. Nunca parar de se questionar e buscar soluções mais eficientes para problemas complexos é fundamental. E espero que a cada dez anos você descubra que há dez anos atrás você não era a profissional completa que é hoje ;-)

Obrigado!

1

Não lembro onde, mas uma vez já ouvi que o C não é exatamente uma linguagem de baixo nível, mesmo sendo bem parecida com uma ela ainda não te obriga sempre a gerenciar memória na mão, acho que esse era o motivo. Mas realmente C é um ótimo ponto de partida para aprender programação

1

C é baixo nível, mas é mais fácil e prático que assembly no geral.
Como C tem que ser portátil, você não escreve instruções de assembly diretamente, porque cada arquitetura vai ter suas próprias instruções.

Mas se você precisar, você pode escrever instruções de assembly no C.
Já vi fazerem isso em códigos de jogos de N64, onde a performance do código C não é suficiente. Exemplo:

__asm__("movl %edx, %eax");

Mas pensa o seguinte, o código do kernel Linux é majoritariamente feito em C, e kernels são coisas extremamente baixo nível.

1

Creio que houve outro comentário, com mais relevância que o meu, que explica o porquê de não ser baixo nível. Dei um exemplo de memória mais do que me lembrava mesmo

1
1

Comecei no NodeJs com Typescript, ai foi crescendo uma curiosidade sobre como as coisas funcionam por debaixo dos panos. Resolvi aprender RUST, ainda to no começo e sei que é um pouco acima do C, mas mesmo assim é incrivel como abre a mente sobre como funciona o computador em relação ao uso de tipagems corretas e o gerenciamento de memória. Tenho 14 anos na TI mas apenas 2 com programação, mas é incrivel como muda a mente aprender uma liguagem mais baixo nivel.

1

Estudei sobre esses assuntos, não uso C no dia a dia, mas já brinquei com ele por um tempo.

Uso Rust e por saber desses assuntos, acho impressionante a abordagem do Rust sobre ponteiros, referências e etc.

1

Otimo post, concordo com voce que C e uma das linguagens que deveriam fazer parte do roadmap de estudos de um desenvolvedor. Alem disso, acredito que quem esta iniciando na area e nao precisa entrar no mercado de trabalho desesperadamente, ou seja, tem tempo, deveria comecar por ela, como vc mencionou "o caminho mais facil geralmente nunca e o melhor"

1

Aqui onde eu faço faculdade, a linguagem que mais utilizamos é C pra fazer as matérias de algoritmos 1, 2 e 3. Fazemos a parte de POO com Java e IA em python. O professor no primeiro período passava pra gente fazer o mesmo projeto em C e em Python e era engraçado a diferença da complexidade dos dois kkkkk.

1

Muito bom o post leticia.

Obrigado por compartilhar a sua experiência e ajuda a ver as bases das programações que a gente tem hoje de alto nível e quando elas já não são suficientes com relação à produtividade/eficiência.

1

Eu fico muito feliz de ver um conteúdo tão rico assim, obrigado por compartilhar suas experiencias.

Comecei a estudar node.js mais a fundo e é impressionante o quanto isso pode mudar a nossa percepção sobre o que estamos fazendo de verdade. Coisas simples como declarar variáveis podem fazer toda a diferença.

Parabéns pelo artigo!!

1

Pior que conforme voce vai aprendendo mais interessante fica, existem muitas coisas que sao abstraidas com a modernidade, isso nao e ruim, pois diminui a barreira de entrada. Porem, certa logica que a maquina estara usando e que foi modulado por humanos, acaba se perdendo. Por exemplo certas convencoes da sintaxe de c que sao dessa forma simplesmente porque alguem disse que seria e ao ver "mais embaixo" termos abstraidos na compilacao e que fazem muita diferenca saber em c como assembling, entao muitas dessas convencoes parecem mais palpaveis, principalmente porque c, apesar de baixo nivel ainda fala ingles, mas 1 degrau abaixo ja esta falando uma lingua completamente diferente.

Alem das librarys em c que criam funcoes muito simples que toda linguagem tem, mas ao analisar essas funcoes percebemos que apesar de ser uma linguagem "limitada" existe um pote de ouro em utilizar comandos, tecnicas e logicas que nas linguagens de mais alto nivel apesar de abstraidas ganharao uma enorme estetica de design, performance ou pelo menos vai facilitar sua logica ja aplicada entendendo que debaixo do codigo que a maquina vai rodar, existe uma industria inteira girando as engrenagens.

1

Concordo com os pontos que você trouxe Letícia, ótimos motivos para aprender C! e acrescentando uma opção para pessoas que estão iniciando no meio é a de utilizar microcontroladores(como o arduino por exemplo, que utiliza uma linguagem bastante similar) para visualizar o código funcionando efetivamente, uma plataforma muito boa para esses estudos é o Tinkercad.

1

Sem dúvidas é exatamente isso que você descreveu no post acima, quando eu começei a programar eu comecei com Java, fui direto pra POO por conta de um curso de internet, mas eu sempre ficava com algumas dúvidas, de como tudo realmente funcionava, sempre fui bastante currioso...

Entrei no curso superior de Ciência da Computação, quando eu tive contato com a linguagem C fiquei fascinado, ao mesmo tempo que dava trabalho, aprender sobre alocação de memória, ponteiros etc, eu testava aprendendo bastante, sobre a base, e quando eu tive estrutura de dados e algoritmo aplicando TDA (Tipo de Dado Abstrato), em C só complementou mais ainda, e nesse ponto eu comecei a achar C a linguagem mais bonita de todas, realmente virei fã, a pesar de não ter feito nada grandioso nela. Mas foi sem dúvidas uma das coisas mais importantes que aprendi em toda minha carreira.

1
1

Show de conteúdo! Sou formado em outra área, e estou como desenvolvedor a dois anos, mas também sinto essa necessidade de conhecer as coisas por debaixo dos panos. Obrigado pelo material!

1

Eu estudei C a primeira vez no técnico de TI em 2017, mas na época não foi muito produtivo.
O C, por incrível que pareça, abstrai e simplifica muita coisa do PC.

O que realmente me ajudou a entender como o computador funciona foi estudar sobre assembly, emulação e coisas do tipo...

Essa série aqui é sensacional, porque o cara monta um PC "do zero" usando a CPU do Nintendinho, então você vai entendendo as instruções, memória, e como tudo trabalha junto:

Obs.: se o embed não funcionar, o link é https://www.youtube.com/watch?v=LnzuMJLZRdU


Mas o que você falou tá certíssimo, tem muito conhecimento útil para JavaScript que você acaba aprendendo estudando C.

Inclusive recomendo também estudar C++, porque muitos conceitos lá vão te ajudar a entender garbage collection, alocação de memória, etc...

1

Bom, eu entendo que a base do bom conhecimento é conhecer a fundo a tecnologia que usamos. Mas será que, assim como hoje não nos preocupamos com o clima, estiagem e pragas para poder nos alimentar (pois vamos a uma instância de alto nivel chamado Supermercado para ter acesso a comida) e não nos importamos com o que acontece "Under the hood" para que o alimento chege até nossas mesas, isso não se aplicará a programação?

Com o advento da IA, creio que ela será capaz de "pegar" um código de alto nível e processá-lo de tal maneira que criará a própria versão já extremamente otimizada em Assembly e até mesmo Binário, fazendo que nós programadores, subamos ainda mais na Stack de Niveis de Linguagem.

Hoje, para jogos ou programação muito específica, é necessário ser muito imperativo na criação do código, mas vejo que o mundo caminha rápidamente para uma programação mais declarativa, com a IA fazendo a parte imperativa de maneira quase que perfeita (muito em breve) debaixo dos panos.

E vocês, o que acham?

1

Isso esclarece uma dúvida que eu tive quando comecei a cogitar levar a programação como parte da minha vida, amigos que fazem faculdade de ciências da computação sempre me falavam que o que eles mais estudavam na faculdade era C e eu nunca entendi porque eles ficavam 4 anos ou mais estudando "só isso", seu post faz isso fazer muito mais sentido.

1

Ótimo post!

Estou na fase do aprendizado para me tornar um Front End Developer, também estudando sozinho. Porém nas últimas semanas eu comecei a estudar o CS50 de Harvard pois senti que eu precisava justamente dessa base de conhecimentos mais low level.

E com cada atividade semanal (que até agora são todas feitas em C) eu senti justamente isso que você falou, mudou muito a forma como eu enxergo programação pois agora sinto que estou compreendendo cada vez mais o que de fato está acontecendo no PC.
Algo que linguagens mais modernas acabam "escondendo" do dev.