如何预测编程题的难度?
1 挑战
编程题的难度和一致性的评估一直在业界没有很好的共识和很有效的办法,无论是学校考试,公司面试,编程竞赛等。
2 通常解决方法
一般的解决方法分为两类:分类法 (Taxonomy)和指标分析(Metrics)。
(1)分类法通常是基于认知模型,如布鲁姆模型(Bloom’s Taxonomy)
是基于专家系统对代码问题的思考层面(Level of Thinking)的难易和知识点难易的评判,有时会理解不一致,难达成共识和偏主观。业界的建议是进行一定程度的修正,如不仅考虑写代码的难度,还考虑读题和代码的难度的SOLO分类模型,题目如果过长和文字描述冗余会增加难度,题目短和样例多被认为相对容易。
评判体系可以是3类人群的组合:
1出题的专家
2 试做的人员(未参加出题)
3 独立的专家(未参加出题和试做)
三组人群综合给题目打分,会一定程度的去除主观偏门性
(2)指标分析(Metrics)
美国大学的学者Said Elnaffar 在2016 IEEE全球工程师教育论坛上发表了基于Metrics来预测编程题目难度的论文(Using Software Metrics to Predict the Difficulty of Code Writing Questions)
论文的核心观点是有效的Metrics生成的难度预测指数PDI(Predicated Difficulty Index)在大多数的场景可以很有效的预测题目的难度:
• Cyclomatic Complexity (M1) 圈复杂度
· Average Depth of Nested Blocks(嵌套块的平均深度)(M2).
• The total number of commands (or statements) 命令(或语句)的总数(M3)
• The total number of operators 运算符总数 (M4).
• The number of unique operators特有运算符的数量 (M5).
PDI=M1+M2+M3+M4+M5
工具可参考静态分析工具列表:https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
PDI 的短板是对一些特殊编程方法如递归等评估不足,需要进行修正。
启发:
1 结合指标分析PDI和3类人群的评判系统,来综合预测编程题的难度
2 结合考试结果和考生表现分析 来优化 #1的模型
本文作者吴昊
- 点赞
- 收藏
- 关注作者
评论(0)