Під час інтерв'ю мене запитали, чи знаю я різницю між C і C ++.
Мені було цікаво, чому таке питання задають?
Під час інтерв'ю мене запитали, чи знаю я різницю між C і C ++.
Мені було цікаво, чому таке питання задають?
Відповіді:
Якщо питання були сформульовані так: "Чи знаєте ви різницю між C і C ++?" і вам дозволили просто відповісти "Так", тоді я міг бачити ваше плутанину, але якби вони насправді запитували "Що - це - відмінності між C і C ++?" і очікувалася більш відкрита відповідь, я вважаю це законним "проспектом дізнання", як вони кажуть.
Наприклад, лише коли-небудь кодувавшись на C і ніколи в C ++, я ледве зміг би відповісти поза неясним "C ++ підтримує об'єктно-орієнтоване кодування?".
Деякі люди помітили, що існує величезна кількість претендентів на програмування, які взагалі не можуть написати код . Отже, так, задавати "очевидні" питання має ідеальний сенс.
Їх ціла купа. Там в нескінченності людей , у яких є ідіотські викладачі , які викладають C-рядок і new
та delete
, або застарілі підручники або погані книги, які навчаються «C ++» , але на самому справі C, які думають , що ці два досить близько.
Звичайно, якщо ви роботодавець, то сказати, що вони однакові або навіть схожі, - це велике попереджувальне світло.
Є також невеликий відсоток людей (таких як я), які вивчили C ++ ще до того, як засвоїли C.
Я впевнений, що ви знаєте відмінності, але якщо ви студент, який мав лише клас C ++, а не клас C, частини C ++, які не сумісні з C, не будуть очевидними.
Деякі з більш очевидних відмінностей, які я дізнався (не вичерпний перелік) ( ) типів даних структури спочатку не міг містити функцій і не можуть мати приватних членів, тобто дуже важко застосувати правила дійсності абстрактного типу даних в C. ( ) класи не підтримуються в C ( ), передаючи посилання за допомогою оператора ampersand, характерного для C ++ ( ) C не підтримує потоки або шаблони (*) malloc і вільні призначені для використання тільки в C, а не в C ++
На жаль, я думаю, це стає все більш поширеним.
Я думаю, що молоді програмісти, що вийшли з технікуму (або де вони навчаються на своїх навичках), просто не вивчають старіші мови, такі як C, C ++, Lisp, OCaml тощо. Вони просто виходять як "c # програмісти" або "java-програмісти" "і т. д. І, коли вони знаходять роботу, вони не кидають виклик вивченню інших мов.
Звичайно, є такі, які є, але серед тих, з ким я працював, є загальна тенденція молодших програмістів дотримуватися цієї схеми.
Відмова: Оскільки я говорю про освіту, то, звичайно, можуть бути різниці між країнами та країнами щодо того, на що наголошується в освіті.
Мабуть, не буквально, оскільки вони думають, що C ++ і C - це одне і те ж, але з точки зору справжнього розуміння та можливості використовувати різні функції C ++, так.
Основна причина - це бінарний характер переліку мов / інструментів у вашому резюме / резюме. По суті, стандартним здається, що якщо у вас є "Hello World" для збирання та запуску мовою, тоді це нормально, щоб перелічити його у своєму резюме / резюме.
Як це відбувається, версія C "Привіт, світ!" також компілює та працює в C ++. Отже, відсутність будь-якої іншої інформації, все, що бачити "C ++" у резюме говорить мені про те, що ця людина знає достатньо C, щоб отримати "Привіт, світ!" працює і знає, що більшість програм C буде компілюватися в C ++.
Враховуючи це, мені потрібно буде трохи перевірити це на співбесіді. Напевно, я б не зробив цього, запитуючи "Так / Ні" "Чи знаєте ви різницю?" питання, коротше, тому що він має очевидну "правильну" відповідь. Я, мабуть, запитав би кандидата, яка мова їй подобається краще, чому, і якщо є якісь переваги перед тією, яку вона не обрала.
Відповідь
Так, його загальне. Я бачив таку ситуацію, як я, або колеги, чи код сторонніх бібліотек.
Наприклад, я інколи іноді працюю з іншими мовами програмування або рамками програмування, і мені доводиться пов'язувати або оновлювати бібліотеки "чистого c" або "c ++".
У мене просто з’явилася проблема змінити якийсь код «Pure C». І за допомогою "нових" та "видалити" функції розподілу пам'яті, які є "c ++". Решта коду не була орієнтована на об'єкти
Компілятором був C ++. Пізніше я подав до суду на іншого компілятора і виявив помилку.
Бонус
Якщо хтось запитує, усно, або в письмовому тесті, або в Інтернет-тесті:
"Чи знаєте ви різницю між C або C ++"
А ви відповідаєте "Так" чи "Ні".
Вони справді мають на увазі:
"Чи знаєте ви різницю між C або C ++, якщо ви, будь ласка, скажіть мені?"
Отже, ви повинні відповісти:
"Так. Різниця полягає в тому, що C ++ є її об'єктно-орієнтованою, хоча для зворотної сумісності ви можете використовувати Pure C всередині програми C ++."
Іноді вони не запитають у вас "якщо ви, будь ласка, скажіть мені", і вважають, що ви не знаєте. Не відповідайте просто «так» або «ні».
Редагувати
Вперед, зауважте, що ця відповідь не призначена для того, щоб заявити, що немає різниць, або що я визнаю, що я знаю відмінності, або навіть те, що я знаю, ніж "Hello World" або в C, або C ++. Це відповідь на питання шляхом постановки технічного завдання, вказуючи на те, що багато людей знають елементарні відмінності (наприклад, хтось має деякі +
символи у своєму імені) і дуже мало людей знають усі або навіть більшість відмінностей.
Це залежить від того, що ви розумієте під "програмістом" і що ви маєте на увазі під "різницею".
Я "програміст" (хоча я називаю себе розробником) і намагаюся дати будь-які реальні відмінності між C і C ++. Якщо натиснути, я, мабуть, скажу, що C ++ - це супернабір C, який має простори імен та спадщину; різні способи поводження з пам’яттю. Я знаю досить, щоб виправити деякі помилки або внести якісь зміни у існуючу програму, але я не можу уявити, щоб написати щось більше, ніж просту утиліту на C або C ++. Я знаю достатньо, щоб обійтись, але я не вважаю себе "знанням" жодної з цих мов.
Я знаю інших «програмістів» (також розробників), які навіть не скажуть вам різницю між Java та FORTRAN, або Javascript та Pascal. Вони хороші в тому, що роблять, і не володіють процедурними мовами.
Потім є мільйони посередніх програмістів, які ледве знають єдину мову, з якою вони працюють щодня.
Термін "різниця" є неоднозначним. Я вказав на те, що я вважаю деякими відмінностями вище, але знаю, що вони не є остаточними та завершеними. Дуже мало людей пізнає кожну різницю - набагато більше людей зможуть дати певні нечіткі відповіді (як у мене) щодо орієнтації на об'єкти.
Чи спільно для програміста не знати різниці між C і C ++?
Двадцять років тому? Так.
Сьогодні? Не так багато.
Причиною цього є те, що ландшафт програмування сильно змінився. Багато сучасних програм на базі веб-сторінок; навіть програми, написані для настільних комп'ютерів, можуть бути написані мовою більш високого рівня, ніж C або C ++. Таким чином, якщо ви не програміст, який пише код ОС, ви, можливо, не знаєте багато про одну з двох мов.
Інтерв'юер може задати це питання в інтерв'ю, щоб оцінити, наскільки ви знаєте про основи програмування; якщо ви знаєте різницю між C і C ++, то ви, ймовірно, знаєте, що таке об'єктно-орієнтоване програмування, ви, мабуть, розумієте бібліотеки та компілятори, ви розумієте функції пам'яті, посилання, покажчики .... багато речей, які вплинули на мови програмування сьогодні . Я мало використовую C ++ (і я не можу сказати, що я чудовий програміст на будь-якій мові; мудрість прийде з часом), але можу сказати, що мій досвід роботи з C ++, безумовно, зробив мене кращим програмістом.