Tôi không biết C. Và tại sao tôi nên học nó? [đóng cửa]


58

Ngôn ngữ lập trình đầu tiên của tôi là PHP ( gasp ). Sau đó tôi bắt đầu làm việc với JavaScript. Gần đây tôi đã hoàn thành công việc trong C #.

Tôi chưa bao giờ nhìn vào các ngôn ngữ cấp thấp hoặc trung bình như C.

Sự đồng thuận chung trong cộng đồng lập trình nói chung là "một lập trình viên chưa học được điều gì đó như C, thật lòng, không thể xử lý các khái niệm lập trình như con trỏ, kiểu dữ liệu, truyền giá trị bằng cách tham chiếu, v.v."

Tôi không đồng ý Tôi lập luận rằng:

  1. Bởi vì các ngôn ngữ cấp cao có thể dễ dàng truy cập, nhiều "người không lập trình" hơn đã lao vào và gây rối
  2. Để thực sự đạt được bất cứ điều gì được thực hiện bằng ngôn ngữ cấp cao, người ta cần phải hiểu các khái niệm tương tự mà hầu hết những người đề xướng "truyền giáo cấp thấp trước tiên" truyền giáo.

Một số người cần biết C; những người đó có công việc yêu cầu họ viết mã từ thấp đến trung cấp. Tôi chắc chắn C rất tuyệt vời và tôi chắc chắn có một vài lập trình viên xấu biết C.

Vì sao thiên vị? Là một lập trình viên giỏi, trung thực, đói, nếu tôi phải học C (vì một lý do không lường trước được), tôi sẽ học C. Xem xét vô số ngôn ngữ ngoài kia, các lập trình viên giỏi có nên tập trung vào việc học những gì tiến bộ chúng ta không? Chúng ta không nên tìm hiểu những gì chúng ta quan tâm? Chúng ta không nên sử dụng thời gian hữu hạn của chúng tôi di chuyển về phía trước ? Tại sao một số lập trình viên không đồng ý với điều này?

Tôi tin rằng phấn đấu cho sự xuất sắc trong những gì bạn làm là đặc điểm quyết định cơ bản giữa những lập trình viên giỏi và những người xấu.

Có ai có bất kỳ ví dụ thực tế nào về cách một thứ được viết bằng ngôn ngữ cấp cao mà nói Java, Pascal, PHP hoặc JavaScript không thực sự được hưởng lợi từ kiến ​​thức trước về C không? Ví dụ sẽ được đánh giá cao nhất.


@Stephen Oh, xin lỗi ... tôi hiểu lầm. (nhưng bạn có thấy tại sao bạn cần học c / c ++ không?)
ApprenticeHacker

1
@burningprodigy Vâng, trong trường hợp tôi cần phải làm một cái gì đó trong đó yêu cầu C / C ++, hoặc có ý nghĩa nhất, tất nhiên tôi sẽ học C. Thịt bò của tôi là với những người nói rằng bạn cần học C để có thể có hiệu quả phát triển ngôn ngữ cấp cao. Và đó là điều vô lý.
Stephen


bạn có thể cho chúng tôi một số ngữ cảnh (url) trong đó "không thể xử lý các khái niệm lập trình như con trỏ ..." đến từ đâu không?
k3b

Nếu có một ngôn ngữ tôi muốn tôi có thể học, đó sẽ là Common Lisp, không phải C. Là chủ yếu là nhà phát triển C #, tôi chắc chắn tôi sẽ được hưởng lợi nhiều hơn từ nó. Chúng tôi đã có con trỏ trong C #. Hầu hết, tôi thà tìm hiểu nhiều cách tiếp cận vấn đề hơn là cố gắng thực hiện giải pháp tương tự của mình theo cách khó khăn hơn. (Cũng giống như một ghi chú, tôi nửa nằm tôi đã thực hiện một số C, và tôi biết rằng nó có những ưu điểm của nó chỉ muốn cung cấp tín dụng cho một ngôn ngữ vô cùng mạnh mẽ và biểu cảm mà có trước C bởi một thập kỷ...)
Magus

Câu trả lời:


113

Lợi thế để biết C là bạn có một ý tưởng rất tốt về cách một máy tính hoạt động. Không chỉ là cách mô hình lập trình của bạn hoạt động, mà còn là cách bộ nhớ được sắp xếp và tương tự.

