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?
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?
Câu trả lời:
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?".
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.
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à new
và delete
hướ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.
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 ++
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.
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.
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".
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.
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.