6

我对用于掌握一个人用特定语言编程的能力的原始(或复合)指标很感兴趣。

场景:George 会一些编程语言并想学习“foobar”,但他想知道他何时对“foobar”有足够的经验。

除了 LOC(代码行)指标,我对更广泛的东西非常感兴趣。

我对这个问题的希望是了解工程师如何量化其他人的编程语言经验,以及这是否可以机械地测量。

提前致谢!

4

15 回答 15

3

在回复前两张海报时,我猜想有一种方法可以掌握一个人在特定语言中的编程能力:您可以测试某人对英语、数学、音乐或医学的了解程度,或者美术,那么编程语言有什么特别之处呢?

作为对 OP 的回复,我想测试必须评估:

  • 你的编程能力如何
  • 您可以如何使用编程语言

因此,指标可能是:

  1. 这个人的编程有什么好处(有很多方面的好处,例如无错误、可维护、编写快/便宜、运行快、满足用户要求等)?

  2. 该人是否使用相关编程语言的适当/惯用功能来进行良好的编程?

但是,要使测试“机械化”是很困难的:我所知道的大多数考试都是由人工考官评分的。在编程的情况下,可以对部分测试进行机械评分(即“它是否运行?”),但其中一部分(“它是否可以理解和惯用?”)旨在使其他人受益,并更好地由其他人判断程序员。

于 2009-02-12T02:15:19.467 回答
3

在我看来,你在特定语言方面的专业知识的最佳指标是你在这门语言中的工作效率。

生产力不仅仅是你的工作速度有多快,更重要的是,你创造了多少错误,以及以后需要多少重构/返工。

例如,如果您使用两种您具有相似经验水平的语言,并且(在平行宇宙中)用这两种语言构建相同的系统,我会说您构建系统的语言更快,缺陷/设计缺陷更少,是您更擅长的语言。

抱歉,这对您来说不是一个“硬”指标,而是一种更实用的方法。

于 2009-02-12T02:15:43.067 回答
2

我不相信这可以“机械测量”。不过,我已经考虑了很多。

于 2009-02-12T02:01:45.753 回答
2

不挂断...

就连节目的“LOC”也是一个争议很大的话题!(例如,我们是在谈论 cat *.{h,c} | wc -l 或其他一些机制的输出吗?空行呢?评论?评论重要吗?是否记录了好的代码?)

在您意识到 LOC 比较是多么无意义之前,您没有希望意识到其他指标是多么无意义。

于 2009-02-12T02:44:25.947 回答
1

这是一个相当定性的事情,很少能以任何高精度测量。这就像问“爱因斯坦有多聪明?”。认证是一个(并且是相当彻底的)量化指标,但即使它也远远不能像许多招聘人员发现的那样识别“优秀的程序员”。

你最终想要达到什么目标?在某些情况下,一般的编程能力可能比语言专业知识更重要。

如果您专注于语言,那么使用该语言接受像Project Euler这样的挑战可能是跟踪进度的一种方式。

于 2009-02-12T02:10:58.260 回答
1

他们在用该语言调试复杂问题方面有多熟练。

询问他们过去从事的项目,遇到的困难问题以及如何解决这些问题。向他们询问他们使用过的调试技术——你会惊讶于你所听到的,你甚至可能会学到一些新东西 ;-)

很多地方都有一两个人在他们的领域是超级明星——当其他人无法弄清楚他们的程序出了什么问题时,他们就会去找那个人。我猜这就是你要找的人:-)

于 2009-02-12T03:11:34.510 回答
1

具有编程语言的设施是不够的。所需的是在特定平台上的特定库套件的上下文中使用编程语言

  • Windows 32 位 Winapi 上的 C++
  • Linux 上 KDE 上的 C++
  • 诺基亚 S60 手机上的 Symbian 上的 C++
  • Windows 上 MS .NET 上的 C#
  • Linux 上 Mono 上的 C#

在这种情况下,在目标平台上使用目标语言的能力度量如下:

  • 简洁有力地表达常见模式的能力。
  • 能够调试常见但微妙的错误,如竞态条件。

可以为程序员开发一套基准练习。一旦有大量样本可用,人们也可以确定能力的钟形曲线。准备这些东西实际上需要数年时间,而且它们很快就会被淘汰。这(以及普遍的紧张)是组织不打扰的原因。

