Có phải thông thường một lập trình viên không biết sự khác biệt giữa C và C ++? [đóng cửa]


16

Trong một cuộc phỏng vấn, tôi được hỏi liệu tôi có biết sự khác biệt giữa C và C ++ không.

Tôi đã tự hỏi tại sao câu hỏi như vậy được hỏi?


11
Với số lượng câu hỏi C tôi đã thấy chỉ trong vài tuần qua được gắn thẻ C ++, tôi muốn nói rằng đây là một câu hỏi khá quan trọng.
Gort Robot

13
Đánh giá mức độ thường xuyên tôi thấy "C / C ++", tôi sẽ nói nó rất phổ biến.
dùng16764

6
Bạn đã trả lời gì
Dima

8
Nó là phổ biến cho một người nộp đơn cho công việc lập trình không biết gì cả. Nhưng tôi sẽ không gọi người đó là lập trình viên.
vartec

6
@Tjaart - Bạn có hiểu rằng có những hệ thống mà một byte không phải là 8 bit phải không?
Ramhound

Câu trả lời:


25

Nếu các câu hỏi được đặt ra như "Bạn có biết sự khác biệt giữa C và C ++ không?" và bạn được phép trả lời bằng "Có" thì tôi có thể thấy sự nhầm lẫn của bạn, nhưng nếu họ thực sự hỏi "Điều gì - sự khác biệt giữa C và C ++?" và một câu trả lời kết thúc cởi mở hơn đã được mong đợi, tôi có thể xem đó là một "con đường tìm hiểu" hợp pháp như họ nói.

Ví dụ, chỉ từng được mã hóa bằng C và chưa bao giờ trong C ++, tôi hầu như không thể trả lời ngoài một "C ++ mơ hồ hỗ trợ mã hóa hướng đối tượng?".


40

Một số người đã quan sát thấy rằng có một lượng lớn ứng viên lập trình không thể viết mã . Vì vậy, có, đặt câu hỏi "rõ ràng" có ý nghĩa hoàn hảo.


7
Đây sẽ là khá nhiều câu trả lời của tôi. Đã phỏng vấn mọi người cho các vị trí lập trình, tôi có thể nói với bạn rằng những câu hỏi rõ ràng sẽ loại bỏ một số lượng lớn các ứng viên rất dễ dàng.
Tyanna

Một triệu upvote cho bạn. Tôi luôn ngạc nhiên trước những câu hỏi ở cấp độ mới bắt đầu nên nhiều người được phỏng vấn không thể trả lời.
HLGEM

1
Sau đó, một lần nữa, tôi đã lập trình được hơn 25 năm và có một số câu hỏi ở cấp độ mới bắt đầu tôi thực sự không thể trả lời được nữa (trở nên tồi tệ hơn nếu bạn hỏi về định nghĩa). Tôi đã xem bài báo được liên kết trong câu trả lời này và tôi giống như "hmmm yeah để tôi suy nghĩ về điều đó trong một phút", trong khi làm việc tôi thực hiện các hệ thống khá phức tạp và thường không gặp nhiều khó khăn khi đưa ra giải pháp. Một số câu hỏi nhỏ đó làm tôi sợ hơn là một hệ thống nhiều tầng và ném vào một số chức năng đa luồng, tào lao như thế ... Thật lạ, tôi biết.
MetalMikester

1
thật. Như đã thảo luận về một chủ đề P.SE khác, đối với các cuộc phỏng vấn tôi đã có thói quen bắt đầu với những câu hỏi rõ ràng lố bịch ("làm thế nào để bạn khai báo một biến trong JS?", "Có bao nhiêu byte cho 1 int trong Java?", " con trỏ là gì? "vv ...). Tôi không bận tâm đến lỗi đầu tiên (căng thẳng là một yếu tố, ngay cả khi tôi bắt đầu các cuộc phỏng vấn với các cuộc trò chuyện để thư giãn chúng), nhưng thông thường nếu tôi có thể nhận được 3 lần đình công trước khi đạt được những câu hỏi hay, thì tôi coi đó là hoàn toàn chấp nhận được khi cúp máy mà không đi hơn nữa hoặc đá chúng ra 5 phút để đặt câu hỏi ngu ngốc đáng để tiết kiệm thời gian.
haylem

