Какие метрики можно использовать для определения уровня знаний в конкретном языке программирования?

StackOverflow https://stackoverflow.com/questions/539694

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Таким образом, метриками могут быть:

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

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

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

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

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

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

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

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

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

Подожди...

Даже «LOC» программы является предметом серьезных споров!(Мы говорим, например, о выводе команды cat *.{h,c} | wc -l или о каком-то другом механизме?А как насчет пустых строк?Комментарии?Важны ли комментарии?Хороший код документирован?)

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

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

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

Если вы сосредоточены на языке, примите на себя такую ​​​​задачу, как Проект Эйлера использование этого языка может быть способом отслеживать прогресс.

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

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

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

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

  • C++ на WinAPI в 32-битной Windows
  • C++ в KDE в Linux
  • C++ на Symbian на телефоне Nokia S60
  • C# на MS .NET в Windows
  • C# в Mono в Linux

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

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

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

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

Джон

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

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

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

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

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

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

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

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

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

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

Этот может быть уместно.

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

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

WTF/s * LOC, лучше меньше.

их нет;экспертность может оцениваться только субъективно по сравнению с другими или проверяться на конкретных примерах (что имеет свой уровень неточности)

видеть в чем увлечение метриками кода Чтобы получить больше информации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top