Aprendendo a programar em C (vindo de Python) [fechado]

22

Se este é o lugar errado para fazer esta pergunta, entre em contato.

Sou programador Python por profissão. Eu adoraria aprender C. De fato, tentei muitas vezes, mas sempre fico desanimado. No Python, você escreve algumas linhas e o programa faz maravilhas. Em C, parece que não consigo fazer nada de útil.

Parece ser muito complicado até conectar-se à Internet.

Você tem alguma sugestão sobre o que posso fazer para aprender C? Existem bons sites? Algum projeto bacana?

obrigado

Honza Pokorny
fonte
4
É bom poder ficar nos ombros do gênio, não é? O intérprete Python está escrito em C. Agora você tem uma verdadeira apreciação pelo que os designers realmente fizeram. É bastante incrível.
Pemdas 27/02
@Pemdas C é normalmente usado para criar programas do sistema.
Searock 27/02
Posso recomendar começar lendo o conteúdo de um arquivo e, possivelmente, fazer alguma transformação básica em outro arquivo? Exemplo: Pegue um CSV e analise-o em um arquivo delimitado por tabulações. Como alternativa, você pode aprender a ler as informações do cabeçalho em um arquivo de imagem BMP de JPEG.
31712 Joshua Burns
Estou atrasado para adicionar uma resposta, mas há este livreto on-line do C for Python Programs . Além disso, os criadores de "Aprenda a programar da maneira mais difícil" estão criando um livro chamado " Aprenda da maneira mais difícil ", voltado para pessoas que já conhecem um pouco de python ou similar.
naught101

Respostas:

31

Não desanime.

Python é uma linguagem de programação de alto nível. Em comparação com C, pode produzir maravilhas em uma pequena quantidade de código. Não comece tentando imitar os resultados do Python em C - você será desanimado imediatamente. Programar em C requer um estilo diferente de pensamento e compreensão, porque você está interagindo com o computador em um nível mais íntimo. Aqui está um bom ponto de partida para aprender C:

Livros

Material on-line

JK
fonte
1
Você pode sugerir um exercício de programação? Algo útil de preferência. Obrigado.
Honza Pokorny
12

Se você deseja aprender C, não comece conectando-se à Internet. Você pode fazer isso em qualquer outro idioma. Não é isso que é mais importante em C.

Em vez disso, dê uma olhada ponteiros, matrizes, referências, estruturas neste C Tutorial . Isso ajudará você a entender o gerenciamento de memória e muitos dos recursos que "aproximam você da máquina".

Se você pode aprender e entender esse material, tente expandir para um possível projeto. Esses conceitos são fundamentais para qualquer programação C profissional real.

Este tutorial sobre ponteiros também parece útil.

jmort253
fonte
o C_Tutoriallink está quebrado ...
user3768495 18/03
11

Ele é muito complicado para se conectar à internet! Pense nisso:

  • Seu computador pode ter várias formas de conexão - WLAN, Bluetooth, Ethernet, etc. Cada uma delas possui suas próprias configurações, que você precisa definir. Você tem sorte que já existem padrões e drivers para esses ... usá-los pode ser muito mais difícil do que já é agora.

  • Os endereços IP podem ser IPv4 ou IPv6, e você precisa poder lidar com ambos.

  • Pode ou não haver proxies configurados para o sistema.

  • Você precisa suportar FTP, HTTP ou algum outro protocolo.

  • Pode ser necessário usar a conexão discada, para especificar uma lista telefônica com senhas e números de telefone, se você ainda não estiver conectado. O mesmo vale para nomes de usuário / senhas da WLAN.

  • Pode ser necessário trabalhar com cookies.

  • O sistema pode armazenar em cache alguns dados. Deseja usá-lo ou não?

E a lista continua.

Portanto, o fato de ser fácil fazer isso com o Python significa necessariamente que muitos deles estão ocultos de você (ou difíceis de definir), para que você troque simplicidade por poder. A biblioteca C é o oposto: possui toda a energia que você precisa (você pode executar facilmente chamadas do sistema), mas não possui padrões (ou, de fato, nenhum recurso para conectar-se à Internet).

Em vez de pensar em C como sendo tedioso, pense nele como sendo poderoso. Mas, de qualquer forma, não tente se conectar à Internet com ela - isso é uma coisa muito difícil de fazer. Em vez disso, começar a aprender a usar a biblioteca para tarefas mais básicas (por exemplo, arquivo I / O), aprender sobre como ponteiros e arrays realmente funcionam, e quando você aprender todos aqueles que, em seguida, tentar enfrentar grandes projetos. Você também apreciará o Python dessa maneira. :)


Editar :

Pessoalmente, sugiro que, se você tiver tempo livre, aprenda C # primeiro. Assim que você se sentir confortável com isso, comece a aprender sobre a unsafepalavra - chave e como usar ponteiros e fazer empacotamento em C #. Você ainda terá uma biblioteca muito grande para trabalhar, como no Python, mas poderá fazer muitas coisas que pode fazer no C. Em seguida, faça a transição para chamar as APIs do sistema manualmente (como InternetOpen ) e aprenda como fazê-los funcionar. Você ainda terá muita flexibilidade, mas terá uma ótima introdução aos conceitos de nível inferior. Depois de fazer isso, então comece a aprender C - então você descobrirá que é um pedaço de bolo e verá (C? entendeu?) as vantagens e desvantagens das linguagens de alto e baixo nível e poderá para encontrar aquele que atenda às suas necessidades.

Dito isto, acho que Um Curso de Crash em C pode ser útil como ponto de partida para pular no mar C.

Mehrdad
fonte
8

Não leia o código do kernel quando estiver aprendendo o C. É cheio de truques para extrair todo o desempenho dele. Algumas delas são muito fora do padrão. Isso vai te deixar louco.

Em vez disso, dê uma olhada em alguns projetos pequenos e de alta qualidade de código:

  • Lua - Se você não está interessado em linguagens de programação, pode pular esta. Caso contrário, é um código realmente bonito e incrível ver o quanto eles realizam com tão pouco (algo pelo qual você parece frustrado desde que vem do Python).
  • ZeroMQ - Adoro este projeto. É uma fila de mensagens super rápida e leve. Novamente, coisas de alta qualidade.
  • DarkHttpd - Um servidor da web de 2700 linhas em C. Abrange alguns tópicos divertidos, como programação de soquetes, análise e trabalho com protocolos.
Roger escasso
fonte
0

Um objetivo de uma linguagem de alto nível superior é ocultar coisas complicadas. Se você quer aprender um idioma de nível "inferior" e não quer começar com coisas realmente complicadas (que antes eram escondidas de você); tente começar com alguns projetos de aprendizado mais simples, classificando uma matriz de números ou revertendo uma sequência de caracteres, ou algo assim ...

É mais fácil subir uma colina íngreme dando pequenos passos.

hotpaw2
fonte
-3

No que diz respeito a projetos interessantes: Os kernels do Unix são escritos em C.

Edward Strange
fonte
Você queria adicionar um link?
jmort253
-3

Aprenda a gramática C primeiro e depois use-a para escrever a estrutura e o algoritmo dos dados. É claro que você pode ler o kernel do Linux como especialista em linguagem c.

Oi 福气 鱼
fonte