如下部份内容选自知乎,侵权删。javascript
看了不少人的问题和他们的困扰。诸如:php
有个朋友在和我讨论编程学习的时候,提出了编程内功和编程外功的观点。他认为编程内功是全部语言通用的东西,外功是浮在表面上的那些具体的产品和工具。java
外功是使用语言和工具的一种技能,能够一直在变化,能够随意换。内功就是编程理论和共性已经通用的知识,是一种能力。node
学好内功,用内功推进外功,之外功表现出来,能够作到型变神不变,通吃全部的语言和工具。python
还有就是内功比外功重要,学好内功,任何新的语言和工具都能很快上手使用。外功是辅助工具来显示内功实力,但却更有现实的实践意义。git
假设内功外功理论是合理的,那些能够称为编程内功那些是编程外功?他们的关系是怎么样的?程序员
语言内部的共性正则表达式
字符串处理算法
IT外的相关知识:数据库
等等,这些都是能够各类语言内都能交叉使用的共同的知识。这些知识学好了,大部分语言均可以用到,也都能或多或少在项目和应用中体现出来。
编程的外功包括有:
等等
内功和外功的相互关系和做用
外功就是一个个的独立工具的使用知识。其实就是一个和内功的具体实现,具体的外功是抽象内功的具体实现。使用这些工具,你能够实践你的内功。
因为内功的通用性很高,因此好比说你在java中能实现的数据结构,你能够马上在C#中复制出同样的数据结构,若是再学了一个新的语言,好比说python,ruby,也能很快实现出同样的数据结构来。由于是相通的。 内功就是你在一个工具里面能实现的东西,在另外的那个工具也能一样实现的东西。
另外,内功学好了,学习新的语言或者工具会很快,这是由于,全部的编程语言和工具都有不少共同点,知识语法改了一改,固然还有一些特有的特性,是要你针对学的。因此假设当你尚未学习java或者C#的时候,你学java须要一年时间,学习C#也一样须要一年时间,可是若是先学习了java后,在学习C#(或先学C#再学java), 两个前后学习的时间总共只要1年2-3个月的时间,而不是2年。这是由于你用Java去学习语言的共性,修炼了编程的内功。
内功学好了,内功比外功重要,那要学习外功吗? 要,固然要,还要好好的学。由于你是经过外功来学习内功的。没有语言自己,那里表现内功的载体呢。当你把一种语言做为载体,把全部语言的共性都学完了,而后就关注特定语言的特性了,有了内功的基础,这些外功很容易就啃完了,而后具体问题具体分析解决。好比要跨平台的桌面程序,用Java;快速网站构建,用PHP;嵌入式编程,用C;网页内编程用javascript; 而后还有不一样语言之间的通讯,用json或者xml。
而那些工具,能够辅助你的编程技巧,加速你的编程速度,提升你的编程质量,是你的编程驾轻就熟,享受编程带来的乐趣。
总结
编程的学习和提升,应该重点在编程内功上。经过某个编程语言和工具,去学习研究编程的通用功能和共性上。这样就算将来有新的语言和技术出现,也能很快的适应新的语言和技术了。
而外功的提升,是能够大大提升本身的工做效率,它和内功相辅相成。外功做为辅助和内功的载体,也是很重要的。毕竟它多是一个程序员吃饭看家领工资最具体的技术表现。