2009-07-21 46 views
12

Tôi là lập trình viên C# và tôi được bán vì lợi ích của việc học C. Tôi muốn nâng cao kiến ​​thức về hệ điều hành và CPU cơ bản, hiểu nỗi đau của quản lý bộ nhớ rằng bộ sưu tập rác đóng gói đi và nói chung cải thiện các chương trình cấp độ nhờ sự đánh giá cao các vấn đề cấp thấp mà trình biên dịch đang xử lý thay cho tôi.Mất bao lâu để học C?

Câu hỏi của tôi là bao lâu tôi có thể mong đợi để chi tiêu học ngôn ngữ C để đạt được những lợi ích này?

Có phải một vài ngày cuối tuần đã đọc sách K & R từ bìa để trang trải đầy đủ hay tôi có cần lập lịch để cắt một số mã không? Tôi có cần phải dành nhiều thời gian vào bất kỳ thư viện nào, hoặc là một sự hiểu biết về các khái niệm bậc nhất trong ngôn ngữ đủ để cải thiện mã C# của tôi?

Để rõ ràng, tôi không có ý định viết bất kỳ chương trình quan trọng nào trong C. Mục tiêu của tôi là tìm hiểu thêm từ ngôn ngữ để trở thành chuyên gia về ngôn ngữ.

+8

Học c không có nhiều mối quan hệ với chi tiết hệ điều hành học như bạn nghĩ. –

+0

@arsane: Quan sát thú vị và một trong đó sẽ là chủ đề của một câu hỏi sắp tới :) – wildcard

+0

@ wildcard: Thực sự, hệ điều hành nguyên thủy chỉ có một giao diện kiểu C, không có gì hơn. Mã để sử dụng WinAPI trông rất giống trong Object Pascal (Delphi) và C. – sharptooth

Trả lời

21

Đọc sách K & R và không viết mã giống như đọc sách về vũ khí và không bao giờ thực sự quay. Có, bạn đã đọc trong một cuốn sách, rằng nó hoạt động theo cách này, nhưng bạn chưa bao giờ gặp phải các vấn đề điển hình phát sinh trong khi thực hiện việc này. Nếu không thực hành như vậy "knowlegde" có giá trị rất ít.

Lập kế hoạch dành 2-3 năm từ từ viết các chương trình nhỏ để giải quyết các tác vụ khác nhau trong C. Điều này sẽ được tính là experince thực. C cung cấp sự hài lòng trì hoãn cho nỗ lực của bạn.

+3

mà tôi sẽ thêm: Chìa khóa ở đây là tìm một dự án nhỏ bạn muốn làm và làm tất cả từ đầu, học toàn bộ con đường. Không chạy qua mã mẫu của người khác. Và đừng làm cho nó đơn giản đến nỗi bạn không phải sử dụng nhiều con trỏ ;-) –

+1

@Dave: Tốt hơn là không có gì, nhưng điều này sẽ chỉ giúp bạn nắm vững một phần rất nhỏ C. Để có được trải nghiệm thực sự xứng đáng bạn cần phải xoay xở một số nhiệm vụ khác nhau. – sharptooth

+1

C thực sự không phải là khó khăn. Tôi đã đọc K & R sau vài ngày, và chương trình đầu tiên tôi làm việc sau đó là một bộ lọc để in các chương trình APL trên máy in UNIX - điều đó đã khiến tôi mất khoảng 5 ngày. Tôi muốn phân loại bản thân mình với tư cách là chuyên gia C89, và tôi nghĩ tôi đã đạt được tất cả chuyên môn đó trong khoảng 6 tháng. –

7

Tôi không biết phải mất bao lâu để học một ngôn ngữ - có thể là do cá nhân. Nhưng tôi khá tự tin rằng bạn không thể học một mà không cần viết và gỡ lỗi mã trong đó.

1

Tôi đọc bìa sách K & R để che và sẽ không nói rằng tôi có bất kỳ sự hiểu biết tuyệt vời nào về C. Một số thời gian thực hiện các bài tập trong K & R sẽ cực kỳ có lợi.

Tôi chắc rằng thư viện C sẽ giúp bạn viết chương trình hiệu quả hơn, nhưng nếu đơn giản là học C bạn quan tâm, thì bạn có thể tự mình thực hiện bất kỳ thứ gì mình cần. www.projecteuler.net là một nguồn tốt của vấn đề (mặc dù hơi toán học nói chung) để bạn có thể bắt đầu, nếu bạn ưa thích thử một số mã hóa bên ngoài các bài tập K^R.

3

Nếu bạn có thể đọc K & R và hiểu tất cả, đó là khá tốt, như K & R bao gồm khá nhiều tất cả các ngôn ngữ.

