Apprendre à programmer en C (venant de Python) [fermé]

22

Si ce n'est pas le bon endroit pour poser cette question, faites-le moi savoir.

Je suis un programmeur Python de profession. J'aimerais beaucoup apprendre C. En effet, j'ai essayé plusieurs fois, mais je me décourage toujours. En Python, vous écrivez quelques lignes et le programme fait des merveilles. En C, je n'arrive pas à faire quoi que ce soit d'utile.

Il semble même très compliqué de se connecter à Internet.

Avez-vous des suggestions sur ce que je peux faire pour apprendre le C? Existe-t-il de bons sites Web? Des projets sympas?

Merci

Honza Pokorny
la source
4
C'est bien de pouvoir se tenir sur les épaules du génie n'est-ce pas. L'interpréteur Python est écrit en C. Maintenant, vous avez une vraie appréciation de ce que les concepteurs ont vraiment fait. C'est assez génial.
Pemdas
@Pemdas C est normalement utilisé pour créer des programmes système.
Searock
Puis-je recommander de commencer par lire le contenu d'un fichier et éventuellement de faire une transformation de base dans un autre fichier? Exemple: prenez un CSV et analysez-le dans un fichier délimité par des tabulations. Alternativement, vous pouvez apprendre à lire les informations d'en-tête d'un fichier d'image BMP ou JPEG.
Joshua Burns
Je suis trop tard pour ajouter une réponse, mais il y a ce livret en ligne C pour les programmes Python . De plus, les créateurs de "Learn programmer the hard way" réalisent un livre intitulé " Learn C the Hard Way ", qui s'adresse aux personnes qui connaissent déjà un peu le python ou similaire.
naught101

Réponses:

31

Ne vous découragez pas.

Python est un langage de programmation de haut niveau. Par rapport à C, il peut produire des merveilles dans une toute petite quantité de code. Ne commencez pas par essayer d'imiter les résultats Python en C - vous serez rapidement découragé. La programmation en C nécessite un style de pensée et de compréhension différent, car lorsque vous interagissez avec l'ordinateur à un niveau plus intime. Voici un bon point de départ pour apprendre C:

Livres

Matériel en ligne

JK
la source
1
Pouvez-vous suggérer un exercice de programmation? Quelque chose d'utile de préférence. Merci.
Honza Pokorny
12

Si vous voulez apprendre le C, ne commencez pas par vous connecter à Internet. Vous pouvez le faire dans n'importe quelle autre langue. Ce n'est pas ce qui est le plus important en C.

Au lieu de cela, jetez un oeil à des pointeurs, tableaux, références, struct dans ce C Tutorial . Cela vous aidera à comprendre la gestion de la mémoire et de nombreuses fonctionnalités qui "vous rapprochent de la machine".

Si vous pouvez apprendre et comprendre ce matériel, envisagez de vous étendre à un projet possible. Ces concepts sont fondamentaux pour toute véritable programmation C professionnelle.

Ce didacticiel sur les pointeurs semble également utile.

jmort253
la source
le C_Tutoriallien est rompu ...
user3768495
11

Il est très compliqué de se connecter à Internet! Penses-y:

  • Votre ordinateur peut avoir plusieurs façons de se connecter - WLAN, Bluetooth, Ethernet, etc. Chacun d'eux a ses propres paramètres, que vous devez définir. Vous avez de la chance qu'il existe déjà des normes et des pilotes pour ces derniers ... leur utilisation pourrait être beaucoup plus difficile qu'elle ne l'est déjà en ce moment.

  • Les adresses IP peuvent être IPv4 ou IPv6, et vous devez être capable de gérer les deux.

  • Il peut y avoir ou non des proxys configurés pour le système.

  • Vous devez prendre en charge FTP, HTTP ou tout autre protocole.

  • Vous devrez peut-être utiliser l'accès à distance, vous devez donc spécifier un répertoire téléphonique avec des mots de passe et des numéros de téléphone, si vous n'êtes pas déjà connecté. Idem avec les noms d'utilisateur / mots de passe WLAN.

  • Vous devrez peut-être travailler avec des cookies.

  • Le système peut mettre en cache certaines données. Voulez-vous utiliser le cache ou non?

