Học lập trình bằng C (đến từ Python) [đã đóng]


22

Nếu đây là nơi sai để đặt câu hỏi này, xin vui lòng cho tôi biết.

Tôi là một lập trình viên Python theo nghề nghiệp. Tôi rất thích học C. Thật vậy, tôi đã cố gắng nhiều lần, nhưng tôi luôn cảm thấy nản lòng. Trong Python, bạn viết một vài dòng và chương trình làm nên điều kỳ diệu. Trong C, tôi dường như không thể làm bất cứ điều gì hữu ích.

Nó dường như rất phức tạp để thậm chí kết nối với Internet.

Bạn có gợi ý nào về những gì tôi có thể làm để học C không? Có bất kỳ trang web tốt? Bất kỳ dự án mát mẻ?

Cảm ơn


4
Thật tuyệt khi có thể đứng trên vai của thiên tài phải không. Trình thông dịch Python được viết bằng C. Bây giờ bạn có một sự đánh giá đúng cho những gì các nhà thiết kế thực sự đã làm. Đó là ngón tay đẹp tuyệt vời.
Pemdas

@Pemdas C thường được sử dụng để tạo các chương trình hệ thống.
Searock

Tôi có thể khuyên bạn nên bắt đầu bằng cách đọc nội dung của một tệp và có thể thực hiện một số chuyển đổi cơ bản sang tệp khác không? Ví dụ: Lấy một CSV và phân tích nó thành một tệp được phân định bằng tab. Thay phiên, bạn có thể tìm hiểu cách đọc thông tin tiêu đề trong tệp BMP của tệp hình ảnh JPEG.
Joshua Burns

Tôi đến trễ để thêm câu trả lời, nhưng có tập sách C cho Chương trình Python trực tuyến này . Ngoài ra, các nhà sản xuất "Học lập trình theo cách khó" đang tạo ra một cuốn sách có tên " Học C theo cách khó ", nhằm vào những người đã biết một chút về con trăn hoặc tương tự.
ness101

Câu trả lời:


31

Đừng nản lòng.

Python là ngôn ngữ lập trình cấp cao. So với C, nó có thể tạo ra những điều kỳ diệu trong một lượng nhỏ mã. Đừng bắt đầu bằng cách bắt chước các kết quả Python trong C - bạn sẽ nhanh chóng chán nản. Lập trình trong C đòi hỏi một phong cách suy nghĩ và hiểu biết khác nhau vì khi bạn tương tác với máy tính ở mức độ thân mật hơn. Đây là một điểm khởi đầu tốt để học C:

Sách

Tài liệu trực tuyến


1
Bạn có thể đề nghị một bài tập lập trình? Một cái gì đó hữu ích tốt nhất. Cảm ơn.
Honza Pokorny

12

Nếu bạn muốn học C, đừng bắt đầu với việc kết nối Internet. Bạn có thể làm điều đó trong bất kỳ ngôn ngữ khác. Đó không phải là điều quan trọng nhất ở C.

Thay vào đó, hãy xem các con trỏ, mảng, tài liệu tham khảo, cấu trúc trong Hướng dẫn C này . Điều này sẽ giúp bạn hiểu về quản lý bộ nhớ và nhiều tính năng "đưa bạn đến gần với máy hơn".

Nếu bạn có thể tìm hiểu và hiểu tài liệu này, thì hãy xem xét mở rộng thành một dự án khả thi. Những khái niệm này là cơ bản cho bất kỳ lập trình C chuyên nghiệp thực sự.

Hướng dẫn con trỏ này trông cũng hữu ích.


các C_Tutorialliên kết bị hỏng ...
user3768495

11

rất phức tạp để kết nối với internet! Hãy suy nghĩ về nó:

  • Máy tính của bạn có thể có nhiều cách kết nối - WLAN, Bluetooth, Ethernet, v.v ... Mỗi cách đều có cài đặt riêng, bạn cần cài đặt. Bạn thật may mắn vì đã có các tiêu chuẩn và trình điều khiển cho việc này ... sử dụng chúng có thể khó hơn rất nhiều so với hiện tại.

  • Địa chỉ IP có thể là IPv4 hoặc IPv6 và bạn cần có khả năng xử lý cả hai.

  • Có thể có hoặc không có proxy được cấu hình cho hệ thống.

  • Bạn phải hỗ trợ FTP, HTTP hoặc một số giao thức khác.

  • Bạn có thể cần sử dụng quay số, vì vậy bạn phải chỉ định một danh bạ điện thoại có mật khẩu và số điện thoại, nếu bạn chưa kết nối. Ditto với tên người dùng / mật khẩu WLAN.

  • Bạn có thể cần phải làm việc với cookie.

  • Hệ thống có thể lưu trữ một số dữ liệu, vậy bạn có muốn sử dụng bộ đệm hay không?

