原来库是对操作系统指令的封装 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qof3990
V2EX    随想

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

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

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

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

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

    所谓的底层,无非就是笔和纸张而已。 是什么样的笔,什么样的纸,有没有直尺,圆规。这些都不重要。重要的是你想用编程来创造些什么? 其他无非只是工具,花时间熟悉而已。

    学习,就是不断自己去探索的一个过程。

    有人喜欢汇编,所以用汇编写了一个编辑器 RadASM 。
    nnnToTnnn
        22
    nnnToTnnn  
       2020-04-10 17:44:55 +08:00
    ```
    可惜可惜,二十年光阴荏苒,虚掷蹉跎。如果我早明白这个道理,可以节省多少时间啊!无数次我打开类的内容,茫然四顾,匆匆离去。一次次将近在眼前的机会,轻轻丢落。如果我早明白了,也许我现在也是一名正真的程序员,而不是一名爱好者。
    时光一去不再来,只留悔恨泪滂沱…
    ```

    时间并不是借口,只要你想去做这个事情,那么你就一定会做成功,成为正真的程序员,之所以没有成为,而是你自己不想成为。 仅此而已。。 你不愿意去为了去成为程序员而去放弃一些东西。
    qof3990
        23
    qof3990  
    OP
       2020-04-10 18:22:00 +08:00 via iPad
    @nnnToTnnn 先生所言,振聋发聩。前有王江民 38 岁学编程,我现在能幡然醒悟,定为时不晚。
    话说用汇编写汇编语言编辑器还真是有趣又硬核的行为啊。佩服~


    @chitanda 原来还有这样的操作。
    “ UNIX 所使用的技术是为每个系统调用在标准 C 库中设置一个具有同样名字的函数。

      从实现者的角度观察,系统调用和库函数之间有重大的区别;但从用户角度来看,其区别并不非常重要。系统调用和库函数都以 C 函数的形式出现,两者都为应用程序提供服务。但是,我们应当理解,必要时我们可以替换库函数,而通常却不能替换系统调用。

      应用程序可以调用系统调用或者库函数,而很多库函数则会调用系统调用。

      系统调用和库函数之间的另一个差别是:系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。”
    听起来似乎给系统做了个增强。程序员的知识又增加了。
    no1xsyzy
        24
    no1xsyzy  
       2020-04-11 13:52:32 +08:00
    @qof3990 #16 你可能被降权了…… 回复不在消息列表里。
    你这么一说我才意识到这就是一切皆文件这一理念的基础…… 我之前理解还是差了点。
    其实我都是各处只言片语拼装出来的 只是我比较擅长拼装,一句话可以记到十年后可供拼装的另一句话出现。
    qof3990
        25
    qof3990  
    OP
       2020-04-11 16:37:23 +08:00 via iPad
    @no1xsyzy 降权了…可能,上一帖我没搞清就嘴臭了别人,帖子被移到水深火热了。可能管理员出手了吧。希望还有机会能解除惩罚。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4718 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 05:38 PVG 13:38 LAX 21:38 JFK 00:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86