Что делает вас экспертом в программировании на C?

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

Обновлено: или какая будет поломка? что делает вас хорошим, порядочным, профессиональным и т. д.

Отредактируйте еще раз: я искал больше, например, список навыков или какой-то другой конструктивный критерий, по которому можно было бы судить о собственном владении языком C, поскольку это сложно сделать.

Список на данный момент:

  • Опыт работы в крупных проектах
  • Мастерство указателей (и, я полагаю, управление памятью)
  • Мастерство отладчика (gdb, ...)
  • Мастерство профилировщика (gprof, ...)
  • Мастерство профилировщика памяти (valgrind, ...)
  • Знание основных стандартов

Я задавал тот же вопрос по C++ на собеседованиях, особенно для стажеров и недавних выпускников. Часто дело в том, что они пытаются угадать вашего персонажа больше, чем ваши навыки программирования (на C++). Если вы ставите себе очень высокую оценку, это означает, что вы 1) очень хорошо осведомлены и очень уверены в себе; или 2) довольно невежественный и пытается произвести впечатление только для того, чтобы получить работу. У меня даже был один случай, когда у них было 2 разных теста. Если вы ответите 9 или 10, вам будет сложнее выяснить, к какой из этих двух категорий вы действительно относитесь.

André Caron 20.07.2011 18:32

Я бы сказал, что знаю, как определить, какая функция вызвала сбой, с помощью файла карты.

Rocky Pulley 30.03.2015 20:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
23
2
18 701
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Вы эксперт в c, если можете ответить на все вопросы с меткой «c» на stackoverflow.com, не мигая.

Я одобряю это сообщение. Не забывайте мигать.

Pascal Paradis 19.09.2008 20:58

... и когда дело доходит до области алгоритмов, с которой вы действительно не знакомы ... скажем, например, о DSP? Эти парни действительно пишут большую часть своего кода на C, и они делают волшебство, которого мало кто понимает ...

Nils Pipenbrinck 19.09.2008 21:43

тогда вы не эксперт по C: P

Sekhat 12.02.2009 03:17

Если вы выполните сверхчеловеческую задачу - не моргать в течение нескольких минут, пока вы ищите ответ и пишете сообщение, делает ли это вас опытным программистом на C?

André Caron 20.07.2011 18:34

Каждый является экспертом на ярмарке вакансий

Некоторые могут не согласиться, но я думаю, что опыт является ключом к знанию любого языка. Я знаю множество людей, которые прошли сертификационный тест, но не смогли применить свои знания к чему-либо практическому в реальном мире.

Так что я думаю, что в целом быть экспертом - это результат наличия достаточных знаний по данному предмету (C), а затем применения их к достаточному количеству сценариев реального мира, чтобы делать ошибки, которые мы все делаем, и извлекать уроки из них.

Мастерство указателей.

Это не экспертные знания, это базовая компетенция!

Jim 19.09.2008 21:02

Я не могу себе представить, чтобы кто-то мог даже называть себя программистом на C (то есть с оценкой 1 по шкале от 1 до 10), не владея указателями.

EmmEff 19.09.2008 21:02

Я освоил указатели задолго до того, как начал изучать C. Я написал код на ассемблере.

Ferruccio 19.09.2008 21:18

Мастерство, люди. Не компетентность.

J Miller 19.09.2008 21:24

Для кого-то менее опытного, чем вы, вы эксперт.

Для кого-то более опытного, чем вы, вы новичок.

Я бы сказал, что для любого языка ключевым моментом является опыт. Просто нужно время, чтобы выучить язык и изучить API и «идиомы», которые использует язык. Является ли кто-то экспертом в чем-либо, это то, о чем следует спросить своих коллег. Перефразируя Джеффа Фоксуорти: «Если вы ответите на большее количество вопросов, чем задаете, вы мог бы станете экспертом».

Когда я брал интервью у Google, интервьюер посоветовал мне думать об этом так. По шкале от 1 до 10 для уровня владения языком "10" означает, что вы написали статьи и / или книги или выступили на конференции по программированию на С. Исходя из этого, очень немногие люди 10сек.

FWIW, я программировал на C 15 лет. Считаю себя очень опытным. Я бы, наверное, поставил себе твердую 8 или 8,5.

У меня был подобный опыт. Мне сказали использовать шкалу, где 1 = «Могу написать Hello, world!» и 10 = «Может написать работающий компилятор».

Bill the Lizard 19.09.2008 21:04

Я поддержал это за смирение.

Alex Gartrell 19.09.2008 21:07

Проблема в том, что разница между 1 и 10 в этой шкале не является линейной.

