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

为什么早期的程序可以在非常有限的资源上运行,现在的软却需要大量的资源?

  •  
  •   cloudfstrife · 2019-11-08 14:39:39 +08:00 · 7236 次点击
    这是一个创建于 1602 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了一下阿波罗的 AGC,主频只有 2MHz,2K 的 RAM,36K 的 ROM。

    那个时代的程序,可以在有限的资源上运行的非常良好,现代的计算机程序,虽然在功能上比过去的程序丰富了很多,但是运行资源上动辄上百 M 上 G。除了功能需要增加了运行所需资源,软件质量是否因为时代的变更,也下降很大呢?

    77 条回复    2019-11-09 19:55:18 +08:00
    linvaux
        1
    linvaux  
       2019-11-08 14:46:33 +08:00 via Android   ❤️ 2
    抛开需求谈这个没意义
    garyzhuang
        2
    garyzhuang  
       2019-11-08 14:48:59 +08:00
    我觉得很多原因吧,只说现在,现在程序的本身就占很多资源,比如图片等等资源体量越来越大,另外一方面现在码农质量以及代码质量,冗余代码,以及日渐庞大需求,所以体量越来越大吧,只是瞎逼扯,来水一下
    creamiced
        3
    creamiced  
       2019-11-08 14:51:43 +08:00   ❤️ 2
    换一个角度看:资源受限,就不得不考虑各种优化,才能运行程序。更别说各种奇淫技巧可能导致的问题。所以软件质量是否下降不论,我觉得开发效率有很大提升。
    crella
        4
    crella  
       2019-11-08 14:54:40 +08:00
    业务?广告?捐赠?打工?
    lzyliangzheyu
        5
    lzyliangzheyu  
       2019-11-08 14:55:44 +08:00
    直接用汇编干寄存器的,效率能不高吗。。。。
    kangzai50136
        6
    kangzai50136  
       2019-11-08 14:56:29 +08:00
    用性能去换取开发效率
    FallenTy
        7
    FallenTy  
       2019-11-08 14:57:21 +08:00
    语言变了,需求也变了
    Raymon111111
        8
    Raymon111111  
       2019-11-08 15:00:43 +08:00   ❤️ 1
    你可以搜 安迪比尔定理

    大意是所有新出的硬件性能都会被软件所用完
    lzyliangzheyu
        9
    lzyliangzheyu  
       2019-11-08 15:05:09 +08:00
    @Raymon111111 另一种意义上的 从简入奢易,由奢入俭难 23333333
    BingoXuan
        10
    BingoXuan  
       2019-11-08 15:05:21 +08:00
    @garyzhuang
    不是,当时应该所有功能都是用汇编硬编码进去的实现的,而且只有最简单的功能。以当时的标准来看,tcp 是实现不了,udp 勉强可以实现。但 ip 头要固定写死,udp 头的部分信息也要写死。数据长度也要有限定。发送数据直接从不同寄存器按顺序取数据加个 checksum 完事了。哪里像现在那样 udp 还要考虑流量控制,丢包重发,增加冗余以确保丢失一定数据包依旧能保证数据完整。
    murmur
        11
    murmur  
       2019-11-08 15:06:40 +08:00   ❤️ 1
    排除游戏之外,都是 electron 惹的祸,你看 n*pad++的主程序加插件 10m 不到
    反观用了 electron 的,想不破百都是奢望
    lvsemi1
        12
    lvsemi1  
       2019-11-08 15:07:38 +08:00
    只要钱给够我也给你手写汇编精简体积
    sgissb1
        13
    sgissb1  
       2019-11-08 15:08:34 +08:00
    因为那时候无证程序员少,现在无证程序员泛滥。
    murmur
        14
    murmur  
       2019-11-08 15:12:32 +08:00   ❤️ 1
    还有就是内存足够大,导致没人做优化和细化了,我举个例子,这个例子可能不恰当,内容也可能有部分捏造;
    本来鲁大师是一个硬件检测软件
    首先被 360 收购,360 就给他加了 360 的基础库
    为了赚钱,鲁大师里又加了个游戏中心
    因为国内网络复杂,游戏中心需要下载,所以又加了个 360 旋风的下载组件(这里是捏造的)
    因为鲁大师还有驱动管理的的功能,这部分也是单独的组件
    因为 360 提供系统“清理”的功能,这部分自然也要移植来
    你可能只是下个鲁大师跑分,但是你下了一个全家桶回来
    luckyrayyy
        15
    luckyrayyy  
       2019-11-08 15:13:04 +08:00   ❤️ 11
    为什么几十年前的人们能吃红薯皮、树叶子,人均居住面积几平米,还能活得很好,现在月入万元缺总抱怨活的不如狗。人的质量是否因为时代的变更,也下降很大呢?
    ech0x
        16
    ech0x  
       2019-11-08 15:14:18 +08:00 via iPhone
    第一件事软件的功能变多了,第二现代的程序越来越不注重优化了。
    kokutou
        17
    kokutou  
       2019-11-08 15:14:25 +08:00 via Android
    360 壁纸,一个壁纸软件而已,谁能想到它居然内置了鲁大师组件呢?外加一个手机游戏助手。。。
    1OF7G
        18
    1OF7G  
       2019-11-08 15:16:04 +08:00
    成本啊,硬件便宜而人工贵。如果都按想象中的,用汇编 或 C++开发一切,目前计算机和互联网大概还停留在 2000 年的发展水平吧。
    iIli1iIliIllLiL
        19
    iIli1iIliIllLiL  
       2019-11-08 15:24:22 +08:00
    对比一下早期和现在的程序有多少功能就行了,而且有摩尔定律,既然电脑有那么多可用的资源干嘛不用呢,用户使用体验也上来了。
    InkStone
        20
    InkStone  
       2019-11-08 15:32:38 +08:00
    质量正比于成本,这件事情从来没变过。

    你现在拿给阿波罗编写程序的成本去做软件,一样能做出很强的软件。
    7654
        21
    7654  
       2019-11-08 15:41:55 +08:00
    因为脚手架太多
    因为赶进度
    因为。。。
    以至于性能优化也能放到更新日志里
    cloudfstrife
        22
    cloudfstrife  
    OP
       2019-11-08 15:44:16 +08:00
    @7654 貌似已经是常态了
    ayase252
        23
    ayase252  
       2019-11-08 15:53:18 +08:00
    要极限性能当然可以啦,给钱我当人肉编译器都可以,手撸汇编(嗯,还要别人能够读懂我写的东西,怎么可能
    jedihy
        24
    jedihy  
       2019-11-08 15:54:03 +08:00 via iPhone
    依赖少的话和当时的程序大小比完全没有劣势。
    love
        25
    love  
       2019-11-08 15:54:18 +08:00
    node 用户表示就写了 hello world 包目录就有几万个第三方依赖文件,以前的软件基本只用系统 lib
    vipcc
        26
    vipcc  
       2019-11-08 16:01:39 +08:00 via Android
    软件工程课程不是说了这个问题的么。
    你的时间值钱还是,几百个 G 的内存值钱。
    火力加满烧开水,也要等温度降下来了才喝,那这些热量就是浪费了吗。
    没有完美的方案,只有合适的方案。
    zjsxwc
        27
    zjsxwc  
       2019-11-08 16:08:23 +08:00
    以前的字符游戏 和 现在的 3D 大作的区别
    realpg
        28
    realpg  
       2019-11-08 16:08:24 +08:00
    因为没有性能指标要求,所以就没性能了
    ivvei
        29
    ivvei  
       2019-11-08 16:22:43 +08:00
    光图片分辨率就不同了吧,现在的图多大啊,换以前的机器,一张图都塞不下。
    liuzhiyong
        30
    liuzhiyong  
       2019-11-08 16:24:27 +08:00 via Android   ❤️ 1
    就是用开发效率去换性能损耗。那时候多半是直接搞汇编语言,现在单片机上都基本不搞汇编语言了:开发效率提高了,就这么简单。
    hoyixi
        31
    hoyixi  
       2019-11-08 16:30:12 +08:00   ❤️ 1
    因为以前软件太占用资源,多数人都会说:这软件写的不怎么样,优化的不好,太吃资源

    现在软件太占用资源, 太多人会说:你就那么穷吗,升级内存不就行了
    charlie21
        32
    charlie21  
       2019-11-08 16:49:25 +08:00 via Android
    SDK 不行。
    TapCode
        33
    TapCode  
       2019-11-08 16:51:52 +08:00   ❤️ 3
    现在的软件要干的事情很多,除了你能看到的,还在干你看不到的事情。

    公司的安卓 APP 上架第三方市场(联想),被要求需要公安备案,需要 APP 要记录打开用户的时间,IP,手机号,登录后的操作记录,等各种信息。要不没办法上架第三方市场。引入了这么一套记录功能,APP 增加了好几兆的大小。
    charlie21
        34
    charlie21  
       2019-11-08 16:56:17 +08:00 via Android
    垃圾 SDK 就是垃圾。你这个东西,是你用一坨一坨 shit 拼起来,拼出来的 是 一坨大 shit ( shit 和 shit 拼起来只能拼出 shit ) 。它的确能解决需求,它的确节省了开发效率,但是 它是 shit 不是巧克力。

    当然 你没吃过巧克力,就会认为 别人端上来的这一坨 是 巧克力。

    从外观就可以看出来 shit 和 巧克力吧,看不出来嘛,哈哈 无所谓阿

    shit 就是巧克力,巧克力味的 shit,无所谓阿。是你吃又不是我吃

    -
    morphyhu
        35
    morphyhu  
       2019-11-08 16:58:51 +08:00
    以前的程序员是脑力劳动,现在的程序员是体力劳动,所以有了 996
    cest
        36
    cest  
       2019-11-08 17:11:25 +08:00
    软工增加产品效率
    ->硬件需求减少
    ->gdp 上不去
    ->破坏经济,拖出去斩了
    kiwier
        37
    kiwier  
       2019-11-08 17:16:45 +08:00
    一个破钉钉,macOS 上 220 多 m,日了狗了
    fancy111
        38
    fancy111  
       2019-11-08 17:19:27 +08:00
    各种无用的东西堆积而已。还有就是追求华而不实的人太多了。
    同样一个网站,如果照十年前的设计做出来,占资源很少,但是不好看。功能其实是一样的。
    Greendays
        39
    Greendays  
       2019-11-08 17:23:54 +08:00
    那个年代写出这样的代码确实厉害,但是现在航天领域的代码依然很精简啊
    MaiKuraki
        40
    MaiKuraki  
       2019-11-08 17:25:44 +08:00
    @TapCode 现在所有 app 都要求这样吗
    cloudfstrife
        41
    cloudfstrife  
    OP
       2019-11-08 18:15:51 +08:00
    @hoyixi 现在貌似确实是这样,以前是想办法优化程序,现在都是花钱升级硬件
    guanhui07
        42
    guanhui07  
       2019-11-08 19:06:11 +08:00
    依赖少 精简
    imn1
        43
    imn1  
       2019-11-08 20:00:48 +08:00
    早期程序不需要常驻后台
    也没有打开静默打开摄像头和麦克风,现在静默开启静默关闭,不打搅用户多贴心啊
    噢,还有热更新补丁,永远保最持安装
    slanternsw
        44
    slanternsw  
       2019-11-08 20:15:23 +08:00
    “你的时间非常值钱”
    janus77
        45
    janus77  
       2019-11-08 20:17:24 +08:00 via iPhone
    因为早期慢啊
    空间换时间
    smdbh
        46
    smdbh  
       2019-11-08 20:54:52 +08:00
    高级语言的功劳
    koalli
        47
    koalli  
       2019-11-08 21:04:12 +08:00
    我觉得是因为内存 cpu 这些越来越便宜了,所以使用的时候就不再那么抠了...
    murmur
        48
    murmur  
       2019-11-08 21:09:39 +08:00
    @vipcc 几百个 g 的内存一次 gc 或者出了内存泄露排查起来就是灾难,何况这种东西家用级产品用不到,都是大型的仿真建模,别人对内存更会精打细算,以前第一批内存不要钱的时候,实验室跑电磁学仿真买了 1t 内存的服务器,程序一启动 190g 内存就没了,这要是参数设大点直接炸了
    coloz
        49
    coloz  
       2019-11-08 21:17:14 +08:00
    现在也可以啊,单片机编程一直存在
    fox0001
        50
    fox0001  
       2019-11-08 21:18:50 +08:00
    记得 Android 刚出,那时叫 Market 的应用市场上,绝大部分应用都是 KB 级别,也包括大多数游戏。现在找到少于 1M 的应用,都觉得神奇……
    gggxxxx
        51
    gggxxxx  
       2019-11-08 21:28:36 +08:00
    其实就是现代软件复杂度比远古软件大的多。
    现代软件开发简单,因为有很多现成的库可以直接使用。自己写的代码少,但是不代表程序运行的代码简单和少。
    从另一个角度来说,你现在写的软件占用资源少,说明功能不行.....不信你们去看看你们常用的工作软件,哪个不是吃资源大户?
    sc3263
        52
    sc3263  
       2019-11-08 21:35:21 +08:00
    还有一种情况,开发者根据当前主流的配置进行更有针对的优化,而这个优化往往会占用更多看得到的资源。假如有 100M 的数据需要经常查询。在大家都只有几十 M 内存的时候,只能把数据放磁盘上,内存里放索引和缓存。但在大家内存都上 G 的时候,就会考虑把数据全部放内存里。
    xeaglex
        53
    xeaglex  
       2019-11-08 22:05:36 +08:00 via Android
    现在的软件,你把所素材文件,包括图片,视频,音频等都抛开。真正的可执行二进制部分也不多
    opengps
        54
    opengps  
       2019-11-08 22:22:38 +08:00 via Android
    以前学软件得十几几十年,现在学软件开发可以 n 天
    default7
        55
    default7  
       2019-11-08 22:28:57 +08:00
    三个字:惯的呗。
    default7
        56
    default7  
       2019-11-08 22:29:23 +08:00
    难怪我的手机 64G 已经完全不够用了,因为那些应用,动不动就 200M 500M 一个
    nicevar
        57
    nicevar  
       2019-11-08 22:35:27 +08:00
    一方面是现在的设备性更好,4k 屏都满大街了,就算往屏幕上贴张图,内存也翻了几十倍,加上现在程序功能强大,视觉效果特好,比较占用资源也是合理的。
    另一方面现在的软件更为庞大,追求开发效率,采用 gc 类语言,牺牲点性能也不算什么,再就是现在的程序员门槛低,很多对内存管理没有什么概念的,特别是偏上层应用的,就不说前端做个页面能把 chrome 卡死,安卓市场里面的应用内存泄漏严重的满天飞,各种安卓的开源库包括 google 官方的内存泄漏都是家常便饭,不卡是没有道理的。
    inntechy
        58
    inntechy  
       2019-11-08 22:50:03 +08:00
    安迪比尔定律
    wleexi
        59
    wleexi  
       2019-11-08 22:58:48 +08:00
    GUI 占了很多空间
    greatdancing
        60
    greatdancing  
       2019-11-08 23:05:00 +08:00 via Android
    写阿波罗那玩意估计要软硬件都精通
    这水平要求有点高啊
    cyyzero
        61
    cyyzero  
       2019-11-08 23:24:55 +08:00 via Android
    因果倒置。现在程序变成这样就是因为硬件提升资源够用了。
    LZSZ
        62
    LZSZ  
       2019-11-08 23:25:15 +08:00
    硬件上来了
    billlee
        63
    billlee  
       2019-11-08 23:49:24 +08:00
    阿波罗导航程序不会变需求
    CoderXiaode
        64
    CoderXiaode  
       2019-11-08 23:50:44 +08:00 via Android
    可参考安迪-比尔定律, "what Andy gives, Bill takes"
    arraysnow
        65
    arraysnow  
       2019-11-09 00:00:24 +08:00
    @murmur 我做互联网的,以我的业务为例,你看到的双 11 营销页面在后端第一层是千台 1c4g 服务器做在不停抗流量做渲染,还有若干百 G 的 redis 做支撑

    可以优化吗?可以
    哪个便宜?相比时间、人力、协作成本,堆硬件资源太划算了
    cmdOptionKana
        66
    cmdOptionKana  
       2019-11-09 00:33:24 +08:00
    不是程序员水平问题,不是不愿意优化

    真的只是因为需求增加了。

    以 Electron 为例,占用资源很疯狂,表面上看是开发商不愿意优化,但是请看看用户的需求是什么:

    1. 跨平台
    2. 界面现代化、好看
    3. 快速迭代(不断提出需求、要求快速实现、要求多平台同时实现)
    4. 重点来了:免费、没有广告

    以前低资源占用、高效运行的软件并没有收到这些需求,或者说用户就算有这些需求也无法实现。
    takemeh
        67
    takemeh  
       2019-11-09 00:40:52 +08:00   ❤️ 1
    实现一个简易的网盘,包含 web 服务器, 加上权限控制上传下载移动删除, 还有前端页面。
    猜猜这个程序完成后移动多大? 只有几十 KB, 详见这里 /t/497773

    @1OF7G @7654 @arraysnow @ayase252 @billlee @BingoXuan @cest @charlie21 @cloudfstrife @CoderXiaode @coloz @creamiced @crella @cyyzero @default7 @ech0x @FallenTy @fancy111 @fox0001 @garyzhuang @gggxxxx @greatdancing @Greendays @guanhui07 @hoyixi @iIli1iIliIllLiL @imn1 @InkStone @inntechy @ivvei @janus77 @jedihy @kangzai50136 @kiwier @koalli @kokutou @linvaux @liuzhiyong @love @luckyrayyy @lvsemi1 @LZSZ @lzyliangzheyu @MaiKuraki @morphyhu @murmur @nicevar @opengps @Raymon111111 @realpg @sc3263 @sgissb1 @slanternsw @smdbh @TapCode @vipcc @wleexi @xeaglex @zjsxwc
    KINGOD
        68
    KINGOD  
       2019-11-09 04:55:28 +08:00
    @takemeh #67 当我们说资源占用的时候,更多的是说程序运行时需要的 CPU GPU 内存 存储 等等。编译后可执行文件的大小,只是一小方面。比如 :(){:|:&};: 只是十几个字节而已,却几乎能把 CPU 内存耗尽。
    expy
        69
    expy  
       2019-11-09 09:02:25 +08:00
    大概是硬件比人工、时间成本便宜太多,现在的需求变化速度跟复杂度也不一样,
    重点是用户稍微不满也不会影响赚钱。
    takemeh
        70
    takemeh  
       2019-11-09 10:40:09 +08:00
    @KINGOD 是的,那个网盘也只占用很少的你说的这些资源。比如运行在只有 64MB 的内存的路由器上,可以几十个人同时上传几十 GB 的文件,内存占用依然很少。
    limbo0
        71
    limbo0  
       2019-11-09 10:58:41 +08:00
    因为成本妥协,
    一天一个需求和一个月一个需求的软件质量肯定不一样
    XuanFei990
        72
    XuanFei990  
       2019-11-09 12:15:54 +08:00
    你这不在一个级别上谈。

    单片机用在哪,CPU 用在哪,能一样么,
    TapCode
        73
    TapCode  
       2019-11-09 12:34:08 +08:00
    目前我知道的是,有一些安卓第三方市场上架一些类型(工具类的好像不需要,有社交能力的 APP 绝对是要的)的 APP 需要公安备案 ,公安备案需要让 APP 具备足够的日志记录功能(不限于 IP、手机号、时间、位置信息等内容)
    TapCode
        74
    TapCode  
       2019-11-09 12:34:30 +08:00
    @MaiKuraki 楼上
    linshiyouxiang
        75
    linshiyouxiang  
       2019-11-09 13:57:44 +08:00
    我是来看评论的😂
    brucefu
        76
    brucefu  
       2019-11-09 15:51:10 +08:00
    一个静态 Hello word 页面也要放 tomcat 里
    nvioue
        77
    nvioue  
       2019-11-09 19:55:18 +08:00
    这算是计算机里面的通货膨胀之一.
    我给你列举另外一个:

    LeetCode53 是 easy, 拿来面试都不算难, 但这个答案是 1984 年的计算机教授给出的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3142 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 13:01 · PVG 21:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.