3
Trên thực tế, tôi thậm chí đã xin lỗi trước khi hỏi những câu hỏi đầu tiên này, vì tôi không muốn những người nộp đơn có kỹ năng bị họ làm cho lạ, hoặc nghĩ rằng tôi không coi trọng họ và cảm thấy như họ sẽ không thuộc về nơi này.
haylem

8

Có cả đống chúng. Có một tính vô hạn của những người có giảng viên ngốc người dạy C-strings và newdeletehướng dẫn, hoặc out-of-date hoặc sách xấu, người học "C ++" nhưng thực chất C, ai nghĩ hai là khá chặt chẽ.

Tất nhiên, nếu bạn là chủ nhân, thì việc nói rằng chúng giống nhau hoặc thậm chí tương tự là một đèn cảnh báo lớn.


2
Điều này mang đến một điểm rất tốt. Có thể chấp nhận và thậm chí có thể phổ biến để dạy C nhưng sử dụng trình biên dịch C ++. Điều này tất nhiên dẫn đến sự nhầm lẫn bởi những sinh viên không bao giờ tìm hiểu sự khác biệt lớn giữa betwen C và C ++. Tôi chỉ nói về sự khác biệt chính giữa cùng một phiên bản.
Ramhound

4
@Ramhound: Đó là không thể chấp nhận ở tất cả . Thực tế là nó phổ biến là trực giao.
DeadMG

1
Một thực tế đáng buồn là C và C ++ hầu như được dạy rất tệ. Đi đến SO và xem qua các thẻ C và C ++, và bạn sẽ thấy những quan niệm sai lầm giống nhau, cùng một cách hiểu sai, cùng một thực tiễn xấu lặp đi lặp lại nhiều lần. Những người này không ngẫu nhiên mắc lỗi tương tự; họ được dạy cách phạm phải những sai lầm này. "Giáo sư của tôi đã nói ..." gần như là một lá cờ đỏ đối với tôi bây giờ.
John Bode

5

Cũng có một tỷ lệ nhỏ người (như bản thân tôi) đã học C ++ trước khi họ học C.

Tôi chắc chắn bạn biết sự khác biệt, nhưng nếu bạn là sinh viên chỉ mới có lớp C ++ và không phải lớp C, các phần của C ++ không tương thích với C sẽ không rõ ràng.

Một số khác biệt rõ ràng hơn mà tôi đã học (không phải là danh sách đầy đủ) ( ) kiểu dữ liệu cấu trúc ban đầu không thể chứa hàm và không thể có thành viên riêng, có nghĩa là rất khó thực thi quy tắc hợp lệ của loại dữ liệu trừu tượng trong các lớp C. ( ) không được hỗ trợ trong C ( ) chuyển qua tham chiếu bằng toán tử ampersand dành riêng cho C ++ ( ) C không hỗ trợ các luồng hoặc mẫu (*) malloc và miễn phí chỉ dành cho sử dụng trong C và không dành cho C C ++


2
Tôi nghĩ rằng đây là một cái nhìn sâu sắc quan trọng ... ngày xưa, bạn đã có một trình biên dịch C, sau đó đến C ++, vì vậy bạn đã học được sự khác biệt. Bây giờ bạn đã có trình biên dịch C / C ++ và nếu bạn được dạy C ++ một cách rõ ràng, thì cũng không thể biết C là gì và C ++ là gì ngoài "công cụ hướng đối tượng" Ngoài ra, tôi không chắc C / C ++ là phổ biến nhất ngôn ngữ để học trong sự tức giận (?)
Al Biglan

1
Tôi rất hy vọng tỷ lệ phần trăm không nhỏ, bởi vì những người lập trình C "được chuyển đổi thành C ++" thường là những lập trình viên C ++ rất tệ .
sbi

1

