程序员的编程内功和外功有哪些?如何看待编程内功和外功的关系?

看了很多人的问题和他们的困扰。诸如:
 

等等诸如此类的问题。

其实电脑编程语言的世界里面是有编程语言的共性和通用的东西。当然每个语言也有自己的特性。

有个朋友在和我讨论编程学习的时候,提出了编程内功和编程外功的观点。他认为编程内功是所有语言通用的东西,外功是浮在表面上的那些具体的产品和工具。

外功是使用语言和工具的一种技能,可以一直在变化,可以随意换。内功就是编程理论和共性已经通用的知识,是一种能力。

学好内功,用内功推动外功,以外功表现出来,可以做到型变神不变,通吃所有的语言和工具。

还有就是内功比外功重要,学好内功,任何新的语言和工具都能很快上手使用。外功是辅助工具来显示内功实力,但却更有现实的实践意义。

假设内功外功理论是合理的,那些可以称为编程内功那些是编程外功?他们的关系是怎么样的?

作者:caoglish

自己认为的编程内功有:

编程通用性的知识

语言内部的共性

还有工具类的内功: