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


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


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.


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.


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.

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.



-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.