在编程语言中表现好是什么意思?

时间:2009-04-13 03:38:59

标签: programming-languages

什么 - “了解一种语言”真的意味着什么?

我确信这不仅仅是了解语法。

是吗

  • 了解所有/大多数可用库
  • 了解如何实施该语言的功能

你是如何学习你精通的语言的?

7 个答案:

答案 0 :(得分:7)

“了解”一种编程语言非常类似于“了解”一种人类语言 - 当你不必不停地翻阅一本书或暂停记住正确的单词时,你会流利。

我认为“了解一种语言”意味着能够阅读和理解大多数程序(约90%),而无需在参考资源中查找任何内容,并且确切地知道在哪里可以找到更多模糊部分的技术细节。框架。对于没有“框架”本身的语言/平台,它拥有社区普遍接受的主要图书馆的知识。

对于使用该语言进行书写,这意味着花费大约90%以上的时间来设计您正在撰写的内容 - 包括对设计的研究 - 并且只有不到10%的人查找技术参考信息。

答案 1 :(得分:4)

真的'知道'一种语言来形容自己是'好'意味着

  • 您了解该语言的所有功能,包括两者
    • 独特/ 好的功能以及何时使用,以及
    • 尘土飞扬的角落以及应避免的事项
  • 您了解常规约定
  • (正如您所说)您知道平台的库
  • 您知道整个工具链(IDE,构建项目,调试程序,分析器),以便您熟悉该语言

答案 2 :(得分:3)

给定语言X中的一行代码,该行被写入一次并且可能被读取很多次(当然可能被修改)。因此,语言的熟练程度在很大程度上是阅读理解。对于用X编写的程序语料库,您能多快阅读这些程序并了解它们在做什么?

  • 了解所有/大多数可用库?我不这么认为,因为在学习它时会创建任意数量的常用库。即使是今天许多语言的基础库也有数以千计的不同概念(类)和数以万计的函数。
  • 知道如何实现语言的功能?这是语言的给定实现的属性而不是语言本身。但我认为它确实有所贡献。知道正则表达式通常被实现为状态机(并且知道理论)与理解正则表达式语言非常相关。虽然知道Java字节代码是如何工作的,但我在Java应用程序中从未有过任何相关性...... [1]我猜有些语言与其他语言的实现方式比其他语言更清晰:这可能是高级和高级语言之间的关键区别。低级语言。

如果你有一种特定的语言,那么一个好的测试就是看一下其中的重要例子。对于C的情况,读取(例如)Linux内核,GNU OS实用程序,PostgreSQL或Subversion,以及弄清楚它们如何工作不仅是一种指示,而且也可以是良好的实践。

[1]有一个关于字节码静态分析的任务;但实际的解决方案可以写成任何东西。

答案 3 :(得分:2)

我认为这实际上取决于“好”的定义,或“好”的目的。

例如,让我们考虑Java。

大多数工作都不适合你擅长核心语言,他们希望你精通特定的API(例如,Swing for GUIs)甚至是第三方API(比如所有Apache的东西)。你不一定要知道每个角落的情况。

学术和工业研究可能要求您真正了解内外语言。例如,如果您编写静态分析工具或编译器优化,最好知道边缘情况。

在教育和质量保证方面,了解所有奇怪的角落及其风险通常很重要。这是C ++的典型特征。在教育方面,因为你可以指望学生偶然犯这些错误。在质量保证中,因为这是一些奇怪的错误所在(例如,静态初始化中的竞争条件)。

至于如何实现功能,我认为你可以成为一个优秀的程序员而不知道某些事情是如何实现的(例如,C ++中VTBL的细节),但重要的是要知道其他事情是如何实现的(例如,垃圾)集合,内存管理,一些库)编写真正优秀而高效的代码。

答案 4 :(得分:1)

在我看来,这意味着你可以用那种语言思考。当您通过问题陈述时,能够看到部分代码出现在您的脑海中,这很好地表明您对语言的熟练程度。

答案 5 :(得分:0)

鉴于算法,如果您实施解决方案

  • 更快(比许多其他程序)
  • 高效(比其他许多程序使用更少的资源)
  • 较小(占用内存较少)
  • 优雅(易于理解和维护)

我认为你更了解语言......

答案 6 :(得分:0)

您可能想要考虑不了解某种语言意味着什么。例如,我经常遇到那些认为他们认识OCaml的人,因为他们知道标准ML(同一家族的另一种语言),事实上,他们并不知道语言之间的差异或它们的实际含义。所以我会说知道一种语言的一部分就是知道它与其他语言的区别。

C vs C ++是另一个例子。许多人曾经声称他们知道C ++,然后用C ++编写C代码。