Cấp độ duy nhất dưới C là lắp ráp được nói bởi một CPU cụ thể.

(Tôi nói thêm rằng việc biết C cũng cho phép bạn đánh giá cao việc bạn phải làm ít hơn bao nhiêu trong ngôn ngữ cấp cao hơn. Và hy vọng sự đánh giá cao về chi phí liên quan đến việc làm việc trong ngôn ngữ cấp cao hơn đó.)


12
Frank: Bạn đánh vào đầu đinh. Hiểu cách máy tính hoạt động, quản lý và phân bổ bộ nhớ cùng với ý tưởng rằng bạn có thể đánh giá cao hơn các ngôn ngữ cấp cao hơn là lý do để học C. Tôi may mắn chúng tôi đã phải học C để thực hiện các dự án lớp như triển khai lớp TCP cơ bản qua UDP .
Chris

12
Tôi đồng ý với điều này, mặc dù: C chỉ đưa bạn đến một vài bước gần hơn với rễ cỏ, không phải tất cả các cách để xuống đất. Ok, có một thứ gọi là bố trí bộ nhớ. Nhưng nó có nghĩa là gì về thể chất? Bạn có hiểu máy tính hoạt động như thế nào nếu bạn không hiểu về điện tử? Cơ lượng tử? Và như vậy. Tôi không chắc có một tâm trí duy nhất trên thế giới hiểu sâu sắc toàn bộ chuỗi thức ăn từ một ngôn ngữ cấp cao, thông qua C, cho đến cơ học lượng tử.
Joonas Pulakka

14
Câu hỏi của tôi là làm thế nào bạn có thể hưởng lợi từ việc biết làm thế nào một máy tính hoạt động nội bộ? Bạn đang đạt được gì? Đánh giá cao những gì bạn có bây giờ không phải là lý do chính đáng để học một ngôn ngữ cấp độ thấp như C. Nó giống như nói rằng tôi nên học Fortran để đánh giá cao những gì tôi có bây giờ
TheLQ

18
@TheLQ Tôi không nói nên lời. Làm thế nào bạn có thể hưởng lợi từ việc biết làm thế nào một máy tính hoạt động nội bộ? Bạn đang hiểu rõ hơn về những gì bạn đang làm, là những gì bạn đang đạt được. Thay vào đó: bạn đang học những gì bạn thực sự đang làm với máy ngay từ đầu.
Frank Shearar

15
Tôi sẽ đánh dấu điều này là chính xác, vì nó dường như là câu trả lời yêu thích. Điều đó nói rằng, tôi không thực sự quan tâm "làm thế nào một máy tính hoạt động" ở mức cơ bản, vì nó thực sự không giúp tôi phát triển tính năng thú vị tiếp theo của ứng dụng của mình. Nó giống như lái xe hơi: Tôi rất giỏi về nó, nhưng không quan tâm đến việc áp suất chất lỏng phá vỡ hoạt động như thế nào. Nó chỉ dừng lại khi tôi nhấn phanh. Ngoài ra, tôi chắc chắn rằng tôi sẽ đánh giá cao việc lái xe nhiều hơn nếu trước tiên tôi phải lái một chiếc xe ngựa trong năm năm. Điều đó không có nghĩa là tôi không có khả năng đưa ra những điều tốt hơn với chiếc xe hơn là lỗi.
Stephen

72

Tôi không nghĩ bất kỳ câu trả lời nào ở đây thực sự là những gì OP đang tìm kiếm, vì vậy tôi sẽ đưa ra ý kiến ​​của riêng mình.

Hãy nhìn xem, tôi là một kẻ hợm hĩnh C. Thái độ của tôi là nếu bạn không biết C, thì ở một mức độ nào đó bạn không thực sự biết bạn đang làm gì với tư cách là một lập trình viên. Vì vậy, tôi nghĩ tôi là loại người "thiên vị" mà bạn đang nói ở đây.

Tuy nhiên, trong thực tế, việc bạn có thực sự biết mình đang làm lập trình viên hay không không nhất thiết ngăn bạn phát triển phần mềm thực sự tuyệt vời, hữu ích bằng các công cụ cấp cao. Ý tôi là, người tạo ra Stack Overflow, Jeff Atwood, dường như thậm chí không biết C, nhưng tôi sẽ nói Stack Overflow là một ứng dụng web khá hay.

