原来库是对操作系统指令的封装

2020-04-10 08:35:34 +08:00
 qof3990
我是一名业余编程爱好者。虽然很多年前我就知道了标题这句话。但是最近我才进一步理解了它。这句话的意思是学技术要学最前沿的库框架和最底层的 api 。
学最前沿的东西是为了开发效率,以及方便沟通。为了人好。但学底层是为了程序运行效率,以及方便扩展功能。为了机器好。
多年以来,由于没有理解这个道理。在面对一些特殊的需要时,会用高层的库+复杂的组合,得到一个效率特差的代码。但如果能掌握底层。就可以重载类来增加功能。
原来重载是干这个用的!原来查看类的内容是干这个用的!多年疑惑恍然大悟!
而且以前由于误解,我以为越高层的指令越少。越底层的指令越多。所以学了高层的类,不想打开看底层的系统级的指令。
其实正好相反!!!不管什么高层都是底层那些指令组合出来的!显然底层才是精炼的,高层才是一遍又一遍组合出越来越复杂的类库框架!!!
可惜可惜,二十年光阴荏苒,虚掷蹉跎。如果我早明白这个道理,可以节省多少时间啊!无数次我打开类的内容,茫然四顾,匆匆离去。一次次将近在眼前的机会,轻轻丢落。如果我早明白了,也许我现在也是一名正真的程序员,而不是一名爱好者。
时光一去不再来,只留悔恨泪滂沱…
3669 次点击
所在节点    随想
25 条回复
jrtzxh020
2020-04-10 08:51:43 +08:00
爱好者挺好的,能时刻享受爱好带来的快乐。当爱好变成工作,就会变质了。为什么要悔恨?
love
2020-04-10 09:09:49 +08:00
不好意思,我觉得你觉醒后的这段话也挺业余的☺
iceheart
2020-04-10 09:16:11 +08:00
嗯,抽象能力是程序员应该具备的基本素质,楼主这方面要加油!
abc612008
2020-04-10 09:26:32 +08:00
我觉得你可能还是没有彻底理解……
gemini767
2020-04-10 10:05:50 +08:00
马达马达答捏
wysnylc
2020-04-10 10:06:36 +08:00
挖掘机和锄头,你觉得锄头超厉害
doveyoung
2020-04-10 10:22:57 +08:00
看不懂,我太菜了
chitanda
2020-04-10 10:33:59 +08:00
unix 的 c 库,只是用一个和内核里相同名字的函数来代替系统调用
movieatravelove
2020-04-10 12:12:49 +08:00
学汇编吧,和底层指令来一场邂逅
qof3990
2020-04-10 12:32:42 +08:00
@love
@abc612008
我不太明白,指出我这个爱好者,业余,没理解,有什么意义?这不是显然的事吗?我有了点感想也不可能变专业啊。
如果可以的话,请给我一些指教。我很乐意听各位比我专业的见解。
当然各位不告诉我怎么错的,只是告诉我错了,已经是对我很大的指点了。毕竟以前连告诉我哪错了的人也没有。我会继续努力学习的。
感谢
@chitanda 的指点。这个意思是说,库有复杂有简单的,有的库等同系统调用。不是所有库都更高层。我理解的对吧。
qof3990
2020-04-10 12:35:48 +08:00
@movieatravelove 真的吗?我以为到操作系统这一级就可以了,还需要更深入吗?
qof3990
2020-04-10 12:38:31 +08:00
@jrtzxh020 大概类似打游戏,打了很多年发现自己一直停在第一关的感觉吧。少了很多乐趣嘛。
qof3990
2020-04-10 12:46:45 +08:00
@iceheart 抱歉,请教一下,这个抽象能力在程序员领域是有特指吗?我对这个词理解的也很含糊。
qof3990
2020-04-10 12:55:24 +08:00
@iceheart 抱歉,请教一下,这个抽象能力在程序员领域是有特指吗?我对这个词理解的也很含糊。

@wysnylc 您是说系统指令是锄头吗?我当然不是否定高层的存在意义。我只是说,如果理解了挖掘机的结构就可以在必要的时候,稍微改造一下挖掘机。以便用起来更方便。我以前没意识到挖掘机是可以被改造的。或者说我知道它可以改造,但不知道难度其实没有我想的那么难。因为很多时候我不是要改发动机,只是想在挖斗上装个摄像头。
no1xsyzy
2020-04-10 13:33:04 +08:00
@qof3990 抽象,可以拿我高中时候数学老师的那段话解释下:
小学是 1+2=3
初中是 x+y=z
高中是 []+[]=[]
([] 读作 “空框”)

将某种特性提取出来,形成抽象。比如提取出 “可以加的东西”,那么任何 “可以加的东西” 都可以丢进 []+[] 的 [] 里面。
交换律:x○y=y○x,那么我们知道一个群符合交换律,那么交换群的性质可以全部往上面丢。

同样,对文件进行部分抽象:它可以读可以写 —— 得到一个可读可写的流。那么某个 TCP 连接也是文件,某段内存也是文件。所以打开 TCP 连接的表现是产生文件描述符( fd ),文件也可以映射到内存上去。
如果把两个可读可写流头尾拼在一起就得到了代理( proxy ),双方只和代理交流,但感知上似乎正在直接和对方交流。
qof3990
2020-04-10 14:04:37 +08:00
@no1xsyzy 醍醐不不不提壶灌顶啊。原来 liunx 一切都是文件是这个意思啊。万分感谢🙏🙏🙏
有什么书或文章推荐吗?搜了一下这方面的文章和书还真不少。
nicebird
2020-04-10 14:10:10 +08:00
哈哈所以你还是一个业余爱好者。
一个好的开发者必须是从顶到底打通的,可以根据最顶层的代码,想象到硬件的执行,预估性能消耗,这样才能掌控住一个复杂的、规模大的系统。
qof3990
2020-04-10 14:13:54 +08:00
@nicebird 我很向往这样通盘掌握。你有什么学习路径的建议吗?先学硬件再学操作系统最后学应用。这个难度曲线有点陡啊,不好爬,不好爬…
qq515391365
2020-04-10 14:19:57 +08:00
为什么大家都说写库是造轮子呢.
chitanda
2020-04-10 17:24:57 +08:00
@qof3990 我的意思是,有时候你以为是系统调用,其实也不过是调用了别人的库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX