一个软件有几千万甚至上亿字节，程序员是怎么记住的？而且还能一字不差的重新敲出来。
普通开发者做出来的大软件：100MB体积，99.9MB是类库，0.1MB是代码o( ❛ᴗ❛)o1MB代码中，书写方式：先进行整体构思搭建基本框架，将每个部分进行模块化，一次只解决一个问题，越是高耦合低内聚的东西越好处理。一个函数短则一行代码（比如某些混合加减乘除位逻辑运算判断等），长则几十行代码（如图像处理，数据解析封装等）。这些函数封装好了之后，也就变成短短一个接受一个输入，给出一个输出的东西，调教好了之后，并不需要持续记忆它处理文件的细节，只需要记住它接受什么，返回什么。如果代码写的干净整洁，如果返回的东西不符合预期，就回来重看一遍，再朝着想要的结果进行调试，直到返回值和预期相同。最后几十行代码就变成了短短的一个output=foo(input);一个相似功能的组件可以封装成一个class（类），一个类里可以存放两三个（如数据解析成变量）或者十几个函数（如api交互接口）一个class中代码短可能一两百行，长可能也就一两千行。小型程序通常有三五个这样的class就能组成，如数据解码编码：主程序入口，解码器，编码器。大程序会有对应的架构，类之间的继承关系，各种接口来把多个类进行的操作进行封装，比如输入图像获取各个数字的概率：DictionarynumProbs =ImgAiNum.getProbs(image);一个人，这样随便写写也有几千行几万行了。其中可能有20%的行数是大括号，判断，循环等比较短的函数，10%可能是函数的预定义之类的。如果平均下长行短行，一行DictionarynumProbs =ImgAiNum.getProbs(image);都有四十多个字符，就不考虑utf，就单说ASCII，一个字符就是一个byte。500行有效代码就是2,000个byte，5000行就是20,000个byte，这也才2kB到20kB。剩下的体积都是类库堆出来的，如果没有Dictionary这个类，那就得自己写一个函数来储存每个数字和出现的次数，这就得加几百行工作量。如果没有float，那就得访问内存byte[]自己造个float出来，这可就难了。自己造的轮子越多，出错概率越大，如果是一个人从汇编开始搭建一个常见的软件，那这个工作量不是一般人能处理得了的。这些组件其实就跟遥控车一样，需要各种组件，而普通程序员的工作大多就只是用现成的零件拼凑出一个遥控车，然后烧了个驱动控制它。重量99.9%可能都在这些组件上。像某些软件还有一些图片之类的，比如打开一个软件可能有logo，有背景图，这些图片可能就有几KB，十几MB不等。还可能有设定文件，比如JSON，可以存放一些预设之类的。如果程序写得好，通常还有大量注释，但这些并不会计算在编译好的程序体积中。其实最后编译出来如果依赖系统类库，可能只有几十KB大而已，比如.net只使用Windows标准库做文件处理。像游戏的话，模型，动画，视频，素材，游戏引擎，这些东西才是占体积的，代码其实没多点。˃ʍ˂就好比矢量图通常比我们常用的位图体积要小很多，比如一个心形如果用图片来储存可能要10KB的jpg，但用矢量函数来描述只需要声明：在x^2+y^2+a*x=a*sqrt(x^2+y^2)x^2+y^2-a*x=a*sqrt(x^2+y^2)区域内填充RGB#FF2222（一种红色）就可以生成一个红色的心形。如果你想，它可以是1080p，4k，甚至大的不可理喻，毕竟它只是描述了一个图像而不是包含这个东西每一个像素点的全部数据（如bmp）。所以正常来说大多数体积都不是自己写出来的，都是别人写好的ʕᵔᴥᵔ ʔ