还需要在“工具制造者”和“工具使用者”模式下对人员进行评分。工具制造者是非常不同的人,他们的能力水平要高得多,但他们通常不适合猴子的工作,而你真的需要一个工具用户。

于 2009-02-12T03:24:51.717 回答
1

约翰

有几种方法可以解决您的问题:

1) 如果您正在面试需要特定语言的特定职位的候选人,那么比较候选人的唯一衡量标准是“这个人用这种语言写作多久了”。它并不完美——它甚至不是很好——但它是现实。除非你想给候选人一个问题、一台计算机和一个编译器来现场测试他们,否则没有其他措施。然后大多数程序员类型在“有人在看着你”的场景中表现不佳。

2)我将您的问题解释为“我什么时候可以称自己精通一种语言?” 为此,我将参考学习非母语的水平:第一级是您需要在字典(书)中查找单词/短语才能说出或理解任何内容;第二级是你可以理解听到的语言(或阅读代码),只需要偶尔在你信任的、现在已经破旧的字典中查找;第三级,您现在只需偶尔查找即可说话(或编写代码);第四层是你在语言中梦想的地方;最后一级是让母语人士误以为你也是母语人士的地方(在编程中,其他专家会认为你可能帮助开发了语言语法)。

请注意,这无助于确定您的程序员有多好——就像知道英语而不必在字典中查找单词并不能显示“你在写东西方面有多好”一样——这是主观的,没有什么可做的使用特定的语言,因为擅长编程的人擅长你给他们的任何语言。

于 2009-02-15T16:37:00.310 回答
1

短语“合理数量的经验”取决于所考虑的语言以及该语言的用途。

度量是测量的结果。史蒂文斯(参见维基百科:测量水平)提出测量使用四种不同的尺度类型:名义(分配标签)、序数(分配排名)、间隔(对测量进行排序)和比率(具有非任意零起点) . LOC 是比率测量值。虽然远非完美,但我认为 LOC 是一个相关的、客观的数字,表明您在语言方面拥有多少经验,并且可以与软件行业的可量化值进行比较。但是,这就引出了一个问题:这些行业价值从何而来?

就个人而言,我会说“乔治”在设计、实施和测试一个项目时会知道他有相当多的经验,如果需要的话,可能是他自己选择在他的个人时间在他的家用电脑上。例如:数据库、业务应用、网页、GUI测试工具等。

从招聘经理的角度来看,我首先会问程序员他/她的语言有多好,但这不是衡量标准。我一直认为,衡量一个人编写程序能力的最好方法是给程序员几个小的编程问题,这些问题是预先考虑好的,并在给定的时间内解决,比如每个 5 分钟。我从不反对在工作面试中对我这样做。有几个指标可用:程序员是否能够解决问题(是或否 - 名义上的)?花了多少时间(分钟数 - 比率)?他们解决问题的方法有多有效(好、公平、差 - 有序)?您不仅可以学习人们编写代码的能力,还可以观察到一些主观的事情,例如他们解决问题时的行为,

于 2009-02-20T05:02:50.030 回答
1

尽管如此,我仍然相信有一些很好的指标,比如用于圈复杂度的McCabe Cyclomatic Metric,或者每个代码块的有用注释数量,甚至是两次连续测试之间编写的平均代码量。

于 2010-07-06T14:03:57.453 回答
0

我不知道这样的事情。我不相信关于如何量化经验或“合理”意味着什么的共识。也许我也会学到一些东西,但如果我这样做了,那将是一个很大的惊喜。

可能是相关的。

于 2009-02-12T01:59:01.393 回答
0

我发现测试调试能力比任何针对我遇到的简单编程问题的测试更准确地衡量编程技能。给定具有已声明(或在某些情况下未声明)不当行为的合理规模的类或函数的来源,被测者能否找到问题?

于 2009-02-12T02:19:33.277 回答
0

嗯,他们在工作面试中尝试过。没有衡量标准,但您可以通过提问和测验来评估一个人的能力。

于 2009-02-12T02:31:01.907 回答
0

WTF/s * LOC,越小越好。

于 2009-02-12T02:50:50.753 回答
0

没有了; 专业知识只能相对于他人主观判断,或根据具体情况进行测试(有其自身的不准确程度)

了解更多信息,请查看代码指标的魅力所在

于 2009-02-12T02:58:54.307 回答