把最看到的有趣东西,按月份和时间倒叙展示在这里. 因此,如果你感兴趣我在最近弄什么好玩的东西.你可以从这里找到相关的入口.

温馨提示: 如果文章中的链接你无法打开,请使用国外的代理访问.

2019.12

本月学到的新东西: Memoization, Referential transparency, LSM-Tree

  • 计算机科学概念:Memoization, 维基百科的外链给出了几乎所有语言的全部实现. 这个机制是过存储(开销大的)函数调用的结果,并在再次出现相同的输入时返回缓存的结果,通过记忆来加速计算机程序。显然是以空间(需要空间一个额外的映射)换时间(函数调用的时间). 它在函数式编程中重度使用. 我原以为是硬件级别的优化, 实际上是software optimization technique, 比如Python, 它由标准库functoolslru_cache实现. 强烈推荐这个文章, Memoization in Python: How to Cache Function Results, 深入浅出, 在Python中它只是一个带缓存的装饰器.
  • 计算机科学概念:Referential transparency. 在学习Memoization时, 我了解到, 仅当一个函数是引用透明时, 才可能被Memoization(A function can only be memoized if it is referentially transparent), 关于它的概念: Referential transparency and referential opacity are properties of parts of computer programs. An expression is called referentially transparent if it can be replaced with its corresponding value without changing the program’s behavior. This requires that the expression be pure, that is to say the expression value must be the same for the same inputs and its evaluation must have no side effects. An expression that is not referentially transparent is called referentially opaque. 编程时, 我们应始终清醒自己的代码是否是引用透明(没有改变程序自身的行为). 想要了解更多, 推荐SO上的一篇文章:functional programming - What is referential transparency (Prof. Uday S. Reddy, University of Birmingham)
  • Python Decorators 虽然我经常使用装饰器, 但是我从没有自己实现过, 准确说, 我并不清楚在何种条件下应该使用它. 我需要再了解更深入, 以确保自己在编程中实践中得心应手地使用. I must get my hands dirty.
  • 课程: Principles of Programming Languages, 在了解Referential transparency概念时, 意外看到了Prof. Uday S. Reddy 教授的一个课程, 它似乎有点意思.
  • 论文:The Log-Structured Merge-Tree (LSM-Tree), LSM-Tree是为了解决高性能事务系统历史记录表的索引问题.基于磁盘的索引结构比如B树有双倍的I/O消耗.LSM Tree实现了以极低的开销实现了实时索引(real-time index).
  • 写完 A Tour of C++的英文笔记. 我本月的时间不是很多了, 看来要少陪妹纸打游戏了. :-)
  • 本月目标: 我必须对自己要求更高一点, 不能只是满足于”知其然”, 更要”知其所以然.” 看了Python的一些标准库组件的代码实现, 我意识到我的代码还远远不够好. 一方面, 我要在工作中提升编程能力; 另一方面, 也要通过私下的自我学习, 弥补自己基础不够扎实和算法不够好的问题. 计算机编程是一门艺术, 也是我的兴趣和爱好, 是我的理想和追求. 珍惜时间, 保持专注, 每天以最大的限度让自己保持进步, 以求超越自我.