Вчера я присутствовал на ярмарке вакансий, и разработчик спросил меня, как я оцениваю свой уровень владения языком C. Затем я понял, что это невероятно произвольно и почти невозможно определить, поэтому мой вопрос: какие знания делают вас экспертом в программировании на C?
Обновлено: или какая будет поломка? что делает вас хорошим, порядочным, профессиональным и т. д.
Отредактируйте еще раз: я искал больше, например, список навыков или какой-то другой конструктивный критерий, по которому можно было бы судить о собственном владении языком C, поскольку это сложно сделать.
Список на данный момент:
Я бы сказал, что знаю, как определить, какая функция вызвала сбой, с помощью файла карты.





Вы эксперт в c, если можете ответить на все вопросы с меткой «c» на stackoverflow.com, не мигая.
Я одобряю это сообщение. Не забывайте мигать.
... и когда дело доходит до области алгоритмов, с которой вы действительно не знакомы ... скажем, например, о DSP? Эти парни действительно пишут большую часть своего кода на C, и они делают волшебство, которого мало кто понимает ...
тогда вы не эксперт по C: P
Если вы выполните сверхчеловеческую задачу - не моргать в течение нескольких минут, пока вы ищите ответ и пишете сообщение, делает ли это вас опытным программистом на C?
Каждый является экспертом на ярмарке вакансий
Некоторые могут не согласиться, но я думаю, что опыт является ключом к знанию любого языка. Я знаю множество людей, которые прошли сертификационный тест, но не смогли применить свои знания к чему-либо практическому в реальном мире.
Так что я думаю, что в целом быть экспертом - это результат наличия достаточных знаний по данному предмету (C), а затем применения их к достаточному количеству сценариев реального мира, чтобы делать ошибки, которые мы все делаем, и извлекать уроки из них.
Мастерство указателей.
Это не экспертные знания, это базовая компетенция!
Я не могу себе представить, чтобы кто-то мог даже называть себя программистом на C (то есть с оценкой 1 по шкале от 1 до 10), не владея указателями.
Я освоил указатели задолго до того, как начал изучать C. Я написал код на ассемблере.
Мастерство, люди. Не компетентность.
Для кого-то менее опытного, чем вы, вы эксперт.
Для кого-то более опытного, чем вы, вы новичок.
Я бы сказал, что для любого языка ключевым моментом является опыт. Просто нужно время, чтобы выучить язык и изучить API и «идиомы», которые использует язык. Является ли кто-то экспертом в чем-либо, это то, о чем следует спросить своих коллег. Перефразируя Джеффа Фоксуорти: «Если вы ответите на большее количество вопросов, чем задаете, вы мог бы станете экспертом».
Когда я брал интервью у Google, интервьюер посоветовал мне думать об этом так. По шкале от 1 до 10 для уровня владения языком "10" означает, что вы написали статьи и / или книги или выступили на конференции по программированию на С. Исходя из этого, очень немногие люди 10сек.
FWIW, я программировал на C 15 лет. Считаю себя очень опытным. Я бы, наверное, поставил себе твердую 8 или 8,5.
У меня был подобный опыт. Мне сказали использовать шкалу, где 1 = «Могу написать Hello, world!» и 10 = «Может написать работающий компилятор».
Я поддержал это за смирение.
Проблема в том, что разница между 1 и 10 в этой шкале не является линейной.
По этой шкале люди подразумевают, что они будут уступать кому-то с 9 / 9,5 / 10. Herb. Шильдт написал книги, но готов поспорить, что Эммэфф не должна ему подчиняться. Функционирующий (даже очень строгий) компилятор отличается от знания std. или применяя его хорошо. Я бы сказал, что Google слишком самоуверен.
Нельзя утверждать, что Google самовлюблен, но для них это простой способ изменить положение позеров на шкале. И да, я, конечно, согласен, что масштаб нелинейный.
И Google ПОЛНОСТЬЮ полон себя. Но ведь так они и любят своих сотрудников ....
@RomanM: почему это проблема, разве в школе тоже не так? Разница между 6 и 7 на порядок меньше разницы между 9 и 10.
Я думаю, что справедливым ответом было бы понимание всех особенностей ISO C.
Реальность, как вам скажет любой регулярный пользователь comp.lang.c, такова, что почти ничего, что нужно сделать людям, невозможно сделать в чистом ISO C, так как обычно вам нужно взаимодействовать с вашей средой более четко определенным образом. Вот где рождается POSIX.
Я бы не моргнул ни на кого, кто считает себя «экспертом», у кого есть твердое понимание языка C, достойное понимание того, что обещает ISO C, и рабочее понимание функций POSIX.
Подобные вопросы на собеседовании всегда непростые. Вы хотите немного подуть в свой рог, но не звучать так резко.
Если вы много сделали с C (скажем, работали над проектами с открытым исходным кодом на C), то я бы ответил этим, но не просто указав на список достижений в вашем резюме, а поговорив об одном или нескольких из них. их и что в нем было особенно интересно или сложно (в отношении использования C).
Как насчет того, чтобы прочитать книгу Питера ван дер Линдена «Эксперт по программированию на языке Си» и вспомнить все, что он рассказывал?
Я бы сказал, читая ... и не находя в этом ничего нового.
Опыт - ключ к успеху, знание «правил» и синтаксиса языка, конечно, необходимо, но это только основа. Ключевым моментом является изучение распространенных ошибок и идиом для правильного поведения.
Зная, какие ресурсы существуют, чтобы получить помощь при программировании, и, конечно же, знать, что у вас есть цепочка инструментов. Я знал многих «экспертов» по C++, которые никогда не использовали отладчик или трекер памяти. Если вы спросите меня, быть экспертом в чем-то отличается от того, чтобы быть знатоком чего-то, если вы знаете все аспекты этого.
Добавлю к этому, что вы эксперт в C, когда сделали все возможные ошибки: P
Из-за отсутствия стандартного теста действительно невозможно решить, какой уровень эксперта, но вот несколько моих лакмусовых бумажек, список у всех разный, я уверен.
Не глядя на документацию:
Знайте приоритет основных операторов, чтобы вам не пришлось засорять свой код скобками, чтобы избежать неправильного порядка оценки.
Уметь написать прототип простого указателя на функцию
Удобно передавать указатель на указатель
Понять блок, функцию, область действия модуля
Есть еще такие предметы.
С другой стороны, я не думаю, что вам нужно уметь понимать или уметь записывать устройство Даффа или разгадывать запутанные соревнования C в своей голове, чтобы считать себя экспертом.
Даже если бы я считал себя экспертом (не уверен, что я так считаю), я, вероятно, никогда бы не заявил об этом на собеседовании.
Андрей
Что касается приоритета операций, разве пропуск ненужных скобок иногда не происходит за счет ясности кода? Намного проще сделать это явным через скобки, чем сказать: «О, любой будущий читатель должен знать, как это работает».
Я считаю знание приоритета совершенно неважным. Мне всегда нравилось правило, сформулированное Стивом Уаллином в «Практике C»: -------------------- 1) Умножение и деление предшествуют сложению и вычитанию. 2) Заключите все остальное в круглые скобки. --------------------
Я думаю, проблема с этим вопросом в том, что ответ бессмысленный. Я вижу, как люди говорят об опыте, и это хорошо, и я вижу, как люди говорят о понимании тонкостей языка, и это хорошо. Однако, если бы я нанял кого-то для работы над моим проектом C, и у меня была бы волшебная восьмерка, которая дала бы мне точный ответ на любой (и только один) вопрос, я бы никогда не спросил его: «Являются ли они C? эксперт ».
Почему?
То, что кто-то является экспертом по C, не означает, что он хороший разработчик программного обеспечения. Опыт и знание языка - это хорошо, но я думаю, что и то, и другое превосходит это нематериальное, не поддающееся количественной оценке свойство, которое делает кого-то «хорошим разработчиком программного обеспечения». Я пытаюсь сказать: «Что делает вас экспертом по программированию на C?» это не полезный вопрос, потому что есть более важные вопросы. Если кто-то является граммood пrogrammer, он окажется на высоте.
В качестве примера: вы можете быть экспертом по программированию на C и плохо работать в команде. Вы можете быть экспертом по программированию на C и отказаться от использования контроля версий. Вы можете быть экспертом по программированию на C, не зная, как на самом деле ДЕЛАТЬ что-либо делать с помощью C.
Предложения «без» в этих предложениях - не менее важные вопросы: что делает вас хорошим командным программистом? Как лучше всего использовать SCM Икс или y? Как вы подходите к программированию клиент-серверной игры, биллингового приложения, веб-браузера, операционной системы или компилятора на C? Если бы кандидат сказал мне: «Нет, я не эксперт по C», но дал мне отличные ответы на эти другие вопросы, я бы мгновенно нанял его, вместо того парня, который, как сказал волшебный шар 8, был экспертом по C, но не Не знаю, как проверить свой код на подрывную деятельность, и не выучил новый язык уже 12 лет.
Еще один хороший момент заключается в том, что специалисты по C могут попытаться запрограммировать ВСЕ на C, когда в этом явно нет необходимости. Я согласен с тем, что вы говорите, но, при прочих равных, я бы сказал, что знание технологии - это хорошо (когда используется только по мере необходимости).
Я не имел в виду, что реальные навыки не важны; просто это должно быть умерено с чувством прагматизма и, возможно, даже смирения. Я согласен с тобой.
Кроме того, опытный разработчик - это не просто опытный программист на <ваш язык> - опытный разработчик также должен понимать такие вещи, как архитектура, дизайн, безопасность и т. д., Вещи, которые выходят далеко за рамки синтаксиса языка.
@AviD Я считаю, что это работа архитектора программного обеспечения, и мы не все действительно поддерживаем этот статус.
@kellogs Конечно, построение архитектуры - это работа архитектора, но это не значит, что хорошему разработчику не нужно ее понимать. Кроме того, есть множество других аспектов - безопасность, производительность, пользовательский интерфейс и т. д. - в которых хороший разработчик может владеть абсолютно должен.
Вы являетесь экспертом в C, когда можете написать свой собственный компилятор C.
Это не дает прямого ответа на ваш вопрос (извините), но может помочь вам решить, как вы себя классифицируете.
Вместо просто «эксперта» и «невежественного новичка» я предпочитаю трехуровневую систему знаний, используемую средневековыми гильдиями:
На ярмарке вакансий? Нет экспертов: все эксперты. :)
Ответы на этот вопрос действительно представляют собой интересное чтение - кажется, что мы не можем прийти к единому мнению о том, что определяет здесь эксперта. Какая надежда появится на более широком форуме, таком как ярмарка вакансий? :-)
Но чтобы вложить свои 2 цента в ... Я думаю, что есть два типа экспертов по C.
Я бы сразу же предпочел одно из последних первому. Если у вас есть фрагмент кода, написанный экспертом, который настолько хрупок, что его может прочитать и понять только другой эксперт, то для всех целей этот код невозможно поддерживать. Все очень приятно, что автор этого кода помнит тонкости преобразования типов в середине выражений, но гораздо лучше, если код был написан так, чтобы он был полностью однозначным.
В проектах обычно достаточно технических задач, и всем членам команды не нужно запоминать стандарт C'99.
Умение писать статьи / книги не обязательно делает человека опытным программистом. Это требует большого труда, практического опыта и хорошего понимания различных библиотек C.
Удачи!
Я задавал тот же вопрос по C++ на собеседованиях, особенно для стажеров и недавних выпускников. Часто дело в том, что они пытаются угадать вашего персонажа больше, чем ваши навыки программирования (на C++). Если вы ставите себе очень высокую оценку, это означает, что вы 1) очень хорошо осведомлены и очень уверены в себе; или 2) довольно невежественный и пытается произвести впечатление только для того, чтобы получить работу. У меня даже был один случай, когда у них было 2 разных теста. Если вы ответите 9 или 10, вам будет сложнее выяснить, к какой из этих двух категорий вы действительно относитесь.