فهرست منبع

Progressive disclosure principle (#5661)

This proposal codifies our preference for designs that support
"progressive
disclosure", meaning that programmers can ignore a given language
concept (or
even be unaware of it) until it is directly relevant to the task they're
doing.
Geoff Romer 10 ماه پیش
والد
کامیت
12fbf9c9c2
2فایلهای تغییر یافته به همراه107 افزوده شده و 0 حذف شده
  1. 49 0
      docs/project/principles/progressive_disclosure.md
  2. 58 0
      proposals/p5661.md

+ 49 - 0
docs/project/principles/progressive_disclosure.md

@@ -0,0 +1,49 @@
+# Principle: Progressive disclosure
+
+<!--
+Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+Exceptions. See /LICENSE for license information.
+SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+-->
+
+<!-- toc -->
+
+## Table of contents
+
+-   [Background](#background)
+-   [Principle](#principle)
+-   [Applications of this principle](#applications-of-this-principle)
+
+<!-- tocstop -->
+
+## Background
+
+[Progressive disclosure](https://en.wikipedia.org/wiki/Progressive_disclosure)
+is a UX design pattern which defers revealing information and advanced/
+special-case controls to the user until they are relevant to the current task,
+in order to make the system easier to learn and use. Although the term
+originates in GUI design, it can be applied to language design as well. In
+particular, it's one of
+[Swift's core design principles](https://www.youtube.com/watch?v=CRtyWqwLM3M&t=369s).
+
+## Principle
+
+In Carbon, we will prefer designs that support progressive disclosure, in the
+sense defined
+[here](https://www.douggregor.net/posts/swift-for-cxx-practitioners-extensions/#:~:text=By%20default%2C%20any%20code,understanding%20of%20the%20language):
+
+> ... the idea that one can ignore certain aspects of the language when starting
+> out, and then learn about them only at the time when you need them, without
+> invalidating any of your prior understanding of the language.
+
+## Applications of this principle
+
+Types such as `i32` are designed to follow progressive disclosure: they are
+actually class types defined in the prelude library that support arithmetic
+operations by implementing certain customization interfaces. However,
+programmers can learn to use them by thinking of them as primitive types like
+their C counterparts, without needing to understand the arithmetic operator
+interfaces, interface implementation in general, libraries, the prelude, or even
+class types. Subsequently learning those concepts doesn't invalidate that
+original mental model, but rather shows how that model is built out of more
+fundamental pieces.

+ 58 - 0
proposals/p5661.md

@@ -0,0 +1,58 @@
+# Progressive disclosure principle
+
+<!--
+Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+Exceptions. See /LICENSE for license information.
+SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+-->
+
+[Pull request](https://github.com/carbon-language/carbon-lang/pull/5661)
+
+<!-- toc -->
+
+## Table of contents
+
+-   [Abstract](#abstract)
+-   [Problem](#problem)
+-   [Proposal](#proposal)
+-   [Rationale](#rationale)
+
+<!-- tocstop -->
+
+## Abstract
+
+This proposal codifies our preference for designs that support "progressive
+disclosure", meaning that programmers can ignore a given language concept (or
+even be unaware of it) until it is directly relevant to the task they're doing.
+
+## Problem
+
+Carbon's design choices have been motivated in part by a desire for "progressive
+disclosure", but that approach has not been codified as a design principle.
+
+## Proposal
+
+See
+(`docs/project/principles/progressive_disclosure.md`)[/docs/project/principles/progressive_disclosure.md],
+which is introduced by this proposal.
+
+## Rationale
+
+In order to have a vibrant
+[community and culture](/docs/project/goals.md#community-and-culture), Carbon
+needs to be effectively teachable and learnable. Progressive disclosure supports
+that goal by minimizing the amount that must be learned at any one time, and by
+enabling concepts to be introduced when they are most salient to the programmer.
+
+Relatedly, although
+["lies-to-children"](https://en.wikipedia.org/wiki/Lie-to-children) can be an
+appropriate teaching tool, they also risk undermining the health of the
+community by creating distance between those who know the full truth and those
+who have only been taught the "lie". This principle helps minimize that risk,
+through the expectation that progressive disclosure not invalidate the
+programmer's prior understanding of the language.
+
+Finally, this principle helps make Carbon code
+[easy to read, understand, and write](/docs/project/goals.md#code-that-is-easy-to-read-understand-and-write),
+by minimizing the amount of Carbon knowledge that a programmer needs in order to
+read, understand, or write a given piece of code.