Подтвердить что ты не робот

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

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

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

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

Список до сих пор:

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

Ответ 1

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

Зная, что, если существуют какие-либо ресурсы для получения помощи во время вашей программы, и, конечно же, зная, что вы - цепочка инструментов. Я знал много "экспертов" С++, которые никогда не использовали отладчик или трекер памяти. Если вы спросите меня, быть экспертом в чем-то отличается от того, чтобы быть опытным в чем-то в вас, знающем все его аспекты.

Ответ 2

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

Почему?

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

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

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

Ответ 3

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

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

Ответ 4

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

Для кого-то более квалифицированного, чем вы, вы новичок.

Ответ 5

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

Ответ 6

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

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

Apprentice

  • По-прежнему нужен RTFM.
  • Как справиться с инструментами и методами своего ремесла.
  • Требуется контроль.

подмастерье

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

Мастер

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

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

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

Проекты обычно имеют достаточно технических проблем, не добавляя необходимости, чтобы все члены команды запомнили стандарт C'99.

Ответ 10

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

Ответ 11

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

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

Ответ 12

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

Без просмотра документации:

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

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

  • Удовлетворитесь передачей указателя на указатель

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

Есть больше таких элементов.

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

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

Эндрю

Ответ 13

Вообще говоря, никто, присутствовавший на ярмарке вакансий, не является экспертом в области C.

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

Ответ 14

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

Ответ 15

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

Ответ 16

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

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

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

Ответ 17

Как насчет того, чтобы прочитать "Expert C Programming" Питера ван дер Линдена и запомнить все, что он накрыл?

Ответ 18

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

Ответ 19

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

Удачи!