Tuy nhiên, đọc và hiểu tất cả đều rất khác nhau. Có lẽ bạn nên thực hiện một vài bước qua K & R và thực hiện tất cả các bài tập liên quan để đảm bảo bạn thực sự biết.

Ngay cả sau khi đọc qua tất cả những điều đó, bạn sẽ dành nhiều tháng học con trỏ một cách khó khăn hơn. Mong đợi rất nhiều lỗi seg. Về mặt cộng, mặc dù, bạn sẽ nhận được thực sự tốt lúc đọc hex!

Có một vài lưu ý rằng ngôn ngữ mà bạn cũng sẽ tìm thấy. Một trong đó được sử dụng để cho tôi gặp rắc rối là tất cả các con trỏ có cùng kích thước (4 byte trên x86), bất kể những gì chúng trỏ vào. Một char * có cùng kích thước như void * và int *.

+1

Nhưng ngay cả sau khi "hoàn thành C", bạn sẽ không phải là một bậc thầy. Cuốn sách K & R là một điểm khởi đầu tuyệt vời, nhưng trừ khi bạn tự đào sâu hơn, vẫn còn rất nhiều việc phải làm. Nhưng nó giống như vậy với bất kỳ ngôn ngữ nào. –

+0

Hài hước ... giáo sư của tôi tại trường đại học (C lập trình lớp) được xác định "dị giáo" cuốn sách K & R bởi vì, theo ý kiến ​​của mình, nó chứa rất nhiều lỗi (ví dụ: nếu bộ nhớ phục vụ tôi tốt, tôi tìm thấy một sự khác biệt so sánh các mã thoát của một số hàm strtoX). Đề xuất của ông (có phần chính xác): đọc các sách khác, bao gồm các tiêu chuẩn chính thức của C89/C99. –

+0

@Giani Amyone có thể nói những thứ như thế, nhưng người ta tự hỏi có bao nhiêu sự tin tưởng để trao cho nó khi họ sử dụng các thuật ngữ như "mã thoát" - C không có khái niệm như vậy. –

31

C sẽ mất một tuần để tìm hiểu và có thời gian để làm chủ.

+4

Đó là sự thật, nhưng chỉ vì họ tiếp tục thay đổi nó! –

+0

@Neil Butterworth, C bị thay đổi như thế nào? –

+0

Ba biến thể hoàn toàn khác nhau cho đến nay: K & R C, C89 (aka ANSI C) và C99. –

0

Trong một vài ngày cuối tuần, bạn sẽ có được chủ yếu là hai kết quả:

  1. hello world
  2. rất nhiều lỗi segmentation

C là không dễ dàng, đặc biệt là nếu bạn không sử dụng khái niệm hardcore của nó. Bạn sẽ phải đầu tư hàng tuần, thậm chí hàng tháng trong việc mò mẫm với nó, để nắm bắt được bản chất tối nghĩa nhất (nhưng vẫn không quá nhiều).

+2

C thật dễ dàng. Đó có lẽ là ngôn ngữ đơn giản nhất mà tôi từng học, ngoài BASIC kiểu Dartmouth cũ. Các ngôn ngữ như Python, Java, vv phức tạp hơn nhiều. –

+0

Có và không. Cú pháp thực sự dễ dàng. đó là thủ tục và bạn có một số lượng hạn chế các kiểu dữ liệu. Tuy nhiên, khi bạn đi sâu vào con trỏ, và con trỏ của con trỏ và typedefs, và bắt đầu đi qua mảng xung quanh, sau đó nó được lộn xộn. Đó là những gì tôi đang đề cập đến –

+3

Con trỏ thực sự, thực sự dễ dàng. Tôi đã đào tạo hàng trăm lập trình viên trong C và con trỏ. Một số ít (có lẽ 2?) Có vấn đề với con trỏ, nhưng chúng cũng có vấn đề với khái niệm về vòng lặp, chức năng, v.v. –

3

Bạn chắc chắn cần phải viết một số mã - Tôi không tin bạn có thể học ngôn ngữ nào mà không cần làm điều đó. K & R có rất nhiều bài tập bạn có thể thực hành. Thật khó để biết được thời gian trôi qua trong bao lâu để đạt được kiến ​​thức làm việc tốt - tôi đã từng dạy khá nhiều ngôn ngữ trong 4.5 ngày, nhưng điều đó khá chuyên sâu. Tôi muốn đề nghị khoảng một tháng, nếu bạn đang làm một giờ hoặc hơn một ngày.