Và danh sách cứ tiếp tục dài.

Vì vậy, thực tế là dễ dàng thực hiện những điều này với Python nhất thiết có nghĩa là rất nhiều trong số này bị ẩn khỏi bạn (hoặc khó cài đặt), vì vậy bạn đánh đổi sự đơn giản để lấy sức mạnh. Thư viện C thì ngược lại: nó có tất cả sức mạnh bạn cần (bạn có thể dễ dàng thực hiện các cuộc gọi hệ thống), nhưng không có bất kỳ mặc định nào (hoặc trên thực tế, bất kỳ tính năng nào để kết nối với internet).

Thay vì nghĩ về C là tẻ nhạt, hãy nghĩ về nó như là mạnh mẽ. Nhưng trong mọi trường hợp, đừng cố kết nối internet với nó - đó là một điều khá khó thực hiện. Thay vào đó, hãy bắt đầu học cách sử dụng thư viện cho các tác vụ cơ bản hơn (ví dụ: tệp I / O), tìm hiểu về cách con trỏ và mảng thực sự hoạt động và khi bạn tìm hiểu tất cả những thứ đó, sau đó thử xử lý các dự án lớn. Bạn cũng sẽ đánh giá cao Python hơn theo cách đó. :)


Chỉnh sửa :

Cá nhân tôi đề nghị rằng, nếu bạn có thời gian rảnh, hãy học C # trước. Ngay khi bạn cảm thấy thoải mái với nó, hãy bắt đầu tìm hiểu về unsafetừ khóa và cách sử dụng con trỏ và thực hiện việc sắp xếp theo thứ tự trong C #. Bạn vẫn sẽ có một thư viện thực sự lớn để làm việc, như với Python, nhưng bạn sẽ có thể thực hiện rất nhiều việc bạn có thể làm trong C. Sau đó chuyển sang API hệ thống gọi thủ công (như InternetOpen ) và tìm hiểu Làm thế nào để có được những người làm việc. Bạn vẫn sẽ có rất nhiều sự linh hoạt nhưng bạn sẽ có được một giới thiệu tuyệt vời về các khái niệm cấp thấp hơn. Sau khi bạn đã làm xong, sau đó bắt đầu học C - sau đó bạn sẽ thấy nó là một miếng bánh và bạn sẽ thấy (C? hiểu không?) những lợi thế và bất lợi của ngôn ngữ cấp cao và cấp thấp, và bạn sẽ có thể để tìm một trong những phù hợp với nhu cầu của bạn.

Điều đó nói rằng, tôi nghĩ rằng một khóa học sụp đổ ở C có thể hữu ích như một điểm khởi đầu để nhảy xuống biển C.


8

Đừng đọc mã hạt nhân khi bạn học C. Có rất nhiều thủ thuật để loại bỏ mọi hiệu suất cuối cùng ra khỏi nó. Một số trong đó là rất không chuẩn. Nó sẽ khiến bạn phát điên.

Thay vào đó, hãy xem một vài dự án nhỏ, chất lượng mã cao:

  • Lua - Nếu bạn không quan tâm đến ngôn ngữ lập trình, bạn có thể muốn bỏ qua ngôn ngữ này. Mặt khác, nó thực sự là mã đẹp và đáng kinh ngạc khi thấy họ đạt được bao nhiêu với rất ít (điều mà bạn có vẻ bực bội vì bạn đến từ Python).
  • ZeroMQ - Tôi thích dự án này. Đó là một hàng đợi tin nhắn siêu nhẹ, siêu nhanh. Một lần nữa, công cụ chất lượng cao.
  • DarkHttpd - Một máy chủ web 2700 dòng C. Bao gồm một vài chủ đề thú vị như lập trình ổ cắm, phân tích cú pháp và làm việc với các giao thức.

0

Một mục đích của ngôn ngữ cấp cao hơn là để che giấu những điều phức tạp. Nếu bạn muốn học một ngôn ngữ cấp độ "thấp hơn" và không muốn bắt đầu với những thứ thực sự phức tạp (trước đây chủ yếu được ẩn giấu khỏi bạn); hãy thử bắt đầu với một số dự án học tập đơn giản hơn, sắp xếp một dãy số hoặc đảo ngược một chuỗi ký tự hoặc một số ...

Đi lên một ngọn đồi dốc sẽ dễ dàng hơn bằng cách bước những bước nhỏ.


-3

Theo như các dự án tuyệt vời để xem xét: hạt nhân Unix được viết bằng C.


Ý của bạn là thêm một liên kết?
jmort253

-3

Học ngữ pháp C trước, sau đó sử dụng nó để viết cấu trúc dữ liệu và thuật toán. Tất nhiên bạn có thể đọc nhân Linux như ngôn ngữ chuyên gia c.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.