Ви задали стільки питань в одному; дозвольте мені спробувати відповісти, розділяючи їх. Я наймаю багатьох людей, які потрапляють до цього типу профілю, і досить часто мені доводиться брати стільки інтерв'ю і відхиляти людей, оскільки часто вони не мають чіткої відповіді на поставлені вами питання.
Чи добре володіння мовою C або C ++ є достатньою для того, щоб кваліфікувати вас для іншої програми?
Якщо ви на старшому рівні насправді НІ. тобто якщо ви 6 років займалися програмуванням на C ++ на деяких основних корпоративних програмах, а зараз я намагаюся ввести вас у вбудовані системи, які є всіма на C - ймовірно, що ваш синтаксис програмування та як налагодити речі не є проблемою. Але якщо вам потрібно продумати проблему - ви, звичайно, дуже безладно. Це вірно з будь-якої сторони до іншої мови. Чим більше років ви витрачаєте лише один тип мови - тим менше легко трансформуватися в іншій формі! Йдеться не про те, чи зможете ви вивчити синтаксис мови, але ви насправді думаєте інакше, коли ви перебуваєте на C, C ++, Java, perl та Python. Щоб розтягнути питання - найчастіше - хлопці C ++ та Java можуть використовуватися взаємозамінно, як і Perl, PHP, Phython. С зовсім інша порода!
Якщо ви порівняно молодий хлопець - швидше за все, ви зможете наздогнати швидко.
Чи означає це, що я маю вищу майстерність, коли я знаю C ++, а не C
Насправді. Ні. Тому що, як правило, якщо ви здатні створити повний продукт із C, це набагато складніше завдання порівняно з виконанням цього в C ++. Кількість людей, які можуть освоїти проблеми усунення спільної системи пам'яті, значно менша, ніж кількість людей, які можуть написати гідну програму GUI за допомогою VC ++ або подібних фреймів.
Чи означає це, що знання C (або програмування найнижчого рівня) є найвищим рівнем досягнень?
Ні знову! Це не протиріччя. Цього разу це залежить від порівняного вами домену. Якщо ви дивитесь на системи, що програмують всередині ядра Linux, або щось дуже близьке до апаратного, здатність програмування в C є більш актуальною, однак, якщо ви пишете банківське програмне забезпечення або деякі механізми ділових правил - C ++ - це звичайно природний вибір. Справа в тому, що ваша справжня сила полягає не в синтаксисі мови, а в тому, як ви вирішуєте клас проблем, і ви можете лише сподіватися освоїти кілька каталогів / доменів у своєму житті. Якщо ви щось поміщаєте у своє резюме - це те, що насправді рахується.
Це означає, що якщо я був лише в С - я не знаю об'єктно-орієнтованого програмування?
Зовсім ні. Насправді мій лакмусовий тест в інтерв'ю, щоб дізнатися, чи є хлопець зі С, чи С ++, - це задати дуже просте запитання - "Тож чи можете ви робити об'єктно-орієнтоване програмування в C?" - стрибає хлопець і каже - "Однозначно НЕ!" він / вона є С ++. Сенс у тому, що коли ви дійсно пишете дуже складний код, як мультимедійний код, багатопотокова система, стек рівня протоколу, ви все ще «думаєте як об'єктний код» - компілятор C не карає вас, якщо ви погано вкладаєте дві підпрограми. або об'єкти - але коли система масштабує, що продовжує стріляти по вас - я вірю часом - є багато людей, які народжуються в епоху орієнтації на об'єкти, досить часто є досить слабкими щодо того, як інкапсуляція дійсно порушується в коді, який досить багато заповнені класами та предметами. Вибачте, я відступив. Але справа в тому, що більше ваших навичок аналізу проблем та дизайну має значення більше, ніж лише ваші навички програмування.