V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qof3990
V2EX  ›  随想

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

  •  
  •   qof3990 · 2020-04-10 08:35:34 +08:00 via iPad · 3667 次点击
    这是一个创建于 1688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是一名业余编程爱好者。虽然很多年前我就知道了标题这句话。但是最近我才进一步理解了它。这句话的意思是学技术要学最前沿的库框架和最底层的 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  
    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   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:59 · PVG 06:59 · LAX 14:59 · JFK 17:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.