Việc bạn có quyết định học C (hoặc C ++ hay lắp ráp) hay không tùy thuộc vào loại lập trình viên bạn muốn trở thành. Nếu bạn chỉ muốn phát triển các ứng dụng web hay ứng dụng kinh doanh thú vị, điều đó tốt - không cần phải học C. Nhưng nếu bạn muốn thực sự nổi trội với những gì bạn làm - nếu bạn muốn làm việc trên các dự án thực sự tuyệt vời thúc đẩy trạng thái của nghệ thuật, sau đó bạn thực sự cần phải nghiêm túc với tư cách là một lập trình viên để thực sự hiểu máy tính hoạt động như thế nào. Vì C về cơ bản là hệ điều hành, cũng như ngôn ngữ cung cấp mọi thứ khác (từ nhân Linux đến hầu hết các máy ảo Java, đến trình thông dịch Python và Ruby, cơ sở dữ liệu SQL, máy chủ web và chỉ về mọi trình điều khiển thiết bị) , một sự hiểu biết sâu sắc về ngôn ngữ đi một chặng đường dài.

Chưa kể rằng việc biết C (hoặc C ++) mở ra một cơ hội lớn để đóng góp cho các dự án nguồn mở lớn có tác động đến hàng triệu (hoặc hàng trăm triệu) người. Bạn muốn làm việc để cải thiện trình thông dịch Python hoặc trình duyệt web Chromium? Chà, bạn cần biết C cho cái đầu tiên và C ++ cho cái sau.

Đó là lý do tại sao việc so sánh C với các ngôn ngữ tự nhiên đã chết như tiếng Latin hoặc các công nghệ lỗi thời như ngựa và xe ngựa là hoàn toàn sai lầm. Một phần lớn cơ sở hạ tầng phần mềm thế kỷ 21 của chúng tôi được cung cấp bởi mã C, đó là lý do tại sao C vẫn có liên quan như ngày nay.

Vì vậy, việc bạn có nên học C hay không thực sự phụ thuộc vào những gì bạn muốn trong sự nghiệp là một lập trình viên.


5
Bạn không âm thanh lố bịch. Được rồi có lẽ một chút. :)
Stephen

7
Câu trả lời tuyệt vời. Tôi đã lập trình thành công trong mười năm mà không học C và C ++, và có thể đã đi hết phần còn lại của sự nghiệp mà không bao giờ học nó. Nhưng kể từ khi tôi học nó năm ngoái, tôi đã viết phần mềm tốt hơn , không chỉ bằng C ++, mà cả các ngôn ngữ khác của tôi.
John M Gant

3
Dưới đây là một số điều mà người tạo khác của SO phải nói về việc biết C: joelonsoftware.com/articles/ThePerilsofJavaSchools.html joelonsoftware.com/articles/Col pheAdvice.html joelonsoftware.com/articles/fog0000000319.html
Isaac Kleinman

3
Tại sao nó lại "hoàn toàn sai" khi so sánh C với tiếng Latin? Tôi nghĩ đó là một sự tương tự tuyệt vời. Tiếng Latin có ở khắp mọi nơi xung quanh chúng ta. 58% từ vựng tiếng Anh bị ảnh hưởng bởi tiếng Latin (trực tiếp hoặc thông qua các ngôn ngữ Lãng mạn khác). Latin cũng giữ chìa khóa để hiểu văn hóa của chúng tôi. Luật pháp, dân chủ, tôn giáo, cơ sở hạ tầng, quy hoạch thành phố và một loạt các lĩnh vực khác có thể được truy nguyên từ Đế chế La Mã. Bạn có thể chọn bỏ qua C theo cùng một cách mà bạn có thể bỏ qua tiếng Latin, nhưng bạn không bao giờ có thể tránh chúng. "Tiếng Latin và tiếng Hy Lạp không phải là ngôn ngữ chết. Chúng chỉ đơn thuần là không sinh tử." (JW McKail)
Anders Sjöqvist

2
@ AndersSjöqvist, sẽ là sai vì không ai nói tiếng Latin nữa, mặc dù nó đã ảnh hưởng sâu sắc đến sự phát triển của các ngôn ngữ hiện đại. Trong đó C được sử dụng tích cực và được sử dụng ở mọi nơi - chỉ trong mọi hệ điều hành, VM, cơ sở dữ liệu hoặc trình thông dịch. Tiếng Latin giống như, giả sử ... Simula - một ngôn ngữ gần như đã chết có ảnh hưởng sâu sắc đến ngôn ngữ sống, nhưng không được sử dụng bên ngoài giới hàn lâm.
Charles Salvia

