#杂
这段时间给Databend增加增删列的功能,基本功能已经通过,加了如下截图的用例,目的是验证一顿增删列、插入数据之后的查询都是正确的。
可还是很忐忑,因为这个功能涉及了很多对原有数据格式的修改,要保证所有场景都兼容到了。
我最近复习数学,反过来看,编程在大部分时候,都不能算是“科学”,更多算是“工程”。个中原因,我认为大部分时候,无法从数学角度严格证明一个功能是100%完全没有bug的。
复杂参数的场景姑且不论,就以最简单的整数为参数的问题来说。数学归纳法的原理是先证明n=1的时候结论成立,再假设为n的时候结论成立,最后以这个为前提来证明n+1时结论成立,这在数学上是可行的。但是呢,来到编程领域,一个“千年虫”问题,不过就是表示年份的整数划到了2000而已,就能触发bug了,数学归纳法在这里失效了。
在知乎上看到过著名的“一个测试工程师走进一家酒吧”:
“
一个测试工程师走进一家酒吧,要了一杯啤酒
一个测试工程师走进一家酒吧,要了一杯咖啡
一个测试工程师走进一家酒吧,要了0.7杯啤酒
一个测试工程师走进一家酒吧,要了-1杯啤酒
一个测试工程师走进一家酒吧,要了2^32杯啤酒
...
”
很多时候人们当成段子来看,但是现实中就是这样,无法去归纳某个场景的测试就是完备的,只能靠:堆用例的场景去验证。
sqlite是业内最稳定的数据库之一,号称几万个用例,可即便是它的作者也不敢打包票100%无bug,也是一边补充用例一边增加现有用例。
总而言之,一个事情如果无法用数学原理严谨证明其正确性,总会出问题;反过来说,编程在大部分时候无法用数学证明其正确性,所以编程不是科学,更接近于工程:靠经验、靠堆用例等等手段去保证(而不是验证)其正确性。
这段时间给Databend增加增删列的功能,基本功能已经通过,加了如下截图的用例,目的是验证一顿增删列、插入数据之后的查询都是正确的。
可还是很忐忑,因为这个功能涉及了很多对原有数据格式的修改,要保证所有场景都兼容到了。
我最近复习数学,反过来看,编程在大部分时候,都不能算是“科学”,更多算是“工程”。个中原因,我认为大部分时候,无法从数学角度严格证明一个功能是100%完全没有bug的。
复杂参数的场景姑且不论,就以最简单的整数为参数的问题来说。数学归纳法的原理是先证明n=1的时候结论成立,再假设为n的时候结论成立,最后以这个为前提来证明n+1时结论成立,这在数学上是可行的。但是呢,来到编程领域,一个“千年虫”问题,不过就是表示年份的整数划到了2000而已,就能触发bug了,数学归纳法在这里失效了。
在知乎上看到过著名的“一个测试工程师走进一家酒吧”:
“
一个测试工程师走进一家酒吧,要了一杯啤酒
一个测试工程师走进一家酒吧,要了一杯咖啡
一个测试工程师走进一家酒吧,要了0.7杯啤酒
一个测试工程师走进一家酒吧,要了-1杯啤酒
一个测试工程师走进一家酒吧,要了2^32杯啤酒
...
”
很多时候人们当成段子来看,但是现实中就是这样,无法去归纳某个场景的测试就是完备的,只能靠:堆用例的场景去验证。
sqlite是业内最稳定的数据库之一,号称几万个用例,可即便是它的作者也不敢打包票100%无bug,也是一边补充用例一边增加现有用例。
总而言之,一个事情如果无法用数学原理严谨证明其正确性,总会出问题;反过来说,编程在大部分时候无法用数学证明其正确性,所以编程不是科学,更接近于工程:靠经验、靠堆用例等等手段去保证(而不是验证)其正确性。
👍25
腾讯版三体昨晚(2023.01.15)上线,看了前两集,原著党表示品质不错,10分满分的话可以打到7分以上,希望别烂尾了。至于网飞版三体,依然保持对不看好国外翻拍中国背景剧集的预测。 https://t.me/codedump_notes/334
#杂
《中国开源先驱的力与梦——开源六君子的黄金时代》
一个有意思的观察:这篇文章里提到的几个人物,除去章文嵩以外,其他的人好像都不是所谓计算机科班出身的人,包括理查德·斯托曼(物理学博士)。
一方面,说明“兴趣就是最好的老师”;另外一方面,也说明“编程”本身并不是一件门槛特别高的技能,更讲究在实践中学习,这些人并没有接受太系统的编程训练,但是并不妨碍最后在“编程”领域取得了巨大的成就。(注:这里仅说“编程”,而非计算机理论领域。)
《中国开源先驱的力与梦——开源六君子的黄金时代》
一个有意思的观察:这篇文章里提到的几个人物,除去章文嵩以外,其他的人好像都不是所谓计算机科班出身的人,包括理查德·斯托曼(物理学博士)。
一方面,说明“兴趣就是最好的老师”;另外一方面,也说明“编程”本身并不是一件门槛特别高的技能,更讲究在实践中学习,这些人并没有接受太系统的编程训练,但是并不妨碍最后在“编程”领域取得了巨大的成就。(注:这里仅说“编程”,而非计算机理论领域。)
Weixin Official Accounts Platform
中国开源先驱的力与梦——开源六君子的黄金时代
章文嵩、利启诚、方汉、谢华刚、苏哲、魏永明,他们的黄金时代。
👍7❤1
#数据库
最近在看SQL相关的资料,有几个比较偏门的Join操作不知道什么含义,比如EquiJoin、AntiJoin等,维基百科上关系代数这页的讲解就比较清晰:
https://en.wikipedia.org/wiki/Relational_algebra
最近在看SQL相关的资料,有几个比较偏门的Join操作不知道什么含义,比如EquiJoin、AntiJoin等,维基百科上关系代数这页的讲解就比较清晰:
https://en.wikipedia.org/wiki/Relational_algebra
Wikipedia
Relational algebra
In database theory, relational algebra is a theory that uses algebraic structures for modeling data and defining queries on it with well founded semantics. The theory was introduced by Edgar F. Codd.
👍11
#杂
以前看某网红数据库的Raft实现,本质是一个没有Term概念的玩具版,一个Raft实现没有term,最后一定会出各种问题,实际线上也证明了这一点。
但是即便如此,也并没有影响这个数据库产品最后拿到投资,有了钱之后,就可以招更厉害的人做更好的实现,还能招更多的人擦这个屁股,是不是玩具版已经不那么重要了。投资人信了这个故事,从投资人那里拿到的钱也让新来的人愿意加入。
我想起以前和一个中学同学吃早餐,彼时他想约同学打麻将,于是分别给甲、乙、丙另外三人都打了一通电话,核心内容就是:三缺一,就差你了。于是这就凑齐了一桌麻将。
这两个故事的共同点是:跟不同的人说不同的故事,最后把这些不同的资源攒在一起,做自己的事情,马云、贾跃亭都具备这种讲故事攒资源的能力,最后就看这些个故事,能不能成功的收尾了。
除了这些以外,我还想表达的是:如果方向找对了,中间一些实现细节的纰漏,如果不是致命性的,实际不是最大的问题,投资人也肯定不会去看细节,更多看方向。反过来说,也正是因为大方向正确,小细节存在问题,才给了其他人加入、投入资源进一步改进的机会,如果什么都是完备的,这就不能被称为“风险投资”。动态的来看,一时的问题只要不影响方向的正确,如果靠继续投入资源能解决,这就不是太大的问题。技术人,就不要太纠结于细节而忘记方向,以至于局限在自己的专业领域,忘了抬头看看。
以前看某网红数据库的Raft实现,本质是一个没有Term概念的玩具版,一个Raft实现没有term,最后一定会出各种问题,实际线上也证明了这一点。
但是即便如此,也并没有影响这个数据库产品最后拿到投资,有了钱之后,就可以招更厉害的人做更好的实现,还能招更多的人擦这个屁股,是不是玩具版已经不那么重要了。投资人信了这个故事,从投资人那里拿到的钱也让新来的人愿意加入。
我想起以前和一个中学同学吃早餐,彼时他想约同学打麻将,于是分别给甲、乙、丙另外三人都打了一通电话,核心内容就是:三缺一,就差你了。于是这就凑齐了一桌麻将。
这两个故事的共同点是:跟不同的人说不同的故事,最后把这些不同的资源攒在一起,做自己的事情,马云、贾跃亭都具备这种讲故事攒资源的能力,最后就看这些个故事,能不能成功的收尾了。
除了这些以外,我还想表达的是:如果方向找对了,中间一些实现细节的纰漏,如果不是致命性的,实际不是最大的问题,投资人也肯定不会去看细节,更多看方向。反过来说,也正是因为大方向正确,小细节存在问题,才给了其他人加入、投入资源进一步改进的机会,如果什么都是完备的,这就不能被称为“风险投资”。动态的来看,一时的问题只要不影响方向的正确,如果靠继续投入资源能解决,这就不是太大的问题。技术人,就不要太纠结于细节而忘记方向,以至于局限在自己的专业领域,忘了抬头看看。
👍50👏3🤔3😁2🔥1
#杂
小时候看父亲做木工,或者现在自动动手组装一些简单的家具,都看到拼装的时候有一个技巧:虽然两点可以确定一条直线了,但是实际操作起来中间会有误差,所以这两条直线中间还会有一些“锚点”,只有这些锚点也能对得上,才能认为这两块木板的拼装最后是对的。
我觉得这是很朴素的“单元测试”的想法:把一个复杂的问题,按照不同的步骤、维度参数分解成更容易解决的小问题,只有这些小问题都能通过,才能认为这个复杂的大问题得到了解决。
微积分里,也有类似的思想:曲线下的面积很难计算,于是把这个曲线细分成更小的矩形,当“足够细分”的时候,这些矩形的面积之和就能“近似”地认为是曲线的面积。而什么叫“足够细分”,这就是极限中无穷小的概念。
总而言之,一个大的问题如果很难一步到位去解决,不妨细分成更容易解决、或者能近似认为等价的子问题来解决。
小时候看父亲做木工,或者现在自动动手组装一些简单的家具,都看到拼装的时候有一个技巧:虽然两点可以确定一条直线了,但是实际操作起来中间会有误差,所以这两条直线中间还会有一些“锚点”,只有这些锚点也能对得上,才能认为这两块木板的拼装最后是对的。
我觉得这是很朴素的“单元测试”的想法:把一个复杂的问题,按照不同的步骤、维度参数分解成更容易解决的小问题,只有这些小问题都能通过,才能认为这个复杂的大问题得到了解决。
微积分里,也有类似的思想:曲线下的面积很难计算,于是把这个曲线细分成更小的矩形,当“足够细分”的时候,这些矩形的面积之和就能“近似”地认为是曲线的面积。而什么叫“足够细分”,这就是极限中无穷小的概念。
总而言之,一个大的问题如果很难一步到位去解决,不妨细分成更容易解决、或者能近似认为等价的子问题来解决。
👍21🔥4
#文章推荐
当年上大学刚开始学习编程的时候,彼时台湾的侯捷老师的著作刚刚引进大陆,这才让我了解了这位老师,翻译、撰写的技术书籍不一一阐述,看过的都知道质量。这里提一篇当时在他博客上看到的文章《迷时师度 悟了自度》,里面的观点至今还印象深刻,有了“悟了自度”这个观念之后,给后续的学习、生活提供了很多帮助,比如不要做伸手党、学会问出好问题,等等。在我刚开始学习编程的时候就看到这篇文章得以受启发,建立了一些正确的观念,实在是一件很幸运的事情。
“我知道我就要永远告别我的学生生涯,再也没有人度我,我要自己度化自己了”
遗憾的是,侯捷老师的博客很早就关闭了,所幸网上还是能找到别人保存的副本:《迷时师度 悟了自度》
当年上大学刚开始学习编程的时候,彼时台湾的侯捷老师的著作刚刚引进大陆,这才让我了解了这位老师,翻译、撰写的技术书籍不一一阐述,看过的都知道质量。这里提一篇当时在他博客上看到的文章《迷时师度 悟了自度》,里面的观点至今还印象深刻,有了“悟了自度”这个观念之后,给后续的学习、生活提供了很多帮助,比如不要做伸手党、学会问出好问题,等等。在我刚开始学习编程的时候就看到这篇文章得以受启发,建立了一些正确的观念,实在是一件很幸运的事情。
“我知道我就要永远告别我的学生生涯,再也没有人度我,我要自己度化自己了”
遗憾的是,侯捷老师的博客很早就关闭了,所幸网上还是能找到别人保存的副本:《迷时师度 悟了自度》
👍20😁1
#编程
《入行 14 年,我还是觉得编程很难》,编程最难的地方之一是“管理复杂度”。
结合最近Chatgpt火爆之后对程序员这个行业的冲击,我想类似Chatgpt这样的人工智能工具也许能辅助写一些代码,但感觉只能辅助那种有明确输入、输出的,比如写个排序算法,但是要说把功能模块如何组织在一起成为一个项目,还是得有靠谱的人。
作者著有书籍《Python工匠》。
《入行 14 年,我还是觉得编程很难》,编程最难的地方之一是“管理复杂度”。
结合最近Chatgpt火爆之后对程序员这个行业的冲击,我想类似Chatgpt这样的人工智能工具也许能辅助写一些代码,但感觉只能辅助那种有明确输入、输出的,比如写个排序算法,但是要说把功能模块如何组织在一起成为一个项目,还是得有靠谱的人。
作者著有书籍《Python工匠》。
Piglei
入行 14 年,我还是觉得编程很难 | Piglei
piglei 的 blog
👍13
#杂
知乎上看到一个有趣的问题《五个同事决定计算他们的平均工资,在大家互相不告诉薪水的情况下,如何才能做到这一点?》
底下的两个回答思路很有意思:
https://www.zhihu.com/people/zhang-xiao-yun-43-14/answers/vote
https://www.zhihu.com/question/60042833/answer/173025969
我感觉这两个解题思路,指不定会在哪天用上。
知乎上看到一个有趣的问题《五个同事决定计算他们的平均工资,在大家互相不告诉薪水的情况下,如何才能做到这一点?》
底下的两个回答思路很有意思:
https://www.zhihu.com/people/zhang-xiao-yun-43-14/answers/vote
https://www.zhihu.com/question/60042833/answer/173025969
我感觉这两个解题思路,指不定会在哪天用上。
Zhihu
五个同事决定计算他们的平均工资,在大家互相不告诉薪水的情况下,如何才能做到这一点? - 知乎
由于提问者绑定了「数学」话题,可以合理推测问题有隐含条件:不借助第六人。更进一步,应当要求所选择的…
👏14
😁17👍3