У меня есть вопрос, на который, я думаю, лучше всего ответить здесь.
Я довольно хорошо справляюсь C++
, хорошо знаю язык, я прочитал Accelerated C++
и выполнил почти все упражнения.
Однако у меня большая проблема. Нужно ли учиться C
? Я никогда не делал C
никогда в своей жизни. Я только начал, C++
когда я начал с программирования. Наверное потому, что мне всегда было интересно узнать, почему все называют язык таким сложным. Теперь, хотя я знаю ответ на этот вопрос;)
Мне особенно интересно узнать, смогу ли я выжить, не зная C
в современном мире. Например, если я дам интервью в компании, если я скажу им, что я не знаю C
- они примут это как хорошо? Два языка, с которыми я хорошо знаком, это Python и C ++. Я спрашиваю об этом, потому что я слышал, что компании спрашивают структуры данных в интервью. Так что, если они попросят меня реализовать это, и если я сделаю это на C ++, это приемлемо?
И люди, которые говорят «как вы можете не знать C, когда вы C ++», пожалуйста, не отвечайте :) Не обижайтесь, но я не понимаю, почему изучение C является обязательным условием.
Ответы:
Если вы знаете C ++, я бы не стал изучать C только ради этого. Вам не должно быть слишком сложно учиться, если и когда вам это нужно.
Я бы предпочел встретить человека, который утверждает, что знает C ++, но не C, чем человека, который утверждает, что знает C / C ++.
источник
Ответ из нескольких частей. Только мои мнения.
Мой опыт (25 лет от колледжа) заключается в том, что C ++, хотя и становится все более редким, по-прежнему будет жизненно важным для интересных систем в обозримом будущем. Так что я придерживаюсь этого как моей основной области знаний. Работа тяжелая, интересная и важная.
Программисты C ++, как правило, ценны именно потому, что они не выросли на управляемых языках, и поэтому имеют больше шансов понять, что происходит под прикрытием. Проще перейти с C ++ на C # / Java, чем наоборот, потому что планка входа выше.
Поэтому, на мой взгляд, не обязательно понимать C, чтобы грамотно программировать на C ++, но понимание того, почему C ++ существует в контексте C - его ограничения и сильные стороны и как они решаются или нет в C ++ - было бы неоценимо для вас со временем.
Удачи.
источник
Вот что говорит Бьярне:
источник
Просто мое личное мнение: если вы знаете C ++, вы можете писать на C. Некоторый опыт был бы неплох, но это не проблема. Обратное неверно: знание C не позволяет писать на C ++ без дополнительного обучения. Я никогда не изучал C, и использую его, когда это необходимо, без каких-либо проблем.
источник
Хорошо, обо всем по порядку - нет, знание C не является обязательным условием для изучения C ++. Действительно, это может быть помехой.
Во-вторых, это полностью ситуативно. Нужно ли вам знать C, полностью зависит от того, требует ли это работа. Если вы хотите быть парнем по встроенным системам, то да, изучение C поможет. В противном случае большинство рабочих мест не требуют этого. Если работа нуждается в C, это должно сказать так. Если это не так, то, вероятно, это не нужно. Что касается структур данных, опять же, дело за компанией. Обычно компания говорит: «Мы программируем на этих языках, напишите нам эту структуру данных. Используйте язык по вашему выбору из списка выше». Если они просят вас написать это на C, вы просто скажете: «Я не знаю C - в моем резюме не сказано, что я знаю C, эта работа не для меня».
источник
Спросите, нужен ли им С (и хотите ли вы учиться этому или нет, если они это делают).
Я бы так и ожидал, если бы они брали у вас интервью и нанимали вас на работу в C ++.
Если это вопрос «структур данных», вы можете спросить их, хотят ли они, чтобы вы продемонстрировали использование контейнеров STL, или же (потому что это интервью) они хотят, чтобы вы реализовали структуры данных с нуля.
источник
C - почти правильное подмножество C ++. Если вы не знаете C, то вы не знаете большое и важное подмножество C ++. Вы должны изучить это подмножество? Нет. C ++ - смехотворно большой язык, и большинство людей выбирают подмножество и программы с этим. Не обязательно, чтобы вы знали подмножество C. Особенно это не так важно, чтобы знать стандартную библиотеку C. Тем не менее, я бы бросил очень подозрительный взгляд на любого, кто не понимал основных понятий C, таких как указатели, массивы и чередование.
источник
Нет, вам не нужно. Период.
Но изучение любого нового языка программирования полезно в долгосрочной перспективе. Изучение языков на основе различных парадигм программирования еще более полезно. Будь то язык ООП (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 уже несколько лет использовался там). Другие компании не имеют ничего общего с C. Язык C - это язык более низкого уровня, чем, скажем, Python или Java, и во многих прикладных программах может не потребоваться знание языка C. В отличие от языков ООП, C требует другого подхода, благодаря которому Я имею в виду, что программы структурированы и организованы по-разному, и необходимо учитывать некоторые более тонкие аспекты. Как правило, полезно изучить эту идиому, даже если можно так выразиться. Но опять же, заботятся ли компании, зависит от их потребностей. Кто-то может дать вам выбор языка, кому-то может потребоваться Java, другим - C ++, другим - C и т. Д. Можете ли вы выжить? Да, сегодня' В мире так много разных областей программирования, что вы никогда не сможете пройти мимо кода Си. Стоит ли учить С? Я бы сказал - да, независимо от дальнейшего использования.
источник
Некоторые люди могут не чувствовать себя комфортно в программировании на C, когда знают C ++.
В C ++ существует «защитная» структура, которая способствует управлению не только структурой, но и алгоритмами программы. Например, помощь структуры и алгоритмов STL, очевидный подход объектно-ориентированного программирования, кон / деструктор, добавленный уровень абстракции, исходящий из шаблонов ...
В то время как C - сказал - проще, он заставляет программиста самостоятельно вводить структуру и алгоритмы в моделирование проблемы. Это интенсивное увеличение свободы программирования.
Но это имеет свою стоимость, поскольку некоторым людям нужна более навязанная структура и создание программы, которую, как правило, сложнее поддерживать по мере роста. Я часто говорю, что проблема не в языке (C), а в том, что с ним делают.
При этом, как рекрутер, я рад взять интервью у кого-то с сильными навыками C ++, но был бы еще более восторженным, если бы у нее было достаточно языковой автономии для разработки всего C-проекта.
Кроме того, хорошая C-программа подразумевает хорошие навыки работы с системой разработчика, поскольку язык требует (как правило) четкого понимания компонентов системы для создания эффективного запуска.
источник
Если вы чувствуете себя комфортно в C ++, я не стал бы беспокоиться об изучении C. C ++ имеет много улучшений по сравнению с C (возможность поддерживать RAII с помощью конструкторов / деструкторов, базовых контейнеров, потоков и строк велика).
Однако я бы предложил изучить функции
printf
иscanf
ряд функций, чтобы вы могли ПРОЧИТАТЬ код, который их использует. Они довольно популярны в C ++, поэтому полезно знать, как их использовать. Я не предлагаю использовать их в своем собственном коде без особой причины.источник
Единственный раз, когда вам нужно знать C, это если вы ожидаете, что создадите C-код. Если нет, то проблем нет.
Я не писал С профессионально за последние 6 лет или около того; Есть множество областей применения, лучше обслуживаемых другими языками (по крайней мере, с точки зрения производительности, если не производительности), такими как Java, C # или Python. Вы наверняка можете выжить и даже процветать как разработчик программного обеспечения, даже не прикасаясь к C.
Если вы хотите выучить C для собственного насилия, это нормально. В зависимости от того, как вы изучили C ++ и насколько вы зависимы от специфических для C ++ функций (шаблоны, ссылочные типы, STL, перегрузка), вы можете немного колебаться, когда понимаете, что 90% инструментов, которые сделали программирование приемлемым, больше не доступны. Такие вещи, как управление памятью в C, очень трудоемки и утомительны по сравнению с C ++ или Java. Есть также некоторые несовместимости между C и C ++, и с каждой новой языковой версией этот разрыв будет увеличиваться.
Есть еще области применения, где C - подходящий инструмент для работы: маленький, быстрый, не слишком много волшебства, и это не сборка. Но для общей разработки приложений (особенно для настольных приложений с графическим интерфейсом) существуют гораздо лучшие инструменты.
источник
Я думаю, что если вы чувствуете себя комфортно с C ++, вы тоже будете с C.
Основное различие между ними заключается в том, что C ++ является чистым - объектно-ориентированным, а C - нет :)
источник
Знание C даст вам более глубокое понимание управления памятью и т. Д. Это все о том, какой низкий уровень вы хотите получить, и помогает ли вам понимание вещей на нижнем уровне или нет. Вы можете сделать еще один шаг и выучить ассемблер, но все зависит от того, сколько он вам стоит.
Это также зависит от того, хотите ли вы программировать на C или нет. :)
источник
Да, это нормально ...
ИМХО, так как ты хорош
C++
, этого действительно достаточно ...Бьюсь об заклад, есть отрасли, которые ищут программистов на C ++ ... Но как только вы в этом разбираетесь, все зависит от потребностей вашего проекта. Что бы вам ни потребовалось, вам, возможно, придется учиться. Это может быть Java, .Net или даже C .. Если компания готова заплатить вам, просто изучите это ...
Если вы находитесь на ранних этапах своей карьеры, интервьюеры IME, как правило, изучают ваше отношение и понимание языка, который вам удобен.
Вместо того, чтобы учиться
C
ради, немного изучите C ++. Улучшайте то, в чем вы хороши ... Уверен, вам есть чему поучиться ... Мне всегда есть что изучать в C ++ ..: )источник
Я думаю, что наиболее важные вещи, которые вы должны знать о C, - это различия между C и C ++. Вы, вероятно , увидеть код , который имеет некоторый тип C в нем в какой - то момент, и вы не должны быть перепутаны , когда вы видите такие вещи , как
malloc
,free
,printf
,fopen
, илиfclose
. Вы также должны знать, насколько они похожи, а также чем они отличаются от своих аналогов в C ++.Вы также должны знать, что
<<
и>>
левый и правый операторы сдвига, а не операторы вставки. В C ++, где вы можете перегрузить операторы, они были перегружены для выполнения вставки потока и тому подобных вещей, но они все еще используются для сдвига целых чисел.Убедитесь, что вы понимаете все основные функции C ++, которых нет в C. Если вы достаточно прочтете stackoverflow.com, вы увидите много вопросов, которые касаются различий в языках и недопонимания их людьми.
Вам также следует ознакомиться с препроцессором C, который почти такой же, как (и часто с той же программой), что и препроцессор C ++. Знание того, как его использовать, поможет вам в C ++, но на него больше полагается в C.
В C ++ есть одна большая проблема, с которой трудно иметь дело, это деструкторы. Эти вещи можно вызывать повсюду, заботясь о высвобождении ресурсов, но в C вы должны делать все это более явно. Программистам C ++ легко забыть об этом.
Что касается интервью, если кто-то просит вас написать код для какого-то общего алгоритма на C, и вы делаете что-то вроде:
Я не думаю, что они решат, что вы не знаете, что делаете, потому что не делали:
И им на самом деле не должно быть никакого дела, если вы используете их,
cout
если только они не пытаются продемонстрировать вашу способность справляться с вводом и выводом, что в C ++ облегчает использование в обычных случаях.Если вы оказались в состоянии пройти собеседование на работу, требующую C, вы должны быть откровенны в том, что у вас недостаточно знаний о C за пределами его совпадения с C ++. Они, вероятно, поймут, что хороший программист должен уметь довольно быстро переходить на C из C ++.
Все это, как говорится, C не такой уж большой язык. Стандартная библиотека намного меньше, чем в C ++, и не так уж сложно познакомиться с ее наиболее распространенными частями, поэтому ее изучение не помешает.
источник