代码之家  ›  专栏  ›  技术社区  ›  Alex Gartrell

是什么让你成为C编程专家?[关闭]

c
  •  26
  • Alex Gartrell  · 技术社区  · 16 年前

    我昨天参加了一个招聘会,一位开发人员问我如何对我的C语言熟练程度进行排名。然后我意识到这是非常武断的,几乎不可能确定,所以我的问题是什么知识使你成为C语言编程专家?

    编辑:或者细分是什么?是什么让你优秀、体面、精通等。

    再次编辑:我更想找一份技能清单或其他一些建设性的衡量标准来判断一个人对C的熟练程度,因为这很难做到。

    到目前为止的列表:

    • 大型项目经验
    • 掌握指针(我认为还有内存管理)
    • 掌握调试器(gdb,…)
    • 精通分析器(gprof,…)
    • 掌握内存分析器(valgrind等)
    • 了解基本标准
    17 回复  |  直到 15 年前
        1
  •  34
  •   Max Cantor    16 年前

    我认为这个问题的问题在于答案有点无意义。我看到人们谈论经验,这很好,我看到人们在谈论理解语言的复杂性,这也很好。然而,如果我雇佣某人来做我的C项目,并且我有一个神奇的8球,可以给我一个准确的答案来回答任何一个(而且只有一个)问题,我永远不会问“他们是C专家吗”。

    为什么?

    仅仅因为某人是C语言专家并不意味着他们是一名优秀的软件开发人员。经验和语言熟悉度都很好,但我认为它们都被那种无形的、无法量化的属性所超越,这种属性使一个人成为“优秀的软件开发人员”。我想说的是,“是什么让你成为C编程专家?”这不是一个有用的问题,因为还有更重要的问题。如果有人是 G 好的 P 程序员,他们会应付自如的。

    举个例子:你可能是一名C编程专家,但在团队中却很糟糕。你可以成为C编程专家,拒绝使用版本控制。你可以成为C编程专家,而不知道如何实际操作 任何与C。

    这些句子中的“没有”子句是同样重要的问题:是什么让你成为一名优秀的团队程序员?使用SCM的最佳方式是什么 英语字母表的第24个字母 y ?如何用C语言编写客户端/服务器游戏、计费应用程序、web浏览器、操作系统或编译器?如果一位应聘者告诉我“不,我不是C语言专家”,但对其他问题给出了很好的答案,我会毫不犹豫地雇佣他们,而不是那个神奇的8-ball说他是C语言专家,但不知道如何将他的代码检查为subversion,并且12年来没有学习过一门新语言的人。

        2
  •  21
  •   EmmEff    16 年前

    当我在谷歌面试时,面试官告诉我这样想。在C熟练程度的1-10分制中,说你是“10”意味着你写过论文和/或书籍,或者在C编程会议上做过演讲。基于此,很少有人是10分的。

    FWW,我用C语言编程已经15年了。我认为自己非常精通。我可能会给自己打8分或8.5分。

        3
  •  18
  •   JosephStyons    16 年前

    对于一个不如你熟练的人来说,你是一个专家。

    对于比你更熟练的人来说,你是个新手。

        4
  •  16
  •   Adam    16 年前

    经验是关键,了解语言的“规则”和语法当然是必须的,但这只是一个基础。学习正确做事的常见陷阱和习语是关键。

    知道在编程时是否有任何资源可以获得帮助,当然,也知道自己是工具链。我认识许多C++“专家”,他们从未使用过调试器或内存跟踪器。如果你问我,成为某件事的专家不同于精通某件事——你知道它的各个方面。

        5
  •  8
  •   Kristian    16 年前

    在招聘会上,每个人都是专家

        6
  •  6
  •   Ian Terrell    16 年前

    如果你能毫不犹豫地回答stackoverflow.com上标记为“c”的所有问题,你就是c语言的专家。

        7
  •  6
  •   Pitarou    16 年前

    这并不能直接回答你的问题(抱歉),但它可能会帮助你决定如何对自己进行分类。

    我更喜欢中世纪行会使用的三级专业体系,而不是“专家”和“无知的新手”:

    学徒

    • 仍然需要RTFM。
    • 掌握他手艺的工具和技巧。
    • 需要监督。

    熟手

    • 已阅读有效手册。
    • 熟练掌握其工艺的所有标准工具和技术。
    • 可以独立工作,可以监督学徒的日常工作。

    大师

    • 本可以写《效率手册》的。
    • 正在开发或采用新的工具和技术。
    • 可以监督一个以前从未尝试过的重大项目。

    在招聘会上?没有专家:每个人都是专家。 :)

        8
  •  4
  •   Smallinov    16 年前

    有些人可能不同意,但我认为经验是成为任何语言专家的关键。我认识很多人,他们通过了认证测试,但无法将他们的知识应用于现实世界中的任何实际工作。

    所以我认为,总体而言,成为一名专家是对给定主题(C)有足够知识的产物,然后将其应用于足够多的现实世界场景,以犯我们都会犯的错误并从中吸取教训。

        9
  •  4
  •   Andrew Edgecombe    16 年前

    这个问题的答案确实会引起一些有趣的阅读——似乎我们无法很好地理解这里专家的定义。在像招聘会这样更广泛的论坛上,还有什么希望? :-)

    但把我自己的2分钱放在。。。 我认为有两种C专家。

    • 有学术意义上的专家(如“可以写自己的编译器”,“写论文”)。
    • 务实专家来了。我想将其定义为“能够编写优雅的C代码的人 任何人 可以理解”。

    我会毫不犹豫地选择后者。如果你有一段由专家编写的代码非常脆弱,只能由另一位专家阅读和理解,那么无论如何,这段代码都是不可维护的。 这段代码的作者能够记住表达式中间复杂的类型转换,这一切都很好,但如果代码已经编写好了,那么它就完全不模糊了。

    项目通常有足够的技术挑战,而不需要所有团队成员都记住C'99标准。

        10
  •  3
  •   Steve Baker    16 年前

    当你能编写自己的C编译器时,你就是C语言的专家。

        11
  •  2
  •   nsayer    16 年前

    这样的面试问题总是很难回答。你想吹自己的喇叭,但听起来不像吹口哨的人。

    如果你用C做了很多工作(比如,用C做开源项目),那么我会用它来回应,但不仅仅是指出简历上的成就列表,而是谈论其中的一个或多个,以及它特别有趣或具有挑战性的地方(关于C的使用)。

        12
  •  2
  •   Slapout    16 年前

    读过彼得·范德林登的《专家C编程》,并记住他所涵盖的一切,怎么样?

        13
  •  2
  •   Andrew Queisser    16 年前

    由于缺乏标准测试,真的无法确定专家级别是什么,但这里有一些我的试金石测试,我敢肯定,每个人的清单都不一样。

    不看文档:

    • 了解主运算符的优先级,这样你就不必在代码中乱丢括号,以避免得到错误的求值顺序

    • 能够为简单的函数指针编写原型

    • 轻松地将指针传递给指针

    • 了解块、功能、模块范围

    还有更多这样的项目。

    另一方面,我认为你不必能够理解或写出达夫的设备,也不必在脑海中想出模糊的C竞赛,就可以认为自己是专家。

    即使我认为自己是专家(我不确定),我可能也永远不会在面试中声称自己是专家。

    安德鲁

        14
  •  1
  •   J Miller    16 年前

    掌握指针。

        15
  •  1
  •   SteveDonie    16 年前

    我想说,对于任何一种语言,经验都是关键。学习一门语言并学习该语言使用的API和“习语”只需要时间。一个人是否是某方面的专家,应该问他的同龄人。用Jeff Foxworthy的话说,“如果你回答的问题比你问的多,你 可能 做一个专家。"

        16
  •  1
  •   Daniel Papasian    16 年前

    我认为一个公平的答案是理解ISO C的所有难点。

    事实上,正如任何comp.lang.c常规程序都会告诉你的那样,人们需要做的几乎任何事情都无法在纯ISO c中完成,因为你通常需要以一种更明确的方式与你的环境进行交互。这就是POSIX的由来。

    我不会对那些自认为是“专家”的人眨眼,他们对C语言有扎实的理解,对ISO C的承诺有很好的理解,并且对POSIX函数有工作上的理解。

        17
  •  1
  •   SteJav    14 年前

    能够写论文/书并不一定能让一个人成为专家程序员。这需要大量的努力、实践经验和对各种C库的良好理解。

    祝你好运