Це нормально, якщо я не знаю С, але я добре з C ++? [зачинено]


23

У мене є питання, на який я думаю, що тут найкраще відповісти.

Мені досить добре C++, добре, як в моїй мові мені комфортно, я читав Accelerated C++і робив майже всі вправи.

Однак у мене є велика проблема. Чи потрібно мені вчитися C? Я ніколи Cв житті цього не робив . Я тільки почав з того, C++коли почав займатися програмуванням. Можливо, тому, що мене завжди цікавило, чому всі називають мову такою складною. Тепер, хоча я знаю відповідь на це питання;)

Мені особливо цікаво знати, чи зможу я вижити, не знаючи Cв сучасному світі. Як, якщо я даю інтерв'ю в компанії, якщо я скажу їм, що не знаю C- чи приймуть це як добре? Дві мови, з якими я гарний - це Python та C ++. Я питаю про цю причину. Я чув, що компанії запитують структури даних на інтерв'ю. Тож якщо вони попросять мене реалізувати це, і якщо я це роблю в C ++, чи прийнятно це?

І люди, які говорять "як ти не можеш знати C, коли ти C ++", будь ласка, не відповідай :) Без образи, але я не розумію, чому вивчення C є обов'язковою умовою.



1
Стаття, яку цитує DumbCoder, розповідає про популярність C у вбудованому програмуванні.
ChrisW

2
@ChrisW - Так, але це все ще показує, що C не так просто освоїти, не те, що C ++ легко освоїти.
DumbCoder

@DumbCoder: О, ні, вбудоване програмування. Скільки завдань вбудовано порівняно з настільними?
DeadMG

@DeadMG - Оволодіння мовою не має нічого спільного з тим, скільки завдань доступно для цієї мови. І звідки ви взяли думку про те, що C використовується лише у вбудованому програмуванні?
DumbCoder

Відповіді:


36

Якщо ви знаєте C ++, я б не вчив C тільки заради цього. Вам не повинно бути занадто складно навчитися, якщо і коли це потрібно.

Я набагато скоріше зустріну когось, хто стверджує, що знає C ++, але не C, ніж того, хто стверджує, що знає C / C ++.


О, так. Це список пункту першого в СЦ питанні про міських міфах C ++: stackoverflow.com/questions/2245196/c-urban-myths

4
+1. Якщо ви знаєте C ++, для початку це пізнання вивчити C, а по-друге, це дійсно неважливо.
DeadMG

6
@DeadMG Це може бути легко вивчити синтаксис, оскільки це просто знати, які частини C ++ залишити поза, але вивчити загальні ідіоми важче, і, мабуть, найважливіша частина. Але я б не навчився C, якщо не знадобиться.
KeithB

6
@chubsdad Ви маєте на увазі, що я не повинен ставити на резюме "Я знаю Java / Javascript"?
інкогніто,

@ user257493: Немає такого поняття, як Java / Javascript
John Dibling

23

Відповідь на багато частин. Моя думка тільки.

  1. Мій досвід (25 років після закінчення коледжу) полягає в тому, що C ++, хоча все рідше зустрічається, все ще залишатиметься важливим для цікавих систем в осяжному майбутньому. Тож я дотримуюся цього як свого основного напряму знань. Робота важка, цікава та важлива.

  2. Програмісти на C ++, як правило, цінні саме тому, що вони не виросли на керованих мовах, і тому вони мають більше шансів зрозуміти, що відбувається під обкладинками. Перехід від C ++ до C # / Java легше, ніж навпаки, тому що планка для входу вище.

  3. Тож, на мій погляд, не важливо розуміти C, щоб грамотно програмувати C ++, розвиваючи розуміння того, чому C ++ існує в контексті C - його обмеження та сильні сторони та як вони вирішуються чи ні в C ++ - було б неоціненний для вас час.

Удачі.


Що змушує вас сказати, що C ++ все частіше зустрічається? З вашого досвіду, що це витісняє?
Праксеоліт


13

Ось що говорить Bjarne:

Знання C - необхідна умова для вивчення C ++, правда?

Неправильно. Загальний підмножина C і C ++ легше засвоїти, ніж C. Буде менше помилок типу вловлювати вручну (система типу C ++ суворіша і виразніша), менше хитрощів для навчання (C ++ дозволяє висловлювати більше речей без циркуляції) та кращі бібліотеки. Найкращий початковий підмножина C ++, який слід вивчити, - це не "весь C".


4

