底层与上层
来源:互联网 发布:jquery怎么传json数据 编辑:程序博客网 时间:2024/04/30 07:21
今天聊天聊起了编程的时候底层与上层的问题。对计算机系统甚至是整个人类社会来看,分层可以说都是一种最最基本的架构。越底层的模块,解决越纠结越核心的问题。然后上层调底层的接口去实现一些相对负责的功能。通过这种逐层封装的方式。我们用三极管实现了现在这个炫酷的信息时代。
对现在浮躁的软件行业来说。程序员在编码的时候,都是能用上层接口就用上层接口,甚至是上层接口无法提供想要的功能的时候去找三方库,为了提高效率,这也是正常的。但是,对一个真正的程序员来说,其实是很有必要去尽量了解底层的。
了解底层最直接的好处,就是你可以实现上层接口没有提供的功能。就拿我做的苹果软件开发来说。绝大部分的功能你是可以调用 UI层,NS层来实现的,但是有一些特殊需求呢,比如涉及到复杂的绘图问题时,你必须得调用coreGraphics库自己去实现。而coreGraphics 就是相对与UI层来说的一个底层,他提供了UI层所需要的绘图功能。更进一步来说呢 coreGraphics 库最终肯定是调openGL 来实现的。涉及到更高端的功能时,比如你需要对一个图形做到像素级别的控制的时候,coreGrphics也无法提供这样的功能了,你必须得去调openGL 函数去做。这就是更底层。这也是为什么网上那些牛逼哄哄的动画效果都是直接用openGL去做的。之前看的一个水波纹效果的动画,几百行代码而已,炫酷到爆,不懂openGL的人根本做不出来,这就是程序员的内功啊。
再比如计算机网络,HTTP,调 tcp 实现,如果你懂TCP,那么你就可以在特定的时候,不用web的方式,自己用TCP去设计实现一个更符合当前业务逻辑,性能更高的网络架构。再进一步,如果你懂IP层,那么你甚至可以连TCP都不用了,自己设计传输控制协议。
越懂底层越能实现高效或者牛逼的功能,想起来,当年听说的某某游戏公司服务器端,调用最频繁的模块直接用汇编写,甚至特定的计算逻辑单元直接做成硬件。
可能现在好多人觉得调上层接口就能实现的功能,干嘛去学习底层呢。这就是之前为什么网上说JAVA .NET 程序员是伪程序员,因为这些系统封装的太好了,功能太强大了,以至于程序员不用懂太多东西就可以做出程序来。只知道HTTP,不知道TCP,UDP 的人应该很多吧。就是这样不思进取的人多了,所以拉低了整个JAVA,.net 程序员界的水平,也给了C语言界鄙视他们的理由吧。但实际上真正读懂了.net 运行时,摸清了整个 famework架构的人那照样是大牛啊。JAVA更不用说了,struts hibernate Spring,牛逼的三大框架,如果一个人能说出这三个框架是怎么设计实现的,你能说他不牛逼?,从语言本身去看,如此优美的一个语言,从编译原理级别读懂这个语言的人估计都得成艺术家了。越是从底层去看一个系统的设计实现方式,越是眼界开阔心胸舒展。
跟几个哥们聊到了,什么时候该学底层呢,我觉得,作为一个程序员,作为一个有志于摆脱伪程序员身份的人,应该是有空的时候就去看底层知识,而不是说用到的时候才去看。有时候,看起来调个接口就能实现的功能,如果你能懂这个接口的实现原理的话,好处也是多多的。而且,如果你一直用不到,一直不去学,水平也就一直不会提高。
我在想,如果我是面试官,去面一个ios程序员的话,我会怎么跟他聊。你知道委托吗,那你知道委托的实现原理吗。你知道通知吗,那你知道通知的实现原理吗。如果让你在一个没有通知的功能的系统中实现同样的功能,你会怎么做。你知道block吗,那你知道系统对block在编译之前做了哪些处理吗。OC里面的类,在预处理之后变成了什么样?C语言中没有类,OC从C语言扩展而来,它是如何实现 类的功能。突然想起了很早之前找工作的时候,那个硬件出身的哥们跟我讲Linux底层原理,讲Linux程序编译过程,讲makefile文件的作用,突然感觉好惆怅。
- 底层与上层
- 一个关于底层与上层开发话题讨论的片段
- “嵌入式底层开发” 与 “上层应用开发” 哪个更累
- 底层到上层记录
- android音量键 底层 上层
- 【总结】嵌入式上层和底层
- 嵌入式:上层or底层?有意思~
- 读《中国正在过大关(底层沦陷与上层逃离)》有感
- 上层判断,底层断言!(if vs assert)
- 从底层到上层添加驱动模块
- 底层通知上层的架构实现
- 底层状态改变上报上层机制
- Android上层如何调用一个底层函数
- linux底层驱动模型之二:上层容器
- 上层APP调用底层硬件驱动过程解析
- 如何从底层的datatable更新上层的datagridview
- linux底层驱动模型之二:上层容器
- 上层得到底层数据的一种回调机制
- 【codeforces】543D. Road Improvement【树形DP】
- 并查集-HDU1232
- c# XML和实体类之间相互转换
- Autorelease 原理,有一点注意,目前在ox 64位objc_retainAutoreleasedReturnValue 是优化编译的,将直接return对象不会注册到autoreleasep
- 黑马程序员-----String,StringBuffer,StringBulide
- 底层与上层
- 黑马程序员_C流程控制和循环结构
- hashtable
- python小程序
- 创建SVN仓库的步骤 http://download.csdn.net/detail/u011925590/8357419
- 递归与迭代的区别
- HDU 1800 Flying to the Mars(字典树)
- 2_Linux常用指令介绍
- 输出含有某个子字符串的字符串