Thật không may, tôi nghĩ rằng nó đang ngày càng trở nên phổ biến.

Tôi nghĩ rằng các lập trình viên trẻ mới ra khỏi trường kỹ thuật (hoặc nơi họ học các kỹ năng của họ) đơn giản là không học các ngôn ngữ cũ như C, C ++, Lisp, OCaml, v.v. Họ chỉ đơn giản là "lập trình viên c" hoặc "lập trình viên java" ", V.v. Và khi họ tìm được việc làm, họ không thử thách bản thân với việc học các ngôn ngữ khác.

Tất nhiên có một số điều đó, nhưng từ những người tôi đã làm việc cùng, có một xu hướng chung cho các lập trình viên trẻ đi theo mô hình này.

Tuyên bố miễn trừ trách nhiệm: Vì tôi đang nói về giáo dục, nên dĩ nhiên có thể có sự khác biệt giữa các quốc gia về những gì đang được nhấn mạnh trong giáo dục.


Bạn đang nói về trường đại học nào? Ngôn ngữ "Arcane"? Tôi đã phải học lắp ráp cho MIPS tại trường đại học Rome ...
Виталий Олегович

Nói chung, các lập trình viên "trẻ" mà tôi đã gặp đã có bằng kỹ sư. Hãy nghĩ về nó, hầu như tất cả các lập trình viên tôi làm việc đều có bằng kỹ sư, bao gồm cả bản thân tôi.
Pete

1
C và C ++ vẫn được dạy ở trường. Vấn đề là hầu hết thời gian cùng một trình biên dịch được sử dụng để dạy cả hai. Điều này có nghĩa là họ không bao giờ thực sự học được sự khác biệt giữa hai ngôn ngữ.
Ramhound

@Pete Nếu tôi xuất hiện với tư cách là một 'lập trình viên C #', tôi không thể tưởng tượng được việc học C hay C ++ như 'một ngôn ngữ khác'. Chắc chắn tôi thích Ruby, Haskell, Javascript, Python. Ngôn ngữ gia đình C đủ gần để biết một người là đủ.
Kirk Broadhurst

0

Có lẽ không phải theo nghĩa đen, ở chỗ họ nghĩ C ++ và C là một và giống nhau, nhưng về mặt thực sự hiểu và có thể sử dụng các tính năng khác nhau của C ++, vâng.

Nguyên nhân chính là bản chất nhị phân của các ngôn ngữ / công cụ liệt kê trong sơ yếu lý lịch / CV của bạn. Về cơ bản, tiêu chuẩn dường như là nếu bạn có "Hello World" để biên dịch và chạy bằng ngôn ngữ, thì việc liệt kê nó trong sơ yếu lý lịch / CV của bạn là ổn.

Khi nó xảy ra, phiên bản C của "Xin chào, Thế giới!" cũng biên dịch và chạy trong C ++. Vì vậy, không có bất kỳ thông tin nào khác, tất cả những gì nhìn thấy "C ++" trong hồ sơ xin việc cho tôi biết là người này biết đủ C để nhận được "Xin chào, Thế giới!" đang chạy và biết rằng hầu hết các chương trình C sẽ biên dịch trong C ++.

Vì vậy, tôi sẽ cần thăm dò một chút về cuộc phỏng vấn. Tôi có lẽ sẽ không làm như vậy bằng cách hỏi "Có / Không" "Bạn có biết sự khác biệt không?" câu hỏi, trong ngắn hạn bởi vì nó có một câu trả lời "đúng" rõ ràng. Tôi có lẽ sẽ hỏi ứng viên rằng ngôn ngữ nào cô ấy thích hơn, tại sao, và nếu có bất kỳ lợi thế nào với ngôn ngữ mà cô ấy không chọn.


0

Câu trả lời

Vâng, phổ biến của nó. Tôi đã thấy tình huống này, hoặc chính tôi, đồng nghiệp hoặc mã thư viện của bên thứ ba.

Bản thân tôi, ví dụ, đôi khi làm việc với các ngôn ngữ lập trình hoặc khung lập trình khác và phải liên kết hoặc cập nhật với các thư viện "thuần c" hoặc "c ++".

