每周见闻:有术无道,止于术

每周见闻:2025-04-13 - 2025-04-20

思考:有术无道,止于术

最近在看 B 站 Up 原子能的 MPGA(Make Programming Great Again)系列视频。Up 是位拥有丰富从业资历的前辈,视频内容通俗但有深度。如果你也有一定的行业经验,相信会有很多共鸣。

系列视频并非专注在技术细节,而是从更高的架构维度来分析问题。有种“传道”的感觉,这也让我想到了古语“有道无术,术尚可求也;有术无道,止于术”。

开发这个工作都是先学习一门语言,即“术”,然后在一次次的项目中逐渐悟出“道”。自从开始做架构方面的工作后,这种感受越发明显。

架构并不依赖于某个语言,而是资源的统筹、各方平衡以及解决问题的思路。如果不能跳出“术”的范畴,那就只能“止于术”了。

其他

1、万字拆解2025年达人营销的100个真相 – 人人都是产品经理[^1]

标签:Resource,思考

关于达人(网红)营销的分析。从数据大盘、平台、价值、广告、营销等方面进行分析,列举了一些数据和观点,有点小意思。

混迹掘金的小伙伴可能不会陌生,在编程这块也有不少“达人”。他们是否也是遵循着里面的一些规律呢?


工具

1、CodeImage - A tool to manage and beautify your code screenshots[^2]

标签:Tools

一个让代码美化工具,可以把代码转换为不同编辑器主题的图片,适合用来分享。

非 Markdown 格式的阅读器对于代码的渲染是非常可怕的,且不说语法着色,连基本的排版都是问题。但这类工具的出现就很好地解决了这个问题。适合在公众号、微博等平台发布。

2、CrazyMrYan/md-tauri: 轻量级桌面端 markdown 编辑器(支持Mac、Ubuntu、Windows),支持一键复制粘贴公众号,致力于打造快速高效的md编辑神器[^5]

标签:Tools

一个 Markdown 转公众号的桌面工具。

我也是使用 mdnice 做转换非常丝滑。但是 mdnice 有资源限制,打算尝试一下看看。


Coding

1、Mastering default values in JavaScript with the nullish coalescing (??) operator - Matt Smith[^3]

标签:JavaScript,Node.js

JavaScript 的非空运算符 ?? 的默认值。

与 || 最大的不同就是 ?? 只将 null 和 undefined 视为 false,而 || 则会把 falsey 的值(如 0, NaN, false, ‘’)都视为 false。因此 ?? 的情况用来做默认值会更安全,尤其是从数据库等地方取数据。

1
2
3
const value = 0;
const _default = 5;
console.log(value ?? _default); // Output: 0 (because 0 is not null or undefined)

2、Why Go’s Error Handling is Awesome[^4]

标签:Coding,思考,Go,JavaScript

一篇文章,解释了为什么 Go 的错误处理是优秀的。简单地来说就是把错误处理与正确情况放到同一层级,保证了错误可以被明确追踪。尽管这样会增加一些代码量,但能让整个逻辑链路变得清晰,也让错误更容易追踪。

JavaScript 的 try/catch 方式,虽然在 Happy case 的情况下写的很爽,但会隐藏错误反而会增加后期 debug 的负担。而如果每个方法都做错误处理,又会增加额外的代码量。 try/catch 由于有作用域,还可能额外引入 let 。

关于类似的错误处理,之前也翻译过文章:译:在 TypeScript 中像 Go 和 Rust 那样处理错误?没有 Try/Catch。也强烈推荐 B 站 Up 原子能的视频 什么是正确的错误处理方法【让编程再次伟大#21】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// In controllers/user.go
if err := db.CreateUser(user); err != nil {
return fmt.Errorf("could not create user: %w", err)
}

// In database/user.go
func (db *Database) CreateUser(user *User) error {
ok, err := db.DoesUserExist(user)
if err != nil {
return fmt.Errorf("could not check if user already exists in db: %w", err)
}
...
}

func (db *Database) DoesUserExist(user *User) error {
if err := db.Connected(); err != nil {
return fmt.Errorf("could not establish db connection: %w", err)
}
...
}

func (db *Database) Connected() error {
if !hasInternetConnection() {
return errors.New("no internet connection")
}
...
}

参考文章:


每周见闻:有术无道,止于术
https://konata9.github.io/weekly/2025/04/20/15-每周见闻-20250413_20250420/
作者
Konata
发布于
2025年4月20日
许可协议