Nauka programowania w języku C (pochodzącym z języka Python) [zamknięte]

22

Jeśli to niewłaściwe miejsce do zadawania tego pytania, daj mi znać.

Z zawodu jestem programistą Python. Bardzo chciałbym nauczyć się C. Rzeczywiście, próbowałem wiele razy, ale zawsze mnie zniechęcają. W Pythonie piszesz kilka wierszy, a program robi cuda. W C nie mogę zrobić nic przydatnego.

Połączenie z Internetem wydaje się bardzo skomplikowane.

Czy masz jakieś sugestie dotyczące tego, co mogę zrobić, aby nauczyć się języka C? Czy są jakieś dobre strony internetowe? Jakieś fajne projekty?

Dzięki

Honza Pokorny
źródło
4
Fajnie jest móc stać na genialnych barkach, prawda? Tłumacz języka Python napisano w C. Teraz naprawdę doceniasz to, co naprawdę zrobili projektanci. To niesamowity palec.
Pemdas
@Pemdas C jest zwykle używany do tworzenia programów systemowych.
Searock
Czy mogę polecić zacząć od przeczytania zawartości pliku i wykonania podstawowej transformacji do innego pliku? Przykład: Weź plik CSV i przeanalizuj go w pliku rozdzielanym tabulatorami. Możesz także dowiedzieć się, jak odczytać informacje nagłówka z BMP pliku obrazu JPEG.
Joshua Burns
Jestem spóźniony, aby dodać odpowiedź, ale jest to internetowa broszura C for Python Programs . Twórcy „Naucz się programować na twardo” opracowują książkę zatytułowaną „ Naucz się ciężko ”, która jest skierowana do osób, które już znają trochę języka Python lub podobnego.
naught101

Odpowiedzi:

31

Nie zniechęcaj się.

Python jest językiem programowania wysokiego poziomu. W porównaniu do C potrafi tworzyć cuda w niewielkiej ilości kodu. Nie zaczynaj od próby naśladowania wyników Pythona w C - natychmiast zostaniesz zniechęcony. Programowanie w C wymaga innego stylu myślenia i zrozumienia, ponieważ podczas interakcji z komputerem na bardziej intymnym poziomie. Oto dobry punkt wyjścia do nauki C:

Książki

Materiał online

JK
źródło
1
Czy możesz zasugerować ćwiczenie z programowania? Coś przydatnego najlepiej. Dzięki.
Honza Pokorny
12

Jeśli chcesz nauczyć się języka C, nie zaczynaj od połączenia z Internetem. Możesz to zrobić w dowolnym innym języku. To nie jest najważniejsze w C.

Zamiast spojrzeć na wskaźniki, tablic, referencje, w tym elemencie C Tutorial . Pomoże Ci to zrozumieć zarządzanie pamięcią i wiele funkcji, które „przybliżają cię do maszyny”.

Jeśli możesz nauczyć się i zrozumieć ten materiał, przyjrzyj się, jak rozwinąć się w możliwy projekt. Te koncepcje są podstawą każdego profesjonalnego programowania w języku C.

Ten samouczek ze wskaźnikami również wydaje się pomocny.

jmort253
źródło
C_Tutoriallink jest uszkodzony ...
user3768495
11

To jest bardzo skomplikowane, aby połączyć się z internetem! Pomyśl o tym:

  • Komputer może mieć wiele sposobów łączenia - WLAN, Bluetooth, Ethernet itp. Każde z nich ma własne ustawienia, które należy ustawić. Masz szczęście, że istnieją już standardy i sterowniki dla tych ... korzystanie z nich może być o wiele trudniejsze niż jest teraz.

  • Adresami IP mogą być IPv4 lub IPv6 i musisz być w stanie obsłużyć oba.

  • W systemie mogą być skonfigurowane serwery proxy.

  • Musisz obsługiwać FTP, HTTP lub inny protokół.

  • Może być konieczne użycie połączenia dial-up, więc musisz podać książkę telefoniczną z hasłami i numerami telefonów, jeśli nie masz jeszcze połączenia. To samo dotyczy nazw użytkowników / haseł WLAN.

  • Być może będziesz musiał pracować z plikami cookie.

  • System może buforować niektóre dane, więc chcesz użyć pamięci podręcznej, czy nie?

