匮乏即是富足,自律产生喜悦_当惊喜与喜悦分开时
匱乏即是富足,自律產生喜悅
This is Part 1 of the CookieBot Case Studies, a series on reducing user confusion in conversational systems.
這是 CookieBot案例研究的 第1部分, CookieBot案例研究 是關于減少對話系統(tǒng)中的用戶混亂的系列文章。
Authors: Gwen Christian and Christy Doran
作者: Gwen Christian 和 Christy Doran
At last, your backordered sourdough starter has arrived in the mail, and you’re ready to start baking. You’re just a few hours (… you think?) away from your very first loaf of sourdough! Since you’re feeling pretty late to the game, instead of asking a friend, you turn to your trusty voice assistant, and download BakingBot.
最后,您的缺貨酵母發(fā)酵劑已經到達郵件中,您就可以開始烘烤了。 您距離第一個面包面團僅幾小時(...您認為嗎?)! 由于您感覺游戲遲到了,因此您無需求助朋友,而轉向可信賴的語音助手,然后下載BakingBot。
A conversation between BakingBot and a user, where BakingBot doesn’t know how to make bread.BakingBot與用戶之間的對話,BakingBot不知道如何制作面包。You’re all ready to leave a bad review — what kind of baking bot doesn’t know about bread? And then you see in the description “We have thousands of cookie recipes for every occasion.” It turns out BakingBot is a cookie specialist! So how did we get into this mess?
大家都準備好發(fā)表不好的評論-哪種烘焙機器人不了解面包? 然后,您會在描述中看到“我們每種情況都有數千種Cookie食譜”。 事實證明,BakingBot是Cookie專家! 那么,我們如何陷入困境呢?
這幅畫怎么了? (What’s wrong with this picture?)
One of the keys to creating satisfying conversational user experiences is making sure that your users have an accurate model of what your system can do. The sort of inconsistency illustrated above confuses users, who will reasonably assume that the opening “I can teach you how to bake” means the bot will be able to answer questions about all manner of baked goods, because ‘baked goods’ are a clearly defined, coherent category. Similarly for other natural domains — if the system knows about Thomas Jefferson, it should know about all presidents; if it can do conversions between weights, it should also do conversions for lengths and volumes.
創(chuàng)建令人滿意的會話用戶體驗的關鍵之一是確保您的用戶具有系統(tǒng)可以做什么的準確模型。 上面說明的這種不一致會使用戶感到困惑,他們會合理地假設開頭的“我可以教你如何烘焙”一詞意味著該機器人將能夠回答有關各種烘焙產品的問題,因為“烘焙產品”的定義很明確,連貫的類別。 同樣,對于其他自然領域,如果系統(tǒng)了解托馬斯·杰斐遜,則應該了解所有總統(tǒng)。 如果它可以在重量之間進行轉換,則還應該進行長度和體積的轉換。
This consistency is particularly critical in task-based systems: if my banking system can tell me the balance of my checking account, but not the balance of my bank credit card, I won’t just be confused — I’ll be less inclined to use it in the future, because my experience was frustrating, and its limits aren’t clear. It can also be downright embarrassing, like the customer care agent we built that handled complaints but not compliments and responded to a compliment with “I’m sorry you had a bad experience…”
這種一致性在基于任務的系統(tǒng)中尤為重要:如果我的銀行系統(tǒng)可以告訴我支票帳戶的余額,但不能告訴我銀行信用卡的余額,那么我不僅會感到困惑-我會更不會將來使用它,因為我的經歷令人沮喪,并且它的局限性尚不清楚。 這也可能是完全令人尷尬的事情,例如我們建立的客戶服務代理處理投訴但沒有恭維,并以“對不起,您的經歷很糟糕……”來回應贊揚。
Understanding system scope cuts both ways:
了解系統(tǒng)范圍有兩種方法:
- If users have a mental model that is too restricted, they’ll miss out on some of your great functionality. 如果用戶的思維模式過于受限,他們將錯過您的某些出色功能。
- If users have a mental model that is too broad, they’ll get frustrated when they try things that don’t work. 如果用戶的思維模式過于廣泛,那么他們在嘗試無法解決的問題時會感到沮喪。
Our end goal is to make sure your users have a clear idea of what to expect from your bot. Think of it like this: when you overpromise, it feels like running into invisible walls. There are a lot of ways to keep from doing that, from putting stickers on your windows to deter birds, to using frosted glass, to actually building opaque walls. At the end of the day, the easier it is for your users not to run into them, the better.
我們的最終目標是確保您的用戶對機器人的期望有清晰的認識。 這樣想:當您過度承諾時,感覺就像碰到了看不見的墻。 有很多方法可以阻止這種情況發(fā)生,從在窗戶上貼貼紙以阻止鳥類進入,到使用磨砂玻璃,再到實際建造不透明的墻壁。 歸根結底,您的用戶越容易遇到他們,就越好。
An unpleasant surprise一個不愉快的驚喜建立共享域模型 (Building a shared domain model)
Let’s start by looking at several tools we can use to define our domain model, and locate coverage gaps.
讓我們先來看幾個可用來定義領域模型并定位覆蓋范圍差距的工具。
定義機器人的范圍 (Defining the scope of your bot)
From the start of the design process, think carefully about the (usually limited) number of things you are designing the bot to do and what other things the average user will think of as “the same”. Once you have identified the key features of your system, consider the interaction from the user’s perspective:
從設計過程開始,請仔細考慮正在設計機器人的事情(通常是有限的)以及普通用戶認為“相同”的其他事情。 確定系統(tǒng)的關鍵功能后,請從用戶角度考慮交互:
A Venn diagram illustrating the spaces CookieBot and BakingBot occupy within the natural domains “Recipes”, “How to Cook” and “Baked Goods”.維恩圖說明了CookieBot和BakingBot在自然區(qū)域“食譜”,“如何烹飪”和“烘焙食品”中占據的空間。- Imagine you were talking to a person that does whatever your bot does. What other things might you ask them? 想象一下,您正在與一個執(zhí)行您的機器人行為的人交談。 您還能問他們什么?
- What motivated you to talk to them (e.g. if it’s a weather bot, why might you want to know what the weather is)? 是什么促使您與他們交談(例如,如果它是一個天氣機器人,那么為什么您想知道天氣是什么)?
Brainstorming is necessary but not sufficient. Look for other resources that do the same job perhaps in a different modality, like a website, or FAQs related to your task. What are the opposites of things you cover? If you take complaints, you need to also deal with compliments; if you can turn lights on, you need to be able to turn them off — or at least know that turning them off is a thing that is possible in the world. User studies with mock-ups or early prototypes are one of the most reliable ways to spot gaps in your system’s coverage — we’ll go into user studies in more depth in a future article.
頭腦風暴是必要的,但還不夠。 尋找其他可能以不同方式完成相同工作的資源,例如網站或與您的任務相關的FAQ。 您涵蓋的事物有哪些對立面? 如果您提出投訴,您還需要處理表揚。 如果您可以打開燈,則需要能夠將它們關閉-或至少知道關閉它們在世界上是可能的。 使用模型或早期原型進行用戶研究是找出系統(tǒng)覆蓋范圍中最不可靠的方法之一-我們將在以后的文章中更深入地進行用戶研究。
培訓用戶 (Training the user)
品牌推廣 (Branding)
A critical, and often overlooked way to establish clear expectations from your user is with consistent branding — if you call your bot the CookieBot, users will understand that its specialty is cookies. There are other more subtle ways to convey capabilities if you system has a visual component — what background images do you use, what are your icons? Are they all cookies, or are they all sorts of baked goods?
始終如一的商標是建立用戶明確期望的一種關鍵且經常被忽視的方法-如果您將您的機器人稱為CookieBot,則用戶將了解其專長是cookie。 如果您的系統(tǒng)具有視覺組件,則還有其他更細微的方式來傳遞功能-您使用什么背景圖像,什么是圖標? 它們都是餅干還是各種烘焙食品?
BakingBot and CookieBot branding.BakingBot和CookieBot品牌。Remember, as you’re creating branding materials, you are trying to provide an accurate model of your bot can do. If we called our bot BakingBot, and used the branding above, it might see more engagement — but the users would be frustrated and the ratings could be much lower.
請記住,在創(chuàng)建品牌資料時,您正在嘗試提供機器人可以執(zhí)行的準確模型。 如果我們調用機器人BakingBot并使用上面的品牌,它可能會吸引更多用戶-但是用戶會感到沮喪,并且評分可能會低得多。
入職 (Onboarding)
Users’ initial interactions are also a key place to establish clear boundaries about what is and is not handled.
用戶的初始交互也是建立明確界限的關鍵位置。
In your very first interaction with the user, be direct about what you can do.
在與用戶的第一次互動中,請直接說明您可以做什么。
Too broad: I can teach you how to bake! (Implies: wide coverage of baked recipes, instructions for how to do things, e.g. cream butter, etc)
太寬泛:我可以教你如何烘烤! (示例:廣泛的烘焙食譜,操作說明,例如奶油黃油等)
Just right: I have just the right cookie recipe for every occasion! (Implies: recipes for cookies, recipes sorted by occasion)
恰到好處:我每次都有合適的Cookie食譜! (示例:Cookie的食譜,按場合排序的食譜)
以身作則 (Leading by example)
In this case study, our focus is how to define and communicate your bot’s domain — not necessarily digging into specific wording choices in your design. However, wording is a significant component, because everything the bot says gives the user data about what it understands. Even if you aren’t building the kind of bot that requires explicit user training in the form of dedicated onboarding, you’ll always be doing implicit onboarding, as each system turn is subtly training your users. That includes everything from your domain coverage to the kinds of responses the bot is expecting.
在本案例研究中,我們的重點是如何定義和傳達您的機器人域-不必在設計中深入研究特定的措詞選擇。 但是,措辭是一個重要的組成部分,因為機器人說的一切都會向用戶提供有關其理解的數據。 即使您不是在構建那種需要專門的入職培訓形式的顯式用戶培訓的機器人,也總是會隱式進行入職培訓,因為每個系統(tǒng)回合都在巧妙地培訓用戶。 這包括從您的域范圍到機器人期望的響應的所有內容。
Here are some places to pay close attention:
這里是一些需要密切注意的地方:
When your bot talks about what it can do.
當您的機器人談論它可以做什么時 。
- Just like in our onboarding example, the bot says “I can teach you how to bake”, when a better example for its domain is “I have just the right cookie recipe for every occasion!” 就像在我們的入門示例中一樣,機器人會說“我可以教你如何烘烤”,而其域名的一個更好的例子是“我在每種情況下都有正確的Cookie配方!”
Whenever your bot asks a question.
每當您的機器人問一個問題時。
- The type of question should suggest the type of answer you’re expecting. For example, sometimes you might want to soften a question, like “Can you tell me what cookie you want to make?”, but you’re potentially inviting a yes/no response, in addition to the open-ended ‘what cookie do you want to make?’. 問題類型應建議您期望的答案類型。 例如,有時您可能想簡化一個問題,例如“您能告訴我您要制作什么cookie嗎?”,但除了開放式“ cookie的作用是什么”之外,您還可能會邀請是/否回答。你想做嗎?
- Some questions can mislead the user: If you ask “What kinds of cookies do you want to make?” but then you only have 2 cookie recipes available, the user will get frustrated. If you ask if the user needs vegan recipes, but your backend doesn’t support that filtering yet, then they’ll lose trust when ‘butter’ is on the ingredients list. 有些問題可能會誤導用戶:如果您問“您想制作哪種Cookie?” 但是您只有2個cookie食譜可用,用戶會感到沮喪。 如果您詢問用戶是否需要純素食食譜,但您的后端尚不支持該篩選,那么當“黃油”在成分列表中時,他們將失去信任。
測試中 (Testing)
Now you’ve built the best system you can — test, test, test. Find expert users, naive users, kids, and see what they try to do. Once you’re live, keep a close eye on your logs, and don’t just assess your conversational strategies — you also need to assess and reassess the other elements discussed above. You might even do A/B testing of onboarding variations, or of doing additional training steps for new users. Testing is so important, we’ll explore it further in its own article.
現在,您已經構建了可以使用的最佳系統(tǒng)-測試,測試,測試。 查找專家用戶,天真的用戶,孩子,然后看看他們想做什么。 生活之后,請密切注意日志,而不僅僅是評估您的對話策略-您還需要評估和重新評估上面討論的其他元素。 您甚至可以對入門版本進行A / B測試,或者為新用戶執(zhí)行其他培訓步驟。 測試是如此重要,我們將在自己的文章中進一步進行測試。
如何處理覆蓋率差距 (How to handle coverage gaps)
Ideally, your bot covers a complete natural domain — all presidents, all consumer banking transactions, all recipes. That’s not always an option. Maybe you’re integrating with a backend that only supports certain transaction types, or only has certain kinds of recipes, and you have no ability to improve or extend them. It may also be the case that you have resource limitations and can only build a subset of the “full” experience.
理想情況下,您的機器人可以覆蓋一個完整的自然領域-所有總裁,所有消費者銀行交易,所有食譜。 這并不總是一種選擇。 也許您正在與僅支持某些交易類型或僅具有某些種類的配方的后端集成,而您卻無法改進或擴展它們。 也可能是您有資源限制,只能建立“完整”體驗的一部分。
Once you’ve identified a coverage gap, there are strategies for when you can tell that the user has fallen into that gap, and ones for when you can’t tell.
一旦確定了覆蓋范圍的差距,便有一些策略可以確定何時可以確定用戶已落入該差距,以及可以確定何時不能確定用戶的策略。
可以告訴 (Can Tell)
Let’s start with an example that the bot fully handles.
讓我們從機器人完全處理的示例開始。
This bot only knows interesting presidential facts — not boring ones, like the height of every president.這個漫游器只知道有趣的總統(tǒng)事實,而不是無聊的事實,例如每位總統(tǒng)的身高。Here, our bot is using the backend Interesting Presidential Facts Database, but it looks like the things that were “interesting” varied pretty wildly between presidents.
在這里,我們的漫游器正在使用后端有趣的總統(tǒng)事實數據庫,但看起來“有趣”的事情在總統(tǒng)之間變化很大。
Abraham Lincoln = [height: 6'4"” , preferred_hat_type:stovepipe, nickname: “Honest Abe”, initial-career: “l(fā)awyer”, most-famous-speech: “The Gettysburg Address”, cause-of-death: “assassination”, children: “4: Robert, Edward, Willie and Tad”]
亞伯拉罕·林肯= [身高:6'4“”,preferred_hat_type:stovepipe,昵稱:“誠實安倍”,職業(yè)初期:“律師”,最著名的演講:“葛底斯堡演說”,死因:“暗殺”,兒童:“ 4:羅伯特,愛德華,威利和塔德”]
Grover Cleveland: [initial-career: “teacher”, nickname: “Grover was his middle name, and his first name was Stephen”, children: “6 or 7: There was also a child born out of wedlock that he admitted could possibly be his during his first presidential campaign”]
格羅弗·克利夫蘭(Grover Cleveland):[最初的職業(yè):“老師”,綽號:“格羅弗(Grover)是他的中間名,他的名字是斯蒂芬(Stephen)”,孩子們:“ 6或7:還有一個非婚生子女,他承認可能在他的第一次總統(tǒng)競選中成為他的人”
Let’s break down the bot’s response:
讓我們分解一下機器人的響應:
Tell users what’s out of scope. It’s often not ideal to surface backend limitations directly to the user, for example “I’m sorry, that’s not in my database.” A better option is to use this opportunity to train the user in what the bot can and can’t handle. In this case, we don’t have an easy way to summarize what’s in or out of scope (saying “I have a selection of random presidential facts” isn’t great), so we open with “I’m not sure [question],” i.e. “I’m not sure how tall Grover Cleveland was.”
告訴用戶哪些超出范圍。 直接向用戶顯示后端限制通常不是理想的選擇,例如“很抱歉,這不在我的數據庫中。” 更好的選擇是利用這個機會來培訓用戶機器人可以處理和不能處理的內容。 在這種情況下,我們沒有一種簡單的方法來總結范圍之內或范圍之外的內容(說“我有一個隨機的總統(tǒng)事實選擇”不是很好),因此我們以“我不確定[問題] ],即“我不確定格羅弗·克利夫蘭有多高。”
Try to get the users what they need, even if you can’t do it on your own. The straightforward option here is to augment our bot with another backend, but let’s say this isn’t an alternative. Here, we offer to fallback to a web search for Wikipedia, because we think that will have the information. This is the strategy employed by most of the mainstream smart assistants.
嘗試獲取用戶所需的資源,即使您自己不能做到。 這里最直接的選擇是用另一個后端擴展我們的機器人,但是我們說這不是替代方案。 在這里,我們提供回退到Wikipedia的網絡搜索的方法,因為我們認為這將提供信息。 這是大多數主流智能助手所采用的策略。
Next, let’s try an example the bot can identify as being in the coverage gap, but can’t fully handle.
接下來,讓我們嘗試一個示例,該機器人可以識別出處于覆蓋范圍內,但不能完全處理。
The bot for our local grocery chain can’t handle when you make two requests at once.您一次提出兩個要求時,我們當地雜貨連鎖店的漫游器無法處理。In this case, we have a bot for a local grocery store chain, it can make lists and tell you the weekly specials. However, in testing the team noticed that users often tried to make multiple requests in the same utterance, but their classifier couldn’t reliably handle it. They trained it to reliably recognize when a user tries to ask for multiple things at a time.
在這種情況下,我們?yōu)楸镜仉s貨店連鎖店提供了一個漫游器,它可以列出并告訴您每周的特價商品。 但是,在測試小組中,他們注意到用戶經常嘗試以相同的發(fā)音提出多個請求,但是他們的分類器無法可靠地處理它。 他們對其進行了培訓,以可靠地識別用戶何時一次嘗試詢問多個問題。
Let’s break down the bot’s response:
讓我們分解一下機器人的響應:
Tell the users what’s out of scope: In this case, we were indirect. Instead of saying “I’m sorry, I can’t understand multiple things at the same time”, we say “Sorry, that was a lot all at once.”
告訴用戶超出范圍的情況:在這種情況下,我們是間接的。 我們沒有說“對不起,我無法同時理解多件事”,而是說“對不起,一次過很多。”
It tells users how to be successful. Here we are very clear: please only give the bot one task at a time.
它告訴用戶如何成功。 在這里,我們非常清楚:請一次只給機器人一個任務。
The bot’s response is much more human-like than saying “I can only understand things if you tell me one at a time”. The negative example (focusing on what the bot can’t do) is a less natural restriction from a user’s point of view, and it can make them feel unsure about their interactions with the bot. Just like conversations between humans, it’s most productive to focus on the behavior you need.
該機器人的回應更像是人類,而不是說“如果您一次告訴我,我只會理解事情”。 從用戶的角度來看,否定示例(關注于機器人不能做什么)是一種不太自然的限制,它會使他們不確定與機器人的交互。 就像人與人之間的對話一樣,專注于您需要的行為最有成效。
This example, in particular, illustrates something important about finding ways to train the user: it doesn’t all need to be up-front, in a dedicated onboarding conversation. Finding ways to gracefully handle issues, and guide users to engage with the bot more successfully are just as valuable.
特別是,該示例說明了有關尋找培訓用戶方法的重要事項:在專用的入職對話中,并不需要全部都預先準備好。 尋找合適的方式來妥善處理問題,并指導用戶更成功地與bot互動同樣有價值。
無法分辨 (Can’t Tell)
What if your bot gets an input it can’t make sense of at all? Here, it’s all about the fallback. Let’s look at two ways we can use fallback messages to address a coverage gap in a banking app:
如果您的機器人得到了輸入卻完全沒有意義的怎么辦? 在這里,所有關于后備。 讓我們看一下兩種使用后備消息來解決銀行應用程序中的覆蓋范圍缺口的方法:
Tailor the fallback message to address known coverage gaps.
量身定制后備消息以解決已知的覆蓋差距。
The banking bot can’t handle payments yet.銀行機器人尚無法處理付款。Let’s break down the bot’s response:
讓我們分解一下機器人的響應:
Clearly communicate what’s in scope: The bot explains here exactly what it can do. It doesn’t have to cover every edge case, but it’s a lot more satisfying for the user than a generic error + reprompt strategy. Communicating the edges of the bot’s understanding lets the user know that it’s not worth trying again.
清楚地傳達范圍內的內容:機器人在這里確切地解釋了它可以做什么。 它不必覆蓋所有的極端情況,但是比一般的錯誤+重新提示策略對用戶來說要令人滿意的多。 交流機器人的理解的邊緣,使用戶知道不值得再次嘗試。
Tell the users what’s coming next: This is a great example for our fictional banking client, because they know that transfers and payments are the most common user requests that the bot can’t handle. Since we know they’re very common, and on the roadmap, there’s a good chance that the users who hear this particular fallback message were asking about one of these features. If something is common, but not on your roadmap, this might not be the best strategy.
告訴用戶接下來會發(fā)生什么:對于我們的虛構銀行客戶來說,這是一個很好的例子,因為他們知道轉賬和付款是機器人無法處理的最常見的用戶請求。 既然我們知道它們非常普遍,并且在路線圖中,很可能聽到此特定后備消息的用戶會問這些功能之一。 如果某些事情很常見,但并不在您的路線圖上,那么這可能不是最佳策略。
Create a fallback flow
創(chuàng)建后備流程
The banking bot’s fallback flow銀行機器人的后備流程With the fallback flow we’ve defined, here’s what the resulting conversation might look like:
通過我們定義的后備流程,以下是可能產生的對話:
Banking bot takes feedback via a fallback flow銀行機器人通過后備流程獲取反饋Let’s break down the bot’s response:
讓我們分解一下機器人的響應:
Clearly communicate what’s in scope: Just like the example above, we clearly communicate what the bot can do.
清楚地傳達范圍內的內容:就像上面的示例一樣,我們清楚地傳達了機器人可以做什么。
Elicit Feedback: This strategy can really help mitigate user frustration. Your goal is that the user feels listened to, and like they are stakeholders in the process. Here, we have no conditions on the user response: we treat all input like a good faith response, and allow them continue onwards. (If you want to see a successful study, where the bot teamed up with users to collect feedback against the developers, check out Cliff Nass’ How I Made Clippy Lovable.)
明確的反饋:此策略確實可以幫助減輕用戶的挫敗感。 您的目標是讓用戶感到被傾聽,就像他們是流程中的涉眾一樣。 在這里,我們對用戶響應沒有任何條件:我們將所有輸入都視為真誠響應,并允許其繼續(xù)進行。 (如果您希望看到一個成功的研究,該機器人與用戶合作收集開發(fā)人員的反饋,請參閱Cliff Nass的《 我如何使Clippy Lovable成為現實》 。)
TL; DR (TL;DR)
In this article, we talked about the value of establishing a shared model of the bot’s domain with the user. When the user perceives the domain to be much broader than the bot can handle, using it feels like running into invisible walls. What can you do?
在本文中,我們討論了與用戶建立bot域共享模型的價值。 當用戶感覺到該域的范圍超出了機器人可以處理的范圍時,使用它就像進入了不可見的墻。 你能做什么?
It all starts when you’re defining the scope of your bot. As much as possible, aim for coverage of a complete natural domain.
這一切都始于您定義機器人的范圍。 盡可能爭取覆蓋整個自然域 。
Use branding and onboarding to set user expectations clearly, starting even before their first interaction.
使用品牌和入職培訓可以清楚地設置用戶期望 ,甚至在他們第一次互動之前就開始。
Lead by example: make sure that your wording and language choices throughout the bot don’t communicate abilities you don’t have (and use them to subtly advertise the abilities you do!)
以身作則:確保您在整個漫游器中的措辭和語言選擇不會傳達您不具備的能力(并巧妙地宣傳您所具備的能力!)
Running into walls always sucks, but if you’ve identified gaps in your coverage, you can add markers and strategic cushioning. User training doesn’t stop at onboarding — your errors and fallbacks are opportunities to guide the user.
碰到墻總是很爛,但是如果您發(fā)現覆蓋范圍內的空白,則可以添加標記和戰(zhàn)略緩沖。 用戶培訓不僅僅局限在入門階段 -您的錯誤和后備是指導用戶的機會 。
展望未來 (Looking Ahead)
Here, we’ve talked about some of the situations where users are misled or allowed to become confused about what a system can do. In the rest of the CookieBot Case Studies, we are going to address other ways user confusion can be minimized through better bot design.
在這里,我們討論了在某些情況下,用戶被誤導或被允許對系統(tǒng)的功能感到困惑。 在CookieBot案例研究的其余部分中,我們將探討通過更好的機器人設計來最大程度地減少用戶混亂的其他方式。
We’d love to learn how you stay on the same page with your end-users! We’re continuing the CookieBot Case Studies — next, we want to talk about testing.
我們很想學習您如何與最終用戶保持同一頁面! 我們將繼續(xù)進行CookieBot案例研究-接下來,我們想談談測試。
致謝 (Acknowledgments)
Thanks so much to Andreea Danielsecu and Jennie Stenhouse for editing! Your feedback was so helpful, and any remaining errors are our own.
非常感謝Andreea Danielsecu和Jennie Stenhouse進行編輯! 您的反饋意見非常有幫助,所有其他錯誤都是我們自己的。
All illustrations are ? 2020, Gwen Christian.
所有插圖均為?2020, Gwen Christian 。
CookieBot started out as an example, but the more we sketched it out for this article, the more motivated we are to start building it. Or perhaps we’re just hungry.
CookieBot最初是作為示例,但是我們在本文中草擬的內容越多,我們就越有動力開始構建它。 也許我們只是餓了。
翻譯自: https://medium.com/@gwen.christian/when-surprise-and-delight-diverge-2886d78519bb
匱乏即是富足,自律產生喜悅
總結
以上是生活随笔為你收集整理的匮乏即是富足,自律产生喜悦_当惊喜与喜悦分开时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html中js隐藏div的高度,jQue
- 下一篇: xp下电脑关机超级慢