RomanM 19.09.2008 21:12

По этой шкале люди подразумевают, что они будут уступать кому-то с 9 / 9,5 / 10. Herb. Шильдт написал книги, но готов поспорить, что Эммэфф не должна ему подчиняться. Функционирующий (даже очень строгий) компилятор отличается от знания std. или применяя его хорошо. Я бы сказал, что Google слишком самоуверен.

James Antill 19.09.2008 21:14

Нельзя утверждать, что Google самовлюблен, но для них это простой способ изменить положение позеров на шкале. И да, я, конечно, согласен, что масштаб нелинейный.

EmmEff 19.09.2008 21:21

И Google ПОЛНОСТЬЮ полон себя. Но ведь так они и любят своих сотрудников ....

AviD 21.09.2008 04:09

@RomanM: почему это проблема, разве в школе тоже не так? Разница между 6 и 7 на порядок меньше разницы между 9 и 10.

kellogs 22.03.2012 14:47

Я думаю, что справедливым ответом было бы понимание всех особенностей ISO C.

Реальность, как вам скажет любой регулярный пользователь comp.lang.c, такова, что почти ничего, что нужно сделать людям, невозможно сделать в чистом ISO C, так как обычно вам нужно взаимодействовать с вашей средой более четко определенным образом. Вот где рождается POSIX.

Я бы не моргнул ни на кого, кто считает себя «экспертом», у кого есть твердое понимание языка C, достойное понимание того, что обещает ISO C, и рабочее понимание функций POSIX.

Подобные вопросы на собеседовании всегда непростые. Вы хотите немного подуть в свой рог, но не звучать так резко.

Если вы много сделали с C (скажем, работали над проектами с открытым исходным кодом на C), то я бы ответил этим, но не просто указав на список достижений в вашем резюме, а поговорив об одном или нескольких из них. их и что в нем было особенно интересно или сложно (в отношении использования C).

Как насчет того, чтобы прочитать книгу Питера ван дер Линдена «Эксперт по программированию на языке Си» и вспомнить все, что он рассказывал?

Я бы сказал, читая ... и не находя в этом ничего нового.

Eli Bendersky 19.09.2008 21:14
Ответ принят как подходящий

Опыт - ключ к успеху, знание «правил» и синтаксиса языка, конечно, необходимо, но это только основа. Ключевым моментом является изучение распространенных ошибок и идиом для правильного поведения.

Зная, какие ресурсы существуют, чтобы получить помощь при программировании, и, конечно же, знать, что у вас есть цепочка инструментов. Я знал многих «экспертов» по ​​C++, которые никогда не использовали отладчик или трекер памяти. Если вы спросите меня, быть экспертом в чем-то отличается от того, чтобы быть знатоком чего-то, если вы знаете все аспекты этого.

Добавлю к этому, что вы эксперт в C, когда сделали все возможные ошибки: P

freespace 20.09.2008 09:28

Из-за отсутствия стандартного теста действительно невозможно решить, какой уровень эксперта, но вот несколько моих лакмусовых бумажек, список у всех разный, я уверен.

Не глядя на документацию:

  • Знайте приоритет основных операторов, чтобы вам не пришлось засорять свой код скобками, чтобы избежать неправильного порядка оценки.

  • Уметь написать прототип простого указателя на функцию

  • Удобно передавать указатель на указатель

  • Понять блок, функцию, область действия модуля

Есть еще такие предметы.

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

Даже если бы я считал себя экспертом (не уверен, что я так считаю), я, вероятно, никогда бы не заявил об этом на собеседовании.

Андрей

Что касается приоритета операций, разве пропуск ненужных скобок иногда не происходит за счет ясности кода? Намного проще сделать это явным через скобки, чем сказать: «О, любой будущий читатель должен знать, как это работает».

Alex Gartrell 19.09.2008 21:12

Я считаю знание приоритета совершенно неважным. Мне всегда нравилось правило, сформулированное Стивом Уаллином в «Практике C»: -------------------- 1) Умножение и деление предшествуют сложению и вычитанию. 2) Заключите все остальное в круглые скобки. --------------------

Michael Burr 19.09.2008 21:17

Я думаю, проблема с этим вопросом в том, что ответ бессмысленный. Я вижу, как люди говорят об опыте, и это хорошо, и я вижу, как люди говорят о понимании тонкостей языка, и это хорошо. Однако, если бы я нанял кого-то для работы над моим проектом C, и у меня была бы волшебная восьмерка, которая дала бы мне точный ответ на любой (и только один) вопрос, я бы никогда не спросил его: «Являются ли они C? эксперт ».

Почему?

