<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Michael He - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Michael He - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:38 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/author/michael-he/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 9 个核心机器学习算法 ]]>
                </title>
                <description>
                    <![CDATA[ 如今，机器学习 [https://gum.co/pGjwd] 正改变着我们的世界。借助机器学习（ML），谷歌在为我们推荐搜索结果，奈飞在为我们推荐观看影片，脸书在为我们推荐可能认识的朋友。 机器学习从未像在今天这样重要。但与此同时，机器学习这一领域也充斥着各种术语，晦涩难懂，各种机器学习的算法每年层出不穷。 本篇文章将向您介绍机器学习领域的基础概念。更确切地说，我们将讨论时下9大核心机器学习算法背后的基本概念。 推荐系统 什么是推荐系统？ 推荐系统 [https://nickmccullum.com/python-machine-learning/introduction-recommendation-systems/] 的用途在于在一个数据集中寻找相似的条目。 推荐系统在现实世界最常见的应用莫过于奈飞的影视推荐。具体而言，奈飞在向你提供视频在线观看服务时，会根据你已经观看过的内容向你推荐其它影片或电视剧集。 另一个应用实例是脸书“你可能认识的人”这一功能，这一功能会根据你当前的好友列表来向你推荐你可能认识的朋友。 这些开发完善、部署精密的推荐系统内部都十分复杂，且极具消耗 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/a-no-code-intro-to-the-9-most-important-machine-learning-algorithms-today/</link>
                <guid isPermaLink="false">64002a810687e3060be26fc2</guid>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Thu, 02 Mar 2023 04:40:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/03/5f9c9a3c740569d1a4ca2466.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/a-no-code-intro-to-the-9-most-important-machine-learning-algorithms-today/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">9 Key Machine Learning Algorithms Explained in Plain English</a>
      </p><!--kg-card-begin: markdown--><p>如今，<a href="https://gum.co/pGjwd">机器学习</a>正改变着我们的世界。借助机器学习（ML），谷歌在为我们推荐搜索结果，奈飞在为我们推荐观看影片，脸书在为我们推荐可能认识的朋友。</p>
<p>机器学习从未像在今天这样重要。但与此同时，机器学习这一领域也充斥着各种术语，晦涩难懂，各种机器学习的算法每年层出不穷。</p>
<p>本篇文章将向您介绍机器学习领域的基础概念。更确切地说，我们将讨论时下9大核心机器学习算法背后的基本概念。</p>
<h1 id="">推荐系统</h1>
<h3 id="">什么是推荐系统？</h3>
<p><a href="https://nickmccullum.com/python-machine-learning/introduction-recommendation-systems/">推荐系统</a>的用途在于在一个数据集中寻找相似的条目。</p>
<p>推荐系统在现实世界最常见的应用莫过于奈飞的影视推荐。具体而言，奈飞在向你提供视频在线观看服务时，会根据你已经观看过的内容向你推荐其它影片或电视剧集。</p>
<p>另一个应用实例是脸书“你可能认识的人”这一功能，这一功能会根据你当前的好友列表来向你推荐你可能认识的朋友。</p>
<p>这些开发完善、部署精密的推荐系统内部都十分复杂，且极具消耗数字资源。</p>
<h3 id="">推荐系统和线性代数</h3>
<p>要想从零开始构建一个完善的推荐系统，就需要对线性代数有深刻掌握。</p>
<p>也正因如此，如果你此前并未学习过线性代数，本节可能会出现一些你尚不理解的概念。</p>
<p>但别担心，scikit-learn Python图书馆已让构建推荐系统变得非常容易。换句话说，即便你没有很深厚的线性代数背景，你也可以在现实世界中构建出一个推荐系统。</p>
<h3 id="">推荐系统的工作原理是什么呢？</h3>
<p>推荐系统主要分为两类：</p>
<ul>
<li>基于内容的推荐系统</li>
<li>协同过滤推荐系统</li>
</ul>
<p>基于内容的推荐系统在做出推荐时根据的是某条目同已使用条目之间的相似性，这同大众关于推荐系统原理的普遍认知相一致。</p>
<p>协同过滤推荐系统在做出推荐时根据的则是用户同条目互动的知识。从命名上就有所不同的这类系统利用的是一群人的智慧。（这也是其命名中“协同”一词的内涵。）</p>
<p>在现实生活中，协同过滤推荐系统要远比基于内容的推荐系统更加常见。原因主要在于协同过滤推荐系统的推荐结果更准确。此外，一些业内人士也表示协同过滤推荐系统要更易于理解。</p>
<p>协同过滤推荐系统也有一项基于内容的推荐系统所不具备的功能。那就是，它们能够自主学习功能。</p>
<p>也就是说，它们甚至能够依据一些你事先并未设定的属性来展开条目间相似性的识别。</p>
<p>协同过滤推荐系统下又细分两个子类别：</p>
<ul>
<li>基于记忆的协同过滤推荐系统</li>
<li>基于模型的协同过滤推荐系统</li>
</ul>
<p>要在机器学习领域有所成就，并不需要你弄懂这两类协同过滤推荐系统之间的差异，你只要知道协同过滤推荐系统存在不同种类就够了。</p>
<h3 id="">本节小结</h3>
<p>以下是有关我们在这份导学中就推荐系统谈到的一些要点总结：</p>
<ul>
<li>推荐系统在生活中的应用实例</li>
<li>推荐系统的不同类别以及协同过滤推荐系统比基于内容的推荐系统应用更为普遍的原因</li>
<li>推荐系统与线性代数之间的关系</li>
</ul>
<h1 id="">线性回归</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/linear-regression-python/">线性回归</a>的用途在于基于 <code>x</code> 值来预测 <code>y</code> 值。</p>
<h3 id="">线性回归的历史</h3>
<p>19世纪，线性回归由 <a href="https://en.wikipedia.org/wiki/Francis_Galton">Francis Galton</a> 提出。</p>
<p>Galton 是一名研究父母-子女关系的科学家。具体而言，他研究的是父亲身高同其儿子身高之间的关系。</p>
<p>Galton的第一个发现是，儿子倾向于大致同父亲一样高，这并不足为奇。</p>
<p>但后来，获得一个更有趣的发现。那就是，一个儿子的身高倾向于更接近所有人身高的平均值，比其同其父亲身高的接近度还要高。</p>
<p>Galton 为这一现象命名为：回归。用他的话说，“一位父亲的儿子的身高倾向于回归到所有人身高的平均值”。</p>
<p>自此，统计学和机器学习迎来了一个崭新的领域，即回归。</p>
<h3 id="">线性回归的数学原理</h3>
<p>创建回归模型时，我们要做的就是绘制一条尽可能接近数据集中每个点的线。</p>
<p>一个典型的例子是线性回归的“最小二乘法”，该方法仅计算上下方向上的一条线的相似度。</p>
<p>下面这个示例可以帮助阐释这一点：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-linear-regression/least-squares-regression.gif" alt="An example of the math behind least squares regression" width="600" height="400" loading="lazy"></p>
<p>在创建回归模型时，你最终会产出一个方程式。利用它，你可以预测给定x值时的y值，而无需事先知道y值。</p>
<h1 id="">逻辑回归</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/logistic-regression-python/">逻辑回归</a>与线性回归类似。但不同的是，逻辑回归并不计算 <code>y</code> 的数值，而是估计一个数据点所属的类别。</p>
<h3 id="">什么是逻辑回归？</h3>
<p>逻辑回归是一种用于解决分类问题的机器学习模型。</p>
<p>下面是几种机器学习分类问题的举例：</p>
<ul>
<li>垃圾邮件（垃圾还是非垃圾？）</li>
<li>汽车保险索赔（销记还是维修？）</li>
<li>疾病诊断</li>
</ul>
<p>以上每一个分类问题都有且仅有两类，被称为<strong>二进制分类</strong>问题。</p>
<p>逻辑回归非常适合用于解决<strong>二进制分类</strong>问题，我们只需要把不同类别的值分别设定为 <code>0</code> 和 <code>1</code> 就行了。</p>
<p>我们为什么需要逻辑回归？答案是，线性回归模型无法做出二进制分类推测，因为当用一个只包含两个可能值的数据集拟合一条直线时，拟合效果可想而知。</p>
<p>这张图片或能帮助你理解为什么线性回归模型不适用于解决二进制分类问题：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/linear-regression-classification.png" alt="Linear Regression Classification" width="600" height="400" loading="lazy"></p>
<p>图中，<code>y-axis</code> 代表一个肿瘤是恶性的可能性。相反，<code>1-y</code> 代表其为良性的可能性。可以看到，就数据集中的大多数观测值而言，线性回归模型在预测这一可能性方面表现很差。</p>
<p>这也解释了逻辑回归的有用性。它拟合出的最佳曲线有一个偏向，这使它更适合预测分类数据。</p>
<p>下面是使用相同训练数据分别生成的线性回归模型与逻辑回归模型比较：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/linear-vs-logistic-regression.png" alt="Linear Regression vs Logistic Regression" width="600" height="400" loading="lazy"></p>
<h3 id="s">S型函数</h3>
<p>逻辑回归模型生成的曲线之所以有一个偏向是因为它不是用线性方程计算得的，而是由S型函数（因其在逻辑回归中的应用又名逻辑函数）构建。</p>
<p>要在机器学习领域有所成就，你并不需要记忆 <a href="https://en.wikipedia.org/wiki/Sigmoid_function">S型函数</a>，但是理解它的外形还是对你有帮助的。</p>
<p>其方程如下：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/sigmoid-equation.png" alt="The Sigmoid Equation" width="600" height="400" loading="lazy"></p>
<p>有关S型函数值得知道的一点是，它有这样一个主要特征：无论你输入的值有多大，该函数输出的值始终分布在0到1之间。</p>
<h3 id="">利用逻辑回归模型开展预测</h3>
<p>要利用线性回归模型进行预测，通常需要设定一个临界点，该临界点通常为 <code>0.5</code>。</p>
<p>我们不妨使用先前图片中的癌症诊断示例来在实践中理解这一原理。如果逻辑回归模型输出的值低于0.5，该数据点将被归为良性肿瘤。反之，如果S型函数输出的值大于0.5，则将被归为恶性。</p>
<h3 id="">使用混淆矩阵来衡量逻辑回归的性能</h3>
<p>在机器学习领域，混淆矩阵可以用于比较真阳性，真阴性，假阳性和假阴性。</p>
<p>尤其是在衡量逻辑回归模型的性能时，混淆矩阵非常有用。下面是混淆矩阵的一个使用示例：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/confusion-matrix.png" alt="An Example Confusion Matrix" width="600" height="400" loading="lazy"></p>
<p>图中，TN代表“真阴性”，FN代表“假阴性”。FP代表“假阳性”，TP代表“真阳性”。</p>
<p>混淆矩阵可用于评估模型在混淆矩阵的某一特定象限中是否性能很差。举例来说，图中模型的假阳性异常偏高。</p>
<p>这种评估在某些应用场景中可以发挥很大的用处。它可以确保模型在混淆矩阵中极为危险的区域仍能表现良好。</p>
<p>拿癌症的例子来说，你会非常想要确定你的模型没有很高的假阴性率。因为真是那样的话，就意味着一个人明明患有恶性肿瘤，但你却将其错误地归为了良性。</p>
<h3 id="">本节小结</h3>
<p>本节，你初次了解了逻辑回归机器学习模型。</p>
<p>以下是你就逻辑回归学到的知识总结：</p>
<ul>
<li>哪些类型的分类问题适合利用逻辑回归模型解决</li>
<li>逻辑函数（也称为S型函数）的输出值永远在0到1之间</li>
<li>如何借助临界点来利用逻辑回归机器学习模型进行预测</li>
<li>为什么混淆矩阵可用于衡量逻辑回归模型的性能</li>
</ul>
<h1 id="k">K近邻算法</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/k-nearest-neighbors-python/">K近邻算法</a>可以帮助解决类别多于两个的分类问题。</p>
<h3 id="k">什么是K近邻算法？</h3>
<p>K近邻算法是一种分类算法。其基于的原理非常简单，通过一个示例我们便能对其进行很好的理解。</p>
<p>假设你有一些足球运动员和篮球运动员的身高、体重数据，那么当数据中出现了一个新运动员时，K近邻算法便可帮你推测这名运动员是足球运动员还是篮球运动员。</p>
<p>为实现这一推测，K近邻算法会识别最接近新观测值的 <code>K</code> 个数据点。</p>
<p>下图是这一过程的展示，其中K值为 <code>3</code>：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-nearest-neighbors/k-nearest-neighbors.jpg" alt="A visualization of k nearest neighbors" width="600" height="400" loading="lazy"></p>
<p>图中，我们将足球运动员数据点标记为了蓝色，篮球运动员标记为了橙色，待归类的数据点标记为了绿色。</p>
<p>由于新数据点最邻近的数据点中大多数（2/3）是蓝色（足球运动员），因此K近邻算法预测这一新数据点也应为蓝色（足球运动员）。</p>
<h3 id="k">建立K近邻算法的步骤</h3>
<p>通常，建立一个K近邻算法有以下步骤：</p>
<ol>
<li>存储所有数据</li>
<li>计算从新数据点 <code>x</code> 到数据集中其它所有数据点的  <a href="https://en.wikipedia.org/wiki/Euclidean_distance">欧式距离</a></li>
<li>按照距新数据点 <code>x</code> 的距离递增的顺序对数据集中的各数据点进行排序</li>
<li>根据距新数据点 <code>x</code> 最近的 <code>K</code> 个数据点中绝大多数所属的类别推测新数据点的类别</li>
</ol>
<h3 id="kk">K近邻算法中K值的重要性</h3>
<p>尽管在一开始可能并不明显，但在K近邻算法中更改 <code>K</code> 值的大小或将改变对新数据点所属类别的推测结果。</p>
<p>具体而言，如果 <code>K</code> 值很小，那么一个模型便能完美地预测训练数据，但在预测测试数据时会表现较差。同样，<code>K</code> 值太大则会导致模型过于复杂。</p>
<p>下图很好地说明了这一问题：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-nearest-neighbors/k-value-error-rates.png" alt="K value and error rates" width="600" height="400" loading="lazy"></p>
<h3 id="k">K近邻算法的优缺点</h3>
<p>在K近邻算法介绍的最后，我想简要讨论一下使用该模型的利弊。</p>
<p>这是使用K近邻算法的一些主要优点：</p>
<ul>
<li>该算法简单易懂</li>
<li>训练模型时没太大必要在新的训练数据上训练</li>
<li>适用于分类问题中的任何数量的类别</li>
<li>向数据集中添加更多数据时较为容易</li>
<li>该模型仅包含两个参数：<code>K</code> 值和使用的距离指标（通常是欧式距离）</li>
</ul>
<p>同时，以下是该算法的一些主要缺点：</p>
<ul>
<li>由于需要对整个数据集进行排序，做出预测的计算成本高</li>
<li>不适用于分类功能</li>
</ul>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关k近邻算法的知识总结：</p>
<ul>
<li>K近邻算法可以解决的分类问题示例（足球运动员与篮球运动员的例子）</li>
<li>K近邻算法如何依据相邻数据点的欧几里得距离来预测新数据点属于哪个类别</li>
<li>为什么 <code>K</code> 值的大小对预测结果很重要</li>
<li>使用K近邻算法的优缺点</li>
</ul>
<h1 id="">决策树和随机森林</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/decision-trees-random-forests-python/">决策树和随机森林</a>都归属于树方法。</p>
<p>具体来说，决策树也是一种机器学习模型，用于通过循环遍历数据集中的每个特征进行预测。随机森林则是按照数据集中的各个特征随机排布的决策树集合。</p>
<h3 id="">什么是树方法？</h3>
<p>树方法是机器学习的一种方法。在深入探讨其理论依据之前，我们不妨先看一个示例。</p>
<p>假设你每个星期一都打篮球，而且你总是邀请同一个朋友和你一起打。</p>
<p>而你的这位朋友有些时候来了，有些时候没来。</p>
<p>他是否会来取决于多个因素，如天气好坏，气温高低，风的大小，身体疲惫程度。你渐渐注意到了这些因素，并开始记录你朋友是否会来的决定以及当天这些因素的具体情况。</p>
<p>如此一来，你便可以用这些数据来预测你的朋友在某个周一是否会来，而你预测时可选择的方法之一就是决策树。下图是本示例中的决策树：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-decision-tree/decision-tree.png" alt="An example of a decision tree" width="600" height="400" loading="lazy"></p>
<p>每个决策树中都有两种构成元素：</p>
<ul>
<li><code>节点</code>：位于决策树根据某个属性的值分叉的位置</li>
<li><code>方案枝</code>：拆分到下一个节点的结果</li>
</ul>
<p>上图中，可以看到的一些节点有 <code>outlook（推测）</code>，<code>humidity（湿度）</code> 和 <code>windy（风）</code>。这些属性的每种潜在值旁边都有一条树枝状的线条。</p>
<p>在继续深入探讨之前，你还需要了解下面两个决策树术语：</p>
<ul>
<li><code>根节点</code>：进行第一次拆分的节点</li>
<li><code>叶节点</code>：预测最终结果的终端节点</li>
</ul>
<p>现在，你对决策树已经有了一个基本的了解。在下一部分的讲解中，我们将学习如何从零开始构建决策树。</p>
<h3 id="">如何从零开始构建决策树</h3>
<p>构建一个决策树比你想象的要难，因为要确定分割数据的特征（一个属于<a href="https://en.wikipedia.org/wiki/Entropy">熵</a>和<a href="https://machinelearningmastery.com/information-gain-and-mutual-information/#:~:text=Information%20gain%20is%20the%20reduction,before%20and%20after%20a%20transformation.">信息增益</a>） 范畴的话题）在数学上是一个非常复杂的问题。</p>
<p>为了解决这个问题，机器学习从业人员通常会使用多个决策树，这些决策树分割特征的选取是从众多样本中随机挑选的。</p>
<p>换句话说，每个决策树在每个分割处都会随机选择一个新的特征样本，该方法被称为<strong>随机森林</strong>。</p>
<p>总体而言，从业人员通常会将数据集中的特征总数 <code>p</code> 的平方根作为随机特征样本中包含的样本数量 <code>m</code>。简而言之，<code>m</code> 等于 <code>p</code> 的平方根，每一个分割特征将从 <code>m</code> 中随机选择。</p>
<p>如果现在你无法完全理解也不必担心。当你最终构建第一个随机森林模型时，你便会对一切认识得更加清楚。</p>
<h3 id="">使用随机森林的优点</h3>
<p>想象一下，假设你正在使用的数据集有一项非常显著的特征，这一特征比数据集中的其它任何特征都更能准确预测最终结果。</p>
<p>如果你用手工去构建决策树，便会将此特征画在决策树的顶部分叉，这也就意味着你将拥有多棵预测相关性很高的决策树。</p>
<p>然而，我们要避免这种情况的发生，因为取高度相关变量的平均值不能显著减小方差。相反，通过为随机森林中的每棵树随机选择特征，这些树之间便会失去相关性，从而减小结果模型的方差。这种去相关性是使用随机森林优于手工决策树的主要优势。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关决策树和随机森林的知识总结：</p>
<ul>
<li>可以使用决策树来进行预测的问题示例</li>
<li>决策树的构成元素：<code>节点</code>、<code>方案枝</code>、<code>根节点</code>和<code>叶节点</code></li>
<li>随机抽取决策树特征样本建立随机森林的原理</li>
<li>为什么使用随机森林对变量进行去相关有助于减小最终模型的方差</li>
</ul>
<h1 id="">支持向量机</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/support-vector-machines-python/">支持向量机</a>属于分类算法（尽管从技术上讲，它们也可以用于解决回归问题），它通过切分类别之间的最大差距，将数据集分为多个类别。稍后我们将以图示的方式对这一概念进行更加清晰的认识。</p>
<h3 id="">什么是支持向量机？</h3>
<p><a href="https://en.wikipedia.org/wiki/Support_vector_machine">支持向量机</a>是一种监督机器学习模型，简称SVMs（Support vector machines），该类模型具有用于分析数据和识别模式的关联学习算法。</p>
<p>支持向量机既可用于分类问题也可用于回归问题。本文将专门研究使用支持向量机解决分类问题。</p>
<h3 id="">支持向量机如何工作？</h3>
<p>让我们一探究竟。</p>
<p>给定一组训练样本  – 标记每个样本属于两个类别中的一个  – 支持向量机训练算法建立模型。这样，输入新样本时，该模型便会将其归为两个类别之一。由此，支持向量机便成了一个非概率二进制线性分类器。</p>
<p>SVM进行分类预测时所依据的是几何学。</p>
<p>具体而言，SVM模型会将数据点映射为空间中的点并将每个单独的类别分隔开来，从而使划分的开放间隙尽可能宽。根据新数据点属于间隙的哪一侧，SVM将预测它们属于哪个类别。</p>
<p>下图是一个可视化示例，可以帮你更好理解支持向量机背后的机理：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/image-57.png" alt="image-57" width="600" height="400" loading="lazy"></p>
<p>如图所示，如果新数据点位于绿线的左侧，则SVM会将其标记为红色类别。反之，如果新数据点位于绿线的右侧，SVM则会将其标记为蓝色类别。</p>
<p>而这条绿线被称为<strong>超平面</strong>，这是支持向量机算法相关的一个重要术语。</p>
<p>让我们看一下支持向量机的另一种视觉表示形式：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/image-58.png" alt="image-58" width="600" height="400" loading="lazy"></p>
<p>这幅图中的超平面被标记为了<strong>最佳超平面</strong>。支持向量机理论将<strong>最佳超平面</strong>定义为能够最大化每个类别之间最接近的几个数据点之间间距的超平面。</p>
<p>如图所示，示例中的边距线共接触到三个数据点，其中两个来自红色类别，一个来自蓝色类别。这些触及边距线的数据点被称为<strong>支持向量</strong>，支持向量机也因其得名。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关支持向量机的知识总结：</p>
<ul>
<li>支持向量机是一种监督机器学习算法</li>
<li>支持向量机可用于解决分类和回归问题</li>
<li>支持向量机是如何利用（可最大化数据集中类别之间间距的）<strong>超平面</strong>对数据点进行分类的</li>
<li>支持向量机中，接触边距线的数据点被称为<strong>支持向量</strong>，支持向量机也因其得名。</li>
</ul>
<h1 id="k">K均值聚类</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/k-means-clustering-python/">K均值聚类</a>是一种可用于识别数据集内类似数据片段的机器学习算法。</p>
<h3 id="k">什么是K均值聚类？</h3>
<p>K均值聚类是一种无监督机器学习算法。</p>
<p>意思是说，接收未标记的数据后它会尝试将数据中类似的观测组归在一起。</p>
<p>K均值聚类算法在解决现实问题时非常有用。下面是该机器学习模型的几个应用举例：</p>
<ul>
<li>帮助营销团队对客户进行细分</li>
<li>文件分类</li>
<li>帮助亚马逊、UPS、联邦快递等公司最优化快递运输路线</li>
<li>识别、应对城市犯罪中心</li>
<li>专业运动分析</li>
<li>预防网络犯罪</li>
</ul>
<p>K均值聚类算法的主要功能是将数据集划分为不同的组，使每组内的观测结果彼此相似。</p>
<p>下图是其实际运作的可视化呈现：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/k-means-clustering.png" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>我们将在下一节探索K均值聚类背后的数学原理。</p>
<h3 id="k">K均值聚类算法如何运作？</h3>
<p>运行K均值聚类算法的第一步是选择要将数据划分为多少个集群。这一集群数便是该算法名称中的 <code>K</code> 值。</p>
<p>使用K均值聚类算法时，<code>K</code> 值的选择非常关键。稍后我们会讨论如何选择合适的 <code>K</code> 值。</p>
<p>下一步，必须随机将数据集中的每个数据点都分配到随机聚类中，这也是第一步任务的根源所在。然后运行以下迭代，直到集群停止更改：</p>
<ul>
<li>通过计算该集群内数据点的平均向量来计算每个集群的几何中心</li>
<li>将每个数据点重新分配到同其先前所在集群几何中心最接近的集群</li>
</ul>
<p>下面的动画是这一实践过程的示例。其中，K均值聚类算法的 <code>K</code> 值为 <code>3</code>。可以看到，每个集群的几何中心均由黑色的 <code>+</code> 字符表示。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/k-means-iteration.gif" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>如图所示，此迭代将一直持续到集群停止更改为止，这一停止更改意味着数据点将不会再被分配到新的集群。</p>
<h3 id="kk">为K均值聚类算法选择合适的K值</h3>
<p>要为K均值聚类算法选择一个合适的 <code>K</code> 值实际上相当困难。该值的“最佳”选择没有“标准”答案。</p>
<p>机器学习从业者经常使用的一种方法叫作<strong>肘部法</strong>。</p>
<p>使用肘部法时，第一步要先计算一组 <code>K</code> 值下K均值聚类算法的误差平方和（SSE，sum of squared errors）。SSE表示一个集群中的每个数据点与该集群几何中心之间的距离的平方之和。</p>
<p>举例来说，计算 SSE时，你可以选择 <code>K</code> 值为 <code>2</code>、<code>4</code>、<code>6</code>、<code>8</code>、<code>10</code>。</p>
<p>接着，将不同 <code>K</code> 值下的SSE绘制在图表中。可以看到，随着 <code>K</code> 值的增大，错误逐渐减少。</p>
<p>这也是符合常理的——数据集中创建的类别越多，每个数据点接近其特定集群几何中心的可能性就越大。</p>
<p>说了这么多，肘部法的用意就在于选择SSE下跌速度突然放缓处的 <code>K</code> 值，这种突然的放缓在图表中往往会生成了一个<code>肘</code>形。</p>
<p>下图是一个SSE和 <code>K</code> 的关系图表示例。图中，肘部法建议的 <code>K</code> 值大约为 <code>6</code>。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/elbow-method.png" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>值得注意的是，<code>6</code> 只是对最佳 <code>K</code> 值的一种估计。K均值聚类算法中并没有标准的“最佳” <code>K</code> 值。同机器学习领域的许多事物一样，这一最佳选择高度依赖具体情况。</p>
<h3 id="">本节小结</h3>
<p>以下是本节内容的小结：</p>
<ul>
<li>K均值聚类算法能够解决的无监督机器学习问题示例</li>
<li>K均值聚类算法的基础机理</li>
<li>K均值聚类算法的工作原理</li>
<li>如何利用肘方法为K均值聚类模型选择合适的 <code>K</code> 值</li>
</ul>
<h1 id="">主要组件分析</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/principal-component-analysis-python/">主要组件分析</a>用于将多特征数据集转换为具有较少特征的转换数据集，转换数据集中的每个新特征是预先数据集存在特征的线性组合。此转换数据集旨在更简单地解释原始数据集中的绝大部分变量。</p>
<h3 id="">什么是主要组件分析</h3>
<p>主要组件分析是一种用于检查变量集间相互关系的机器学习方法。</p>
<p>不同的是，主要组件分析研究一组变量，以确定这些变量的根本结构。</p>
<p>主要组件分析有时也被称为 <strong><strong>因子分析</strong></strong>。</p>
<p>基于此描述，你可能会感觉主要组件分析与线性回归非常相似。</p>
<p>但事实并非如此。其实，二者存在一些显著区别。</p>
<h3 id="">线性回归与主要组件分析的区别</h3>
<p>线性回归通过数据集确定一条最佳拟合线，而主要组件分析会确定出几条最拟合数据集的正交线。</p>
<p><strong>正交</strong>的意思可以理解为线与线之间呈直角（90度）相交——就像地图上指示北、东、南、西的方向坐标那样。</p>
<p>我们不妨通过下面的示例来帮助你更好的理解。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-principal-component-analysis/principal-component-analysis.png" alt="A principal component analysis" width="600" height="400" loading="lazy"></p>
<p>仔细看图中的轴标。</p>
<p>图中，x轴的主要组件代表了该数据集中73%的变量，y轴的主要组件则解释了数据集中23%的变量。</p>
<p>这就意味着数据集中仍有4%的变量未得到解释。通过在分析中添加更多主要组件，这一未解释变量的数量便能减至更少。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关主要组件分析的知识总结：</p>
<ul>
<li>主要组件分析致力于找到确定数据集变异性的正交因子</li>
<li>主要组件分析与线性回归之间的区别</li>
<li>正交主要组件在数据集内的可视化图示</li>
<li>添加更多主要组件可以帮助解释数据集中的更多变量</li>
</ul>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 文件系统是什么？介绍几种计算机文件系统及其运行原理 ]]>
                </title>
                <description>
                    <![CDATA[ 文件系统到底是个啥？单凭一句话来解释清楚这个问题可不容易。 所以我决定写下这篇文章来聊这个话题。写这篇帖子的初衷是想从一个比较宏观的角度去谈各种文件系统，但文中时不时也会提及一些微观层面的概念，但愿你读到时不会睡着。 :) 什么是文件系统？ 先来上一个简单的定义： 文件系统  决定着从存储设备中对文件进行 命名、 存储  和 检索  的方式。 当说到“文件系统”一词时，基于不同的语境，人们实际所指的可能是有关“文件系统”一词多重定义的某个方面 - 这也是让问题变得棘手的地方。 最后，你可能会“扪心自问”，文件系统到底是个啥？ 🤯 在本份指南，我将帮你理解这一问题，并助你搞定任何关于文件系统的谈话。此外，为了帮助你理解有关文件系统的一些概念，指南也会涉及分区和启动程式的讲解。 为保证指南的可操作性，在解释较低级别的结构或控制台命令时，我将专注Unix一类的环境下进行讲解。虽说如此，讲到的概念和其它环境及文件系统也是相通的。 你可能有这样一个疑问，我们在最初为什么需要文件系统？ 嗯，答案是，如果没有文件系统，存储设备会将大量数据简单地堆积存储，如此一来数据间便无法区分。  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/file-systems-architecture-explained/</link>
                <guid isPermaLink="false">604afaa16ce45b059394b7f6</guid>
                
                    <category>
                        <![CDATA[ 软件架构 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Fri, 24 Dec 2021 05:26:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/03/pexels-photo-6571015.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>文件系统到底是个啥？单凭一句话来解释清楚这个问题可不容易。</p>
<p>所以我决定写下这篇文章来聊这个话题。写这篇帖子的初衷是想从一个比较宏观的角度去谈各种文件系统，但文中时不时也会提及一些微观层面的概念，但愿你读到时不会睡着。 :)</p>
<h2 id="">什么是文件系统？</h2>
<p>先来上一个简单的定义：</p>
<p><strong>文件系统</strong> 决定着从存储设备中对文件进行 <strong>命名</strong>、 <strong>存储</strong> 和 <strong>检索</strong> 的方式。</p>
<p>当说到“文件系统”一词时，基于不同的语境，人们实际所指的可能是有关“文件系统”一词多重定义的某个方面 - 这也是让问题变得棘手的地方。</p>
<p>最后，你可能会“扪心自问”，文件系统到底是个啥？ 🤯</p>
<p>在本份指南，我将帮你理解这一问题，并助你搞定任何关于文件系统的谈话。此外，为了帮助你理解有关文件系统的一些概念，指南也会涉及分区和启动程式的讲解。</p>
<p>为保证指南的可操作性，在解释较低级别的结构或控制台命令时，我将专注Unix一类的环境下进行讲解。虽说如此，讲到的概念和其它环境及文件系统也是相通的。</p>
<h3 id="">你可能有这样一个疑问，我们在最初为什么需要文件系统？</h3>
<p>嗯，答案是，如果没有文件系统，存储设备会将大量数据简单地堆积存储，如此一来数据间便无法区分。</p>
<p>文件系统的命名源于过去的纸质数据管理系统。纸质系统中，我们将文档保留为纸质文件，然后将其存放在各个目录中。</p>
<p>试想如若没有分类，存放文件的房间便到处都会堆着杂乱无章的文件。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/pexels-photo-6571015-1.jpg" alt="pexels-photo-6571015-1" width="600" height="400" loading="lazy"></p>
<p>类似地，当存储设备缺少了文件系统时便会陷入同样的杂乱无序之中，存储设备本身也将毫无用处。</p>
<p>然而，有了文件系统之后，一切便会全然不同：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/pexels-photo-6571015-2.jpg" alt="pexels-photo-6571015-2" width="600" height="400" loading="lazy"></p>
<p>但也不能说文件系统的功能仅限于整理数据。</p>
<p>空间管理，元数据，数据加密，文件访问控制和数据完整性同样是文件系统施展拳脚的阵地。</p>
<h2 id="">一切始于分区</h2>
<p>首次使用之前，必须对存储设备进行 <strong>分区</strong> and <strong>格式化</strong>。</p>
<p>什么是分区？</p>
<p>分区是指将存储设备划分为几个 <em>逻辑区域</em> 的过程。分区后，就能像管理一个个彼此独立的存储设备一样对这些逻辑区域进行一一单独管理。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/partitions.jpg" alt="partitions" width="600" height="400" loading="lazy"></p>
<p>分区过程可通过操作系统提供的磁盘管理工具完成，亦或通过系统固件提供的基于文本\的CLI工具完成。</p>
<p>一台存储设备应至少有一个分区，视需求而定，也可进行更多分区。</p>
<p>举例来说，一个基础的Linux安装就具有三个分区：一个专门用于存储操作系统，一个专门用于存放用户文件，外加一个交换分区。</p>
<p>在Windows和Mac OS系统中并没有专门的交换分区，它们在操作系统所安装的分区内管理交换，但二者的分区布局与Linux相似。</p>
<p>那么我们又为什么要把存储设备进行分区呢？</p>
<p>原因在于，我们不想将整个存储空间作为单个单元或出于单个目的进行管理和使用。</p>
<p>这和我们划分工作空间的理念类似，你不也会把办公空间划分为会客室、会议室、团队办公区域吗？</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/office-space.jpeg" alt="office-space" width="600" height="400" loading="lazy"></p>
<p>在具有多个分区的计算机上，你可以安装多种操作系统，并且每次可以选择不同的分区来启动系统。</p>
<p>就连恢复和诊断实用程序也有它们的专属分区。</p>
<p>比方说你要在恢复模式下重新启动MacBook，你就需要在重启或启动MacBook后迅速按住 <code>Command + R</code> 不松。</p>
<p>这样一来，你就在指示操作系统使用包含恢复程序的分区启动MacBook。</p>
<p>然而，分区的意义不仅仅限于可安装多种操作系统和工具。通过分区，我们还可以将重要系统文件与普通文件分开存放。</p>
<p>这样一来，无论你在计算机上安装了多少个大型游戏，都不会对操作系统的性能产生任何影响， - 因为它们和系统文件存放在不同的分区中。</p>
<p>再拿办公室那个例子来说，如果将一个呼叫中心团队和一个技术团队安排在同一个办公区域，那么如此对两个团队的生产力产生的影响都会是负面的，因为这两个团队都有自己独特的效率需求。</p>
<p>好比说，技术团队会更需要一个安静的工作环境。</p>
<p>有一些操作系统，比如Windows，会对磁盘分区分配以不同的字母编号（A，B，C，D）。例如，Windows上 <em>主分区</em> （Windows所安装的分区）的命名为 <strong>C</strong>：或驱动器C。</p>
<p>而在Unix一类的操作系统中，分区则以根目录下的普通目录显示，这点在后面会介绍到。</p>
<p>至于现在吗，我们要先绕个弯 ↩️</p>
<p>在下一小节，我们将更深入地理解分区，内容涉及 <strong>系统固件</strong> and <strong>启动程式</strong> 这两个概念，它们将改变你对文件系统的看法。</p>
<p>准备好了吗？</p>
<p>一起看看吧！ &nbsp;🏊‍♂️</p>
<h2 id="">分区方案，系统固件和启动程式</h2>
<p>在对存储设备进行分区时，有两种分区方法可供选择：</p>
<ul>
<li><strong>主引导记录（MBR）方案</strong></li>
<li><strong>GUID分区表（GPT）方案</strong></li>
</ul>
<p>无论选择哪种方案，存储设备上的前几个存储块所存储的始终都是有关分区的关键数据。</p>
<p>利用这些数据结构，系统的 <em>固件</em> 便能启动操作系统。</p>
<p>等等，你可能会问，啥又是系统固件？</p>
<p>解释如下：</p>
<p>固件是嵌入电子设备中以操作该设备或引导另一个程序来操作该设备的低级软件。</p>
<p>固件存在于计算机，外围设备（键盘，鼠标和打印机）中，甚至存在于家用电器中。</p>
<p>在计算机中，固件为诸如操作系统之类的复杂软件提供了启动和使用硬件组件的标准环境。</p>
<p>但是，在打印机等较为简单的系统上，固件却是设备的主要操作系统。打印机菜单就是其固件的人机界面。</p>
<p>计算机固件依据以下两个规范执行：</p>
<ul>
<li><strong>基本输入/输出（BIOS）</strong></li>
<li><strong>统一可扩展固件接口（UEFI）</strong></li>
</ul>
<p>固件（或基于BIOS或基于UEFI）存储在非易失性存储器中，例如连接到主板的Flash ROM（闪存）。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/5794340306_caef1e6960_b.jpg" alt="5794340306_caef1e6960_b" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.flickr.com/photos/computerhotline/5794340306"><strong>BIOS</strong></a>，图源： <a href="https://www.flickr.com/photos/computerhotline/">Thomas Bresson</a>， 许可： <strong><a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a></strong></p>
<p>当打开计算机电源时，固件是第一个运行的程序。</p>
<p>固件的任务（除其它事项外）包括启动计算机，运行操作系统，并将整个系统的控制权传递给操作系统。</p>
<p>固件还可以（在连网环境下）运行预操作系统，例如恢复或诊断工具，甚至还可以运行特殊的壳层来运行基于文本的命令。</p>
<p>在操作系统的徽标出现之前，你所看到的那几个页面就是计算机固件的输出，该输出用于验证硬件组件和内存的运行状况。</p>
<p>初始检查完成后会发出“哔”的一声，表明一切正常。</p>
<p>MBR分区方案是BIOS规范的一部分，由基于BIOS的固件使用。</p>
<p>在采用MBR分区方案的磁盘上，存储设备上的第一个扇区存储着启动系统所需的基本数据。</p>
<p>这一扇区被称为MBR（主引导扇区）。</p>
<p>MBR内存有以下信息：</p>
<ul>
<li>引导程序，它是（机器代码中的）一个 <strong>简单程序</strong>，用于启动引导过程的第一阶段</li>
<li><strong>分区表</strong>，其中包含有关分区的信息。</li>
</ul>
<p>MBR分区磁盘上，基于BIOS的固件与基于UEFI的固件会以不同的方式引导系统。</p>
<p>以下是其工作过程：</p>
<p>系统启动后，BIOS固件将启动并将MBR的内容加载到内存中，并在其中运行引导加载程序。</p>
<p>通过将引导加载程序和分区表放置在MBR之类的预定义位置中，便可使BIOS来引导系统，而无需处理任何文件。</p>
<p>MBR中的引导加载程序代码占用MBR 512字节空间中的434字节至446字节，另有64字节分配给了分区表，分区数量最多为四个。</p>
<p>446字节并不足以容纳很多的代码。正因如此，复杂的引导加载程序（例如Linux上的GRUB 2）会将其功能切分为多个部分或多个阶段。</p>
<p>其中，最小的部分被称为第一阶段引导加载程序，位于MBR内。</p>
<p>第一阶段引导加载程序将启动引导过程的下一个阶段。</p>
<p>MBR之后紧接第一个分区之前，还有一个很小的空间，大约1MB，被称为 <strong>MBR间隙</strong>。必要时，它也可以用来放置一部分引导加载程序。</p>
<p>利用MBR间隙，引导加载程序（例如GRUB 2）存储其功能的另一阶段。GRUB将此称为引导加载程序的 <em>第1.5个阶段</em> ，其中包含文件系统驱动程序。</p>
<p>1.5阶段使GRUB的下一阶段可以处理文件，而不再是再向第一阶段引导加载程序那样从存储设备中加载原始数据。</p>
<p>第二阶段引导加载程序，现在为file-system-aware，可以加载操作系统的引导加载程序文件来引导操作系统。</p>
<p>此时也是操作系统徽标逐渐淡出的时候...</p>
<p>下面是MBR分区存储设备的图示：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/mbr-partition.jpg" alt="mbr-partition" width="600" height="400" loading="lazy"></p>
<p>如果我们放大MBR这部分，其内容将显示如下：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/mbr.jpg" alt="mbr" width="600" height="400" loading="lazy"></p>
<p>尽管MBR非常简单并得到了广泛兼容，但它仍存在一些局限。</p>
<p>MBR的数据结构将分区数量限制为了仅 <em>四个主要</em> 分区。</p>
<p>一个常见的解决方法是在主分区旁创建一个 <em>拓展</em> 分区。总之，只要分区总数不超过四个即可。</p>
<p>扩展分区又可以分为多个 <em>逻辑分区</em>。</p>
<p>进行分区时，你可以在主分区和扩展分区之间进行选择。</p>
<p>解决此问题后，我们还面临着第二个限制。</p>
<p>每个分区的空间最大为2TiB。</p>
<p>等等，这还不只！</p>
<p>MBR扇区的内容还没有备份 😱，也就是说一旦MBR遭到意外损坏，我们的存储设备就变成废铁了。</p>
<p>比起MBR， <strong>GPT</strong> 分区方案要更复杂，但没有MBR那些限制。</p>
<p>比如，只要操作系统允许，你可以拥有尽可能多的分区。</p>
<p>而且每一个分区的大小都可以达到市场上最大的存储设备的大小， - 实际上还可以更大。</p>
<p>GPT正在逐步取代MBR，尽管旧PC和新PC仍广泛支持MBR。</p>
<p>如前所述，GPT是UEFI规范的一部分，该规范正在替代旧的BIOS。</p>
<p>这意味着基于UEFI的固件将使用GPT分区的存储设备来执行引导。</p>
<p>现在，许多固件和操作系统都支持UEFI，并使用GPT方案对存储设备进行分区。</p>
<p>在GPT分区方案下，出于与基于BIOS\的系统兼容的考虑，保留了存储设备的第一个扇区。这是因为某些系统可能仍使用基于BIOS\的固件，但却具有GPT\分区的存储设备。</p>
<p>这一扇区被称为 <strong>保护性MBR。</strong> （这也是第一阶段引导加载程序在MBR\分区的磁盘中存储的位置）</p>
<p>第一个扇区之后，将存储GPT数据结构，包括 <strong>GPT标头</strong> 和 <strong>分区表条目</strong>。</p>
<p>作为备份，GPT条目和GPT标头也会存储在存储设备的最后，这样即便主副本被损坏，也可以将其恢复。此备份被称为 <strong>辅助GPT。</strong></p>
<p>下面是GPT分区存储设备的图示：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/GUID_Partition_Table_Scheme.svg" alt="GUID_Partition_Table_Scheme" width="600" height="400" loading="lazy"></p>
<p><strong><a href="https://commons.wikimedia.org/wiki/File:GUID_Partition_Table_Scheme.svg">GUID Partition Table Scheme</a></strong> ，图源： <a href="https://en.wikipedia.org/wiki/User:Kbolino">Kbolino</a>， 许可： <strong><a href="https://creativecommons.org/licenses/by-sa/2.5/">CC BY-SA 2.5</a></strong></p>
<p>在GPT中，所有的引导服务（引导加载程序，引导管理器，预操作系统环境和壳层）都位于名为 **EFI系统分区（简称ESP）**的特殊分区中，UEFI固件可以使用该分区。</p>
<p>ESP甚至拥有自己专属的文件系统，该系统是 <strong>FAT</strong>的一个特定版本。在Linux上，ESP存储在 <code>/sys/firmware/efi</code> 路径下。</p>
<p>如果你在自己的系统上找不到此路径，那你的固件可能是基于BIOS的固件。</p>
<p>想要查看的话，你可以尝试将目录更改为ESP挂载点，如下所示：</p>
<pre><code>cd /sys/firmware/efi
</code></pre>
<p>基于UEFI\的固件会假定其存储设备使用GPT进行分区，并在GPT分区表中查找ESP。</p>
<p>找到EFI分区后，该固件将查找已配置的引导加载程序，该引导加载程序通常是以 <code>.efi</code> 结尾的文件。</p>
<p>基于UEFI\的固件从 <strong>NVRAM</strong> （一种非易失性RAM）中获取引导配置。NVRAM内有引导设置以及前往操作系统引导加载程序的路径。</p>
<p>如果进行了相应的配置，UEFI固件也能够执行BIOS-boot，进而从MBR磁盘启动系统。</p>
<p>在Linux上，你可以使用 <code>parted</code> 命令来查看用于存储设备的分区方案。</p>
<pre><code>sudo parted -l
</code></pre>
<p>命令输出如下：</p>
<pre><code>型号：Virtio Block设备（virtblk）
磁盘 /dev/vda: 172GB
扇区大小（逻辑/物理）: 512B/512B
分区表: gpt
磁盘标志:

编号  开始   结束     大小    文件系统  名称  标志
14      1049kB  5243kB  4194kB                     bios_grub
15      5243kB  116MB   111MB   fat32              msftdata
 1      116MB   172GB   172GB   ext4

</code></pre>
<p>根据上面的输出可知，示例存储设备的ID为 <code>/dev/vda</code>，容量为172GB。</p>
<p>该存储设备基于GPT进行分区，共具有三个分区，其中第二和第三分区分别基于FAT32和EXT4文件系统进行格式化。</p>
<p>该固件具有BIOS GRUB分区，表明其为基于BIOS的固件。</p>
<p>让我们借助 <code>dmidecode</code> 命令来确认这一点，输入如下：</p>
<pre><code>sudo dmidecode -t 0
</code></pre>
<p>输出结果如下：</p>
<pre><code># dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.

...
</code></pre>
<p>✅ 我们的判断没错！</p>
<p>完成分区后，就要对分区进行格式化了。</p>
<p>大多数操作系统都支持基于一组文件系统来格式化分区。</p>
<p>例如，在Windows上格式化分区时，可以选择 <strong>FAT32</strong>， <strong>NTFS</strong> 或 <strong>exFAT</strong>。</p>
<p>格式化还会涉及创建各种 <strong>数据结构</strong> 和用于管理分区内文件的元数据。</p>
<p>这些数据结构便是文件系统诸多定义中的一个方面。</p>
<p>我们拿NTFS文件系统为例吧。</p>
<p>在将一个分区格式化为NTFS时，格式化过程会将关键NTFS数据结构以及 **主引导表（MFT）**放置在该分区上。</p>
<p>好了，关于分区和启动已经讲得够多了，我们还是绕回到文件系统吧。</p>
<h2 id="">文件系统一开始是怎么出现的，如今又发展到了什么地步</h2>
<p>文件系统由一套数据结构、连接电路、抽象概念和API构成。它们协同工作，步调一致地管理任何类型存储设备上的任何类型文件。</p>
<p>每种操作系统会使用特定的文件系统来管理文件。</p>
<p>过去，Microsoft曾在 <strong>MS-DOS</strong> 和 <strong>Windows 9x</strong> 家族系统中使用过 <strong>FAT</strong> （FAT12，FAT16和FAT32）。</p>
<p>但自Windows  <strong>NT 3.1</strong>  开始，Microsoft研发了 <strong>新技术文件系统（NTFS）</strong>。比起FAT32，NTFS具有诸多多优势，如支持更大的文件，更长的文件名，数据加密，访问管理，日志记录等等。</p>
<p>从那时起，NTFS就一直是Window NT家族（2000，XP，Vista，7、10等）的默认文件系统。</p>
<p>不过，NTFS并不适用于非Windows环境。</p>
<p>例如，在Mac OS上，你 <strong>只能读取</strong> NTFS格式存储设备（如闪存）上的内容，但无法写入任何内容，除非安装具有写入支持的NTFS驱动程序。</p>
<p>2006年，Microsoft创建 <strong>扩展文件分配表（exFAT）</strong> 文件系统，exFAT堪称NTFS的精简版。</p>
<p>exFAT的设计面向对象是大容量可移动设备（例如外部硬盘，USB驱动器和存储卡）。</p>
<p>它也是 <strong>SDXC</strong> <strong>卡</strong> 使用的默认文件系统。</p>
<p>与NTFS不同，exFAT在非Windows环境（包括Mac OS）上也支持 <strong>读写</strong> ，这也使其成为最佳的高容量可移动存储设备跨平台文件系统。</p>
<p>因此基本上可以这么说，如果你想同时在Windows、Mac和Linux上使用同一块可移动磁盘，就需要将其格式化为exFAT格式。</p>
<p>多年以来，Apple也在研发利用自己的各种文件系统，这就包括<br>
<strong>分层文件系统（HFS）</strong>, <strong>HFS+</strong> 以及最近推出的 <strong>苹果文件系统（APFS）</strong>.</p>
<p>和NTFS类似，APFS也是一个日志文件系统。自苹果在2017年推出 <strong>OS X High Sierra</strong> 以来，APFS一直使用至今。</p>
<p>文件系统中的 <strong>扩展文件系统（ext）</strong> 家族是专门为Linux内核（即Linux操作系统的核心）创建的。</p>
<p><strong>ext</strong> 的第一版发布于1991年，但不久便在1993年被 <strong>第二代扩展文件系统</strong> （<strong>ext2）</strong> 取代。</p>
<p>进入21世纪，针对Linux开发的具有日志功能的 <strong>第三代扩展文件系统</strong> （<strong>ext3）</strong> 和 <strong>第四代扩展文件系统 （ext4）</strong> 也相继出现。</p>
<p>如今，<strong>ext4</strong> 成为Linux的许多发行版本中的默认文件系统，这就包括 <a href="https://en.wikipedia.org/wiki/Debian">Debian</a> 和 <a href="https://en.wikipedia.org/wiki/Ubuntu">Ubuntu</a>。</p>
<p>在Linux上，你可以输入 <code>findmnt</code> 命令来陈列出ext4\格式的分区：</p>
<pre><code>findmnt -lo source,target,fstype,used -t ext4
</code></pre>
<p>输出结果如下：</p>
<pre><code>SOURCE    TARGET FSTYPE  USED
/dev/vda1 /      ext4    3.6G
</code></pre>
<h2 id="">文件系统的体系结构</h2>
<p>一个操作系统中的文件系统有三层结构：</p>
<ul>
<li><strong>物理文件系统</strong></li>
<li><strong>虚拟文件系统</strong></li>
<li><strong>逻辑文件系统。</strong></li>
</ul>
<p>不同层次之间既可彼此独立存在，也可紧密耦合为诸多抽象。</p>
<p>当人们谈论文件系统时，他们所指的就是这三层中的某一层。</p>
<p>尽管这些层次在不同操作系统之间有所不同，但这些概念基本是相通的。</p>
<p>物理层是文件系统的具体实现，负责数据存储和检索，以及存储设备上的空间管理（或者更确切地说是分区）。</p>
<p>物理文件系统通过 <a href="https://www.skillupp.tech/books/essentials-of-computing-for-the-new-coders#device-drivers">设备驱动程序</a>与实际的存储硬件进行交互。</p>
<p>下一层是虚拟文件系统，简称 <strong>VFS</strong>。</p>
<p>虚拟文件系统提供了一种支持在操作系统上安装的各类文件系统的 <strong>一致视图</strong>。</p>
<p>那么，这是否意味着一个操作系统可以同时使用多种文件系统呢？</p>
<p>答案是肯定的！</p>
<p>可移动存储工具通常都具有与计算机不同的文件系统。</p>
<p>例如，在使用NTFS作为主要文件系统的Windows环境下，闪存可能已格式化为exFAT或FAT32。</p>
<p>也就是说，操作系统需要能够在处理不同程序（文件浏览器和其他处理文件的应用）和不同的挂载文件系统（例如NTFS，APFS，EXT4， FAT32，exFAT和UDF）时提供一种 <strong>一致视图</strong>。</p>
<p>比如说，当你打开文件资源管理器时，你可以从EXT4文件系统复制一份图像，然后将其直接粘贴到exFAT格式的闪存中，而不必去管文件在后台进行了不同的管理。</p>
<p>VFS堪称连接用户（你）和后台文件系统的“便利层”。</p>
<p>它制定了一种 <em>合同</em> ，要求所有的物理文件系统都必须以操作系统支持的方式工作。</p>
<p>但是，这种合规性并未内置于文件系统的核心中，也就是说，文件系统的源代码并不包含对各种操作系统的支持。</p>
<p>事实是，这些源代码利用 <strong>文件系统驱动程序</strong> 来遵守VFS的规则。</p>
<p>驱动程序是一种能够使软件与另一个软件或硬件进行通信的特殊程序。</p>
<p>但用户程序不会直接与VFS交互。</p>
<p>而是利用位于程序和VFS之间的统一API实现交互。</p>
<p>没错，我们接下来要说的就是逻辑文件系统。</p>
<p>逻辑文件系统是文件系统中面向用户的一层。通过提供API，它能使用户程序无需处理任何存储硬件便能执行各种文件操作，例如 <code>打开</code>， <code>读</code>， <code>写</code>。</p>
<p>话说回来，VFS也在逻辑文件系统（程序与之交互）和一组物理文件系统之间搭建了桥梁。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/filesystem-1.jpg" alt="filesystem-1" width="600" height="400" loading="lazy"></p>
<p>文件系统层的高级架构</p>
<h3 id="">什么叫挂载文件系统？</h3>
<p>在Unix一类的系统上，VFS为每个分区或可移动存储设备都分配一个 <strong>device ID</strong> （如 <code>dev/disk1s1</code>）。</p>
<p>接着，它会创建一个 <strong>虚拟目录树</strong> ，并将每个设备的内容按照单独的目录放在该目录树下。</p>
<p>而在根目录树下给存储设备分配目录的活动就是 <strong>挂载</strong>，分配的目录被称为 <strong>挂载点</strong>。</p>
<p>就是说，在Unix一类的操作系统上，所有分区和可移动存储设备看起来就都好像是根目录下的目录。</p>
<p>例如，在Linux上，除非有所配置，否则默认情况下可移动设备（例如存储卡）的挂载点就是根目录下的 <code>/media</code>。</p>
<p>也就是说，当将闪存连接到一个操作系统时，它会被 <em>自动挂载</em> 在默认挂载点（在Linux环境下就是 <code>/media</code>），其内容也将在 <code>/media</code> 目录下显示。</p>
<p>但是，有些时后会需要你手动挂载文件系统。</p>
<p>在Linux上，可进行如下操作：</p>
<pre><code>mount /dev/disk1s1 /media/usb
</code></pre>
<p>在上面的命令中，第一个参数（<code>/dev/disk1s1</code>）是设备ID，第二个参数（<code>/media/usb</code>）是挂载点。</p>
<p>请注意，挂载点应当已经作为目录存在。</p>
<p>如果没有，则必须先创建它：</p>
<pre><code>mkdir -p /media/usb
mount /dev/disk1s1 /media/usb
</code></pre>
<h2 id="">文件元数据</h2>
<p>文件元数据是一种数据结构，存储 <strong>有关文件的数据</strong>，比如：</p>
<ul>
<li>文件大小</li>
<li>时间戳，如创建日期，上次访问日期和修改日期</li>
<li>文件所有者</li>
<li>文件权限状态（“谁”可以“如何”处理文件）</li>
<li>分区上的哪些块分配给了文件</li>
<li>等等</li>
</ul>
<p>不过，元数据不会与文件内容一起存储，而是存储在磁盘上的其它位置并与文件关联。</p>
<p>在Unix一类的系统中，元数据以一种特殊的数据结构形式存储，被称为 <strong>索引节点</strong>。</p>
<p>索引节点由唯一的 <em>索引节点号</em> 标识。</p>
<p>索引节点与 <em>索引节点表</em> （一种数据结构）中的文件关联。</p>
<p>存储设备上的每个文件都有一个索引节点，该索引节点包含有关文件的信息，包括分配给该文件的区块地址。</p>
<p>在一个ext4索引节点中，所分配区块的地址以索引节点中的 <strong>区段</strong> （一组数据结构）形式存储。</p>
<p>每个区段包含分配给文件的第一个数据块的地址，以及文件已占用的下面几个区块的数量。</p>
<p>如果文件是分段存储的，每个分段都会有其专属的范围。</p>
<p>这与ext3的指针系统不同，后者是通过间接块指针指向各个数据块的。</p>
<p>使用区段数据结构可使文件系统指向大型文件，但同时又不会占用太多空间。</p>
<p>每当请求文件时，其名称都会首先解析为一个索引节点号。</p>
<p>有了索引节点号之后，文件系统便会从存储设备中获取相应的索引节点。</p>
<p>提取索引节点过后，文件系统便开始根据索引节点中存储的数据块来组成文件。</p>
<p>在Linux上，你可以将 <code>df</code> 命令与 <code>-i</code> 参数一起使用，以查看分区中的索引节点（节点总计，已使用节点和可用节点）：</p>
<pre><code>df -i
</code></pre>
<p>输出结果如下：</p>
<pre><code>udev           4116100    378 4115722    1% /dev
tmpfs          4118422    528 4117894    1% /run
/dev/vda1      6451200 175101 6276099    3% /
</code></pre>
<p>可以看到，分区 <code>/dev/vda1</code> 的索引节点总数为6451200，其中3%（175101个）已被使用。</p>
<p>此外，如果要查看与目录中的文件相关联的索引节点，则可以使用带有 <code>-il</code> 参数的 <code>ls</code> 命令。</p>
<pre><code>ls -li
</code></pre>
<p>输出结果如下：</p>
<pre><code>1303834 -rw-r--r--  1 root www-data  2502 Jul  8  2019 wp-links-opml.php
1303835 -rw-r--r--  1 root www-data  3306 Jul  8  2019 wp-load.php
1303836 -rw-r--r--  1 root www-data 39551 Jul  8  2019 wp-login.php
1303837 -rw-r--r--  1 root www-data  8403 Jul  8  2019 wp-mail.php
1303838 -rw-r--r--  1 root www-data 18962 Jul  8  2019 wp-settings.php
</code></pre>
<p>第一列是与每个文件关联的索引节点号。</p>
<p>分区上的索引节点数是在格式化分区时确定的。也就是说，只要设备上还有可用空间并且有未使用的缩阴节点，文件就可以存储在存储设备上。</p>
<p>事实上，个人版的Linux操作系统不太可能会耗尽索引节点。但是，企业在使用需要处理大量文件的服务（例如邮件服务器）时，就必须聪明地管理其索引节点的配额了。</p>
<p>然而，在NTFS上，元数据的存储方式会有所不同。</p>
<p>NTFS将文件信息保存在 <strong>主引导表（MFT）</strong> 这一特殊数据结构中。</p>
<p>MFT中，每个文件都至少具有一个条目，和索引节点类似，其中包含有关相应文件的所有内容，包括其在存储设备上的位置。</p>
<p>在大多数操作系统上，你也可以从图形用户界面访问常规文件元数据。</p>
<p>例如，当在Mac OS上右键单击一个文件并选择“获取信息”（即Windows中的“属性”）时，将回弹出一个窗口，其中包含有关该文件的信息。该信息便是从相应文件的元数据中获取的。</p>
<h2 id="">空间管理</h2>
<p>存储设备内分为大小固定的区块，称为 <strong>扇区</strong>。</p>
<p>扇区是存储设备上的 <strong>最小存储单元</strong>，大小介于512字节和4096字节之间（高级格式）。</p>
<p>然而，文件系统实际使用高级概念 <strong>区块</strong> 作为存储单元。</p>
<p>块是对物理扇区的抽象，由多个扇区组成。</p>
<p>根据文件的大小，文件系统为每个文件分配一个或多个块。</p>
<p>进行空间管理时，文件系统很明确分区上每个 <em>已使用</em> 和 <em>未使用</em> 的块，因此便可以为新文件分配空间或在收到请求时获取现有文件。</p>
<p>ext4格式的分区中最基本的存储单元就是块。</p>
<p>为便于管理，连续的块会被集中在一起，组成 <strong>块组</strong>。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/block-group.jpg" alt="block-group" width="600" height="400" loading="lazy"></p>
<p>ext4分区中的块组图示</p>
<p>每个块组都有自己的数据结构和数据块。</p>
<p>H下面是一个块组可以包含的数据结构：</p>
<ul>
<li><strong>超级块：</strong> 元数据存储库，其中包含有关整个文件系统的元数据，例如文件系统中的总块数，块组中的块总数，索引节点等。但并非所有的块组都包含超级块。一定数量的块组会存储超级副本作为备份。</li>
<li><strong>组描述符：</strong> 组描述符同样包含每个块组的簿记信息</li>
<li><strong>索引节点位图：</strong> 每个块组都有自己的索引节点配额用于存储文件。块位图是一种数据结构，用于标识块组中 <em>已使用</em> 和 <em>未使用</em> 的索引节点。<code>1</code> 表示已使用的索引节点对象，<code>0</code> 表示未使用的索引节点对象。</li>
<li><strong>块位图:</strong> 一种数据结构，用于标识块组中已使用和未使用的数据块。<code>1</code> 表示已使用的数据块，<code>0</code> 表示未使用的数据块。</li>
<li><strong>索引节点表：</strong> 一种数据结构，用于定义文件及其索引节点的关系。存储在该区域中的索引节点的数量与文件系统使用的块大小有关。</li>
<li><strong>数据块：</strong> 存储文件内容的块组中的区域。</li>
</ul>
<p>与ext3相比，Ext4文件系统又往前更进一步，将块组集合成为了一个更大的组，被称为 <em>弹性块组。</em></p>
<p>每个弹性块组包含多个数字块组。</p>
<p>每个块组的数据结构（包括块位图，索引节点位图和索引节点表）被 <em>串联</em> 在一起并存储在相应的弹性块组内的 <em>首个块组</em> 中。</p>
<p>通过将所有数据结构连接到一个块组（第一个）中，便可以释放每个弹性块组内其它块组上的更多连续数据块。</p>
<p>第一个块组的图示如下：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/block-group-detail.jpg" alt="block-group-detail" width="600" height="400" loading="lazy"></p>
<p>ext4弹性块组中第一个块的图示</p>
<p>文件被写入磁盘时，会被写入某个块组中的一个或多个块。</p>
<p>通过在块组级别管理文件，可显著提高文件系统的性能。</p>
<h3 id="vs">文件大小vs占用磁盘大小</h3>
<p>你是否曾注意到文件浏览器会为每个文件显示两种大小： <strong>文件大小，</strong> 和 <strong>占用磁盘大小</strong>。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/disksize-1.jpg" alt="disksize-1" width="600" height="400" loading="lazy"></p>
<p>文件大小和占用磁盘大小</p>
<p>你可能会问，为什么文件大小和占用磁盘大小会略有不同？</p>
<p>解释如下：</p>
<p>我们已经知道，基于文件大小，一个文件会被分配一个或多个块。</p>
<p>而一个块是可以分配给文件的最小空间，这就意味着那些仅被部分占用的块的剩余空间是不能被另一个文件使用的。</p>
<p>由于文件的大小 <em>并不是块的整数倍</em>，因此很有可能最后一个块仅被部分占用，而该块剩余的空间将保持未使用的状态或会被零填充。</p>
<p>因此，“文件大小”基本上是指文件的实际大小，而“占用磁盘大小”是指文件已占用的空间，即使它没有完全使用这些空间。</p>
<p>在Linux上，你可以使用 <code>du</code> 命令来查看文件大小，</p>
<pre><code>du -b "some-file.txt"

</code></pre>
<p>输出结果如下：</p>
<pre><code>623 icon-link.svg
</code></pre>
<p>并查看其占用磁盘大小：</p>
<pre><code>du -B 1 "icon-link.svg"
</code></pre>
<p>输出结果如下：</p>
<pre><code>4096    icon-link.svg
</code></pre>
<p>可以看出，该文件被分配的块约为4kb，而文件的实际大小为623字节。</p>
<h3 id="">什么是磁盘碎片？</h3>
<p>随着时间的推移，新文件会被写入磁盘，现有文件或增大，或缩小，或被删除。</p>
<p>在存储工具中频繁进行这些更改便会在文件之间留下许多小的间隙（空白空间）。</p>
<p>当文件作为片段存储在存储设备上时便会产生文件碎片，这是因为文件系统已不能找到足够多的连续块来将整个文件存储在一行中。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/disk_image-1.jpg" alt="disk_image-1" width="600" height="400" loading="lazy"></p>
<p>碎片和非碎片文件的示例</p>
<p>让我们通过一个示例来更好地说明这一点。</p>
<p>假设你有一个名为 <code>myfile.docx</code> 的Word文档。</p>
<p>起初，<code>myfile.docx</code> 存储在磁盘上的几个连续块中，比方说就是 <code>LBA250</code>， <code>LBA251</code> 和 <code>LBA252</code> （这种命名方式是假设的）这几个块。</p>
<p>现在，如果你将更多内容添加到了 <code>myfile.docx</code> 中并将其保存，该文档将会在存储工具上占用更多的块。</p>
<p>考虑到 <code>myfile.docx</code> 当前存储在 <code>LBA250</code>， <code>LBA251</code>， 和 <code>LBA252</code> 上，因此，根据所需空间，新增加的内容最好存储在紧跟其后的 <code>LBA253</code> 等几个块上。</p>
<p>但是，如果现在 <code>LBA253</code> 已经被另一个文件占用（可能是另一个文件的第一个块）了，那么 <code>myfile.docx</code> 的新增内容就只能存储在磁盘上其它位置的块中，比方说是 <code>LBA312</code> 和 <code>LBA313</code>。</p>
<p><a href="https://www.freecodecamp.org/news/p/4521a4e0-fc09-4f63-80bb-6c01f617c4db/myfile.docx"><code>myfile.docx</code></a> got fragmented 💔.</p>
<p>文件碎片会给文件系统带来运行负担，因为每次用户程序请求碎片文件时，文件系统都需要从磁盘上的各个位置收集文件的每个片段。</p>
<p>这一过程也适用于将文件保存回磁盘的情况。</p>
<p>即便是第一次将文件写入磁盘时，也有可能发生碎片，原因可能是因为文件很大，但存储设备上已没有剩余空间。</p>
<p>碎片也是某些操作系统随着文件系统老化而性能变慢的原因之一。</p>
<h3 id="">如今我们还有必要担心碎片的问题吗？</h3>
<p>一个直截了当的回答是：再也不用了！</p>
<p>利用智能算法，时下的文件系统会尽可能避免（或及早发现）碎片的产生。</p>
<p>Ext4还会进行所谓的 <strong>预分配，</strong> 就是为文件提前保留一些块以备不时之需，以此来确保即便使用了一段时间文件也不会产生碎片。</p>
<p><em>预分配块</em> 的数量在文件索引节点对象区段的 <em>长度字段</em> 中有所定义。</p>
<p>此外，Ext4还会使用一种名为 <strong>延迟分配</strong> 的技术。</p>
<p>该技术不再在写入过程中一次写入一个数据块，而是先将分配请求累积在缓冲区。然后在分配完成后再将数据写入磁盘。</p>
<p>这种方法无需再在回应每个“写”请求时都调用块分配器，从而有助于文件系统在分配可用空间时做出更好的选择，如将大文件与小文件分开放置。</p>
<p>想象如果一个小文件存在了两个大文件之间。那如果删除了这个小文件，则这两个大文件之间便会滞留出一个小空间。</p>
<p>而当大文件和小文件保存在存储设备上的不同区域时，即便删除了小文件，也不会在存储设备上留下很多空白。</p>
<p>通过这种方式散布文件时，还可以在数据块之间留出足够的空隙，进而有助于文件系统更轻松地管理并避免产生碎片。</p>
<p>延迟分配同样可以有效减少碎片并提高系统性能。</p>
<h2 id="">目录</h2>
<p>目录（Windows中的文件夹）是一种特殊文件，在对文件和目录进行分组时发挥着 <strong>逻辑容器</strong> 的作用。</p>
<p>目录和文件的处理方式在NTFS和Ext4上是相同的。也就是说，目录只是具有自己的索引节点（在Ext4上）或MFT条目（在NTFS上）的文件。</p>
<p>目录的索引节点或MFT条目包含有关该目录的信息，并指向与该目录相关联文件的条目集合。</p>
<p>实际上，这些文件并不包含在目录中，但它们却以某种方式显示为了目录的子级，从而与目录相关联，就像是一个文件浏览器。</p>
<p>这些条目被称为 <strong>目录条目。</strong> 目录条目内含有映射到其索引节点或MFT条目的文件名。</p>
<p>除了目录条目，还存在另外两种条目，一个是 <code>.</code>，指向目录本身，一个是 <code>..</code>，指向其上级目录。</p>
<p>在Linux上，可以使用 <code>ls</code> 命令在目录中查看目录条目及其关联的索引节点编号：</p>
<pre><code>ls -lai
</code></pre>
<p>输出结果如下：</p>
<pre><code>63756 drwxr-xr-x 14 root root   4096 Dec  1 17:24 .
     2 drwxr-xr-x 19 root root   4096 Dec  1 17:06 ..
 81132 drwxr-xr-x  2 root root   4096 Feb 18 06:25 backups
 81020 drwxr-xr-x 14 root root   4096 Dec  2 07:01 cache
 81146 drwxrwxrwt  2 root root   4096 Oct 16 21:43 crash
 80913 drwxr-xr-x 46 root root   4096 Dec  1 22:14 lib

 ...
</code></pre>
<h2 id="">文件命名规则</h2>
<p>有些文件系统会对文件命名实加一些限制。</p>
<p>这种限制可以是 <strong>文件名的长度</strong> 或是 <strong>文件名区分大小写</strong>。</p>
<p>例如，在NTFS文件系统中，<code>MyFile</code> 和 <code>myfile</code> 所指的是同一文件，但在EXT4上，它们便指向不同的文件。</p>
<p>你可能会问，这有什么大不了的？</p>
<p>想象一下，假如你正在一台Windows环境的计算机上创建网页。网页内容包含你的品牌徽标，这一徽标为PNG文件，如下所示：</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Products - Your Website&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;!--SOME CONTENT--&gt;
        &lt;img src="img/logo.png"&gt;
        &lt;!--SOME MORE CONTENT--&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>即便该徽标文件的实际命名为 <code>Logo.png</code> （注意这里是大写的字母 <strong>L</strong>），你也仍可以在浏览器上打开网页时看到该徽标。</p>
<p>但是在将该网页部署到Linux服务器上进行实时查看时，徽标文件就会受到损坏。</p>
<p>为什么？</p>
<p>因为在Linux（EXT4文件系统）环境下，<code>logo.png</code> 和 <code>Logo.png</code> 分别指向两个不同的文件。</p>
<h2 id="">文件大小规则</h2>
<p>有关文件系统的一个重要方面是它们支持的 <strong>最大文件大小</strong>。</p>
<p>就MS-DOS + 7.1、Windows 9x家族和闪存使用的 <strong>FAT32</strong> 等旧文件系统来说，存储文件大小不能超过4GB，而其后继产品 <strong>NTFS</strong> 允许的文件大小最高可达 <strong>16 EB</strong>（1000 TB）。</p>
<p>和NTFS类似，exFAT也支持16EB的文件大小，这也使其成为存储海量数据文件（如视频文件）的理想选择。</p>
<p>实际上，exFAT和NTFS文件系统中对文件大小是没有限制的。</p>
<p>Linux的EXT4和Apple的APFS支持的文件大小分别高达 <strong>16 TiB</strong> 和 <strong>8 EiB</strong>。</p>
<h2 id="">文件资源管理器</h2>
<p>如你所知，文件系统的逻辑层通过提供一个API，可使用户应用程序对文件执行诸如 <code>读</code>， <code>写</code>， <code>删除</code> 和 <code>执行</code>等操作。</p>
<p>但文件系统的API其实是一种低级机制，专为计算机程序、运行时环境和壳设计，而非为日常使用而设计。</p>
<p>可以说，操作系统为我们日常的文件管理提供了多种非常方便、开箱即用的文件管理实用程序。例如，Windows上的 <strong>File</strong> <strong>Explorer</strong> ，Mac OS上的 <strong>Finder</strong> ，Ubuntu上的 <strong>Nautilus</strong> 都是文件浏览器的示例。</p>
<p>这些实用程序在后台使用逻辑文件系统的API。</p>
<p>除了这些GUI（图形用户界面）工具外，操作系统还能通过命令行界面显示文件系统的API，例如Windows上的命令提示符，以及Mac和Linux上的Terminal。</p>
<p>这些基于文本的界面可以帮助用户以文本命令的形式执行各种文件操作，就和我们在前面的示例中所做的一样。</p>
<h2 id="">文件访问权限管理</h2>
<p>如果说每个人都能删除或修改任何文件，哪怕是非自己所属的文件，或者在没有任何授权的情况下就更新这些文件，后果可想而知。</p>
<p>时下的文件系统故而提供了一种控制用户对文件的访问权限和访问功能的机制。</p>
<p>有关用户权限和文件所有权的数据存储在一个数据结构中。这一数据结构在Windows下被称为访问控制列表（ACL，Access Control List），在Unix一类的操作系统（Linux和Mac OS）上被称为访问控制项（ACE，Access Control Entry）。</p>
<p>此功能在CLI（命令行界面）也同样可用，用户可从命令行界面直接更改文件所有权或设置某个文件的权限。</p>
<p>例如，在Linux或Mac上，文件所有者可以将文件设置为可供所有人使用，步骤如下：</p>
<pre><code>chmod 777 myfile.txt
</code></pre>
<p><code>777</code> 的意思是，每个人都可以对文件 <code>myfile.txt</code> 进行读、写、执行等任何操作。</p>
<h2 id="">维护数据完整性</h2>
<p>假设你有一项论文研究已经进行了一个月。有一天，你打开论文文件，进行了一些修改，然后将其保存。</p>
<p>而在你点击保存文件后，你的文字处理器程序便会向文件系统的API（逻辑文件系统）发送“写入”请求。</p>
<p>该请求最终会传递到物理层，以将文件修改存储在诸多块中。</p>
<p>但是，如果在将文件的旧版本替换为新版本的过程中系统突然崩溃了该怎么办呢？</p>
<p>哈哈，在较老的文件系统（如FAT32或ext2）中，那意味着你的数据将面临损坏，因为只有部分数据被写入了磁盘。</p>
<p>但在今天，<strong>journaling</strong> 技术的使用让这种情况已不太可能再发生在时下的文件系统上。</p>
<p>日志文件系统记录着物理层中将要发生但尚未发生的每一项操作。</p>
<p>记录的主要目的就是跟踪记录物理层上尚未提交至文件系统的更改。</p>
<p>日志是磁盘上的一种特殊空间分配。在这里，每一次的“写入”尝试都将首先作为 <strong>事务</strong> 进行存储。</p>
<p>当数据存储在存储设备的物理层后，这一更改会立即被提交至文件系统。</p>
<p>发生系统崩溃时，文件系统将检测未完成的事务并将其回滚，就好像该事务从未发生一样。</p>
<p>这样一来，新内容（正在写入的内容）可能仍会丢失，但现有数据将完好无损。</p>
<p>诸如NTFS、APFS和EXT4（甚至EXT3）一类的现代文件系统都已使用日志功能来避免系统故障造成的数据损坏。</p>
<h2 id="">数据库文件系统</h2>
<p>大多文件系统通常都会将文件组织为目录形式。</p>
<p>要访问某个文件，只需层层“跨越”相关目录直至文件所在目录。</p>
<pre><code>cd /music/country/highwayman
</code></pre>
<p>但是，在数据库文件系统中，并不存在路径和目录的概念。</p>
<p>数据库文件系统是一个根据多种 <em>属性</em> 和 <em>维度</em> 对文件进行归组的 <strong>多面系统</strong>。</p>
<p>比如，它可以把一堆MP3文件按照艺术家、流派、发行年份和专辑等多种属性同时陈列。</p>
<p>数据库文件系统更像是一种高级应用程序，它可以帮助你更轻松、更有效地组织和访问文件。但是，你将无法访问此应用程序之外的文件。</p>
<p>然而，数据库文件系统并不能取代传统的文件系统。它只是一个可以高效处理文件的高级抽象。</p>
<p>Mac OS上的应用程序 <strong>iTunes</strong> 就是数据库文件系统的一个范例。</p>
<h2 id="">小结</h2>
<p>哇！你读到了最后，这也意味着现在的你已经懂得了很多文件系统的知识。但我也相信，这绝不是你文件系统学习的终点。</p>
<p>再次回到那个问题，我们能用一句话描述一下什么是文件系统以及它是如何工作的吗？</p>
<p>让我们就以我在开头写下的那句简单定义来结束本文吧：</p>
<p><strong>文件系统</strong> 决定着在存储设备中对文件进行 <strong>命名</strong>、 <strong>存储</strong> 和 <strong>检索</strong> 的方式。</p>
<p>如果你觉得我的讲解有遗漏之处或是我搞错了一些问题，欢迎在下面评论给我留言哦。</p>
<p>顺便告诉你，如果你想获得更多相关内容的详细讲解，欢迎访问我的网站 <a href="https://www.skillupp.tech">skillupp.tech</a> 并关注我的 <a href="https://twitter.com/lavary_">Twitter</a>，我经常在这两个地方分享我的日常发现。</p>
<p>再次感谢阅读，祝你学得开心哦！</p>
<!--kg-card-end: markdown--><p>原文：<a href="https://www.freecodecamp.org/news/file-systems-architecture-explained/">What Is a File System? Types of Computer File Systems and How they Work – Explained with Examples</a>，作者：<a href="https://www.freecodecamp.org/news/author/reza/">Reza Lavarian</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 开发者如何缓解焦虑提升效率？来自心理学研究者的建议 ]]>
                </title>
                <description>
                    <![CDATA[ 本指南基于作者 5 年的方法应用经验，这些方法或来自行为心理学，或来自工作效率的有关研究。我曾以一名开发者、导师、创作者的身份应用过这份指南，效果很好。 如果说读完这篇文章你只能记得一条学到的内容的话，它将是： > 有效的工作效率提升是以一定的科学原理为依托的，绝不是什么窍门儿，也不是任何花里胡哨的工具。 倘若你理解了这句话并将其予以运用，你将不会再为保持头脑清醒和注意力集中而困扰，而且当你身处一团乱麻时，这条建议尤为能够派得上用场。 这篇文章会讲什么  * 第一部分：过程 >> 工具  * 第二部分：当你无法摆脱拖延时该怎么办  * 第三部分：理智先行，执行力后行 话不多说，我们就直奔主题吧！ 第一部分：过程 >> 工具 每当你感到不知所措时，很大可能是因为你的工作流程有问题，不是工具。 一个合理的工作流程在任何时候都要远远胜过各种花里胡哨的工具。 你越是感到一切杂乱无序，你在工作过程中效率就会越低。反之，如果你的工作流程设计合理，你不仅能够比周围的人做更多的事情，还能保持更高的办事效率。 在我认识到这一点之前，我曾苦于追求“持久性的工作效率”。它的关键就在于 持久性  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-get-things-done-lessons-in-productivity/</link>
                <guid isPermaLink="false">601fad336183a705401563f0</guid>
                
                    <category>
                        <![CDATA[ 效率 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Mon, 06 Dec 2021 09:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/02/carl-heyerdahl-KE0nC8-58MQ-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>本指南基于作者 5 年的方法应用经验，这些方法或来自行为心理学，或来自工作效率的有关研究。我曾以一名开发者、导师、创作者的身份应用过这份指南，效果很好。</p><p>如果说读完这篇文章你只能记得一条学到的内容的话，它将是：</p><blockquote>有效的工作效率提升是以一定的科学原理为依托的，绝不是什么窍门儿，也不是任何花里胡哨的工具。</blockquote><p>倘若你理解了这句话并将其予以运用，你将不会再为保持头脑清醒和注意力集中而困扰，而且当你身处一团乱麻时，这条建议尤为能够派得上用场。</p><h2 id="-">这篇文章会讲什么</h2><ul><li><strong>第一部分</strong>：过程 &gt;&gt; 工具</li><li><strong>第二部分</strong>：当你无法摆脱拖延时该怎么办</li><li><strong>第三部分</strong>：理智先行，执行力后行</li></ul><p>话不多说，我们就直奔主题吧！</p><h2 id="--1">第一部分：过程 &gt;&gt; 工具</h2><p>每当你感到不知所措时，很大可能是因为你的工作流程有问题，不是工具。</p><p>一个合理的工作流程在任何时候都要远远胜过各种花里胡哨的工具。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-2.png" class="kg-image" alt="image-2" width="600" height="400" loading="lazy"><figcaption>你越是感到一切杂乱无序，你在工作过程中效率就会越低。反之，如果你的工作流程设计合理，你不仅能够比周围的人做更多的事情，还能保持更高的办事效率。</figcaption></figure><p>在我认识到这一点之前，我曾苦于追求“持久性的工作效率”。它的关键就在于 <em>持久性</em> 一词。</p><p>每个人时不时地都能保持高效，可要想把这种高效保持下去就需要费点心思了。</p><p>以前，我能完成很多事情。但我总觉得自己漏了点什么。我的做事理念就是速度和执行力高于一切。这种理念在短期内是行之有效的，但是长期来看缺乏可持续性。</p><p>我从各种地方获悉了一些生活小窍门儿，也试着用过市面上所有的效率管理工具，包括下面这几款比较流行的：</p><ul><li><a href="https://evernote.com/" rel="nofollow">印象笔记</a>：毫不费力，让你的笔记有条有理。</li><li><a href="https://keep.google.com/" rel="nofollow">Google Keep</a>：随时记录你的想法。</li><li><a href="https://www.onenote.com/" rel="nofollow">One Note</a>: 适用于你的设备的数字笔记应用程序。</li><li><a href="https://www.any.do/" rel="nofollow">Any.Do</a>：一款可结合日历、计划器和提醒来使用的待办事项清单应用。</li><li><a href="https://todoist.com/" rel="nofollow">Todoist</a>：安排工作和生活的待办事项清单应用。</li></ul><p>哦对了，我还用了 <a href="https://trello.com/en-US" rel="nofollow">Trello</a> 前后装卸过 3 次，因为每个人都在说它特别特别好用。</p><p>但这点我不敢苟同。</p><p>每隔几个月，我都会换着用这些应用。</p><p>时不时地，我也会去电子化，该用全纸质。但在那些时间，我要么是把笔记本落在家里了，要么就是懒得背在身上，因为我的口袋根本就装不下一个笔记本。</p><p>但这一切都没有用，我还是感觉被待完成的任务压的喘不过气来。过了一段时间后，我认识到：</p><blockquote>做事流程不够好，工具再好，也于事无补。</blockquote><p>因此，我把做事的理念转向了专于流程。自此，无论是我的工作效率还是时间管理能力都大幅提升。</p><p>我下面要分享的 4 步简单的做事流程适用于所有应用，<strong>无论你更偏好用哪款应用，都没有关系</strong>。</p><p>我现在用的是 Google Keep。但当你接着往下读的时候，我希望你能自动把它替换为你最爱的那款应用，或是 “<em>Todoist</em>”，或是 “<em>One Note</em>”，或是别的，都没问题。</p><p>我们要专注的是如何从宏观上安排诸多任务，因为这才是我们使用任何工具时最应重视的一点。</p><p>是不是很有道理？</p><p>那我们就看看这 4 步具体是什么吧！</p><h3 id="1-">1) 找到你获取“真相”的唯一来源</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-3.png" class="kg-image" alt="image-3" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@timonrets?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credi</a><a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">t</a> – 首先，你要确定自己的核心生产效率工具，然后把其它工具作为它的辅助。</figcaption></figure><p>我把 Google Keep 当作自己获取“真相”的唯一来源，然后把其它效率工具当作一种辅助。也就是说，Google Keep 是我做事前要前往的第一站。</p><p>我在上面记录的内容有</p><ul><li>购物清单</li><li>日志</li><li>健身计划</li><li>理财策略</li><li>想看的奈飞剧集</li><li>其它随时随地的想法</li></ul><p>以上每一类事项都有它们的专属标签。因此，我只需在手机上点几下或是在谷歌浏览器的标签页点击几下就能对我的待办事项了然于胸了（我的 Google Keep 在谷歌浏览器是保持日常打开状态的）。</p><p>接着，我会去日历上看看已确定的预约事项，顺便瞟一眼我每周在会议上花费的时间。</p><p>接着，我会打开 Trello 看看团队追踪合作。</p><p>再接着，我会交替使用 Notes 和 Google docs，分别进行个人写作和协作写作。有趣的是，我大部分的写作都是从手机上的 Google Keep 开始的。</p><p>包括这篇文章。</p><p>如果我看写的比较长了，我会转到我的笔记本电脑上去，从网页版的 Google Keep 把写作内容复制粘贴到 Notes 或是 Google Docs。</p><p>每当我感觉我需要用到特殊格式或是我想用我最爱的字体（<a href="https://fonts.google.com/specimen/Montserrat#pairings" rel="nofollow">Montserrat font</a>）写作时，我就知道我应该切换到一个写作工具上去了。</p><p>切换到另一个工具并非一定是件坏事。</p><p>尽管很多人不相信这一点。</p><p><strong>如果你现在立马就行动起来去找寻你唯一的“真相”来源，你的工作效率将会发生巨大改观</strong>。</p><p>但如果你仍无动于衷，那么当你开始感到手头的事情应接不暇时，你仍将苦于心烦气躁。相信我，你一定会有感到应接不暇的时候。</p><h3 id="2-">2) 不要去追求一个事事都能解决的应用</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-4.png" class="kg-image" alt="image-4" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@miikola?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 我们急于去追求最新的生产效率和时间管理工具，可单凭工具的使用并不能解决问题。</figcaption></figure><p>这一观点颇受争议。</p><p>之前曾有人站出来质疑过我，尤其是一款名为 Notion 的新应用走红以后（<a href="https://www.notion.so/login" rel="nofollow">Notion</a>）。</p><p>大多数人试图改造他们最爱的生产效率工具，让这些工具兼具写作功能、协作功能、日历功能等等。总之就是一个全能型应用。</p><blockquote>但现实是，没有哪款应用可以解决一切问题。</blockquote><p>很长一段时间以来，我也曾深陷“全能应用”这种错误观念之中。</p><p>相信我，挑选一个你获取“真相”的唯一来源，然后让其它工具予以辅助，远比找到一个“全能应用”好用的多。</p><ul><li>同时去用 Keep 和 Trello 是完全可以的。</li><li>同时去用 Notion 和 Notes 也是完全可以的。</li><li>同时去用待办事项提醒应用和日历应用也是完全可以的。</li></ul><p>这些工具未必是相互替代的，它们也可以相得益彰。</p><h3 id="3-">3) 不要纠结纸质 <em>还是</em> 电子 – 可以既纸质 <em>又</em> 电子</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/d83aef78c831faccd046361cf7e9cadabe673e014eb018b0b4f4a87710892703/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313537393137323334323839342d6536643735316563333930633f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f66444a38664852336233786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="Sun's out, bums out. Two zebras on the plains of Etosha before a storm rolls in." width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@gerandeklerk?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image credit</a> – 配合使用纸质工具和电子工具，让你的工作效率得到充分发挥。</figcaption></figure><p>偶尔隔一段时间，我会倾向在纸张上写作。</p><p>尤其是当我要计划一些重大目标时，我会更想把它们写在纸面上。我喜欢把各种事情以脑图的形式呈现在眼前。</p><p>此外，用我最爱用的笔去书写时，我的思路也会更加顺畅。</p><p>在用纸张书写时，我会先在纸上草草写下自己的想法，写完后再把它拍下来并添加到我 Google keep 的相关标签下。</p><p>所以说，当你打开我在 Google keep 上的 “<em>重大目标</em>” 标签时，你会发现一大堆的照片。</p><p>当然，在和同事在白板上探讨编程项目或是进行头脑风暴时我也会习惯采用上面提到的这种形式。</p><ul><li>写在纸上。</li><li>拍照。</li><li>添加到相关标签下。</li></ul><p>然后这张纸就进垃圾桶了。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-5.png" class="kg-image" alt="image-5" width="600" height="400" loading="lazy"><figcaption>这张照片就存在我的 Google Keep 中，它是我在一次头脑风暴中写下的，主题是行为心理学中可帮助创业者减轻拖延倾向的方法。</figcaption></figure><p>从多年以来的纸质书写经历中我发现，我只是在纸上写字的那一刻觉得纸质书写很享受。</p><p>过了几个星期后，我会发现我的办公区域全是废纸屑。</p><p>所以，拍下照片后我很快就会把纸张丢进垃圾桶。</p><p>这就既满足了我要用 planner（任何时间都远比小笔记本好用）的需求，又能满足我不时想在纸上写写画画的爱好。</p><blockquote>在我看来，没必要纠结是只用纸质还是只用电子。这个问题本身就很荒谬。</blockquote><p>我更关心的是如何才能帮助我减轻繁重的工作负担，两个都用且效果好的话也没什么不可。</p><p>当然，你可能只想用纸质或者只用电子，这也完全是可以的。你只需注意，要想保持高效，二者并非鱼和熊掌、不可兼得。</p><p>另外，有人曾推荐过 <em><a href="https://getrocketbook.com/" rel="nofollow">Rocketbook (a smart notebook)</a></em>。它是一种可以复写的笔记本，写下内容后，你可以将其上传云端，然后把整页纸重新擦干净。</p><p>尽管我从未用过，但还是想在这里说明一下，如果你觉得不错可以去看看。</p><h3 id="4-">4) 多去回顾总结 – 每周一次，每月一次，每年一次</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-6.png" class="kg-image" alt="image-6" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@rpnickson?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 要想建立强大的时间管理能力，你需要经常回顾总结。</figcaption></figure><p>在工作日，我每天早上都会在笔记本上浏览一遍我的 Google Keep，以便获悉当天的重要事项。</p><p>这点也是我避免因为手头事情越积越多而应接不暇的关键。</p><p>一天中，我会通过手机或是笔记本在 Google Keep 上添加事项。如此一直循环到周五。</p><p>每个周五，我都会去浏览一遍我的 Google Keep，清理掉那些没有完成的任务或是那些应该移到其它工具的任务。</p><p>如此周复一周。</p><p>遵循这个过程可以让你处理事情时不仅得心应手且事半功倍，但有时，拖延症会让你停滞不前。</p><h2 id="--2">第二部分：当你无法摆脱拖延时该怎么办</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-7.png" class="kg-image" alt="image-7" width="600" height="400" loading="lazy"><figcaption>你可以从减轻完美主义倾向开始做起，然后再去搞清楚下一个一小步。最后当你什么工作都不想做时，就去调整你的行为。</figcaption></figure><p>你知道吗？<a href="https://www.inc.com/marla-tabaka/why-set-yourself-up-for-failure-ditch-new-years-resolution-do-this-instead.html" rel="nofollow">80% 的人都无法完成自己的新年目标</a>。是不是很惊人？</p><p>不幸的是，拖延症在其中扮演着重要角色。</p><p>但别担心，你可以通过下面三个方法来打败拖延症：减少你的“完美”目标；弄清楚自己下一步的行动；借助行为心理学调节自己的行为。</p><p>让我们一个一个来看。</p><h3 id="1-a-b-">1) 把你对第一步的要求从 “A+” 降低到 “B”</h3><p>如果你是一个完美主义者，你会产生拖延。如果你的目标过于宏大，以致不知如何迈出第一步，你也会产生拖延。</p><p>如果你是一个拖延型的完美主义者，你会经常感到疲惫不堪且沮丧无比，因为你的宏大目标一直都停留在你的脑子里，而你还尚未为之付诸任何行动。</p><p>之所以没有付诸行动，是因为你期望自己的每一步都走得尽善尽美。</p><blockquote>一个完美主义者要想解决拖延问题，就要从以 “B” 而非 “A+” 来要求自己的第一步开始做起。也就是说，你要退一步，让自己的第一步看着“还不错”就可以了，而非一定要“完完美美”。</blockquote><h3 id="2--1">2) 明确接下来的一小步</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/baffd6a574018af6bf15584f493f6e7912850aa452931fe11bb9804d68be1f76/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313535383830303139392d3166343835373632303631623f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f664445356648786a6232356d64584e6c5a48786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313535383830303139392d3166343835373632303631623f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f664445356648786a6232356d64584e6c5a48786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@i_am_nah?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 每当你感到不清楚下一步该干嘛时，你的意识就会阻碍你继续向前。每当你创建的任务含混不清时，你就为拖延症提供了可乘之机。</figcaption></figure><p>比如说，你的待办事项可能是这么写的：</p><blockquote>构建一个绝佳的作品集网页来助力自己找工作。还要设计一个惊艳众人的登录页面。</blockquote><p>但是：</p><ul><li><em>“绝佳”</em> 具体指哪方面有多好呢?</li><li>什么 <a href="https://lifetechpsych.com/beginner-programming-projects" rel="nofollow">类型的编程项目</a> 应该放在我的作品集中呢？</li><li>我是重新做一个自己的App比较好还是用一个现有的模版呢?</li><li>我需要学哪种语言呢？需要多长时间？什么时候学？怎么学？</li></ul><p>当你头脑中有太多个悬而未决的问题有待解决时，你的意识就会拒绝采取任何行动，从而陷入拖延之中。</p><p>要破解这一困境的办法是，花 90 秒去思考并回答这个问题：</p><blockquote>对于这个任务，我接下来想要实现的最小一步是什么呢？</blockquote><p>比如说：</p><ul><li>如果你在构建一个作品集，接下来的最小一步就是打开一个文档，写下一个粗略的计划。而不是打开 visual studio，<a href="https://lifetechpsych.com/how-long-cplusplus" rel="nofollow">捣鼓 C++ 里的各种小技巧</a>。</li><li>如果你在为编程小白编写一本教科书，你接下来的最小一步不是去写第一章，而是为整本书的各个章节列一个初始的大纲。</li><li>如果你刚接触编程，你要做的就是 <a href="https://lifetechpsych.com/free-learn-to-code" rel="nofollow">寻找你学习编程的渠道</a> 你最终可以落脚到某一个具体的渠道，而非东一榔头、西一棒槌，漫无目的地学了几个月后仍然感到前路迷茫。</li></ul><p>你的下一步行动越细微，就越可能实现。</p><p>而当你一小步一小步往前推进任务时，你就打败了拖延。</p><h3 id="3--1">3) 借助行为心理学的方法调整自己</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/e12c6a7bf4f1ba7b29d8ca010958dae2b202ec43059b2383320ba808cfbc331f/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313439383031393535393336362d6131636264303762353136303f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f66446838664731685a326c6a66475675664442386648772669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="Anything that can go wrong will go wrong." width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@acharki95?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 拖延症是一个需要用心理学的方法来解决的心理学问题。</figcaption></figure><p>有些日子里，你就是会犯懒。</p><p>你也明白，不管你心里怎么想，你得去工作了，可你并没有采取任何行动。</p><p>你可以试试下面这些行为心理学的原理。</p><ul><li><strong>截止日期效应</strong>：打开网址 <a href="https://tomato-timer.com/" rel="nofollow">www.tomato-timer.com</a>，设置一个 5 分钟的倒计时，然后尽最快速度去开始着手你的下一个最小一步。大多数情况下，你会发现自己工作了不止 5 分钟。这就对了，因为在 <a href="https://www.psychologistworld.com/memory/zeigarnik-effect-interruptions-memory" rel="nofollow">蔡格尼克记忆效应</a> 作用下，你会倾向完成你已经开始的工作。</li><li><strong>负面增强，直到你开始工作为止</strong>：如果你发现自己不知为什么在这5分钟啥也没干计时器就截止了，那就重新开始计时。一条附加的建议是，打开计时器设置，设置一个你极其讨厌的提醒铃声。重复这个过程5遍，每一遍都通过看着倒计时触发铃声的方式来惩罚自己！</li><li><strong>重新反思你的动力</strong>：假如过了 5 遍之后，你还是什么也没干。那就说明你根本就没有动力去做这件事，你需要思考一个更加深层次的问题：</li></ul><blockquote>“我做完这件事对我有什么意义？”</blockquote><p>有时，去看看 <a href="https://lifetechpsych.com/developer-stories" rel="nofollow">别的开发者是如何改变自己的生活的</a> 或许能给你一些动力。</p><p>如果你还是对这件事的意义感到不明不白，那就不要做这件事了，你需要去寻找其它能够激发你动力的事情去做。</p><p>但要尤为注意的是，无论你完成了多少工作，高效绝不是 24 小时连轴转、毫不停歇地工作。</p><p>你需要权衡工作和休息以保证能够持续向前推进工作的开展。</p><h2 id="--3">第三部分：调节好精神再行动</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-8.png" class="kg-image" alt="image-8" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@darthxuan?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 如果你的工作流程设计合理的同时又能让你照顾好自己，你便能主宰自己的工作，减轻焦虑。</figcaption></figure><p>完成一些任务后并不总是意味着要接着做更多。有时，你需要的不再是更快、更好，而是照顾好自己的思想。</p><blockquote>“<em>自我护理绝不是自私的体现。每当我们倾听真我并对其予以需要的关怀时，我们并不仅是为了自己才那么做，也是为了与我们的生命有交集的诸多他人</em>。” - 帕克·帕尔默</blockquote><p>如果你不把自我护理摆在重要位置，你一定会累垮。相信我，真的有开发者累垮过。</p><p>而当累倒了好几次后，你就会开始质疑，或许自己并不是吃这碗饭的料。</p><p>你是。</p><p>只不过你的工作方式一点点蚕食了你的斗志。</p><p>下面是些简单的方法，你可以以它们为起点，对自己的关怀更多一些。这些小活动和人们听到生产力时所产生的期待不同。</p><p>但是你需要它们。</p><h3 id="--4">将你的工作地点和休息地点区别开来</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/63f7bb5059fc5c2f65004e52ef0f00b83058699fb59c5b74e314cc8b17dee96d/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313530373133313932343937312d3862353461366537343665343f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f66444977664878795a5778686548786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313530373133313932343937312d3862353461366537343665343f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f66444977664878795a5778686548786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@katiebarrett?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 拥有一个专门用于休息的地方能够帮你完全放松下来。</figcaption></figure><p>我发现，在一个地方休息之后，接着在这个地方工作会有些吃力。</p><p>同样，在一个地方工作之后，接着在这个地方休息会很难放松下来。</p><p>你并不必为此找到两个不同的房间。</p><p>你只需要有意识地去创造一种物理上的不同即可，如此你便可以从一个模式切换到另一个模式。如果没有这种区分，我会连续几周都感到晕头转向、身心疲惫。</p><h3 id="--5">一日一浴，体力充裕</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-10.png" class="kg-image" alt="image-10" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@phammi?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 每天洗个澡，看似简单，却足以让你恢复身心。</figcaption></figure><p>这条建议很容易实现。如果能在早上洗澡更好，但如果不行，你在快要结束前一日时也可以洗个睡前澡。这会让你感觉你这一天已经有所作为了。</p><h3 id="--6">烹饪疗法</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/03/image-9.png" class="kg-image" alt="image-9" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@brookelark?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 烹饪是让你自己重启的最佳方式之一。</figcaption></figure><p>尽管我并不经常烹饪，但我很喜欢烹饪。按照菜谱的指示操作并想出一些新点子的感觉非常神奇。</p><blockquote>“没有人在烹饪时是一个人。即便是在她最孤独的时候，一名厨房里的厨师也被先前的几代厨师、当下厨师的建议和菜单以及烹饪作家的智慧紧紧围绕着。” — 劳里·柯文</blockquote><p>做什么饭都可以，做出来的食物好吃或不好吃都没有关系。</p><p>起到帮助作用的是你远离尘世喧嚣的过程。烹饪时可以放点爵士乐，你不知不觉就被传送到另外一个宇宙了。</p><h3 id="--7">晒晒太阳，多少都无所谓</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/17441a835f73e9c189af7916652e72514da0a4fb77fc0f5312734db55b491922/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313438333438393537313039372d3063613239356261336430383f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f664445776648786f59584277655355794d4774705a48786c626e7777664878382669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="san diego" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@frankiefoto?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 有时，迈步到阳光下就是你所需的高效触发器。</figcaption></figure><p>我曾从不相信天气会对一个人的心情有很大影响，但它的确会。</p><p>待在室内太久会让你感到万事都很无望。当患上 <a href="https://en.wikipedia.org/wiki/Cabin_fever" rel="nofollow">幽闭烦躁症</a> 时，你会像只发了疯的浣熊似的在你的生活空间暴躁不安、横冲直撞。</p><p>要解决这个问题，你也并不一定非得踏出门外。我发现如果我每天早上都去打开窗户，我就完全不会有幽闭烦躁症的感觉。</p><p>你无需一面巨大的窗户，也无需到室外长走，只需要留出几分钟的时间安静地一人享受一会儿阳光就够了。</p><h2 id="--8">写在最后</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/aa36a3850ae5ffe6503c3b384ed90270f542dfd013c8979ad3ea5e2e09f5220c/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313535323037323039322d3766396238643633656663623f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f6644563866465a7059335276636e6c385a5735384d48783866412669786c69623d72622d312e322e3126713d383026773d32303030" class="kg-image" alt="68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313535323037323039322d3766396238643633656663623f63726f703d656e74726f70792663733d74696e7973726762266669743d6d617826666d3d6a706726697869643d4d5877784d5463334d3377776644463863325668636d4e6f6644563866465a7059335276636e6c385a5735384d48783866412669786c69623d72622d312e322e3126713d383026773d32303030" width="600" height="400" loading="lazy"><figcaption><a href="https://unsplash.com/@attentieattentie?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" rel="nofollow">Image Credit</a> – 有些行动虽然微小、不起眼，但却可以让你为身临大战做好准备。</figcaption></figure><blockquote>“有些事情可能并不起眼，但在涟漪效应下，这些小事情也能发挥大作用。”– <a href="https://www.brainyquote.com/authors/matt-bevin-quotes" rel="nofollow">马特·贝文</a></blockquote><p>回顾一下你刚刚读到的内容。</p><p>你会发现每一条建议听起来都非常简单，因为它们本身都是非常微小的事情。</p><p>但将它们所有结合在一起却能让我处理事情的效率大大提升。如果你能遵循这些原则，你也可以实现同样的转变。</p><p>记得：</p><ul><li>过程 &gt;&gt; 工具</li><li>打败拖延症，否则你就会为它所控</li><li>自我护理调节精神比毫不停歇的工作更重要</li></ul><h2 id="--9">感谢阅读</h2><p>如果你喜欢这篇分享，以下是更多推荐。</p><p><strong><a href="https://lifetechpsych.ck.page/" rel="nofollow">加入我的电子邮件社区</a></strong>：我会为编码小白和初级开发者分享一些技巧，以帮助他们更快成长，并使他们信心加倍。如果你有兴趣，欢迎<a href="https://lifetechpsych.ck.page/" rel="nofollow">加入社区</a>。</p><p><a href="https://twitter.com/LifeTechPsych" rel="nofollow"><strong>在Twitter上关注我</strong></a>：需要更多高效工作的技巧？或是有任何疑问？我的 Twitter 账号最为活跃，欢迎随时 <a href="https://twitter.com/LifeTechPsych" rel="nofollow">与我联系</a>。我的私信已打开。</p><p><strong><a href="https://www.freecodecamp.org/news/author/lifetechpsych/" rel="nofollow">阅读更多文章</a></strong>：如果你想阅读更多文章，也欢迎 <a href="https://www.freecodecamp.org/news/author/lifetechpsych/" rel="nofollow">查看我博客上的其他文章</a>。</p><p><em>小贴士</em> - 我喜欢做研究，所以我倾向用行为心理学和神经科学的概念来支撑我的建议和方法。</p><p>原文：<a href="https://www.freecodecamp.org/news/how-to-get-things-done-lessons-in-productivity/">How to Be Productive, Feel Less Overwhelmed, and Get Things Done</a>，作者：<a href="https://www.freecodecamp.org/news/author/lifetechpsych/">Endy Austin</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 我从第一次构建项目中学到了什么 ]]>
                </title>
                <description>
                    <![CDATA[ 历经 4 个月的编程、研究、学习和一再质疑自己能否成功之后，我终于上线了自已设计的第一个网站。 这一路走来并不容易，但最后看来都是值得的。 本帖将分享我从构建黑人卓越音乐项目 [https://blackexcellencemusicproject.com/] （纪念为艺术做出卓越贡献的黑人艺术家）中学到了什么。 我有能力构建吗？ 图片来自 Unsplash [https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] ，摄影师 Tachina Lee [https://unsplash.com/@chne_?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] 2020 年 6 月，围绕乔治·弗洛伊德之死，各类活动频发，种族冲突问题呈现出前所未有的紧张态势。这一局势引发了有关各行各业中缺少多样性、少数群体缺乏代表性的讨论。 很多朋友与我联系，问询历史上和当代黑人作曲家的有关信息，期望他们的作品能 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/what-i-learned-from-building-my-first-solo-project/</link>
                <guid isPermaLink="false">6034c1e2c354c605689ea6d9</guid>
                
                    <category>
                        <![CDATA[ 自我提升 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Thu, 27 May 2021 10:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-2.51.14-AM.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>历经 4 个月的编程、研究、学习和一再质疑自己能否成功之后，我终于上线了自已设计的第一个网站。</p>
<p>这一路走来并不容易，但最后看来都是值得的。</p>
<p>本帖将分享我从构建<a href="https://blackexcellencemusicproject.com/">黑人卓越音乐项目</a>（纪念为艺术做出卓越贡献的黑人艺术家）中学到了什么。</p>
<h2 id="">我有能力构建吗？</h2>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1446511437394-36cdff3ae1b3.jpeg" alt="Woman looking up" width="600" height="400" loading="lazy"></p>
<p>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，摄影师 <a href="https://unsplash.com/@chne_?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Tachina Lee</a></p>
<p>2020 年 6 月，围绕乔治·弗洛伊德之死，各类活动频发，种族冲突问题呈现出前所未有的紧张态势。这一局势引发了有关各行各业中缺少多样性、少数群体缺乏代表性的讨论。</p>
<p>很多朋友与我联系，问询历史上和当代黑人作曲家的有关信息，期望他们的作品能够更广为演奏或传唱。</p>
<p>也因如此，我当时决定制作<a href="https://www.youtube.com/watch?v=FIWELCEBG0E&amp;list=PLqHdMZJ08WM11cAx7YqdmvHb5YawvM0sq">黑人卓越 YouTube 系列节目</a>，以向大众介绍取得成功的黑人作曲家。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-11.11.27-AM.png" alt="Screen-Shot-2021-02-03-at-11.11.27-AM" width="600" height="400" loading="lazy"></p>
<p>这个系列节目随之爆火，也让我产生了一个新的想法。</p>
<p>为什么不建立一个名为<a href="https://blackexcellencemusicproject.com/">黑人卓越音乐项目</a>的网站呢？</p>
<p>它可以是一个教育性的网站，内容可以包括人物资料，游戏，音乐，等等。</p>
<p>但我面临一个大大的问题：谁会来创建这个网站呢？</p>
<p>当时的我刚学了几周的编程，我根本不相信自己有能力去做那样一个项目。因此，我决定把这件事放一放，先继续学习一阵再说。</p>
<h2 id="">现在做或者永远不做</h2>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1505857231560-ec7df63800e8.jpeg" alt="A friend of mine, jumping off of Hawaii’s spitting cave" width="600" height="400" loading="lazy"></p>
<p>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，摄影师 <a href="https://unsplash.com/@kekaiahsam?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Kekai AhSam</a></p>
<p>几个月过去了，我开始围绕这个项目想得愈来愈多。我想到了一些备选的游戏、一些专题作曲家，还有一些炫酷的网站功能。</p>
<p>但我还是在犹豫要不要开始做，因为我总觉得自己还没有准备好。我当时只是略懂 HTML 和 CSS，对 JavaScript 也只是有一些初步了解。</p>
<p>但我后来意识到，要么就现在做，要么就永远不做。</p>
<p>带着恐惧和犹豫，我决心开始着手这个项目。</p>
<h2 id="gitgithub">你好，Git 和 GitHub</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.32.31-AM.png" alt="Screen-Shot-2021-02-03-at-10.32.31-AM" width="600" height="400" loading="lazy"></p>
<p>2020 年 6 月，决心想要学习如何编程的我第一次打开了自己的 GitHub 个人主页。但在那之后一直到开始这一项目前期间这几个月，我在上面几乎啥也没干过。</p>
<p>我对 GitHub 的模糊理解是，这是一个你可以保存自己的代码而且别人可以查看这些代码的地方。</p>
<p>因此我就想，是时候真真正正地学学 GitHub 并开始敲击命令行了。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-11.05.57-AM.png" alt="Screen-Shot-2021-02-03-at-11.05.57-AM" width="600" height="400" loading="lazy"></p>
<p>看完一些教程之后，我成功创建了我的第一个 repository，并将我的第一个 commit 推送到了 GitHub。</p>
<p>心想自己已经入门了，我感到很自豪，但现在我面临着另一个难题。</p>
<p>下一步干什么呢？</p>
<h2 id="html">只管 HTML</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.34.18-AM.png" alt="Screen-Shot-2021-02-03-at-10.34.18-AM" width="600" height="400" loading="lazy"></p>
<p>虽然我脑子里有各种想法，但对于该从什么做起我却丝毫没有头绪。</p>
<p>我要先做一些游戏吗？</p>
<p>我要建立设计的模型吗？</p>
<p>很快，一切把我搞得焦头烂额，我真的不知道下一步该干点啥。就这样，我决定从一个简单的 HTML 页面开始做起，然后再向后面推进。</p>
<p>我想到，我可以先构建一些 HTML 网页来放作曲家的介绍，至于如何装饰这些页面，可以到后面再去考虑。</p>
<p>这样一来，我就安下了心，为项目开了个好头。</p>
<h2 id="">选择恰当的配色方案</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.35.49-AM.png" alt="Screen-Shot-2021-02-03-at-10.35.49-AM" width="600" height="400" loading="lazy"></p>
<p>我当时想选一个和主题比较搭的配色方案，就是那种表面很沉静但背后却又很有力量的配色。</p>
<p>经过一番研究，我敲定了紫色，紫色往往同王室和智慧相关联。</p>
<p>我想，就那些对艺术做出了重大贡献的黑人作曲家来说，这应该是个完美的选择。</p>
<h2 id="">我该如何创建游戏呢？</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.57.40-AM.png" alt="Screen-Shot-2021-02-03-at-10.57.40-AM" width="600" height="400" loading="lazy"></p>
<p>走到这一步，我手里有几张 HTML 网页和一些简单的网页装饰，现在是时候开始码一些游戏了。</p>
<p>我在想，如果能设计一些老少皆爱的游戏将是不错的选择。</p>
<p>我首先对游戏的运行做了一个整体规划，接着便开始一个一个去实现那些功能。</p>
<p>我做了很多研究，也犯了很多错，但最后还是做成了。</p>
<pre><code class="language-js">// this is for the tour and local gig functions
function performanceOutcomes() {
  shuffle(gigResponses);
  if (randomMsg === 'You were late to the gig and not allowed to perform.' || randomMsg === 'You were mugged outside after the gig and they took all of your money.') {
    message.innerHTML = randomMsg;
    money += 0;
    earnings.innerHTML = `Total earnings: $ ${money}`;
  } else {
    message.innerHTML = randomMsg;
    money += 5;
    earnings.innerHTML = `Total earnings: $ ${money}`;
  }
}
</code></pre>
<p>完成游戏的制作后，我决定“打扫一下卫生。”</p>
<h2 id="">我该怎么组织这一切呢？</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.37.01-AM.png" alt="Screen-Shot-2021-02-03-at-10.37.01-AM" width="600" height="400" loading="lazy"></p>
<p>网站上有很多需要移动的内容，所以我在管理这些文件时要动点脑筋。</p>
<p>为描述性文件和文件夹命名时，我专门留意选择一些简短的名称，以便可以轻松找到它们。</p>
<p>也有几次，我不得不将一些文件重新移动到不同的文件夹中。</p>
<p>例如，起初，我把作曲家知识测验放在了单个作曲家的文件夹中。但后来我意识到，最好专门建立一个名为“知识测验”的文件夹，并将所有测验文件保存在其中。</p>
<p>我还遇到了多个样式表的问题。由于我重复使用了许多相同的样式，因此建立一个主样式表然后将其链接到所有 HTML 页面会比较合适。</p>
<h2 id="">你能不能看到我的项目？</h2>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1531498860502-7c67cf02f657.jpeg" alt="photo-1531498860502-7c67cf02f657" width="600" height="400" loading="lazy"></p>
<p>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，摄影师 <a href="https://unsplash.com/@heylagostechie?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">heylagostechie</a></p>
<p>到 2021 年 1 月底，我的网站终于可以供其他人查看了。</p>
<p>我便决定联系 Nicholas Carrigan，他是来自 freeCodeCamp 的开发人员兼社区管理员。他在 <a href="https://www.nhcarrigan.com/home">他的网站</a>上提供了代码审查服务，我希望他能看看我的代码。</p>
<p>代码审查非常有价值，我学到了很多有关如何把我的网站做得更好的知识。</p>
<h2 id="">上线噩梦</h2>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1607688387751-c1e95ae09a42.jpeg" alt="photo-1607688387751-c1e95ae09a42" width="600" height="400" loading="lazy"></p>
<p>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，摄影师 <a href="https://unsplash.com/@devasangbam?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Dev Asangbam</a></p>
<p>终于做好一切准备后，我决定上线我的网站。我用 <a href="https://www.bluehost.com/">Bluehost</a> 注册了一个自定义的域名，然后阅读了如何将 GitHub 网页设置为实时站点的有关说明。</p>
<p>凌晨 4 点，我终于上线了网站。</p>
<p>但当我单击上线链接时，我被眼前的一切吓到了。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.41.03-AM.png" alt="Screen-Shot-2021-02-03-at-10.41.03-AM" width="600" height="400" loading="lazy"></p>
<p>没有导航栏，没有脚注，没有层叠样式表。</p>
<p>这到底是怎么回事？我在本地测试的时候一切都没问题呀。</p>
<p>经过几小时的修护和研究，我最后选择向他人求助。我给 Nicholas 发了信息，向他说明了这个问题。</p>
<p>他看看我的代码解释说，我的文件路径有点问题，并告诉我如何去解决。</p>
<p>听到问题有办法解决，我如释重负，这才静下心来去做各种必要的修改。</p>
<pre><code class="language-html">    &lt;script src="landing-page-nav.js"&gt;&lt;/script&gt;
    &lt;script src="landing-page-footer.js"&gt;&lt;/script&gt;
    &lt;script src="index.js"&gt;&lt;/script&gt;
</code></pre>
<p>终于，我做好了准备，把网站分享在了  <a href="https://forum.freecodecamp.org/">freeCodeCamp 论坛</a> 中，以寻求反馈。</p>
<h2 id="">这是一个好的开始，但请解决这个问题</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-02-03-at-10.42.55-AM.png" alt="Screen-Shot-2021-02-03-at-10.42.55-AM" width="600" height="400" loading="lazy"></p>
<p>在接下来的几天，我收到了很多关于如何改良网站的评论。</p>
<p>起初，我都是自己处理这些评论，还真有些应接不暇。</p>
<p>我还幻想，也许在某个虚幻的世界，人人都会喜欢我的网站，并觉得它是完美无瑕的。</p>
<p>但实际上，很多人给我指出了一些 bug，还有一些设计上的问题，这些问题让用户体验起来会感到有些无厘头。</p>
<p>我知道自己的强项并不在设计，或许这也是我想独自处理设计这块的原因。但我发现，有很多人在帮助我，而且他们的建议的确让网站看起来更好看了。</p>
<h2 id="">对新手的建议</h2>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1566837945700-30057527ade0.jpeg" alt="photo-1566837945700-30057527ade0" width="600" height="400" loading="lazy"></p>
<p>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，摄影师 <a href="https://unsplash.com/@baciutudor?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Tudor Baciu</a></p>
<p>通过构建这个项目，我学到了很多。当然，这个过程中我遇到过顺利的时候，也遇到过糟心的时候。但最后的结果还是让我很开心的。</p>
<p>如果你也有做一个项目的想法，不要等着自己万事俱备了才动手。按自己知道的最好的方式去构建它，并将其上线。即使它并不完美或是仍需润色，也完全没有任何问题。</p>
<p>只要持续做和学就够了。</p>
<!--kg-card-end: markdown--><p>原文：<a href="https://www.freecodecamp.org/news/what-i-learned-from-building-my-first-solo-project/">What I Learned from Building My First Solo Project</a>，作者：<a href="https://www.freecodecamp.org/news/author/jessica-wilkins/">Jessica Wilkins</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 学习音乐的经历是如何帮助我学习编程的 ]]>
                </title>
                <description>
                    <![CDATA[ 前言 你心里可能在想，学音乐和学编程有什么关系？  哈哈，作为一名专业的双簧管吹奏者，我发现二者其实存在很多共通之处。 这两件事都需要你极为专注、自律和坚持才能做好。 下面我将通过一些事例来说明学习音乐的经历是如何帮助我学习编程的。 做就完了 图片来自 Unsplash [https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] ，作者：George Pagan III [https://unsplash.com/@gpthree?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit] 上大学那会儿，我有好些时间在上课、排练、或是考试前都准备欠佳。 可我非但没有反思到是因为自己准备不够充分，反而会去找各种借口，比如， > “我之所以没有做好课前预习是因为我要忙着复习一个音乐理论的小测。” 又或者是， > “我在忙着准备马上要去参加的一个很重要的试演。” 然而，不管我说出的理由有多么五花八门，我的双 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-my-musical-training-helped-me-learn-how-to-code/</link>
                <guid isPermaLink="false">601250365f61e30501b5c316</guid>
                
                    <category>
                        <![CDATA[ 自我提升 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Fri, 21 May 2021 09:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/01/photo-1513883049090-d0b7439799bf.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-">前言</h2><p>你心里可能在想，学音乐和学编程有什么关系？ </p><p>哈哈，作为一名专业的双簧管吹奏者，我发现二者其实存在很多共通之处。</p><p>这两件事都需要你极为专注、自律和坚持才能做好。</p><p>下面我将通过一些事例来说明学习音乐的经历是如何帮助我学习编程的。</p><h2 id="--1">做就完了</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/01/image-22.png" class="kg-image" alt="image-22" width="600" height="400" loading="lazy"><figcaption>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，作者：<a href="https://unsplash.com/@gpthree?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">George Pagan III</a></figcaption></figure><p>上大学那会儿，我有好些时间在上课、排练、或是考试前都准备欠佳。</p><p>可我非但没有反思到是因为自己准备不够充分，反而会去找各种借口，比如，</p><blockquote>“我之所以没有做好课前预习是因为我要忙着复习一个音乐理论的小测。”</blockquote><p>又或者是，</p><blockquote>“我在忙着准备马上要去参加的一个很重要的试演。”</blockquote><p>然而，不管我说出的理由有多么五花八门，我的双簧管老师却从不买账。他坚信我在一天的时间里可以兼顾练习、学习，并留点时间去社交。</p><p>紧接着，他经常会向我抛出那句耐克的知名广告语，“Just Do It”（做就完了）。</p><p>我总会对之哧哧一笑，但他说的话没毛病。</p><p>对一个自学编程的人来说，你身边时时刻刻总有各种各样的干扰，你很容易就会产生如下这些念头：</p><blockquote>“我在算法上的确需要多加练习，但要不明天再练吧。”</blockquote><p>或是，</p><blockquote>“我必须得要开始着手那个新项目了，但我真的很忙。”</blockquote><p>大多数人在生活中都不会具备连续 24 小时不被打扰的空闲时间去做我们想做的事，总有别的事情在半路跳出来需要我们处理。</p><p>但残酷的现实是，我们只有保持自律、完成我们的工作，才能成为更优秀的程序员。</p><p>因此，当你再度为拖延找寻借口时，记住，无论如何也要做完手中的工作！</p><h2 id="--2">熟能生巧，一定能吗？</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/01/image-23.png" class="kg-image" alt="image-23" width="600" height="400" loading="lazy"><figcaption>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，作者：<a href="https://unsplash.com/@samthewam24?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Samuel Sianipar</a></figcaption></figure><p>我们都听过这句话，“熟能生巧”。 但是，这句话并不总是正确。</p><p>我的双簧管老师就从来不屑这句话，而是告诉我们，“熟能生恒”。</p><p>每当我努力去学一支新的曲子时，我都会因为看不到进步而感到很沮丧。无论我练多少遍，都没有进展。</p><p>但我后来才明白，只是去参加练习是远远不够的，我必须巧于练习。</p><p>我学会了把一支长曲切分为几个小的部分，并把节拍慢下来，把每一段练到位了才继续下一段。 在我改变了练习习惯后，我逐渐成为了一名更优秀的乐师。</p><p>同样，在学习编程时，急于去学完一门课并不能让你成为一名更优秀的程序员。有时，你还会因此养成一些坏习惯，以致后面很难再去改正。</p><p>与其急于去解决所有问题，不如去逐个慢慢突破。等到你巧于练习时，就更能理解我说的这些话了。</p><h2 id="--3">持之以恒是关键</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/01/image-24.png" class="kg-image" alt="image-24" width="600" height="400" loading="lazy"><figcaption>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，作者：<a href="https://unsplash.com/@xps?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">XPS</a></figcaption></figure><p>和一些人一样，我也从 7 岁就开始学钢琴，头几年我还蛮喜欢弹钢琴的。</p><p>可自从我开始学一些难点的曲子后，我就没有练习的动力了。</p><p>当时的我可谓三天打鱼，两天晒网，结果就是我的琴艺豪无长进。我报的课程也完全成了一种浪费，因为我们每周几乎都在重复同样的事情。</p><p>如今，围绕如何居家学习编程的宣传铺天盖地，很多人带着一份初期的振奋加入其中，在课堂上按照教程学习并制作了一些小项目。</p><p>可过了几个月之后，他们便渐渐没了动力。</p><p>这体现为从一开始越来越少编程到最后丧失兴趣并放弃。</p><p>在学习编程的路上，你必须制定一份持久的日程安排，否则你将无法成长为一名程序员。</p><p>你将总是陷入对一些基础内容的困惑，而永远没有能力去制作更加复杂的项目。</p><p>你每天并不一定要投入 12 个小时才能成功，但你需要制定一份适合自己的日程安排。</p><p>倘若你每天只有 2 个小时的学习时间，那就制定一个每天 2 小时的日程。</p><p>但你如果每天计划学习 8 个小时，可过了一段时间就中断了 2 周，那结果只能是成效甚微。持之以恒是学好一切的关键。</p><h2 id="--4">练习你不懂的东西</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2021/01/image-25.png" class="kg-image" alt="image-25" width="600" height="400" loading="lazy"><figcaption>图片来自 <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a>，作者：<a href="https://unsplash.com/@surface?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Surface</a> /&nbsp;</figcaption></figure><p>大三那年，我们的风月合奏指挥曾对我们讲过一句话，我至今仍为忘怀。</p><p>他说，“要敢于去练习你不懂的东西。”</p><p>我们大多数人想在练习室里练习的都是听起来还不错的音乐，这也许是一种让我们自我感觉良好并让自我感到满足的方式。</p><p>但我的指挥说得没错，倘若你不去挑战自己，着力克服自身的弱点，你就永远无法成长为一名音乐家。</p><p>当你最开始只是一个编程小白时，你有太多的东西需要学习。人人都很想只专注于自己喜欢的内容。</p><p>这也并不奇怪，我们都想自我感觉良好并炫耀自已掌握的知识，但这并不能成为我们忽略自身不擅长之处的理由。</p><p>如果你发现自己不擅长算法，请不要忽略它。留出更多时间来学习它，这样算法对你来说就会变得容易起来。</p><p>又或许你苦于学不好递归，但它不会因为你不喜欢就不存在了。</p><p>即便当下的一切会很困难，但你必须自律，静下心来去学习自己所需的知识。</p><p>希望大家喜欢这篇文章。如果你想了解更多有关我的信息，请在 Twitter 上关注我 @ codergirl1991。</p><p>祝大家编程愉快哦！</p><p>原文：<a href="https://www.freecodecamp.org/news/how-my-musical-training-helped-me-learn-how-to-code/">How My Musical Training Has Helped Me Learn How to Code</a>，作者：<a href="https://www.freecodecamp.org/news/author/jessica-wilkins/">Jessica Wilkins</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 自由职业开发者完全指南：如何通过自由职业编程工作获得收入 ]]>
                </title>
                <description>
                    <![CDATA[ 开发者走自由职业路线已成普遍。对很多在 freeCodeCamp 刚刚完成学习的人来说便是如此，他们并不想“为别人打工”，而是想为自己打拼。不仅如此，很多在职的开发者也都在想着单干。 同样受自由职业路线吸引的还有那些虽然已有一份开发工作但是想额外赚点外快的一群人。 但无论出自何种原因，重要的是，如果你想建立自己的小事业，你要能够走对自己的每一步。走上正确的道路，你才能成为上面这张图片中的人。 而一旦走上了错误的道路，你就会成为下面这张图片中的人。 我想你一定希望自己成为前者而非后者。如果你已下定决心要干一番自己的事业，而且你也不讨厌钱的话，这份指南将为你提供一份如何开展新生意的线路图。此外，当你偏离正轨时，这份指南也能为你解惑如何摆脱困境。 如果你和我一样，偏爱通过阅读来获取和吸收信息，你可以继续往下读。但如果你更偏爱讨论型的形式，我为你准备了这个视频 [https://www.youtube.com/watch?v=4TIvB8zDFio&feature=emb_logo]。 这份指南是为那些已经决定要走自由职业路线的人制定的。如果你还正在纠结是否要走自由职业，我会建议你 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/freelance-web-developer-guide/</link>
                <guid isPermaLink="false">60360f93c354c605689ea712</guid>
                
                    <category>
                        <![CDATA[ 自由职业 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Wed, 21 Apr 2021 08:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/02/Hit-with-money.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>开发者走自由职业路线已成普遍。对很多在 freeCodeCamp 刚刚完成学习的人来说便是如此，他们并不想“为别人打工”，而是想为自己打拼。不仅如此，很多在职的开发者也都在想着单干。</p>
<p>同样受自由职业路线吸引的还有那些虽然已有一份开发工作但是想额外赚点外快的一群人。</p>
<p>但无论出自何种原因，重要的是，如果你想建立自己的小事业，你要能够走对自己的每一步。走上正确的道路，你才能成为上面这张图片中的人。</p>
<p>而一旦走上了错误的道路，你就会成为下面这张图片中的人。</p>
<p>我想你一定希望自己成为前者而非后者。如果你已下定决心要干一番自己的事业，而且你也不讨厌钱的话，这份指南将为你提供一份如何开展新生意的线路图。此外，当你偏离正轨时，这份指南也能为你解惑如何摆脱困境。</p>
<p>如果你和我一样，偏爱通过阅读来获取和吸收信息，你可以继续往下读。但如果你更偏爱讨论型的形式，我为你准备了<a href="https://www.youtube.com/watch?v=4TIvB8zDFio&amp;feature=emb_logo">这个视频</a>。</p>
<p>这份指南是为那些已经决定要走自由职业路线的人制定的。如果你还正在纠结是否要走自由职业，我会建议你读我另一篇名为  <a href="https://www.freecodecamp.org/news/tips-for-making-money-as-a-freelance-developer-39fae6b76972/">“自由职业开发者如何赚得收入”</a>的文章中的第一部分内容。.</p>
<p>对于那些已经下定决心的朋友，我们就正式步入主题吧！</p>
<p>由于种种原因吧，这篇指南很长。下面是一份我们将会讨论到的内容的大纲：</p>
<ol>
<li>自由职业开发者赚取收入的3条核心法则</li>
<li>为你的事业谋篇布局
<ul>
<li>为你的经营筹集资金</li>
<li>确定你的服务群体</li>
<li>确定你的服务项目和服务费用</li>
<li>确定你的经营架构</li>
<li>筹划经营时的“待办事项”</li>
</ul>
</li>
<li>开始你的经营
<ul>
<li>“迈对第一步”的重要性</li>
<li>待完成的经营管理事务</li>
<li>待完成的市场营销事务</li>
<li>开始经营时的“待办事项”</li>
</ul>
</li>
<li>为你的新生意拓展客户
<ul>
<li>在短期内获得客户的同时也要关注长期</li>
<li>如何在客户面前推销自己</li>
<li>短期内如何寻找客户</li>
<li>长期内打造自己的品牌</li>
<li>展开市场营销时的待办事项</li>
</ul>
</li>
<li>管理你的日常经营
<ul>
<li>经营管理&amp;财务管理</li>
<li>管理你的发展/重大事宜</li>
<li>确保日常经营管理正常运行的“检查清单”</li>
</ul>
</li>
</ol>
<h2 id="3">自由职业开发者赚取收入的3条核心法则</h2>
<p>自由职业开发者要想赚取收入，首先要对普通意义上的赚钱过程有一个认识。如果连基础的问题都还没搞清楚就贸然想要捞一笔，那就会想玩大富翁一样，你的对手个个老奸巨猾，可你连基本的游戏规则都还糊里糊涂、摸不着头脑。</p>
<p>想要赚钱有3条法则：</p>
<ul>
<li>你要明白，你赚到的钱的多少直接和你为他人提供的价值大小挂钩。</li>
<li>你要明白，要想赚钱，就要把时间花在高价值的事情上。</li>
<li>你要明白，当你开始单干的那一刻，你就已然投身一份全职工作之中，无论你是否已有客户。</li>
</ul>
<p>让我们一个一个来看。</p>
<h3 id="">开发者一定要认识到，要想赚钱就意味着你要为他人提供价值</h3>
<p>很多初次投身创业的人在传统的工作中已经待习惯了。这种传统是指，你的报酬是以你的工作时间来衡量的。好比说，如果你获得了一份时薪为X的工作，那么无论你在这一小时里做了多少有价值的事情你都会得到X的报酬。</p>
<p>但是，当你为你的客户提供开发服务时，他们更关心的是你的服务中为他们创造了多少价值。举个例子来说，假如你要为一家小公司制作一个网站或是开发一款App，决定这家公司愿意支付你多少酬劳的是他们预期在未来能够从这一网站或是App中获取的价值高低。</p>
<p>客户不会再想时薪制的工作那样基于你的工作时间投入来支付你酬金。取而代之的是，依据你的客户在未来因你的服务而会获得的价值增长。</p>
<p>说白了，就是你要明白，要想赚钱，你的服务就要能为客户提供价值，而无关你投入时间的多少。</p>
<p>另外很重要的一点是，有没有价值和价值的多少永远不是你说了算，而是客户说了算。太多情况下，开发者自己觉得基于某一种框架搭建的网站要“优”于基于另一种框架搭建但外观和功能大差不差的网站。</p>
<p>然而要尤为强调的是，如果这两种设计都能很好地满足客户的需求，那么哪一种成本低，哪种就能为客户提供最大化的价值。</p>
<p>试着这么去想，假如一个客户在花费$2,500的情况下就能获得一个利用CMS建立的网站。而你却提议用Bootstrap去建立这样一个网站，但是价格为$3,500。你可能会觉得你的方案会更优，因为你用的是“实码”而不是诸如WordPress或是Joomla之类的CMS。</p>
<p>但是，等到你们都完成设计的那天，你们的网站在视觉上看起来没什么两样，两个对于吸引生意来说几乎不分上下。这种情况下，你所认为的“更优”的方案就并不能为客户带来更高的价值，因为它成本更高。显然，客户也不会选择这样一种方案。</p>
<p>想要赚钱？那就开始想像你怎么才能创造出客户心中所理解的价值。</p>
<h3 id="">开发者一定要明白，要想赚钱，就要把时间投入高价值的事情中去</h3>
<p>看了这个小标题，你可能会发出“咄”的一声，但你读到后面会大吃一惊。我见到过很多很多很多很多很多小公司或是小经营把时间花费在“鸡毛蒜皮”的小事上。</p>
<p>试着这么去想。很多小经营能通过从事X活动来获取可观的收入。接着他们就想，要不再新开辟一种服务Y来壮大一下自己的生意。如果服务Y经营不利，他们就会又想着去干服务Z。</p>
<p>遗憾的是，这种策略是有点荒谬的。如果活动X能够赚钱，那就不要再把资源浪费到别的活动了，把X做大做强就够了。换句话说，挑选出你最能创造价值的活动，把它做大做强！这也是为什么马克·库班会说那句名言，“傻子才会搞多元化。”</p>
<p>让我们来看两个例子吧。</p>
<p>设想你的客户是小型企业，你能为它们建立一种相对简单、只具有某些功能的网站，为此你收取$3,000的服务费用。创建一个这样的网站你需要花费20个小时（也就是说，你每小时可以赚到150美元）。</p>
<p>但现在，设想你有能力去设计一种更大规模的电子商务产品，每卖一个就能赚$7,500到$10,000。但是，这样，你每小时的投入就只能获得$130的报酬，因为这个项目要更加复杂一些。</p>
<p>纵观两个项目，你很容易会去想第二个项目会更赚钱。但别忘了，第一个项目的单位投入报酬要更高。也就是说，你应该关注的是如何从那个$3,000的项目中赚更多钱，并把它设置为你的主营业务。</p>
<p>简单来说，你要明确哪些项目是你进行单位投入后能获利最多的，然后  <strong>只去</strong>  专注这些项目尽可能地把它们做大做强就行了。</p>
<h3 id="">作为自由职业开发者，你一定要明白，你在做一份全职工作</h3>
<p>我曾与很多初创企业老板和创业者聊过，其中很多人都没有认识到自己在单干的那一刻起就开启了一份全职工作。哪怕是你连一个客户也没有，你在做的也是一份全职工作。我强烈强烈强烈强烈认为，很多小公司倒闭的主要原因中有一点就是他们没有认识到这一点。</p>
<p>让我来给你解释解释为什么说你是在做一份全职工作。</p>
<p>假如有一个叫Joe的开发者刚刚创立了它的自由职业开发业务。他搭建了一个网站，用以宣传推广他的服务，或许还花了点钱做了一些广告营销。后来它时不时地接了一些散客。他每次都能按时完成客户交付的项目，但除此之外对壮大自己的业务从未考虑更多。可能一年下来，他会每周花上20个小时开展自己的经营。</p>
<p>到了年底，Joe不禁感概，为什么自己的生意还是停留在初级阶段。然后，心想手机接到的订单越来越少，自己的广告营销也不是很有用，Joe就关掉了自己的经营，还心想是自己的营销问题导致自己经营失败。</p>
<p>但是，Joe没有认识到的是，打他开始经营的那天起，他就开启了一份全职工作。他之所以会失败，是因为它只是把经营当成了自己每周20个小时的副业。</p>
<p>其实道理很简单。天下没有免费的午餐，没有工作，就没有收入。这点对创业者同样适用。当你开始自己的经营时，就当自己是在做一份全职工作，每周投入不少于40个小时的时间进去。</p>
<p>也就是说，如果说你每周的编程和日常管理花费只需20个小时，那你就  <strong>需要</strong>  把剩余的时间用到去拓展新生意上。所以如果Joe每周用20个小时编程，就应该把另外20个小时用到拓展自己的人际关系网或是其它营销活动上去。倘若他花了这些时间，他的生意也会越来越多。</p>
<p>当你开始自己的经营时，记住这条简单的法则。你现在在做的事全职工作。只要你除了要编程还有别的空余时间，你就一定要  <strong>尽最大可能</strong>  利用剩余的时间去招揽更多的生意。</p>
<p>你想获得成功吗？如果你的回答是肯定的，那就好办了。记得，你一定要为你的客户提供价值，要专注于那些能够创造价值的事情，即那些能够在单位投入内产出最多报酬的事情。最后，要为你的生意投入足够的时间。这三点对于任何新生意来说都是盈利的核心法则。</p>
<h2 id="">为你的自由职业发展新事业谋篇布局</h2>
<p>当你决定好要开工时，为你的生意谋篇布局是下一步行动的重中之重。做好计划真得真得真得非常非常重要。很多创业者脑袋一热就开业了，开展的经营活动毫无章法，就这还希望能够从中捞上一笔。</p>
<p>我这么说没有什么恶意，只是开办生意前没有计划就好比跳进你的车里漫无目的地四处乱逛一样，然后当你最后发现自己并没有到达想去的地点时又会觉得惊愕不已。</p>
<p>既然如此，那我们就看看在为你的新生意“准备”阶段你都需要什么吧。</p>
<p>要想让你的新生意落地，需要好几个步骤。我们一个一个来看吧，它们有：</p>
<ul>
<li>为你的经营筹集资金。</li>
<li>确定你的服务群体。</li>
<li>确定你的服务项目和服务费用。</li>
<li>确定你的经营架构。</li>
</ul>
<p>让我们一探究竟。</p>
<h3 id="">自由职业开发者需要为自己的新经营筹集资金</h3>
<p>看到这个小标题，你可能会心想，“就这还要筹集资金？”这也不难理解，因为在大多人心中，一台笔记本电脑对于自由职业就够够的了。</p>
<p>嗯……不对。你的新经营会牵涉到很多花费，尤其是如果你想要……你懂的……大赚一笔。这些花费可能包括服务器空间租用费，经营负债保险费，专家咨询费（如律师、会计咨询费用），甚至更多。</p>
<p>但好消息是，在今天开办一家公司你并不需要花费太多。尤其是当你开始盈利时，你最初花的这点钱相比之下简直就是九牛一毛。铺垫了这么多，一起来看看为你的初始运营筹集资金时需要注意的几个原则吧。</p>
<p>原则一，处理财务时永远记得，和很多科技领域生意人的想法恰恰相反  <em>亏损是一项大忌！</em>  这一点在  <a href="https://www.amazon.com/Profit-First-Transform-Cash-Eating-Money-Making/dp/B06X15WW79/ref=sr_1_1?crid=2CEDV9AA5M3VJ&amp;keywords=profit+first+by+mike+michalowicz&amp;qid=1571165963&amp;sprefix=profit+%2Caps%2C206&amp;sr=8-1">利润为先</a>这本书里讲得非常清楚和透彻，我强烈建议各位去读一读。</p>
<p>很多小公司为了谋求更快的增长不惜亏损营业，这真的是非常糟糕的想法。</p>
<p>说它糟糕的原因很多很长，在我的另一篇文章里有详细论述。援引那篇文章中最重要的一点就是，你应该在第一天以及此后的每个月中获利。</p>
<p>要想确保一开始就盈利并保持下去，最简单的方法是，如果你是只身一人在单干，记得防止出现任何债务。</p>
<p>遗憾的是，有太多人开办公司后（不仅是在编程领域），会用信用卡支付他们的初始支出，可能还会通过个人贷款来站稳脚跟。</p>
<p>而要确保你从第一天就是盈利的并如此保持下去其实很简单，只要你防止出现债务就够了。我为什么要这么说？因为如果你要杜绝一切债务，你就只能在你盈利的范围内去支出。也就是说，就算是在最坏的情况下，你也不过是不赚不陪。</p>
<p>然后，通过对利润进行重新投资，你的经营就会日渐壮大。当你赚到钱时，把钱投回你的生意中去，从而实现生意的壮大。经营壮大了以后，你的利润会更高。如此循环往复，你就会发现，即便在没有任何债务的情况下，你的生意仍能非常良好地维持运转。</p>
<h3 id="">自由职业开发者必须确定自己的服务群体</h3>
<p>这条值得说的不多。首先，我将为大家解释一下为什么你最一开始需要确定下来某一个“客户群体”。其次，我会说明如何去做出选择。</p>
<p>聚焦某一个具体的服务群体，不要想着“只要上门，我就服务”，这样你才能获得更高的利润并把生意做得更大。这点我在后面会具体解释。很多人会觉得挑选出一个合适的领域会很难，但其实并非如此。我们不妨就此讨论一番。</p>
<p>当你开始经营自己的生意时，  <strong>非常重要的是，</strong>  你要专注于某几个具体类别的客户，不要想着去当一个“万金油”式的程序员，各种活儿都想着往自己手里揽。</p>
<p>其背后的原因也很简单：如果你一直忙着构建各种不同类型的产品，那你就会陷入这样一种境地。你要不断学习新的框架，熟悉各式各样的第三方应用，因为只要客户要求将其融合入产品之中，你就得照做。</p>
<p>虽然说我也明白，学习新的知识总是有趣的（我喜欢自称是一个活到老学到老的人），但那  <strong>绝不是</strong>  经营生意的方式。</p>
<p>原因也很简单，规模。如果你专注为某一个特殊类别的公司做产品，你就一定需要针对每一个客户去学习一些必要的新知识。但这种学习必须是合理适度的，那样才意味着最后你的收益会越来越多。我再来详细解释一下。</p>
<p>我的主营业务倾向于专注为法律公司制作和维护网站，并为其开发App用以帮助他们的律师工作起来更加顺畅。</p>
<p>鉴于很多法律公司的需求都很相似，我基本上可以对一个代码库进行重复利用。但是我在提供开发服务时是统一收费的，那么就意味着我在收取相应费用时虽然是收的完整费用，但我并非总是需要从零开始做一个产品。</p>
<p>可是相比之下，如果我的服务项目没有变，但是现在是为各行各业的公司提供服务，我就没有办法再去重复使用我已经写好的编程了。问问自己想要增加自己的利润吗？如果答案是肯定的，那就确定好一个服务领域后专注下去。</p>
<p>在选择服务群体时还需要注意的是，你最后确定提供的服务对你的客户来说过于过于过于过于高阶。因为我在专注为服务某一小类公司这方面已经经验很丰富了，我能预测出客户的需求，并为他们提供他们自己都没有考虑到的解决方案。</p>
<p>此外，因为我并非总是完全从零开始创建一个新的编码库的，我的客户也无需为各种bug过于担心。换句话说，专注于某一个具体的服务群体后，我能够为客户提供更好的产品、更佳的服务。</p>
<p>遗憾的是，很多刚刚创业的开发者都是“只要进门，我就服务”。这在长期来看对他们的盈利有着十分不利的影响。我刚刚已经解释了为什么专注一个领域能够增加利润。当你秉承“只要进门，我就服务”这种观念时，一切就会向刚刚讲到的一切的反方向去发展。</p>
<p>首先，你可能花了很多时间去学习新的知识，但最后却发现这些知识在为这个客户设计产品时用过一次后就再也派不上用场了。其次，你在学习这些新知识或是创建新的代码库时花费的时间完全本可以用于为某一个服务领域做一些营销工作。</p>
<p>也就是说，那些“只要进门，我就服务”的人是在弃绝自己真真正正去经营好生意、赚一笔快钱的良机。这就好比说，你放弃赚到一块钱的机会不顾，只为最后能捡到一分钱。这怎么看都不是明智之举。</p>
<p>在决定自己想要服务哪一具体类型的群体时，你只需问清楚自己两个问题就够了。</p>
<p>第一个，有没有哪个群体是你可以而其它开发者不可以为他们提供独有经验或价值？如果有，那你就找到了一个为你的客户提供价值的机会。</p>
<p>第二个，问问自己有没有哪一种类型的工作是你乐于去做的。</p>
<p>如果你选择的领域不能很好的回答以上两个问题中的任意一个，那你将会面临诸多问题。原因很简单。</p>
<p>首先，倘若你并不能提供独特的价值，那你只是机械地在做一些工作，最终会为难以维持生意而陷入沮丧。</p>
<p>其次，就算你不能提供真正独特的价值，但如果你对你做的工作真的很有热情，那你还是可以坚持机械地把生意做下去的。</p>
<p>选择一个自己擅长/有专门知识的领域，或者选择一个自己热衷的领域都将帮助你获得成功。</p>
<h3 id="">要想取得成功，开发者必须确定好自己服务项目和服务定价</h3>
<p>当你选择好自己的市场定位之后，你就要开始运营了。这时你就需要确定好自己要为客户提供什么服务，每项服务又该如何收费呢。</p>
<p><strong>你的服务</strong></p>
<p>确定自己的服务项目看似是一件不需要花费多长时间就能搞定的事情，但这一步其实非常重要，你要在确定服务时考虑到好几个因素。此外，在确定价格时，很重要的一点是，你最好采用固定收费的模式而非按时收费。让我们一个一个来细看这些问题。</p>
<p>在确定服务项目时，每一个自由职业开发者都应注意三件事。分析完这三件事后，如果你意向中的服务项目选择合理，你就要考虑当前潜在市场的规模。这三件事是：</p>
<ul>
<li>你对这一特定领域感兴趣的程度</li>
<li>你的服务项目可以扩大到哪种程度，以及</li>
<li>你将某些工作外包的能力。</li>
</ul>
<p>然后，你可以观察一下市场，看看还有没有剩余的市场份额足以有理由让你把自己的服务项目推入运营。</p>
<p>一定记得你的服务项目一定是围绕你感兴趣的事物展开的，这点怎么强调都不为过。就像刚刚上一小节已经提到的，如果你所从事的工作让你就像下面这张图片中的人那样感到巨无聊，那你很可能会在累垮后就放弃了。</p>
<p>选择一个总体来说在为之学习和工作时你会感到兴奋的领域，你才不会在工作时觉得一切都是单调乏味的苦差事。而且当你对工作有兴趣时，你才会投入更多的时间，相应的，你的现金流也将不会让你失望。所以说，再次强调，当你决定要去提供什么服务时，问清楚自己真正感兴趣的东西是什么。</p>
<p>选择服务项目时还很重要的一点是规模。规模一词并不难理解。随着营业额的增加，人人都会希望专注那些边际收益在增长或者至少持平的业务。</p>
<p>而那些让你能够重新利用已写完的代码库的业务就可以帮你实现上面所说的这种情况。</p>
<p>而有些业务却需要你总是从零做起并花费大量时间学习新知识，而且这些业务只适用于为极少数的客户提供服务，这些业务会让你越做越穷。在深入某一个业务时，一定问清楚自己，“我能把这项业务做大吗？”</p>
<p>需要考虑的最后一件事是你把一些工作外包的能力。你能把工作外包的能力越强，那么你就越可以通过利用他人的劳动力来发展自己的公司。</p>
<p>拿我们公司的主营业务来说，我们会将法律内容的撰写工作外包给希望将其作为副业的律师或法律专业学生。鉴于有大量的人具有执行这项工作的技能并正在寻找这样的机会，我们根本不用发愁找不到这项工作的外包。</p>
<p>再举一个例子来说，还很适合外包的是那些不会用到复杂代码库的产品。一款产品的构建越简单，就越容易雇用/外包其他开发人员来为你提供帮助。这样一来，你就不再需要让你手下具有很高技能的人去做这些工作了。</p>
<p>因此，在决定提供哪些服务项目时，你其实是在找这些业务：你要对它感兴趣，这项业务能够做大，且这项业务涉及的工作能够让你最大程度上进行外包。</p>
<p>确定好你的服务项目后，你就要去衡量一下这些业务的实际市场规模了。如果你的服务很好，但市场上却没有足够多的客户，那显而易见，这项业务并不能让你获利多少。但是，如果市场上有充足的客户，那你就可以借此大赚一笔了。</p>
<p>我们不妨一起来看看上面这些理论在实践中是如何发挥作用的。举个例子，我们最近成立的一家公司专注于以较低的介绍率为小型企业构建简单的（通常是单页）网站。</p>
<p>我们非常喜欢与小公司合作，并且鉴于我们需要建立的网站较为简单，我们将重新利用很多之前写的代码。另外，由于这些网站不需要进行太深入的JavaScript开发，也不需要HTML和CSS以外的其它开发，我们也可以把这项工作外包。因此，依照我刚刚提出的三个考虑因素来看，这项业务或许可以列为一项服务项目。</p>
<p>接下来，我们再看看这项业务有没有市场。就这点来说，正如我在  <a href="https://www.freecodecamp.org/news/tips-for-making-money-as-a-freelance-developer-39fae6b76972/">“是否应该成为一名自由职业开发者”</a>  一文中提到的那样，2017年，在美国的2400万家小型企业中大约有30％没有或需要建立一个新网站，这就意味着我们有大约有720万的潜在客户（30％\ * 2400万）。</p>
<p>T这无疑是一个庞大且可获利的市场。这样一来，这项业务就不仅能够通过三个要素的测试，还能满足一个巨大的市场，我们就可以继续推出这项服务。</p>
<p><strong>定价</strong></p>
<p>明确了服务群体，定好了服务项目，接下来得定下来你的收费标准了。定价时非常重要的是，你要按项目统一收费，不要搞任何形式的按时收费。你还要试着建立一些经常性收入。接下来我会一一解释为什么。</p>
<p>你应该尽最大可能去按统一定价收费而非按时收费，这样能让你获得更多的利润，原因有以下几点。</p>
<p>第一，随着你对目标客户群的服务越来越娴熟，你完成一项工作的时间会越来越短。</p>
<p>假如说你接手了一个价值$5,000的项目，最后花了50个小时把活全部干完。那你的时薪就是$100/h。现在设想过了几个月后，你接到了一个类似的项目，你的收费仍是$5,000。</p>
<p>但这一次，你已经不用再去花那么多的时间去学习服务对象所在商业领域的知识了，你甚至还可以重新利用上一个项目的部分编码。这样一来，你花了仅仅30个小时就完成了第二个项目。</p>
<p>这也就意味着，你每小时所获得的收益从$100涨到了$166。但是如果你自始至终按照小时收费，你就白白浪费了过往经验和先前写好的代码的价值。</p>
<p>值得注意的是，在上面的例子中，虽然你在重复利用一些旧代码，但这绝不意味着你的第二个客户获得的价值因此受损。除了从你为他设计的产品中获得价值，他也会因你在他所在商业领域的经验增加而获利。你在构建类似应用程序中的经验也在为他创造价值。因为你的丰富经验意味着你为他设计的产品会更好用，bug会更少，等等。所以说，统一固定收费是一个双赢的收费模式。</p>
<p>除了固定收费标准，你还需要设立一些能够带来经常性收入的服务项目。以我们上面提到的那家专为小企业服务的公司为例，这家公司在为客户建立一个网站后还会提供后续的维护服务。我们会将客户的网站托管在我们的虚拟专用服务器上，并为客户提供所有网站相关最新信息。这项维护服务收费为每个月$50，这就是很好的一项经常性收入。</p>
<p>通过提供具有经常性收入来源的服务，可以让你的盈收更加稳定。</p>
<p>因此，总结起来，在决定价格时，请务必记住两点：“固定费用”和“经常性收入”。</p>
<h3 id="">自由职业开发者在建立生意时要选择合适的经营架构</h3>
<p>确定了服务群体、服务项目、服务费用后，是时候建立你的生意架构了。</p>
<p>通常情况下，我会建议你组建一家有限责任公司来开展生意。这么做可以为你提供负债保护，而通常如果是独资经营者，你是不会获得负债保护的。（免责声明：本文观点不可充当为任何法律建议，作者本人并非法律专业人士。建议您寻求专业律师就您的个人情况进行咨询。）</p>
<p>一般而言，这种负债保护可以在发生诉讼时为你提供帮助，并且如果你的公司业务架构合理，还可以帮你免于独自一人承担商业债务的风险。另外，组建有限责任公司时还能享受税收优惠，我将在下面简要说明。</p>
<p>当你建立好一家有限责任公司后，很重要的是，一定要记得，你和你的公司是两个独立的法律个体。也就是说，你要把自己的私人银行账户和公司的企业账户区别开来，而且绝不可以用公司的账户去支付你的个人私人费用。</p>
<p>要想详细了解经营一家有限责任公司时相关的法律规定，还是那句话，找一位专业律师谈谈是很好的选择。</p>
<p>建立一家有限责任公司时，你还能享受到诸多税收优惠。具体情况你应向税务专业人士咨询，我在这里没有提供纳税建议的资格。</p>
<p>但总而言之，建立有限责任公司的好处包括刚刚提到的那些以及在对公司的利润征税时免征自雇税。读到这里你可以去休息一下，可以去填写  <a href="https://www.irs.gov/forms-pubs/about-form-2553">IRS 表格 2553</a>  ，这样你才能被“选举”被视为一个S公司。对了，你还需要支付给自己一份合理的薪酬。</p>
<p>我不想把这部分内容搞得太长，在下面这个视频里面，我会在针对这点详细拆解，讲得会更细致一些。</p>
<p>单是凭税收优惠这点，你就应该选择组建有限责任公司。再加上获得的负债保护，不用动脑子想你也应该建立有限责任公司。</p>
<h3 id="">一份针对准备开启自由职业的开发人员的行动事项清单</h3>
<p>一定要为你的新公司做好十足的准备，这点非常重要，怎么强调也不为过。我深信，很多小公司倒闭的原因就是因为缺乏充足的准备。如果你能利用好时间，把事事都准备完善，那你就能免于太多小公司所历经的不幸命运。</p>
<p>你当下最迫切的需求清单如下：</p>
<ul>
<li>
<p>确定好自己将如何为自己的新经营筹集资金</p>
</li>
<li>
<p>避开一切债务型或信用卡形式的融资</p>
</li>
<li>
<p>必要的话，先从事点副业，等钱攒够了再去大干一番</p>
</li>
<li>
<p>确定好你的新公司要为哪个客户群体服务</p>
</li>
<li>
<p>你选择的服务领域应是你喜欢的或是你感兴趣的</p>
</li>
<li>
<p>不要抱着“只要上门，我就服务”的理念去办生意，专注于为你的目标客户群服务</p>
</li>
<li>
<p>确定你的服务项目和服务收费标准</p>
</li>
<li>
<p>在确定定价和服务项目时，掂量一下自己有没有能力把这项服务做大，以及能够有能力外包，还要考虑这项服务有没有可服务的市场，市场规模有多大。</p>
</li>
<li>
<p>尽可能按固定标准统一收费，不要按时收费</p>
</li>
<li>
<p>确保你的经营模式里有能为你带来经常性收入的业务类别</p>
</li>
<li>
<p>组建公司时选择有限责任公司</p>
</li>
<li>
<p>尽早向专业律师人士咨询有关建立有限责任公司的优惠、法律规定细则</p>
</li>
<li>
<p>像专业人士咨询你的纳税问题，记得去填写申请公司注册的表格（同样要向税务专业人士咨询）</p>
</li>
</ul>
<h2 id="">着手创建你的自由职业发展公司</h2>
<p>在你做好所有计划之后，现在你就可以正式把计划落地了。要想迈好第一步，你首先要确保你已经拥有你开办生意所需的一切了。</p>
<p>如果你万事尚未具备，那就会向要去跑步了你还光着脚一样。所以这一部分指南将会专门介绍你开办公司后需要立即去做的事情，以确保你能吸引到客户并让你的公司高效运作。</p>
<p>在这部分中，我们会深入探讨下面几点，主题分别是：</p>
<ul>
<li>迈好第一步的重要性</li>
<li>需要完成的管理事项</li>
<li>需要完成的市场营销事项</li>
<li>活到老学到老的重要性</li>
</ul>
<p>那我们就一个一个开始谈吧？</p>
<h3 id="">自由职业开发者必须认识到迈好第一步的重要性</h3>
<p>在开始探讨如何将计划付诸行动之前，很有必要先说一说在一开始就把该准备的东西准备得井井有条的重要性，原因如下。</p>
<p>第一，没有什么时候比起现在更容易让你做好准备了。你可以想一下，当你的顾客越来越多、生意越来越忙的时候，再去想要把事情都梳理清楚只会比现在更难。</p>
<p>第二，如果你没有提前准备好下面我们要说的几样东西，当你想要火力全开的时候它们一定会掉链子。</p>
<p>换句话说，如果你在一开始就杂乱无章，那当你想要完成真正重要的工作时就一定会遇到阻力。这反过来也会影响你为客户做好工作的能力。</p>
<p>最后一点非常重要的原因是，如果一切杂乱无章，会大大拉低你的工作效率。这种低效率来自于，你在实际工作中将不断会被各种头疼的管理事务打断工作进程。这会让你的工组过程自始至终都很低效。在这些低效事务的彼此作用下，你最终面临的将是利润的减少。</p>
<p>所以说，现在就把一切事项都梳理清楚，别拖到后面。这些事项具体包括管理经营类和市场营销类两大部分。</p>
<h3 id="">自由职业开发者在一开始就要把自己的经营管理事务处理得井井有条</h3>
<p>自由职业开发者在创立公司之初遇到的最大的一个挑战之一就是要应付各种各样的经营管理事务。你很容易就会陷入这样一种思维，“我后面再去处理这些事情”，毕竟这些事务看上去确实无聊、难搞，而且貌似和你要做的实际工作没有什么关系。</p>
<p>但是，你要是在开始的时候不去做好这些事情，后面你会遇到更大的问题。在指南的稍后部分，我们会探讨如何从长期来去解决这些经营管理事务。现在，我们先来看看这些事项具体是什么吧。</p>
<p>第一项，确保你成立公司的整个流程合规合法。上面也提到过，成立公司时最好的选择是有限责任公司，但具体结合你的个人情况，要去找一位律师咨询。</p>
<p>除了成立一家公司，重要的是，你还必须获得所有必要的营业执照，并填写国务卿以及县级或市级政府要求的任何其它文件。一些州比其他州需要更多的此类文档。</p>
<p>倘若你没有依照规定去申领必需的营业执照或是其它许可文件，你就没有开展经营的法律资格。一定确认好你依法依规遵守了你所在地的所有法律要求。</p>
<p>第二项，为公司建立一个专属的邮寄地址。通常情况下，最好将你的公司地址设为住所以外的地址。</p>
<p>首先，这样的话，你就不用再在公司网站标明地址时透露你的家庭住址了。其次，这么做可以防止人们在国务卿的网站上查找公司信息从而获取你的家庭住址。再次，拥有专门的公司地址会让你的公司看起来更正规。</p>
<p>如果你在刚起步时客户很少甚至没有客户，那你的最好选择是邮局信箱。你也可以了解一下WeWork之类的共享工作空间。这种共享工作空间不仅为你提供工作场所，还会为你提供一个邮寄地址。</p>
<p>第三项，为公司开设一个银行账户。不要将你的私人财务和公司的财务混在一起，这点非常重要。公司帐户适用于支付和公司业务相关的费用，或是为你垫付的公务支出报销，或是接受客户的付款。</p>
<p>从我个人的经验看，我建议你选择一家大型的国家银行（比如Chase和Wells Fargo这些）。原因在于一家银行越大，就越可能会融汇更多的支付选择，也会在更多州设立分行、支行，等等。</p>
<p>第四项，注册获取日常运行业务所需的各种软件服务以及其它服务。</p>
<p>首先，你要购买一篮子商务软件，借助这些软件，你要建立一个品牌邮箱账户，要为公司准备云储存空间，等等。我们公司用的是G Suite套餐，但其实你有很多其它选择，比如Office 365。</p>
<p>接下来，你要注册会计软件，记好账本非常非常非常重要。后面会详细讲到如何去为你的公司记账，现在你只需要知道你需要在一开始就把会计软件准备好。</p>
<p>对多数自由职业开发者来说，我会建议去用  <a href="https://www.waveapps.com/accounting">Wave’s accounting software</a>。因为它尽管不如Quickbooks Online（许多人认为这是会计软件的模范）强大，但对于非会计人员（比如“你”）来说，使用起来要容易得多。</p>
<p>选择Wave的其它三个理由，</p>
<ul>
<li>它免费，</li>
<li>它免费，而且</li>
<li>它免费。</li>
</ul>
<p>注册好会计软件之后，你还需要注册付款处理器，以便接收信用卡付款和电子支票。大多数会计软件会附带用于付款处理的附加组件。我个人认为Wave提供的组件还可以，我们公司用的就是它。</p>
<p>注册清单到这里并没有穷尽，可能还有别的一些服务和软件产品也是你在这个阶段要赶紧注册的。</p>
<p>另一件  <strong>重要的</strong>  事情是，你要在一开始就准备好用户服务协议（合同）。一份漏洞百出的协议可能会让你最后白干一场，或是收到的报酬低于你磨来磨去订好的价格，甚至让你陷入官司。</p>
<p>为了更细致地向你解释合同的重要性并向你介绍起草协议的几种选择，我们有幸向您展示俄亥俄州  <a href="https://www.dayton-estate-business.lawyer/">罗斯法律服务</a>  事务所的Cari Ross律师的讲解（下面所附的视频是一节大课的一部分，视频打开后会直接跳转到Cari讲座的部分），再次向Cari表示感谢。</p>
<p>从我个人的角度，保险起见，我还是建议你咨询一位专业法律人士来帮你审阅你的合同。你可以找一名律师，通常情况下，他们审阅法律文件时只会收取一次费用。</p>
<p>我要强烈建议的另一件事是，代表你的企业购买专业的责任险。</p>
<p>我们公司就购有这样的保险，每月花费不到$70。如果客户要起诉我们，声称我们捆绑销售了自己的产品，我们就能将诉讼移交给我们的保险公司，让他们对此进行处理。有了这样的保险单，你晚上睡觉时安心许多。</p>
<p>上面的各项事项并不能说是你创立公司之初所需要的一切，但在我看来，它们起码不是可有可无而是你必须要有的东西。</p>
<h3 id="">自由职业开发者在正式开工前就应把市场营销策略落实到位</h3>
<p>单飞去干自由职业意味着你有了赚钱的机会。但要想赚到这笔钱，你必须有客户。而为了获取这些客户，你就得尽早落实你的市场营销策略。</p>
<p>让我们来梳理一下你在一开始时需要做好哪些相关准备。下面这份清单上的部分项目可能会让你觉得，“啊，我当然知道要准备好这个”，但当你发现有些人在开工前并不会做这些事情时，你就从讥讽变为惊愕。</p>
<p>第一项，建立公司网站，并在网站上展示你的各类工程作品集。在freeCodeCamp学习的一个好处是，虽然你还没有什么客户，但你在学习课程期间也一定已经完成了一些项目了。</p>
<p>非常重要的一点是，时刻记得，你的网站就相当于你的店铺门面。你在上面展示的作品水平和质量会间接决定你的潜在客户对你的服务水准的预判。你的网站应当突出你应经完成的作品，展示要清晰易懂，让即使是门外汉的客户也能理解你能提供的服务有哪些种类。此外，要重视客户服务，还要能让客户方便地联系到你。</p>
<p>当你在建立自己的网站时，很重要的是你要为自己的受众客户着想。所有人（包括我自己）都会犯这样的错误，那就是忘记了其实大多数客户并不关心什么编码、什么技术。他们只是需要一个解决问题的方案。</p>
<p>一个客户很可能根本不懂HTML是个什么东东，他也并不在意你在搭建响应页时是用的Bootstrap，还是Flexbox，又或是什么别的框架。</p>
<p>如果你想招揽别人成为你的顾客，那你在自己的网站上就不要以一种技术思维去讲话，这样只会将他们拒之门外。取而代之的是，你要扮演一个问题解决者的角色，并让客户觉得你已经为解决他们的问题做好了准备。</p>
<p>第二项，建立一个知名邮箱品牌的账户。解决这个问题，你可以直接注册一个商务软件包，这点我在前文也推荐过。建立一个公司邮箱非常重要，因为你也不希望你的客户拿你当儿戏吧。而且相信我，如果你的邮箱地址是“你的名字@gmail.com”，没有客户会觉得你的服务会很可靠。如果你的公司邮箱恰好就是那样，那建议你不妨这样去为你的公司邮箱命名，“brand_new_coder@gmail.com”。</p>
<p>除了邮箱，你还要为公司配备一个专属电话号码。不建议你用个人手机去接听公务来电的原因有很多。其中包括，那样的话客户就有了你的私人电话，而且你就得把你的私人电话晒在你的网站上，而且当你接听个人电话时也得以商务问候语开头，因为你并不知道这是不是一个潜在客户的来电。</p>
<p>获得专属公司电话的最佳方式是注册一个  <a href="https://voice.google.com/about">Google Voice</a>，这是每个免费注册的谷歌账号都能获取的一项服务。通过Google Voice，你可以在你的手机上添加一个网络协议电话号码。你可以通过这个号码接打电话、发送短信。而且最好的是Google Voice也是免费的。</p>
<p>倘若出于种种原因，你不想用Google Voice或是别的网络协议电话，那你也可以再买一部手机。如果你选择这种方案，一定要确保它注册在你的有限责任公司名下，这样你个人就不需要再为这部手机每个月的账单纳税了。</p>
<p>对你的市场营销来说非常非常非常非常非常重要的一步是，注册一些公司介绍页，并让客户可以在这些页面对你的公司留下正面评价。这些页面就包括你在Google My Business上的主页，Facebook上面的公司主页，以及Yelp上面的公司主页。</p>
<p>很多客户，包括那些经人推荐的客户，再决定是否雇佣你之前，都会想先在网上看看你的服务评价。如果你在网上没有任何评价的信息可供参考，你会为此付出重大代价。我在后面会详细说明如何获取这些评价。现在你只需要认识到，你需要注册并去完整填写那些各种各样的公司线上介绍页。</p>
<p>第四项，一定要把你的LinkedIn介绍页填好，越完整越好。确保你的介绍页看起来能够清晰地传达出你可以提供自由职业服务这一信息。在简介页面把你的各种作品充分进行展示，确认好你把自己的各项技能都陈列其中了。</p>
<p>此外，我也强烈建议你去参加各种各样的LinkedIn测试，从而获取上面的编程证书。上面的测试几分钟就可以完成，而且，打个比方说，你的简介页如果显示你已通过了LinkedIn的HTML、CSS、Javascript等编程认证，这会间接促使更多人联系你的服务。</p>
<p>以上只是部分你在一开始要完成的“必做事项”，你要尽快着手去办这些事情。当然，在这份指南后面的部分，我还会更深入的去解读如何获得更多的客户。现在你只需要认识到，你在忙着接受下一个项目之前，一定确保自己已经完成了上面的事项。</p>
<h3 id="">自由职业开发者要想获得成功，就必须做好不断学习的准备</h3>
<p>没错，也许你才刚刚踏上学习编程的漫漫长路。但在你获得第一个客户之前，你就应当下定决心，你还要继续学习各种各样的很多知识。</p>
<p>事实上，编程只是你开办公司过程中的一部分。如果你没有为继续持续提升自己各方面的技能做好准备，你一定会遇到问题。以下是一些你应该不断学习的领域，它们包括：</p>
<ul>
<li>沟通/软技能</li>
<li>私人和公司财务</li>
<li>公司历史（为了从过去的企业家的成功和错误中学习）</li>
<li>等等。</li>
</ul>
<p>很重要的一点是，你要记得，完成在freeCodeCamp的学习、学习编程知识你学习路上一个新篇章的开始，而非一个旧篇章的结束。要想获得成功，你就要在服务第一个客户前就树立终身学习的习惯。倘若你不想获得成功，那请放心，你再也不需要读任何一本书。</p>
<p>我的建议是，每天早上留出一定的时间来通过学习提升自己。</p>
<p>就我个人来说，我每天早晨要读书45分钟。我每天的日常有，“起床”，“简单吃点早餐”，然后“打开一本书”，读个45分钟。再次需要强调的还是，这只是适合我的方案，你可以有你自己习惯的方案。</p>
<p>对于初读者，这是一些推荐书目：</p>
<ul>
<li><a href="https://www.amazon.com/Profit-First-Transform-Cash-Eating-Money-Making/dp/B06X15WW79/ref=sr_1_1?keywords=profit+first&amp;qid=1571941818&amp;s=audible&amp;sr=1-1">Profit First</a>（利润为先）</li>
<li><a href="https://www.amazon.com/s?k=how+to+win+friends+and+influence+people&amp;i=audible&amp;crid=3GAK3S65JM2G8&amp;sprefix=how+to+win+%2Caudible%2C147&amp;ref=nb_sb_ss_i_1_11">How to win friends and influence people</a>（如何赢得朋友并影响他人）</li>
<li><a href="https://www.amazon.com/Millionaire-Next-Door-Surprising-Americas/dp/B0000547HR/ref=sr_1_1?crid=1OQV7J0HBPLWD&amp;keywords=the+millionaire+next+door&amp;qid=1571941742&amp;s=audible&amp;sprefix=the+millionaire+nex%2Caudible%2C150&amp;sr=1-1">The Millionaire Next Door</a>（隔壁的百万富翁）</li>
<li><a href="https://www.amazon.com/Small-Time-Operator-Business-Trouble/dp/163076261X/ref=sr_1_5?ie=UTF8&amp;qid=1530817425&amp;sr=8-5&amp;keywords=accounting+for+small+business">Small Time Operator: How to Start Your Own Business, Keep Your Books, Pay Your Taxes, and Stay Out of Trouble</a>（时间操作者：如何建立自己的生意、记账、缴税并摆脱各种经营问题）</li>
<li><a href="https://www.amazon.com/Innovators-Hackers-Geniuses-Created-Revolution/dp/1476708703/ref=sr_1_1?keywords=the+innovators&amp;qid=1571941666&amp;sr=8-1">The Innovators</a>（创新者）</li>
<li><a href="https://www.amazon.com/Everything-Store-Jeff-Bezos-Amazon/dp/B00FJFJOLC/ref=sr_1_2?keywords=the+everything+store&amp;qid=1571941704&amp;sr=8-2">The Everything Store</a>（万能商店）</li>
</ul>
<p>以上这些书只是我的一些建议。我不得不说，它们中的每一本都间接地改变了我的人生，并让我在商场上越来越驾轻就熟。那些极为成功人士最普遍的习惯之一就是不断学习。因此你也不妨试试。</p>
<h3 id="">自由职业开发者在初创公司后的行动清单</h3>
<p>再次强调，在你开始接客户之前，把一切事务处理得井井有条十分重要。这也是我把你在建立公司后准备接待客户前应当完成的待办事项列在一起的原因。</p>
<p>你在本节应当记下的待办事项如下：</p>
<ul>
<li>
<p>经营管理类</p>
</li>
<li>
<p>查找你所在地公司注册登记的有关法律法规，并确保你在建立公司时遵守了这些规定</p>
</li>
<li>
<p>为你的公司设立一个专门地址（可以是邮寄地址）</p>
</li>
<li>
<p>为你的公司开设一个独立的银行账户</p>
</li>
<li>
<p>注册一些必须的“经营管理类软件”</p>
</li>
<li>
<p>商务软件包</p>
</li>
<li>
<p>会计软件</p>
</li>
<li>
<p>信用卡支付处理器</p>
</li>
<li>
<p>薪资管理服务</p>
</li>
<li>
<p>自行或请专业人士设计各类用户服务协议</p>
</li>
<li>
<p>购买专业的责任险</p>
</li>
<li>
<p>市场营销类</p>
</li>
<li>
<p>建立公司网站，展示你的作品集</p>
</li>
<li>
<p>以你的公司品牌名称为公司邮箱命名</p>
</li>
<li>
<p>为你的公司设置一个专用的电话号码</p>
</li>
<li>
<p>注册填写必要的公司介绍网页，从而获取网络评价（如，Google My Business、Yelp等）</p>
</li>
<li>
<p>精心填写你的LinkedIn介绍页</p>
</li>
<li>
<p>终身学习类</p>
</li>
<li>
<p>为成为一名终身学习者列好计划</p>
</li>
<li>
<p>执行你的计划，成为一名终身学习者</p>
</li>
</ul>
<h2 id="">自由职业开发者在一切准备就绪、开始运营后就需要着手寻找客户了</h2>
<p>做好了计划、建立了公司、各项待办事项也都办妥了之后，你现在需要的是：  <strong>客户</strong><em>。</em>  对任何一个新创立公司的人来说，忙起来十分重要。</p>
<p>做任何事情都有正确的道路和错误的道路，招揽生意也不例外。我非常赞同的是，你现在需要客户，当然这是从短期来看。从长期来看，你正在构建自己的商业帝国。</p>
<p>但是，重要的是，你要避免陷入只专注短期内招揽到更多客户的错误认识，因为那样的话，你就会容易忽略那些从长期来看构建一家公司所要做到的诸多事项。</p>
<p>指南的这一部分将会探讨如下内容：</p>
<ul>
<li>在短期内招揽客户的同时要放长线做生意的重要性</li>
<li>如何在客户面前推销自己</li>
<li>短期生意资源</li>
<li>如何从长期来运营建设你的公司</li>
<li>急需着手进行的行动清单</li>
</ul>
<p>说了这么多，我们就先进入第一小节吧！</p>
<h3 id="">自由职业开发者在短期内招揽生意的同时也要放长线做生意</h3>
<p>在正式讨论如何招揽客户之前，我们很有必要先谈一谈在短期内和长期内做生意的策略。</p>
<p>就短期而言，你要致力于让生意忙起来，每天要多少赚点。就长期而言，你则要建立自己的品牌。建立品牌的价值在于你在花费更少心思的情况下却将获得更多生意，而且通常情况下也能收取更高的服务费用。</p>
<p>遗憾的是，有太多的开发者会掉入这样一种陷阱。那就是，他们把所有的时间和资源都投入了在短期内获得客户。这些开发者往往是没有一点休息的时间，且总是担心自己没有稳定的生意来源。很多情况下，他们忙忙碌碌了很多年，但是利润率却在一点一点下降。</p>
<p>但如果你眼光长远，建立了自己的品牌，那就能躲开上面的陷阱。且与此同时，你还能赚到钱。</p>
<p>要想区别短期内的忙忙碌碌和建立持久品牌很简单。短视的忙碌意味着你会花费大量的时间和资金去说服别人让自己为他们工作。同样，这些工作的利润通常是缩水的或只是中等水平。</p>
<p>而如果你有了自己的品牌，与刚刚的情况不同，客户会来找到你，你收取的服务费用也会更高。如果你踏上了打造品牌这条路，你将收获成功。但如果你只是专注于短期内忙忙碌碌，那你就会沦为下面这张图片中的人。</p>
<p>好了，那我们就说说如何才能避免掉入刚刚说到的陷阱之中。我们会先讲讲你在公司成立之初如何获取客户，然后再去讲如何打造自己的品牌。</p>
<p>要想获得客户，你首先要学会向潜在的客户推销自己。</p>
<h3 id="">开发者可以通过扮演问题解决者的角色来向客户推销自己</h3>
<p>如果一个人不能有效地把自己的服务推销给客户，那他就无法成为一名成功的自由职业开发者。然而，对大多数自由职业开发者来说，他们面临的一个大问题就是不能合理有效地推销自己的服务。</p>
<p>造成这种现象的原因是，作为开发者来说，我们很容易认为我们向客户销售的只是一条条代码和一个个产品。但事实是，我们是在想客户销售问题的解决方案。而当我们把自己看成是“开发者”而不是一个“问题解决者时”，我们就无法向客户有效传递我们的服务可以创造的价值。</p>
<p>可现实是，如果客户在开发者提供的服务中看不到价值，他是绝不会雇佣这位开发者的。相反，通过向客户表明我们可以解决他们的问题，我们就能向客户表明自己服务的价值，进而获得客户的雇佣。</p>
<p>试着想想下面这个例子。假如你接到这样一个电话，电话是你所在地的一家披萨店打来的，说他们向开发一个新网站。他们想实行网上下单，并且希望开发一款让人们随时随地都能点单的移动端App。</p>
<p>接着你去到了披萨店，然后解释了你会用什么编程语言构建这个App，然后就开始讲了一大堆店主根本毫无概念的专业术语。</p>
<p>听完你的讲解，店主不会明白你要制作的这个App和别人家的有什么不同，别人家可能做下来花的还更少，比如用WordPress等CMS工具做。他最多只是感觉听你说你的产品更好，但具体为什么根本不明白。</p>
<p>这样一来，店主是不太可能雇佣你的，因为他最后需要的是一个能够满足需要的解决方案。</p>
<p>现在设想另一种情况，你走进了披萨店，通过和店主的交谈，你了解了店主的需求和想要实现的目标是什么。接着你再向他展示你设计的网站和App讲如何满足他所提到的这些需求和目标。在讲解时，你几乎没有用到任何的专业术语。</p>
<p>接着，你又用通俗易懂的语言向店主解释了为什么CMS满足不了他说的那些要求（比如说，你可以具体说明将CMS应用到App中后会存在的功能缺陷）。</p>
<p>这样一来，你就用  <strong>店主可以理解的语言</strong>  把一切说清楚了，店主便能够看到你的服务为他带来的价值。你也更可能会得到雇佣，因为你的讲解正中他的需求。在这其中，你是一个问题解决者，而不仅是一个满嘴术语的技术人员。</p>
<p>想要获取更多客户，赚得更多的收入吗？如果想，那很简单。把自己设定为一个问题解决者，说话时少用术语，通俗易懂。打你成为一名自由职业开发者那天起，你就不能再当自己仅是一个开发者了。时刻记得，你的任务是要以最高效的方式解决用户遇到的问题。</p>
<p>讲过了如何向客户推销自己，我们一起来看看如何在短期内招揽生意吧。</p>
<h3 id="">自由开发者短期内获得生意的方式有很多</h3>
<p>自由开发者短期内获得生意的方式有很多。在后面的讲解中你会发现，这些方法  <strong>并不需要</strong>  花费很多的资金，甚至根本就不需要花费资金。让我们一起看看如何在短期内通过以下各种资源获得客户：</p>
<ul>
<li>用好你现有的联系人</li>
<li>Upwork、Thumbtack一类的服务</li>
<li>Fiverr一类的服务</li>
<li>通过Craigslist免费打广告</li>
<li>BNI等网络群组</li>
</ul>
<p>下面我们将深入探讨一下以上每种资源的优点和缺点分别是什么。</p>
<p>首先，一个简单的获取客户的好方法就是充分利用你的人脉和电话簿。但我并不是在说，你只要简简单单地告诉你认识的每个人你现在是一名自由职业开发者且你想要为他们服务就够了。</p>
<p>你真正要做的是，你在告诉每个人你在做自由职业之后，你要让他们知道，如果他们遇到了谁需要你能提供的服务，记得有你这个人存在。而且，记得给他们拿一些你的名片。并且在提过一次这个事情之后，我不建议你再去提，因为那样只会让你的朋友们感到很烦。</p>
<p>下面我将举两个个人事例来说明用好社交圈这么简单的事所带来的效果有多强大。</p>
<p>我最近成立了一家单独的公司，致力于协助中小型企业进行基本的网页设计。有一次，我和一个朋友提到我正在以自由职业的方式提供网页设计服务。我这位朋友听完便非常高兴，立刻告诉我说她妈妈创建了一座教堂（这是我不知道的），而教堂正需要一个设计新网页。</p>
<p>还有一次，我和我的邻居提到我要做自由职业开发了（我这位邻居也是一名自由职业者），并给了他一些我的名片，希望他遇到需要帮助的企业家时可以联系我。结果他的妻子很快就联系我说，他们家孩子所在学校的家长教师组织想要建立一个新的网站。</p>
<p>就这样，通过两次攀谈，我获得了$6,000的收入，而且这两个项目其实都非常简单。当然，以上只是我举出来的两个例子，这样的例子还有很多。我举它们是希望你能明白其中的道理。总之，通过你的社交圈让更多的人知道你在提供什么服务是找到并拓展第一单生意的好办法。</p>
<p>其次，你可以注册Upwork和Thumbtack一类的服务。在这些平台上，客户会主动说明自己需要什么服务并就此发起提议。通常，你在解决一个提议后会收到报酬，但获得的报酬比正常情况下做这些工作要少一些。</p>
<p>这个方法完美吗？并不。但它对新手来说帮助大吗？是的。尤其是当你开完了公司却无事可干，只能闲坐着旋弄大拇指。</p>
<p>在注册这类服务时，有几点需要多加注意。第一，你要确保在填写自己的档案页时越详尽越好。在平台支持的情况下，就连个人及服务介绍视频也都上传上去。</p>
<p>第二，在完成一个项目之后，重要的是，你要请求客户留下网站评价，当然前提是你能确保这位客户会留下好评。随着你的好评越来越多，你便能通过这些平台接手报酬更高的项目。</p>
<p>虽然说这类平台不是赚大钱的绝佳方式，但它们绝对是着手构建自己的作品集的好方法，而且在这其中你还会得到报酬。</p>
<p>再次，你可以借助Fiverr这类公司把自己打造为一个服务提供商。总的来说，Fiverr是这样一个网站，你可以在上面设置一个店铺并提供不同类别的服务。对你来说，可用的类别包括Web和软件开发。</p>
<p>但和Upwork、Thumbtack类似，你在上面提供服务时收取的报酬比正常情况下也会少一些。说白了就是Fiverr给你提供客源，为此你薪酬的一部分就到了Fiverr手中。故而你在一开始并没有为享受信息提供服务而向平台付费。</p>
<p>就个人而言，比起Upwork一类的服务，我会更推崇Fiverr。因为你无需为那些你不能真正利用的客户信息付费，而且更重要的是，你也无需再花时间为最终不能拿到手的工作机会提交解决提案。</p>
<p>与上面讨论的其它服务一样，十分重要的是，在Fiverr上，你也要为你的客户做好工作、提供优质的服务并获得良好的评价。这样随着时间的推移你就能收取更高的服务费用。同样，虽然这不是一个长期解决客源的方案，但对刚入门的你来说也是不错的选择。</p>
<p>再再次，你可以利用Craigslist来投放广告。我也搞不懂为什么，这点远远没有得到人们的充分利用。在Craigslist上刊登广告时，每条帖子只要$5，而该帖的有效期最多达30天。</p>
<p>根据你所在地区使用Craigslist的人数而定，在有些地方一条帖子过了一整个月也仍未石沉大海，可能仍然可见，而在其它地方可能需要每天左右发布一次。</p>
<p>在Craigslist上刊登广告时，有几件事我强烈建议你去做。第一，为帖子配上图片。图片中的内容应包括你的名字、你的服务项目、联系方式等等。Craigslist发布图片的标准尺寸为600 x 450像素。另外，编写广告文字时，你也可以使用少量的HTML。总之，把配图搞得漂亮点！</p>
<p>你现在也许在想，“Craigslist”？我对这个疑问的回答是，“没错”！当我告诉人们这条建议远远没有得到人们的充分利用时，他们总会一脸惊愕地看着我。这些年来，我曾向很多公司经营者（包括律师，房地产经纪人等）建议过在Craigslist做广告。那些对此表示质疑的人对他们实际上可以通过在Craigslist上做广告并赚到钱的事实无不感到惊讶。这些Craigslist上的客户或许不会是高端客户（你通常接到的工作只是做非常基本的网页设计）。但还是那句话，这笔收入对你入门是有帮助的。</p>
<p>对于生意刚起步的你最后一个也是最重要的一个选择是通过你所在地的  <a href="https://www.bni.com/">BNI 章节</a>。BNI（“国际商业网络”的简称）是一个全球性的网络组织，致力于通过  <strong>有效的</strong>  网络（强调有效）来帮助企业家发展业务。我在未来会写一篇文章，介绍如何以“正确的方式”加入网络小组（剧透预警）。</p>
<p>简而言之，BNI是让其它企业家在有机会时向你介绍生意的一种方式，以此换取你也为他们做同样的事情。BNI还能让你结识可与他们形成业务协同的企业家。</p>
<p>例如，如果你要为小型企业建立网站和应用程序，那你就可能需要一位摄影师来为这家公司拍摄优质的产品照片。而你当地的BNI分支里可能就有这样一位摄影师，你便可以向其推荐这项业务。反过来，当这位摄影师在某家公司工作时，如果该公司提及想要改善其网络形象，这位摄影师就会转介给你这项业务。</p>
<p>不要低估了网络群组的力量，只要用法得当，其效果是不可估量的。BNI可以说为你真真正正提供了一个“升级”你的网络群组的良机。</p>
<p>当然这种方法的缺点之一是它可能非常耗时。另外，一旦你的某个推荐来源决定退出群组，你就将失去这条业务往来。</p>
<p>以上只是让你在一开始就能赚几笔块钱的几种方法，但要记得建立品牌和长期业务也非常重要。下面我们就来谈谈具体如何做吧。</p>
<h3 id="">自由职业开发者必须建立自己的品牌并长远地运营自己的公司</h3>
<p>为业务花费时间和精力后获得一定的报酬只是自由职业经营的一个方面。但为自己打拼事业的真正力量源泉并不在此，而在于建立自己的品牌和一家堂堂正正的公司。到那时，你便能收取更高的服务费用。你也不必再去广寻客户，因为客户会自己找上门来。</p>
<p>建立一个堂堂正正的品牌/公司能帮助你成为下面图片中的人。</p>
<p>我预想你希望成为图片中的人。而要实现这一理想，你就需要建立一些持久的东西。这些东西涉及很多方面和诸多选择。不妨一起看看下面这几个：</p>
<ul>
<li>为什么说回头客和先前客户的推荐始终是你最重要的业务来源</li>
<li>在线评价的重要性</li>
<li>用好博客</li>
<li>用好YouTube</li>
</ul>
<p>一起来一个个深入探讨一下吧！</p>
<p>我要强调的第一点是，你必须为客户提供高质量的服务和高质量的产品。这样他们才会在将来再次光顾你的店铺，更重要的是，如此才能将他们转变为推荐来源。</p>
<p>为什么这点如此重要？原因很简单。如果不这样做，你就无法取得成功。不妨这样去想：你在做了一些市场营销之后，一个名叫Joe的蛋糕店老板给你打来电话，希望你为他的面包店建立一个简单的网站，报酬是$2,500。你接受并很好的完成了这项工作。</p>
<p>6个月后，Joe把你推荐给了他的朋友Bob。Bob是一家餐厅的老板，他想出$2,500为他的餐厅建立一个网站。同样，你又为Bob高质量的完成了网站的建设，他后来又把你推荐给了别的人。</p>
<p>你发现其中的奥妙了吗？你的市场营销活动只不过是吸引到了Joe的一通电话，但是这通电话却间接变成了3通电话。</p>
<p>上面的例子说明了很重要的一点。如果你期待为自己的每一位最终的客户都做一个针对性的市场营销活动，那你是做不下去的。因为这么做非常耗费资源，也会让你的利润边际越来越低（前提是你还能持续把生意支撑下去）。</p>
<p>如果自由职业者A赚的利润是自由职业者B的10倍，那并不意味着A的市场营销工作吸引来的客户数是B的10倍。而是因为，一方面A的确收到了不少客户的电话，但A也确保了每一通电话能够带来的不仅仅是一个客户。</p>
<p>这就是你的公司指数增长的方法所在。相反，倘若你要把市场营销的成本提高10倍才能将自己的利润提升10倍，那就只能祝你好运了。</p>
<p>那么，你又该如何确保自己能赢得回头客和推荐呢？</p>
<p>第一，在承诺的时间范围内交付高质量的产品，不要找任何借口。</p>
<p>第二，及时回复客户的电话、电子邮件等通讯方式。和客户沟通时要有礼貌，简单的说，可以像对待自己那样对待客户。</p>
<p>总之，提供良好的服务。虽然这听起来像是老生常谈，但你会惊讶于有多少开发者并不能做到这一点。</p>
<p>要想构建自己的品牌/经营长久的公司，另一个非常重要的方面是，不断从客户那里获得好评。哪怕你所服务的客户来自天南地北，仍然很重要的是，你要积累足够多的网络评价，这样才能让一些潜在客户评估并决定是否想要雇佣你。</p>
<p>你也可以把这些评价推给一些潜在客户，以供他们参考。我之所以要强调这一点，是因为有了好的评价之后，就意味着在你的市场营销没有吸引到那么多客户电话的情况下，你也能赚得更多。我们不妨再假设一个例子来说明这个道理。</p>
<p>设想开发者Joe每投入$1,000用于市场营销，能够吸引到2个到手客户。假如这两个顾客每人平均付给Joe的报酬是$3,000。那就是说，Joe第一次投入市场营销的$1,000所获得的净收是$5,000 [($3k * 2 客户) - $1k 市场营销费用]。</p>
<p>现在假设Joe想要让自己的业务量翻一番，便在这个月投了$2,000用于市场营销，最终获得了$10,000的净收。这听起来还不错，但你听了开发者Jill的传奇故事就不会这么想了。</p>
<p>开发者Jill虽说并不觉得网络评价很重要，但他通常都能获得客户的好评。结果，那些在网站上或是通过介绍找到Jill的人会更倾向雇佣Jill。这样一来，Jill在同样每花费$1,000的市场营销费用的情况下，获得不再仅是Joe获得的2个客户，而是3个客户。</p>
<p>这样一来，Jill的前三个客户为他创造的净收益是$8,000 [($3k * 3 个客户) - $1k市场营销费用)。这和刚刚Joe第一次投的$1,000所获的收益而言，要高  <strong>60%</strong> 。而当Jill投入$2,000用于市场营销时，他的收益便会从$8,000增加至$16,000。</p>
<p>你能看到吗？Jill和Joe的收入差距将会一步一步拉开，尽管他们在市场营销方面的花费增加是同等数量的。有了好的网络评价，你便能将你的市场营销支出真正转变为利润。而忽视网络评价的累积只会让你事倍功半。</p>
<p>在向客户征求好评时，这里有有几点建议供你参考。第一，这点可能听起来很傻，当你要向客户征求好评时，一定确保他会给你好评（有些人的评价可能会让你觉得很吃惊）。</p>
<p>第二点重要的是，一定要在有人浏览的网站上积累评价，比如Yelp，Google，Face book，等等。</p>
<p>第三，不要仅仅是请求客户为你进行评价。如果你只是单纯请求客户评价，可能很少会有人真正为你评价。</p>
<p>其实，在完成一个项目之后，你可以给你的客户打一个电话，向他表示感谢。然后一定要告诉他们，如果他们还需要任何相关服务，都可以给你打电话，并询问在这次服务过程中有哪些方面是你还可以做得更好的。如果客户心情很好，你便可以询问他是否愿意为你进行一个在线评价。如果客户同意了，一定要表示感谢，并告知其你将向他发送一封邮件，并将评价链接附在邮件中。这封邮件大体可以是下面这种形式：</p>
<p>亲爱的 [客户名字],</p>
<p>感谢您选择我公司为您服务。先前曾向您提及，发邮是向您发送本次服务的在线评价链接。如能对本次服务进行积极评价，我们将不胜感激。您可通过点击下面的链接前往评价页面：</p>
<ul>
<li>Google</li>
<li>Yelp</li>
<li>Facebook</li>
</ul>
<p>欢迎也期待您再次需要我们的服务时向我们致电。</p>
<p>再次感谢您，<br>
[你的名字]</p>
<p>注意，你放的评价链接要直接能跳转到网页的评价区域，不要只是转到了一个网页。这样一来，你会发现，有越来越多的客户会不仅说到还会做到。</p>
<p>建立持久品牌的另一个方法是建立一个博客，并以满足客户需求为标准发布信息。我们公司的主营业务是为法律公司提供解决方案，这个方法也是我们建立品牌的重要手段。</p>
<p>要想开发一个成功的博客，关键仍然在于提供对客户有用的信息，而不仅仅是你想写的信息。</p>
<p>我强调这点的原因也很简单：据我了解，人们在写博客时犯的一个最普遍的错误就是“我想写什么东西我就写什么东西”，而不是“我的潜在客户需要哪些信息我就就此提供哪些话题信息。我将举两个例子来说明这个问题。</p>
<p>我写了一篇关于律师事务所如何利用Evernote来减少办公室的杂乱无序的文章。过了一段时间后，分析表明，我的这篇文章始终在接收流量。由于这篇文章很受欢迎，我便写了一系列关于律师事务所如何利用 Evernote 提高办公室效率的文章。该系列的每篇文章都为我们的网站吸引了大量流量。</p>
<p>相反，我还写了一系列关于律师事务所如何改善网络安全的文章（对于处理敏感信息的人来说，这一点非常重要）。然而，分析却显示，这些文章收到很少甚至几乎没有流量。换句话说，我们的潜在客户根本就没有在寻找这一信息（也许这就是律师事务所网络安全如此糟糕的原因——当然这只是我个人想事后发发牢骚）。</p>
<p>通过这两个故事，想要告诉大家的是：监测你的分析数据，多写那些被证明受欢迎的主题，不要写那些不受欢迎的主题。在你提供了有用信息之后，你会惊讶地发现有很多潜在客户将会给你打电话。</p>
<p>与博客一样，建立YouTube频道也是很好的方法。利用YouTube进行品牌构建的步骤与构建博客非常相似。也就是说，你可以根据数据分析，就客户感兴趣的主题制作视频。不要将精力投入到客户显然不感兴趣的话题上。</p>
<p>此外，还很重要的一点是，在制作YouTube视频时，你要真正花点心思。只有这样，你才能产出高质量的视频。确保你的视频光线充足，用麦克风录制，并至少做一些基本的视频剪辑（网上有很多免费/实惠又易用的视频编辑软件）。</p>
<p>有关YouTube我还要说的一点是，在录制视频时，如果你感到有些紧张或是焦虑是很正常的。记得：那些知名的YouTube博主在一开始跟你也一样。如果你去看看他们早期录制的视频，你就会发现会和他们现在的视频在质量上有明显差别。毕竟，谁也不能一口就吃成一个胖子。</p>
<p>到了本节的结尾，希望大家记住的是，通过一些短期的策略，你的确可以赚到一些快钱。但是通过建立自己的品牌，会为你到来谁也剥夺不走的东西，而这些将让你拥有一个为你创造更多收益的公司。</p>
<h3 id="">自由职业开发者在做好准备开始招揽生意时的待办事项清单</h3>
<p>本节，我们分别讨论了如何在短期内和长期内招揽生意。此外，还讨论了建立品牌的重要性，即它能为你带来更多收益。</p>
<p>下面这份清单可以保你客流源源不断：</p>
<ul>
<li>
<p>从现在就把自己设定为一个“问题解决者”而非单纯的开发者</p>
</li>
<li>
<p>记得，你的客户并不在意什么编程或是什么技术。他们只关心你能不能解决面临的问题。</p>
</li>
<li>
<p>开展一次头脑风暴，想想你的客户面临的潜在问题可能有哪些，你针对这些问题又有哪些解决方案，想想如何在向客户讲解这些方案时做到通俗易懂，能让客户听明白。</p>
</li>
<li>
<p>训练自己的“主动聆听”技能，以便自己能够捕捉到潜在客户想要传达的需求和问题。</p>
</li>
<li>
<p>开始着手短期生意的建立，这样你在短期内才能有利润。</p>
</li>
<li>
<p>让你认识的每一个人都知道你在自由职业。在和他们交谈时，注意谈话的目的不是为了把你的服务推销给你现有的社交圈，而是要把你现在的社交圈转变为你的推荐资源。</p>
</li>
<li>
<p>将自己的LinkedIn介绍页填写完整。你的档案页要足够清晰地传达出，你是一个可以接活儿的自由职业开发者。</p>
</li>
<li>
<p>在Upwork和Thumbtack一类的服务平台上创造一个关于自己的详尽介绍页。可以考虑在这类平台上竞标一些工作机会。</p>
</li>
<li>
<p>通过Fiverr提供服务，并开始在Craigslist上投放广告。</p>
</li>
<li>
<p>加入BNI等类似的网络群组。</p>
</li>
<li>
<p>开始着手长期的品牌建设</p>
</li>
<li>
<p>在“Google My Business”、Yelp和Facebook上创建自己的企业主页，并开始在这些网站上积累客户评论，让评论越来越多。</p>
</li>
<li>
<p>建立一个可以满足客户需求的博客。每过一段时间后，透过数据分析来确保你正在撰写客户感兴趣的主题。</p>
</li>
<li>
<p>开创一个YouTube频道，该频道同样要能满足客户的需求。与博客一样，利用分析来确保自己正在针对客户感兴趣的主题制作视频。在制作视频时你要下足功夫，这就需要你考虑好脚本、灯光、音质等。</p>
</li>
</ul>
<h2 id="">自由职业开发者必须通过研发系统来对他们的每日经营进行管理</h2>
<p>当你的店铺已有客户光顾时，非常重要的就是，你要确保能够合理地对你的日常经营进行管理。否则，就会导致你的工作低效，甚至是浪费时间。而这进而会导致两个更加严重的后果，即利润的下滑和客户的不满意。</p>
<p>倘若你想避开上面的问题，很重要的一点在于，你要接受自己现在除了是一名开发者，也是一名公司管理者这一新角色。在管理公司时，你既要关注经营性的一些事物，也要关注一些实质性的待完成的工作任务。否则，你将面临经营管理问题，这些问题在不你不期望它们出现的时候便会爆发出来，进而妨碍你实质性工作推进。</p>
<p>所以说，虽然经营管理的工作看起来很枯燥，但它们也很重要，足以值得你给它们足够的关注。</p>
<p>有太多的自由职业开发者会这么想，“我是个开发者，又不是什么商业人士”。坦白说，如果你在刚开始自由职业就这么想，那你就不必再担心如何成为一名优秀的经营管理者了。因为在经营管理问题爆发前，估计你的公司就已经破产了。</p>
<p>如果你想躲过这种噩运，那就好好把公司的方方面面都打理明白。</p>
<p>本节的讨论将针对公司运营期间的问题，具体涵盖以下方面：</p>
<ul>
<li>管理公司的经营管理和财务事项。</li>
<li>以一种高效、高回报的方式管理你的实质性开发工作。</li>
<li>一份行动清单，旨在帮助你制定保持业务正常运转的运营模式。</li>
</ul>
<p>再次强调，这点非常重要，一定要把自己看成是一个“商业人士”，并清楚理解你的公司业务是开发工作。试着这么去想，如果一名厨师开了一家餐厅，并且自己掌勺做厨师长，那么他现在就不再仅是一名厨师，还是一名餐厅老板。这同样适用于你的情况。好了，那我们就步入正题吧。</p>
<h3 id="">自由职业开发者必须关注公司的经营管理和财务管理</h3>
<p>之所以要先谈经营管理而非实质工作管理的原因很简单，经营管理是令绝大多数自由职业者头疼的问题。</p>
<p>如果忽视经营管理，一旦出现经营问题，你就不得不停下一切工作去解决这些问题。也就是说，无论你手头在做什么开发工作，你都只能被迫放下，并无奈地告诉客户项目将要延期，由此才能解决一个本可以避免的问题。</p>
<p>举一个简单的例子，这个例子我在现实中已经见过多次，那就是有的小企业主平时从不记账。但到了年末，这些记账工作又必须完成，这样企业才能提交纳税申报表。而且企业必须提交纳税申报表，这样开发者才方便提交自己的个人纳税申报表。</p>
<p>每当纳税申报提交截止日期临近时，这些小企业主就只能放下手中的一切实质性开发工作，24小时连轴转个不停，只为算清楚过去12个月来的记账。</p>
<p>但这种情况是完全可以避免的，只要你每周花费很少的时间就可以把近一周的账簿记清楚。这样周复一周，你就可以有条不紊地处理记账工作，让记账工作成为你工作流程的一部分，这样下来根本不会影响你的生意开展。</p>
<p>作为一名自由职业开发者，做好公司管理事务的第一步是为公司制定月度预算以及财务限制。</p>
<p>有太多太多太多太多的小企业主运用“银行余额预算”。就是说，他们往往是简单地瞅一眼自己的银行账户余额，得知自己银行有X的存款，就以为自己有X这么多钱可以支配。天呐，如果一个人这么去管理自己的预算，那他不出现财务问题才奇怪了呢。</p>
<p>对你的新公司来说，  <strong>至关重要</strong>  的一步就是建立一个财务系统。如何建立这样一个系统不是一句话两句话能说清楚的。所以，考虑到我写这份指南的初衷，我强烈建议你去从  <a href="https://www.amazon.com/Profit-First-Transform-Cash-Eating-Money-Making/dp/B06X15WW79/ref=sr_1_2?crid=193NK2KW6LCZX&amp;keywords=profit+first&amp;qid=1574101304&amp;s=books&amp;sprefix=profit+first%2Caps%2C632&amp;sr=1-2">利润为先</a>  这本书中去寻找答案，并实际执行书里建议的财务系统。诚然，世界上一定还存在别的可能的管理模式，但我认为这本书中给出的坚实框架对那些苦于财务管理的人很有帮助。</p>
<p>在经营一家公司时，关键一点要记得的是，你公司的银行账户绝不是你的私人账户。千万不要哪天心情不错把公司募集的资金洗劫一空。</p>
<p>我见过太多的一种情况是，当一个企业主从他的公司账户中提取过多资金用于私人用途时，公司运营出现现金缺口，无法支付到期的账单。而为了弥补这一资金缺口，企业主便会在工作中通过降低服务项目收费来在短期内筹集现金。这种降低收费的做法意味着公司账户的钱最终还是不多，而且企业主自己在面临个人账单时也会难以为继。</p>
<p>这种恶性循环一旦开启便很难打破。但通过设立一些财务限制，你便可以避免陷入这一陷阱。</p>
<p>下一个关键点是，你要定期开展会计工作并了解你的公司账簿。我从来不能理解为什么有些小企业主会从来不打理自己的账簿。也正是由于这类企业主不搭理账簿，他们永远也不知道自己赚了多少钱。这样造成的结果是要么你觉得自己做的很好，但实际没那么好，要么你觉得自己做的很差，但实际没那么差。</p>
<p>简单来说，如果你不打算定期整理自己的账簿，那你就别为自己做生意了。</p>
<p>如何打理好账簿同样是一门非常复杂的学问。但有幸是的，  <a href="https://kpibookkeeping.com/">KPI 记账</a>  的Erin Lehr制作了一组教学视频，旨在帮你入门如何记好你的账簿。她还挑选了一些她讲解的PPT拼凑成了两个单独的文档。你可以下载她关于资金管理的PPT  <a href="https://freecodecamp.s3.amazonaws.com/Money+Management.pdf">点击这里</a>  和她的会计科目表示例  <a href="https://freecodecamp.s3.amazonaws.com/Freelancer+Chart+of+Accounts.xlsx">点击这里</a>。</p>
<p>同样，下面的视频只是供入门使用（Erin的视频是一个更大课程的一部分，此链接将直接打开到她的视频部分）：</p>
<p>再次强调，定期整理好账簿十分十分重要。如果你需要帮助，可以联系Erin这样的会计人员。不要怕麻烦、嫌枯燥，就不去整理了。</p>
<p>就管理你的财务来说，我再说最后一点，你要了解没有任何业务和没有钱的区别。</p>
<p>我曾为太多的小企业做过咨询，他们打电话给我的时候一个个都惊慌失措，因为他们说自己银行里没有一毛钱。这些惊慌失措的企业家在开始这些谈话时往往会说，自己的生意已经彻底没救了。换句话说，他们觉得自己之所以破产的原因在于他们的生意太少、太慢了。</p>
<p>可每次和这些企业家谈话后，我都发现其实他们的生意一点也不少，反而挺多的。只不过他们花钱的速度和赚钱的速度一样快，而这些钱往往是铺张浪费（包括购买高端汽车这种大额消费）。</p>
<p>“没有任何生意了，”这句话是说你每天都只能搓手指，没有任何工作可以做。但如果你有一大堆的工作要做，但是却没有钱，那大概率表明你需要实行更好的财务限制了。</p>
<p>做好经营管理和财务管理都十分重要。经营管理包括及时向国务卿提交一切必要的文件，及时更新你的营业执照，等等。</p>
<p>如果你没有做好这些事务的管理，后果将是灾难性的。你绝对不想在编程项目做到一半时，坐在那里却发现自己那时已经没有合法的经营权了，这一切都只是因为你没有向监管实体提交一纸文书。一定要对你的许可和监管要求充分了解，必要的话，可以聘请律师帮助你处理这些问题。</p>
<h3 id="">自由职业开发者必须高效做好公司管理</h3>
<p>作为一名自由职业开发者，他所谓的“实质性”工作就是那些客户支付费用让他们做的工作。换句话说，就是开发工作。</p>
<p>如果你能坚持读到指南的这一部分，那我想你应该对赚钱是感兴趣的。倘若你正酝酿着如何大赚一笔，但你又没读到这篇文章，也许是因为公共图书馆里的书都很没意思吧，那么这一部分就将着重讲解如何让你的实质性工作的利润最大化。</p>
<p>前文也曾提到，实现利润的关键一点在于弄清楚自己高价值的活动，并确保你在做这些业务时投入的时间不仅充足还要高效。</p>
<p>为了帮助你实现这一点，本部分将讨论的内容有：专注那些“正确”的工作的必要性；如何确认你投入的时间多少是合理的；关于确保你高效利用所投入时间的几点建议。如果你把这些问题都搞明白了，那你就有可能赚到更多钱。如果你不关注这些问题，那就不会呗。</p>
<p>要想致富，最重要的是要确保你把时间主要花在了高价值的活动上。这背后的理念很简单：识别做哪些任务能赚得最多，然后就  <strong>多做这些任务</strong>！</p>
<p>看到这句话，你可能会不屑一顾，但如果你知道有多少创业者不能认识到这一点之后你会大吃一惊。我们不妨看一些具体的例子，既有实质性工作相关的，也有市场营销工作相关的。</p>
<p>假设你以$3,000的价格开发了一个网站。在你看来，这是常为小型企业设计的常规类型网站。该站点包含多个页面，有很多媒体，还有在线订餐等其它功能。</p>
<p>现在假设你做好这样的项目通常需要大约20个小时。这意味着这一类型的工作每小时可为你带来$150的收益（($3k/20小时）。</p>
<p>现在，假设你可以为小型企业建立一个单页的“入门网站”，每次仅需$500。通常，你可以在两个小时内处理此类项目（假设你已经开发了很多模板可供参考）。这意味着你可以以每小时$250（$500/2小时）的速度完成这些“入门”网站建设的工作。</p>
<p>尽管后一种工作的总收入可能比前一种少，但实际上后者每单位投入获得的回报会更多。一个真正想赚钱的开发者因而会专注于做更多的“入门”网站，而较少去做刚刚提到的大型项目。</p>
<p>尽管上面列出的数学运算似乎很简单，但你会惊讶地发现，有多少开发者（以及与此问题相关的一些小企业主）没有专注于每单位投入产出最多的工作。之所以造成这种现象，可能是由于他们未跟踪记录自己的投入（即未记录自己在某项工作上投入了多少时间）或者是简单地关注工作的总体回报而忽略了每小时可获得的利润多少。</p>
<p>无论是何种原因，他们都在识别自己最能获利的活动时出了差错，而专注于那些不能在单位投入产出最多的活动无疑就好比踏上了一条越走越错的路。</p>
<p>记录表明，Mark Cuban曾说，多元化是“为白痴而设”，Warren Buffett则称多元化为“疯子才会做的事”。</p>
<p>两人所说的话同样适用于自由职业领域。如果你发现某项活动比其它任何活动都更能赚钱，那你就没有任何理由再去从事其它的活动。反之，你应该试着尽可能多的去从事那些获利最丰的活动。</p>
<p>这点无论是对你的实质性工作来说，还是你的市场营销活动来说，甚至是几乎所有的事情来说都是一样的。简而言之，专注于那些高价值的活动。</p>
<p>识别了你的高价值活动之后，接下来很重要的就是，你要把大量的时间投入到那些活动上去。考虑好效率和时间的关系，由此来决定你需要做多少工作（Elon Musk这句话着实让我醍醐灌顶）。</p>
<p>试着设想这样一种情况：Jill和Joe都是自由职业开发者，并且做着类似的工作。但是，Jill的工作效率要比Joe高出25%，也就是说，Jill在一小时内完成的工作量要比Joe高出25%。</p>
<p>你可能会觉得，Jill一定会比Joe赚到更多钱，是不是？可问题是，吉尔每周仅工作30个小时，并认为她较高的效率可以弥补任何她浪费的时间。不同于Jill，Joe每周工作40个小时。结果一周后，Jill 30个小时的工作量将相当于Joe 37.5个小时的工作量（Jill工作30个小时*乔的效率的1.25倍）。</p>
<p>但因为Joe一周会工作40个小时，这样他完成的工作量反而超过了Jill。由于Joe完成了比Jill更多的工作，归功于他更好的职业道德，作为自由职业开发者，他也将获得更多收入。而如果Jill和Joe一样也工作了40个小时，那么她一周完成的工作量就将是Joe花费50个小时才能完成的工作量（40小时*乔的效率的1.25 = 50）。</p>
<p>从Jill和Joe这个经典故事中，我们不难看出  <em>我们在保持尽可能高效的同时同样要投入足够的时间</em>。</p>
<p>也正是出于这点考虑，我才会对我每周的工作量设置一个43.3小时的  <em>下限</em>  。这个数字基于这样一个简单的方程：如果我和某个人的工作效率是相同水平，而那个人每周只工作40个小时，那么通过每周多做3.3个小时的工作就相当于我这一年多做了通常一个月的工作。</p>
<p>换句话说，那些和我工作效率相当的人如果每周只工作40个小时，那么我12个月能完成的工作量就需要他们花费13个月才能完成。</p>
<p>需要强调的是，这个43.3小时只是我设置的一个  <strong>下限</strong>  。如果因截止时间临近而有额外的工作要尽快完成，那我还将投入更多的时间。而这额外投入的时间便可以通过减少下一周的工作时间来抵消掉。</p>
<p>但是，在高效工作时，我并不经常需要这种调整。通过这种方式，我每年相当于多做了一个月的工作，我也发现自己的工作产出有大幅提升。</p>
<p>再次再次强调，投入时间真的很重要。有一种过度受到追捧的理念是，“更聪明地工作比更努力地工作更重要。”对于这一想法，我要说的是。</p>
<p>与其说二者谁重要，不如说聪明地工作  <strong>和</strong>  努力地工作都很重要。我遇到过太多自由职业者，他们投入了大量的时间最后却一事无成。这是因为他们工作的效率太低了。你可以一周工作60个小时，可如果你仅用50%的效率去度过这60个小时，那么一个用100%的效率工作的人每周花费30个小时便能达到和你同样的工作量。</p>
<p>但与此同时，从上面假设的Jill和Joe的例子中我们通过运算也能发现，你的确需要投入一定的时间。这就是为什么说你的工作产出是你的工作效率  <strong>和</strong>  投入的工作时间共同决定的，而你的工作产出在绝大程度上可以反映出你的工作所得。因此，二者都值得你尤为重视。</p>
<p>这里有一条重要的建议给你，这点真的非常重要，要想最大程度地提升工作效率，就时刻设想自己当前的工作状态是低效的。</p>
<p>我曾和太多太多太多太多这样的人共事过，他们深信自己的工作方式非常高效。可每当审视过自己做事的方式之后，就很容易发现他们仍有很多明显可以改进的地方。</p>
<p>我在工作时的解决方法就是，设想自己当下是低效的，并持续不断努力追求更高的效率。时刻记得，无论你觉得自己做得有多好了，你总是还有可以改进的空间。</p>
<p>说到这里，我们已经解释清楚了为什么说识别高价值活动并为之投入时间是非常重要的。那我们就接着具体说说如何才能高效地经营一家公司吧。</p>
<p>还是那句话，非常重要的是，你要流程化自己的经营。因为你很容易陷入这样一种误区，那就是自己忙碌了一天，虽然没有完成什么实质性的工作，但回到家后，却觉得自己花了这么多时间就一定是有所成的。</p>
<p>下面的几点建议能够帮助你消除一切带来不必要干扰的“噪音”，并从一些不必要的工作中解放出来，且避开那些自讨苦吃的额外工作。一起来看看吧。</p>
<p><strong>如何高效工作：</strong></p>
<p>高效工作的第一步是运用一种名为  <em>一事只处理一次</em>  (O.H.I.O.) 的方法。这是一个简单省时的好办法，但有太多的企业家却做不到。</p>
<p>其理念很简单。在你尚未为解决一件事情充分做好准备之前，  <strong>不要</strong>  去碰这件事。回顾一下下面的情形是不是似曾相识。Joe收到一封来自一位客户的邮件。大致浏览一番后，Joe对自己说，我待会在处理这份邮件。当Joe这样想时，这就意味着Joe在未来正式处理这封邮件前还需要再读一遍这封邮件。也就是说，Joe花了两份时间去读这份邮件，而不是说读完一遍然后着手处理这封邮件。</p>
<p>现在，如果以一年为时间跨度，试想将Joe每收到一封邮件后都额外花费/浪费的阅读时间加起来将会有多少。是不是顿时觉得大吃一惊。所以说，Joe在准备好处理那封邮件之前就不应打开那封邮件。这样他就不用再去花费两遍的时间去读这份邮件了。</p>
<p>这种O.H.I.O.的方法可以应用到多个情景。想象一下自己收到的每一份行政文书（国务卿的通知，你必须填写的表格，等等）。与上面邮件的例子一样，你很容易会想先查看一下这些文档，然后便将其放在一边以做日后处理。同样，这意味着完成这些任务后你审阅了文件两次。</p>
<p>要想做到“一事只处理一次”很简单，就按字面意思去做，在你未做好准备解决它们前，不要打开一封邮件，不要拿起那份文书，不要开始一项工作。这样一来，你能省下的时间是不可估量的。</p>
<p>更加高效工作的第二步是养成这样一种思维习惯，在一件事情完成之前不要开始做新的事情。换句话说，不要每天兼顾着N个项目，但每个项目都只花一点点时间。完成一个项目之后再去开始下一个项目。否则你将永远无法形成自己的一套工作节奏。</p>
<p>关于这点的解释我想举一个我个人的例子。我们公司主营业务的很大一部分是在客户的网站上添加博客文章。另外，我们最近将我们的虚拟专用服务器转到了Siteground。这一切换带来的后果是，我们不得不将我们管理的所有网站从一台服务器迁移到另一台服务器（这是一个非常漫长的过程）。</p>
<p>在添加客户内容和迁移网站时，我们本可以采用每天向几个站点添加内容同时每天迁移几个站点的方法。但这将意味着我们需要在两个工作之间不断切换。因此我们并没有这么做，而是专门留出时间，在这些时间里我们不做添加内容的工作，而是专心致力于网站迁移，直到完成迁移为止。</p>
<p>迁移完成之后，我们再全身心地投入到网站内容的添加工作上，直至全部添加完成。也就是说，我们只有做完了一件事之后，才会再去做另一件事。</p>
<p>这样做的好处是非常可观的：每当你切换到一个工作任务时，你都必须要花上一点时间让自己适应这一工作的工作节奏。这段适应时间会大大降低你的效率。因此非常重要的是，一定要再开启新工作前完成手中的工作。不要在诸多尚未完成的工作之间跳来跳去。</p>
<p>在接受新的自由职业项目时，我始终坚持“一时一事”的方法。如果我在为客户A建构什么东西，并且我知道这项工作将花费一周的时间。那我就会告知我的潜在客户B，向他说明我在未来一周无法开始为他们的项目进行工作。同时我也会将自己的项目预期交付时间做出相应调整。</p>
<p>合理规划自己的工作流程，一个时间段只专注一件事，把自己要做的工作像排队一样排成一条线。</p>
<p>很普遍的是，我们公司往往会接到好几个项目要做，好几份合同要执行。但是我们只有完成一项之后才会去做另一项。我们绝不会在项目之间来回辗转。这么做让我们在更短的时间内完成了更多的工作。最后我们获得的利润也是更加可观的。</p>
<p>高效工作的第三步是，出现一个问题，就立刻解决这个问题。“立刻解决”就是立马马上就去着手解决。否则，这个问题只会越发发酵，变得更佳严重。</p>
<p>这里是一个简单的例子。有一天，我的生意合伙人告诉我说，我们用来同步每个人的电子邮件联系人的App出了毛病。我便立刻停下了手头的工作着手去解决这个问题。</p>
<p>比起着手解决问题较为容易的做法是来一句，“我一会就看看是怎么回事”。可是如果是那样的话，那我们公司的同事就不得不拿便签记下客户的相关信息，手动调出客户联系信息，等等。那这个App同步功能的损坏就可能会给其他人的工作流程带来麻烦。这样一来，一个小问题（这个App未正常运转）就变成了一个大问题。</p>
<p>不及时解决一些小麻烦还会在其它方面造成问题。看下面这个真实案例：有一次我正在和一位客户通电话。当时她正朝他的办公司走去。她走到办公室时，花了不少时间才打开门进去。因为她的钥匙链上挂了太多本不常用的钥匙。她在电话里还说自己甚至都不知道很多钥匙是干嘛用的。可当我在大约一年后再次和这位客户通电话时，她还是那么说。</p>
<p>试想，这位客户每天可能要浪费30秒的时间在一堆根本没必要出现在钥匙链上的钥匙中翻找那把需要的钥匙。那样每周就是2.5分钟。一年下来大概就是整整两个小时。要是把这2.5小时投入到实质性工作中，怎么也能赚个几百美元。也就是说，如果那位客户在意识到钥匙链的问题后立刻就花点时间把多余的钥匙取下，她一年的收入就能增加个几百美元。</p>
<p>这个故事在一些人看来可能有些傻。但是它的确能说明，在问题出现的时候就赶紧把它解决掉。否则就意味着后续生产效率的下降。如果你选择“我待会儿再去解决这个小麻烦”，那就很可能为了省一分钟结果浪费了几个小时。不要这么做。</p>
<p>第四步，也是提高效率最为有效的一步，改善通讯管理。通讯是你时间浪费最多的事项之一。而且尽管你的通讯完全对提高产出无益，但你还是觉得自己完成了很多工作。我们不妨一起讨论一下彻底避免实时通讯和更好管理邮件的必要性。</p>
<p>对很多科技公司甚至是此问题涉及的所有公司来说，它们存在的最大问题之一就在于使用Slack、Microsoft Teams、Google Hangouts等实时信息发送平台。</p>
<p>使用这些平台有两方面的问题。第一，使用这些平台时，人们会发送一条又一条的短消息，而不是把他们的想法融汇在一则信息里。这就意味着信息的接受者会在工作中频繁受到干扰，结果只能是事倍功半。</p>
<p>第二，可能是更糟糕的一点，在这些平台上，同事/员工/合作伙伴之间会分享一些和目前手头的项目毫无关系的突发奇想，而且为了表示对上一条消息的认同，平台还会充斥着大量的评论性信息。</p>
<p>以上种种信息发送在干扰人们工作的同时却不含任何可操作信息，反之，只是让接收信息的每个人不断接受提示音的轮番轰炸。与此相比，读取一条经过深思熟虑的信息要高效太多，这也是我们避开使用这类平台的原因。</p>
<p>对很多开发者来说，他们的邮件管理也有提升空间。收到一封就读一封绝不是正确的做法。你应该做的是，每天固定抽出一段或两段时间专门处理收到的邮件，而其它时间就别再管它们了。</p>
<p>这么做的原因有很多。第一，前面也说过，在你尚未准备好处理一封邮件时，不要打开它。第二，重要的是，你要想想人们倾向于如何使用邮件。有太多人脑子里刚蹦出来一个想法马上就是一封邮件。</p>
<p>有很多次，当我在中午打开邮箱时，发现有好几封邮件都来自同一位客户。通过设定一个时间，等到那时再去处理邮件，我便能一次性读完他发送的所有邮件，并一次性回复他的所有问题。这就能让我免于再去一封一封邮件的回复，那样肯定会花费更多时间。</p>
<p>此外，如果你收到一封邮件就立刻回复，你实际上是在为自己  <em>创造更多的未读邮件</em> 。假设客户Joe某次突发奇想，给你发了一封邮件，你立刻进行了回复。设想在这一天，要是Joe又连续好几次发送这类邮件，你又是秒回。那很可能Joe收到你的邮件时也会秒回，这样你这一天的未读邮件会非常多。倘若你能在一天的某个固定时间就一次性回复Joe，那Joe就只需要回复你发来的一封邮件。这样一来，你邮箱里收到的邮件要少很多很多，你的时间也会省下很多很多。</p>
<p>读完了前面关于邮件管理的讲解，你心里可能在暗自嘀咕，“那我的客户希望我能秒回他啊。”可如果你每天至少浏览一次收件箱，那客户的等待时间不会超过24小时。</p>
<p>如果事情非常重要，客户等不了24小时，那客户就应该会给你打电话而不是简单发送一份邮件。</p>
<p>我每天查看邮箱不超过两次，我们的客户对我们的服务依然很满意。所以，节省下你的时间，只在每天设定的时间段回复邮件。</p>
<p>当你把以上方法融会贯通之后，相信你的工作效率会有大幅提升。</p>
<p>借助一事只处理一次的方法，在阅读邮件、审阅文档等方面节省一些时间。</p>
<p>在万事具备之后再去开启一个项目，并坚持一时只做一事，减少干扰，保持自己的工作节奏。</p>
<p>出现一个问题后，立刻把它解决掉，可能你今天多废了点时间，但长期来看你恰恰在节省时间。</p>
<p>最后，通过提升/减少你的通讯，你将能避开很多干扰，且事实上减少需要回复的信息。把这些小方法融汇起来，并保持好投入的工作时间，你就会和下面这张图片中的人一样开心。</p>
<p>假如上面的效率技巧能让你的工作效率比所有开发者的平均水平高出20%，而且你每周的最低工作时限是每周43.3小时（这一数字的由来前文已经提及），再且你的竞争对手每周只是按照平均水平效率工作40个小时。</p>
<p>一年下来，你所完成的工作量就将是你的竞争对手差不多15.5个月才能完成的量。如果你把这些生产都聚焦在了高价值的活动，那你的银行账户余额也会唰唰往上窜。</p>
<h3 id="">自由职业开发者希望更好管理公司日常经营所要做到的事项清单</h3>
<p>通过更好地管理日常运营的方方面面，一名自由职业开发者能够极大地提高他的净收入。下面这份待办事项清单能够帮助你迅速实现利润增长：</p>
<ul>
<li>
<p>合理管理你的财务和经营管理事务。</p>
</li>
<li>
<p>读读《利润为先》这本书，采纳其中建议的公司财务管理规划。或者，你也可以开发自己的财务规划并严格遵照执行。注册会计/记账软件并养成定期整理账簿的习惯。</p>
</li>
<li>
<p>研究学习你需要遵守的经营管理法规，比如申请营业制造的相关规定。这些规定在各州、各地会有所不同。你所在地的国务卿办公室或能为你提供这些信息。</p>
</li>
<li>
<p>高效管理你的开发工作，识别那些“高价值的工作机会”。</p>
</li>
<li>
<p>这类工作是指单位小时的劳动能够换回最大回报的工作，而未必总是整体收益最大的工作。</p>
</li>
<li>
<p>做好计划，专注那些高价值活动的经营，并记得只去专注你所从事的工作领域。</p>
</li>
<li>
<p>设定一个每周工作的最低时限并保证自己每周都能完成这一既定目标。</p>
</li>
<li>
<p>采用一事只处理一次（O.H.I.O.）的方法。</p>
</li>
<li>
<p>养成不做好准备能完成一件事就绝不开工的习惯。</p>
</li>
<li>
<p>养成问题出现一个，立刻就解决一个的习惯。</p>
</li>
<li>
<p>改善你的通讯管理。</p>
</li>
<li>
<p>不要使用Slack或Microsoft Teams之类的实时通讯平台。</p>
</li>
<li>
<p>每天拨出固定时间处理邮件。不要在设定时间以外再去处理邮件。</p>
</li>
</ul>
<h2 id="">结论</h2>
<p>这份指南绝不是想告诉你经营自己的公司时所需要了解的每一件事。但是，坚持指南中的这些技巧将帮助你在竞争中脱颖而出。</p>
<p>请记得，要想成功经营一家公司，你需要在上述  <strong>所有方面</strong>  付出努力。百密总有一疏，这就意味着你一定要在公司经营的各个方面持续不断地改进，这点再怎么强调都不为过。</p>
<h3 id="">关于作者</h3>
<p>我是一名网络开发人员，通过  <a href="https://www.seo-for-lawyers.com/">SEO For Lawyers</a>代表律师事务所维护网站和其它一些软件。我还是  <a href="https://www.modern-website.design/">Modern Website Design（现代网站设计）</a>. 的共同创始人。我喜欢撰写针对小型企业和创业相关问题的文章。</p>
<!--kg-card-end: markdown--><p>原文：<a href="https://www.freecodecamp.org/news/freelance-web-developer-guide/">The Complete Freelance Web Developer Guide: How to Make Money Through Freelance Programming Jobs</a>，作者：<a href="https://www.freecodecamp.org/news/author/luke_76130/">Luke Ciciliano</a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
