最近我决定参与一些开源项目,因为高中时折腾过VPS,所以正好认识Openlist。综合对比其它项目后我便决定将它作为我的第一个开源贡献项目。

不过本文的主题不是开源,而是关于编程语言学习。 于是为了看懂Openlist项目,我有(bei)幸(po)开始学习Go语言。

当然,我不可能先找一本几百页的书,然后从HelloWorld,if-else,变量这种所有语言都差不多的地方学——我需要高效的方式来达到足够用的水平。

不过也不能直接问AI呀——AI给的内容往往很细碎,我想要的是体系化的知识。也因此,我开始寻找一个适合有编程经验的人,帮助他们快速入门某种语言的在线资源。

也因此,我遇到了Learn X in Y Minutes项目。该项目非常符合快速入门某种语言。

当然,它不可能让你成为xx语言专家,却足够让你清除这个语言是做什么的,有哪些特性,基本骨架给你摸个八九不离十。

光说还是有些抽象,让我们看一个针对Go语言的例子:

func learnFunctionFactory() {
    // 空行分割的两个写法是相同的,不过第二个写法比较实用
    fmt.Println(sentenceFactory("原谅")("当然选择", "她!"))

    d := sentenceFactory("原谅")
    fmt.Println(d("当然选择", "她!"))
    fmt.Println(d("你怎么可以", "她?"))
}

// Decorator在一些语言中很常见,在go语言中,
// 接受参数作为其定义的一部分的函数是修饰符的替代品
func sentenceFactory(mystring string) func(before, after string) string {
    return func(before, after string) string {
        return fmt.Sprintf("%s %s %s", before, mystring, after) // new string
    }
}

是的这就是x-in-y网站讲述Decorator的用法的所有内容了。我们很容易看出其优点:

  • 简洁明了
  • 对于已经了解高阶函数、闭包等知识的人,这种写法展示了Go语言也支持这些特性;对于不了解的人,也没有过早引入这些复杂概念。
  • 以代码为主导而不是用自然语言描述一堆不准确、模糊的描述
  • 将成体系的相似内容汇编到一起

作为对比,如果你问AI的话,就会输出下面一大堆。

llm-slop.png

我相信很多人会喜欢上面那种。

Btw,这个项目还有Github仓库,大家有空可以去捧场。