То, что кто-то является экспертом по C, не означает, что он хороший разработчик программного обеспечения. Опыт и знание языка - это хорошо, но я думаю, что и то, и другое превосходит это нематериальное, не поддающееся количественной оценке свойство, которое делает кого-то «хорошим разработчиком программного обеспечения». Я пытаюсь сказать: «Что делает вас экспертом по программированию на C?» это не полезный вопрос, потому что есть более важные вопросы. Если кто-то является граммood пrogrammer, он окажется на высоте.

В качестве примера: вы можете быть экспертом по программированию на C и плохо работать в команде. Вы можете быть экспертом по программированию на C и отказаться от использования контроля версий. Вы можете быть экспертом по программированию на C, не зная, как на самом деле ДЕЛАТЬ что-либо делать с помощью C.

Предложения «без» в этих предложениях - не менее важные вопросы: что делает вас хорошим командным программистом? Как лучше всего использовать SCM Икс или y? Как вы подходите к программированию клиент-серверной игры, биллингового приложения, веб-браузера, операционной системы или компилятора на C? Если бы кандидат сказал мне: «Нет, я не эксперт по C», но дал мне отличные ответы на эти другие вопросы, я бы мгновенно нанял его, вместо того парня, который, как сказал волшебный шар 8, был экспертом по C, но не Не знаю, как проверить свой код на подрывную деятельность, и не выучил новый язык уже 12 лет.

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

Alex Gartrell 19.09.2008 21:14

Я не имел в виду, что реальные навыки не важны; просто это должно быть умерено с чувством прагматизма и, возможно, даже смирения. Я согласен с тобой.

Max Cantor 19.09.2008 21:16

Кроме того, опытный разработчик - это не просто опытный программист на <ваш язык> - опытный разработчик также должен понимать такие вещи, как архитектура, дизайн, безопасность и т. д., Вещи, которые выходят далеко за рамки синтаксиса языка.

AviD 21.09.2008 04:07

@AviD Я считаю, что это работа архитектора программного обеспечения, и мы не все действительно поддерживаем этот статус.

kellogs 22.03.2012 14:43

@kellogs Конечно, построение архитектуры - это работа архитектора, но это не значит, что хорошему разработчику не нужно ее понимать. Кроме того, есть множество других аспектов - безопасность, производительность, пользовательский интерфейс и т. д. - в которых хороший разработчик может владеть абсолютно должен.

AviD 22.03.2012 15:44

Вы являетесь экспертом в C, когда можете написать свой собственный компилятор C.

Это не дает прямого ответа на ваш вопрос (извините), но может помочь вам решить, как вы себя классифицируете.

Вместо просто «эксперта» и «невежественного новичка» я предпочитаю трехуровневую систему знаний, используемую средневековыми гильдиями:

Ученик

  • Еще нужен RTFM.
  • Осваивает инструменты и приемы своего дела.
  • Нуждается в присмотре.

Подмастерье

  • Прочитал руководство Effin '.
  • Владеет всеми стандартными инструментами и техниками своего дела.
  • Может работать в одиночку и может руководить учениками на рутинной работе.

Владелец

  • Мог бы написать руководство Эффина.
  • Разрабатывает или внедряет новые инструменты и методы.
  • Может курировать крупный проект, который, возможно, никогда раньше не предпринимался.

На ярмарке вакансий? Нет экспертов: все эксперты. :)

Ответы на этот вопрос действительно представляют собой интересное чтение - кажется, что мы не можем прийти к единому мнению о том, что определяет здесь эксперта. Какая надежда появится на более широком форуме, таком как ярмарка вакансий? :-)

Но чтобы вложить свои 2 цента в ... Я думаю, что есть два типа экспертов по C.

  • Есть эксперт в академическом смысле (например, «мог бы написать собственный компилятор», «написал статьи»).
  • Есть прагматичный эксперт. Я хотел бы определить это как «того, кто может написать элегантный код на C, понятный кто угодно».

Я бы сразу же предпочел одно из последних первому. Если у вас есть фрагмент кода, написанный экспертом, который настолько хрупок, что его может прочитать и понять только другой эксперт, то для всех целей этот код невозможно поддерживать. Все очень приятно, что автор этого кода помнит тонкости преобразования типов в середине выражений, но гораздо лучше, если код был написан так, чтобы он был полностью однозначным.

В проектах обычно достаточно технических задач, и всем членам команды не нужно запоминать стандарт C'99.

Умение писать статьи / книги не обязательно делает человека опытным программистом. Это требует большого труда, практического опыта и хорошего понимания различных библиотек C.

Удачи!

Другие вопросы по теме