# 科技爱好者周刊（第 222 期）：四十年编程感想

这里记录每周值得分享的科技内容，周五发布。

本杂志开源（GitHub: [ruanyf/weekly](https://github.com/ruanyf/weekly)），欢迎提交 issue，投稿或推荐科技内容。

周刊讨论区的帖子[《谁在招人？》](https://github.com/ruanyf/weekly/issues/2599)，提供大量程序员就业信息，欢迎访问或发布工作/实习岗位。

## 封面图

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090809.webp)

8月12日是今年最后一次“超级月亮”，摄影师在德国法兰克福拍到了一个超级大的月亮，在公寓楼之间出现。“超级月亮”指的是，满月正好发生在月球轨道的近地点。（[via](https://www.nature.com/immersive/d41586-022-02330-6/index.html)）

## 本周话题：四十年编程感想

上周，国外程序员论坛 Hacker News 有一篇热门文章[《四十年编程感想》](https://codefol.io/posts/the-forty-year-programmer/)。

作者说，他8岁学编程，今年46岁，再过两年，就是学习编程四十周年了。他写了一大堆自己的感想，都是肺腑之言。

我觉得说得挺好，发人深思。他的文章很长，我摘录一些重点内容，与大家分享。

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090607.webp)

**（1）编程是长期职业**

你开始步入这个行业时，应该意识到，程序员是一个长期职业，你可能会从事20年甚至更长。<u>你应该从长期角度看待编程。</u>

在长期中，技术来来去去，语言也来来去去，精通一种技术或语言，并不能保证你的长期职业发展。

你的目标不必局限在学习什么语言或框架，只要吃透基础知识，你可以学会任何你想要的东西。

**（2）多尝试不同的事情**

你的编程生涯很漫长，刚刚开始时，不要急于求成。<u>你只需要动手写代码就可以了</u>，任何代码都没有关系，写完一个软件，再写下一个。

写不同的软件，尝试不同的事情。你会发现，自己需要学习很多不同的东西。你按什么顺序学习它们并不是大问题。

不要变得僵化，抱住某个领域不放。几乎任何学科都可以教给你一些东西。如果你太僵化，抗拒学习其他领域的知识，那你就输了。

多学习一些困难的东西，容易发现自己的问题。

你可以给自己定一个目标，比如“<u>每周二做一件以前从没有做过的事情</u>”。

当然，你最终需要深入某个领域。李小龙说过：“我不怕练过一万种拳法的人。但是一种拳练了一万遍的人，我怕他。”

**（3）目标是变得更好**

不管使用什么技术，你的目标都应该是动手做出成果，让自己变得更好。

20年后，你跟别人说：“我是一个拥有20年经验的程序员。”别人就会问你：“这20年你做了什么？”

你的职业生涯最终就是回答这个问题：你问自己，这20年我做了什么。

理想的情况是，20年来，你真正擅长了某件事，而且这件事是社会需要的或者有利可图的，你以某种方式“让它变大”。这样你就会拥有一个成功的职业生涯。

**（4）继续工作**

尽管已经46岁，我仍然喜欢编写软件。虽然成为伟大程序员的概率已经为零了，但是在这个年龄，我依然可以完成一些工作。

编程既不是短跑，也不是马拉松，而是日记。在日复一日的累积当中，完成你的事业。

作为一名程序员的关键，就是“继续工作”，做出有价值的产品。

最早的程序员出现在1957年。经过这么多年，软件依然是一个年轻的行业，这意味着，我们仍然在初级阶段，这个世界还会有无限的有趣工作可以让你变得更好。

## 科技动态

1、[确保未拆封](https://dys2p.com/en/2021-12-tamper-evident-protection.html)

如何保证货物没有拆封过？

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072202.webp)

一位德国程序员提出一个简单的方法：你把东西放在密封袋里面，里面再装入彩色的豌豆或大米。

这些彩色颗粒会形成随机分布，一旦拆封就很难复原。

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072203.webp)

你在密封后，拍下照片发给收件人，对方收到货物后，再用软件甚至肉眼，检查一下彩色颗粒的分布是否跟图片一致，就可以确定有没有被拆开过。

2、[密码硬币](https://www.abc.net.au/news/2022-09-01/act-spy-agency-releases-coin-with-secret-code/101391964)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090102.webp)

澳大利亚发行了一枚五角硬币，纪念澳大利亚信号局成立75周年。

该局主要工作是维护和破解密码，所以硬币上印了四个密码，一个比一个难。负责人说，如果有人可以破解这四个密码，就可以申请到信号局工作。

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090517.webp)

结果，硬币发售当天，四个密码就全被破解了，具体的密码和解码详见[这篇文章](http://senwerks.com/hacktheplanet/Solving-the-Australian-Signals-Directorate-cryptography-challenge-coin.html)。

3、[最小的游戏机](https://www.tindie.com/products/ampersand/asterisk/)

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072306.webp)

一位英国程序员自己动手，制作了一个世界最小的俄罗斯方块游戏机。它的大小跟大拇指差不多，就是一块芯片加上四个按钮。

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072307.webp)

芯片的正面是0.91吋的液晶屏幕，背面是一个纽扣电池，所有代码都是开源的。他制作好的成品在网上出售，价格20美元。

4、[无人机公路](https://www.economist.com/britain/2022/07/21/a-superhighway-for-drones-to-fly-between-british-cities)

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072901.webp)

英国政府决定大力发展无人机送货，在英格兰主要城市之间建立了一条265公里长的“无人机高速公路”，这条路专门供无人机飞行。

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072902.webp)