Chỉnh sửa: Tôi phải thừa nhận, tôi thấy có chút thất vọng khiến rất nhiều người nghĩ C rất khó. K & R dài 272 trang, trong bản sao của tôi và bao gồm mọi thứ bạn cần biết, bao gồm thư viện chuẩn. Có cuốn sách trong BẤT CỨ ngôn ngữ lập trình khác bao gồm toàn bộ shebang vì vậy ngắn gọn? Tôi không nghĩ như vậy, và lý do không phải là K & R được nén theo một cách nào đó (Brian Kernighan là nhà văn công nghệ lớn nhất, IMHO) nhưng ngôn ngữ đơn giản và dễ mô tả.

0

40 ngày và 40 đêm.

Nếu bạn không thể thực hiện ngày và đêm theo tuần tự, thì sẽ là 42 ngày cuối tuần.

Nhưng nghiêm túc, không đưa ra bất kỳ bối cảnh nào về tốc độ học các chủ đề khác, không ai có thể cung cấp cho bạn câu trả lời thực sự có liên quan đến bạn. Chúng ta có thể nói chúng ta mất bao lâu để học nó đến mức thỏa mãn, nhưng điều đó không có tương quan với việc phải mất bao lâu để học nó.

Nếu bạn nói bạn mất 6 tháng để làm việc tốt tại C#, thì có lẽ chúng tôi có thể nói bạn sẽ mất 6 tháng * X (trong đó X vẫn là phỏng đoán nhưng dự đoán tốt hơn bây giờ).

Chúng ta đều có thể đồng ý, tuy nhiên, chỉ đọc sách là không đủ. Tất nhiên bạn sẽ phải viết mã. Đó là cách chúng ta học tốt nhất mọi thứ - đọc nó, viết nó, dạy nó. Nếu bạn thực sự muốn học điều gì đó, hãy dạy nó.

+0

Tôi xem xét bao gồm một số nền tảng cá nhân bổ sung trong câu hỏi vì lý do chính xác này. Tôi quyết định chống lại nó bởi vì các câu trả lời sau đó sẽ được cụ thể cho tôi và ít thường áp dụng. Bằng cách bỏ qua ngữ cảnh, tôi nghĩ hầu hết người trả lời đều giả định một nhà phát triển có thẩm quyền hợp lý và trả lời cho phù hợp. – wildcard

+0

Vâng, nhưng sau đó chúng tôi giả định về trường hợp trung bình và cung cấp cho bạn không có câu trả lời thực sự. Về cơ bản, nó tóm lại cho chúng tôi trả lời "Tôi nên làm gì để tìm hiểu nó" thay vì "mất bao lâu tôi * để học nó". Ý tôi là, nó là một câu trả lời rộng đến mức nó không phải là câu trả lời. –

2

Sẽ mất nhiều thời gian hơn nếu bạn chỉ ngồi quanh hỏi những câu hỏi trừu tượng và không thực sự lặn vào và làm việc đó. Bạn có thời hạn không? Mất bao lâu để tôi học piano? Ai quan tâm, tôi chỉ muốn làm ồn. Đó là cách trẻ em học rất nhanh. Họ không quan tâm đến việc trở thành một chuyên gia, hoặc thậm chí tốt. Họ chỉ thích chơi.

Trong mọi trường hợp, nếu bạn muốn tìm hiểu một số điều thú vị, hãy thử một số công cụ lắp ráp. Rất nhiều người thực sự ghét nó, nhưng đó chỉ là vì họ không thích chi tiêu vô số giờ không hoàn thành nhiều. Tôi thích nó.

+1

"họ không thích chi tiêu vô số giờ không hoàn thành nhiều. Tôi thích nó chỉ là tốt." Trích dẫn hay. – samoz

0

Để hiểu nỗi đau của quản lý bộ nhớ chỉ đang viết các chương trình mẫu với ngăn xếp, danh sách liên kết, cây nhị phân, v.v. Bạn sẽ thấy những gì bạn đang tham gia.

Ở trường tôi được dạy C làm ngôn ngữ giới thiệu và khi con trỏ được giới thiệu, toàn bộ các cá nhân đã bỏ lớp học bởi vì thực ra đó là một khái niệm khó nắm bắt.

Như nhiều câu trả lời khác đã nêu ... Kế hoạch không chỉ đọc mà còn thực hành. Không có nghi ngờ rằng bạn đã không học được rất nhiều từ C# bởi chỉ cần làm cho những sai lầm trong khi mã hóa và có 'aha!' khoảnh khắc.

IMO: 3 đến 4 năm để thực sự hiểu phần lớn các khái niệm. Một cuốn sách sẽ giúp bạn nhận ra khả năng của ngôn ngữ là gì.

Các vấn đề liên quan