混沌周刊 #2 | 想到就要去做

Hello. 又到了新一周的……周二。这一周以来好像没有什么特别要事,加之本人溜出去度假了,所以篇幅会小一些。Anyway,六一节快乐,祝大家在技术上永葆孩童般的好奇心 🙂

💡 想到就马上行动

最近有空的时候在读《刻意练习》这本书。里面的核心内容其实不用读也能大概清楚——要提升自己的「技能」,需要持续地、有反馈地、针对性地练习改进,否则就是原地踏步。虽然人们常常把「刻意练习」的概念和「一万小时定律」放在一起讲,但此书对这个奇特的时间量给出了批评。作为普通人,如果想要业余锻炼某些技能,几百个小时的练习足以让你变得非常不错,成为众人称赞的对象。

另一个值得强调的问题是:我们太过重视「知识」,而忽视了工作和生活中更需要的是「技能」。「绝知此事要躬行」,很少有事情是看一遍书就自然明白的——连解数学题都不是这样!编程、做手术、开出租车,都在要求只有通过练习才能达成的「手艺」。

所以像设计,或者说做产品这类事情,其实也不是靠无数次的「灵光一闪」,离不开的是一轮又一轮的反思、总结和批评。而且灵感不会自己来。你有没有试过犯困的时候去健身?结束后反而更精神了。我们今日的生活中,物品大部分来自人造。面对它们,多去想想 Why,世界会不一样。我时常在实践这件事。在我的资料库里放着大大小小很多idea,一些可能不现实,一些好像没什么用。但当我最近试着去实现时,悲剧地发现——已经有人做过了。一个例子是goodfirstissue.dev,帮助找到开源项目的入门issue的网站。虽然你我不必那么笃信不重造轮子的箴言,但出名毕竟该趁早,不是么?

所以,干活也要趁早。参考扎克伯格的故事。这个世界不属于拖延症。

🚛 重视可移植性

最近币圈整出了一个乌龙:因为Rust标准库里的binary_search函数更新了,导致数组里有相同元素时,函数的行为有了改变。(Rust中的二分查找会返回那个元素而不是像C++一样返回bool)因此使用不同Rust版本构建出的executor,运行的时候会产生共识问题。这显然是错误依赖了那些不可移植的特性带来的后果。

与此同时,看到有篇文章《Portability is reliability》,观点很有意思:即使你不需要跨硬件平台/操作系统/编译器(其实没人能百分百确定的是吧?),让代码可移植也很重要,至少可以帮你发现更多问题。另外,这种要求本身就可以要求你提升代码质量,改掉那些只在「某些情况下」不出错的代码。

不要用大写的C作为C++文件后缀名。相信很多人可能都不知道大写的C表示的是C++而不是C。(另外支持的几个后缀是cpp、cxx和cc)一个原因是文中所说的微软编译器对其支持不好,另一点则是因为在不区分大小写的文件系统(比如macOS默认)里你会彻底抓瞎。我自己就遇见过这个问题。Again,这也是个好例子。

🧩 好玩的项目

  • 在前端实现的类iOS AutoLayout布局工具。可以自己实现一个,来深入理解网页的布局机制。不过,真的会有人实际使用吗…?
  • 一套用JSON表达程序逻辑的规范。这不是闲着没事,很多项目都有着类似需求(比如让用户自定义数据统计的规则),而直接把脚本语言代码放数据库然后执行是很危险的事情。如果有一套约定和配套的开源库,可以降低开发这类应用时的工作量。
  • Android上的JetPack Compose,在JetBrians加持下,现在除了Desktop之外,还可以给Web写界面了!它会和Flutter竞争吗?(不过JetBrains家的IDE好像也没有很流畅😯)
  • shelljs,用NodeJS实现的UNIX基本命令。已经有许多努力想要改进传统的UNIX工具并且将它们结构化了。
  • New-line delimited JSON,一个简单的规范,利用换行作为分隔符来传送多个JSON。比较有意思的是里面引用的一个RFC – RFC2119,里面约定了技术文档中Must、May等词语的用法。
  • 教你写一个正则表达式引擎。推荐有时间的朋友都这么写一回,可以明显提升对正则的理解。
  • CotEditor,Swift写的macOS文本编辑器,启动速度很快,可以作为TextMate的替代品了,在GitHub开源。顺便提,TextMate 2其实也是开源的

📰 一些文章

  • An Intuition for Lisp Syntax》,以JavaScript为例介绍为什么Lisp的语法是这种「奇怪」的样子。数据和代码本就殊途同归。
  • Ten rules for negotiating a job offer》,职场如战场,第一战对手就是HR。如何让自己占据最大的优势呢?作者总结了几点,可做个不错参考:永远要有意识来为自己赢得更多,既然是在市场上出卖劳动力换取报酬,就不必想着「够了」;避免口头信息,要求书面内容;尽量少向对方透露信息;保持积极态度;也不要让自己作为做决定的那方;……
  • 如果你有一台搭载M1芯片的Mac电脑,而又想在不安装Rosetta 2的前提下玩Minecraft的话,参考这篇文章。做法也很简单,用适配了M1的JRE运行第三方启动器生成启动脚本,然后把lwjgl替换成第三针对M1构建的版本即可。

好吧,本周就到这里。WWDC见!


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注