无人机登记后，就可以上路，一路上都要跟地面传感器报告方位，并接受指挥，防止碰撞。

英国政府估计，到2030年这条路同时将有90万架无人机在飞行。这种专用道路以后可能越来越多，只供无人车和无人机使用，地面是无人车，天上是无人机。

## 文章

1、[知乎水印事件](https://mp.weixin.qq.com/s/EykLVZA6MQ3kgKvZFKfR9g)（中文）

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090705.webp)

网友发现，知乎网页暗藏水印，用来发现是谁截图。这个事件曝光以后，知乎又把这个功能下线了。

2、[太阳能无人机有什么用？](https://mil.huanqiu.com/article/49XMBNllT4H)（中文）

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090706.webp)

本月，中国航空工业集团研制的“启明星50”大型太阳能无人机首飞成功。本文介绍这种完全依靠太阳能供电的无人机有什么用。

3、[我国两种长臂猿野外灭绝](https://news.sciencenet.cn/htmlnews/2022/9/485754.shtm)（中文）

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090704.webp)

过去几十年，中国分布的白掌长臂猿、北白颊长臂猿在野外均没有被监测到，可以认为已经野外灭绝了。

4、[CSS Grid 在 Figma 的应用](https://ishadeed.com/article/figma-css/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072401.webp)

Figma 操作面板使用 CSS 网格来实现，作者详细介绍它的实现，网格原来还能这样用。

5、[99美元的 Chromebook 是什么体验？](https://threadreaderapp.com/thread/1550598445248811008.html)（英文）

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072301.webp)

作者为了测试 Flutter 应用在低端设备的表现，花99美元买了一台全新的联想 Chromebook 笔记本。他原本预期会很糟糕，结果完全出乎他的意料。

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072302.webp)