12

Một nguyên tắc thực tế là bạn cần hiểu ít nhất một mức độ trừu tượng dưới mức bạn thường làm việc. Hãy xem xét rằng trình thông dịch PHP hoặc JavaScript của bạn thực sự có thể được triển khai trong C hoặc C ++. Cuối cùng, bạn sẽ gặp một lỗi trong trình thông dịch hoặc thậm chí là lỗi thời gian chạy C. Nếu bạn không hiểu C, bạn sẽ bị hạn chế gửi báo cáo lỗi cho người bảo trì, hy vọng họ có thể sao chép và quan tâm đến nó, sau đó vặn ngón tay cái của bạn. Nếu bạn biết C, bạn có thể nói cho họ biết chính xác vấn đề ở đâu và vấn đề là gì.

Điều này cũng có nghĩa là nếu bạn làm việc trong C / C ++, ít nhất bạn sẽ có thể đọc được lắp ráp trên nền tảng của mình.

Đối với việc học C khi bạn cần: quan sát của tôi là hầu hết các lập trình viên có thể học Perl / Python / Javascript theo yêu cầu, nhưng trình biên dịch / C / Lisp dường như đòi hỏi nhiều thời gian hơn, vì vậy, đáng để học ít nhất một số điều cơ bản trước khi cần phát sinh.


9
Ok, "C / C ++" Tôi có thể sống với (luật sư ngôn ngữ bị nguyền rủa). Và "Perl / Python / Javascript" là hoàn toàn hợp lý. Nhưng vì tình yêu của Thiên Chúa, tại sao "người lắp ráp / C / Lisp"? Điều đó giống như nói "táo / cam / Barrack Obama". Ba ngôn ngữ đó không có gì để làm với nhau.
Jason Baker

@Jason, điểm chung duy nhất tôi đã gợi ý là hầu hết mọi người đều thấy rằng bộ ba ngôn ngữ khó tiếp thu hơn, và vì vậy có thể đáng để OP dành thời gian cho họ trước khi có nhu cầu sử dụng chúng ngay lập tức. Con trỏ số học và lập trình chức năng không có nhiều điểm chung ngoại trừ việc mọi người dường như phải nhìn chằm chằm vào họ lâu hơn trước khi chúng có ý nghĩa.
Charles E. Grant

Tôi không thể đồng ý nhiều hơn. Đi theo một cách khác, đến mức độ trừu tượng cao hơn, anh chàng / nhân viên IT văn phòng của ông, người có thể làm ít nhất một số chương trình thường sẽ tốt hơn người không thể.
Emmet

7

Tôi không đồng ý rằng bạn cần phải học C đầu tiên , nhưng tôi tin rằng bạn nên học C cuối cùng . Tất cả các tóm tắt đều bị rò rỉ và hiểu C giúp dễ hiểu hơn những gì thực sự xảy ra khi bạn sử dụng một số trừu tượng cao cấp lạ mắt. Điều đó nói rằng, tôi cũng nghĩ rằng tất cả các lập trình viên nghiêm túc cuối cùng cũng nên học cách ít nhất là đọc trình biên dịch, vì lý do tương tự.

Học các khái niệm cấp thấp này mang lại khả năng đáng ngạc nhiên để lý luận về các công cụ cấp cao. Ví dụ, trong C ++ và D, các đối số mặc định cho các hàm ảo được xác định bởi loại tĩnh (thời gian biên dịch) của đối tượng, không phải loại động (thời gian chạy). Điều này vô nghĩa trừ khi bạn hiểu cách vtables và gọi các quy ước hoạt động và tại sao sẽ cực kỳ khó thực hiện các chức năng ảo theo cách ngược lại.


2
Học cách đọc ngôn ngữ hội có thể. Vấn đề là tôi có hơn 10 họ bộ xử lý khác nhau mà tôi sử dụng và học tất cả các biến thể rất khác nhau là một công thức cho sự nhầm lẫn và hỗn loạn. Hãy thử so sánh AMD SHARC với Atmel AVR32 và TI MSP430.
uɐɪ

