Programming languages 精通编程语言意味着什么?

Programming languages 精通编程语言意味着什么?,programming-languages,Programming Languages,“懂一门语言”的真正含义是什么 我相信这不仅仅是了解语法 是吗 了解所有/大部分可用的库 了解如何实现语言的功能 你是如何学会你所精通的语言的 “了解”一门编程语言与“了解”一门人类语言非常相似——当你不必反复翻阅一本书或停下来记住正确的单词时,你就能说得很流利 我认为“了解一种语言”意味着能够阅读和理解大多数程序(~90%),而无需在参考资源中查找任何内容,并且确切地知道在哪里可以找到框架中更模糊部分的技术细节。对于本身没有“框架”的语言/平台,它拥有社区普遍接受的主要库的知识 用这种语言

“懂一门语言”的真正含义是什么

我相信这不仅仅是了解语法

是吗

  • 了解所有/大部分可用的库
  • 了解如何实现语言的功能
你是如何学会你所精通的语言的

“了解”一门编程语言与“了解”一门人类语言非常相似——当你不必反复翻阅一本书或停下来记住正确的单词时,你就能说得很流利

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


用这种语言写作,意味着要花90%以上的时间在你正在写的东西的设计上——包括对设计的研究——而不到10%的时间查找技术参考信息。

真正“知道”一种语言来形容你自己是“好”的意思

  • 您了解该语言的所有功能,包括
    • 独特的/好功能以及何时使用它们,以及
    • 多尘角落和应避免的事项
  • 您了解常见惯例
  • (如您所述)您知道平台的
  • 您了解整个工具链(IDE、构建项目、调试器、分析器),因此可以熟练使用该语言

我认为这真的取决于“好”的定义,或者“好”的目的

例如,让我们考虑java。 大多数工作不会满足于你精通核心语言,他们希望你精通特定的API(例如,Swing for GUI)甚至第三方API(如所有Apache的东西)。你不必知道每个角落的情况

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

在教育和QA中,了解所有奇怪的角落及其风险通常很重要。这是典型的C++。在教育中,因为你可以指望学生会意外地犯这些错误。在QA中,因为这是一些更奇怪的错误所在(例如,静态初始化中的竞争条件)


至于功能是如何实现的,我认为您可以成为一名优秀的程序员,而不必知道某些东西是如何实现的(例如,C++中VTBL的细节),但是了解其他东西是如何实现的(例如,垃圾收集、内存管理、一些库)对于编写真正好且高效的代码非常重要

给定一个算法,如果您能实施一个解决方案,则

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

我认为你更懂这门语言……

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

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

是吗

  • 了解所有/大部分可用的库?我不这么认为,因为在您学习时创建了任意数量的常用库。即使是今天许多语言的也有数千个不同的概念(类)和数万个函数
  • 了解如何实现该语言的功能?这是语言的特定实现的属性,而不是语言本身。但我认为这确实有帮助。了解正则表达式通常被实现为状态机(以及了解其理论)与理解正则表达式语言非常相关。虽然了解Java字节码的工作原理在我所研究的Java应用程序中从未有过任何关联。。。[1] 我想有些语言与其可能的实现相比有一个更清晰的分离:这可能是高级语言和低级语言之间的一个关键区别
如果你脑子里想的是一种特殊的语言,一个很好的测试就是看看其中的一些严肃的例子。对于C语言来说,阅读(例如)Linux内核、GNU操作系统实用程序、PostgreSQL或Subversion,了解它们的工作原理,不仅是一种指示,而且也是一种很好的实践


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

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

C与C++是另一个例子。许多人过去声称他们知道C++,然后编写C代码。