Tôi chỉ gặp vấn đề sửa đổi một số mã "Pure C". Và sử dụng các chức năng cấp phát bộ nhớ "mới" & "xóa", đó là "c ++". Phần còn lại của mã không hướng đối tượng

Trình biên dịch là C ++. Sau đó, tôi đã kiện một trình biên dịch khác, và phát hiện ra lỗi.

Tặng kem

Nếu ai đó hỏi, bằng lời nói, hoặc trong một bài kiểm tra viết, hoặc kiểm tra trực tuyến trên web:

"Bạn có biết sự khác biệt giữa C hoặc C ++"

Và bạn trả lời "Có" hoặc "Không".

Chúng thực sự có nghĩa:

"Bạn có biết sự khác biệt giữa C hoặc C ++ không, nếu bạn vui lòng cho tôi biết?"

Vì vậy, bạn phải trả lời:

"Có. Sự khác biệt mà C ++ hướng đối tượng của nó, mặc dù, bạn có thể sử dụng Pure C, bên trong chương trình C ++, để tương thích ngược."

Đôi khi, họ sẽ không hỏi bạn "nếu bạn vui lòng cho tôi biết" và họ sẽ cho rằng bạn không biết. Đừng chỉ trả lời "có" hoặc "không".


2
Chà, tôi không nghĩ câu trả lời đó là hoàn toàn đúng. Câu trả lời đúng là C ++ có hỗ trợ mạnh mẽ cho mã Hướng đối tượng. Nó không yêu cầu nó. (Đó là nguồn gốc của sự nhầm lẫn này ở nơi đầu tiên.)
Gort the Robot

Ngoài ra "bạn có thể sử dụng Pure C trong chương trình C ++" có thể có nghĩa là "C ++ là siêu bộ của C, tức là bất kỳ chương trình hợp lệ C nào cũng là chương trình C ++ hợp lệ" (sai). Hoặc nó có thể có nghĩa là "bạn có thể liên kết các chương trình C ++ với thư viện C" (đúng, nhưng hầu hết các ngôn ngữ có thể liên kết với thư viện C bằng cách này hay cách khác.) Bạn nên chính xác hơn nhiều trong một cuộc phỏng vấn thực tế.
nikie

-2

Biên tập

Như một lời cảnh báo trước, lưu ý rằng câu trả lời này không có nghĩa là tuyên bố rằng không có sự khác biệt hoặc tôi tuyên bố là không biết sự khác biệt, hoặc thậm chí là tôi biết hơn "Hello World" trong C hoặc C ++. Đó là một câu trả lời cho câu hỏi bằng cách đóng khung các điều khoản tham chiếu, chỉ ra rằng nhiều người biết sự khác biệt cơ bản (ví dụ: người ta có một số +ký tự trong tên của nó) và rất ít người sẽ biết tất cả hoặc thậm chí hầu hết sự khác biệt.


Nó phụ thuộc vào ý nghĩa của bạn về 'lập trình viên' và ý nghĩa của 'sự khác biệt'.

Tôi là một "lập trình viên" (mặc dù tôi tự gọi mình là nhà phát triển) và tôi đấu tranh để đưa ra bất kỳ sự khác biệt thực sự nào giữa C và C ++. Nếu được nhấn, tôi có thể nói rằng C ++ là siêu bộ của C có không gian tên và kế thừa; cách khác nhau để đối phó với bộ nhớ. Tôi biết đủ để vá một số lỗi hoặc thực hiện một số thay đổi trong chương trình hiện tại của bạn nhưng tôi không thể tưởng tượng việc viết bất cứ điều gì ngoài một tiện ích đơn giản trong C hoặc C ++. Tôi biết đủ để có được, nhưng tôi không vẽ mình là "biết" một trong những ngôn ngữ đó.

Tôi biết các 'lập trình viên' khác (cũng là nhà phát triển), những người thậm chí sẽ không cho bạn biết sự khác biệt giữa Java và FORTRAN, hoặc Javascript và Pascal. Họ giỏi trong những gì họ làm và họ không làm ngôn ngữ thủ tục.