@Ian: Phải rồi. Tốt nhất bạn nên học ngôn ngữ lắp ráp của bất kỳ vòm nào bạn phát triển nhất. Đối với hầu hết mọi người, tôi đoán đây sẽ là x86 hoặc ARM.
dsimcha

3
"Tất cả các lập trình viên nghiêm túc cuối cùng cũng nên học cách ít nhất là đọc trình biên dịch" Chính những bình luận như thế này đã khiến tôi bắt đầu với câu hỏi này. Tôi nghĩ rằng bạn chỉ đơn giản là thiên vị, thưa ông. Mặc dù, tôi thích những gì bạn nói về trừu tượng rò rỉ. Điều đó có ý nghĩa. Mặt khác, những điều này không tạo ra nhiều sự khác biệt "thế giới thực" trong đấu trường của tôi. Tôi vẫn đang sử dụng mức độ trừu tượng cao, có bị rò rỉ hay không.
Stephen

1
@Stephen, bạn nên thử viết một số ngôn ngữ trình biên dịch. CPU 8 bit không khó và cố gắng thực hiện cùng một điều nhỏ trong cả 6502 (như C64) và Z80 (như máy kinh doanh CP / M) thực sự rất giáo dục kinh nghiệm do một số khác biệt thiết kế rất cơ bản (trang chỉ mục so với đăng ký).

+1 bất chấp All abstractions are leakytuyên bố sai lầm trắng trợn .
Thomas Eding

7

Sự thiên vị là một trong những hiện trạng. Vào thời xưa (những năm 1980 trở về trước), C / C ++ là một yêu cầu khá lớn đối với các ứng dụng hiệu suất. Điều đó đã thay đổi nhưng các nhà phát triển cao cấp thường đến từ nền tảng cũ kỹ đó và xem mọi thứ trong bối cảnh đó.

Để phát triển thực tế, các ngôn ngữ khác được sử dụng - C # là một ngôn ngữ phổ biến, cũng như Java, trong khi PHP và Python là phổ biến cho các dự án nội bộ và luôn hữu ích khi có ai đó có ít nhất kiến ​​thức cơ bản trong lĩnh vực đó trong trường hợp bạn chọn mở dự án nguồn PHP cho, giả sử, hệ thống theo dõi lỗi của bạn. Tuy nhiên, thông số kỹ thuật công việc dường như vẫn đến từ mẫu tiêu chuẩn đã được viết cách đây 25 năm.


6
"thông số kỹ thuật công việc dường như vẫn đến từ mẫu tiêu chuẩn đã được viết cách đây 25 năm." Bạn không thể đúng hơn.
Stephen

Xin chúc mừng, John!
Đánh dấu C

6

Nhiều như tôi ghét đăng bài viết trên blog Joel bắt buộc, tôi đồng ý với anh ta ở đây . C là ngôn ngữ chung của lập trình. Tôi không thể nghĩ ra bất kỳ ngôn ngữ cấp cao nào không thể giao tiếp với nó bằng cách nào đó. Do đó, C vẫn là một lựa chọn phổ biến cho các loại công cụ lập trình hệ thống. Bạn chỉ đơn giản là không thể giao tiếp với một số thứ cấp hệ điều hành mà không có C.

Bên cạnh đó, bạn dự định làm gì khi ngôn ngữ cấp cao của bạn không đủ nhanh? Biết cách viết C đặc biệt quan trọng khi bạn đang sử dụng một ngôn ngữ được gõ động ở mức độ cao như Ruby, Python hoặc PHP. Nhưng ngay cả các lập trình viên Java và C # cũng cần phải thả xuống C theo thời gian.


cười ngả nghiêng. Tham khảo lời khuyên trong cột được liên kết: "Bạn nên bỏ qua những gì tôi đang nói ở đây và thay vào đó xây dựng một loại phần mềm trực tuyến nào đó cho phép các sinh viên khác tìm thấy những người hẹn hò."
Stephen

3
@Stephen: Nếu bạn muốn mọi người thực sự chú ý đến bạn, thì hãy đặt họ hoặc trả tiền.
Fred Nurk

@Fred Lời khuyên tuyệt vời, lol.
Stephen

6

Thật là một lễ hội sên lớn! (Như họ đã nói: Đây có phải là một cuộc chiến riêng tư, hoặc có ai có thể tham gia không?)

