Imparare a programmare in C (proveniente da Python) [chiuso]


22

Se questo è il posto sbagliato in cui porre questa domanda, per favore fatemi sapere.

Sono un programmatore Python per occupazione. Mi piacerebbe imparare C. In effetti, ci ho provato molte volte, ma mi scoraggio sempre. In Python, scrivi alcune righe e il programma fa miracoli. In C, non riesco a fare nulla di utile.

Sembra essere molto complicato persino connettersi a Internet.

Hai qualche suggerimento su cosa posso fare per imparare C? Ci sono dei buoni siti Web? Qualche progetto interessante?

Grazie


4
È bello poter stare sulle spalle del genio, non è vero? L'interprete Python è scritto in C. Ora hai un vero apprezzamento per ciò che i designer hanno davvero fatto. È davvero fantastico.
Pemdas,

@Pemdas C viene normalmente utilizzato per creare programmi di sistema.
Searock,

Potrei raccomandare di iniziare leggendo il contenuto di un file e possibilmente facendo qualche trasformazione di base in un altro file? Esempio: prendere un CSV e analizzarlo in un file delimitato da tabulazioni. In alternativa, potresti imparare a leggere le informazioni dell'intestazione da un file di immagine BMP di JPEG.
Joshua Burns,

Sono in ritardo per aggiungere una risposta, ma c'è questo opuscolo online C per programmi Python . Inoltre, i creatori di "Impara a programmare nel modo più duro" stanno realizzando un libro intitolato " Impara in modo difficile ", che si rivolge a persone che già conoscono un po 'di pitone o simili.
naught101

Risposte:


31

Non scoraggiarti.

Python è un linguaggio di programmazione di alto livello. In confronto a C, può produrre meraviglie in una piccola quantità di codice. Non iniziare cercando di imitare i risultati di Python in C: sarai prontamente scoraggiato. La programmazione in una C richiede un diverso modo di pensare e comprendere perché mentre interagisci con il computer a un livello più intimo. Ecco un buon punto di partenza per l'apprendimento del C:

Libri

Materiale online


1
Puoi suggerire un esercizio di programmazione? Qualcosa di utile preferibilmente. Grazie.
Honza Pokorny,

12

Se vuoi imparare C, non iniziare con la connessione a Internet. Puoi farlo in qualsiasi altra lingua. Questo non è ciò che è più importante in C.

Invece, dare un'occhiata a puntatori, array, i riferimenti, le strutture in questa C Tutorial . Questo ti aiuterà a comprendere la gestione della memoria e molte delle funzionalità che "ti avvicinano alla macchina".

Se riesci a imparare e comprendere questo materiale, cerca di espandere un possibile progetto. Questi concetti sono fondamentali per qualsiasi vera programmazione professionale in C.

Anche questo tutorial sul puntatore sembra utile.


il C_Tutorialcollegamento è interrotto ...
user3768495 il

11

Si è molto complicato per la connessione a internet! Pensaci:

  • È possibile che il computer disponga di più modalità di connessione: WLAN, Bluetooth, Ethernet, ecc. Ognuno di questi ha le proprie impostazioni, che è necessario impostare. Sei fortunato che ci siano già standard e driver per questi ... usare questi potrebbe essere molto più difficile di quanto non lo sia già adesso.

  • Gli indirizzi IP possono essere IPv4 o IPv6 e devi essere in grado di gestirli entrambi.

  • Potrebbero esserci o meno proxy configurati per il sistema.

  • Devi supportare FTP, HTTP o qualche altro protocollo.

  • Potrebbe essere necessario utilizzare la connessione remota, quindi è necessario specificare una rubrica con password e numeri di telefono, se non si è già connessi. Idem con nomi utente / password WLAN.

  • Potrebbe essere necessario lavorare con i cookie.

  • Il sistema potrebbe memorizzare alcuni dati nella cache, quindi vuoi usare la cache o no?

e l'elenco potrebbe continuare all'infinito.

Quindi il fatto che sia facile eseguirli con Python significa necessariamente che molti di questi sono nascosti da te (o difficili da impostare), quindi scambi la semplicità con il potere. La libreria C è l'opposto: ha tutta la potenza di cui hai bisogno (puoi facilmente eseguire chiamate di sistema), ma non ha alcun valore predefinito (o, in effetti, alcuna funzionalità per la connessione a Internet).

Invece di pensare a C come noioso, pensalo come potente. Ma in ogni caso, non provare a collegarti a Internet con esso: è una cosa davvero difficile da fare. Invece, inizia a imparare come utilizzare la libreria per attività più basilari (ad es. I / O di file), scopri come funzionano realmente i puntatori e le matrici e quando impari tutte quelle, quindi prova ad affrontare grandi progetti. Python apprezzerai anche di più in questo modo. :)


Modifica :

Personalmente suggerisco che, se hai tempo libero, impari prima C #. Non appena ti senti a tuo agio con esso, inizia a conoscere la unsafeparola chiave e come utilizzare i puntatori e fare il marshalling in C #. Avrai ancora una libreria davvero grande con cui lavorare, come con Python, ma sarai in grado di fare molte cose che puoi fare in C. Quindi passa alle API di sistema di chiamata manualmente (come InternetOpen ) e impara come farli funzionare. Avrai ancora molta flessibilità, ma avrai un'ottima introduzione ai concetti di livello inferiore. Dopo aver fatto questi, allora inizia ad imparare C - poi scoprirai che è un gioco da ragazzi e vedrai (C? capito?) i vantaggi e gli svantaggi delle lingue di alto livello e basso livello, e sarai in grado per trovare quello più adatto alle tue esigenze.

Detto questo, penso che A Crash Course in C potrebbe essere utile come punto di partenza per tuffarsi nel mare C.


8

Non leggere il codice del kernel quando stai imparando C. È pieno di trucchi per spremere fino all'ultimo bit di prestazioni. Alcuni di questi sono molto non standard. Ti farà impazzire.

Invece, dai un'occhiata ad alcuni piccoli progetti di alta qualità:

  • Lua - Se non sei interessato ai linguaggi di programmazione, potresti saltare questo. Altrimenti, è un codice davvero bello e sorprendente vedere quanto ottengono con così poco (qualcosa da cui sembri frustrato da quando vieni da Python).
  • ZeroMQ - Adoro questo progetto. È una coda di messaggi leggera e super veloce. Ancora una volta, roba di alta qualità.
  • DarkHttpd - Un server web a 2700 linee in C. Copre alcuni argomenti divertenti come la programmazione socket, l'analisi e l' utilizzo dei protocolli.

0

Uno scopo di un linguaggio di alto livello è nascondere cose complicate. Se vuoi imparare una lingua di livello "inferiore" e non vuoi iniziare con cose davvero complicate (che prima erano per lo più nascoste da te); prova a iniziare con alcuni progetti di apprendimento più semplici, ordinare una serie di numeri o invertire una serie di caratteri o alcuni di questi ...

È più facile salire una ripida collina facendo piccoli passi.


-3

Per quanto riguarda i progetti interessanti da vedere: i kernel Unix sono scritti in C.


Intendevi aggiungere un link?
jmort253,

-3

Impara prima la grammatica C, quindi usala per scrivere la struttura dei dati e l'algoritmo. Ovviamente puoi leggere il kernel Linux come il tuo linguaggio esperto c.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.