Et la liste continue encore et encore.

Donc, le fait qu'il soit facile de les faire avec Python signifie nécessairement que beaucoup d'entre eux vous sont cachés (ou difficiles à définir), donc vous échangez la simplicité contre de la puissance. La bibliothèque C est l'opposé: elle a toute la puissance dont vous avez besoin (vous pouvez facilement effectuer des appels système), mais n'a pas de valeurs par défaut (ou, en fait, aucune fonctionnalité pour se connecter à Internet).

Au lieu de penser à C comme étant fastidieux, pensez-y comme étant puissant. Mais dans tous les cas, n'essayez pas de vous connecter à Internet avec - c'est une sacrément difficile à faire. Au lieu de cela, commencez à apprendre à utiliser la bibliothèque pour des tâches plus élémentaires (par exemple, les E / S de fichiers), découvrez comment les pointeurs et les tableaux fonctionnent réellement, et lorsque vous apprenez tout cela, puis essayez de vous attaquer à de gros projets. Vous apprécierez également Python de cette façon. :)


Modifier :

Je suggère personnellement que, si vous avez du temps libre, apprenez d'abord C # à la place. Dès que vous vous familiarisez avec celui-ci, commencez à en apprendre davantage sur le unsafemot - clé et à utiliser les pointeurs et à effectuer le marshaling en C #. Vous aurez toujours une très grande bibliothèque avec laquelle travailler, comme avec Python, mais vous pourrez faire beaucoup de choses que vous pouvez faire en C. Ensuite, passez manuellement aux API système appelantes (comme InternetOpen ), et apprenez comment les faire fonctionner. Vous aurez toujours beaucoup de flexibilité, mais vous obtiendrez une excellente introduction aux concepts de niveau inférieur. Après avoir fait cela, alors commencez à apprendre le C - alors vous le trouverez comme un morceau de gâteau, et vous verrez (C? l'obtenir?) les avantages et les inconvénients des langages de haut niveau et de bas niveau, et vous pourrez pour trouver celui qui correspond à vos besoins.

Cela dit, je pense qu'un cours intensif en C pourrait être utile comme point de départ pour sauter dans la mer C.

Mehrdad
la source
8

Ne lisez pas le code du noyau lorsque vous apprenez C. Il est plein d'astuces pour en tirer le dernier morceau de performance. Certains sont très non standard. Cela vous rendra fou.

Au lieu de cela, jetez un œil à quelques petits projets de haute qualité de code:

  • Lua - Si vous n'êtes pas intéressé par les langages de programmation, vous voudrez peut-être sauter celui-ci. Sinon, c'est vraiment un code magnifique et incroyable de voir tout ce qu'ils accomplissent avec si peu (quelque chose qui vous semble frustrant depuis que vous venez de Python).
  • ZeroMQ - J'adore ce projet. C'est une file d'attente de messages légère et ultra-rapide. Encore une fois, des trucs de haute qualité.
  • DarkHttpd - Un serveur Web de 2700 lignes en C. Couvre quelques sujets amusants comme la programmation de socket, l'analyse et l'utilisation de protocoles.
Scant Roger
la source
0

L'un des objectifs d'un langage de haut niveau est de cacher des choses compliquées. Si vous voulez apprendre une langue de niveau "inférieur" et que vous ne voulez pas commencer par des choses vraiment compliquées (qui vous étaient auparavant la plupart du temps cachées); essayez de commencer avec des projets d'apprentissage plus simples, de trier un tableau de nombres, ou d'inverser une chaîne de caractères, ou d'autres ...

Il est plus facile de monter une colline escarpée en faisant de petits pas.

hotpaw2
la source
-3

En ce qui concerne les projets sympas à regarder: les noyaux Unix sont écrits en C.

Edward Strange
la source
Vouliez-vous ajouter un lien?
jmort253
-3

Apprenez d'abord la grammaire C, puis utilisez-la pour écrire la structure des données et l'algorithme. Bien sûr, vous pouvez lire le noyau Linux en tant que expert en langage c.

Salut 福气 鱼
la source