Tôi là một giáo sư, và điều tôi tìm thấy (sau một vài lần thử và sai) là việc dẫn sinh viên dễ dàng hơn nhiều thông qua các khái niệm phức tạp về lập trình nếu họ hiểu, ở cấp độ cơ bản, chỉ là những gì máy tính đang làm. Không phải trong tất cả các chi tiết nitty, nhưng nguyên tắc cơ bản, như bộ nhớ là gì, hướng dẫn là gì, v.v. Điều tôi thích ở C là nó gần với máy.

Điều đó không có nghĩa là các giáo viên khác đã đến cùng một nơi. Họ bắt đầu bằng ngôn ngữ cấp cao (BASIC :-) và đi tiếp từ đó, không có hiệu ứng bệnh rõ ràng.

Vì vậy, dòng dưới cùng, Stephen, bạn có thể đúng. Tôi sẽ không nghĩ như vậy, nhưng tôi đã sai trước đây.


4

Tôi đoán đây là sự tiến bộ.

Hai mươi năm trước, sự khôn ngoan thông thường là bạn phải học lắp ráp để hiểu những gì bạn đã đạt được từ các ngôn ngữ cấp cao như C (đó là lý do tại sao tôi đã phải mất một lớp lắp ráp ở trường đại học sử dụng VAX Macro; đoán như thế nào hữu ích mà hóa ra là khi tốt nghiệp).

Có một sự mê tín rằng vì C hơi khó học và nó hầu như không cung cấp trừu tượng (con trỏ và luồng byte khá nhiều), học bằng cách nào đó sẽ giúp bạn trở thành một lập trình viên tốt hơn hoặc cung cấp cho bạn cái nhìn sâu sắc hơn về cách mọi thứ hoạt động ở phần cứng cấp độ.

Điều này không thực sự đúng. Tiêu chuẩn C không giúp bạn đến gần kim loại hơn bất kỳ 3GL nào khác (Pascal, Fortran, v.v.). Một số triển khai C có thể cung cấp các móc nối cho phép bạn truy cập nhiều hơn vào một số khu vực, nhưng nói chung, các con trỏ trần trụi gần như bạn nhận được, hoàn toàn không gần gũi. Bạn không thể truy cập trực tiếp vào sổ đăng ký hoặc từ trạng thái.

Cuối cùng, tất cả đều thuộc về opcodes và chế độ xử lý địa chỉ, vì vậy nếu bạn thực sự quan tâm đến cách mọi thứ hoạt động ở cấp thấp hơn, bạn sẽ được phục vụ tốt hơn cho trình biên dịch học tập trên C.

Chính nó, học C sẽ không (nhất thiết) làm cho bạn trở thành một lập trình viên tốt hơn. Nó chắc chắn sẽ cung cấp cho bạn sự đánh giá cao đối với các loại chuỗi thực tế và các thư viện container được tiêu chuẩn hóa.


Tôi đoán "đánh giá cao" là một cách để đặt nó. Trong lớp lập trình trung học của tôi, chủ yếu chỉ là những câu hỏi về "Tôi cần sử dụng chức năng này. Làm cách nào để chuyển đổi LOLOMGCHAR * thành WTFBBQCHAR *?"
Katana314

tôi nghĩ rằng C rất dễ học. ít nhất đó là đối với tôi khi chỉ đọc Kernighan & Ritchie.
robert bristow-johnson

2

Một ngôn ngữ là một công cụ. Nếu bạn chỉ phải viết các trang web và những thứ tương tự thì tôi chắc chắn rằng bạn có thể thoát khỏi mà không cần phải học C, giống như cách bạn chỉ làm bộ dụng cụ mô hình bằng nhựa, bạn chỉ cần một con dao và keo sắc nhọn, a cờ lê thường không được yêu cầu.

Tôi viết mã cho các hệ thống nhúng có tài nguyên bộ nhớ bị hạn chế cao (lớn nhất tôi đã thực hiện gần đây là 16kbyte và đó là LỚN) Trong thị trường này, C hoặc trình biên dịch là các tùy chọn duy nhất và bất kỳ ngôn ngữ cấp cao hơn nào không hoạt động.


1
Điều đó thật tuyệt ... Nhưng không phải ai cũng làm điều đó. Hàm ý dường như là những người không viết cho các hệ thống nhúng chỉ đang chơi và không phát triển nghiêm túc - ít nhất, lấy sự tương tự mô hình của bạn trong bối cảnh các hệ thống nhúng của bạn. Đó rõ ràng không phải là trường hợp và có thể viết các ứng dụng sản xuất quy mô lớn mà không cần chạm vào C.
JohnL

