我昨天参加了一个招聘会,一位开发人员问我如何对C的熟练程度进行排名.然后我意识到这是非常随意的,几乎无法确定,所以我的问题是什么知识让你成为编程C的专家?
编辑:或者故障是什么?是什么让你变得好,体面,精通等等
再次编辑:我正在寻找更多的技能列表或其他一些建设性的衡量标准来判断自己对C的熟练程度,因为这很难做到.
到目前为止列表:
大型项目的经验
掌握指针(和记忆管理,我假设)
掌握调试器(gdb,...)
掌握一个探查器(gprof,...)
掌握内存分析器(valgrind,...)
了解基本标准
我认为这个问题的问题在于答案是毫无意义的.我看到人们在谈论经验,这很好,我看到人们在谈论理解语言的复杂性,这很好.但是,如果我雇用某人参与我的C项目,我有一个神奇的8球,可以给我一个准确的答案,任何一个(也是唯一一个)问题,我永远不会问它,"他们是C吗?专家".
为什么?
仅仅因为有人是C专家并不意味着他们是一个优秀的软件开发人员.经验和语言的熟悉程度都很好,但我认为他们都被这种无形的,不可量化的财产所压倒,这使得某人成为"优秀的软件开发人员".我想说的是,"是什么让你成为C编程专家?" 这不是一个有用的问题,因为有更重要的问题.如果有人是G ood P rogrammer,他们会适应这种情况.
举个例子:你可以成为C编程专家,对团队来说太可怕了.您可以成为C编程专家并拒绝使用版本控制.你可以是一个C语言编程高手不知道如何真正DO与C.什么
这些句子中的"无"条款是同样重要的问题:是什么让你成为一名优秀的团队程序员?使用SCM x或y的最佳方法是什么?您如何在C中编写客户端/服务器游戏,计费应用程序,Web浏览器,操作系统或编译器?如果一位候选人告诉我"不,我不是C专家",但给了我很好的答案,这些其他问题,我会雇佣他们的心跳对那个魔术8球说是C专家的人,但不是我不知道如何将他的代码检查为颠覆,并且在12年内没有学过新的语言.
当我采访谷歌时,采访者告诉我这样思考.对于C级熟练程度为1-10,说你是"10"意味着你已经在C语言编程会议上写过论文和/或书籍或者是演讲者.基于此,很少有人10秒.
FWIW,我用C编程了15年.我认为自己非常精通.我也许给自己一个坚实的8或8.5.
对于比你技术不熟练的人,你就是专家.
对于比你更熟练的人,你是一个新手.
经验是关键,知道语言的"规则"和语法当然是必须的,但它只是一个基础.了解正确做事的常见陷阱和习惯是关键.
知道在编程时是否有任何资源可以获得帮助,当然,知道你是工具链.我认识很多从未使用过调试器或内存跟踪器的C++"专家".如果你问我,做某事的专家不同于在你知道它的所有方面的精通.
每个人都是招聘会的专家
如果你能回答stackoverflow.com上标记为"c"的所有问题而不眨眼,你就是c的专家.
这并不直接回答您的问题(对不起),但它可能会帮助您决定如何对自己进行分类.
我更喜欢中世纪行会使用的三级专业系统,而不仅仅是"专家"和"无能为力的新手":
还需要RTFM.
掌握他的工艺和技术.
需要监督.
已阅读Effin手册.
能够胜任他工艺的所有标准工具和技术.
可以独自工作,并可以监督日常工作的学徒.
可以写Effin'手册.
正在开发或采用新的工具和技术.
可以监督以前可能从未尝试过的重大项目.
在招聘会上?没有专家:每个人都是专家.:)