6、[软件工程师如何成为全职“创作者”？](https://blog.pragmaticengineer.com/how-to-become-a-full-time-creator/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072706.webp)

作者是一个软件工程师，从 Uber 辞职以后，全职依靠创作（写文章、卖课程、做视频等等）为生。他写了对这种商业模式的思考。

7、[美国需要大量机器人](https://noahpinion.substack.com/p/american-workers-need-lots-and-lots)（英文）

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090514.webp)

一个美国人给美国政府写的政策建议。这篇文章有价值的地方是提出了一个观点：机器人越多，创造的就业岗位越多。作者认为，传统看法是错的，机器人实际上有助于创造人类就业。

8、[Python 星号`*`的用途总结](https://bas.codes/posts/python-asterisks)（英文）

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022060303.webp)

一篇面向 Python 初学者的科普文章，介绍星号`*`在这门语言的各种含义。

## 工具

1、[lldap](https://github.com/nitnelave/lldap)

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022071108.webp)

一个轻量级的 LDAP（一种用户认证协议）开源实现，简化了使用方法。它自带前端，可以跟很多后端应用结合，为这些应用提供身份验证服务。

2、[NESBox](https://nesbox.xianqiao.wang/)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090801.webp)

一个开源的游戏平台，支持多人在线，一起玩 NES（俗称 FC 红白机） 游戏，有 web 版和桌面版。目前已经有很多游戏，预计有 1000+ 游戏，参考这篇[介绍文章](https://juejin.cn/post/7136883410819088397)。（[@mantou132](https://github.com/ruanyf/weekly/issues/2600) 投稿）

3、[JuiceFS](https://github.com/juicedata/juicefs)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090803.webp)

一个面向云原生设计的文件系统，可以挂载各种云存储，当作本地磁盘使用。（[@DASWU](https://github.com/ruanyf/weekly/issues/2601) 投稿）

4、[Urara](https://urara-docs.netlify.app/)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090804.webp)

一个静态博客生成器，基于 SvelteKit。（[@kwaa](https://github.com/ruanyf/weekly/issues/2605) 投稿）

5、[Cleanup Photos](https://cleanupphotos.com/)

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022071405.webp)

这个网页工具可以清除照片上不要的物体。用户上传照片以后，框选不需要的物体，系统会自动清除这些物体，用背景填充照片。

6、[OurBoard](https://www.ourboard.io/)

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022071425.webp)

一个在线白板，你创建一个房间，把网址分享给其他人，大家就可以在一块网页白板上共同涂写。

7、[gh-dash](https://github.com/dlvhdr/gh-dash)

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022040201.webp)

GitHub 官方命令行客户端`gh`的插件，可以在命令行以面板形式，显示仓库的 PR 和 issue。

8、[Rectangles](https://rectangles.app/)

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022040204.webp)

这个网页上，一个方块代表10分钟，一天24小时就是144个方块。可以一眼看到，当天还有多少个方块空着。

9、[Nginx Proxy Manager](https://nginxproxymanager.com/)

![](https://cdn.beekka.com/blogimg/asset/202205/bg2022052106.webp)

Nginx 经常用作反向代理，这个工具为反向代理提供一个 Web 管理界面。

## 扑克牌扫码器

最近，有人将条形码与扑克牌结合在一起。

他在每张牌的牌边印上了条形码，旁人根本意识不到，但是使用扫码器可以分辨是什么牌。

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063018.webp)

为了进一步增加隐蔽性，他还用特殊墨水，将条形码隐藏起来，人眼看不见，只有在红外线下才会显示。

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063019.webp)

他买了一台带有摄像头的树莓派，在摄影头上装了红外滤光片，将其改装为条码扫描器。

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063020.webp)

最后，他写了一个 iOS 客户端，将树莓派的扫描结果显示出来，每张牌是什么。下面就是实际的效果。

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063021.webp)

墨水也可以改成紫外线荧光墨水，在紫外线下会发光，这会比红外线更容易识别。

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063022.webp)

这个项目的完整代码，公布在 [GitHub](https://github.com/nettlep/magic)。

## 资源

1、[乔布斯档案](https://stevejobsarchive.com/)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090807.webp)

乔布斯家人建立的网站，用来为后人保存史蒂夫·乔布斯的各种材料。目前刚刚建立，内容还比较少。

2、[从零开始的神经网络](https://aegeorge42.github.io/)（Neural Networks from Scratch）

![](https://cdn.beekka.com/blogimg/asset/202206/bg2022063025.webp)

一个英文的图文互动教程，使用简单的语言和图片，解释什么是神经网络。

3、[随机的谷歌街景](https://randomstreetview.com/)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090113.webp)

这个网站随机展示谷歌街景的照片，世界各地都有。（[@shenzhw](https://github.com/ruanyf/weekly/issues/2604) 投稿）

4、[中华遗嘱网](https://www.will.org.cn/)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090515.webp)

这个网站提供遗嘱的知识和服务，属于半官方组织，收费不低，但是比自己去找专业服务还是方便和便宜一点。

## 图片

1、[猴子洗红薯](https://link.springer.com/article/10.1007/s10329-015-0492-0)

日本宫崎县的猴子，有一种奇特的行为，会在海里洗红薯，洗了以后再吃。

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022042702.webp)

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022042703.webp)

传说是当地人冬天生火，猴子们也喜欢待在火堆旁取暖。有人用火烤红薯，顺手就给了猴子一个。猴子们拿到递给它们的热乎乎的红薯，马上就要吃，但是觉得很烫。

有一个猴子开始在水中冷却红薯。这种习惯逐渐蔓延到整个猴群，几乎所有猴子都学会了这种行为。

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022042704.webp)

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022042705.webp)

但是，科学家认为，这个传说是无稽之谈。猴子在海水中红薯，只是为了增加一点盐分。

![](https://cdn.beekka.com/blogimg/asset/220204/bg2022042701.webp)

2、[逃出埃及的车流](https://www.thestar.com/entertainment/2022/09/07/burning-man-festival-goers-stuck-in-traffic-jam-for-over-9-hours-leaving-nevada-desert.html)

美国内华达沙漠每年举办一个艺术节，叫做“燃烧的人”（Burning Man）。

今年的活动本周结束，上万辆车从沙漠里面的举办地离开，驶向最近的一个高速公路路口。结果造成了大堵车，整整堵了10个小时。

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090808.webp)

有人从空中拍下了这个罕见的“沙漠大堵车”，戏称就像传说中的“逃出埃及”。

## 文摘

1、 [Foo 大师的故事](http://www.catb.org/~esr/writings/unix-koans/recruiter.html)

Foo 大师遇到了一家大公司的面试官。

面试官说：“面试时，我问很多 Unix 程序员，他们在新兴的编程语言方面有多少年经验时，他们都会皱眉或生气。这是为什么？”

Foo 大师站了起来，开始在办公室里不断踱步。

面试官不解地问道：“你在做什么？”

“我正在学走路”，Foo 大师回答。

“你不是自己走进办公室的吗，”面试官惊呼道，“而且也没有摔倒，你明明已经知道如何走路了。”

“是的，但是我是第一次来这层楼。” Foo 大师回答。

听了这话，面试官恍然大悟。

## 言论

1、

一位护士问临终的病人，他们有什么遗憾。她后来总结出了5个最常见的回答。

不要忽视梦想。不要工作过久。说出想法。交朋友。要开心。

-- [Paul Graham](http://www.paulgraham.com/todo.html)

![](https://cdn.beekka.com/blogimg/asset/202209/bg2022090805.webp)

2、

一位医生曾经告诉我，医学院没教的一件事情是，医学和当医生是有区别的。

医学是一门生物科学，而当医生是一种社会技能，涉及到管理期望、了解医保制度、人际关系、有效沟通等。

-- [《医学和当医生的区别》](http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2022-07.html#e2022-07-03T09_00_55.htm)

3、

医院最喜欢的病人是慢性病患者，他们依赖医院，但是又不会很快病死而不能支付账单。

美国的医疗体系依靠患者赚钱，因此预防疾病并不积极，只有2.9%的医疗支出用于预防医学。这造成的结果就是，病人的寿命虽然长，但是健康的时间并不长。

-- [David Perell](https://ckarchive.com/b/wvu2hgh557kqd)

4、

经验就是每个人为自己犯的错误起的名字。（Experience is the name everyone gives to their mistakes.）

-- 奥斯卡·王尔德

5、

有一个编程原则叫做 DRY（Don't repeat yourself，不要重复自己），指的是尽量不要有重复的代码。

更好的名字应该是 SPOT（Single Point Of Truth，单点事实）。代码需要修改时，你只需要在一个地方修改，而不必改动多个地方。

-- [Hacker News 网友](https://news.ycombinator.com/item?id=32012566)

## 历史上的本周

2021年（第 174 期）：[全能程序员 vs 特长程序员](https://www.ruanyifeng.com/blog/2021/09/weekly-issue-174.html)

2020年（第 123 期）：[互联网公司与湘军的军制](https://www.ruanyifeng.com/blog/2020/09/weekly-issue-123.html)

2019年（第 72 期）：[当代人不再有手稿](https://www.ruanyifeng.com/blog/2019/09/weekly-issue-72.html)

2018年（第 21 期）：[人生的水平运动和垂直运动](https://www.ruanyifeng.com/blog/2018/09/weekly-issue-21.html)

## 鸣谢

国产软件 [FlowUs](https://flowus.cn?promotionChannel=GW_RYF_01) 提供个人专栏服务（查看[周刊专栏](https://ruanyf-weekly.flowus.cn/?code=FLOWUS&promotionChannel=WX_RYF_00)），集成了“文档+表格+网盘”，适合知识库、数据管理、文件存储多种用途。

![](https://cdn.beekka.com/blogimg/asset/202207/bg2022072108.webp)

（完）