Просто моя особиста думка: якщо ви знаєте C ++, можете написати на C. Деякий досвід був би непоганим, але це не проблема. Неправильне протилежне: знання C не дозволяють писати на C ++ без додаткового навчання. Я ніколи не вивчав С, і користуватися ним, коли це потрібно, без проблем.


3
@Alex Farber - "Якщо ви знаєте C ++, можете писати на C". Я дуже сумніваюся в цьому :)
DumbCoder

4
Не погоджуюсь. IME, програмісти, які вивчають C ++, спершу прагнуть не усвідомлювати, які функції C ++ не мають C. Програмісти, які спочатку навчаються мові C, можуть легко писати на C ++, але починати неідіоматично.
dan04

1
Це ґрунтується на моєму особистому досвіді. Я вивчив C ++ та більшу частину своєї роботи працював на C ++. Але я використовую C при необхідності, без проблем.

Особливо враховуючи, що всі симпатичні ліцензії класу недоступні у C. Imo, перемога таких мов, як C ++ та Java - це libs, а не властиві мовні особливості.

8
Програмісти на C ++, які намагаються зламати свій шлях через C, пишуть поганий код з тих же причин, чому програмісти C намагаються зламати свій шлях через C ++, пишуть поганий код. Хлопці C використовують C ++ як "C з класами", а хлопці C ++ використовують C як "C ++ без класів".
Джон Дайблінг

4

Гаразд, спочатку все - ні, знання C не є необхідною умовою для вивчення C ++. Дійсно, це може бути перешкодою.

По-друге, це абсолютно ситуативно. Від того, чи потрібно вам знати C, повністю залежить від того, вимагає це робота. Якщо ви хочете бути хлопцем із вбудованими системами, то так, навчання C допоможе. Інакше більшість робочих місць цього не потребують. Якщо робота потрібна C, вона повинна так сказати. Якщо це не так, він, мабуть, не потребує цього. Що стосується структур даних, це знову-таки зводиться до компанії. Зазвичай компанія скаже: "Ми програмуємо на цих мовах, напишіть нам цю структуру даних. Використовуйте мову на ваш вибір із списку вище". Якщо вони попросять вас написати це на C, ви просто скажете "Я не знаю С - це не резюмує, що я знаю С, ця робота не для мене".


Чому пізнання C може бути перешкодою до вивчення C ++? Я не кажу, що не погоджуюся обов'язково, але це сміливе твердження.
Кейсі Паттон

3

Як, якщо я даю інтерв'ю в компанії, якщо я скажу їм, що не знаю С - вони приймуть це як добре?

Запитайте, чи потрібен їм C (і будьте готові його вивчити чи ні, якщо вони є).

Тож якщо вони попросять мене реалізувати це, і якщо я це роблю в C ++, чи прийнятно це?

Я би очікував цього, якби вони опитують / наймають вас на роботу в C ++.