Tất nhiên có thể viết các ứng dụng sản xuất quy mô lớn mà không cần đến gần C. Tôi đã viết mã trong 10 năm trước khi tôi sử dụng C. Tôi đã sử dụng PL / M, Pascal, ADA cũng như trình biên dịch. Chúng dễ dàng như C để tìm hiểu các cơ chế cơ bản của máy và thường tốt hơn để tạo mã không có lỗi.
uɐɪ

Tuyệt vời - mặc dù câu trả lời của bạn ở trên không mang lại cho tôi ấn tượng mà bạn nghĩ theo cách đó, do đó câu trả lời của tôi ...
JohnL

Bạn có bất kỳ kinh nghiệm nào với các công cụ Java nhắm mục tiêu sử dụng nhúng không?

2

Theo kinh nghiệm của tôi, trong một thời gian, C / C ++ là một bộ đệm tốt giúp tách biệt các lập trình viên giỏi khỏi các lập trình viên VB6. Sau khi thực hiện năm năm lẻ C / C ++, tôi đã có một công việc làm việc trong VB6. Tôi đã rất ngạc nhiên về chất lượng (hoặc thiếu nó) của các lập trình viên. Họ ít quan tâm đến sự can đảm của ngôn ngữ, trong thiết kế hay về hiệu suất. Thật không may, khi công ty chuyển sang .Net, các lập trình viên C / C ++ và các lập trình viên .Net đã sử dụng cùng các công cụ. Các lập trình viên VB thậm chí còn tệ hơn các lập trình viên VB.Net. Tình hình trở nên tồi tệ hơn khi tất cả sự phát triển đã chuyển sang ASP.NET. Đột nhiên bất cứ ai có thể kéo và thả điều khiển là một lập trình viên.

Tuy nhiên, trong thị trường việc làm, không có nhiều sự khác biệt giữa các lập trình viên lõi cứng (ví dụ C / C ++) và khách du lịch.

Như vậy, có C hoặc C ++ trong sơ yếu lý lịch của bạn có thể giúp bạn khác biệt với riff-raff.


2

Procoively hỏi: Bạn đang yêu cầu xác nhận rằng bạn không phải học C? Nếu bạn học C thuần túy (không nhất thiết là C ++), bạn sẽ có được sự hiểu biết thấu đáo về mô hình thực thi của máy tính. Đặc biệt là về bộ nhớ và phân bổ. Công cụ này cũng quan trọng đối với những người lập trình trong langauges cấp cao hơn.

Đối với một lập trình viên PHP, nó chỉ kém minh bạch hơn về cách mã được thực thi trên máy đã cho. Nó có thể không quan trọng đối với lập trình viên PHP vì Mạng chuyển là cổ chai trong ứng dụng, v.v.

Plain PHP / Python / C # có rất nhiều lớp trừu tượng giữa ngôn ngữ và CPU. các lớp này dày đến mức chúng không cho phép bạn nhìn xuyên qua chúng. Khi bạn học C, có một tấm mỏng giữa bạn và CPU và hệ điều hành. Điều đó không làm cho việc lập trình dễ dàng hơn (và nó thậm chí có thể không tốt hơn). Nhưng bạn thực sự có thể tìm hiểu làm thế nào CPU hoạt động. Khi bạn biết C "trung gian", bạn thực sự có thể bắt đầu liên kết kiến ​​thức đó với ngôn ngữ cấp cao hơn. Đây là lợi ích trước mắt mà bạn sẽ đạt được.

Theo tôi, một lập trình viên nên luôn dành thời gian để học các khái niệm lập trình khác nhau. Nó chắc chắn trả tiền để có một cái nhìn về C, nhưng cũng có một cái nhìn về các ngôn ngữ lập trình cấp cao hơn như Clojure, Haskell, Prolog.

Bạn không cần phải trở thành bậc thầy trong những điều này, họ sẽ chỉ dạy cho bạn bài học rằng "cấp độ" của ngôn ngữ lập trình không phải là nhị phân mà có rất nhiều cấp độ. Nhận biết chúng, từ trên xuống dưới (Trình biên dịch). Nó sẽ làm cho bạn một lập trình viên tốt hơn.


2