A lista jest długa.

Tak więc fakt, że łatwo to zrobić za pomocą Pythona, oznacza, że ​​wiele z nich jest przed tobą ukrytych (lub trudnych do ustawienia), więc zamieniasz prostotę na moc. Biblioteka C jest odwrotna: ma całą moc, której potrzebujesz (możesz łatwo wykonywać wywołania systemowe), ale nie ma żadnych ustawień domyślnych (ani, w rzeczywistości, żadnych funkcji łączenia się z Internetem).

Zamiast myśleć o C jako nużącym, pomyśl o tym, że jest potężny. Ale w każdym razie nie próbuj się z nim łączyć z Internetem - to cholernie trudne zadanie. Zamiast rozpocząć uczenie się, jak korzystać z biblioteki do bardziej podstawowych zadań (np plik I / O), dowiedzieć się, jak wskaźniki i tablice naprawdę działa, a gdy nauczysz się tych wszystkich, następnie spróbuj rozwiązywaniu dużych projektów. W ten sposób docenisz także Python. :)


Edytuj :

Osobiście sugeruję, że jeśli masz wolny czas, najpierw naucz się języka C #. Gdy tylko poczujesz się komfortowo, zacznij uczyć się o tym unsafesłowie kluczowym i jak korzystać ze wskaźników i przeprowadzać marshaling w C #. Nadal będziesz mieć naprawdę dużą bibliotekę do pracy, tak jak w Pythonie, ale będziesz mógł robić wiele rzeczy, które możesz zrobić w C. Następnie przejdź do ręcznego wywoływania API systemu (np. InternetOpen ) i naucz się jak sprawić, by działały. Nadal będziesz mieć dużą elastyczność, ale otrzymasz świetne wprowadzenie do koncepcji niższego poziomu. Po wykonaniu tych, następnie rozpocznij naukę C - wtedy okaże się, że to bułka z masłem, a zobaczysz (C? rozumiesz?) zalety i wady języków wysokiego i niskiego poziomu, i będziesz w stanie znaleźć ten, który odpowiada Twoim potrzebom.

To powiedziawszy, myślę, że A Crash Course w C może być przydatny jako punkt wyjścia do skoku do morza C.

Mehrdad
źródło
8

Nie czytaj kodu jądra podczas nauki C. Jest pełen sztuczek, aby wycisnąć z niego każdą ostatnią wydajność. Niektóre z nich są bardzo niestandardowe. Doprowadzi cię to do szaleństwa.

Zamiast tego spójrz na kilka małych projektów o wysokiej jakości kodu:

  • Lua - jeśli nie interesują Cię języki programowania, możesz pominąć ten. W przeciwnym razie jest to naprawdę piękny kod i niesamowite zobaczyć, jak wiele osiągają przy tak małym nakładzie (coś, co wydaje się frustrujące, skoro pochodzisz z Pythona).
  • ZeroMQ - Uwielbiam ten projekt. To lekka, superszybka kolejka wiadomości. Ponownie, wysokiej jakości rzeczy.
  • DarkHttpd - serwer WWW linii 2700 w C. Obejmuje kilka zabawnych tematów, takich jak programowanie gniazd, parsowanie i praca z protokołami.
Scant Roger
źródło
0

Jednym z celów języka wyższego poziomu jest ukrywanie skomplikowanych rzeczy. Jeśli chcesz nauczyć się języka „niższego” poziomu i nie chcesz zaczynać od naprawdę skomplikowanych rzeczy (które wcześniej były głównie przed tobą ukryte); spróbuj rozpocząć od prostszych projektów edukacyjnych, sortuj tablicę liczb lub odwróć ciąg znaków lub kilka takich ...

Łatwiej jest wspiąć się na strome wzgórze, stawiając małe kroki.

hotpaw2
źródło
-3

Jeśli chodzi o fajne projekty do obejrzenia: jądra uniksowe są napisane w C.

Edward Strange
źródło
Czy chciałeś dodać link?
jmort253
-3

Naucz się gramatyki C najpierw, a następnie użyj jej do napisania struktury danych i algorytmu. Oczywiście możesz czytać jądro Linuksa jako ekspert języka C.

Cześć 福气 鱼
źródło