Якщо це питання "структури даних", ви можете запитати їх, чи хочуть вони продемонструвати, використовуючи контейнери STL, чи хочуть (оскільки це інтерв'ю), щоб ви реалізували структури даних з нуля.


2

C - майже належна підмножина C ++. Якщо ви не знаєте C, то ви не знаєте великого і важливого підмножини C ++. У вас є , щоб дізнатися про це підмножина? Ні. C ++ - це смішно велика мова, і більшість людей вибирають для цього підмножину та програму. Не потрібно, щоб ви знали підмножину, яка є C. Тим більше, не так важливо знати стандартну бібліотеку С. Проте я б кинув дуже підозріло на тих, хто не розумів основних понять C, таких як вказівники, масиви та біт-подвійність.


2

Чи потрібно вивчати С?

Ні, не потрібно. Період.

Але вивчення будь-якої нової мови програмування вигідно з часом. Вивчення мов на основі різних парадигм програмування ще вигідніше. Будь це мова OOP (Smalltalk або C ++), динамічна мова (Lisp, Clojure, Python), функціональна (Lisp, Haskell, Erlang), паралельна (Erlang, Go, Algol 68, Smalltalk) або будь-яка інша (Fortran 03, Perl, Forth) інша нова новомодна парадигма вражає ваша уява; вивчення різних мов допомагає піддавати вас різним напрямкам мислення, кожен з яких має свої сильні та слабкі сторони для вирішення завдання.

Fortran як і раніше домінує в числових обчисленнях, COBOL як і раніше є основою великих страхових компаній, Unix, BSD та Linux все ще базуються в основному на C. Старий код не втрачає значення з віком завжди, оскільки він не обов'язково зношується як механічні пристрої, які потрібно з часом замінити. Так старий мову може бути цінним з точкою зору зайнятості по порівнянні з більш новою мовою прохолодного фактор.

Так само, як навчання стати багатомовним природними (людськими) мовами, безсумнівно, покращує вашу здатність самовиражатися , те саме несе той самий бонус і для комп'ютерних мов.

Тож я думаю, що важливо (з часом) навчитися вільно володіти не лише кількома мовами, але важливіше володіти декількома парадигмами програмування.

Мені досить добре з C ++, добре, бо мені комфортно з мовою, я читав прискорений C ++ і робив майже всі вправи

Я збираюся створити резервну копію і скажу, що C ++ - це насичена і складна мова, знадобиться років викриття та постійної практики, щоб по-справжньому вільно володіти усіма своїми багатими (або потворними) тонкощами.

Приділіть свій час, і продовжуйте вчитися - це найважливіша порада, яку я можу дати вам. Для того, щоб хтось взявся за це, я рекомендую вам прочитати програму " Навчи себе" Пітера Норвіга на десять років .


1

Дуже коротка відповідь на ваше запитання: це дуже залежить від ваших потреб. Деякі компанії покладаються в основному на C, іноді як на реліквію (якщо C вже використовувався роками там). Інші компанії не мають нічого спільного з C. C - це мова нижчого рівня, ніж, скажімо, Python або Java, і багато прикладних програмувань можуть не вимагати ніяких знань C. На відміну від мов OOP, C вимагає іншого розумного кадру, за яким Я маю на увазі, що програми структуровані та організовані по-різному, і слід врахувати деякі більш тонкі аспекти. Взагалі корисно дізнатися цю ідіому, навіть просто розширити свою думку, так би мовити. Але знову ж таки, чи піклуватимуться компанії, залежить від їх потреб. Деякі можуть дати вам вибір мови, деякі можуть вимагати Java, інші C ++, інші все-таки C тощо. Чи можете ви вижити? Так - сьогодні У світі існує стільки різних областей програмування, що ви навіть не можете пройти повний код C. Ви повинні вивчити C? Я б сказав - так, незалежно від подальшого використання.


1

Деякі люди можуть не відчувати себе комфортно програмуванням на C, знаючи C ++.

Навколо C ++ існує "захисна" структура, яка сприяє керуванню не тільки структурою, але й алгоритмами програми. Наприклад, допомога структури та алгоритмів STL, очевидного об'єктно-орієнтованого підходу до програмування, кондеструктора, доданого абстрактного шару, що надходить із шаблонів ...

Хоча C - сказано - простіше, він змушує програміста сам вводити структуру та алгоритми в моделювання проблеми. Це інтенсивне збільшення свободи програмування.
Але це коштує, оскільки деяким людям потрібна більш нав'язана структура, і побудувати програму, яка, як правило, важче підтримувати, коли вона стає більшою. Я часто кажу, що проблема полягає не в мові (С), а в тому, що хтось з нею робить.

Це, як говорять, як рекрутер, я радий взяти інтерв'ю у когось із сильними C ++ навичками, але був би ще більш захопленим, якби у неї було достатньо мовної автономії для розробки цілого проекту C.

Крім того, хороша програма C передбачає хороші навички роботи розробника, оскільки мова вимагає (як правило) справедливого розуміння компонентів системи для створення ефективного запуску.


Я б не сказав, що це збільшує свободу програміста - ви завжди можете писати власну структуру та алгоритми на C ++.
DeadMG

0

Якщо вам комфортно в C ++, я б не переймався навчанням C. C ++ має багато покращень у порівнянні з C (можливість підтримки RAII за допомогою конструкторів / деструкторів, базових контейнерів, потоків та рядків є великими).

Однак я б запропонував вивчити printfі scanfряд функцій, щоб ви могли прочитати код, який їх використовує. Вони досить популярні в C ++, тому корисне знання того, як вони використовуються. Я не пропоную використовувати їх у власному коді без дуже конкретної причини.


0

Єдиний раз, коли вам потрібно знати C, це якщо ви очікуєте створення коду С. Якщо ні, то проблем немає.

Я не писав професійно С протягом останніх 6 років або близько того; Є безліч областей додатків, які краще обслуговуються іншими мовами (принаймні з точки зору продуктивності, якщо не ефективністю), наприклад, Java або C # або Python. Ви, звичайно, можете вижити і навіть процвітати як розробник програмного забезпечення, не торкаючись жодного разу C.

Якщо ви хочете навчитися C для власного насильства, це добре. Залежно від того, як ви засвоїли C ++ і наскільки надійні ви C ++ - особливості (шаблони, типи посилань, STL, перевантаження), ви можете трохи відкинути, коли зрозумієте, що 90% інструментів, які зробили програмування допустимим, більше не доступні. Такі речі, як управління пам'яттю в С, є дуже трудомістким і стомлюючим порівняно з C ++ або Java. Існують також деякі несумісності між C і C ++, і з кожною новою мовною версією цей розрив збільшиться.

Є ще домени застосування, де C - це правильний інструмент для роботи: невеликий, швидкий, не так багато магії під кришкою, і це не збірка. Але для загальної розробки додатків (особливо настільних додатків, керованих графічним інтерфейсом), є набагато кращі інструменти.


-1

Я думаю, якщо тобі комфортно з C ++, ти будеш занадто з С.

Основна відмінність обох в тому, що C ++ чистий - об'єктно-орієнтований - C не :)


1
Я великий фанат C ++, але я б не називав це чистою. І C ++ є багатопарадигмою, тобто хороший код C ++ не обов'язково орієнтований на об'єкт.
KeithB

-1

Знання C дасть вам більш детальну інформацію про управління пам'яттю тощо. Це все про те, наскільки низький рівень ви хочете отримати і чи допоможе вам розуміння речей на нижньому важелі чи ні. Ви можете зробити це на крок далі і вивчити мову складання, але все залежить від того, наскільки це вам варто.

Це також залежить від того, хочете ви програмувати на C чи ні. :)


