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

22

Se questo è il posto sbagliato per fare questa domanda, per favore fatemelo sapere.

Sono un programmatore Python di professione. Mi piacerebbe imparare C. In effetti, ho provato molte volte, ma mi scoraggio sempre. In Python, scrivi poche righe e il programma fa miracoli. In C, non riesco a essere in grado di fare nulla di utile.

Sembra 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

    
posta Honza Pokorny 27.02.2011 - 01:57
fonte

7 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 presto scoraggiato. Programmare in una C richiede uno stile diverso di pensiero e comprensione perché mentre stai interagendo con il computer in un livello più intimo. Ecco un buon punto di partenza per l'apprendimento di C:

Libri

Materiale online

risposta data 27.02.2011 - 02:09
fonte
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.

Dai un'occhiata a puntatori, matrici, riferimenti, strutture in questo Tutorial C . Ciò ti aiuterà a capire la gestione della memoria e molte delle funzionalità che "ti avvicinano alla macchina".

Se puoi imparare e capire questo materiale, allora cerca di espanderlo in un possibile progetto. Questi concetti sono fondamentali per qualsiasi vera programmazione C professionale.

Anche questo tutorial dei puntatori sembra utile.

    
risposta data 27.02.2011 - 02:05
fonte
11

È è molto complicato da connettere a Internet! Pensaci:

  • Il tuo computer potrebbe avere diversi modi di connessione: WLAN, Bluetooth, Ethernet, ecc. Ognuno di questi ha le sue impostazioni, che è necessario impostare. Sei fortunato che ci siano già standard e driver per questi ... usare questi potrebbe essere un lotto più difficile di quello che è già adesso.

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

  • Potrebbero esserci dei 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 nella cache alcuni dati, quindi vuoi usare la cache o no?

e l'elenco potrebbe continuare all'infinito.

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

Invece di pensare a C come noioso, pensalo come potente. Ma in ogni caso, non cerca di connettersi a Internet con esso - questa è una cosa piuttosto maleducata da fare. Invece, inizia a imparare come usare la libreria per più attività di base (ad es. File I / O), scopri come funzionano realmente i puntatori e gli array e quando impari tutti questi, quindi prova ad affrontare grandi progetti. Apprezzerai anche Python in questo modo. :)

Modifica :

Personalmente suggerisco che, se hai tempo libero, impara prima il C #. Non appena ti senti a tuo agio, inizia a conoscere la parola chiave unsafe e come utilizzare i puntatori e fai il marshalling in C #. Avrai comunque una grossa libreria con cui lavorare, come con Python, ma sarai in grado di fare un sacco di cose che puoi fare nella transizione C. Then manualmente alle API di sistema chiamanti (come InternetOpen ), e impara come farlo funzionare. Avrai ancora molta flessibilità, ma avrai un'ottima introduzione ai concetti di livello inferiore. Dopo averlo fatto, quindi iniziare a imparare C - allora lo troverai come un pezzo di torta, e vedrai (C? Capisci?) I vantaggi e gli svantaggi di lingue di alto livello e di basso livello e sarai in grado di trovare quello più adatto alle tue esigenze.

Detto questo, penso che un Un corso accelerato in C potrebbe essere utile come punto di partenza punta a saltare nel mare C.

    
risposta data 27.02.2011 - 02:09
fonte
8

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

Date invece un'occhiata ad alcuni progetti di qualità del codice piccoli e di alta qualità:

  • Lua - Se non ti interessa programmare i linguaggi, puoi saltare questo. Altrimenti, è un codice veramente bello e sorprendente vedere quanto riescono a fare con così poco (qualcosa che sembri frustrato da quando vieni da Python).
  • ZeroMQ - Adoro questo progetto. È una coda di messaggi leggera e superveloce. Ancora, materiale di alta qualità.
  • DarkHttpd - Un server Web di 2700 linee in C. Copre alcuni argomenti divertenti come la programmazione di socket, l'analisi e il lavoro con i protocolli .
risposta data 27.02.2011 - 06:06
fonte
0

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

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

    
risposta data 27.02.2011 - 06:18
fonte
-3

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

    
risposta data 27.02.2011 - 02:43
fonte
-3

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

    
risposta data 27.02.2011 - 04:05
fonte

Leggi altre domande sui tag