Sau đó, có hàng triệu lập trình viên tầm thường hầu như không biết ngôn ngữ duy nhất họ làm việc mỗi ngày.

Thuật ngữ "sự khác biệt" là không rõ ràng. Tôi đã chỉ ra những gì tôi thấy như một số khác biệt ở trên, nhưng tôi biết chúng không dứt khoát và đầy đủ. Rất ít người sẽ biết mọi khác biệt - rất nhiều người sẽ có thể đưa ra một số câu trả lời mơ hồ (như tôi có) về định hướng đối tượng.


5
"Tôi sẽ đấu tranh để đưa ra bất kỳ sự khác biệt thực sự giữa C và C ++." Bạn chắc chắn không phải là một lập trình viên C ++. Xin vui lòng?
sbi

2
C và C ++ là các ngôn ngữ rất khác nhau, được mã hóa theo nhiều cách khác nhau. Bạn rõ ràng chỉ không biết họ.
DeadMG

@sbi "Tôi không vẽ mình là" biết "một trong những ngôn ngữ đó." Tôi sẽ để bạn tự quyết định điều đó.
Kirk Broadhurst

Bất kỳ thông tin phản hồi về các downvote? Có phải vì tôi không biết sự khác biệt giữa hai người? Tôi sẽ không cho rằng điều đó sẽ khiến tôi không đủ điều kiện để trả lời câu hỏi.
Kirk Broadhurst

1
.... Tuy nhiên, để giải thích: Thuật ngữ "khác biệt" là đủ ở đây, vì C và C ++ chỉ chia sẻ những điểm tương đồng cú pháp bề ngoài, và, ngoài ra, là những ngôn ngữ rất khác nhau. Về trình độ chuyên môn: Tôi không nghĩ rằng có một trình độ cần thiết để trả lời ở đây, nhưng khi một câu trả lời bị sai một cách trắng trợn như câu hỏi này, nó sẽ bị đánh giá thấp không liên quan đến trình độ chuyên môn.
sbi

-3

Có phải thông thường một lập trình viên không biết sự khác biệt giữa C và C ++?

Hai mươi năm trước? Đúng.

Hôm nay? Không nhiều lắm.

Lý do cho điều này là do bối cảnh lập trình đã thay đổi theo một cách lớn. Nhiều chương trình ngày nay dựa trên web; thậm chí các chương trình được viết cho máy tính để bàn có thể được viết bằng ngôn ngữ cấp cao hơn C hoặc C ++. Như vậy, trừ khi bạn là một lập trình viên viết mã hệ điều hành, bạn có thể không biết nhiều về một trong hai ngôn ngữ.

Một người phỏng vấn có thể hỏi câu hỏi này trong một cuộc phỏng vấn để đánh giá mức độ bạn biết về các nguyên tắc cơ bản lập trình; Nếu bạn biết sự khác biệt giữa C và C ++, thì bạn có thể biết lập trình hướng đối tượng là gì, bạn có thể hiểu thư viện và trình biên dịch, bạn hiểu chức năng bộ nhớ, tài liệu tham khảo, con trỏ .... nhiều điều đã ảnh hưởng đến ngôn ngữ lập trình ngày nay. . Tôi không sử dụng C ++ nhiều (và tôi thực sự không thể nói rằng tôi là một lập trình viên xuất sắc trong bất kỳ ngôn ngữ nào; trí tuệ sẽ đi cùng với thời gian) nhưng tôi có thể nói rằng kinh nghiệm của tôi với C ++ chắc chắn đã giúp tôi trở thành một lập trình viên giỏi hơn.


8
Có thể nói cách khác xung quanh. Tôi thấy nhiều người bối rối hơn bây giờ thậm chí 5 đến 10 năm trước.
haylem

@Haylem Nhìn lại, tôi nghĩ tôi có ý nói ngược lại .... rất tiếc.
bữa ăn trưa317
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.