`
cyj1988jyc
  • 浏览: 20064 次
  • 性别: Icon_minigender_1
  • 来自: 荆州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

  • 新技术不断出现,旧技术不断淘汰,无法跟上新技术的步伐或担心学习的技术会被淘汰
  • 学习那种语言比较有前途
  • 那种语言比较好,不容易被淘汰
  • 已经学了这个语言,要不要再学那个语言

等等诸如此类的问题。


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


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


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


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


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


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

 

作者:caoglish

自己认为的编程内功有:

编程通用性的知识

  • 算法
  • 编译原理
  • 数据结构
  • 设计模式
  • 重构
  • 性能优化
  • 面向对象编程
  • 数据库
  • 抽象化

语言内部的共性

    • 字符串处理
  • 正则表达式
  • 变量与常量
  • 控制语句if-else
  • 循环
  • 函数/方法
  • 类/对象/接口
  • 递归
  • 哈希表
  • 数组

还有工具类的内功:

  • 构建工具 (通用知识)
  • 单元测试
  • 依赖包管理 (通用知识)
  • MVC 框架 (通用知识)
  • 代码质量检测(通用知识)
  • JSON 和 XML 设计 (通用知识)
  • 代码控制 (通用知识)
  • IT外的相关知识:

    • 数学(离散数学,几何学)
    • 物理
    • 图形处理
    • 图形/UI设计

    等等,这些都是可以各种语言内都能交叉使用的共同的知识。这些知识学好了,大部分语言都可以用到,也都能或多或少在项目和应用中体现出来。


    编程的外功包括有:

    • 各种编程语言包括C++,javascript,java,php,C#,perl,python等
    • 各种编程环境,.NET, WAMP/LAMP,node.js 等
    • 各种IDE和编辑器,notepad++,vim,Visual Studio,Sublime等
    • 各种快捷键,
    • 各种包依赖管理器,npm,composer,Nuget
    • 各种版本管理器:git,svn,cvs
    • 各种单元测试工具
    • 各种构建工具
    • 各种MVC框架

    等等



    内功和外功的相互关系和作用

    外功

    就是一个个的独立工具的使用知识。其实就是一个和内功的具体实现,具体的外功是抽象内功的具体实现。使用这些工具,你可以实践你的内功。


    由于内功的通用性很高,所以比如说你在java中能实现的数据结构,你可以立刻在C#中复制出一样的数据结构,如果再学了一个新的语言,比如说python,ruby,也能很快实现出一样的数据结构来。因为是相通的。 内功就是你在一个工具里面能实现的东西,在另外的那个工具也能同样实现的东西。


    另外,内功学好了,学习新的语言或者工具会很快,这是因为,所有的编程语言和工具都有很多共同点,知识语法

    改了一改,当然还有一些特有的特性,是要你针对学的。所以假设当你还没有学习java或者C#的时候,你学java需要一年时间,学习C#也同样需要一年时间,但是如果先学习了java后,在学习C#(或先学C#再学java), 两个先后学习的时间总共只要1年2-3个月的时间,而不是2年。这是因为你用Java去学习语言的共性,修炼了编程的内功。


    内功学好了,内功比外功重要,那要学习外功吗? 要,当然要,还要好好的学。因为你是通过外功来学习内功的。没有语言本身,那里表现内功的载体呢。当你把一种语言作为载体,把所有语言的共性都学完了,然后就关注特定语言的特性了,有了内功的基础,这些外功很容易就啃完了,然后具体问题具体分析解决。比如要跨平台的桌面程序,用Java;快速网站构建,用PHP;嵌入式编程

    ,用C;网页内编程用javascript; 然后还有不同语言之间的通信,用json或者xml。


    而那些工具,可以辅助你的编程技巧,加速你的编程速度,提高你的编程质量,是你的编程得心应手,享受编程带来的乐趣。


    总结

    编程的学习和提高,应该重点在编程内功上。通过某个编程语言和工具,去学习研究编程的通用功能和共性上。这样就算未来有新的语言和技术出现,也能很快的适应新的语言和技术了。


    而外功的提高,是可以大大提高自己的工作效率,它和内功相辅相成。外功作为辅助和内功的载体,也是很重要的。毕竟它可能是一个程序员吃饭看家领工资最具体的技术表现。

分享到:
评论

相关推荐

    Android应用开发揭秘(高清)

    在编程学习的比喻中,编程就像是练功,基础课程就相当于内功,而具体语言和工具学习则是外功(招式)。没有深厚的内功,即使招式学得再多,也难以成为高手。编程也像盖高楼,基础不扎实,楼越高,倒塌的风险也越大。...

    算法思想 李开复--算法的力量

    在描述中,李开复指出,一些程序员误以为掌握多种编程语言就能在IT行业立足,但实际上,理解和掌握算法与计算机理论更为重要。算法如同计算机科学的“内功”,而编程语言则是“外功”。只有深厚的内功,才能在技术...

    李开复文章:算法的力量

    正如比喻中的“内功”和“外功”,扎实的基础知识是成为一名优秀程序员的根基。 李开复提到,他在1980年代转专业到计算机科学时,很多人并不理解计算机科学的科学性。真正的计算机科学家不仅需要编程技能,更需要...

    攻读计算机研究生

    3. **内功与外功:** 将基础课程比喻为“内功”,而新兴的技术和语言则被视为“外功”。只有扎实的基础才能支撑起不断变化的技术发展。 #### 二、算法实例分析 **案例分析:** 1. **Othello对弈软件:** 作者在...

    算法的力量 李开复

    在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。 算法与我 当我在1980年转入计算机科学...

Global site tag (gtag.js) - Google Analytics