ChatGPT Prompt Engineering – 1. 基本原则 (1)

Andrew Ng 最近在他的 deeplearning.ai 上发布了 ChatGPT Prompt Engineering for Developers 教程。这个教程大概一个半小时左右,属于 how to 而非 what is,虽然标题带有 for Developers,但不需要编程基础也可以看懂。

这篇文章是我对 Andrew 教程的 notes + 简短总结。并非原创,只是为了自己学习+记忆方便。文章中的输入/输出使用 ChatGPT 的免费版本。

看完教程的一些感想:

  1. Prompt Engineering,与其说它是 engineering 不如应该说它是 communication,使用与人对话的方式,而非机械思维,可以得到更合理的答案
  2. 编程思维可以有效改善 Prompt Engineering:比如使用分隔符,结构化输出,条件验证这些技巧
  3. Somehow ChatGPT 看似具备了抽象,比喻,概括等我们之前认为只有人类才具备的语言能力,利用这些能力,我们可以大大提升我们的信息获取/生成效率
  4. ChatGPT 将会取代重复性较高,创意性较低的知识型工作,比如文员,翻译,插画师等等
  5. 可以用 ChatGPT 进行 task-based 编程,但我不认为可以用 ChatGPT 开发较复杂的软件(我很难想象如何用 ChatGPT 进行功能迭代)
  6. ChatGPT 是乘法,我的理解是:a (你的能力) × b(你使用 ChatGPT 的能力) × c(ChatGPT 模型的能力)
  7. 考虑到各大公司对 xGPT 的投入力度,c 会随着时间大幅增长,所以 xGPT 可能是自计算机出现以来,人类最强的 knowledge leverage
  8. b 需要 programming thinking, creative thinking, 以及 lateral thinking, which might be a good thing or bad thing for programmers
  9. a 取决与自己的 knowns 和 known unknowns,所以我们可能需要努力减少自己的 unknown unknowns,而非做一个专才

不废话了,下面是 notes,夹杂一些自己的感想:

基本原则

原则 1:使用明确的指令

技巧 1:使用分隔符

使用不常见的字符组合 ~~~ 或 ”’ 作为分隔符,用来提供明确的输入。

输入:

Summarize the text delimited by triple backticks into a single sentence.

```
You should express what you want a model to do by providing instructions that are as clear and specific as you can possibly make them.  This will guide the model towards the desired output, and reduce the chances of receiving irrelevant or incorrect responses. Don't confuse writing a clear prompt with writing a short prompt. In many cases, longer prompts provide more clarity and context for the model, which can lead to more detailed and relevant outputs.
```

输出:

Providing clear and specific instructions to a model will guide it towards the desired output and reduce the chances of receiving irrelevant or incorrect responses, and longer prompts can provide more clarity and context for the model, leading to more detailed and relevant outputs.
继续阅读ChatGPT Prompt Engineering – 1. 基本原则 (1)

程序员必读书单 1.0

本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。

前言

Reading makes a full man; conference a ready man; and writing an exact man.

Francis Bacon

优秀的程序员应该具备两方面能力:

  • 良好的 程序设计 能力:
    • 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列);
    • 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络);
    • 熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python);
  • 专业的 软件开发 素养:
    • 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;
    • 把握客户需求,按时交付客户所需要的软件产品;
    • 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。

和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。

在过去几年的学习和工作中,我阅读了大量的程序设计/软件开发书籍。随着阅读量的增长,我意识到:

  • 经典书籍需要不断被重读——每一次重读都会有新的体会;
  • 书籍并非读的越多越好——大多数书籍只是经典书籍中的概念延伸(有时甚至是照搬);

意识到这两点之后,我开始思考一个很 功利 的问题:如何从尽可能少的书中,获取尽可能多的关键知识?换句话说:

  • 优秀的程序员应该掌握哪些关键概念?
  • 哪些书籍来可以帮助程序员掌握这些关键概念?

这即是这篇文章的出发点——我试图通过 程序员必读书单 这篇文章来回答上面两个问题。

标准

进入必读书单之前,我先介绍下书单里的书籍选择标准和领域选择标准。

继续阅读程序员必读书单 1.0