Какие показатели будут полезны для определения уровня экспертизы в конкретном языке программирования - PullRequest
6 голосов
/ 12 февраля 2009

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

Сценарий: Джордж знает несколько языков программирования и хочет выучить "foobar", но он хотел бы знать, когда у него будет достаточный опыт в "foobar".

Мне действительно интересно нечто большее, чем просто метрика LOC (строки кода).

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

Заранее спасибо!

Ответы [ 15 ]

3 голосов
/ 12 февраля 2009

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

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

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

Извините, это не "жесткий" показатель для вас, это более практичный подход.

3 голосов
/ 12 февраля 2009

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

В ответ на ФП, я думаю, тесты должны оценить:

  • Насколько хорошо вы можете программировать
  • Насколько хорошо вы можете использовать язык программирования

Поэтому метрики могут быть:

  1. В чем преимущество программирования человека (и существуют различные аспекты качества, такие как отсутствие ошибок, удобство обслуживания, быстрая / дешевая запись, быстрое выполнение, удовлетворение требований пользователя и т. Д.)?

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

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

2 голосов
/ 12 февраля 2009

Подожди ...

Даже "LOC" программы является предметом споров! (Речь идет, например, о выводе cat *. {H, c} | wc -l или о каком-либо другом механизме?

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

2 голосов
/ 12 февраля 2009

Я не верю, что это можно «механически измерить». Хотя я много думал об этом.

1 голос
/ 06 июля 2010

Тем не менее, я считаю, что есть некоторые хорошие показатели, такие как McCabe Cyclomatic Metric для цикломатической сложности или количество полезных комментариев на блок кода или даже среднее количество кода, записанного между двумя последовательными тестами.

1 голос
/ 20 февраля 2009

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

Метрика - это результат измерения. Стивенс (см. Википедию: Уровень измерения) предложил, чтобы в измерениях использовались четыре различных типа шкалы: номинальная (присвоение метки), порядковая (присвоение ранжирования), интервал (упорядочение измерений) и отношение (имеющее непроизвольную нулевую начальную точку) , LOC - это коэффициент измерения. Хотя LOC и далек от совершенства, я думаю, что это уместное, объективное число, показывающее, какой у вас опыт работы с языком, и его можно сравнить с количественными показателями в индустрии программного обеспечения. Но возникает вопрос: откуда берутся эти отраслевые ценности?

Лично я бы сказал, что «Джордж» будет знать, что у него есть достаточный опыт, когда он разрабатывает, внедряет и тестирует проект, возможно, по своему выбору на своем персональном времени на своем домашнем компьютере, если это будет необходимо. Например: база данных, бизнес-приложение, веб-страница, инструмент тестирования GUI и т. Д.

С точки зрения менеджеров по найму, я бы начал с того, чтобы спросить программиста, насколько он / она хорош в языке, но это не показатель. Я всегда думал, что лучший способ измерить способность людей писать программы - это дать программисту несколько небольших проблем программирования, которые заранее продуманы и решены за определенное время, скажем, по 5 минут каждая. Я никогда не возражал против того, чтобы это делали со мной на собеседованиях. Доступно несколько показателей: смог ли программист решить проблему (да или нет - номинально)? Сколько времени это заняло (количество минут - соотношение)? Насколько эффективным был их подход к решению проблемы (хороший, честный, плохой - порядковый)? Вы изучаете не только способность людей писать код, но также можете наблюдать некоторые субъективные вещи, такие как их поведение при решении проблемы, вопросы, которые он / она задает при решении проблемы, способность работать под давлением, и т.д., с точки зрения «качества», помните, что людям не нравится, когда их измеряют.

1 голос
/ 15 февраля 2009

John

Есть несколько способов подойти к вашему вопросу:

1) Если вы проводите собеседование с кандидатами на определенную должность, требующую определенного языка, то единственной мерой для сравнения кандидатов является «как долго этот человек пишет на этом языке». Это не идеально, даже не очень хорошо, но это реальность. Если вы не хотите дать кандидату задачу, компьютер и компилятор для тестирования на месте, другой меры нет. И тогда большинство типов программистов преуспевают в сценариях «кто-то наблюдает за тобой».

2) Я интерпретирую ваш вопрос как «когда я могу назвать СЕБЯ опытным на языке?» Для этого я бы сослался на уровни изучения не родного языка: первый уровень - вам нужно искать слова / фразы в словаре (книге), чтобы что-то сказать или понять; второй уровень - это то, что вы можете понимать слух (или чтение кода) только с периодическим поиском в надежном и теперь хорошо изношенном словаре; третий уровень теперь вы можете говорить (или писать код) только изредка; четвертый уровень - это место, где вы мечтаете на языке; и на последних уровнях дураки-носители думают, что вы тоже носитель языка (в программировании другие эксперты могут подумать, что вы, возможно, помогли разработать синтаксис языка).

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

1 голос
/ 12 февраля 2009

Средств с языком программирования недостаточно. Требуется средство с языком программирования в контексте определенного набора библиотек на конкретной платформе

  • C ++ на winapi на Windows 32bit
  • C ++ в KDE для Linux
  • C ++ на Symbian на телефоне Nokia S60
  • C # в MS .NET в Windows
  • C # в Mono в Linux

В этом контексте показатели компетентности с использованием целевого языка на целевой платформе следующие:

  • Способность выражать общее узоры лаконично и надежно.
  • Способность отлаживать общие, но тонкие ошибки, такие как условия гонки.

Можно было бы разработать набор тестовых упражнений для программиста. Можно было бы также, когда существенные образцы были доступны, определить кривую колокола для способности. Подготовка этих вещей займет буквально годы, и они быстро устаревают. Именно поэтому (и общая напряженность) организации не беспокоятся.

Также было бы необходимо оценивать людей как в режиме «производитель инструмента», так и в режиме «пользователь инструмента». Производители инструментов - очень разные люди с гораздо более высоким уровнем компетентности, но они часто не подходят для работы с обезьянами, для которой вы действительно хотите использовать инструмент.

1 голос
/ 12 февраля 2009

Насколько они опытны в отладке сложных проблем на этом языке.

Спросите их о проектах, над которыми они работали в прошлом, о трудных проблемах, с которыми они сталкивались, и о том, как они их решали. Спросите их о методах отладки, которые они использовали - вы будете удивлены тем, что услышите, и вы даже можете узнать что-то новое; -)

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

1 голос
/ 12 февраля 2009

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

Чего вы в конечном итоге пытаетесь достичь? В некоторых ситуациях общие навыки программирования могут быть важнее, чем знание языка.

Если вы сфокусированы на языке, вы можете принять вызов, такой как Project Euler , используя этот язык, чтобы отслеживать прогресс.

...