好资源和短想法
#杂
这段时间给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,也是一边补充用例一边增加现有用例。
总而言之,一个事情如果无法用数学原理严谨证明其正确性,总会出问题;反过来说,编程在大部分时候无法用数学证明其正确性,所以编程不是科学,更接近于工程:靠经验、靠堆用例等等手段去保证(而不是验证)其正确性。
#杂
使用Sublime替换vscode配置成主力IDE已经大半个月了,目前感觉还好,最重要的是:Sublime足够轻量,不会出现vscode那样时不时的卡顿情况。
插件系统能覆盖常见的辅助插件,更重要的是LSP的出现,使得很多以前在专业IDE才能支持的代码提示、辅助功能也能在编辑器上支持起来了。
另外,这个替换IDE的过程里,也不是没有考虑过类似NeoVim这样的方案,但是几个问题把我挡住了(也许是暂时的拦住,后面也可能再尝试:):
* 需要自己配置的插件太多;
* 没有太好的右键菜单项支持,这样使用的时候就需要记很多的快捷键,有点望而却步了。
以前很多人提起Vim的时候,经常强调是Vim用得好了能有“全部操作使用键盘完成”的爽感,我后来自己的体会,感觉其实不必对全部操作都得纯键盘完成有太多的偏执,该鼠标操作的时候还是鼠标操作,自己怎么舒服怎么来吧。
简而言之,现在我已经不去过度追求去驾驶一辆“纯手动挡”的车了,该辅助的时候就上辅助。
使用Sublime替换vscode配置成主力IDE已经大半个月了,目前感觉还好,最重要的是:Sublime足够轻量,不会出现vscode那样时不时的卡顿情况。
插件系统能覆盖常见的辅助插件,更重要的是LSP的出现,使得很多以前在专业IDE才能支持的代码提示、辅助功能也能在编辑器上支持起来了。
另外,这个替换IDE的过程里,也不是没有考虑过类似NeoVim这样的方案,但是几个问题把我挡住了(也许是暂时的拦住,后面也可能再尝试:):
* 需要自己配置的插件太多;
* 没有太好的右键菜单项支持,这样使用的时候就需要记很多的快捷键,有点望而却步了。
以前很多人提起Vim的时候,经常强调是Vim用得好了能有“全部操作使用键盘完成”的爽感,我后来自己的体会,感觉其实不必对全部操作都得纯键盘完成有太多的偏执,该鼠标操作的时候还是鼠标操作,自己怎么舒服怎么来吧。
简而言之,现在我已经不去过度追求去驾驶一辆“纯手动挡”的车了,该辅助的时候就上辅助。
#杂
偶然在推上看到有推友讨论《深入理解UNIX系统内核》这本书,译者之一的李雨正好是我之前的同事,他的故事也比较“传奇”。
中专学历出身(上世纪90年代中,因为好的中专包工作分配,还能去当时还挺吃香的事业单位,所以有好些成绩好的初中毕业生初中毕业以后选择了读中专,李雨就是这种情况),后来中专毕业之后,到运营商工作,从事入户安装网络之类的工作。不知道咋回事开始对刚刚兴起的Linux感兴趣,于是就开始自学编程,加入一家当时在中国做开源Linux桌面系统的公司,一步一步搞起了Linux,后面又开始接触Linux内核编程。
再后来,到了淘宝刚组建的Linux内核组工作正儿八经开始了Linux内核编程相关的工作,好像最后做到了阿里P8级别。华为开始组建自己的OS内核实验室之后,跳到华为从事自主OS内核的开发。
以“华为 李雨”为关键字,能在网上搜到他的一篇PPT。
他的故事又(为什么我说“又”)是一个“异常样本”,但在我看来样本提供的就是各种“可能性”。
偶然在推上看到有推友讨论《深入理解UNIX系统内核》这本书,译者之一的李雨正好是我之前的同事,他的故事也比较“传奇”。
中专学历出身(上世纪90年代中,因为好的中专包工作分配,还能去当时还挺吃香的事业单位,所以有好些成绩好的初中毕业生初中毕业以后选择了读中专,李雨就是这种情况),后来中专毕业之后,到运营商工作,从事入户安装网络之类的工作。不知道咋回事开始对刚刚兴起的Linux感兴趣,于是就开始自学编程,加入一家当时在中国做开源Linux桌面系统的公司,一步一步搞起了Linux,后面又开始接触Linux内核编程。
再后来,到了淘宝刚组建的Linux内核组工作正儿八经开始了Linux内核编程相关的工作,好像最后做到了阿里P8级别。华为开始组建自己的OS内核实验室之后,跳到华为从事自主OS内核的开发。
以“华为 李雨”为关键字,能在网上搜到他的一篇PPT。
他的故事又(为什么我说“又”)是一个“异常样本”,但在我看来样本提供的就是各种“可能性”。
#杂
程序员始终逃不过所谓的“35岁年龄问题”(有可能这个问题过了几年又变成了40:)
我今年已经40了,而且:
* 我是从大学一毕业就开始做程序员的。
* 从来没有做过一天的管理,从来的身份都是“工程师”,未来也不想转方向。
* 我非常喜欢写代码,未来打算一直写代码到退休。
尽管如此,仍然有很多其他人可能关心的问题,我解决(解答)不了:
* 如何做到“财富自由”?(我工作这些年也没有达到,还欠了一屁股的债,惭愧:)
* 程序员如何转管理?(没想过,和代码打交道比跟人打交道轻松多了:)
* 如何成为“技术大牛”?(别问我,我不是,你认错人了:)
* 如何确保学习的技术永不过时?(空气凝固了:)
....
以上这些别人关注的问题,有些我不关心,还有一些确实是能力所限解答不了。
而且我还有可能将来某天面对这样现实的问题:
* 假如某天我失业了,如何确保一定能再找到一份程序员的工作?
* 新知识你要是学不动了,该怎么办?
....
无法回答。
我对这些现实问题的处理方式就是等真的有问题了再来处理吧(懒惰是程序员的美德之一)。现阶段能做的就是做好工作、在所在领域保持学习。
我这样的“大龄、非成功程序员样本”,可能对陌生人的意义,更多的在于:当你开始问所谓的“35岁年龄问题”时,不妨可以看看我这个“异常样本”。
虽然是“异常样本”,虽然可能不太具备参考价值,也不是“标准答案”,不具备“可复制性”,但是由于我相当多的输出都在网上可见,所以总归可能对所谓的“35岁年龄问题”提供另一种角度和思考。
至于什么角度、如何思考,这就见仁见智了。我只提供事实,不参和观点和评论。
以上。
程序员始终逃不过所谓的“35岁年龄问题”(有可能这个问题过了几年又变成了40:)
我今年已经40了,而且:
* 我是从大学一毕业就开始做程序员的。
* 从来没有做过一天的管理,从来的身份都是“工程师”,未来也不想转方向。
* 我非常喜欢写代码,未来打算一直写代码到退休。
尽管如此,仍然有很多其他人可能关心的问题,我解决(解答)不了:
* 如何做到“财富自由”?(我工作这些年也没有达到,还欠了一屁股的债,惭愧:)
* 程序员如何转管理?(没想过,和代码打交道比跟人打交道轻松多了:)
* 如何成为“技术大牛”?(别问我,我不是,你认错人了:)
* 如何确保学习的技术永不过时?(空气凝固了:)
....
以上这些别人关注的问题,有些我不关心,还有一些确实是能力所限解答不了。
而且我还有可能将来某天面对这样现实的问题:
* 假如某天我失业了,如何确保一定能再找到一份程序员的工作?
* 新知识你要是学不动了,该怎么办?
....
无法回答。
我对这些现实问题的处理方式就是等真的有问题了再来处理吧(懒惰是程序员的美德之一)。现阶段能做的就是做好工作、在所在领域保持学习。
我这样的“大龄、非成功程序员样本”,可能对陌生人的意义,更多的在于:当你开始问所谓的“35岁年龄问题”时,不妨可以看看我这个“异常样本”。
虽然是“异常样本”,虽然可能不太具备参考价值,也不是“标准答案”,不具备“可复制性”,但是由于我相当多的输出都在网上可见,所以总归可能对所谓的“35岁年龄问题”提供另一种角度和思考。
至于什么角度、如何思考,这就见仁见智了。我只提供事实,不参和观点和评论。
以上。
#杂
我记得大概是去年这个时候,由于前公司要重构一下存储元数据的存储引擎,开始研究怎么实现一个轻量级的存储引擎。
当时想研究一下市面上的B+Tree版本的存储引擎,可是有的项目很大(Innodb、WireTigger等),有的项目就是个玩具,只能演示原理做不到生产级别。这段时间可以说压力很大,印象最深的是当时去北京团建外出到景区,当天凌晨有世界杯亚洲区预选赛澳大利亚对中国,睡不着就一边看代码一边听比赛。
这时候偶然看到的一个精简的2.5版本的sqlite btree库,只有几千行代码,这个简单的实现打开了理解生产级B+Tree实现的大门。
在这之后就是“顺势”看了更高版本的sqlite btree实现,这些故事都写在了:《sqlite3.36版本 btree实现(零)- 起步及概述》。
仅就“生产级B+Tree”实现而言,sqlite的实现虽然还是有各种问题:比如效率不高等,但是都向我展现了总体的实现思路,后面再看这方面的实现也有了基础,比如今年研究了ARIES这篇论文,最近还在看BW-Tree的论文。
现在一年时间过去了,我又开始探索一个新的领域:Jepsen,想在项目里使用上这个项目来验证我们系统的实现,初期仍然跟以往自己独立研究一些问题一样遇到很多困难,因为太多新的知识点没有接触过:Clojure、模型检验(Model checking),等等。
回头来看,很多我后来看来获得技术上很大成长的时候,都是这种独立、深入研究某个领域之后带来的:身边没人请教、自己找答案、深入阅读文档、代码,等等。这样的经历多了以后,对这种压力似乎也感到适应,对压力之后的收益也清楚,甚至对解决这些难题有一些期望了。
我记得大概是去年这个时候,由于前公司要重构一下存储元数据的存储引擎,开始研究怎么实现一个轻量级的存储引擎。
当时想研究一下市面上的B+Tree版本的存储引擎,可是有的项目很大(Innodb、WireTigger等),有的项目就是个玩具,只能演示原理做不到生产级别。这段时间可以说压力很大,印象最深的是当时去北京团建外出到景区,当天凌晨有世界杯亚洲区预选赛澳大利亚对中国,睡不着就一边看代码一边听比赛。
这时候偶然看到的一个精简的2.5版本的sqlite btree库,只有几千行代码,这个简单的实现打开了理解生产级B+Tree实现的大门。
在这之后就是“顺势”看了更高版本的sqlite btree实现,这些故事都写在了:《sqlite3.36版本 btree实现(零)- 起步及概述》。
仅就“生产级B+Tree”实现而言,sqlite的实现虽然还是有各种问题:比如效率不高等,但是都向我展现了总体的实现思路,后面再看这方面的实现也有了基础,比如今年研究了ARIES这篇论文,最近还在看BW-Tree的论文。
现在一年时间过去了,我又开始探索一个新的领域:Jepsen,想在项目里使用上这个项目来验证我们系统的实现,初期仍然跟以往自己独立研究一些问题一样遇到很多困难,因为太多新的知识点没有接触过:Clojure、模型检验(Model checking),等等。
回头来看,很多我后来看来获得技术上很大成长的时候,都是这种独立、深入研究某个领域之后带来的:身边没人请教、自己找答案、深入阅读文档、代码,等等。这样的经历多了以后,对这种压力似乎也感到适应,对压力之后的收益也清楚,甚至对解决这些难题有一些期望了。
#杂
去年12月因为新工作要使用Rust,于是买来两本Rust编程的书开始学习:
《Rust权威指南》和《Rust程序设计》。
我记得当时离职之后有个一周左右的空窗时间,就把这两本书看了个大概,直接到新工作开始干活,边干边加深对Rust的理解。
前两周整理出给多抓鱼的闲书,于是把第一本出掉留下了第二本,正好今天推上一位朋友晒图说在多抓鱼刚好收了我出的这本书。
我回想了一下就学习一门知识的步骤:
1. 找一两本这个领域的书籍来阅读。这个流程不能太长,尽量控制在一个月以内,也不要求面面俱到。这个阶段的目标是:对这门知识的大体结构有了了解,掌握最常用的用法。
2. 上手实践。遇到有难以理解掌握的知识就累积起来,找一个大块的时间做一个总结归纳。我的周刊里有写过Rust并发相关的一篇文章,就是这第二步的总结:《周刊(第19期):Rust并发安全相关的几个概念(上)》。
3. 了解这个知识领域常用的搜索工具,知道在哪里可以快速找到答案,以Rust而言最好的工具就是浏览器插件:Rust search extension。
4. 有了知识体系、实践、知道怎么搜索,这时候实际上书的重要性进一步下降了,因为很多时候我已经知道怎么查找答案了,这也就是为什么会把这本书二手出掉的原因之一,另一个原因是对比起《Rust程序设计》来说,权威指南有点浅了,所以我宁可先留着《Rust程序设计》。
当然回想起来,能快速使用Rust开始干活,也是拜其他工具所赐:
* Rust Analysis插件、Rust编译器都能给出更好的报错信息,“教”我如何写好Rust代码,出错的时候告诉我哪里错了该怎么改。
* 我换了性能更高的笔记本(M1、64G内存),这样编译速度更快,这些编译工具也就能更快的提示我了。
去年12月因为新工作要使用Rust,于是买来两本Rust编程的书开始学习:
《Rust权威指南》和《Rust程序设计》。
我记得当时离职之后有个一周左右的空窗时间,就把这两本书看了个大概,直接到新工作开始干活,边干边加深对Rust的理解。
前两周整理出给多抓鱼的闲书,于是把第一本出掉留下了第二本,正好今天推上一位朋友晒图说在多抓鱼刚好收了我出的这本书。
我回想了一下就学习一门知识的步骤:
1. 找一两本这个领域的书籍来阅读。这个流程不能太长,尽量控制在一个月以内,也不要求面面俱到。这个阶段的目标是:对这门知识的大体结构有了了解,掌握最常用的用法。
2. 上手实践。遇到有难以理解掌握的知识就累积起来,找一个大块的时间做一个总结归纳。我的周刊里有写过Rust并发相关的一篇文章,就是这第二步的总结:《周刊(第19期):Rust并发安全相关的几个概念(上)》。
3. 了解这个知识领域常用的搜索工具,知道在哪里可以快速找到答案,以Rust而言最好的工具就是浏览器插件:Rust search extension。
4. 有了知识体系、实践、知道怎么搜索,这时候实际上书的重要性进一步下降了,因为很多时候我已经知道怎么查找答案了,这也就是为什么会把这本书二手出掉的原因之一,另一个原因是对比起《Rust程序设计》来说,权威指南有点浅了,所以我宁可先留着《Rust程序设计》。
当然回想起来,能快速使用Rust开始干活,也是拜其他工具所赐:
* Rust Analysis插件、Rust编译器都能给出更好的报错信息,“教”我如何写好Rust代码,出错的时候告诉我哪里错了该怎么改。
* 我换了性能更高的笔记本(M1、64G内存),这样编译速度更快,这些编译工具也就能更快的提示我了。
#杂
Vscode换用neovim插件之后感觉比vim插件好用不少,顺便了解一下neovim的历史,我粗浅的理解:vim更像个人把持的项目,neovim是面向社区的,前者一来维护方式落后(还在用打patch方式),导致新功能进度缓慢;二来强依赖作者。
https://jdhao.github.io/2020/01/12/vim_nvim_history_development/
Vscode换用neovim插件之后感觉比vim插件好用不少,顺便了解一下neovim的历史,我粗浅的理解:vim更像个人把持的项目,neovim是面向社区的,前者一来维护方式落后(还在用打patch方式),导致新功能进度缓慢;二来强依赖作者。
https://jdhao.github.io/2020/01/12/vim_nvim_history_development/
#杂
由于最近换了一台Apple M1架构的笔记本,原先Intel架构上的应用全部需要重新安装,花了几天时间基本把常用的软件装齐全了,下面列表做一个简单的记录。
括号中的备注说明如下:
cli:命令行工具。
买断:一次性买断再无后续费用。
年会员:需要每年续费。
* 编辑器:sublime text 4、Beyond Compare(买断)、MacVim
* IDE:vs code
* IM:微信、电报、飞书、QQ
* 终端:wezterm、iTrem2
* 影音播放器:网易云音乐(年会员)、QQ影音
* 输入法:搜狗输入法
* 笔记类软件:typora(买断)、obsidian、flomo(年会员)
* 浏览器:chrome、firefox
* 翻译类软件:有道词典、deepL
* 代码管理工具:git(cli)、fork、Notifier for GitHub(chrome插件,用于接收Github通知)
* 画图工具:OmniGraffle(买断)
* 文档阅读:pdf expert(买断)、MarginNote3(买断)
* 下载工具:迅雷、Downie 4(买断)
* 密码管理:Enpass
* 解压缩工具:Unarchiver
* 截图工具:Snipaste
* 书签管理:Raindrop
* VPN类:Panda、ShadowSocks 客户端
* 图床:Picgo
* 系统监控类:Stats、Tencent Lemon
* 快速启动:Alfred 4
* 软件安装管理:brew、pip
* 其它:tokei(cli,代码统计工具)、wget(cli)、youtube-dl(cli)、hugo(cli,静态博客生成器)、cmake、clang、delta、lnav(cli,看日志工具)、Oh-My-Zsh
由于最近换了一台Apple M1架构的笔记本,原先Intel架构上的应用全部需要重新安装,花了几天时间基本把常用的软件装齐全了,下面列表做一个简单的记录。
括号中的备注说明如下:
cli:命令行工具。
买断:一次性买断再无后续费用。
年会员:需要每年续费。
* 编辑器:sublime text 4、Beyond Compare(买断)、MacVim
* IDE:vs code
* IM:微信、电报、飞书、QQ
* 终端:wezterm、iTrem2
* 影音播放器:网易云音乐(年会员)、QQ影音
* 输入法:搜狗输入法
* 笔记类软件:typora(买断)、obsidian、flomo(年会员)
* 浏览器:chrome、firefox
* 翻译类软件:有道词典、deepL
* 代码管理工具:git(cli)、fork、Notifier for GitHub(chrome插件,用于接收Github通知)
* 画图工具:OmniGraffle(买断)
* 文档阅读:pdf expert(买断)、MarginNote3(买断)
* 下载工具:迅雷、Downie 4(买断)
* 密码管理:Enpass
* 解压缩工具:Unarchiver
* 截图工具:Snipaste
* 书签管理:Raindrop
* VPN类:Panda、ShadowSocks 客户端
* 图床:Picgo
* 系统监控类:Stats、Tencent Lemon
* 快速启动:Alfred 4
* 软件安装管理:brew、pip
* 其它:tokei(cli,代码统计工具)、wget(cli)、youtube-dl(cli)、hugo(cli,静态博客生成器)、cmake、clang、delta、lnav(cli,看日志工具)、Oh-My-Zsh
#杂
最近在使用Rust编写gRPC服务,这篇教程讲解了这部分内容,包括一应一答模式、单向stream模式、双向stream模式都有对应的代码例子:
https://dev.to/anshulgoyal15/a-beginners-guide-to-grpc-with-rust-3c7o
最近在使用Rust编写gRPC服务,这篇教程讲解了这部分内容,包括一应一答模式、单向stream模式、双向stream模式都有对应的代码例子:
https://dev.to/anshulgoyal15/a-beginners-guide-to-grpc-with-rust-3c7o
#杂
一位在美国工作的工程师写的国外晋升的一些槽点,看起来和国内大公司也差不多,看下来还是坚定我的看法:我这样的人,可能并不适合在一个大企业里工作,以后有可能还是继续在一个小型的团队里工作,屁事会少一些。
尤其是这篇文章开头的第一句:“除了很多年前第一份工作非常懵懂地升过两级以外,我从来没有升过职。”,我心想这不就是我本人的写照吗。
https://yorotoo.medium.com/%E5%85%B3%E4%BA%8E%E5%8D%87%E8%81%8C-55dbe62ebaf
(如果上面的链接打开有问题,可以先到作者的medium:https://yorotoo.medium.com ,打开那篇叫《关于升职》的文章。)
另外文中还推荐了一个推特上的吐槽:
https://twitter.com/kantrn/status/1511791378497384454
一位在美国工作的工程师写的国外晋升的一些槽点,看起来和国内大公司也差不多,看下来还是坚定我的看法:我这样的人,可能并不适合在一个大企业里工作,以后有可能还是继续在一个小型的团队里工作,屁事会少一些。
尤其是这篇文章开头的第一句:“除了很多年前第一份工作非常懵懂地升过两级以外,我从来没有升过职。”,我心想这不就是我本人的写照吗。
https://yorotoo.medium.com/%E5%85%B3%E4%BA%8E%E5%8D%87%E8%81%8C-55dbe62ebaf
(如果上面的链接打开有问题,可以先到作者的medium:https://yorotoo.medium.com ,打开那篇叫《关于升职》的文章。)
另外文中还推荐了一个推特上的吐槽:
https://twitter.com/kantrn/status/1511791378497384454
#杂
《教育对人的改变有多大》,作者讲述了自己是怎么帮助弟弟从一个普通学生转变成一个优等生,以及变成优等生之后的弟弟生活发生的变化。
看了之后的感觉:有这样的哥哥真是幸运。
https://xiaohanyu.me/posts/2017-02-13-about-education/
其实已经是快五年前的文章了,突然想起来推荐一下。
《教育对人的改变有多大》,作者讲述了自己是怎么帮助弟弟从一个普通学生转变成一个优等生,以及变成优等生之后的弟弟生活发生的变化。
看了之后的感觉:有这样的哥哥真是幸运。
https://xiaohanyu.me/posts/2017-02-13-about-education/
其实已经是快五年前的文章了,突然想起来推荐一下。
#杂
昨天在推上看到一则讨论SRE的推,见:
https://twitter.com/forrest_zhao/status/1503540454289133571
于是想起来推特好友里有一位SRE(@laixintao),于是at了他,看到这则推之后,laixintao和另外的人也去做了几个回复:
https://twitter.com/9hills/status/1503576474908979203
https://twitter.com/laixintao/status/1503596051759915010
这几条时间线上的讨论,都可以展开看看。
顺便,还看到了laixintao博客上关于devops的两篇篇文章:
《Devops 中的 Overfitting》 https://www.kawabangga.com/posts/4145
《SRE 的工作介绍》https://www.kawabangga.com/posts/4481
我对SRE不了解,但是这几篇讨论和文章我看下来,第一反应是:所谓“大公司”光鲜亮丽的光环下面,比如对外公开、PR的技术文档,可能仅仅只是职级晋升的产物,而实则里面做相关事情的人,并不这么光鲜亮丽。
这有时候就是痛苦的来源:外人觉得大公司各种好,而自己身处其中,晋升、职级、工作内容、进步等等的都不理想。以上说的是我曾经的感受。
引用laixintao推特里的一段话描述这段经历:“阿里的高可用都是人肉盯盘,给故障定责,出问题开除、325堆出来的。”
所以,这样所谓“光鲜亮丽”的工作,对个体而言,意义在哪里,也许需要落到具体个人身上才能想清楚。于我而言,一份工作,如果技能没有能让我精进的空间,这种所谓的“稳定”是没有太大意义的。
昨天在推上看到一则讨论SRE的推,见:
https://twitter.com/forrest_zhao/status/1503540454289133571
于是想起来推特好友里有一位SRE(@laixintao),于是at了他,看到这则推之后,laixintao和另外的人也去做了几个回复:
https://twitter.com/9hills/status/1503576474908979203
https://twitter.com/laixintao/status/1503596051759915010
这几条时间线上的讨论,都可以展开看看。
顺便,还看到了laixintao博客上关于devops的两篇篇文章:
《Devops 中的 Overfitting》 https://www.kawabangga.com/posts/4145
《SRE 的工作介绍》https://www.kawabangga.com/posts/4481
我对SRE不了解,但是这几篇讨论和文章我看下来,第一反应是:所谓“大公司”光鲜亮丽的光环下面,比如对外公开、PR的技术文档,可能仅仅只是职级晋升的产物,而实则里面做相关事情的人,并不这么光鲜亮丽。
这有时候就是痛苦的来源:外人觉得大公司各种好,而自己身处其中,晋升、职级、工作内容、进步等等的都不理想。以上说的是我曾经的感受。
引用laixintao推特里的一段话描述这段经历:“阿里的高可用都是人肉盯盘,给故障定责,出问题开除、325堆出来的。”
所以,这样所谓“光鲜亮丽”的工作,对个体而言,意义在哪里,也许需要落到具体个人身上才能想清楚。于我而言,一份工作,如果技能没有能让我精进的空间,这种所谓的“稳定”是没有太大意义的。
#杂
有时候想看一个技术问题的时候,想起来自己以前写过文章,一打开发现写得认真图画得也很清楚,这时候真心是感谢自己以前这么认真细致。
比如最近要看leveldb,找到自己以前写过一篇:
https://codedump.info/post/20190215-leveldb/
不吹牛逼得说:图画得是真好!
技术文章就是应该多画图少贴代码,即便贴代码也最好是讲解重点的伪代码,因为如果贴的源代码那还是作者原先的思路,写给别人或者自己看的时候,就得用自己的语言组织翻译成有重点的伪代码。如果不是这样,我可能回头看还是看不懂我自己的文章都写了啥。
对于一段输出,如果想到以后需要消化这段输出的人是自己,往往在当时能写得更好一些。这里的“输出”,包括并且不限于:代码、代码注释、文章、代码提交注释,等等。
有时候想看一个技术问题的时候,想起来自己以前写过文章,一打开发现写得认真图画得也很清楚,这时候真心是感谢自己以前这么认真细致。
比如最近要看leveldb,找到自己以前写过一篇:
https://codedump.info/post/20190215-leveldb/
不吹牛逼得说:图画得是真好!
技术文章就是应该多画图少贴代码,即便贴代码也最好是讲解重点的伪代码,因为如果贴的源代码那还是作者原先的思路,写给别人或者自己看的时候,就得用自己的语言组织翻译成有重点的伪代码。如果不是这样,我可能回头看还是看不懂我自己的文章都写了啥。
对于一段输出,如果想到以后需要消化这段输出的人是自己,往往在当时能写得更好一些。这里的“输出”,包括并且不限于:代码、代码注释、文章、代码提交注释,等等。
#杂
Datafuse Labs 一岁了:
https://mp.weixin.qq.com/s/ypR9BsHox01XibTumwampg
一年时间产品能到现在这个成熟度,除了团队成员的技术实力,选择了Rust来开发也是重要原因。
对比C系语言,Rust是一门“心智负担”更少的语言,只要能编译过去,运行时的各种问题就少了很多,这样编码者可以更多考虑逻辑、业务的问题,而不用想着类似“子弹打出去了,还会不会绕回来误伤自己”这样的问题。
减少使用时的“心智负担”,这才是一个好工具应该做的。
Datafuse Labs 一岁了:
https://mp.weixin.qq.com/s/ypR9BsHox01XibTumwampg
一年时间产品能到现在这个成熟度,除了团队成员的技术实力,选择了Rust来开发也是重要原因。
对比C系语言,Rust是一门“心智负担”更少的语言,只要能编译过去,运行时的各种问题就少了很多,这样编码者可以更多考虑逻辑、业务的问题,而不用想着类似“子弹打出去了,还会不会绕回来误伤自己”这样的问题。
减少使用时的“心智负担”,这才是一个好工具应该做的。