Bạn cần biết đủ C để đọc mã được viết bằng C, vì số lượng lớn mã rất quan trọng được viết bằng ngôn ngữ. Đó là về tất cả những gì bạn sẽ giữ được thông qua một hướng dẫn kỹ lưỡng về chủ đề (tôi đã sử dụng "lập trình bằng C" của Kochan) mà không thực sự phải viết mã bằng ngôn ngữ. Nếu bạn gặp khó khăn trong một tình huống đòi hỏi bạn phải sử dụng ngôn ngữ rộng rãi, bạn sẽ có một cơ sở tốt để xây dựng. Bạn có thể muốn nghiên cứu một cái gì đó như cuốn sách hội Duntemanns nếu máy là một hộp đen kiêng đối với bạn. Tôi cũng đề nghị "Mã" của Petzold.

Ngoài điều đó - kiến ​​thức cơ bản về C và sự quen thuộc cơ bản với máy cơ bản - bạn sẽ được phục vụ tốt nhất dành thời gian học tập cho những thứ thực sự, như SICP, TCP / IP Illustrated hoặc sách về Concrete Math, thuật toán hoặc cấu trúc dữ liệu . Các công cụ thực sự.

Dành nhiều thời gian để học C trong khi viết mã bằng PHP đơn giản là không xứng đáng với chi phí cơ hội. Có nhiều điều hữu ích hơn để học hỏi. C thực sự chỉ là một ngôn ngữ khác mà bạn có thể học tốt chỉ khi học và sử dụng, nhưng có thể tiếp thu khi bạn cần.

Đổ mồ hôi những thứ cứng.


1

C là ngôn ngữ được sử dụng để viết các ngôn ngữ khác. Nó cho phép bạn thân mật với CPU và các phần cứng khác tùy thích.

Nếu bạn không biết C, bạn sẽ không biết các ngôn ngữ khác đạt được kết quả như thế nào.

Tất nhiên, trừu tượng là một khái niệm quan trọng và không phải ai cũng cần biết khuôn khổ lựa chọn của họ đạt được kết quả như thế nào. Bạn không cần phải mất 20 năm để viết C, hoặc thực sự suy nghĩ về những gì xảy ra với vtables của bạn khi bạn sử dụng nhiều kế thừa, để viết mã tốt.

Bây giờ, bạn có thể lái xe mà không hiểu động cơ 4 thì hoạt động như thế nào hoặc thực sự không thể sử dụng lẫy chuyển số (hộp số tay).

Tuy nhiên, nếu bạn hiểu những gì đang diễn ra dưới mui xe, đôi khi bạn sẽ có thể đạt được kết quả đặc biệt mà một người không có kiến ​​thức đó sẽ phải vật lộn để nhân rộng.


1

C (và có thể là C ++) là biển bạn đang bơi. Hệ điều hành sẽ chạy mã của bạn có thể được mã hóa bằng C (và C ++). Vì vậy, API gốc của bạn để truy cập các dịch vụ HĐH sẽ ở C.

Nếu bạn có thể làm mà không biết những gì bên dưới, thì không cần phải biết C. Tuy nhiên, hầu hết các lập trình viên cần phải lặn xuống các cấp thấp hơn vào một lúc nào đó trong cuộc sống của họ.

Nó cũng dựa trên chuyên môn của bạn về các lĩnh vực phát triển. Ví dụ, một nhà phát triển web viết HTML, Javascript và một số kịch bản phía máy chủ có thể không bao giờ cần biết gì về C, nhưng một hệ thống phân phối hoặc nhà phát triển trò chơi sẽ.

Sẽ không bao giờ đau lòng khi dành một vài tuần để học một cái gì đó rất cơ bản cho nghề nghiệp của bạn.


1

C có nhiều ưu điểm:

  1. C là ngôn ngữ cấp thấp. Bạn có thể sử dụng c để phát triển kernel và trình điều khiển.
  2. C là ngôn ngữ nhanh nhất. Nhiều phần mềm điện được phát triển bởi c. Ví dụ: memcached, redis, nginx, apache, mysql, v.v.
  3. C là một ngôn ngữ đa nền tảng. Chương trình được phát triển bởi c có thể chạy ở mọi nền tảng. Các ngôn ngữ đa nền tảng khác không thể làm điều này. Java, python, php, v.v. không thể chạy trên nền tảng iOS.
  4. C ++ không thể chạy ở nhiều hệ thống nhúng.
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.