-1

Так, добре ...

ІМХО, оскільки ти хороший C++, то й справді достатньо ...

Б'юсь об заклад, що є галузі, які шукають програмістів на C ++ ... Але коли ви ввійдете в нього, все залежить від потреб вашого проекту .. Що б там не потрібно, вам доведеться вчитися .. Це може бути Java, .Net або навіть C .. Якщо компанія готова заплатити вам, просто дізнайтеся це ...

Якщо ви перебуваєте на більш ранніх етапах своєї кар'єри, інтерв'юери IME, як правило, вивчають ваше ставлення та розуміння мови, якою вам подобається ..

Замість того, щоб вчитися Cзаради, навчіться C ++ трохи ретельно. Поліпшуйте те, у чому ви хороші. Я впевнений, що вам багато чого доведеться вчитися ... Для мене завжди в C ++ є чому навчитися ..: )


-1

Я думаю, що найважливіше, що вам потрібно знати про C, - це різниці між C і C ++. Ви, ймовірно , побачити код , який має певний тип C в ньому в будь - то момент, і ви не повинні бути переплутані , коли ви бачите такі речі , як malloc, free, printf, fopen, або fclose. Ви також повинні знати, наскільки вони подібні, а також чим вони відрізняються від C ++.

Ви також повинні знати, що <<і >>оператори зсуву вліво і вправо, а не оператори вставки. У C ++, де ви можете перевантажувати операторів, вони були перевантажені для вставки потоку та подібних речей, але вони все ще використовуються для переміщення цілих чисел.

Переконайтеся, що ви розумієте всі основні функції, які мають C ++, які не містяться у C. Якщо ви прочитаєте stackoverflow.com достатньо, ви побачите багато питань, які стосуються відмінностей у мовах та непорозуміннях людей у ​​них.

Ви також повинні ознайомитись з препроцесором C, який майже такий же, як (і часто та сама програма, що і) препроцесором C ++. Знання, як його використовувати, допоможе вам у C ++, але на нього покладається набагато більше.

Одна велика річ, з якою важко розібратися в C, який має C ++, - це деструктори. Ці речі можна назвати в усьому світі, беручи до уваги звільнення ресурсів, але в C ви повинні робити все це більш чітко. Це легко програмістам на C ++ забути про те, що робити.

Що стосується інтерв'ю, якщо хтось попросить вас написати код для якогось загального алгоритму на C, а ви зробите щось на кшталт:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Я не думаю, що вони вирішать, що ти не знаєш, що ти робиш, тому що ти цього не зробив:

struct foo x;

І їм дійсно не важливо, якщо ви використовувались, coutякщо тільки те, що вони намагаються запропонувати вам продемонструвати, це ваша здатність мати справу з введенням і виведенням, що C ++ полегшує звичайні випадки.

Якщо ви опинитесь на співбесіді на роботу, яка вимагає C, вам слід попередити про недостатнє знання C за межами його перекриття C ++. Вони, ймовірно, зрозуміють, що хороший програміст повинен мати можливість досить швидко здійснити перехід на C з C ++.

Коли все сказане, C не є такою великою мовою. Стандартна бібліотека набагато менша, ніж у C ++, і ознайомитись із найпоширенішими фрагментами її не так вже й складно, тому навчитися цьому насправді не завадить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.