编程知识分类总结

一、分类一:知乎萧大的分类

  编程知识的金字塔底部有三个关键的部分:

算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,之后对于每个数…
语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。
系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?

  编程能力包括什么呢?

X = 用于思考解决方案的时间,即「解决问题」 部分
Y = 用于实现代码的时间,即「利用计算机」部分」
编程能力 = F(X, Y) (X>Y)
要想提高编程能力,就得优化 X,Y 与函数 F(X, Y)

来自萧大专栏:http://zhuanlan.zhihu.com/xiao-jing-mo/19959253

二、分类二:来自知乎——内功和外功

1、内功:

  编程内功是所有语言通用的东西,内功就是编程理论和共性已经通用的知识,是一种能力。

编程通用性的知识
1. 算法
2. 编译原理
3. 数据结构
4. 设计模式
5. 重构
6. 性能优化
7. 面向对象编程
8. 数据库
9. 抽象化

语言内部的共性
1. 字符串处理
2. 正则表达式
3. 变量与常量
4. 控制语句if-else
5. 循环
6. 函数/方法
7. 类/对象/接口
8. 递归
9. 哈希表
10. 数组

还有工具类的内功:
1. 构建工具 (通用知识)
2. 单元测试 (通用知识)
3. 依赖包管理 (通用知识)
4. MVC 框架 (通用知识)
5. 代码质量检测 (通用知识)
6. JSON 和 XML 设计 (通用知识)

代码控制 (通用知识)

IT外的相关知识:
1. 数学(离散数学,几何学)
2. 物理
3. 图形处理
4. 图形/UI设计

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

2、外功:

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

  外功是浮在表面上的那些具体的产品和工具,外功是使用语言和工具的一种技能,可以一直在变化,可以随意换。

3、内外功之间的关系:

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

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

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

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

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

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

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

4、总结

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

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

三、分类三:来自网络

编程。主要指的是编程语言、范式、技术和工具。就像我前面所说的,很多核心概念都是相通的,虽然在细节方面(语法)有所不同。

领域。这是指程序使用的环境,例如,如果你的工作是有关电信方面的,那么这指的就是有关于各种协议如何工作、短信如何处理、如何计费和监控等方面的内容。你在某个行业领域工作的时间越长,你能作出的贡献产出的价值就越多。

代码库。这在每个公司都是独一无二的。工作时间久了,你自然而然就会知道周围这些代码为何如此了。

  作为一个程序员,如果以上3个方面你都属于知识渊博的那一类,那身价自然就高了。如果你换了工作——这是不可避免的——那么对于这个新的代码库你自然又变得一无所知。这时候你需要做的就是开始新的学习和钻研。

  不要以为换了工作,以前学的编程知识和领域知识就没用了。多掌握几门编程语言能让你从多个角度看问题。此外,阅读一些软件开发的好书也蛮有益处的,例如《Code Complete》、《Clean Code》和《The Pragmatic Programmer》等。

感恩:
http://zhuanlan.zhihu.com/xiao-jing-mo/19959253

http://www.zhihu.com/question/22471978

http://www.l99.com/EditText_view.action?textId=4861385

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值