Programming 里需要的所谓「数学」能力,和我们从初中到大学谈论的数学能力不是一回事。我更倾向于把 programming 需要的能力叫做 encoding 能力。
什么叫 encoding 能力呢?比如说一个公式,写在黑板上可能初中生都能理解。现在需要把这个公式分成两部分,一部分写在 C++ 里,一部分写在 GPU shader 里。两个之间的交互不是相在黑板上用符号一连,而是需要用一个二维数组(就是 bitmap,或者说 GPU 的 texture)。
现在一个系统可能要三四个这样的公式配合。这三四个公式写到黑板上就是大括号一括而已。写到代码里就要分到三四个文件里。这是对你分层能力,符号变换和短期记忆的惊人考验。但是和我们上学时候说的数学能力关系不大。
有人评论里问怎么训练。这是个好问题,也是我以前想得比较少的方面(以前只是觉得下到苦功夫就能 figure out)。现在总结一下:
第一是要让程序的结构尽可能清晰。Keep it simple and stupid. 不要急着加优化。不要急着避免重复计算。需要公式的地方就用过程代码 on-the-fly 算一遍。整个过程正确之后再整体考虑优化。第二是想好清晰可验证的重构步骤。如果你需要把两个新公式加到代码里,要构思好可不可以分成两步,甚至更多步,而且每一步都是可以从外部结果进行验证。这也许类似于设计复杂的物理实验。第三是 don't duplicate yourself。需要依赖相同数据的代码,就要从 one single truth 取数据。需要依赖相同逻辑的地方,就要调用一个函数。有时候你觉得「这里也是除 3 那里也是除 3,我就赶紧在两个地方都写 『/3 』 就行了」。这种 debt 多了你就破产了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有