I was chatting with a Twitter friend the other day and he asked me how I got into software, specifically what was the first program I wrote. I realized I’ve never shared the story in written form, though I did discuss it on a podcast, so I wanted to write it down here.
有一天，我和一个 Twitter 好友聊天，他问我是如何进入软件行业的？特别是我写的第一个程序是什么？我突然意识到尽管我曾经在播客上讨论过这个故事，但似乎从来没有以书面形式分享过，所以我想把它写在这里。
The story begins in an office, on the job. My parents ran an insurance brokerage. I worked there as a child. There were many tasks:
- filing paper documents（填写文件）
- answering the phone（接听电话）
- copying correspondence（复印信件）
- folding letters and putting them into envelopes（把信件折叠起来放进信封里）
- and more.（以及更多）
One task that I found particularly odious was the renewal letter process.
Every month, the brokerage was required by law to send a letter to clients whose insurance policy was expiring in that month. We had to provide information about both the policy and us, so clients could contact us to change or cancel their policy.
When we first did the renewals, for every client we took a template letter and made a copy in WordPerfect, our word processing program. We updated the letter with the required information such as the policy number and client address. We found that client specific information by looking through a filing cabinet for the client’s folder. After proofreading, we’d print the letter, address an envelope, fold and insert it, and finally mail it off.
这些信函和保单有电子模板，但是我们需要在文档编辑软件 WordPerfect 里面打开这个模板，手工输入每个客户的个人信息和保单编号。然后需要在文件柜中找到该客户的文件夹，查看具体信息并一一校对，之后再把信件打印出来，并在信封上写上地址，将信件折叠放入，最后邮寄出去。
We definitely batched up some processes, such as folding and addressing. I remember having a sponge that you could rub the stamps with in order to spare your tongue (this was before sticker stamps).
But the letter creation was a time consuming process, because you went back and forth from the filing cabinet and the computer typing policy numbers and addresses.
I had been playing with WordPerfect macros at home, and realized that this was a mail merge problem. I looked around and found a database called Notebook that we could use. Notebook let me record the policy number, expiration date, and address of a client. I could pull the clients who had policies expiring in the upcoming month, merge their data with the template and generate all the letters. No more miserable copying and pasting.
后来，我看到 WordPerfect 文档编辑软件有宏功能，意识到我们面临的麻烦是一个邮件合并问题。并且我还发现了一个叫做 Notebook 的数据库，我们可以将保单号、到期日期和客户地址等信息填进该数据库。这样我就可以很方便地找出哪些客户保单即将到期，提前一个月将他们的数据与文档模板合并，生成所有信件。不用再痛苦地复制和粘贴了。
Once I had a proof of concept showing this worked for one to two clients, my parents agreed that this was a good idea and that we should do this going forward. However, rather than do a massive data entry project, we added policies one month at a time. There was one more year of looking up the values in the file folders, adding them to the Notebook database, and then running the mail merge. But after that year, printing out these renewal letters became a 10 minute task rather than a multi-day ordeal.
一旦我的概念证明表明这适用于一到两个客户，我的父母就同意这是一个好主意，我们应该继续这样做。不过，我们并没有集中进行大量数据输入，而是采用一个月添加一次的策略。因此，我们又花了一年时间在档案柜中查找客户资料，将它们添加到 Notebook 数据库，然后运行邮件合并。但在那一年之后，打印这些续签信件从每月好几天的烦人工作，变成了一个自动执行10分钟的任务。
There was still tedious work to be done. We had to keep the Notebook database in sync with the file folders as policies changed over the year. We still had to address, stuff and stamp the envelopes.
当然，繁琐的工作还是免不了。我们必须使 Notebook 数据库与客户信息保持同步，还要人工往信封塞打印件和盖章等等。
But with a database, the document template and mail merge, we’d eliminated a painful task.
That was the first time I saw the power of software to reduce human misery. Yes, on a small scale, but still!
This theme, “reduce human misery” is the core of the value of software for me. I aim at that goal in the work I have done over the past decades and the work I do today.