<?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[ 学习编程 - 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[ 学习编程 - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 30 May 2026 19:37:16 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/learn-to-code/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何开始学习编程——初学者手册 ]]>
                </title>
                <description>
                    <![CDATA[ 在这本手册中，我将解决你可能会问自己的一个问题：我是否应该学习编程？ 在向你解释为什么应该之后，我将介绍成为软件开发人员的一些好处和挑战。我还将讨论一些学习编程的关键策略，以帮助你取得成功。 最后，你将会对学习编程需要什么以及如何开始或继续你的旅程有一个全新的认知。 目录  * 什么是编程  * 你还应该学习编程吗-是的  * 为什么你应该考虑把编程作为职业  * 编程工作的潜在挑战  * 为什么软件工程师薪水这么高  * 如何为你的编程之旅做准备  * 你的自我意识是你的敌人  * 对你的学习负责  * 我害怕编程--我该怎么办  * 学习编程的策略和技巧  * 你能在一个晚上学会编程吗  * 避免教程地狱  * 如何通过费曼技巧理解复杂主题  * 不要记忆语法  * 保持一个待学习列表  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/learn-coding-for-everyone-handbook/</link>
                <guid isPermaLink="false">6656b122c2672603d0493f94</guid>
                
                    <category>
                        <![CDATA[ 学习编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ James Z. Zhang ]]>
                </dc:creator>
                <pubDate>Wed, 29 May 2024 04:19:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2024/05/How-to-Start-Learning-to-Code-cover--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/learn-coding-for-everyone-handbook/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Start Learning to Code – Handbook for Beginners</a>
      </p><!--kg-card-begin: markdown--><p>在这本手册中，我将解决你可能会问自己的一个问题：我是否应该学习编程？</p>
<p>在向你解释为什么应该之后，我将介绍成为软件开发人员的一些好处和挑战。我还将讨论一些学习编程的关键策略，以帮助你取得成功。</p>
<p>最后，你将会对学习编程需要什么以及如何开始或继续你的旅程有一个全新的认知。</p>
<h1 id="">目录</h1>
<ul>
<li><a href="#%E4%BB%80%E4%B9%88%E6%98%AF%E7%BC%96%E7%A8%8B">什么是编程</a></li>
<li><a href="#%E4%BD%A0%E8%BF%98%E5%BA%94%E8%AF%A5%E5%AD%A6%E4%B9%A0%E7%BC%96%E7%A8%8B%E5%90%97-%E6%98%AF%E7%9A%84">你还应该学习编程吗-是的</a></li>
<li><a href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%A0%E5%BA%94%E8%AF%A5%E8%80%83%E8%99%91%E6%8A%8A%E7%BC%96%E7%A8%8B%E4%BD%9C%E4%B8%BA%E8%81%8C%E4%B8%9A">为什么你应该考虑把编程作为职业</a></li>
<li><a href="#%E7%BC%96%E7%A8%8B%E5%B7%A5%E4%BD%9C%E7%9A%84%E6%BD%9C%E5%9C%A8%E6%8C%91%E6%88%98">编程工作的潜在挑战</a></li>
<li><a href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E5%B8%88%E8%96%AA%E6%B0%B4%E8%BF%99%E4%B9%88%E9%AB%98">为什么软件工程师薪水这么高</a></li>
<li><a href="#%E5%A6%82%E4%BD%95%E4%B8%BA%E4%BD%A0%E7%9A%84%E7%BC%96%E7%A8%8B%E4%B9%8B%E6%97%85%E5%81%9A%E5%87%86%E5%A4%87">如何为你的编程之旅做准备</a></li>
<li><a href="#%E4%BD%A0%E7%9A%84%E8%87%AA%E6%88%91%E6%84%8F%E8%AF%86%E6%98%AF%E4%BD%A0%E7%9A%84%E6%95%8C%E4%BA%BA">你的自我意识是你的敌人</a></li>
<li><a href="#%E5%AF%B9%E4%BD%A0%E7%9A%84%E5%AD%A6%E4%B9%A0%E8%B4%9F%E8%B4%A3">对你的学习负责</a></li>
<li><a href="#%E6%88%91%E5%AE%B3%E6%80%95%E7%BC%96%E7%A8%8B--%E6%88%91%E8%AF%A5%E6%80%8E%E4%B9%88%E5%8A%9E">我害怕编程--我该怎么办</a></li>
<li><a href="#%E5%AD%A6%E4%B9%A0%E7%BC%96%E7%A8%8B%E7%9A%84%E7%AD%96%E7%95%A5%E5%92%8C%E6%8A%80%E5%B7%A7">学习编程的策略和技巧</a></li>
<li><a href="#%E4%BD%A0%E8%83%BD%E5%9C%A8%E4%B8%80%E4%B8%AA%E6%99%9A%E4%B8%8A%E5%AD%A6%E4%BC%9A%E7%BC%96%E7%A8%8B%E5%90%97">你能在一个晚上学会编程吗</a></li>
<li><a href="#%E9%81%BF%E5%85%8D%E6%95%99%E7%A8%8B%E5%9C%B0%E7%8B%B1">避免教程地狱</a></li>
<li><a href="#%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E8%B4%B9%E6%9B%BC%E6%8A%80%E5%B7%A7%E7%90%86%E8%A7%A3%E5%A4%8D%E6%9D%82%E4%B8%BB%E9%A2%98">如何通过费曼技巧理解复杂主题</a></li>
<li><a href="#%E4%B8%8D%E8%A6%81%E8%AE%B0%E5%BF%86%E8%AF%AD%E6%B3%95">不要记忆语法</a></li>
<li><a href="#%E4%BF%9D%E6%8C%81%E4%B8%80%E4%B8%AA%E5%BE%85%E5%AD%A6%E4%B9%A0%E5%88%97%E8%A1%A8">保持一个待学习列表</a></li>
<li><a href="#%E7%BC%96%E7%A8%8B%E7%9A%84%E5%AE%9E%E9%99%85%E6%96%B9%E9%9D%A2">编程的实际方面</a></li>
<li><a href="#%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E5%9B%B0%E9%9A%BE%E7%9A%84%E9%A1%B9%E7%9B%AE">如何处理困难的项目</a></li>
<li><a href="#%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E8%A6%81%E6%9E%84%E5%BB%BA%E7%9A%84%E9%A1%B9%E7%9B%AE">如何选择要构建的项目</a></li>
<li><a href="#%E9%80%9A%E8%BF%87%E4%BB%8E%E5%A4%B4%E5%BC%80%E5%A7%8B%E6%9E%84%E5%BB%BA%E6%9D%A5%E5%AD%A6%E4%B9%A0">通过从头开始构建来学习</a></li>
<li><a href="#%E6%9E%84%E5%BB%BA%E5%B7%B2%E7%BB%8F%E5%AD%98%E5%9C%A8%E7%9A%84%E4%B8%9C%E8%A5%BF">构建已经存在的东西</a></li>
<li><a href="#%E8%B6%85%E8%B6%8A%E5%9F%BA%E7%A1%80">超越基础</a></li>
<li><a href="#%E5%9F%B9%E5%85%BB%E5%AD%A6%E4%B9%A0%E7%9A%84%E7%83%AD%E7%88%B1">培养学习的热爱</a></li>
<li><a href="#%E7%9C%8B%E5%A4%A7%E5%B1%80">看大局</a></li>
<li><a href="#%E6%8B%A5%E6%8A%B1%E7%BB%88%E8%BA%AB%E5%AD%A6%E4%B9%A0">拥抱终身学习</a></li>
<li><a href="#%E8%8E%B7%E5%8F%96%E6%9C%AC%E4%B9%A6%E7%9A%84pdf%E7%89%88%E6%9C%AC">获取本书的 PDF 版本</a></li>
</ul>
<h1 id="">编程介绍</h1>
<h2 id="">什么是编程?</h2>
<p>在我们开始讲建议之前，让我们先了解一下什么是计算机编程。</p>
<p>首先，请记住，计算机不仅仅是笔记本电脑或台式机。它还包括你的手机、平板电脑以及任何能够执行我们编程到其中的逻辑和算术操作的设备。</p>
<p>包括你汽车的导航系统、你取款或存款的 ATM 机、外卖订餐系统等等。</p>
<p>计算机编程是设计和构建计算机可以执行的指令（“程序”）的过程。</p>
<p>举一个例子，我们用计算器进行加减乘除的运算。</p>
<p>我们不需要铅笔在纸上做这些运算——因为，手机上有计算器。而这个计算器是一个计算程序，给我们提供结果。</p>
<p>你每天使用的其他程序可能包括脸书/Facebook、WhatsApp、Instagram、油管/YouTube、抖音/TikTok 之类的。</p>
<p>编写程序有点像做顿饭。你可能有一个美味的菜谱（想法），但你需要先去买菜。</p>
<p>一旦你得到了所需要的食材，你准备这些食物，把它放进烤箱，然后等它烤好。之后，你把食物端上桌，开始享用。</p>
<p>编程也类似：首先，你有一个想法和将这个想法变成程序的知识（或者你在构建程序的过程中学习——就像你可以在 YouTube 上观看别人做饭并学习如何做那个菜谱一样）。</p>
<p>然后，你开始逐步地把程序的成分放到位，直到整个程序准备好可以供用户使用。</p>
<p>与烹饪不同的是，菜肴被食用后会消失，而程序在使用后仍然完好无损且可重复使用。</p>
<p>这一独特的方面意味着一个程序可以同时为多个用户服务并且可以长期使用。</p>
<p>创建和维护软件是有成本的，但一旦开发出来，像网站这样的程序可以被许多人同时访问，而不会减少其可用性或质量。</p>
<p>总而言之，编程是将一个想法转变成其他人可以使用的计算机程序的过程。而这是一项你可以自己学习的技能。</p>
<p>在不断发展的软件工程领域，许多人都在关注 AI 将带来的影响。</p>
<p>你还应该学习编程吗？（简短的答案：是的。）让我们深入探讨这个问题，特别是针对那些对未来编程技能需求持怀疑态度的人。</p>
<h2 id="">你还应该学习编程吗-是的</h2>
<p>我们一直在使用软件——与他人聊天，了解最新新闻，甚至用于帮助我们准时起床的闹钟。</p>
<p>甚至你用来阅读文档的浏览器或 PDF 阅读器也是软件。这些文字也是在一个软件程序中输入的。</p>
<p>编程是一个不断发展的领域，我们目前手动完成的许多事情将来可能会自动化。</p>
<p>但软件已经深深嵌入到我们的日常生活中，为各种职业和个人活动提供工具和应用程序。</p>
<p>我们越是融入数字世界，软件就变得越重要。它正在重塑我们的工作、学习和社交方式，其重要性只会越来越高。</p>
<h3 id="">软件开发的未来</h3>
<p>想象一个世界，构建软件就像与一个高度先进的 AI（如未来的 ChatGPT）对话一样简单。你描述你的需求，AI 为你创建整个软件——无需编程。</p>
<p>那么你可能会问：当 ChatGPT 可以在几秒钟内为我编写整个应用程序时，为什么我还要学习编程？好吧，我想让你明白一点：AI 并不是来取代我们的，而是<strong>帮助我们变得更高效</strong>。</p>
<p>当然，AI 可以通过为你执行某些基本的、重复的任务来帮助你节省时间和精力。但掌握软件开发的基础仍然很重要，特别是对于那些需要你的创造力和基于经验的复杂问题。</p>
<p>你需要能够利用 AI 的力量，同时继续学习和适应。这将帮助确保我们在快速发展的数字世界中把握方向。</p>
<p>如你所见，我想强调软件工程师和程序员在即使是 AI 主导的未来中也是不可替代的。以下是几个原因：</p>
<ol>
<li><strong>理解胜过自动化</strong>：编程不仅仅是执行任务——它是理解复杂的逻辑和结构。我们人类分析和解决复杂问题的能力超越了 AI 的自动化。</li>
<li><strong>维护性和灵活性</strong>：深度编码知识为软件维护和调整提供了重要的见解。当 AI 生成的程序遇到问题时，这种知识是必不可少的。</li>
<li><strong>安全性和可靠性</strong>：就像了解基本的汽车机械原理对于安全一样，了解编程基础对于解决软件故障是必要的。</li>
<li><strong>创造性元素</strong>：AI 缺乏人类的创造力和创新，这对于设想和实现新颖的软件解决方案至关重要。</li>
</ol>
<p>AI 在编码中的崛起并不意味着人类编码员的终结。相反，我认为这只是预示着一个协作的未来。AI 自动化日常任务为人类编码员在软件开发中提供了更多的创造和创新空间。</p>
<p>学习编程超越了单纯的编程。这是关于理解各种技术的运作方式，培养解决问题的能力和激发创造力。即使在 AI 重塑的环境中，这些技能仍然是无价的。</p>
<p>所以我鼓励你接受编程，因为它为人类智能和 AI 合作推动创新的未来打开了大门。</p>
<h2 id="">为什么你应该考虑把编程作为职业</h2>
<p>也许当你还是个孩子的时候（或者现在作为一个成年人），你非常喜欢一个电脑游戏，现在你还在玩它。</p>
<p>也许你曾经想过有一天你可以开发一个类似的游戏。</p>
<p>我认识一些人正是因为这个原因而开始编程：为了开发不同的电脑游戏。</p>
<p>由于你可能体验到乐趣，你决定自己成为一名程序员。</p>
<p>随着时间的推移，你的理由可能会改变——这当然并不意味着每个人都是因为游戏开发才开始学习编码。</p>
<p>毕竟，你有许多理由考虑将编程作为职业选择。现在，让我们来讨论其中的一些理由（实际上还有更多）。</p>
<h3 id="">你可以开发一些有趣的东西</h3>
<p>我提到了游戏开发的案例，但你不必通过构建游戏来开始编程。</p>
<p>也许你是一名会计，或者你有一家商店并想通过自己开发的程序来登记你的商品...等等。</p>
<p>这里有一些可能激发人学习编程的实际项目：</p>
<ul>
<li>一个定制的笔记应用程序，满足你特定的需求</li>
<li>一个个性化的库存管理系统，用于你的商店</li>
<li>一个用于组织和跟踪你的日常任务和目标的应用程序</li>
<li>一个用于管理你的大学或大学课程表的调度程序</li>
<li>一个解决问题的助手，用于处理具有挑战性的任务</li>
<li>一个每日天气更新工具，向你的电子邮件发送天气预报</li>
<li>一个健康应用程序，基于症状建议可能的疾病</li>
<li>一个专注力增强器，在工作时间限制访问社交媒体</li>
</ul>
<p>还有许多其他程序你可以开发。简而言之，你可以因为喜欢解决日常生活中面临的问题而开始编程。</p>
<p>一旦你学会了编程并能够构建这些程序，你可以与朋友和家人（甚至更广泛的群体）分享它们。</p>
<h3 id="">你能够为世界各地人们解决问题</h3>
<p>这里有件事情也许会让你开心：有机会帮助别人（或许多人）。我相信当你能够帮助家人或同事时，你会感到快乐和满足。</p>
<p>现在，想象一下如果你有机会解决世界各地人们面临的问题会有多好。</p>
<p>例如，你可能有一个想法，在 Facebook 上为你所在社区的居民创建一个小组，以便大家互相询问所需的家庭工具。</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>有时你可能会开始阅读一本书，或者看一部你不喜欢的电影，你可以选择放弃那本书或电影，开始另一部。</p>
<p>同样的情况也适用于编程项目。你可能对某个项目并不太感兴趣，你通常可以换一个项目。</p>
<p>即使在工作中，你也可以时不时地请求经理分配你到不同的项目。</p>
<h3 id="">你也可以在工作的时候学习</h3>
<p>许多公司在没有工作任务时，为程序员提供在工作时间学习的空间和机会。</p>
<p>事实上，有些公司会承担培训、书籍和各种课程的费用，以使员工获得资质和为工作做好准备。</p>
<p>在一些公司，当你完成认证后，你会得到奖励，无论是金钱还是其他各种形式的。</p>
<p>有技能、有准备并经过培训的程序员对公司来说是非常有价值的资源。除了能够处理更复杂的项目外，他们通常还有机会获得更好的客户和报价。公司也可以通过晋升这些高技能的开发人员来投资他们。</p>
<h3 id="">你可以在家工作</h3>
<p>编程的好处之一是你可以在家（或任何地方）工作，并且可以远程就业。这意味着你不必为了更有趣的工作或更好的报价而搬到其他地方。</p>
<p>在疫情期间，许多公司提供了在家工作的机会，许多公司在疫情后仍将继续提供这一机会。</p>
<p>这对许多人来说是一个极大的安慰，因为它省去了每天去办公室的需要，减少了额外的租金，避免了与家人分离的生活。</p>
<h3 id="">你可以有灵活的日程安排</h3>
<p>不同的人在工作之外有不同的责任，包括家庭需求、医疗预约或某些时间的各种承诺，这些承诺不能推迟。</p>
<p>所以对许多人来说，有一个灵活的时间表，甚至在某些时间离开工作是必要的。许多开发人员在工作时间表上能够有这种灵活性。</p>
<h3 id="">你可以与聪明的人合作并向他们学习</h3>
<p>如果你在一个团队中，可能会有人比你学习过更多不同领域的技术。他们可能在各种之前的项目中积累了丰富的经验。这将为你提供许多学习和合作的机会。尽可能利用这些机会。</p>
<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>对于其他职业的人来说，休假并不总是容易的，因为他们往往没有那么大的灵活性，也没有那么宽松的带薪休假。</p>
<p>这些只是编程可能在职业上对你合适的部分原因。</p>
<p>但公平起见，让我们也考虑一些缺点，看看它们是否会成为你选择编程的障碍。</p>
<h2 id="">编程工作的潜在挑战</h2>
<p>也许你没有预料到这本书会讨论这个问题，这本书旨在激励你考虑成为一名开发人员。</p>
<p>但我认为分享潜在的缺点同样重要，以帮助你做出明智的决定。</p>
<p>这里，我只会讨论一些编程职业带来的缺点。你可能不会具体经历所有这些，也不能因此减少它们发生在你身上的可能性。但如果你知道它们，也许你可以更容易地避免它们。</p>
<h3 id="">编程可能会带来压力</h3>
<p>也许你有机会与其他开发人员交谈，他们告诉你编程是有压力的。这可能是多种情况造成的。</p>
<p>例如，如果你专注于解决某个特定的问题，你可能会犹豫不愿意离开你的椅子走动一下，这有助于缓解压力。但你不想在解决问题之前停下来。这会增加你的压力。</p>
<p>那么，你能做些什么来缓解压力或释放问题带来的情绪负担呢？首先，最好做一些身体运动，包括从椅子上站起来，在办公室（或你的家，或你工作的任何地方）四处走动，去户外呼吸新鲜空气，暂时改变环境。</p>
<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>
<h3 id="">你可能需要加班</h3>
<p>这不仅仅是程序员特有的情况，因为其他工作的人也经常需要加班。但这对有额外责任的开发人员来说可能特别困难。</p>
<p>作为开发人员，你可能需要因为许多原因加班，例如：</p>
<ul>
<li>你需要在很短的期限内完成一项新任务、新功能或客户的整个项目。</li>
<li>你编程的一些服务失败了，需要立即修复，以便客户的服务或工具不会中断。你可能需要在下班后、周末或官方假期在电脑前修复它。</li>
<li>一个你使用的编程库中出现了安全问题，你需要解决它，以便你的客户和用户不受此问题的影响。错误是不可避免的，尤其是在编程中，但错误各不相同，有些可能非常有害，而有些可能甚至不会被注意到。</li>
</ul>
<p>只要确保你与团队、客户和经理设定边界和期望，以免总是加班。</p>
<h3 id="">你必须长时间坐在电脑前</h3>
<p>开发人员经常长时间坐在椅子上，往往没有足够的体力活动。这可能会导致你开始出现背部或关节疼痛、麻木、体重增加或其他潜在的有害健康问题。</p>
<p>或者，当你集中精力调试问题时，你可能有时甚至忘记在电脑前闭上眼睛。这当然不健康，因为它会伤害你的眼睛。</p>
<p>此外，坐在离电脑很近的位置，通常不到一米，你可能会长时间固定眼睛在同一个位置，这对眼睛也有害。</p>
<p>为了避免这些问题，你可以去健身房锻炼，按照 YouTube 上的指导在家做轻松的运动，并通过更频繁地活动身体，例如从椅子上站起来、在办公室走动、吃健康的食物、拉伸等来保持健康。</p>
<h3 id="">你的体重可能会增加</h3>
<p>许多程序员在工作中感到压力。因此，他们为了减轻压力而吃得比需要的更多——他们可能甚至没有注意到由于压力而暴饮暴食。</p>
<p>再加上你可能会长时间坐着并且吃得比需要的多，你可能会开始增加体重和失去肌肉。</p>
<p>为了避免不必要的体重增加，请注意你吃什么和吃多少。你可以尝试减少不健康的脂肪和糖分摄入。你还可以做一些身体锻炼，确保少量多次地进食。</p>
<p>这些只是程序员可能面临的一些挑战。但希望现在你了解这些挑战后，可以找到避免或应对它们的方法。</p>
<h2 id="">为什么软件工程师薪水这么高？</h2>
<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>
<h3 id="">你帮助将想法变为现实</h3>
<p>当你想建造一所房子时，你首先会寻求建筑师的帮助，他会到你的土地上，分析环境，然后经过一段时间，为房子的每一部分提出详细的计划。</p>
<p>然后，这个计划会由建筑工程师接手，他管理一组工人和整个施工过程，直到房子建成并准备好使用。</p>
<p>这是需要大量培训和专业知识的高技能工作。成为开发人员也是一样的。你得到相对较高的报酬，因为这反映了你所拥有的高水平技能以及完成工作所需的大量努力和工作。</p>
<p>软件工程师能够将客户的想法变成计算机程序，这个程序可以为全世界的人们带来好处。这是一项非常有价值的技能，因此得到了相应的奖励。</p>
<h3 id="">你的解决方案可以连接全世界的人</h3>
<p>当你想到一条主要公路时，考虑它如何连接不同的地区并改变旅行和商业。</p>
<p>例如，一条主要公路可能连接两个主要城市，大大增加了游客和商务旅行之间的流量。</p>
<p>建造这样一条公路需要大量投资和努力，但一旦完成，它可以为人们节省大量时间，并开辟新的机会。</p>
<p>这个概念类似于计算机程序的创建。</p>
<p>当一个程序被开发出来时，它有可能连接全世界数百万不在同一个国家甚至同一个大陆的人。</p>
<p>以社交媒体应用为例。它们是为全球使用而设计的计算机程序，帮助你、你的家人和朋友进行交流，结识新朋友，或者了解最新的新闻。</p>
<p>或者考虑 Google 的搜索引擎，它每天处理超过 35 亿个查询，涉及各种主题。只要有互联网连接，它可以帮助世界各地的人们解决问题并学习新事物。</p>
<p>这些程序就像一条建造良好的公路一样，促进了无数个人的连接和互动，使生活变得更高效、更连接。</p>
<h3 id="">软件工程师在许多领域工作</h3>
<p>软件工程师的一个特别之处在于他们可以在许多不同的领域工作。他们不仅仅局限于一种工作。</p>
<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>一个可能需要更长时间完成的项目，现在你可以通过使用这些你已经学会的新工具在更短的时间内完成。这意味着使用你作为程序员的服务的企业能够更快地向市场推出有用的产品，更好地服务客户。</p>
<p>换句话说，软件工程师薪水如此高，是因为他们拥有如此专业和有价值的技能，可以帮助世界各地的许多人。</p>
<h1 id="">如何为你的编程之旅做准备</h1>
<h2 id="">你的自我意识是你的敌人</h2>
<p>当你开始考虑开始你的编程之旅时，很容易感到不知所措。</p>
<p>你可能会想象 Google 或 Amazon 那样复杂的系统和软件，并怀疑自己是否能够理解这些复杂性。</p>
<p>通常，当我们着手成为熟练的程序员时，我们发现最大的障碍不是代码本身，而是我们的自我意识。</p>
<p>这里所说的自我意识，是指对自己重要性的盲目信念：我们的傲慢和自我中心的野心。</p>
<p>这就像我们内心的一个顽固声音，坚持要成为最好的，而不考虑学习编程的协作性、挑战性和反复性。</p>
<p>自我意识会误导我们，让我们认为自己比实际知道的更多，阻碍我们有效学习和合作。</p>
<p>它阻碍了我们真正掌握编程、建立与同伴学习者的建设性关系，以及识别或创造成长机会。</p>
<p>自我意识在职业生涯中始终是一个威胁，尤其是在我们开始学习编程的新事物时。</p>
<p>它可能会阻止我们构建伟大的软件，推进我们的学习目标，并从挫折中恢复。</p>
<p>为了防范自我意识，我们需要在学习旅程的每个阶段意识到它的影响。</p>
<blockquote>
<p>“知己知彼，百战不殆。不知彼而知己，一胜一负。不知彼不知己，每战必殆。” ——孙子</p>
</blockquote>
<h3 id="">如何在学习编程的早期阶段克服自我意识</h3>
<p>你可能以高昂的热情开始，也许受到了自学成才的程序员成功故事或成为技术奇才的吸引。</p>
<p>在这种情况下，自我意识可能会让你相信成功会轻而易举地到来，你会迅速掌握编程语言或跳过通常的学习曲线。</p>
<p>记住，编程中最令人印象深刻的成就是通过奉献和努力实现的。考虑一下 WordPress、Microsoft 和 Google 背后的建设者。</p>
<p>他们的成功故事充满了不懈的努力，而不仅仅是天赋或运气。</p>
<p>在开始编程旅程时，不要陷入高估自己能力的陷阱。致力于这个过程，花时间练习，接受学习的磨砺。</p>
<p>合作是关键，因为许多突破性的项目都是团队努力的结果。</p>
<p>考虑主要的科技创新者如何合作：Google 的创始人在斯坦福大学的计算机科学系相遇，Microsoft 的创始人比尔·盖茨和保罗·艾伦共同合作，WhatsApp 也是合作的产物。</p>
<p>学习编程也是如此——这是关于加入一个社区，分享知识，共同成长。</p>
<h3 id="">自我意识与持续学习</h3>
<p>即使在找到第一份编程工作或完成几个项目之后，也不要让自我意识让你认为你已经学到了所有的知识。</p>
<p>技术领域不断发展，持续学习至关重要。</p>
<p>记住，编程的旅程没有终点。它是一个不断增长和适应的过程。</p>
<p>你的自我意识可能会让你抵制新挑战，避免学习新语言或框架，或在遇到困难时避免寻求帮助。</p>
<p>然而，这些正是丰富你的编程旅程并最终掌握编程的经历。</p>
<p>历史上有许多例子表明，最初的失败或挫折导致了巨大的成功。</p>
<p>比尔·盖茨和保罗·艾伦在创立 Microsoft 之前有过失败的尝试，许多成功的应用程序和平台都是在之前不成功的尝试中诞生的。</p>
<h3 id="">拥抱谦逊和毅力</h3>
<p>要在你的编程旅程中茁壮成长，谦逊和毅力是你最好的盟友。接受失败和挑战是过程的一部分。将它们视为踏脚石，而不是障碍。</p>
<p>保持开放的心态，持续学习，寻求反馈，记住合作可以增强你的成长。</p>
<p>随着你的进步，记住自我意识是学习的敌人。保持脚踏实地，专注于过程，珍惜成为熟练程序员的旅程。</p>
<p>你对编程世界的独特贡献不在于一开始就成为最好的，而在于开放成长，从每一次经历中学习。</p>
<blockquote>
<p>“第一原则是你不能欺骗自己——而且你是最容易欺骗自己的人。”——理查德·费曼</p>
</blockquote>
<p>在学习编程时，让你的好奇心和对这门技艺的热情成为你的指南，而不是你的自我意识。</p>
<p>专注于工作，专注于学习过程，享受编程的乐趣。</p>
<p>在早期识别自我意识的声音，并用纪律、谦逊和对终身学习的承诺来对抗它们。</p>
<h2 id="">对你的学习负责</h2>
<p>不要因为在学习编程时的理解不足或遇到困难而责怪他人。简单地接受你是你生活中所有问题和困难的共同因素。</p>
<h3 id="">你不理解某一课吗？</h3>
<p>不要责怪课程、书籍或讲师。学习是你的责任。</p>
<p>每个老师都尽力而为，而且我们生活在一个有许多选择可以选择和学习的时代。</p>
<p>所以没有借口。如果你努力工作，你会到达那里。</p>
<h3 id="">你最近是否发现你写的一段代码在项目中没有按预期工作？</h3>
<p>尽管这可能是罕见的情况或你可能无法预测会发生，但你仍然应该承担责任。</p>
<p>首先，承认你犯了错误。然后，去弄清楚如何解决问题。</p>
<p>利用这个机会学习并记录出错的地方以及你可以在未来做得更好的地方。</p>
<h3 id="">你觉得是否自己无法跟上学习新事物的步伐？</h3>
<p>我相信你已经知道这也是你的责任。</p>
<p>这可能很难，而且非常耗时，尤其是如果你有孩子或其他家人需要照顾，同时还希望有社交生活的话。</p>
<p>然而，你的成长是你的责任。</p>
<p><strong>你必须承担这个责任。</strong></p>
<p>你应该尝试每周抽出几次时间来提高你的技能，无论是在你的日常工作中没有任务时你有空学习，还是在离开工作之前、在晚上或任何对你来说现实的时间。</p>
<p>你可以尝试每天早起一小时，在工作前投资那段时间来学习新事物，或者你也可以在周日早上抽出几个小时来做这件事。</p>
<h2 id="">我害怕编程--我该怎么办</h2>
<p>开始编程旅程可能令人生畏，感到害怕或自我怀疑是很自然的。但请记住，即使是科技和科学领域中最成功的人物也面临过这些挑战。</p>
<p>考虑一下 Google 联合创始人谢尔盖·布林。他取得了显著的成功，但他也谈到过感到像冒名顶替者，怀疑自己对科技行业的贡献。他的故事表明，即使在高水平的成就中，这种感觉也是正常的。</p>
<p>前 Facebook 首席运营官谢丽尔·桑德伯格也是科技行业的领袖，她也谈到了冒名顶替者综合症的困扰。尽管她取得了巨大成就，她也经历了自我怀疑和质疑自己能力的时刻。这强调了每个人，无论他们的成功如何，都可能会经历这些感觉。</p>
<p>天体物理学家尼尔·德格拉斯·泰森也坦率地谈到了自己在科学职业生涯中经历的冒名顶替者综合症。他的坦诚有助于揭开进入新挑战领域所伴随的恐惧的神秘面纱。</p>
<p>著名作家和诗人玛雅·安杰卢博士也表达过类似的感受。尽管她获得了无数的荣誉，她也感到对自己价值和成就的怀疑。她的旅程是克服自我怀疑实现伟大的鼓舞人心的例子。</p>
<p>韦恩·格雷茨基的名言“你错过了所有你不尝试的机会”在这里产生了深刻的共鸣。如果恐惧阻碍了你，你永远不会发现你在编程中的潜力。</p>
<p>开始编程之旅可能令人望而生畏，对失败的恐惧是常见的。然而，关键是尽管有这些恐惧，也要开始。记住，你所仰慕的科技专家和领袖们也是从初学者开始的，就像你一样。他们面对恐惧，犯错，并从中学习。</p>
<p>所以，如果你的目标是成为编程或软件工程领域的佼佼者，接受挑战。开始学习，不要让恐惧或自我怀疑阻碍你。</p>
<p>每个人的旅程都是从第一步开始的，感到不确定只是成为技能和信心的过程的一部分。</p>
<h1 id="">学习编程的策略和技巧</h1>
<h2 id="">你能在一个晚上学会编程吗？</h2>
<p>一个 bug 使得 Therac-25 放射治疗机<a href="https://www.newscientist.com/gallery/software-bugs/">导致死亡</a>五名患者在接受大量 X 射线后死亡。</p>
<p>Knight Capital 在半小时内因为一个软件错误<a href="https://www.newscientist.com/gallery/software-bugs/">损失了 5 亿美元</a>，该错误允许计算机在无人监督的情况下卖出和买入数百万股股票。</p>
<p>这些和许多其他故事告诉我们，看似不重要的错误实际上可以引发灾难。</p>
<p>软件变得越来越重要——这意味着开发人员需要非常小心，并且非常擅长他们的工作。</p>
<h3 id="">那是否可以在一个晚上学会编程呢？</h3>
<p>虽然听起来很搞笑，但在超过五年前的 Quora 上有人问过类似的问题。</p>
<p>不幸的是，我现在找不到那个确切的问题了，但自那时起它就印在我的记忆里。</p>
<p>也许，提问者是在开玩笑，或者第二天有考试，希望能得到鼓励的答案以便通宵学习。</p>
<p>我不记得其他答案了，但我在那看到一个非常智慧且相当有趣的答案。</p>
<p>这个答案大概是这样的：</p>
<blockquote>
<p><em>带上一台笔记本电脑去北极。那里的一夜持续 6 个月。这就是你在一个晚上学会编程的机会。</em></p>
</blockquote>
<p>我们生活在一个希望一切都在几秒钟内完成的时代。</p>
<p>我们想要快餐，快车，六天内练出六块腹肌，等等。</p>
<p>这就是我们大多数时候的心态，我们也期望在其他领域有同样的结果。</p>
<p>但真正的掌握来自大量的工作和奉献。</p>
<p>以 Google 的研究主管 Peter Norvig 为例，他<a href="https://norvig.com/21-days.html">建议</a>你在十年内学习编程，因为仓促学习是不值得的：</p>
<blockquote>
<p>_“在 24 小时内你没有时间编写几个重要的程序，并从中学习成功和失败的经验。你没有时间与一位有经验的程序员一起工作，并了解在 C++环境中生活是什么样的。简而言之，你没有时间学到很多东西。</p>
<p><em>所以这本书只能谈论表面的熟悉，而不是深刻的理解。正如亚历山大·蒲柏所说，浅尝辄止是危险的。”</em></p>
</blockquote>
<p>如果你告诉人们这一点，他们可能不喜欢，但这是实际情况。</p>
<p>你不能仅仅从在控制台打印几个“Hello World”语句，到几天后构建下一个 Google。</p>
<p>我并不否认你可以在几小时内实现一个非常好的应用程序——但具备做到这一点的能力不会来得那么快。</p>
<p>当然，你可能听说过那个<a href="https://dev.to/florinpop17/10-javascript-projects-in-10-hours-coding-challenge-316d">一坐下就在 10 小时内实现了 10 个应用程序的开发者</a>。但这不是一夜学习的结果。他在那之前付出了很多努力并学到了很多。</p>
<p>要真正学好一样东西需要时间。</p>
<p>你做的越多，你就越有可能变得更好。你练习的越多，你就越能够提高你的表现——这个循环会不断重复。</p>
<p>现在你已经读完并希望内化了这些内容，不要因为漫长的旅程而感到不知所措。</p>
<p>威尔·史密斯很好地描述了这一点：</p>
<blockquote>
<p>“你不会一开始就打算建造一堵墙。你不会说‘我要建造有史以来最大的、最棒的、最伟大的墙。’你不会从那里开始。你会说，‘我要把这块砖砌得尽善尽美。’你每天都这样做。很快你就有了一堵墙。”</p>
</blockquote>
<p>现在，与其问自己是否能在一个晚上学会编程，不如问一个更好的问题：</p>
<p><strong>我今晚能学到的一个小但有价值的东西是什么？</strong></p>
<h2 id="">避免教程地狱</h2>
<p>你是否曾经花费数小时观看教程视频，然后觉得自己像个专家，却发现自己实际上无法实现教程中展示的内容？</p>
<p>这是一个常见的陷阱，被称为“教程地狱”。它指的是当你通过阅读大量教程而没有真正尝试构建某些东西时，可能会产生的虚假学习感。</p>
<p>当你只看教程而不实践时，你可能会认为自己在学习，但实际上你并没有获得完整的体验。</p>
<p>仅仅被动地观看某些东西并不等于真正理解并能够使用这些知识。</p>
<h3 id="">通过编程来学习编程</h3>
<p>许多人尝试仅通过观看视频或阅读文章来学习编程。</p>
<p>但如果你真的想学会编程，你必须亲自动手编写代码。</p>
<p>仅仅坐着看别人做是不够的。<strong>你需要自己编写代码。</strong></p>
<p>这是将视频中的理论知识转化为实际技能的唯一方法。</p>
<h3 id="">超越被动学习</h3>
<p>当深入学习一个特定的框架或技术时，很容易陷入被动观看或阅读的陷阱。</p>
<p>相反，你可以采取积极的方式。</p>
<p>想一个你感兴趣并想要创建的项目。这可以是一个简单的网站或一个小应用程序。关键是选择一些让你兴奋并激励你学习的东西。</p>
<p>你选择的项目将成为你的测试场。你将在这里应用你从教程中学到的一切。</p>
<p>这种实践是无价的。</p>
<p>当你在项目上工作时，你会遇到实际问题和挑战。</p>
<p>解决这些问题将加深你对编码概念和技术的理解。你会通过 Google 搜索、研究、尝试和失败以及再次尝试学到很多东西。</p>
<p>正是在面对和克服这些挑战时，真正的学习发生了。</p>
<p>记住，掌握任何技能的道路，尤其是编程，在于积极参与。</p>
<p>观看教程是一个很好的开始，但实践使你熟练。通过实践学习。</p>
<p>你的个人项目不仅仅是一个测试，而是通向深入理解和技能发展的旅程。</p>
<p>所以，关闭视频播放器，打开你的代码编辑器，开始构建。</p>
<p>你真正的学习之旅从你编写的第一行代码开始。</p>
<h2 id="">如何通过费曼技巧理解复杂主题</h2>
<p>在软件工程领域，知道某件事的名称和真正理解其工作原理之间存在巨大差异。</p>
<p>你可能知道某台机器或某个软件的名称，但你是否真的理解它是如何运作和完成任务的？</p>
<p>在如此复杂且不断发展的领域中，这种区别至关重要。</p>
<p>通过“教学反馈”技巧，可以有效地弥合表面知识和深刻理解之间的差距。</p>
<p>这种方法通常与著名物理学家理查德·费曼相关，围绕着将你学到的东西教授给他人的想法。</p>
<h3 id="">什么是“教学反馈”技巧？</h3>
<p>想象一下，你在向一个对软件工程不太熟悉的朋友或同事解释你学到的新概念或工具。这可以是一个编程概念，一种编码语言，或者是区块链或机器学习等高级主题。</p>
<p><strong>首先，开始解释</strong>：从将主题分解成简单的术语开始。你的目标是使其对几乎没有背景知识的人也能理解。这种练习迫使你澄清你的想法并巩固你的理解。</p>
<p><strong>接下来，识别知识中的空白</strong>：在解释过程中，注意你踌躇或不确定的时刻。这些是你的理解仍然浅显的领域。返回你的学习材料，无论是书籍、文章还是在线资源，深入研究这些主题。</p>
<p><strong>记住，简洁是关键</strong>：在你的解释中，避免使用术语和复杂的语言。能够在不失去其本质的情况下简化概念，是一种真正理解的标志。这种方法不仅对你的学习者有益，还能强化你对该主题的掌握。</p>
<p><strong>分享可以巩固你的知识</strong>：一旦你对自己的解释感到满意，考虑更广泛地分享你的新知识。写博客文章、制作笔记或甚至录制视频都可以进一步巩固你的理解，并对他人有益。</p>
<p><strong>收获的好处</strong>：这种教授他人的技巧不仅能加深你的知识，还能增强你作为软件工程师的效率。这是一种强大的学习工具，验证了“教就是学两次”的说法。</p>
<p>记住，在软件工程中，真正理解的考验在于你能否用简单、易懂的语言传达复杂的想法。</p>
<p>你解释得越有效，表明你对其理解得越透彻。</p>
<p>即使你的学生是一个虚构的角色，拥抱教师的角色，你的理解和熟练度会随之增长。</p>
<p>这种方法不仅仅是为了获得知识——而是为了掌握它。</p>
<h2 id="">不要记忆语法</h2>
<p>假设你搬到一个新城市，不知道最近的杂货店在哪里。你不会责怪自己——这是意料之中的。你只需使用 Google 地图找到它。</p>
<p>在你去过几次之后，很可能你不再需要使用 Google 地图了（除非你想查看交通情况或查看路线上是否有事故——诸如此类的事情）。</p>
<p>因此，你自然会随着时间的推移学会东西的位置——但这并不是你故意尝试记住每条道路，每个到达某个目的地的可能路径。</p>
<p>有时你可能只想去某个地方一次。</p>
<p>这与编程语言中你可能需要使用的某些方法是一样的。新软件开发人员可能会因为没有记住足够的语法而感到难过——他们仍然需要参考文档。</p>
<p>他们认为这是他们是糟糕开发人员的标志。</p>
<p>以下是你在开始编程之旅时可能会有的一些常见问题：</p>
<ul>
<li>我如何能学会所有这些语法？</li>
<li>我需要多长时间才能掌握它并在不参考文档的情况下编写代码？</li>
</ul>
<p>然后，当你能够记住一些常用的语法时，你可能会认为自己已经成为了优秀的程序员。</p>
<p>你会觉得你能记住的语言或编程语言和框架的数量真正重要。</p>
<p>为了让事情更清晰，让我们比较一下在不同编程语言中找到字符串长度的语法：</p>
<ul>
<li><code>seq.length</code>，JavaScript 列表，Java 数组。</li>
<li><code>seq.size()</code>，Java 序列，jQuery 表达式（已弃用）。</li>
<li><code>len(seq)</code>，Python。</li>
<li><code>seq.count()</code>，Django 查询集。</li>
<li><code>SeqType'Length</code>，Ada 数组。</li>
<li><code>length seq</code>，Haskell。</li>
<li><code>(count seq)</code>，Clojure。</li>
<li><code>sizeof(seq)/sizeof(seq[0])</code>，C，静态分配。</li>
<li><code>strlen(seq)</code>，C，空终止。</li>
</ul>
<p>如你所见，每种语言或技术都有其自己的方式来找到字符串的长度。这应该向你表明，记住 12 种不同方式的同一个函数真的很困难。</p>
<p>使用过多种编程语言的开发人员不太可能记住过去使用过的所有语法。他们甚至可能一开始就懒得去学。那么这是为什么呢？人们究竟是如何编写代码的呢？</p>
<h3 id="">语法重要到必须记住吗？</h3>
<p>为了回答这个问题，让我们看看一些高级开发人员怎么说。</p>
<p>这里有一位 Google 高级开发人员的<a href="https://twitter.com/tdierks/status/835912924329836545">评论</a>：</p>
<p>“你好，我叫 Tim。我是 Google 的负责人，有超过 30 年的编码经验，但我需要查找如何获取 Python 字符串的长度。”</p>
<p>这是另一位开发商业航空控制系统的开发人员的<a href="https://twitter.com/jp10k/status/835942380163457024?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E835942380163457024%7Ctwgr%5E6dada45bde9adb460de96219170b9a9a0224f802%7Ctwcon%5Es1_c10&amp;ref_url=https%3A%2F%2Fcdn.embedly.com%2Fwidgets%2Fmedia.html%3Ftype%3Dtext2Fhtmlkey%3Da19fcc184b9711e1b4764040d3dc5c07schema%3Dtwitterurl%3Dhttps3A%2F%2Ftwitter.com%2Fjp10k%2Fstatus%2F835942380163457024image%3D__hrp%3DeyJtdXRlciI6ZmFsc2UsIndhaXRGb3JEb2N1bWVudEJvZHkiOnRydWUsIndhaXRGb3JEb2N1bWVudFJlYWR5IjpmYWxzZSwibm9QYXRjaGVzIjp0cnVlLCJ3aWR0aCI6IjEwMCUiLCJoZWlnaHQiOiIxMDAlIiwiZW5naW5lTmFtZSI6ImVuZ2luZS0wLjEuMCIsImZyYW1lTmFtZSI6ImVuZ2luZS0wLjEuMDoxMTE2OTAxNjk0In0%3D">评论</a>：</p>
<p>“你好，我叫 JP。我把 Node.js 放进了一架商用飞机。我仍然不知道.substr()和.substring()的区别。”</p>
<p>JP 继续对之前的推文进一步评论道：</p>
<p>“@tdierks 即使是这篇文章，我也不得不查找如何编写带有或不带驼峰命名法的子字符串。”</p>
<p>Jon，Phunware 的安卓开发负责人，说他无法在不复制粘贴 Stack Overflow 代码的情况下读取输入流（详见<a href="https://twitter.com/JonFHancock/status/834178169980678144?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E834178169980678144%7Ctwgr%5E119908340c882f5ed0cbe4930bb1f24265742d67%7Ctwcon%5Es1_c10&amp;ref_url=https%3A%2F%2Fcdn.embedly.com%2Fwidgets%2Fmedia.html%3Ftype%3Dtext2Fhtmlkey%3Da19fcc184b9711e1b4764040d3dc5c07schema%3Dtwitterurl%3Dhttps3A%2F%2Ftwitter.com%2Fjonfhancock%2Fstatus%2F834178169980678144image%3D__hrp%3DeyJtdXRlciI6ZmFsc2UsIndhaXRGb3JEb2N1bWVudEJvZHkiOnRydWUsIndhaXRGb3JEb2N1bWVudFJlYWR5IjpmYWxzZSwibm9QYXRjaGVzIjp0cnVlLCJ3aWR0aCI6IjEwMCUiLCJoZWlnaHQiOiIxMDAlIiwiZW5naW5lTmFtZSI6ImVuZ2luZS0wLjEuMCIsImZyYW1lTmFtZSI6ImVuZ2luZS0wLjEuMDoxMTE2OTAxNjk0In0%3D">评论</a>））。</p>
<p>另一位 Tim 对原 Tim 的帖子<a href="https://twitter.com/timbray/status/835933619344429056?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E835933619344429056%7Ctwgr%5E63388c8dc8ce43932c19c9cdb105d65ade61807d%7Ctwcon%5Es1_c10&amp;ref_url=https%3A%2F%2Fcdn.embedly.com%2Fwidgets%2Fmedia.html%3Ftype%3Dtext2Fhtmlkey%3Da19fcc184b9711e1b4764040d3dc5c07schema%3Dtwitterurl%3Dhttps3A%2F%2Ftwitter.com%2Ftimbray%2Fstatus%2F835933619344429056image%3Dhttps3A%2F%2Fi.embed.ly%2F1%2Fimage3Furl3Dhttps253A252F252Fpbs.twimg.com252Fprofile_images252F421637246252FTim_400x400.jpg26key3Da19fcc184b9711e1b4764040d3dc5c07__hrp%3DeyJtdXRlciI6ZmFsc2UsIndhaXRGb3JEb2N1bWVudEJvZHkiOnRydWUsIndhaXRGb3JEb2N1bWVudFJlYWR5IjpmYWxzZSwibm9QYXRjaGVzIjp0cnVlLCJ3aWR0aCI6IjEwMCUiLCJoZWlnaHQiOiIxMDAlIiwiZW5naW5lTmFtZSI6ImVuZ2luZS0wLjEuMCIsImZyYW1lTmFtZSI6ImVuZ2luZS0wLjEuMDoxMTE2OTAxNjk0In0%3D">评论</a>道：</p>
<p>“你好，我也叫 Tim。我从 1979 年开始编程，我仍然需要一直查找 java.lang.String 方法。”</p>
<p>最后，我给你留下一位名叫 Umer 的评论：</p>
<blockquote>
<p>我写了 255 行代码，其中包括一个工作服务器和一个客户端。我查询了 23 次 Google，大多数落在 StackOverflow、Netty 4 网站、GitHub 和 JavaDocs 上。如果你做一下数学计算，平均每 10 行代码查询一次！我完全不知道。— <a href="https://tiantiankan.me/a/5cb4c6c2f4b9a5fab76893b2">Umer Mansoor</a></p>
</blockquote>
<p>这些见解应该给你勇气——你不必为记不住每个语法细节而感到羞愧。</p>
<p>这是许多初级开发人员可能关心的事情。事实上，你真的不必在学习过程中记住一切。</p>
<p>甚至技术招聘人员也不在乎这一点。Google 的一位工程总监对此的<a href="https://twitter.com/tdierks/status/836014459055443968?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E836014459055443968%7Ctwgr%5Ebc4ecbbf211fc241ea5a81dee2c330fa0dc86478%7Ctwcon%5Es1_c10&amp;ref_url=https%3A%2F%2Fcdn.embedly.com%2Fwidgets%2Fmedia.html%3Ftype%3Dtext2Fhtmlkey%3Da19fcc184b9711e1b4764040d3dc5c07schema%3Dtwitterurl%3Dhttps3A%2F%2Ftwitter.com%2Ftdierks%2Fstatus%2F836014459055443968image%3Dhttps3A%2F%2Fi.embed.ly%2F1%2Fimage3Furl3Dhttps253A252F252Fpbs.twimg.com252Fprofile_images252F867170721423908865252FReXcZP2R_400x400.jpg26key3Da19fcc184b9711e1b4764040d3dc5c07__hrp%3DeyJtdXRlciI6ZmFsc2UsIndhaXRGb3JEb2N1bWVudEJvZHkiOnRydWUsIndhaXRGb3JEb2N1bWVudFJlYWR5IjpmYWxzZSwibm9QYXRjaGVzIjp0cnVlLCJ3aWR0aCI6IjEwMCUiLCJoZWlnaHQiOiIxMDAlIiwiZW5naW5lTmFtZSI6ImVuZ2luZS0wLjEuMCIsImZyYW1lTmFtZSI6ImVuZ2luZS0wLjEuMDoxMTE2OTAxNjk0In0%3D">回答</a>是：</p>
<p>“我总是告诉候选人，我不在乎任何 IDE 可以帮助你完成的事情。”</p>
<p>这里是 Hacker News 上的<a href="https://news.ycombinator.com/item?id=11603078">评论</a>中的另一个引用：</p>
<blockquote>
<p>我不仅经常使用 Google，我还用它来搜索我自己过去写的东西。</p>
<p>我已经不记得多少次我为编程问题 Google 搜索，答案在我写的 Stack Overflow 页面上。如果是特别旧的答案，我完全忘记了，我甚至会想，“哇，这个天才听起来像我！”以及“这个白痴不知道他在说什么！”</p>
</blockquote>
<p>几年前，我在一个 Facebook 群组里读到一位高级开发人员提到，当招聘人员问他是否有某项技术的经验，而他没有时，他回答：“那只是另一个工具。”</p>
<p>他的意思是他可能没有机会使用过它，但他有信心可以学习它。</p>
<p>你可能不需要花费数月时间才能开始使用新工具。你可能只需要几个小时阅读其文档，然后在需要时进一步学习，而不需要记住所有内容。</p>
<p>你不期望在你开始旅程时所有红绿灯都亮着。你通过当前的绿灯，然后在红灯前停下来。等待绿灯亮起再继续前进。</p>
<p>如今，我们不断有新的语言和框架，或现有的重大变化，因此尝试记住语法既困难又不那么重要。正如一位博客文章的评论者巧妙地<a href="http://disq.us/p/17uk3bk">说</a>：</p>
<blockquote>
<p>“优秀的工程师知道如何提出好的查询。然而，面试官期望行走的字典。”</p>
</blockquote>
<p>所以，总结一下：<a href="https://www.freecodecamp.org/news/how-to-search-google-like-a-pro/">精通 Google 搜索</a>并随着学习的进展而学习 :)</p>
<h2 id="">保持一个待学习列表</h2>
<p>你可能听说过用待办事项列表来跟踪日常琐事或任务。</p>
<p>但作为一名软件工程师，学习与实际操作同样重要，"待学习"列表成为你成长和探索的路线图。</p>
<p>将待学习列表视为你在技术世界中的个人指南。</p>
<p>正如待办事项列表提醒你购买杂货或支付账单，待学习列表跟踪你想要探索的所有令人兴奋的技术事物。</p>
<p>这可能是一种风靡全球的新编程语言，一种可以改变你编程方式的革命性工具，或人工智能等领域的最新趋势。</p>
<p>你的待学习列表不仅仅是一个很酷的东西的集合——它是一组目标。</p>
<p>就像你的职业发展中的一个愿望清单，充满了等待你去冒险的挑战。</p>
<p>无论是掌握一种新的编程语言，阅读有见地的书籍，还是注册在线课程，这个列表都是你通向无尽学习世界的门票。</p>
<p>待学习列表保持你的好奇心。它就像一张藏宝图，X 标记了新知识的位置。</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>
<p>所以，接受你的待学习列表，让它引导你在职业生涯中达到新的高度，让你在技术的动态世界中保持好奇、激励和不断发展。</p>
<h1 id="">编程的实际方面</h1>
<h2 id="">如何处理困难的项目</h2>
<p>像 Google、Amazon 或 WhatsApp 这样的大型软件项目，通常看起来像是现代奇迹。</p>
<p>它们可以令人敬畏，反映出复杂的工程和创新的想法。</p>
<p>如果你考虑到这些巨头背后的团队，自然会感到敬畏和恐惧。这些项目的规模和影响似乎令人难以承受。</p>
<p>记住，这些平台的建设者们在开始时可能也有类似的感觉。但他们没有让恐惧阻碍他们的进步。</p>
<p>相反，他们将其转化为生产力，一砖一瓦地奠定了最终成为技术里程碑的基础。</p>
<p>作为一名软件工程师，你可能不会立即被要求构建下一个全球技术现象，但每个项目，无论其规模如何，在开始时都可能显得令人生畏。</p>
<p>以下是帮助你处理最具挑战性的软件工程项目的路线图。</p>
<h3 id="">视野：从一开始就看到终点</h3>
<p>管理大型项目最关键的步骤之一是拥有清晰的愿景。这意味着要有一个明确的终极目标。这个愿景越清晰，导航越容易。</p>
<p>尝试用简单的术语来描述这个愿景，可能通过图表或简明的描述来实现。</p>
<p>你的目标应该是使这个愿景变得如此易懂，以至于任何人，无论他们的技术背景如何，都能理解。</p>
<p>例如，如果你正在开发一个复杂的 Web 应用程序，概述其核心功能。设想用户体验，界面以及定义你的应用程序的关键特性。</p>
<h3 id="">拆解它：逆向工程的艺术</h3>
<p>有了生动的终极目标，下一步是将这个愿景逆向转化成可操作的步骤。</p>
<p>这个过程包括将最终目标分解成较小的、可管理的任务。这些任务应该是量化的，使你能够有效地计划和安排它们。</p>
<p>在规划过程中，设定清晰的里程碑。这些是标志着你向最终目标推进的重大检查点。</p>
<p>以 Web 应用程序为例：从设计阶段开始，接着是前端开发，后端设置，功能集成，测试阶段和最终部署。然后你可以一个一个地处理这些阶段。</p>
<h3 id="">起点：第一个小步骤</h3>
<p>每个宏大的项目都从一个单一的，通常是小的步骤开始。</p>
<p>不要陷入认为你可以一口气完成整个项目的陷阱。大型项目需要时间、努力和毅力。</p>
<p>从一个可管理的任务或项目的组件开始。完成这个初始任务将提供一种成就感和动力。</p>
<p>进展，无论多么渐进，都是强大的推动力。它推动你向前，激励你解决项目的后续阶段。</p>
<p>如果你发现自己犹豫不决，可能是因为当前的任务看起来太令人生畏。在这种情况下，将任务进一步分解成更小、更可接近的部分。</p>
<h3 id="">反思性进展：复盘的重要性</h3>
<p>定期退后一步，审查你的进展。</p>
<p>这种做法对于确保你在正确的道路上朝着目标前进至关重要。</p>
<p>很容易陷入细节中，失去对整体目标的视野。定期审查有助于你重新调整你的努力与初始愿景保持一致。</p>
<p>这种复盘过程不仅仅是一个检查点。它是对你的方向和方法的战略评估。它可能导致课程修正，策略调整，甚至是对目标的重新评估。</p>
<h3 id="">前进的道路</h3>
<p>在软件工程中，遇到怀疑和陷入无所作为的循环是常见的。</p>
<p>等待完美的时刻或挑战自己缓解是不切实际的方法。相反，征服大型项目的关键在于接受责任并积极参与手头的任务。</p>
<p>无论项目的规模如何，通过仔细的计划、奉献精神和坚定的专注，总是可以完成的。</p>
<p>记住，在软件工程的领域，<em>唯一的出路就是前进的道路。</em></p>
<p>每一步，无论多么小，都是实现项目的进展。以承诺和决心接受每个阶段的旅程，观看你的雄心勃勃的项目如何变成已完成的现实。</p>
<h2 id="">如何选择要构建的项目</h2>
<p>当你开始学习并尝试应用你的技能时，你可能会有很多项目想法，迫不及待地想要开始构建。</p>
<p>也许你已经在项目管理工具中列出了这些想法，或者在笔记本中记下了它们。你有各种各样的应用程序概念、软件解决方案或编码实验让你感到兴奋。但有一个常见的挑战：决定首先要处理哪个项目。</p>
<p>这种犹豫不决可能导致拖延。你可能会发现自己选择更能立即满足的活动，避免对单个项目的承诺。</p>
<p>“也许有更重要的事情我应该做？”你想。“我应该开始这个应用程序还是那个自动化脚本？也许我应该再头脑风暴一些想法，总会有一个灵感。”</p>
<p>让我们暂时停下来，考虑一个可能会阐明这种困境的古老寓言。</p>
<h3 id="buridansass">从布里丹之驴（Buridan's ass）学到的教训</h3>
<p>有一个关于驴子的故事，它正好站在一些干草和水的中间。它无法决定先吃还是先喝，所以什么都没做，结果非常饥饿和口渴。</p>
<p>驴子没有想到先选一个，然后再做另一个。</p>
<p>作为软件工程师，我们经常在项目中面临类似的困境。我们有无数的想法和概念，但如果没有行动，任何一个都不会实现。</p>
<p>必须认识到，我们不能同时处理每个项目。就像我们不能同时在两个地方一样，我们也不能同时编写不同的应用程序。这种物理限制不应该阻碍我们实现目标的进展。</p>
<h4 id="">只需从一个项目开始</h4>
<p>这是完美的选择吗？也许不是。但这不是现在最重要的事情。</p>
<p>你选择的项目可能不是生死攸关的决定。选一个并开始。你总是可以稍后回到其他想法上。</p>
<p>首先列出应用程序或软件的功能。编写第一个函数或界面。庆祝这个进展，无论多么小。然后，继续逐步开发。</p>
<p>对其他项目重复这个过程。</p>
<p>不要让大量的选择阻碍你的进展。过度分析会导致瘫痪，阻碍你完成项目的进展。</p>
<p>停止过度思考。开始编程。</p>
<p>让世界受益于你的工作，一个个完成的项目。</p>
<h3 id="">如何克服拖延症</h3>
<p>这是软件工程师常见的挑战：“我知道我需要开始编程，但我就是无法开始。”</p>
<p>“空白的 IDE 屏幕很吓人。我无法让我的手指开始打字。”</p>
<p>考虑一下著名作家厄内斯特·海明威是如何应对写作障碍的：</p>
<blockquote>
<p>“有时当我开始一个新故事却无法进行时，我会坐在火炉前，挤压小橙子的皮到火焰边缘，观看它们产生的蓝色火花。</p>
<p>我会站着眺望巴黎的屋顶，思考‘别担心。你以前写过，现在也会写。你只需要写一句真实的句子。写下你知道的最真实的句子。’</p>
<p>最后，我会写一句真实的句子，然后继续写下去。”</p>
</blockquote>
<p>将这种方法应用到你的编程中。开始一个简单的功能或函数。</p>
<p>如果这是你今天完成的全部内容，那也没关系。持续的小步骤会带来显著的进展。</p>
<p>每天进行适度的编程可以保持一致性。而且通常，一旦你开始一个小任务，你会自然地进行到项目的更大部分。</p>
<h3 id="">历史上的灵感</h3>
<p>考虑一下艾萨克·牛顿在 1666 年黑死病封锁期间，从剑桥大学撤退到他家里。</p>
<p>没有现代工具或在线课程，牛顿利用这段时间深入研究复杂的数学问题，最终奠定了微积分的基础。</p>
<p>他的专注和奉献导致了突破性的发现。</p>
<p>在软件工程中，很容易陷入寻找完美工具或环境的困境中。</p>
<p>但请记住，真正的工作来自于奉献和努力，而不是拥有最新的技术或软件。</p>
<blockquote>
<p>“真正的专业人士不会躲在他们的工具后面——真正的专业人士使用他们周围的东西。业余爱好者才会试图在他们的工具上花时间——这都是为了逃避真正的工作。”——德里克·西弗斯</p>
</blockquote>
<p>让我们超越借口。让我们回到编程中。</p>
<h2 id="">通过从头开始构建来学习</h2>
<p>每次你开始一个新项目，想象它是你知识堡垒的一块砖。</p>
<p>你会遇到软件的基本元素——如算法、数据结构和设计模式。这些是软件的 ABC，深入掌握它们会使你成为一个更熟练和多才多艺的工程师。</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>
<p>每个项目都是从一个程序员到一个真正的技术艺术家的过程中的一步。所以，从一个空白文件和一个灵感的火花开始，让创造的魔力展现出来。</p>
<h2 id="">构建已经存在的东西</h2>
<p>在软件开发的激动人心的旅程中，开始一个新项目通常感觉像打开一个充满无限可能的宝箱。</p>
<p>虽然很诱人去创造一些独特而复杂的东西，但学习的路径往往需要一种更简单、更熟悉的方法。</p>
<p>现在，我们将探讨并非每个项目都必须是突破性的。有时，最好的学习来自于简单和熟悉。</p>
<p>想象一下从一个空白画布开始。你不立即绘制复杂的杰作，而是先练习简单的笔触和熟悉的图案。这是软件开发中学习的本质。</p>
<p>通过保持项目的简单性和可管理性，你可以避免陷入过于复杂的陷阱，从而专注于编码和解决问题的基本要素。</p>
<p>将现有的开源项目想象成一个图书馆，里面有你可以学习的书籍。这些项目由其他人创建并在 GitHub 等平台上共享，就像向你提供有价值的课程的指南。</p>
<p>它们是一个起点，向你展示事物是如何构建的，并鼓励你进一步探索。</p>
<p>把自己想象成一个学徒画家，通过复制大师的作品来学习。同样，在软件开发中，<a href="https://www.freecodecamp.org/news/javascript-game-tutorial-stick-hero-with-html-canvas/">克隆一个现有项目</a>是一种<a href="https://www.freecodecamp.org/news/learn-how-to-create-an-instagram-clone-using-react/">实践学习编码和解决问题</a>的方式。</p>
<p>在重新创建项目后，将你的工作与原始项目进行比较。这种比较就像一面镜子，反映出你的优势和需要改进的地方。</p>
<p>想想你每天使用的应用程序或网站。试着自己构建一个版本？这种方法使学习变得有趣和相关。</p>
<p>处理你熟悉的东西可以让你保持投入，并帮助你更深入地了解项目的复杂性。</p>
<p>在你的学习旅程中，专注于那些挑战和提高你技能的项目，而不是试图发明一些全新的东西。这就像在音乐中练习音阶——它们可能不华丽，但对成长至关重要。</p>
<p>优先考虑学习和技能发展，而不是追求突破性的想法。在你开始新的软件项目时，记住你的主要目标是作为开发人员成长。这不仅仅是构建一些新颖的东西——而是关于建立你的能力和信心。</p>
<p>通过复制现有项目并专注于学习过程，你将每个项目变成你旅程中的一个宝贵步骤。</p>
<p>这种方法不仅丰富了你的理解，也为你未来成为一名熟练的软件工程师奠定了坚实的基础。</p>
<p>所以，拿起你的工具，开始构建——不仅仅是软件，而是通向开发艺术的道路。</p>
<h1 id="">超越基础</h1>
<h2 id="">培养热爱学习的习惯</h2>
<p>软件开发是当今需求最大的职业之一。</p>
<p>不断有新的职位空缺，吸引了年轻人和来自广泛职业领域的已经就业的人。</p>
<p>他们知道，作为软件工程师可以获得非常好的薪水，因此他们带着巨大的野心开始职业生涯。</p>
<p>即使你在软件开发领域找到一份工作，如果你真的想变得优秀，热爱学习和编程是有帮助的。</p>
<p>这是少数几个你必须不断学习新事物的职业之一。你不仅需要了解现有的概念。你还必须适应不断涌入的新技术。</p>
<p>你必须适应市场的变化，学习当前被认为有价值的新事物。简而言之，你将不得不持续学习很多。</p>
<p>为了让你的大脑不断参与学习，你必须保持好奇心并保持谦逊。</p>
<p>经常有程序员基于他们的现有知识被雇佣，开始认为他们不再需要学习新东西。但如果你想成为优秀的软件工程师，保持好奇心并热爱学习是必要的，因为学习的需求永不停息。</p>
<p>1915 年 11 月，在写下他所称的“我生命中最美的作品之一”仅两页后，爱因斯坦给他 11 岁的儿子汉斯·阿尔伯特写了一封信。</p>
<p>他赞扬儿子的学习努力，说：“那是学习最多的方法……当你做某事时如此享受，以至于你没有注意到时间的流逝。”</p>
<p>“好奇心有其存在的理由，”爱因斯坦解释道。“当人们思考永恒、生命和现实奇妙结构的奥秘时，无法不感到敬畏。”</p>
<p>对框架的工作原理和结构产生好奇心。当你彻底学习某件事时，你会对其机制和功能有一个清晰的认识。</p>
<p>例如，不要仅仅接受 scikit-learn 是一个很棒的机器学习框架——学习它是如何工作的，背后的机制。并考虑对其做出贡献和改进，因为它是开源的。</p>
<p>另外，尽量不要过分关注金钱。当然，我们都需要钱来支付账单和为自己和家人买食物。这些是基本需求，我们需要满足它们——所以钱很重要。但试着培养对学习和开发的热情。这样，经济回报会更加令人满意。</p>
<p>试着培养对编程的热爱，并感激你有机会通过你编写的代码积极影响数百万人的生活。</p>
<p>爱因斯坦认为，“爱是比责任感更好的老师。”</p>
<p>我们作为软件工程师可以从中学到的是，不仅仅是为了高薪工作，而是因为我们热爱学习和我们的工作。如果我们能够培养一种内在的好奇心和动力，让我们在下班后或周末继续投入，那就更好了。</p>
<h2 id="">看大局</h2>
<p>在快节奏和令人兴奋的软件工程世界中，理解成为软件工程师不仅仅是写代码是至关重要的。</p>
<p>想象一下你不仅是一个建造者，也是一个建筑师和一个远见者。你的角色就像是一个大团队中的关键成员，你的想法和工作帮助团队获胜。</p>
<h3 id="">理解你的影响</h3>
<p>作为软件工程师，你可能花很多时间处理特定的编码任务——像是一块一块地解决难题。</p>
<p>但是，重要的是要记住，你实际上是在帮助完成一个更大的拼图。</p>
<p>假设你的公司像一艘大船，你不仅仅是在修理船的部件——你是在帮助它到达目的地。</p>
<p>想象一下你正在为一个当地面包店制作一个应用程序。除了关注按钮的工作，还要考虑你的应用程序如何帮助面包店吸引更多客户并让他们的生活更轻松。</p>
<h3 id="">看整体，不仅仅是部分</h3>
<p>随着你在职业生涯中的成长，你将不仅看到你写的代码行，还会看到整个项目，就像看整个森林而不是一棵树。</p>
<p>这意味着你将开始理解你的工作如何影响其他一切，并能够做出有助于整个业务的决策。</p>
<p>想想你手机上的拼图游戏。如果你只专注于一个小部分，你可能会错过一个能解决更多拼图的更好解决方案。</p>
<h3 id="">从编码到贡献</h3>
<p>当你开始专注于最重要的任务时，你不仅仅是一个写代码的人。你变成了一个解决大问题的人。</p>
<p>这就像从游戏中的一个玩家转变为帮助计划游戏策略的人。</p>
<p>想象你的公司像一个花园。一开始，你可能是在种植单个花朵（写代码）。但后来，你开始规划种植树木的位置以及如何使花园更美丽（战略性思考）。</p>
<h3 id="">不仅是程序员</h3>
<p>通过使你的工作与业务的实际需求保持一致，你成为团队中的关键成员。你的工作开始产生重大影响，你成为每个人依赖的人。</p>
<p>这就像在体育团队中不仅得分还帮助球队赢得冠军的明星球员。</p>
<p>如果你在一个网站上工作，不仅仅是让它看起来好。想想它如何运作，如何吸引更多的访问者，以及如何帮助业务增长。</p>
<p>成为软件工程师是一段惊人的旅程。这不仅仅是写代码，而是利用你的技能帮助业务及其客户。</p>
<p>当你开始以这种更大的方式看待你的角色时，你不仅作为程序员成长，而且作为团队的关键成员成长。</p>
<p>这种方法将帮助你在令人兴奋的软件工程世界中在个人和专业方面发展。</p>
<p>记住，你不仅是在构建软件——你在构建成功故事。</p>
<h2 id="">拥抱终身学习</h2>
<p>将软件工程领域视为一场不断进行的马拉松，而不是一次性的比赛，在每个转弯处都有新的激动人心的路径等待探索。</p>
<p>你的正规教育，无论是获得大学学位，参加培训营还是自学编程——这只是起点。</p>
<p>前方是一段持续学习和成长的激动人心的冒险。</p>
<p>将自己想象成技术世界中的侦探。每个新挑战都是等待解决的谜题。</p>
<p>一开始，这些谜题可能看起来令人生畏，但随着你学到更多，你会在拼凑解决方案中找到乐趣。这段旅程增强了你的自信，并将复杂的问题变成令人兴奋的探索。</p>
<p>在快速变化的技术领域，今天的热门可能明天就被遗忘。因此，虽然跟上最新趋势并了解最新动向很重要，但不要忘记学习基础知识并掌握主流技术。</p>
<p>因此，虽然你会想学习新的编程语言和框架，并熟悉最新的软件，但要实际地选择你关注的内容。</p>
<p>随着你学习和成长，作为软件工程师的价值将飞速上升。</p>
<p>这不仅仅是为了赚取更高的薪水——还包括参与更激动人心和具有挑战性的项目。</p>
<p>就像一位备受追捧的艺术家一样，你最新的技能和知识可以帮助你在技术世界中成为热门人物。</p>
<p>想象你学到的每个新技能都是一把钥匙。你拥有的钥匙越多，你能打开的门就越多。这可能导致更好的工作机会，参与开创性的项目，甚至领导团队。</p>
<p>你的知识和经验就像一张地图，引导你走向一个充实和充满活力的职业。</p>
<h2 id="">祝你好运！</h2>
<p>感谢你阅读这本手册！希望你现在感觉更有准备进入科技世界，提升你的技能，并朝着你的第一个——或下一个——开发者工作努力。</p>
<h3 id="pdf">获取本书的 PDF 版本</h3>
<p>你可以通过<a href="https://fatosmorina.gumroad.com/l/coding-for-everyone">这里</a>下载 PDF 版本阅读这本书。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何学习编程并找到开发者工作 [完整指南] ]]>
                </title>
                <description>
                    <![CDATA[ 如果你打算学习编程，成为一名开发者，并找到一份工作，这本书将为你展示如何实现。 这本书已编写完毕，完全免费。你可以在此阅读。 （这是英文原文链接：https://www.freecodecamp.org/news/learn-to-code-book/ 感谢中文版译者：Xing Liu [https://www.freecodecamp.org/news/author/xing/]、Keren Ma [https://www.freecodecamp.org/chinese/news/author/dake0913/]、Kate Shao、 songyp0505 [https://www.freecodecamp.org/chinese/news/author/songyp0505/]、 PapayaHUANG [https://www.freecodecamp.org/chinese/news/author/papayahuang/]、 JasonLi [https://www.freecodecamp.org/chinese/news/author/jasonli/]、Nich ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/learn-to-code-book/</link>
                <guid isPermaLink="false">63ef4b08cf34b8063af88d80</guid>
                
                    <category>
                        <![CDATA[ 学习编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Quincy Larson ]]>
                </dc:creator>
                <pubDate>Fri, 17 Feb 2023 10:19:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/07/Learn-to-Code-and-Get-a-Developer-Job-Book.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>如果你打算学习编程，成为一名开发者，并找到一份工作，这本书将为你展示如何实现。</p>
<p>这本书已编写完毕，完全免费。你可以在此阅读。</p>
<p>（这是英文原文链接：<a href="https://www.freecodecamp.org/news/learn-to-code-book/">https://www.freecodecamp.org/news/learn-to-code-book/</a> 感谢中文版译者：<a href="https://www.freecodecamp.org/news/author/xing/">Xing Liu</a>、<a href="https://www.freecodecamp.org/chinese/news/author/dake0913/">Keren Ma</a>、Kate Shao、<a href="https://www.freecodecamp.org/chinese/news/author/songyp0505/">songyp0505</a>、<a href="https://www.freecodecamp.org/chinese/news/author/papayahuang/">PapayaHUANG</a>、<a href="https://www.freecodecamp.org/chinese/news/author/jasonli/">JasonLi</a>、<a href="https://www.freecodecamp.org/chinese/news/author/nicholas/">Nicholas Zhan</a>、<a href="https://yesux.github.io">Suxiong</a>、<a href="https://www.freecodecamp.org/news/author/alanluo">Alan Luo</a>、<a href="https://www.freecodecamp.org/chinese/news/author/luojiyin/">luojiyin</a>、刘俊、<a href="https://www.freecodecamp.org/chinese/news/author/casey/">Casey Cui</a>、Paula，校对者：<a href="https://www.freecodecamp.org/chinese/news/author/miyaliu/">Miya Liu</a>）</p>
<p>几年前，纽约市的 5 家头部出版商之一找到我，希望与我合作出书。我和他们当面聊了下，可当时我根本抽不出时间来写书。</p>
<p>现在我终于有时间写书了，而且我打算让大家在 freeCodeCamp 上免费阅读我写的这本书。</p>
<p>信息本身即是自由且免费的，对吧？🙂（译者注：原文 “Information wants to be free” 旨在表达信息本应无障碍地被人们获取，见<a href="https://en.wikipedia.org/wiki/Information_wants_to_be_free">此词条</a>，英文中的 free 既有“自由”也有“免费”之意；另外，此处译文参考自<a href="https://web.law.duke.edu/cspd/chinese/information/">这里</a>）</p>
<p>这本书包括了我对学编程和成为开发者的许多思考，因此篇幅较长，通读可能需要几个小时。</p>
<p>以下是我的个人经历：</p>
<ul>
<li>30 多岁开始学习编程</li>
<li>然后成为软件工程师</li>
<li>之后，我于 8 年前（2015 年）创办了 freeCodeCamp.org。现在，每天都有一百多万人来这里学习数学、编程和计算机科学</li>
</ul>
<p>在这之前，我是一名从未接触过编程的英语老师。不过，我在开始学习编程一年后就获得了我的第一份开发者工作。</p>
<p>在这个过程中，我没有花一分钱购买书籍或参与任何课程。</p>
<p>（确切地说我其实花钱了，因为我经常跑到周边城市参加了技术会议。后文中会提到，这些钱花得非常值得。）</p>
<p>做了几年软件工程师之后，我觉得是时候改变一下了：我想教会其他人如何实现职业生涯的转换。</p>
<p>一开始我尝试着做了一些技术类的教学工具，但反响平平。直到有一个周末，我上线的 freeCodeCamp.org 竟成为了爆款，吸引了很多用户，逐步构建了 freeCodeCamp 社区。</p>
<p>一直以来，我们在社区内互相帮助。现在，全世界的人们得以通过 freeCodeCamp 来为自己的第一份技术工作做准备。</p>
<p>你也许会想：“我可能没那么多时间读完整本书”。</p>
<p>没关系，你可以把它存为书签；之后有空了随时回来继续读。这本书会一直在这里等你。</p>
<p>或许你还可以尝试在社交网络上分享，说：“看，我在读这本书”，并附上链接。你可能想不到，这是一种很好的激励方式，有助于你尽快读完这本书。</p>
<p>我这样说的目的不是要把书卖给你；其实在你打开这个页面的时候，这本书就已经是你的了。我是想告诉你，这本书绝对值得你抽出一些时间来读完😉。</p>
<p>我理解，你的时间很宝贵。所以这本书里绝对不会有任何的虚构和炒作，只会有直率且可执行的建议。</p>
<p>我会尽力在这本书的每一章内容里多写一些我的思考和理解。</p>
<p>噢对了，书都应该有个目录的吧。</p>
<p>来，请看目录：</p>
<h2 id="">目录</h2>
<ul>
<li><a href="#preface-who-is-this-book-for">前言：本书适合的人群</a></li>
<li><a href="#500-word-executive-summary">概论</a></li>
<li><a href="#chapter-1-how-to-build-your-skills">第一章：如何打造自己的技术栈</a></li>
<li><a href="#chapter-2-how-to-build-your-network">第二章：如何拓展自己的人脉</a></li>
<li><a href="#chapter-3-how-to-build-your-reputation">第三章：如何提升自己的圈内名声</a></li>
<li><a href="#chapter-4-how-to-get-paid-to-code-freelance-clients-and-the-job-search">第四章：如何靠编程赚钱——自由职业与求职</a></li>
<li><a href="#chapter-5-how-to-succeed-in-your-first-developer-job">第五章：如何在第一份工作中取得成功</a></li>
<li><a href="#epilogue-you-can-do-this">后记：相信自己，你能行</a></li>
</ul>
<h2 id="preface-who-is-this-book-for">前言：本书适合的人群</h2>
<p>这本书适合所有正在考虑从事软件开发职业的人。</p>
<p>如果你打算从事一份工作时间灵活、薪资高、解决问题方式不死板的工作，软件开发职位很可能符合你的需求。</p>
<p>当然，学习软件开发离不开这三点：<strong>时间</strong>、<strong>钱</strong>和<strong>机遇</strong>。</p>
<p>你可能已人到中年，上有老下有小，平日空闲<strong>时间</strong>不多。</p>
<p>你可能很年轻，或许还不具备提升薪资的能力，因此还没有攒下<strong>钱</strong>。</p>
<p>或者你所在的城市技术氛围不浓，离那些着重发展科技的城市（如旧金山、柏林、东京、班加罗尔）比较远。</p>
<p>还有人患有残疾；有人饱受年龄、种族、性别歧视；有人因移民身份或犯罪记录四处碰壁。</p>
<p>对这些人来说，他们的<strong>机遇</strong>本身就比其他人少。</p>
<p>每个人的起点不同，周围环境和资源也不尽相同；学习编程和找到开发者工作对这些人来说会比其他人更困难。</p>
<p>但无论你的起点和资源如何，我都会尽力给出我认为适合的建议。</p>
<p>总之，请继续读下去，你一定会有所收获。</p>
<h4 id="">文中涉及的专业词汇</h4>
<p>我会尽力在提到新词的时候顺便给出定义。</p>
<p>有些词汇出现频率很高，比如：</p>
<p>“编程”（programming）和“写码”（coding）意思相同。</p>
<p>“应用”（app）是 application 的缩写；且这里的 app 是泛指，包括但不限于在手机、电脑、游戏主机甚至冰箱上运行的应用（译者注：作者不认为 app 是 iPhone 手机应用的专属称谓）。</p>
<p>“软件工程师”（software engineer）和“软件开发者”（software developer）意思相同。</p>
<p>技术圈的一些人对此持有不同意见，仿佛“软件工程师”这一职位已饱经沧桑，其发展史横跨几个世纪，就好像机械工程师和土木工程师一样。也许多年后你的孙辈会这么认为，但至少目前，软件开发这一领域尚处于发展初期。</p>
<p>以下引用一位名人说过的话：</p>
<blockquote>
<p>如果建筑师像程序员写程序那样造房子，那么一只路过的啄木鸟就足以摧毁整个社会 —— 杰拉德·温伯格（计算机科学家、作家、大学讲师）</p>
</blockquote>
<h3 id="">所有人都可以学习编程吗</h3>
<p>是的，我坚信只要驱动力足够，人人都可以学习编程。归根结底，我认为学习编程是一个与驱动力有关的挑战，而不是靠天资吃饭。</p>
<p>曾经，我们的祖先在广袤的非洲草原上生活了几千年，然后才迁徙到了欧洲、亚洲和美洲。那时根本没有电脑。</p>
<p>编程也显然不是经历了几千年发展的技术，计算机和智能手机是在 1980 - 2010 年间经历飞速发展的。</p>
<p>虽然我也认同天资和兴趣可以让学习编程之路走得更加顺利，但对于想从事开发者职业的人来说，我觉得花时间去练习和敲代码才是正道。</p>
<p>很多人是这样，他们会开始学习编程，然后遇到困难，同时感到非常受挫，进而放弃。</p>
<p>我也放弃过，事实上我之前因为受挫放弃了好几次。</p>
<p>但和那些最终成功入行的人一样，我都是在放弃后的几天调整好心情，然后重新回来接受挑战。</p>
<p>说了这么多，我是想告诉你：学习编程并获得一份开发者工作其实并不容易；对于一些有特殊情况的人来说更是难上加难。</p>
<p>我不想在这里为自己编造一个逆境翻盘的人设。我是从 30 多岁开始学习编程的，在这之前我也确实没有任何编程或计算机科学的学习经验。不过：</p>
<p>我在美国中产阶级的家庭里长大，我是这个家庭的第四代，而且我的母语是英语。我读过大学，我的父亲和爷爷也都读过大学；我的曾祖父（爷爷的父亲）是来自瑞典的农民。</p>
<p>这几代以来，我的家庭很幸运，至少我们没有受到战争、饥荒、奴隶制的影响。</p>
<p>因此，在我身上并没有逆境翻盘的剧本，我也不打算编造这样的故事来激励你。</p>
<p>如果你对这类经历感兴趣，其实开发者社区中有一些人经历过逆境翻盘，稍后我会在这本书里提到一些人，供你参考。</p>
<p>我不打算吹捧软件开发，也不打算为学习编程这件事情画饼，构建出一个虚幻的乌托邦。</p>
<p>相反地，我只会为你提供学习技术的方法建议，以及如何获得一份可以养家糊口的好工作。</p>
<p>如果你学习编程的目的是找一份好的、稳定的工作，那没问题。</p>
<p>或者你学习编程的目的是为了自己创业，那也没问题。</p>
<p>一些人认为，学习编程最重要的是要对编程有极大的兴趣，而且要有全身心投入学习编程的决心：就是那种甘愿辞掉自己工作，一周七天都在搞开源项目，并乐在其中。</p>
<p>我确实认识一些对编程有<em>如此</em>兴趣的人，但同时我也认识很多不这么硬核的人：他们在一周的劳顿后，更愿意在周末探索自然，或者和朋友玩桌游。</p>
<p>人都是这样，我们会更倾向于做自己擅长的事情。你会在学习写代码的过程中逐渐提升自己的编程水平，进而提升对编程的兴趣。</p>
<p>那么说到底，这本书的受众到底是谁？其实就是想要学习编程、并获得一份开发者工作的每个人。</p>
<p>无论你本身是“极客”，还是个内向的人，或者你是个理性的激进分子，你都可以学习编程。</p>
<p>或者你还有以上没提到的其他特质，那也无妨。这些都不会成为你学习编程道路上的绊脚石。</p>
<p>总之，只要你是想学好编程并通过编程赚钱的人，那这本书就是为你量身打造的。</p>
<p>在通读此书前，请你花一点时间读完以下的概论章节。</p>
<h2 id="500-word-executive-summary">概论</h2>
<p>学习编程本身并不容易，而想要拿到一份软件开发职位其实更难。不过对于大多数人来说，这份努力一定是值得的。</p>
<p>编程是高薪的、包含创新性工作的脑力劳动。职业发展路线也很明确：高级开发、技术领头人、管理岗、CTO，然后或许可以成为 CEO。</p>
<p>任何行业都需要软件开发。在所有软件开发职位中，非技术类公司约占 66%；这类公司包括农业、制造业、政府部门、以及像是银行和医院这样的服务业。</p>
<p>如果你很担心软件开发这一职业会在你退休之前被自动化工具取代，不妨这样考虑：编程本身就是在让事情自动化。因此就算将来编程可以自动化，那也会是最后被自动化取代的职业。</p>
<p>如果你看到了这里，希望你和我的想法一致，认为软件开发是一份不错的职业。接下来，咱们来讨论下如何进入软件开发领域吧。</p>
<h3 id="">打造自己的技术栈</h3>
<p>你需要学习如下内容：</p>
<ul>
<li>前端开发：HTML、CSS、JavaScript</li>
<li>后端开发：SQL、Git、Linux、网页服务器</li>
<li>科学运算：Python 及其相关<a href="https://zh.wikipedia.org/wiki/%E5%87%BD%E5%BC%8F%E5%BA%AB">库</a></li>
</ul>
<p>以上提到的都是有 20 多年的发展史，而且发展相对成熟的领域。不论你将来为哪家公司效劳，都大概率会用到上面提到的这些技术。</p>
<p>学习这些东西的最好方式是做项目，最好是在学习过程中坚持一天做几个小项目。顺便，freeCodeCamp 上的课程里总共有几十个项目。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/Learn_to_Code_-_For_Free_-_Coding_Courses_for_Busy_People_--.png" alt="freeCodeCamp 核心课程里的一些版块（Certification：认证）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>freeCodeCamp 核心课程里的一些板块（Certification：认证）</figcaption>
</figure>
<h3 id="">拓展自己的人脉</h3>
<p>人脉广的人一般能更快找到自己想要的工作。</p>
<p>内向虽然不是问题，但有时候你或多或少要跳出自己的舒适圈。</p>
<p>不如从为自己创建 GitHub、Twitter、LinkedIn 和 Discord 账号开始吧。</p>
<p>尽量多参加技术会议，哪怕是需要坐火车、高铁、飞机去的那种。我建议你把学习编程的资金预算花在通勤和技术会议门票上，而不是花在购买书和课程上。</p>
<p>多与有识之士攀谈，认真听取他们的观点，而且记住他们的名字。</p>
<p>然后在 LinkedIn 上添加他们为好友，在 Twitter 上关注他们。如果你参加的技术会议有会后聚餐的安排，不要错过。</p>
<h3 id="">提升自己的圈内名声</h3>
<p>可以考虑为自己做的项目录制一段 demo，然后发到网上。</p>
<p>尝试申请成为技术会议的演讲人，越大型的会议越好。</p>
<p>在程序员的聊天频道里，花一些时间帮助那些比你晚入行的朋友们。</p>
<p>参与贡献开源项目。开源项目的开发和公司里的软件开发其实有很多相似之处。</p>
<p><strong>这些事情可以同时做，没有先后顺序。</strong> 不要拖延。</p>
<p>与其海投职位等结果，不如考虑多认识些人，让他们帮你内推。哪怕你认识人力资源部门的朋友，也会有帮助。</p>
<p>在拿到 offer 之前，不要停下面试的脚步；甚至你也可以选择不接受第一份 offer，要有耐心。</p>
<p>你的第一份开发职位一定是对你来说最有挑战性的。建议考虑至少做两年。别忘了，在这个过程中，你不只是在学习，还有收入。</p>
<p>找到工作也绝不意味着学习的终止。事实上，在公司与团队合作和维护代码都是学习的过程。</p>
<p>当然，身体健康一样重要。别忘了按时作息，保证睡眠和运动。</p>
<p>只要有足够的驱动力，任何人都可以学习编程并找到一份开发工作。</p>
<p>区别只是你有多想成为开发者，以及你在找工作的过程中有多坚持。</p>
<p>保持信念：你一定可以的！</p>
<p>谨以此书献给 freeCodeCamp 全球社区成员。</p>
<p>感谢所有在过去 8 年中支持我们的慈善机构和使命的人们。</p>
<p>正是因为你们的志愿服务和慈善行动，我们才能够帮助这么多人学习代码，获得他们的第一份开发者工作。</p>
<p>从 2014 年我第一次部署的那个简陋的开源项目开始，这个社区已经发展得非常好。我现在只是这个全球社区的一个小部分。</p>
<p>我很荣幸还能在这里，与你们大家一起工作。我们一起面对我们这个时代的基本问题：获取信息的机会，获得教育的机会，以及学习使用那些塑造未来的工具的机会。</p>
<p>这项事业仍处发展早期。我不幻想在我的有生之年每个人都能知道如何编码。但是，就像古腾堡圣经在 1455 年加速了扫盲一样，我们可以通过免费、开放的学习资源继续加速技术扫盲。</p>
<p>再次感谢大家。</p>
<p>并特别感谢 Abbey Rennemeyer 帮助编辑和反馈，以及感谢 Estefania Cassingena Navone 帮助设计封面。</p>
<p>接下来是这本书的正文。</p>
<h2 id="chapter-1-how-to-build-your-skills">第一章：如何打造自己的技术栈</h2>
<blockquote>
<p>“每个艺术家一开始都是业余爱好者。” ― Ralph Waldo Emerson</p>
</blockquote>
<p>掌握如何编程是一条漫长的道路。</p>
<p>对我来说，这是条崎岖的路。</p>
<p>但对你来说不必这样。</p>
<p>我将分享一些策略，帮助你尽可能顺利地学习编程。</p>
<p>首先，请让我带你了解我在 2011 年是如何学习编程的。</p>
<p>之后我会分享在这过程中我学到了什么。</p>
<p>我会向你展示如何比我更高效地学习。</p>
<h3 id="30">故事时间：一个 30 多岁的老师是怎么教他自己编程的</h3>
<p>我曾是一名老师，运营一所英语学校。我们有大概 100 个从世界各地前往加州的成年学生。他们通过学习提高英语能力以进入研究生学校。</p>
<p>学校的大部分老师热爱教学。他们热衷于和学生在城市里逛，以帮助他们提高口语能力。</p>
<p>但这些老师并不喜欢文书工作：出勤报告、成绩报告、移民文书。</p>
<p>我希望老师们能花更多时间和学生相处，而花更少时间在办公桌前做文书工作。</p>
<p>但我对计算机了解什么呢？</p>
<p>编程？难道不需要聪明才智就能会编程吗？我甚至不能配置一个 WiFi 路由器。并且我的数学很差。</p>
<p>直到有一天，我决定把一切都抛到一边，然后想：“我要去试一试编程。试一试，我能失去什么呢？”</p>
<p>我开始在谷歌上搜索诸如“如何自动点击浏览网站”之类的问题。以及“如何将网站数据导入 Excel”。</p>
<p>我当时没有意识到，我正在学习如何自动化工作流程。</p>
<p>于是学习开始了。首先是 Excel 的宏。然后是一个叫 AutoHotKey 的工具，你可以用它对你的鼠标进行编程，使其移动到屏幕的某些坐标上，点击，复制文本，然后移动到不同的坐标上并粘贴它。</p>
<p>在黑暗中摸索了几周后，我想出了如何将一些任务自动化的方法。我可以打开一个 Excel 电子表格和一个网站，运行我的脚本，10 分钟后回来，电子表格将被完全填充。</p>
<p>这是一个业余爱好者做的事。开发人员可能称之为“肮脏的黑客”。但它完成了工作。</p>
<p>我利用我新发现的自动化技能，继续简化学校的工作。</p>
<p>很快，老师们几乎不需要碰电脑。我只是用我最基本的技能，就完成了几个老师的工作。</p>
<p>这对学校产生了明显的影响。以前，我们的很多时间都被电脑上机械的工作捆绑住了，而现在我们有了自由。</p>
<p>老师们更高兴了。他们可以花更多时间与学生相处。</p>
<p>学生们也更高兴了。他们告诉他们在家乡的所有朋友，“你一定要来看看这所学校”。</p>
<p>很快，我们成为整个学校系统中最成功的学校之一。</p>
<p>这让我更有底气。我记得我自己在想：“也许我可以学习编码。”</p>
<p>我在棋牌游戏之夜认识了一些软件工程师。他们有传统的教育背景，拥有加州理工学院、哈维穆德学院和其他著名计算机科学课程的学位。</p>
<p>在当时，30 多岁的人学习编程的情况要少得多。</p>
<p>我鼓起勇气与这些朋友中的一些人分享我的梦想。</p>
<p>我想学习如何正确编程。我希望能够像他们那样以写代码为生。也许还能写出能为学校赋能的软件。</p>
<p>我与我的开发者朋友分享这些梦想，“我想做你做的事”。</p>
<p>但他们会耸耸肩，然后说一些类似的话：</p>
<p>“我的意思是，你可以试试。但你将不得不饮下整个知识的海洋。”</p>
<p>“这是个竞争相当激烈的领域。你怎么能和那些从小就开始编码的人共事？”</p>
<p>“你作为一名教师已经做得很好了。你为什么不坚持做你擅长的事情？”</p>
<p>这让我在几周里迷失了方向。我会在晚上进行长时间的反思性散步。我会在星空下思索我的未来。这些人是对的吗？我是说——他们真的知道，对吗？</p>
<p>但每天早上我都会回到我的办公桌前，看着我的脚本运行，看着我的报告以超人的速度自行编译，看着我的电脑为我效劳。</p>
<p>我确实想到了一个问题：也许这些朋友只是想把我从心痛中拯救出来。也许他们只是不知道有谁在 30 多岁时学会了编程。所以他们认为这是不可能的。</p>
<p>这就像……多年来，医生认为一个人在 4 分钟内跑完一英里是不可能的。他们认为你的心脏会因为跑得太快而爆炸。</p>
<p>但后来有人成功做到了，并且他的心脏没有爆炸。</p>
<p>Roger Bannister ——一个 25 岁的牛津大学学生--打破了这个心理障碍--其他许多人也都做到了。迄今为止，已有超过 1000 人跑出了 4 分钟以下的成绩。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/Roger-Bannister-1951_jpg__1269-1600_.png" alt="像冠军一样奔跑（照片来源：大英百科全书）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>Roger Bannister 像冠军一样奔跑（照片来源：大英百科全书）</figcaption>
</figure>
<p>而且，我也不是在做什么大胆的、史无前例的事情，比如在这里跑了 4 分钟的路程。多年来，很多著名的开发者都设法自学了编程。</p>
<p>哎呀，Ada Lovelace 在 19 世纪 40 年代就自学了编程。而她甚至没有一台可用的计算机。她只是了解了她的朋友 Charles Babbage 的计算机在理论上是如何工作的。</p>
<p>她写了几个最早的计算机算法。她被公认是世界上第一个计算机程序员。没有人教她，因为没有人可以教她。无论她有什么自我怀疑，她显然克服了这种怀疑。</p>
<p>我不是 Ada Lovelace。我只是一个拥有一台可用的电脑、良好的互联网连接，并且能够使用 Google 搜索数十亿个网页的老师。</p>
<p>我掰开指关节，眯起眼睛。我要自学编程。</p>
<h3 id="">陷入教程地狱</h3>
<blockquote>
<p>“如果你工作了 10 年，你是得到了 10 年的经验还是把 1 年的经验重复获得了 10 次？你必须对你的活动进行反思，以获得真正的经验。如果你把学习作为一个持续的承诺，你会得到经验。否则，无论你工作了几年，你都不会获得经验。” - Steve McConnell，软件工程师</p>
</blockquote>
<p>在接下来的几个星期里，我花了很多时间在谷歌上搜索，并做一些在网上遇到的随机教程。</p>
<p>哦，看，一个 Ruby 教程。</p>
<p>呃，哦，开始变得困难了。我得到了教程中没有提到的错误信息。嗯……这到底是怎么回事……</p>
<p>哦，看，一个 Python 教程。</p>
<p>人类的心理是个有趣的东西。当事情开始变得困难的时候，我们会问：我这样做对吗？</p>
<p>也许这个教程已经过时了。也许它的作者不知道他们在说什么。甚至还有人在使用这种编程语言吗？</p>
<p>当你在编码过程中面对模棱两可的错误信息时，邻家的草分外青，这山望着那山高。</p>
<p>假装我已经取得了进展是很容易的。是时候去吃午饭了。</p>
<p>我在咖啡馆里遇到一个朋友。“你的编码工作进展如何？”他们会问。</p>
<p>“很好。我今天已经编码了 4 个小时。”</p>
<p>“太棒了。有机会我很想看看你在做什么。”</p>
<p>“当然”，我说，即使我知道我什么都没做，“很快你可以看到。”</p>
<p>也许我会去书店，买一本新的 JavaScript 书。</p>
<p>买书是世界上最好的感觉。因为这也有种你在购买时间来阅读它们的感觉。</p>
<p>而这正是我在学习代码的几周后的情况。</p>
<p>我读了几本编程书籍的前 100 页，但没有完成任何一本。</p>
<p>我写了几本编程教程的前 100 行代码，但没有完成。</p>
<p>我不知道，但我被困在了一个被开发者亲切地称“教程地狱”的地方。</p>
<p>教程地狱是指你从一个教程跳到另一个教程，重新学习同样的基本原理。但从未真正超越基本原理。</p>
<p>因为超越基本原理——这需要一些真正的努力。</p>
<h3 id="">培养一个程序员需要一个村庄</h3>
<p>学习编程榨干了我所有的空闲时间。但我并没有取得什么进展。我现在可以在不看键盘的情况下输入<code>{</code>和<code>*</code>字符。但也就这样了。</p>
<p>我知道我需要帮助。也许是一些像 Yoda 一样的导师，他可以教我方法。是的，如果有这样的人存在，那肯定会让一切变得不同。</p>
<p>我发现附近有一个叫做“黑客空间（hackerspace）”的地方。当我第一次听到这个名字时，我有点忐忑不安。难道黑客不做非法的事情吗？我是一名英语教师，喜欢玩棋盘游戏。我并不想惹麻烦。</p>
<p>好吧，我拨通了列出的号码，和一个叫 Steve 的人交谈。我紧张地问：“你们不做违法的事，是吗？”Steve 笑了起来。</p>
<p>事实证明，“黑客”这个词被他称为一个超负荷的术语。是的-—“黑客”可以指恶意闯入一个软件系统。但 “黑客”也可以指更平凡的事情：编写计算机代码。</p>
<p>一些东西可以是“黑客”，意味着它不是一个优雅的解决方案。然而，你可以有“聪明的黑客”——一个巧妙的技巧，使你的代码更有效地工作。</p>
<p>简而言之：不要害怕“黑客”这个词。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/1200x-1_jpg__1200-797_.png" alt="Facebook 的企业园区在混凝土上用巨大的字母写着 “hack” 一词（图片来源：彭博社）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>Facebook 的企业园区在混凝土上用巨大的字母写着 “hack” 一词（图片来源：彭博社）</figcaption>
</figure>
<p>就我而言，我很少使用这个词，因为它太令人困惑了。而且我认为最近很多黑客空间已经意识到了这种模糊性。他们中的许多人现在称自己为“创客空间”。</p>
<p>因为这就是创客空间的全部内容--制造东西。</p>
<p>Steve 邀请我在星期六下午参观黑客空间。他说该地区的几个开发人员会在那里。</p>
<p>当我第一次走进 Santa Barbara 黑客空间的大门时，我被震撼了。</p>
<p>这个地方闻起来有一股电气的味道。临时搭建的桌子上摆放着电烙铁、LED 灯条、业余爱好者的 Arduino 电路板和成堆的 Roomba 真空机器人。</p>
<p>与我通过电话的那个 Steve 也在那里，他向我问好。他戴着眼镜，头发向后梳理，留着山羊胡须。他总是面带微笑。当你问他问题时，他不会迅速回答，而是先点点头，思考几秒钟。</p>
<p>Steve 是一个充满激情的程序员，曾在加州大学圣巴巴拉分校学习数学和哲学。他对这些学科仍然充满热情。但他真正热爱的是 Python。</p>
<p>Steve 打开了投影仪，做了一个非正式的“闪电演讲”。他正在演示他写的一个应用程序，该程序可以识别视频中的二维码，并将其替换为图像。</p>
<p>观众中有人在他们的笔记本电脑上调出了一个二维码，并把它放在摄像机前。然后，Steve 的应用程序将二维码替换成一张比萨饼的图片。</p>
<p>观众中有人喊道：“你能让比萨饼旋转吗？”</p>
<p>Steve 在一个名为 Emacs 的代码编辑器中打开了他的代码，并开始实时地对其进行修改。他毫不费力地在他的代码编辑器、命令行和应用程序运行的浏览器之间进行切换，“热加载”代码的更新。</p>
<p>对我来说，这就是魔法。我无法相信 Steve 在几个小时内就完成了这个应用程序。而现在，他正在根据听众的要求，不断增加新的功能。</p>
<p>我想：“这家伙是个天才”。</p>
<p>那天晚上，活动结束后，我和他留了下来，我这样告诉他。</p>
<p>我们一起吃了三明治。我对他说：“我可以在我的整个职业生涯中编码，但不能像你一样好。如果 10 年后我的代码能达到你的一半，我就很高兴了。”</p>
<p>但 Steve 反驳了我，他说：“我没有什么特别的。不要限制自己。如果你坚持编码，你可以轻易地超过我。”</p>
<p>我丝毫不相信他对我说的那些话。但是，仅仅是他说这句话的事实就使我产生了蝴蝶效应。</p>
<p>他是一个相信我的开发者。他看到了我——一个偶遇的老师——一个“脚本小子”的定义——并认为我可以成功。</p>
<p>Steve 和我一直聊到深夜。他给我看了他那台价值 200 美元的上网本电脑，即使以 2011 年的标准来看，它的性能也是非常差的。</p>
<p>“你不需要一个强大的电脑来构建软件”，Steve 告诉我，“今天的硬件是令人难以置信的强大。计算机之所以慢，只是因为它们运行的臃肿软件使它们变慢。买一台现成的笔记本电脑，清空硬盘，在上面安装 Linux，然后开始编码。”</p>
<p>我记下了他的笔记本电脑的型号，并在当晚回家后订购了完全相同的一台。</p>
<p>在用 Stack Overflow 调试了我的新电脑几天后，我成功地安装了 Ubuntu。我开始学习如何使用 Emacs 代码编辑器。到了下一个星期六，我知道了一些命令，并很快就把它们展示了出来。</p>
<p>Steve 点头表示赞同。他说，“太棒了。但你在码什么？”</p>
<p>我不明白他的意思。“我在学习如何使用 Emacs。来看看。我记住了……”</p>
<p>但 Steve 看起来若有所思。“这些很酷。但你需要一个项目。总要有一个项目。然后学习你在完成该项目过程中需要学习的东西。”</p>
<p>我除了写过几个脚本以帮助我的学校的老师之外，我从来没有完成过任何东西。但我开始明白他所说的是什么意思。</p>
<p>这一刻我恍然大悟。一直以来，我都被困在教程的地狱里，兜兜转转，什么也没完成。</p>
<p>Steve 说：“我希望你用 HTML5 建立一个项目。下周六，我希望你在黑客空间展示它。”</p>
<p>听到他的话，我感到很羞愧。但我站直了身子，对他说：“这个计划听起来不错。我这就开始做。”</p>
<h3 id="">除了你，没有人可以让你成为一个开发者</h3>
<blockquote>
<p>“我试着解放你的心灵，尼奥。但我只能带你到门口，你必须自己走过去。”（莫斐斯，1999 年电影《黑客帝国》）</p>
</blockquote>
<p>第二天早上，我在上班前起得特别早，在网上搜索 “HTML5 教程”之类的东西。在之前的教程地狱中，我已经了解了很多相关知识。我没有跳过，而是放慢脚步，准确地跟着教程走，输入每一条命令。</p>
<p>通常情况下，一旦我完成一个教程，我就会去找另一个教程。但是，我却开始练习教程中的代码。我对自己想做的项目有了初步的想法，我打算制作一个纯 HTML5 的文档页面。</p>
<p>---</p>
<p>如果你不知道什么是 HTML5，让我快速地解释一下。它只是 HTML 的一个较新的版本，从 20 世纪 90 年代的第一个网页开始，它就已经存在了。</p>
<p>如果一个网站是一个身体，那么 HTML 就是骨头。其他一切都建立在这些骨骼之上。（你可以把 JavaScript 看作是肌肉，把 CSS 看作是皮肤）。</p>
<p>让我们重新回到故事上来。</p>
<p>---</p>
<p>我已经知道在 HTML 中，你可以通过使用 ID 属性链接到同一个网页的不同部分。所以我想：如果我沿着左边放一个目录会怎么样？点击左边的不同选项（item），右边的页面就会相应地滚动并显示这些项目。</p>
<p>半个小时内，我就编出了一个粗略的原型。</p>
<p>但是又到了去学校报到的时间了，我只好中断编程。整整一天，我所想的都是我的项目，以及我应该如何最好地完成它。</p>
<p>我飞快地跑回家，打开我的笔记本电脑，花了整整一个晚上来编码。</p>
<p>我把官方和使用创作共用许可证（Creative Commons license）的 HTML 文档直接复制到我的页面，把它“硬编码”到 HTML 中。</p>
<p>然后，我花了大约一个小时的时间在 CSS 上，让所有东西看起来都是正确的，并使用绝对定位来保持侧边栏的位置。</p>
<p>我尽可能多地使用了 HTML5 的新“语义”标签。</p>
<p>轰——项目完成了。</p>
<p>一股成就感涌上心头。我慢跑到附近的一个足球场，绕着球场跑了几圈，庆祝一下。我成功了，我完成了一个项目。</p>
<p>我当时就决定：从现在开始，我所做的一切都将成为一个项目。我将努力使它成为一个成品。</p>
<p>第二天晚上，我走到讲台上，插上我的笔记本电脑，展示了我的 HTML5 网页。我回答了在场的开发者们关于 HTML5 的问题。</p>
<p>有时我会弄错一些东西，这时我会听到听众说，“这听起来不对——让我查查文档。”</p>
<p>人们并不害怕纠正我。但他们都很有礼貌，而且乐于提供支持。我甚至不觉得他们在纠正我，感觉他们比较像是在纠正公共记录，以免有人带着错误的信息离开。</p>
<p>我没有感到任何可能在在职教师会议上发表演讲的焦虑。</p>
<p>相反地，我几乎觉得自己是观众的一部分，与他们一起学习。</p>
<p>毕竟，这些都是新兴的开发工具。我们都在努力了解如何使用它们。</p>
<p>我的演讲结束后，史蒂夫走过来对我说：“还不错。”</p>
<p>我尴尬地笑了很久，没有说什么，只是对自己很满意。</p>
<p>然后史蒂夫眯着眼睛，抿起嘴。他说：“今晚开始你的下一个项目。”</p>
<h3 id="">我的编码之旅的经验教训</h3>
<p>我们会在接下来的每一章中查看年轻的 Quincy的编码之旅。但现在我想把这里的一些教训分解一下。我还想回答你可能有的一些问题。</p>
<h3 id="">为什么学习编码如此困难</h3>
<p>学习任何新技能都是困难的。无论是运球，还是给汽车换油，或是说一门新的语言。</p>
<p>有几个特别的原因让学习代码如此困难，而其中一些是编码所特有的。</p>
<p>第一个原因是，大多数人不明白编码到底是什么。那么，我这就来告诉你。</p>
<h3 id="">什么是编码？</h3>
<p>编码是用计算机能理解的方式告诉计算机要做什么。</p>
<p>所谓的编码就仅仅是这样而已。</p>
<p>但你不要搞错了，与计算机沟通是很难的。按照人类的标准，它们很“愚蠢”。它们会完全按照你的要求去做，但除非你擅长编码，否则它们可能不会做你“想”让它们做的事。</p>
<p>你可能在想：那服务器呢？数据库呢？网络呢？</p>
<p>归根结底，这些都是由一层层的软件控制的，而这些软件都是由代码所组成。从最上层一路往下都是代码所构成的，直到抵达最底层的物理硬件，也就是在电路板上移动的电子。</p>
<p>在计算机发展最初的几十年里，开发人员编写的代码是“接近金属”的，意思是他们通常是直接在硬件上操作，将比特从 0 翻转到 1，再翻转回来。</p>
<p>但是，当代的软件开发涉及许多 "抽象层"——一个程序运行在另外的程序之上，仅仅几行 JavaScript 代码就可以完成一些非常强大的事情。</p>
<p>在 20 世纪 60 年代，一个 “bug”（虫子，也有程序错误的意思）可能是一只昆虫在一个房间大小的计算机中爬来爬去，并在其中一个电路中被烧毁。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/First_Computer_Bug-_1945.jpeg" alt="1945 年发现的史上第一个计算机虫子是一只飞蛾，它被困在哈佛大学一个房间大小的计算机的面板中（图片：Public Domain）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>1945 年发现的史上第一个计算机虫子是一只飞蛾，它被困在哈佛大学一个房间大小的计算机的面板中（图片：Public Domain）</figcaption>
</figure>
<p>今天，我们编写的代码比物理硬件高出了许多抽象层。</p>
<p>这就是编码。它比过去要容易得多。而且它每年都在变得更加容易。</p>
<p>不夸张地说，几十年后，编码将变得如此简单和普遍，以至于大多数年轻人都会知道如何编码。</p>
<h2 id="2023">为什么即使在 2023 年，学习编码仍然很难</h2>
<p>即使在 2023 年，学习编码也是如此困难，有三大原因。</p>
<ol>
<li>
<p>工具仍然很原始。</p>
</li>
<li>
<p>大多数人不善于处理模棱两可的问题，而学习编码面对的就是这样的问题。人们常会迷失方向。</p>
</li>
<li>
<p>大多数人不善于处理持续的负面反馈，而学习编码常常会收到一个又一个残酷的错误信息，会使人感到沮丧。</p>
</li>
</ol>
<p>现在我将更详细地——讨论这些困难。我还会教你一些实用的策略来克服每一项困难。</p>
<h3 id="">工具仍然是原始的</h3>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/TNG-S4E19-171.jpeg" alt="来自《星际迷航：下一代》着魔似的巴克利（Barclay）在全息甲板（Holodeck）上编程" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>来自《星际迷航：下一代》着魔似的巴克利（Barclay）在全息甲板（Holodeck）上编程</figcaption>
</figure>
<blockquote>
<p>“计算机，开始新的程序，创建如下：工作站的椅子，现在创建一个标准的字母数字控制台，定位在左手；现在为右手创建一个标志性的显示控制台。将这两个控制台与企业主计算机核心相连，利用神经扫描界面。”——巴克利，来自《星际迷航：下一代》第四季第 19 集：“第 N 度”</p>
</blockquote>
<p>上面我拿了我最喜欢的科幻电视剧《星际迷航：下一代》中的一段作为例子，告诉你这就是人们在未来可能的编程方式。</p>
<p>《星际迷航》中的每个角色都会编码。医生、保安人员、飞行员，甚至小韦斯利-克鲁舍（Wesley Crusher，由儿童演员威尔-惠顿扮演）也能让飞船上的计算机听从他的命令。</p>
<p>当然，每个人都会编码的原因之一是他们生活在一个后稀缺的 24 世纪社会，可以获得免费的高质量教育。</p>
<p>另一个原因是，在未来，编码会容易得多。你只需准确地告诉计算机要做什么，然后，如果你足够精确，计算机就会执行。</p>
<p>如果编程就像用简单的英语对计算机说指令一样容易呢？</p>
<p>我们已经朝着这个目标取得了重大进展。想一想以前我们的祖母，她们在房间大小的大型计算机和成堆的打孔卡（punch cards）之间奔波。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/naca-computer-operates-an-ibm-telereader-5b6f9f-1024.jpeg" alt="20 世纪 50 年代使用打卡机的计算机（图片：NASA）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>20 世纪 50 年代使用打卡机的计算机（图片：NASA）</figcaption>
</figure>
<p>过去，即使是一个简单的应用程序的编程也需要严谨的指令。</p>
<p>这里有两个“凯撒密码（Cesar Cypher）”的例子，这是经典的计算机科学家庭作业项目。</p>
<p>这也被称为 “ROT-13”，因为你将字母 ROT 了 13 个位置。例如，A 变成 N（A 后 13 个字母），B 变成 O（B 后 13 个字母）。</p>
<p>我将向你展示这个程序的两个例子。这两个例子都来自创作共用许可证的罗塞塔代码（Rosetta Code）项目。</p>
<p>首先，这是 x86 汇编中的程序：</p>
<pre><code class="language-x86">format 	ELF 	executable 3
entry 	start
	
segment	readable writeable
buf	rb	1
	
segment	readable executable
start:	mov	eax, 3		; syscall "read"
	mov	ebx, 0		; stdin
	mov	ecx, buf	; buffer for read byte
	mov	edx, 1		; len (read one byte)
	int	80h

	cmp	eax, 0		; EOF?
	jz	exit

	xor 	eax, eax	; load read char to eax
	mov	al, [buf]
	cmp	eax, "A"	; see if it is in ascii a-z or A-Z
	jl	print
	cmp	eax, "z"
	jg	print
	cmp	eax, "Z"
	jle	rotup
	cmp	eax, "a"
	jge	rotlow
	jmp	print

rotup:	sub	eax, "A"-13	; do rot 13 for A-Z
	cdq
	mov	ebx, 26
	div	ebx
	add	edx, "A"
	jmp	rotend
	
rotlow:	sub	eax, "a"-13	; do rot 13 for a-z
	cdq
	mov	ebx, 26
	div	ebx
	add	edx, "a"

rotend:	mov	[buf], dl
	
print: 	mov	eax, 4		; syscall write
	mov	ebx, 1		; stdout
	mov	ecx, buf	; *char
	mov	edx, 1		; string length
	int	80h

	jmp	start

exit: 	mov     eax,1		; syscall exit
	xor     ebx,ebx		; exit code
	int     80h
</code></pre>
<p>下面是 Python 中的同一程序：</p>
<pre><code class="language-python">import string

TRANSLATION_TABLE = str.maketrans(
    string.ascii_uppercase + string.ascii_lowercase,
    string.ascii_uppercase[13:] + string.ascii_uppercase[:13] +
    string.ascii_lowercase[13:] + string.ascii_lowercase[:13]
)


def rot13(s):
    """Return the rot-13 encoding of s."""
    return s.translate(TRANSLATION_TABLE)


if __name__ == "__main__":
    """rot-13 encode the input files, or stdin if no files are provided."""
    import fileinput
    for line in fileinput.input():
        print(rot13(line), end="")
</code></pre>
<p>更简单，更容易阅读，对吗？</p>
<p>而在未来，编码将像对你的宇宙飞船说的那样简单。</p>
<p>“计算机，开始新程序。把我说的每一个字母，替换成英语字母表中 13 个位置之后出现的字母，然后将结果读回给我。这个词就是 ‘banana’”。</p>
<p>然后你的电脑会说：“Onanan”。</p>
<p>我们正在做的事情被称为“声明式编程（declarative programming）”。我们在宣布“计算机，你应该这样做”。而计算机足够聪明（编程足够好），能够理解我们的指令并执行它们。</p>
<p>在 2023 的今天，我们大多数正在使用的代码风格就是“命令式编程”。我们一步步地告诉计算机，我们要做什么。</p>
<p>计算机很呆，所以我们必须帮它们把一只脚放在另一只脚前面，以让它知道怎么走路。</p>
<p>现在，这个领域尚未成熟。</p>
<p>人类早期的工具是逐渐从石头进化到青铜再进化到铁，而软件工具也有进化的过程，不过速度要快得多。</p>
<p>我们现在所处的程序进化的阶段可能相当于青铜时代。但在我们的有生之年，我们可能会达到铁器时代。</p>
<h3 id="">学习编程是一个模糊的过程</h3>
<p>学习编程的时候，你可能经常会问自己：“我是在明智地分配我的时间吗？我现在学的是正确的工具吗？这些书的作者和课程制作者真的知道他们自己在说什么吗？”</p>
<p>模糊性会迷惑你的每一次学习。“我的测试案例失败是因为教程过时了，而且我使用的框架发生了重大变化？还是我只是做错了？”</p>
<p>正如我之前在《教程地狱》中提到的，你还得应对“这山望着那山高”的问题。</p>
<p>很多开发者在面临这个问题的解答时，都会用一个他们自认为很聪明的 “RTFM” 原则作为答案，即 “Read the Freaking Manual（直接啃手册）”。但是这个答案也并不是那么有用，甚至会让问题变得更加复杂，该读哪本手册？读哪个章节？</p>
<p>另一个问题是：你没有清晰的了解你不知道的事情，以至于你往往不能清楚地表达出你想问的问题。</p>
<p>如果你甚至不能问出正确的问题，你会在学习历程中颠簸而行。</p>
<p>这会让学编程这件事变得格外辛苦，因为在你做这个软件之前，很大几率没人试着做过和你这个完全相同的软件。</p>
<p>因此，你在过程中遇到的问题大概率是前所未有的，而且可能没有人可以帮你。</p>
<p>人们每天在谷歌上输入的查询中，有 15% 是以前从未被搜索过的。如果你正在搜索的内容正是属于这 15%，那可能有点不妙。</p>
<p>我的理论是：大多数开发人员会想出如何解决一个问题，然后简单地继续前进，而不会把它记录在任何地方，因此，你可能是少数不得不为相同的问题找出自己的解决方案的开发者之一。</p>
<p>然后，当然我们还有很多古老的论坛主题和 Stackflow 页面。</p>
<figure class="kg-card kg-card-image kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/size/w1000/2023/01/wisdom_of_the_ancients_png__485-270_.png" alt="来自 XKCD 的绘画" class="kg-image" width="600" height="400" loading="lazy"><figcaption>来自 XKCD 的绘画</figcaption></figure>
<h3 id="">如何在学习编程的时候不迷失方向</h3>
<p>好消息是：当你练习多了以后，<strong>能力</strong>和<strong>自信</strong>都会随之而来。</p>
<p>很快你就会知道在 Google 上搜什么了。对于文档通常是如何组织的，以及在哪里寻找目标信息，你很快就会有第二直觉，而且你也会知道该在哪里问哪些问题。</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>你可能会对自己自言自语道：“完了，那门课的考试考砸了，期中考试之前得好好学习了。”</p>
<p>或许你老师会在你的书卷上用红笔标出要点，来帮助你改善工作。</p>
<p>在考试或试卷上得到一个糟糕的成绩真的会让人心情糟糕一整天。</p>
<p>而这一般就是我们作为人类对反馈的思考方式。</p>
<p>如果你花时间在编程上，你会知道电脑是很快的，他们可以在毫秒内将你的代码执行完毕。</p>
<p>大多数情况下你的代码会崩溃。</p>
<p>如果你比较幸运的话，你会得到一个错误信息。</p>
<p>而如果你足够幸运的话，你会得到一个“堆栈记录”以及导致程序崩溃的那一行代码，堆栈记录指的是当计算机遇到错误时试图做的一切操作。</p>
<figure class="kg-card kg-card-image kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/oh-my-zsh-stack-trace-error.jpg" alt="在本地运行 freeCodeCamp 时的堆栈跟踪错误信息" class="kg-image" width="600" height="400" loading="lazy"><figcaption>在本地运行 freeCodeCamp 时的堆栈跟踪错误信息</figcaption></figure>
<p>上面就是来自电脑的当面的负面反馈，不是每个人都能接受整天看到这种情况。</p>
<p>想象一下，如果每次你把你的学期论文交给老师，他们都会把大红的 “F” 写在上面。再想象一下，在你还没来得及眨眼的时候，他们就这样做了。一遍又一遍。</p>
<p>编码有时就是这种感觉，你想抓住电脑，然后不停地质问它：“你为什么就是不理解我写的代码？”</p>
<h3 id="">怎样才能不感到沮丧</h3>
<p>再重复一遍，关键是练习。</p>
<p>随着时间的推移，你会对模糊的错误信息和像屏幕一样长的堆栈记录形成一种容忍。</p>
<p>编程永远不会比你刚开始的时候更难。</p>
<p>你不仅不知道自己在做什么，而且你也不习惯接受这种不近人情的、快速的、负面的反馈。</p>
<p>所以这里有一些小建议：</p>
<h4 id="">第一个建议：知道不是只有你一个人在这方面做得不好</h4>
<p>每个学习代码的人都会试图与计算机进行心灵融合（Vulcan Mind Meld），让它理解自己，在这个过程中对抗沮丧。（这是另一个来自《星际迷航》的参考资料）。</p>
<p>当然，很多人在他们是孩子的时候就开始编程了。他们会表现得像他们一直很擅长编程，但他们很可能也曾像我们这些成年人一样挣扎过，而随着时间的推移，他们只是忘记了曾经挣扎的时刻。</p>
<p>把电脑看作你的朋友，而不是对手，电脑有什么错，它只是想让你把自己的指令明确一些罢了。</p>
<h4 id="">第二个建议：呼吸</h4>
<p>很多人在面对错误信息的时候，本能反应都是咬紧牙关。然后重新在代码编辑器中盲目的修改代码，希望以某种幸运的方式通过这个问题。</p>
<p>这样是行不通的，下面解释了为什么这么说。</p>
<p>宇宙是很复杂的。软件也是很复杂的。你不太可能具有《阿甘正传》主人公的运气，一路坦途。</p>
<figure class="kg-card kg-card-image kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/gump.jpeg" alt="阿甘做他该做的事，并以不寻常的运气抓到了虾子" class="kg-image" width="600" height="400" loading="lazy"><figcaption>阿甘做他该做的事，并以不寻常的运气抓到了虾子</figcaption></figure>
<p>你可能听说过“无限猴子定理”。这是一个思想实验，实验内容是让你想象黑猩猩在打字机上打字。</p>
<p>如果你有一个新闻编辑室，里面都是黑猩猩在做这件事，要多久才会有一只黑猩猩随机打出 “to be or not to be” 这句话？</p>
<p>假设每只黑猩猩每秒钟打一个随机字符。他们中的一个可能需要1万亿年的时间来输入 “to be or not to be”，那是 10 的 18 次方，十亿个十亿。</p>
<p>即使假设黑猩猩保持健康，打字机定期维修，当它们中的一个设法打出 “to be or not to be” 时，银河系将是一个寒冷、黑暗的虚空。</p>
<p>我为什么要告诉你这一切？因为你不希望成为那些黑猩猩中的一员。</p>
<p>在这段时间里，你几乎肯定可以想出办法来教那些黑猩猩如何打英文单词。它们可能会设法打出《哈姆雷特》的全部内容，而不仅仅是其中最著名的一句。</p>
<p>即使你真的很幸运，通过了这个 bug，你会学到什么？</p>
<p>因此，与其惊慌失措，不如花些时间，理解代码，理解正在发生的事情，然后修复错误。</p>
<p>务必花时间去理解错误的代码，不要成为一个 quintillionarian（五亿年）的黑猩猩。（我认为 quintillionarian 意味着一个五亿岁的人，虽然根据谷歌，以前没有人用过这个词）。</p>
<p>与其盲目地尝试，寄希望于简单地跳过错误信息，不如放慢速度。</p>
<p>深吸一口气，伸个懒腰，起身去拿一杯热饮。</p>
<p>未来的自己会感谢你把这作为一个有教育意义的时刻。</p>
<h4 id="">第三个建议：使用“橡皮鸭”调试</h4>
<p>找一只橡皮鸭子，把它放在你的电脑旁边。每当你遇到错误信息时，试着向你的橡皮鸭解释你觉得发生了什么。</p>
<p>当然，这是很蠢的，这怎么可能有帮助呢？</p>
<p>除非真的有帮助。</p>
<p>“橡皮鸭调试”对于让自己慢下来、尝试专注于眼前的工作是很有帮助的。</p>
<p>当然，你不一定要用橡皮鸭子。你可以向你的宠物仙人掌解释你的 Python 应用程序，解释你的 SQL 查询给那只一直跳到你键盘上的猫。</p>
<p>大声解释你的想法似乎能帮助你更好地处理这一情况。</p>
<h3 id="">大多数人是怎么学习编程的呢</h3>
<p>现在让我们来谈谈通往第一份开发者工作的传统途径。</p>
<p>为什么要在意别人是怎么做的呢？剧透警告：没必要。</p>
<p>做好自己的事情就可以了。</p>
<p>这就是说，你可能会怀疑自己和你对学习所做的决定，你可能会向往没有走过的路。</p>
<p>我在这一部分的目标是安抚你可能有的任何焦虑。</p>
<h4 id="">计算机科学学位的重要性</h4>
<p>大学学位对于准备从事软件开发职业的人来说仍然是一个黄金标准，尤其是计算机科学的学士学位。</p>
<p>在你开始说“但我没有计算机科学学位”之前，不用担心，<strong>你不需要计算机科学学位就能成为一名开发人员</strong>。</p>
<p>但它们的用处是不可否认的，下面将解释原因。</p>
<p>首先，你会想“为什么开发者需要学习计算机科学”，毕竟，有史以来最著名的开发者之一对该领域有这样的评价：</p>
<blockquote>
<p>“计算机科学教育不能使任何人成为专家级的程序员，就像研究画笔和颜料不会让人成为专家级的画家一样。” - Eric Raymond，开发人员、计算机科学家和作家。</p>
</blockquote>
<p>计算机科学系在传统上是数学系的一部分，20 世纪 60 年代和 70 年代的大学不知道该把整个计算机的事情放在哪里。</p>
<p>在其他大学，计算机科学被认为是电气工程的延伸。直到最近，即使是加州大学伯克利分校--世界上最伟大的公立大学之一--也只是把计算机科学学位和电气工程结合作为双学位。</p>
<p>但大多数大学现在已经开始了解计算机科学作为一个研究领域的重要性。</p>
<p>截至本文写作时，计算机科学是你能得到的报酬最高的学位，甚至高于专注于金钱的领域，如金融和经济学。</p>
<p><a href="https://www.glassdoor.com/blog/50-highest-paying-college-majors/">根据 Glassdoor</a>，美国的计算机科学专业平均在第一份工作中比其他专业赚得更多。70000 美元对一个刚从大学毕业的人来说是一笔不小的收入。</p>
<p>高于护理专业（59000 美元）、金融专业（55000 美元）和建筑专业（50000 美元）。</p>
<p>OK--所以获得计算机科学学位可以帮助你找到一份高薪的入门工作。这可能对任何人都不是新闻，但这是为什么呢？</p>
<h4 id="">雇主如何看待学士学位的问题</h4>
<p>你可能已经听到科技界的一些大雇主说“我们不再要求求职者有学士学位”之类的话。</p>
<p>谷歌这么说过，苹果也这么说过。</p>
<p>而且我相信他们，他们不再需要本科学位。</p>
<p>我们已经有很多 freeCodeCamp 的校友在这些公司找到了工作，其中有些人没有相应的学士学位。</p>
<p>但那些找到这些工作的 freeCodeCamp 校友可能必须是特别强的候选人，以克服他们没有学士学位的事实。</p>
<p>你可以看一下这些职位空缺，他们判断候选人的标准有很多：</p>
<ol>
<li>工作经验</li>
<li>教育</li>
<li>作品集和项目</li>
<li>他们是否有已经在该公司工作的人的推荐？（我们将在第二章深入讨论建立你的网络）</li>
<li>其他声誉方面的考虑（我们将在第三章中讨论建立你的声誉）</li>
</ol>
<p>对于这些不要求学士学位的雇主来说，教育只是几个考虑因素中的一个。如果你在其他方面比较强，他们可能会选择面试你--不管你是否曾经踏入过大学的教室。</p>
<p>只需注意，拥有学士学位将使你更容易获得面试机会，即使在这些“可选择学位”的雇主那里。</p>
<h4 id="">为什么那么多开发者的岗位特别要求有计算机科学的学位呢</h4>
<p>我经常告诉人们，学士就是学士。因为就大多数意图和目的而言，它是有用的。</p>
<p>想进入美国军队成为一名军官，而不是一名入伍服役的成员？你将需要一个学士学位，但任何专业都可以。</p>
<p>想获得工作签证到国外工作吗？你可能需要一个本科学位，但任何专业都可以。</p>
<p>而对于许多写着“需要学士学位”的职位空缺--任何专业都可以。</p>
<p>这是为什么呢？你在大学里学习的科目难道一点都不重要吗？</p>
<p>我的理论是这样的：你在大学里学了什么没有你<strong>是否</strong>完成大学学业重要。</p>
<p>雇主倾向于选择那些能够通过自己的方式通关（完成大学学业）的人。</p>
<p>你当然可以成绩垫底，一直挂科，一半的在校时间都在缓考，但是学位就是学位。</p>
<p>你知道以最后一名的成绩毕业于医学院的学生被称作什么吗？“医生”。</p>
<p>对于大部分雇主来说，就是这样的道理。</p>
<p>多数情况下，HR 只是通过招聘过滤软件的勾选框来筛选简历，过滤掉没有学位的应聘人员。他们可能完全没看过这些被筛选掉的简历。</p>
<p>必须强调，并不是所有HR都这样。但大多数 HR 都这样，在美国如此，在其他国家可能更是如此。</p>
<p>这很糟糕，但这就是劳动力市场目前的状况，在几十年后可能会好转也可能没有变化。</p>
<p>这就是为什么我总是鼓励十几二十多岁的年轻人认真考虑获得一个学士学位。</p>
<p>并不是为了大学本身：</p>
<ul>
<li>教育本身（你可以在线免费学习世界上最好大学的课程，所以这并不构成高额学费的充分理由）</li>
<li>如宿舍生活、交友、自我探索等“大学经验”（美国学生基本不住在学校，也就没有类似的经验）</li>
<li>通识课程帮助你成为“全面人才”（听说过 <a href="https://www.healthline.com/nutrition/freshman-15">“Freshman 15”</a>（大一胖三斤半）这个笑话吗？但确实有很多大一新生过劳肥）</li>
</ul>
<p>再说一遍，学士学位真正的意义（美国人花十万美元甚至更多来支付大学 4 年的学费）是因为许多雇主要求学历。</p>
<p>当然，获得学士学位还有其他的好处，如：更多从军的选择、更容易获得工作签证等。</p>
<p>还有一个好处是：如果你想要成为一名医生、牙医或者教授，你必须先拥有学士学位，然后再进入研究生院。</p>
<p>已经铺垫得差不多了，让我直言不讳地回答你的问题。</p>
<h3 id="">成为一个软件工程师需要大学学历吗</h3>
<p>不需要。很多雇主都不需要你有学士学位。</p>
<p>但学士学位可以帮助你更快获得面试机会，获得更高的工资。</p>
<h3 id="associatedegree">那<a href="https://zh.wikipedia.org/zh-hans/%E5%89%AF%E5%AD%B8%E5%A3%AB">副学士（Associate degree）文凭</a>呢，有含金量吗</h3>
<p>理论上是的。在科技行业的某些领域的确需要副学士文凭，这个文凭也会帮助你更快获得面试机会。</p>
<p>虽然如此，我不鼓励你为了副学士文凭而去读大学。我更鼓励你待够 4 年，拿到大学文凭，这个的含金量更高。</p>
<p>美国教育部的数据显示，在整个职业生涯中，大学学历的薪资比副学士学历高 31%。</p>
<p>而对于计算机科学学位来说，这两种学历的区别更加显著。</p>
<h3 id="">如果没有大学学历，过了年龄还申请学士学位值得吗</h3>
<p>假设你三十多岁，你参加过一些学院和大学的课程，并且你已经完成了头两年的学业可以获得副学士学位。</p>
<p>“重返校园”值得吗？</p>
<p>是的，重返校园值得！</p>
<p>但我并不认为你应该辞掉工作脱产学习。</p>
<p>脱产学习是为“传统”学生设计的。他们通常在 18 到 22 岁之间（如果服过兵役可能年龄稍长一些），除了高中校外打工和暑期实习，并未有任何工作经验。</p>
<p>传统的大学的学费高昂，一般学生会结合奖学金、家庭基金和学生贷款来支付。</p>
<p>作为一个工作了的成年人，你获得这些现金资助的渠道更少。与此同时，你也没有一个刚毕业的高中生时间宽裕。</p>
<p>但这并不意味着你就要放弃获得学士学位的梦想了。</p>
<p>与其加入一个传统大学，我更推荐三十岁以上的成年人参与线上非盈利大学。有两所名声在外、收费合理的大学：西部州长大学（ Western Governor's University）和美国人民大学（ University of the People）。</p>
<p>一些本地社区大学和州立大学的衍生项目也提供学位。许多项目都是线上的，其中一部分还可以自己管理学习进度，你可以根据自己的工作安排完成学业的时间。</p>
<p>做好研究功课。如果一个大学看上去不错，推荐你使用 LinkedIn 找到该学校校友，向他们寻求帮助。询问他们的经验，他们觉得这些课程是否物有所值。</p>
<p>我不推荐通过借贷的方式来获得学位。去一个学费没那么贵的学校更好。学位只是一个学位而已，只要是来自一个授权的机构，基本上就可以服务于你需要用学位达成的大部分目的。</p>
<h3 id="">如果你已经有学士学位，有必要再回到校园，读一个计算机科学专业吗</h3>
<p>没有必要，既浪费钱又浪费时间！</p>
<p>如果你已经拥有学士学位——即便和科学、科技、工程、数学（non-STEM）无关——你已经获得大学能提供的大部分价值了。</p>
<h3 id="">那计算机科学的研究生学历呢</h3>
<p>这对职业进阶有助益，但你可以在已经有开发者工作经验之后再去申请。</p>
<p>许多雇主会支付员工继续教育的学费。</p>
<p>我技术领域的很多伙伴都参加了佐治亚理工学院的计算机科学研究生的课程。</p>
<p>佐治亚理工学院的计算机科学部不仅仅在全美数一数二，而且其研究生学位完全线上，费用也合理。</p>
<p>但我不鼓励你现在就去申请，先找一份开发者工作。（本书之后的章节会详细介绍）</p>
<h3 id="">未来学位还会这么重要吗</h3>
<p>是的，我认为学士学位会在未来几十年，甚至是几百年依旧保持重要的地位。</p>
<p>学士学位已经存在超过 1000 年了。</p>
<p>许多美国顶尖学校比美国历史还悠久。（哈佛有 400 年历史）</p>
<p>学士学位的消亡这一说法实属夸大。</p>
<p>一些圈子开始抨击大学，倡导学位无用论。</p>
<p>但如果你查看相关数据，会发现事实并非如此。学位和薪资息息相关。</p>
<p>同时，一个学位也可以帮助你获得更安全、稳定以及更有成就感的工作。</p>
<p>当然，你也可以通过做甲板工，为石油钻井服务赚得丰厚的收入。</p>
<p>但你也可以作为一个开发人员，在恒温的办公环境，通过维护服务器、修补代码库赚取同样丰厚的收入。</p>
<p>前者工作环境危险，对背部有损伤；而后者工作环境舒适，你可以从事 40 年</p>
<p>许多抨击大学的“意见领袖”本身从自己的大学学历获益。</p>
<p>我认为倡导“大学无用论”的其中一个理由是：很难将学习与获得地位提升联系起来。</p>
<p>大学只是阶级信号的一种形式吗——即富裕阶级将财富传承到下一代的一种方式？总体来说，在哈佛找到一位富家子弟比穷苦学子的概率要大 20 倍。</p>
<p>事实是：人生的本质就是不公平。但这并不改变劳动力市场的运行规律。</p>
<p>你可以选择简单模式，完成学位，并且在职业道路上获得更多机会。</p>
<p>或者是困难模式，省下一些时间和金钱，但是需要更谨慎地选择雇主。</p>
<p>我的许多朋友在获取成功的路上两种模式切换使用。</p>
<h3 id="">计算机科学学士学位包含哪些内容</h3>
<h3 id="">大学学历的替代品有哪些</h3>
<p>我已经在成人教育领域耕耘了二十多年，我看到了许多大学学历的替代品。</p>
<p>当然包含一些认证项目和集训班（bootcamp）。</p>
<p>雇主并不认可这些的含金量，而且它们很少要求严格。</p>
<p><em>旁注：当我说“认证项目”时，我指的是你参加一个课程，然后在最后获得一个认证。这些项目的价值有限。但是来自亚马逊和微软等公司的基于考试的认证是相当有价值的。我们将在后面更深入地讨论这些。</em></p>
<p>我常常告诉人们：到底去不去攻读学位，这是一个问题。</p>
<p>我遇到过很多没有学士学位的人，他们是汽车修理工、电工或从事其他行业的人。他们可以清楚地学会一套技能，应用它，并保住一份工作。</p>
<p>我遇到过很多没有学士学位的记账员、律师助理和其他“知识工作者”。他们可以清楚地学会一套技能，应用它，并保住一份工作。</p>
<p>这些人可以自学代码，使用免费的学习资源并与志同道合的人交流。</p>
<p>其中一些人的个人目标一直是回去完成他们的学士学位。这是攻读学位的一个很好的理由。</p>
<p>但不适用于每一个人。</p>
<p>如果你想要获得正规教育，你可以去攻读学士学位；如果你不想，别参与这些项目。自学就可以。</p>
<p>培训班和认证项目仅给你提供课程大纲和同侪压力。这并不赖，但值得你花上千美元吗？</p>
<h3 id="">如何自学代码</h3>
<p>大部分开发者都是自学的，即便是有计算机科学学士学位的程序员也在 Stack Overflow 的年度调查中宣称自己是“自学”。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/stack-overflow.jpeg" alt="大部分在职程序员认为自己的“自学的”（图片：Stack Overflow 2016 调查）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>大部分在职程序员认为自己的“自学的”（图片：Stack Overflow 2016 调查）</figcaption>
</figure>
<p>因为代码需要终生学习。不断有新的工具需要学习，新的过气代码需要重新规划，新的问题需要解决。</p>
<p>所以不论你是否接受了正规教育，你都要知道：你必须擅长自学。</p>
<h4 id="">“自学”开发意味着什么</h4>
<p>但当我提到自学时，我指的是自主学习——在正规教育之外学习。</p>
<p>很少有人在任何事情上都是真正“自学成才”的。例如，艾萨克·牛顿自学了微积分，因为当时没有微积分书籍。他必须边做边弄明白并发明它。</p>
<p>同样地，爱达·勒芙蕾丝自学了编程。因为在她之前，没有编程。她发明了它。</p>
<p>有人可能会告诉你：“你不是真正的自学，因为你是从书本或在线课程中学习的。所以你有老师。”它们是正确的，但只是在最狭义的意义上。</p>
<p>如果有人对你自称是自学成才提出异议，只需说：“按照你的标准，只要不是被狼养大的，就不能声称自己是自学成才的。”</p>
<p>将本书的这一部分指给他们看，并告诉他们 “Quincy 预料到了你的傲慢”，然后继续你的生活。</p>
<p>人生苦短，别浪费时间。</p>
<p>你就是自学成才的！</p>
<h4 id="">什么是自主学习</h4>
<p>作为自学者，你将整理自己的学习资源，选择从哪里学习什么。这就是“自主学习”的本质。</p>
<p>但是你怎么知道你学习正确的技能，并利用正确的资源呢？</p>
<p>社区就派上用场了。</p>
<p>世界上有各种学习者的社区，相互帮助提高技能。</p>
<p>社区是一个很难定义的词。Twitter Tech 话题是一个社区吗？ freeCodeCamp 论坛呢？还是许多专门针对特定代码技能的 Discord 组和 reddit 话题？</p>
<p>我认为这些都是社区。如果经常有人活跃，互相帮助，我就认为这是一个社区。</p>
<p>面对面的活动呢？奥克兰的 Ruby 开发人员月度聚会？纽约市创业社区聚会？德克萨斯州中部 Linux 用户组？</p>
<p>这些社区可以是在线的、面对面的，或者两者兼而有之。</p>
<p>我们将在“建立你的网络”一章中更多地谈及社区。但最大的收获是：你在这些社区中遇到的新朋友可以帮助你缩小选择范围，知道要学什么，要从哪些资源中学习。</p>
<h3 id="">我应该先学习什么编程语言</h3>
<p>简短的回答是：这并不重要。学好一门编程语言后，学习第二语言就容易多了。</p>
<p>有不同类型的编程语言，但今天大多数开发是使用“高级脚本语言”，如 JavaScript 和 Python。这些语言放弃了 C 语言等“低级编程语言”的效率，得到的回报是：更容易使用。</p>
<p>今天的计算机比 1970 年代和 80 年代快数十亿倍。那时人们用 C 等语言编写大部分程序。现在计算机速度足以弥补脚本语言的相对低效。</p>
<p>值得注意的是，JavaScript 和 Python 本身都是用 C 语言编写的，而且它们每年都在变得更快——这要归功于它们庞大的开源代码贡献者社区。</p>
<p>Python 是用于科学计算（数据科学和机器学习）的强大语言。</p>
<p>还有 JavaScript……好吧，JavaScript 无所不能。它是终极的瑞士军刀型编程语言。 JavaScript 是将万维网连接在一起的胶带。</p>
<blockquote>
<p>“任何可以用 JavaScript 编写的应用程序，最终都会用 JavaScript 编写。” – 阿特伍德定律 （Jeff Atwood, Stack Overflow 和 Discourse 创始人）</p>
</blockquote>
<p>你的整个职业生涯都可以使用JavaScript，并不需要学习第二门语言。（话是这么说，但是你之后可能会学习 Python，或者其他语言。）</p>
<p>所以我建议从 JavaScript 开始。它不仅比 Java 和 C++ 等语言更易于使用，而且更易于学习。对于懂 JavaScript 的人来说，工作机会要多得多。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/Find_Javascript_Jobs_with_great_pay_and_benefits_in_United_States___Indeed_com_--.png" alt="通过 Indeed 获得的职位搜索截图，我输入了 “javascript”，地区是美国，搜索结果为 68838 个工作”（图片：Stack Overflow 2016 调查）" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>通过 Indeed 获得的职位搜索截图，我输入了 “javascript”，地区是美国，搜索结果为 68838 个工作</figcaption>
</figure>
<p>其他需要你专注的技能是 <strong>HTML</strong> 和 <strong>CSS</strong>。如果网页是躯体，那么 HTML 就是骨架，而 CSS 则是皮肤。（Javascript 将会是肌肉——使得网页的运转及交互成为可能。）</p>
<p>你可以在一个下午就学些 HTML 和 CSS。但就像本书提到的其他工具一样，它们入门容易精通难。</p>
<p>对 <strong>Linux</strong> 的学习也不应错过。Linux 驱动着这个世界大多数的服务器，而且在你的职业生涯中，你也会在 Linux 命令行中运行大量命令。</p>
<p>如果你有一台 Mac 的话, MacOS 提供的终端工具，可以接受几乎所有与 Linux 相同的命令。（ MacOS 和 Linux 有一个共同的祖先，即 Unix ）。</p>
<p>但是如果你的电脑是 Windows 系统，你需要安装 WSL（Windows Subsystem for Linux）。安装后你就可以在电脑上运行 Linux 命令。如果你想更进一步，你甚至可以在同一台电脑上同时安装 Windows 和 Linux 两套操作系统。</p>
<p>如果想在电脑上安装 Linux，我推荐在最开始选择 Ubuntu ——一个最被广泛使用（并且文档完备）的 Linux 发行版。因此它应该是对新手最为友好的。</p>
<p>不要误会， Linux 比 Windows 和 MacOS 都更难以使用一些。但是你的努力将换得一个极其迅速、安全且高度可定制的操作系统。</p>
<p>而且，你再也不用为一个操作系统的许可而付费了。除非你想这么做。尽管 Red Hat 的软件都是开源的，但它仍是一家价值 10 亿美元的公司，这都源于其他企业愿意付费获得它的帮助及对 Linux 服务器的支持。</p>
<p>你还会想学习 <strong>Git</strong>。开发团队会使用这个版本控制系统进行代码更新上的协作。</p>
<p>你可能已经听说过 GitHub。GitHub 是个让开发者更容易进行开源项目协作的网站。它拓展了 Git 的一些特性。你将会在本书“如何建立你的声誉”一章中增进对 GitHub 的了解。</p>
<p>还有 <strong>SQL</strong> 以及关系型数据库如何运作。这些是信息经济中的主力军。</p>
<p>你可能还听说过 NoSQL 数据库（非关系型数据库，如图形数据库，文档数据库和键/值数据库。）你会在今后学习到更多。但最初请专注于 SQL。</p>
<p>最后，你还会希望了解<strong>网路服务器</strong>如何运作。Node.js 和 Express.js 会是一个好的起点。</p>
<p>当你听到“全栈开发”这个词的时候，它代表联结前端（HTML、CSS 和 JavaScript）与后端（Linux、SQL 数据库和 Node + Express）。</p>
<p>还有很多你希望学习的工具，例如 React、 NGINX、 Doker 和测试库。你可以在学习途中随心选择。</p>
<p>但你应该将 90% 的职前学习时间，用在以下的关键技能上：</p>
<ol>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
<li>Linux</li>
<li>Git</li>
<li>SQL</li>
<li>Node.js</li>
<li>Express.js</li>
</ol>
<p>学会了这些工具，你将有能力构建大多数主流的网页和手机应用。而且你也达到了大多数入门级开发工作的门槛。（当然，许多职位的描述中还会包括其他工具，但我们将在本书的后续部分进行探讨。）</p>
<p>现在你可能在想：真不错，但我要如何学习这些呢？</p>
<h3 id="">我在哪里可以学习编程</h3>
<p>好问题。这里有一个由经验丰富的软件工程师和教师设计的完整课程，它是为忙碌的成年人而设计，内容完全免费并且可以自由掌控学习进度。</p>
<p>是的，我说的就是 <a href="https://www.freecodecamp.org/learn">freeCodeCamp 核心课程</a>。它能帮助你学习：</p>
<ul>
<li>前端开发</li>
<li>后端开发</li>
<li>工程数学</li>
<li>科学计算（使用 Python 探索数据科学和机器学习）</li>
</ul>
<p>迄今为止，已有数千人完成了这一核心课程并获得了一份开发者工作。他们不需辞去日常的工作、贷款或冒任何风险，只需利用上他们的晚上和周末。</p>
<p>实际上，freeCodeCamp 已经成为大多数人自学编程的默认路径。</p>
<p>如果没有其他的资源，你可以将 freeCodeCamp 核心课程作为基本的学习资源，并从这里开始拓展。你可以学习大多数工作都需要的核心技能，也可以涉猎你感兴趣的技术。</p>
<p>有大量的书籍和课程可以供你学习数十年。有些可以在公共图书馆中找到，或通过每月订阅获取。（你或许也可以通过图书馆免费获得其中的一些订阅服务）。</p>
<p>此外，freeCodeCamp 目前拥有近 1000 门免费的完整课程，内容从 AWS 认证准备，到移动应用开发，再到 Kali Linux。</p>
<p>自学编程从未如此简单。</p>
<h3 id="">打磨你的技能是项终身事业</h3>
<p>我们已经探讨了为什么自学编程可能是最好的方式，以及如何去做。</p>
<p>我们也聊过了自学的替代方案，例如获得计算机科学的学士或硕士学位。</p>
<p>我们还讨论了你应该先重点专注于哪些具体的工具。</p>
<p>现在，让我们换换思路，关注下如何打造另一支柱：你的人际关系。</p>
<h2 id="chapter-2-how-to-build-your-network">第二章：如何拓展自己的人脉</h2>
<blockquote>
<p>“独行者速，众行者远。” – 非洲谚语</p>
</blockquote>
<p>人际关系网络这个词，你可能会感到畏惧。</p>
<p>人际关系网络可能会让人联想到尴尬的招聘会：身着闷热的西装，拼命把你的简历送到任何愿意接受它的人手中。</p>
<p>人际关系网络可能还会让人想到充斥着酒精的观看聚会，而你在要那里假装对一项从未关注过的运动充满兴趣。</p>
<p>人际关系网络可能还会让人想到在领英上向一个几乎不认识的人发送“生日快乐”，或者给他们的状态点赞，以希望他们能注意到你。</p>
<p>但是人际关系网络不需要总是这样。</p>
<p>在本章，我会分享自己在结识人们上学到的一切。我会向你展示如何获得他们的信任，并且如何让他们在寻求帮助时第一个想到你。</p>
<p>因为说到底，这就是人际关系网络的全部内容。帮助人们解决问题。做一个有益于他人的人。</p>
<p>我会向你展示如何建造一个强大的、可以在未来数十年内为你提供支持的人际关系网络。</p>
<h3 id="30">故事时间：一位老师如何在 30 岁时，在科技圈建立人际关系网络</h3>
<p><em>故事时间前情回顾：Quincy 通过阅读、观看免费在线课程和与开发者在当地的黑客空间共度时光，学习了一些编程知识。他刚刚完成了他的第一个项目，并作了首次技术演讲。</em></p>
<p>有了基础的编程技能，我对编程已初窥门径。</p>
<p>接下来要做什么呢？毕竟，我是个彻底的科技圈圈外人士。</p>
<p>虽然我是科技圈的新人，但却久经职场。近十年来，我通过学校工作和教英语谋生。</p>
<p>作为一名老师，我靠传授知识获取报酬。而作为开发者，我也可以靠写代码获得收入。</p>
<p>我已经知道了一个关于工作本质的重要真理：你认识谁决定一切。</p>
<p>我深知人际关系网络的能量。我了解机遇之路上总有个守门人。</p>
<p>在我和一份赚钱的开发者工作中，只隔着一个愿意说“对，这个叫 Quincy 的的人，似乎值得加入我们的团队”的招聘经理。</p>
<p>当然，作为一个科技圈门外汉，我并不了解他们的文化。</p>
<p>学院派的文化更加得正式。</p>
<p>你穿着正装。</p>
<p>用新奇的学院派术语来表明自己是这个群体的一员。</p>
<p>你想方设法在每次谈话中提及你去了 X 大学，或者你在 Y 教授手下做助教，抑或你在期刊 Z 上发布了文章。</p>
<p>职业发展是不同的。会议是不同的。权力结构是不同的。</p>
<p>而我并没有一开始就立即接受这个事实。</p>
<p>在最开始的几场科技活动中，我身着西装参加。</p>
<p>我在口袋中一直放着折叠整齐的简历副本。</p>
<p>我甚至带了名片。我订购了阳极氧化铝片，用激光刻上我的名字、邮箱、甚至包括传奇教育家约翰·杜威的一句话：</p>
<blockquote>
<p>“任何开始思考的人，都将世界的某一部分置于危险中。” —— 约翰·杜威</p>
</blockquote>
<p>这至今仍然是我最喜欢的一句话。</p>
<p>但说回惨淡的现实。</p>
<p>“Hi，我是 Quincy。这是我的红色铝制名片。先说声抱歉，它在你回家的航班上，可能会触发金属探测仪。”</p>
<p>我当时有些用力过猛。而我所交谈的每个人都可能痛苦地发现了这一点。</p>
<p>我在 Meetup.com 上，报名了每一个我能找到的开发者活动。圣巴巴拉是一个小地方，但是靠近洛杉矶。所以我也开车参加洛杉矶的活动。</p>
<p>我很快学聪明了，将我的西装换成了牛仔裤和卫衣。我还注意到了没有人会送出名片。所以我也不再携带名片。</p>
<p>从在黑客空间中遇到的开发者的那里，我得到了提示：怀有激情，但不张扬。保留一些你的热情。</p>
<p>我还阅读了一些书以更好地理解开发者文化。</p>
<p><a href="https://www.amazon.com/Coders-Work-Reflections-Craft-Programming/dp/B092R8RQM3?crid=13BTAQ7TH9YSN&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=32d14a148c54f36f5ef701578a2abd8e&amp;language=en_US&amp;ref_=as_li_ss_tl">《编程人生》</a> 是本来自于 1980 年代的好书。</p>
<p><a href="https://www.amazon.com/Hackers-Computer-Revolution-Steven-Levy/dp/1449388396?&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=0c216f2cd4cc2d2090b8c9b50b0befee&amp;language=en_US&amp;ref_=as_li_ss_tl">《黑客：计算机革命的英雄》</a> 是本来自 1990 年代的好书。</p>
<p>对于更现代的文化资源，可以关注下<a href="https://www.amazon.com/Mr-Robot-Complete-Rami-Malek/dp/B0833WXXL6?crid=188UUOE6ZT0W3&amp;keywords=mr+robot&amp;qid=1673746625&amp;sprefix=mr+robot%2Caps%2C111&amp;sr=8-6&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=a896ab7630fadc332c2696d3a4b8e85d&amp;language=en_US&amp;ref_=as_li_ss_tl">《黑客军团》</a>这部剧集。剧中的角色有些极端，但是它很好地表现了许多开发者的心态和举止。</p>
<p>很快，我的谈吐更像一位开发者，而不是教师。我不再尴尬地冒进。</p>
<p>我每周都会参加几次本地与科技有关的活动。我最喜欢的活动甚至不是开发者活动，而是圣巴巴拉创业之夜。开发者们会在这个几周举办一次的活动中，介绍他们的产品原型。一些进行代码演示的开发者甚至可以从天使投资人——投资早期公司的有钱人——处获得资金。</p>
<p>组织这个活动的人叫 Mike。他一定认识很多圣巴巴拉的开发者和企业家。</p>
<p>当我终于鼓起勇气向 Mike 介绍自己时，我就崇拜他了。他是个超级马拉松运动员，静息心率在 40 以下。有着完美修剪的头发和胡子。对我而言，他是这个星球上最酷的人了。他总是举止得体，彬彬有礼。</p>
<p>Mike 完全不是一个技术型的人。他的工作是产品经理。他虽然在科技和用户体验设计上了解很多，但却完全不知道如何写代码。</p>
<p>有时，开发者们会忽视非技术型的人。他们会说：“他只是个商人”或“她只是个甩手掌柜”。但是我从没听到有谁这样谈论 Mike，他赢得了所有人的尊重。</p>
<p>我特意观察了 Mike 与其他开发者打交道方式。毕竟，只写了几个月代码的我，也不能完全摆脱“非技术型”这个标签。</p>
<p>我的旧习惯时常显露。我总有炫耀自己所学和所做的冲动。</p>
<p>很多开发者对他们的技能和成就保持谦逊。他们会说：“我对 Python 有所涉猎。“而缺乏安全感的我，则大放厥词：“我用 Python 写了许多算法。我做梦都在写 Python。”</p>
<p>后来，当我回家谷歌了那位开发者的姓名，才了解到他是主流 Python 库的核心贡献者。我羞愧不已。</p>
<p>我很快学会了不要吹嘘自己的成就或技能。你正在谈话的人很可能比你更懂编程。只是他们中的大多数不会主动说出这个事实。</p>
<p>再没有比自信地打开笔记本电脑炫耀代码，但别人抛出了一堆你完全没有准备好回答的问题更糟糕的事情了。</p>
<p>参加活动的前几个月对我而言是趟谦逊之旅。但是这些活动也让我有动力继续打磨我的技能。</p>
<p>不久，南加州附近的人都开始注意到我。他们会说：“我总在这些活动中遇到你。你叫什么来着？”。</p>
<p>有天晚上，一个开发者说：“让我们在推特上加个好友吧。”。我当时认为推特只是一个噱头性网站，几天前才勉勉强强建立了一个推特账户。你能用区区 140 个字符真正表达什么呢？我基本不发推。但是我确实已经有了一个推特账户，所以她加了我。</p>
<p>这鼓舞我投入更多时间，去塑造自己的网络形象。我弱化了自己领英页面的正式性，提升了友善度。我研究社区中的其他开发者如何在网络上展示自己。</p>
<p>在几个月内，我结识了众多领域中的人：</p>
<ul>
<li>经验丰富的开发者</li>
<li>非技术型或半技术型、在科技公司工作的人</li>
<li>招聘经理和招聘人员</li>
<li>以及最重要的，和我一样处在职业生涯中期，想要转入科技行业的同伴</li>
</ul>
<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>但你无需时间机器去做这件事。你已经有了一个人际关系网络。它可能比你想要的要小很多，但是你确实<strong>已经</strong>认识了一些人。</p>
<p>他们可能是你家乡的朋友，或你父母的同事。任何一个你过去相识的人都可能为你提供帮助，即使只是微不足道的帮助。</p>
<p>因此，第一步是对你认识的人进行全面梳理。请不要担心，我并不是要你现在就去接触任何人，也不是要对你的人际关系征税。</p>
<p>三思而后行，先制定一个行动计划。</p>
<p>首先，让我们一起来列出所有你认识的人。</p>
<h3 id="">如何打造个人关系网看板</h3>
<p>从创建一个熟人清单开始。</p>
<p>你可以使用电子表格，也可以像销售人员那样使用客户关系管理工具（CRM）来做这件事。但就我们这里要做的事情而言，它们可能有点大材小用了。</p>
<p>我推荐使用像 Trello 这样的看板工具，它是免费的。</p>
<p>你将创建五大列：“待评估”、“待联系”、“待回复”、“最近联系”、“暂不联系”。</p>
<p>然后创建标签，这样你就可以根据你对他们的了解程度对他们进行分类了。这里有一些可供你参考的标签想法："儿时好友"、"家庭的朋友"、"前同事"、"同学"、"参加技术活动认识的朋友"。</p>
<p>现在你可以开始创建卡片了。每张卡片可以只有他们的名字，如果你有时间的话，可以在卡片上添加一张照片。</p>
<p>这是我创建的 Trello 看板，你可以从中得知个人关系网看板可能是什么样子的。我使用了我最喜欢的童年电影（1989 年的经典电影《忍者神龟》）中的人物。</p>
<figure><img src="https://www.freecodecamp.org/news/content/images/2023/01/Personal_Network_Board___Trello_--.png" width="600" height="400" alt="Personal_Network_Board___Trello_--" loading="lazy"><figcaption>我的个人关系网看板：副业中一起打击犯罪的朋友们</figcaption></figure>
<p>你可以开始从你的社交媒体帐号，甚至你老旧的毕业纪念册（如果你有的话）添加联系人。</p>
<p>他们中的许多人不会再有任何帮助。但为了全面起见，我建议你依然添加他们。你永远不知道什么时候你会想起："噢……某某在 XYZ 公司得到了一份工作，我应该与他们联系。"</p>
<p>这个过程可能要花一两天的时间。但要知道，这是一项投资。这个看板能够在你的职业生涯中为你所用。</p>
<p>你可能会认为“我不需要这样做，我已经有一个领英账户了”。这或许能行得通，但是领英又大又杂。但你想在这里让信号最大化，让噪音最小化。这也是我鼓励你创建这个专门的个人关系网看板的原因。</p>
<p>在你把人添加到你的看板的同时，还可以给他们贴上标签。花点时间来研究看板中的每一个人。他们这些天都在忙什么？他们有工作吗？还是在开公司？</p>
<p>当你发现了和他们有关的事情，可以在每张卡片上添加笔记。他们最近是否参加了跑步 5 公里的募捐活动？他们的祖母最近是否庆祝了九十大寿？这些信息看起来可能不相关，但如果某个人在社交媒体上分享这些事情，那就说明这些事情对他们来说很重要。</p>
<p>努力对人们产生兴趣。发现他们的日常生活，发现他们的抱负。通过了解他们的动机和目标，你将更深入地洞察到你如何才能帮到他们。</p>
<p>正如我之前所说，缔结盟友的最佳方式是帮助他人。我们将在稍后详细讨论这个问题。</p>
<p>对于你添加到个人关系网看板中的每个人，逐一思考他们是否值得联系，然后把他们放入“待联系”或“暂不联系”中。</p>
<p>你可能想知道：为什么这一列叫 “暂不联系”？因为你永远不知道认识的某个人在何时会帮上忙。永远不要把任何友谊或熟人关系视为理所当然。</p>
<p>在你填满看板，给每个人贴上标签，并将他们分门别类之后，就可以开始联系了。</p>
<h3 id="">如何为关系网延伸做准备</h3>
<p>在联系并试图给人留下印象时，请牢记：简单为上，不要啰嗦。</p>
<p>大家都很忙，他们并不能记住太多和你有关的事情。如果你想完全讲清楚自己是谁，最好方法是写一份个人简历。</p>
<h4 id="">如何在社交媒体写个人简历</h4>
<p>你希望自己的信息在你所有的社交媒体账户中都是一致的。</p>
<p>以下是我的自我介绍：</p>
<p>“我叫 Quincy，是 freeCodeCamp 的一名老师，住在德克萨斯州的达拉斯。我可以帮助你学习编程。”</p>
<p>去写你自己的简历吧。看看你能否把它压缩到 100 个字甚至更少。尽量避免使用花哨的词语或专业术语。</p>
<p>把你的身份提炼成几个字可能很难，但这是一个很重要的过程。</p>
<p>记住：人们很忙，他们并不需要知道你的生活往事。随着你对他们的了解的深入，你可以慢慢地说出更多和你有关的细节。随着时间的推移，他们也会在问你问题的同时更好地了解你。</p>
<p>好了，记得准备好一张带有你的笑脸的照片。</p>
<h4 id="">如何制作社交媒体头像</h4>
<p>如果你有钱，直接去找一个当地的摄影师，付钱让他们给你拍一些专业的头像。</p>
<p>或许你有一个从事摄影的朋友，他可以免费为你拍照。</p>
<p>我自己使用预装在 MacOS 上的 Photobooth 拍了头像。我的朋友在 Photoshop 中花了大约 10 分钟修正了一些背景和阴影。他可能使我的牙齿看起来要略微白了一点。下面是我的头像：</p>
<figure><img src="https://www.freecodecamp.org/news/content/images/2023/01/Michael_Headshot_B_W_Full_heic.png" width="600" height="400" alt="Michael_Headshot_B_W_Full_heic" loading="lazy"><figcaption>我的头像：我在任何地方都使用这张照片</figcaption></figure>
<p>一定要用你的眼睛微笑，这样你才不会看起来像个机器人。或者更好一点，想一些非常有趣的事情，我就是这样做的。然后，你的笑容就会显得很真诚。</p>
<p>从不同的角度拍很多照片，然后使用最好看的那一张。</p>
<p>我建议你使用一张看起来和你的日常生活贴近的始终如一头像。不要使用试图将你的吸引力最大化的经过大量修改的照片。你希望人们能够在活动中通过你的照片认出你。而且，你不想让美颜吓到别人，你想让他们感到安心。</p>
<p>说到让人安心：不要戴墨镜，也不要努力地看起来很酷。你要看起来友好、平易近人。在这方面，有的一个很好的带有讽刺意味的测试：看看你的照片。如果你迷路了，你在街上看到这个人，你会有勇气向他们问路吗？</p>
<p>选好了头像之后，就在所有的地方使用同一张照片。把它放在你所有的社交媒体账户上。</p>
<p>在你的个人网站上使用它，甚至你还可以<a href="https://www.freecodecamp.org/news/gmail-profile-picture/">将个人照片添加到你的电子邮件帐户</a>。</p>
<p>我建议常年来使用同一张照片。每次你改变它，都会冒着有些人不会立即认出你的风险。即使是灯光、角度或背景的细微变化，也会使人们失去熟悉感。</p>
<p>一定要保留一张高清版本的照片。这样，当你在别人的会议上的演讲，或他们的播客中的客串的时候，他们就可以用这张照片来宣传了。（别担心，假以时日，你能做到的）。</p>
<h3 id="">如何与过去的人联系</h3>
<p>现在简历和照片都已就绪，你已经做好与人交谈的准备了。</p>
<p>15 年前，我会说你应该给人们打电话，而不是给他们发消息。但随着智能手机的出现，相关文化已经发生了很大的变化。大多数人都不会很好地回应电话了。</p>
<p>同样，我也不建议在谈话接近尾声的时候才邀请别人去喝咖啡或吃午餐。人们很忙，可能会觉得这个请求有些尴尬。</p>
<p>你需要直奔主题，越快越好。</p>
<p>那么，你需要奔入的主题是什么呢？</p>
<p>本质上如下：</p>
<ol>
<li>我知道你</li>
<li>我喜欢你</li>
<li>我敬佩你的做的事情</li>
</ol>
<p>就是这样。</p>
<p>人们喜欢被了解，喜欢被人喜欢，喜欢自己做的事情和生活受到关注。</p>
<p>我们以往认识的人们都会在生日当天得到认可。在过去，人们可能会通过短信、社交媒体，甚至打电话的方式祝我们生日快乐。</p>
<p>但一年中的其它 364 天呢？人们也喜欢在这些日子里得到认可。</p>
<p>哈哈，这里有一个认可别人的简单方法。</p>
<p>第 1 步：研究这个人。在谷歌上搜索他们，阅读他们最近发布在社交媒体上的内容，阅读他们的领英账户。如果他们发布了家庭照片，更要多花点时间看一下。</p>
<p>第 2 步：想一想你可以说点什么，从而让他们的一天变得更加美好。</p>
<p>第 3 步：选择一个他们最近比较活跃的社交媒体平台，直接给他们发一条信息。</p>
<p>我将分享一个模板，但永远不要逐字逐句地使用任何模板，因为如果收件人将你的信息键入谷歌中进行搜索，他们会发现这是一个模板，而你所有的良苦用心都会白费。</p>
<p>如果我突然给一个几个月或几年没有联系过的人发信息，我会说这样的话:</p>
<p>“嘿，[姓名]，我希望你的[新的一年/春天/一周]有一个有趣的开始。祝贺你[获得新工作/晋升/迎来宝宝/完成项目]。你做这些事情令人深受鼓舞。”</p>
<p>像这样简短而有针对性的东西。问候+祝贺+赞美。这就是基本公式。</p>
<p>不要只是说说，而是真的让人感受到。</p>
<p>真的想让这个人感到被认可。真的想照亮他们的一天。真的想鼓励他们继续向他们的目标迈进。</p>
<p>人类非常善于察觉不诚恳。不要试图过度推销。不要给他们任何理由去想“这个人想从我这里得到什么”。</p>
<p>这就是为什么这方面最重要的事情是：要简短。要尊重人们的时间。没有人想要一封长信，他们会觉得有义务对其进行长时间的回应。</p>
<p>因为，跟我说一遍，<strong>人们很忙</strong>。</p>
<h3 id="">如何建立更深入的联系</h3>
<p>因为人们是如此忙碌，他们往往会因为这些陌生人能为他们做什么而更多地看到陌生人：</p>
<ul>
<li>这个人开着巴士送我去上班。</li>
<li>这个人按照我喜欢的方式给我做饮料。</li>
<li>人力资源部门的这个人回答我关于休假的问题。</li>
<li>这个人为我准备了一份 acid 爵士乐的播放列表，让我在写代码时听。</li>
<li>这个人每周都会给我发送有用的电子邮件，提供免费的编程资源。</li>
</ul>
<p>你为人们做什么，体现出你是怎样的人。</p>
<p>我知道，我知道。这听起来可能过于简化，甚至愤世嫉俗，你在生活中绝对不会这样对待亲密的朋友和家人。</p>
<p>但是对于那些几乎不认识你的人--他们只是在日常工作中遇到你--这可能是他们了解你的方式。</p>
<p>你必须给人们一个关心你的理由。你必须激励他们更多地了解你。</p>
<p>在你能成为某人的亲密朋友——他们真正关心的人，并且在你不在的时候他们会想你——之前，你需要从一个对他们有帮助的人开始。</p>
<p>而这正是我们在这里要做的。我们要通过提供帮助来建立更深的关系。</p>
<p>这将是一个漫长的过程。而且你应该在找工作之前提前开始。你最不希望看到的是，有人认为“哦，你只是因为需要我的东西才联系我”。</p>
<p>恰恰相反，你联系他们是因为你有东西可以提供给他们。</p>
<p>毕竟，你拥有一个人可以获得的最强大的技能之一。使机器服从你的意志的能力。你是一个程序员。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://atariage.com/2600/carts/c_BasicProgramming_Picture_front.jpg" alt="这就是擅长编码的感觉" class="kg-image" width="400" height="483" loading="lazy">
    <figcaption>这就是擅长编码的感觉</figcaption>
</figure>
<p>或者，至少，你正在成为一个程序员。</p>
<p>所以你已经有了一个很好的理由去接触人们。</p>
<p>你可能听说过<strong>陌生电话（cold call）</strong> 这个词。这就是你在对某人几乎一无所知的情况下给他打电话，并试图向他们推销东西。这并不容易，绝大部分的冷电话都以对方挂断而告终。</p>
<p>但是，你对对方了解的信息越多，电话就越温暖，你就越有可能成功。</p>
<p>现在，你在这里不是在卖东西。正如我前面提到的，你也不是在给他们打电话。你是在给他们发送一条直接信息。</p>
<p>也许这是通过 Twitter、LinkedIn、Discord、Reddit,任何地方，但你是用一段文字跟他们联络。</p>
<p>正如我所说，最有力的开场白，最有可能得到回应的方法，是随意地提供帮助。</p>
<p>如果我在做这件事，这里有一个我将使用的简单模板。记住不要逐字逐句地使用这个模板。用你对朋友说的语气重写它：</p>
<blockquote>
<p>“嘿[姓名]，祝贺你[新工作/晋升/新生儿]。我一直在学习一些编程，并正在建立我的作品集。我立刻想到了你，你是一个能完成很多事情的人。有没有什么工具或应用程序可以让你的生活更轻松？我也许可以为你编码，作为我的练习。”</p>
</blockquote>
<p>这是一个强有力的方法，因为它是个性化的，不会让人觉得是自动生成的。如今，人们收到如此多的自动信息，以至于他们很快就会无视任何甚至类似于自动信息的东西。</p>
<p>这就是为什么我手动发送我所有的信息，而不依赖自动化。慢慢地逐一编写信息比试图用脚本或邮件合并来节省时间更好。</p>
<p>最快的被屏蔽的方法是给别人发消息说 <code>嗨，你好吗？</code> 其中明显少了一个名字，证明这个消息是一个模板。</p>
<p>有时我收到的信息用我的姓而不是我的名，<code>嘿，拉森。</code> 什么，我现在是在军事学校吗？</p>
<p>而且，LinkedIn 上的很多人已经开始在他们名字的开头加上一个表情符号。这使得检测自动信息变得很容易，因为没有人会在他们的直接信息中包括这个表情符号。</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>“你在帮助我？你在为我创建这个应用程序？”这将会打动人，他们将有可能记住它，即使这个应用程序本身没有任何进展。</p>
<p>从那里开始，你可以随着谈话的流程走。也许它消失了。不用担心。随它去吧。你可以在几周后找到一个理由来继续对话。</p>
<p>这些社交媒体直接信息的好处是整个信息记录都在那里。下次你给他们发信息时，他们可以直接滚动并看到“哦，这是那个提议为我建立应用程序的人”。而不是你在面对面的谈话中可能遇到的“你是谁来着？”的疑问。</p>
<p>再次重申，保持一切自然和昂扬。如果感觉谈话进行得很慢，那没问题。因为你将进行许多其他对话。保持热度，你将成为一只忙碌的蜜蜂，建立你的人际联系。</p>
<h3 id="">如何认识新朋友并扩大你的人际网络</h3>
<p>我们已经谈到了如何与你已经认识的人联系。这些联系仍然存在，即使它们多年来已经有点弱了。</p>
<p>但你如何建立全新的联系？</p>
<p>这不是一件容易的事。但我有一些建议，可以使这个过程不那么令人生畏。</p>
<p>首先，第一次与人见面，比在网上见面要有效的多。</p>
<p>当你见到某人的时候，你的记忆有更多的信息可以获取：</p>
<ul>
<li>这个人的长相，他们的姿势，以及他们如何在空间中移动</li>
<li>他们的声音和他们说话的方式</li>
<li>场地的灯光、声音、香气、温度和总体感觉</li>
<li>还有许多其他的小细节，这些都会在你的记忆中留下烙印</li>
</ul>
<p>与一个人当面交谈 10 分钟，比来回几十条信息，跨越几周的通信建立更深的联系。</p>
<p>这就是为什么我强烈建议：走出去，在当地的活动中认识人们。</p>
<h3 id="">如何在城市周边的当地活动中结识朋友</h3>
<p>哪些活动？如果你住在一个人口稠密的城市，你可能有大量的选择供你支配。你可能每周都能去参加几个晚上的科技活动，而且通勤时间最少。</p>
<p>如果你住在一个小镇上，你可能不得不坚持在当地的聚会上认识人，比如书展、冰激凌社交活动、体育赛事。</p>
<p>如果你去教堂、清真寺或寺庙，也要认识那里的人。</p>
<p>是的，我知道这可能听起来很荒谬，“在足球比赛中站在我旁边看台的那个人？他们会以某种方式帮助我找到一份开发者的工作？”</p>
<p>也许吧，也许不是，但不要把人撇开。</p>
<p>那个人可能经营一个小企业。</p>
<p>他们可能和一个在财富 500 强公司担任工程副总裁的朋友一起上学。</p>
<p>也许他们也是一名软件工程师。毕竟，我们有数以百万计的软件工程师在那里。而且我们并不都住在硅谷。😉</p>
<p>当你遇到一个新的人时，你不想立即掏出你的手机，说 <code>我可以把你加入我的 LinkedIn 的联系人吗？</code></p>
<p>相反，你要表现得冷静，介绍一下自己。</p>
<p><strong>记住他们的名字。</strong> 名字是建立关系不可或缺的。如果你不善于记名字，就练习记住它们。你可以在看电视节目或电影时，试着记住每个角色的名字，不管他们是不是大明星，通过这种方式练习。</p>
<p>如果你忘记某人的名字，不要猜测。只要说 <code>可以再问一下你的名字吗</code>，第二次一定要记住它。</p>
<p>与他们握手或碰拳，与他们谈论任何感觉自然的话题。如果谈话结束了，不用担心。随它去吧。</p>
<p>你随着时间的推移建立关系。这不是指与某人相处的总时间，而是指你在较长的时间跨度内与该人见面的次数。</p>
<p>很有可能你会在未来再次见到这个人。也许几周后，在同一个确切的地点。而就是你采取行动的时候：</p>
<p><code>你好[姓名]，[你们上次谈的事情]进展如何？</code></p>
<p>从中断处继续对话。 如果他们看起来像是对你的个人社交关系板（Personal Network Board）有帮助的人，请问他们 <code>嘿，你接下来[星期几]在做什么？你想和我一起去[其他即将举行的本地活动]吗？”</code></p>
<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>不断散发正能量，不断使用你的技能甚至是你自己的人际关系网络来帮助人们。（在你认识的两个人之间进行礼貌的介绍很少是一个坏举动。）</p>
<p>做一个善良、体贴、乐于助人的人。</p>
<p>永远不要对求职过程的缓慢感到不耐烦。</p>
<p>永远不要让自己感到被轻视或冷落。</p>
<p>永远不要让自己嫉妒别人的成功。</p>
<p>有因就有果。有一天你会收获你所播种的东西。如果你播种的是正能量，你就为自己的丰收做了准备。</p>
<h2 id="chapter-3-how-to-build-your-reputation">第三章：如何提升自己的圈内名声</h2>
<blockquote>
<p>“获得良好声誉的方法是努力成为你希望呈现的样子。” - 苏格拉底</p>
</blockquote>
<p>现在你已经开始建立你的技能和你的人际网络，你已经准备好开始建立你的声誉。</p>
<p>你可能从零开始，一个完全的技术新人。或者你可能已经有了一些信誉，你可以从你的其他工作中带来。</p>
<p>在本章中，我将分享如何在同行中建立良好声誉的实用技巧。这将是获得自由职业者客户、第一份工作以及在事业上取得进展的关键。</p>
<p>但首先，我是如何建立我的声誉的。</p>
<h3 id="30">故事时间：一位 30 多岁的教师是如何建立起开发者的声誉的</h3>
<p><em>故事时间前情回顾：Quincy 开始建立他的网络，包括开发人员、企业家和科技界的招聘经理。他经常参加城市周围的黑客空间和科技活动。但他还没有爬上竞技场，测试自己的实力……。</em></p>
<p>当我终于鼓起勇气去参加我的第一次黑客马拉松时，我的编码之旅已经有几个月了。</p>
<p>有一天，我遇到了一个特别讨厌的错误，我不知道如何解决它。所以我做了很多人在这种情况下会做的事情。我通过浏览网页来拖延时间。这时我看到了它。创业周末（Startup Weekend EDU）。</p>
<p>创业周末是一个长达 54 小时的比赛，包括建立一个应用程序，然后将其提交给评审团。这些活动也奖励你的编码、设计和创业知识。</p>
<p>这个特别的活动--在硅谷的中心地带举行，有一个由教育家和教育企业家组成的评审团。由于我有成人教育的背景，这似乎是我第一次参加黑客马拉松的理想选择。</p>
<p>我把这个活动告诉了史蒂夫。然后我说出了那句神奇的话，“由我来开车”。这很好，因为史蒂夫没有驾驶执照。</p>
<p>有了史蒂夫的加入，我们与来自圣巴巴拉黑客空间的几个开发人员组成了我们的团队。</p>
<p>我花了几周时间准备这次活动，研究评委和他们工作的公司。我研究了赞助商。当然，我还像少林寺的和尚一样练习编码。</p>
<p>终于，经过一个月的准备，迎来了大周末。 我们挤进我的 2005 年丰田卡罗拉，车上的透明涂层已经剥落，放上一些充满活力的音乐，开始了我们 5 小时的车程。</p>
<p>在路上，我们讨论了我们应该建造什么。当然，它将是以教育为重点的。最好是满足高中生的需求，因为这些是评审人员的公司所关注的年级。</p>
<p>但这个应用程序应该做什么？它将如何使人们的生活更轻松？</p>
<p>我回想了一下我自己在高中的时候。我没有什么可说的，因为我只上了一年就退学了。（我确实设法学习并通过了普通教育证书，我们称之为“普通教育发展证书 Good Enough Degree”，同时在 Taco Bell 工作，最后才上了大学）。</p>
<p>但我确实记得高中时的一个痛点，在这么多年后仍然响起。英语论文。</p>
<p>现在我喜欢写作。但我不喜欢用 MLA 格式写作，因为它有严格的引用规则。我曾经害怕准备文献引用页。我的老师总是会因为我的引文格式不正确而扣我的分。</p>
<p>在听了车上其他乘客的很多好主意后，我开始说了。 我说：“我有个主意。我们应该编写一个应用程序，为你创建引文。”</p>
<p>而有人笑着说：“Out of sight”</p>
<p>史蒂夫说，“嘿，这是个好名字。我们可以用 <code>C</code> 称它为 <code>Out of Cite</code>。</p>
<p>我们都笑了起来，觉得自己很聪明。然后我们开始讨论实施细节。</p>
<p>当我们到达会场时，那里有大约 100 名其他开发人员。那是一个开放式的办公空间，低矮的隔间两边是白板。</p>
<p>我听到了关于其中一个开发者的窃窃私语，“嘿，是那个去年赢得比赛的家伙。”我听到人们说。他们向一个被粉丝包围的、看起来很自负的开发者打手势，“也许他会让我加入他的团队。”</p>
<p>活动开始时，大家纷纷发表意见。任何人都可以走到房间前面，拿起麦克风，为他们想要建立的应用程序做 60 秒的演讲。</p>
<p>我太紧张了，感觉就像一个外星人要从我的胸膛里冲出来。 所以很自然地，我排在第一位。 撕掉创可贴，对吧？</p>
<p>我满头大汗，疯狂地打着手势，飞快地完成我的演讲。我说了这样一段话“引文很糟糕。我的意思是，它们并不糟糕。它们是必要的。你需要把它们添加到你的论文中。但准备引文的工作很糟糕。让我们建立一个应用程序，为你填写你的工作引文页。谁支持我？”</p>
<p>房间里很安静。然后人们意识到我已经讲完了，他们按照惯例给了我掌声。主持人从我手中拿过麦克风，把它交给下一个人，而我昂首阔步回到我的座位。</p>
<p>演说结束后，就到了组队的时间。我们的圣巴巴拉小分队互相看了看，说“我想我们是一个团队”。</p>
<p>我们弄清了 WIFI 密码，抢到了最合适的工作场所：一个角落里的办公室，有一扇可以真正关闭的门。</p>
<p>我开始在白板上写下 UI 模型。我说：“我们想要的东西总是一击即中。就在你的浏览器的菜单栏里。”</p>
<p>“像一个浏览器插件”，史蒂夫说。</p>
<p>“是的，让我们建立一个浏览器扩展。”</p>
<p>我向他们展示了论文可能需要的三种格式的例子，MLA、APA 和 Chicago。</p>
<p>“我们能不能同时生成这三种格式，让他们可以直接复制粘贴？”我问道。</p>
<p>“我们可以做得更好”，史蒂夫说，“我们可以为他们每个人设置一个按钮，把引文直接放到他们的剪贴板中。”</p>
<p>我们工作得很快，在星期五晚上结束时创造了一个简单的 MVP（最小可行产品）。它所做的只是抓取当前网站的元数据，并将其结构化为一个引文。但它成功了。</p>
<p>由于这是我第一次参加黑客马拉松，我不想承受住在旅馆里的压力。所以我花钱买了一个酒店房间。我们有两张单人床，所以每天晚上我们都会轮流睡在地板上。</p>
<p>星期六早上，我们的野心越来越大。我走到白板前，对团队说，“引用网站是伟大的，所有的。但学生们引用的很多东西都是在书本或学术论文中。我们也需要能够为这些东西生成引文。”</p>
<p>我们找到了一个 API，我们可以用它来获取基于 ISBN（用于书籍的序列号）的引文信息。我们还写了一个脚本，可以根据 DOI（用于学术论文的序列号）搜索学术论文，然后从结果页中 爬取数据。</p>
<p>到了星期六晚上，我们的浏览器扩展的代码终于完成了。于是我坐下来，开始准备演示幻灯片。我把很多最后的编码工作留给了我的队友，而我则反复排练了几个小时的演讲。</p>
<p>尽管轮到我在床上睡觉，但由于紧张，我几乎无法闭目养神。我在这里，就在科技生态系统的中心。硅谷。</p>
<p>作为一名教师，我经常在我的同行面前发表演讲，有时是几十个人，但这是不同的。</p>
<p>我将向一屋子雄心勃勃的开发者还有评委发表演讲，还有拥有博士学位的人，其中一些人已经创办了自己的科技公司。他们将对我们的工作进行评估。我很害怕自己会以某种方式搞砸。</p>
<p>由于无法入睡，我打开了我的电子邮件。创业周末的工作人员发出了一封电子邮件，其中包括一本书的 PDF。这是一本非官方的科技创业经典<a href="https://www.amazon.com/Four-Steps-Epiphany-Successful-Strategies/dp/1119690358?_encoding=UTF8&amp;qid=&amp;sr=&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=662e9d222ccd9aa050d3ad29438e74e3&amp;language=en_US&amp;ref_=as_li_ss_tl">顿悟的 4 个步骤</a> 和<a href="https://www.amazon.com/The-Lean-Startup-Eric-Ries-audiobook/dp/B005MM7HY8?_encoding=UTF8&amp;qid=&amp;sr=&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=13b3c19bdbda93658336cf7c69e27100&amp;language=en_US&amp;ref_=as_li_ss_tl">精益创业</a> 的混搭。</p>
<p>现在，我已经读过这些书，因为它们是 2010 年代初期想要构建软件产品的任何人的必读书籍。但我还阅读了数十本其他创业书籍。他们的很多见解都汇集在一起，形成了一堆建议。</p>
<p>凌晨 4 点，我无法入睡，于是我开始阅读。这些书真正触及的一件事是构建人们愿意支付的东西。客户验证的最终形式。</p>
<p>就在那时我意识到：你知道什么能真正推动我的演讲越过终点线吗？产品市场契合度的证明。证明我们正在构建的应用程序解决了人们遇到的实际问题。真的能解决，以至于他们会打开钱包。</p>
<p>这启发了我。我应该带着我们的应用程序到路上去，把它推销给人们。</p>
<p>那是星期天早上。我该去哪里寻找我的潜在客户呢？好吧，我们的酒店正好位于斯坦福大学主校区附近。</p>
<p>我开车带着我的团队去了活动地点并且挥手告别说：“等从客户那里拿到了实实在在的现金，我就回来的。”</p>
<p>我的队友笑了。我不确定他们是否觉得我是认真的。他们说：“那你不要迟到啊。”</p>
<p>但我是认真的。我在笔记本电脑上运行了一个应用程序的范例，在GPS中输入斯坦福，然后开始了我的任务。</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>
<p>“好吧，来看看这个。”我像个毒贩子一样拉开夹克衫，然后掏出我那 200 美元的笔记本电脑。当我发表了那尴尬的推销词时，他迁就了我一会儿。</p>
<p>我说：“看这里，我有一个浏览器插件。我去任何网站，仅需点击这个按钮，它就会为我创建一个引用。”</p>
<p>这个孩子挑起眉毛。“它能做 MLA 吗？”</p>
<p>我强忍着兴奋说：“MLA、APA，甚至 Chicago 都可以。请看。”我点击了按钮，并且出现了三个引用-每个都有自己的复制按钮。</p>
<p>那个孩子点了点头，似乎很感兴趣。因此我试图尽快完成交易。</p>
<p>“如果我告诉你，我打算将这个应用程序按年订阅。但是如果你现在注册，你就能无限制使用，不仅是一年，而是永久。”</p>
<p>那个孩子思考了一会儿。</p>
<p>据说，沉默是销售最好的朋友。因此我坐在那里很长时间，完全沉默地盯着他。</p>
<p>最后他说：“很酷，我加入了。”</p>
<p>“太棒了。这应该需要 20 美元。”</p>
<p>那孩子退缩了，“什么？这么贵？”</p>
<p>这是风险资本补贴初创企业的时代，Uber 和 Lyft 在争夺市场份额的过程中，乘客每次乘车，它们都在亏损。因此，他的反应并不完全令人惊讶。</p>
<p>我快速思考了一会儿。“那么，你身上带了多少现金？”</p>
<p>他摸了摸钱包说，“五美元。”</p>
<p>我看着那张皱巴巴的钞票，耸了耸肩，“成交。”</p>
<p>他笑了，我给他发了一封电子邮件，告诉他如何安装这个程序。我说：“还有一件事。让我们一起照相吧。”</p>
<p>我将相机调成自拍模式。他开始微笑，我说：“拿起这五美元吧。”</p>
<p>我又花了一个小时在图书馆向人们推销，并设法获得了另一个付费客户。然后我跑回活动地点，与团队一起完成我们的程序原型。</p>
<p>那天下午，我做了我至今认为是我人生中最好的一次演讲。我们现场演示了这个应用程序，效果非常好。</p>
<p>演讲结束时，我展示了我与那位斯坦福学生的合影，他们现在是我们的付费客户。当我举起那张现金时，观众爆发出热烈的掌声。</p>
<p>总的来说，这是我一生中最令人振奋的经历之一。我们获得了第二名，并从赞助该活动的一家公司那里获得了一些 API 额度。</p>
<p>在会后派对上，我仅仅吃了些披萨，这样我就有更多时间和所有人交流了。我在 LinkedIn 上联系了他们。并且在 Twitter 上关注了他。我和人们一起自拍，并贴上了这个活动的标签。</p>
<p>这是我编程旅程中的一个分水岭。我向那个房间里的人证明了我可以帮助设计、编码，甚至销售一款应用。更重要的是，我也向自己证明了这一点。</p>
<h3 id="">参加黑客马拉松巡回赛</h3>
<p>从那一刻起，我就迷上了黑客松。那一年，我参加了几十场。我成了一名公路战士，沿着海岸来回奔跑，尽可能地参加每一场比赛。</p>
<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>现在他们去世了，但我经常回想起这段对话。我珍惜他们的鼓励。他们对一位 30 多岁的老师的信任，并且这位老师正疯狂地想成为一名开发人员。</p>
<p>从那以后，我一直在参加黑客松。在此过程中，我不断组建新的团队，学习新的工具。你永远不会忘记第一次让 API 工作的场景或者终于摸索出 Git 命令是如何工作的。你永远不会忘记那些在你身边忙碌的人，他们试图让应用程序在演示过程中保持一致。</p>
<p>TechCrunch Disrupt 黑客松、DeveloperWeek 黑客松、ProgrammableWeb 黑客松、The $1 Million Prize Salesforce 黑客松......这么多大型的黑客马拉松，学到了这么多东西。这是锻造我的开发能力的熔炉。</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>你会注意到这些例子都涉及到某人擅长某事。不仅仅是做一个讨人喜欢的好人。</p>
<p>做一个冷静、脚踏实地的人当然很有帮助。但这不是《大人物勒布斯基》，我们不能只靠魅力活下去。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/image__2000-1338_.png" alt="大人物勒布斯基（左），他没有工作，没有技能，也没有精力，但他很冷静，冷静得不得了" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>大人物勒布斯基（左），他没有工作，没有技能，也没有精力，但他很冷静，冷静得不得了</figcaption>
</figure>
<p>开发人员很容易说：“哦，是的。我对 JavaScript 了如指掌。我可以为你构建任何类型的 JavaScript 应用程序，在你能想到的任何设备上运行。”</p>
<p>或者可以说：“我总是在预期内提前发布代码。”</p>
<p>但你怎么知道他们没有夸大其词呢？</p>
<p>毕竟，一个狡猾的人曾经说过：</p>
<blockquote>
<p>“如果你只能擅长一件事，那就擅长撒谎。</p>
<p>那么你什么都擅长了。”</p>
</blockquote>
<p>（这句话的真实出处不详。但我愿意想象这句话是 20 世纪 20 年代一个戴着大礼帽和单片眼镜的骗子说的。）</p>
<p>任何人都会撒谎。有些人确实如此。</p>
<p>在我职业生涯的早期，我曾有过一个不愉快的经历——解雇一位谎称自己有硕士学位的老师。几年过去了，却没有人发现他。</p>
<p>每年，他都会在年度报告上撒谎，这样他就能比其他老师得到更高的加薪。因此每年他都能逃脱惩罚。</p>
<p>但有一天，一个小小的差异被我发现了。我查看了他的档案，给一些大学的记录部门打了电话，发现他从来没有完成学位。</p>
<p>当我抓住他的时候，那真是史酷比的时刻。“如果不是因为你们这些该死的孩子，我本来可以逃脱惩罚的。”</p>
<p>知道这个人在学校教书多年，薪水比其他许多老师都高——仅仅因为他愿意撒谎，这让人很难受。</p>
<p>说谎的战利品总是在那里，闪闪发光。有些人愿意向这种诱惑屈服。</p>
<p>雇主们知道这一点。他们知道你不能相信任何声称知道全栈 JavaScript 开发的人。对于那些能获得公司徽章、公司电子邮件地址和生产数据库的密钥的人，你必须保持谨慎。</p>
<p>这就是为什么雇主使用行为面试问题——试图抓住那些更有可能不诚实的人。</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>
<ol>
<li>黑客马拉松</li>
<li>为开源做出贡献</li>
<li>创建面向开发人员的内容</li>
<li>在大厂工作，步步高升</li>
<li>建立自由职业者客户的作品集</li>
<li>创建你自己的开源项目、公司或慈善机构</li>
</ol>
<h4 id="">如何寻找黑客马拉松和其他开发者比赛</h4>
<p>黑客马拉松代表了同时建立你的声誉、人际关系网络和提供你的编码技能的最直接方式。</p>
<p>大多数黑客马拉松是免费的，并向公众开放。你只需要有时间和预算去旅行。</p>
<p>如果你住在一个有很多黑客活动的城市--比如旧金山、纽约、班加罗尔或北京--你也许可以通勤到活动现场，然后回家睡在自己的床上。</p>
<p>尽管我住在圣巴巴拉，那里每隔几个月才有一次黑客大会，但我在旧金山有一个老同学，他让我睡在他的沙发上。这让我有机会参加更多的活动。</p>
<p>黑客马拉松曾经是硬核活动。人们会喝能量饮料，睡在地板上，都是为了在演讲时间前完成他们的项目。</p>
<p>但是，黑客马拉松的组织者正逐渐变得更加关注这些活动的健康和可持续性。毕竟，很多参与者都有孩子，或者有要求很高的全职工作，他们不可能在整个周末全力以赴地写代码。</p>
<p>找到即将举行的活动的最好方法是用谷歌搜索“黑客马拉松[你的城市名称]”，然后浏览出现的各种活动日历。其中许多是由大学、当地雇主，甚至是以教育为重点的慈善机构举办的。</p>
<p>如果你想赢得比赛，我建议提前做研究。</p>
<p>活动赞助商是谁？通常是面向开发者提供服务的公司，它们提供 API、数据库工具或各种软件产品的服务。这些赞助商可能会在活动中设立展位，你可以与他们的开发者支持者交谈。这些人被雇来教人们如何使用该公司的工具。有时你甚至会在这些展位上遇到关键员工或创始人，这也是一个很好的交流机会。</p>
<p>通常情况下，黑客马拉松会提供针对赞助商的奖品，“对[赞助商] API 的最佳使用”。将你的时间集中在将特定的赞助商工具纳入你的项目中，而不是试图赢得大奖，这可能更容易。你仍然可以在你的 LinkedIn 或你的履历表上把这些作为胜利。胜利就是胜利。</p>
<p>有时，黑客马拉松是如此高调--或者奖金如此可观--以至于尝试直接赢得比赛是有意义的。</p>
<p>在我参加黑客马拉松的过程中，我赢得了相当于几个月租金的现金奖励，几年的免费联合办公空间，甚至是纽约市联合国大楼的私人参观机会。</p>
<p>在巡回赛中，我遇到了一些人，他们的主要收入来源是赢得黑客马拉松的现金奖励。我认识的一个开发者在同一个黑客马拉松上成功赢得了九个赞助商的奖金。他设法将所有这些赞助商的工具整合到他的项目中--而且还赢得了总分第二名。</p>
<p>如果你在黑客马拉松上经常遇到的一些人后来成立了有风险投资的公司，或者启动了著名的开源项目，请不要感到惊讶。</p>
<p>你在黑客马拉松常客中看到的雄心壮志水平比普通开发者要高得多。毕竟，这些人完成了一周的工作，然后直接进入周末的工作。这些人不怕从油锅里跳出来，跳进火里。</p>
<h3 id="">如何为开源项目做贡献</h3>
<p>为开放源代码做贡献是建立自己声誉的最直接方式之一。大多数雇主都会看你的GitHub档案，其中会突出显示你的 Git 提交历史。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/raisedadead__Mrugesh_Mohapatra__--.png" alt="raisedadead__Mrugesh_Mohapatra__--" width="600" height="400" loading="lazy"></p>
<p>以上是 Mrugesh Mohapatra 的 GitHub 简介，他为 freeCodeCamp.org 做了大量的平台开发和 DevOps 工作。注意看他的活动栏是多么的绿。仅在过去一年就有 2208 个贡献。</p>
<p>许多开源项目的维护者，如Linux基金会、Mozilla（火狐），当然还有 freeCodeCamp 自己，对代码质量有很高的标准。</p>
<p>你可以通过阅读开放的 GitHub 问题来寻找已知的错误或功能请求。然后你可以进行代码修改，并打开一个拉取请求（pull request）。如果维护者合并了你的拉取请求，这将是你的一大收获。</p>
<p>在科技公司找到工作的最好方法之一是成为他们仓库中多产的开放源码贡献者。</p>
<p>开源贡献是建立自己声誉的好方法，因为你所做的一切都在公众面前。而且你还可以得到其他开发者审查和接受你的工作的<strong>社会证明</strong>。</p>
<p>如果你对通过开放源码建立你的声誉感兴趣，那么你可以这样开始。</p>
<p>阅读希拉里-尼亚昆迪的<a href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/">开源入门综合指南</a>。</p>
<h3 id="">如何创建面向开发者的内容</h3>
<p>开发人员是人。和其他人一样，当他们不工作、不睡觉、不和朋友和家人在一起的时候，他们想用自己的时间做些什么。</p>
<p>对许多人来说--包括我自己--这意味着花时间在别人的想法上：书籍、视频散文、互动体验，如<a href="https://www.freecodecamp.org/news/learn-to-code-rpg-1-5-update/">视觉小说</a>。</p>
<p>你可以广泛地将这些称为“内容”。我不太喜欢这个词，因为它使这些作品听起来像一次性的。但人们就是这样称呼它。</p>
<p>软件开发是一个令人难以置信的广泛领域，你可以访问许多不同的主题，有开发者生活方式的博客、编码面试准备教程、Twitch 上的编码直播流，以及开发者访谈播客。</p>
<p>可能有整个类别的开发者内容，我们甚至还没有想到，这将在未来十年内打破。</p>
<p>如果你对电影、新闻或创意写作感兴趣，开发者内容可能是建立自己声誉的好方法。</p>
<p>你可以选择一个特定的主题，逐渐被视为专家。</p>
<p>例如，有一些开发者专门从事特定技术栈的教程。</p>
<p>我的朋友安德鲁-布朗是一位来自多伦多的前 CTO，他已经通过了所有主要的 DevOps 考试。他创建了<a href="https://www.freecodecamp.org/news/azure-developer-certification-az-204-pass-the-exam-with-this-free-13-5-hour-course/">为所有 AWS、Azure 和谷歌云认证做准备的免费课程</a>，还经营着一个考试准备服务。</p>
<p>世界上有超过2000万的软件开发人员。可能有很多人会消费你的内容，他们会知道你是谁。</p>
<h3 id="">如何在大公司工作中提升地位</h3>
<p>你可能已经看到一个开发人员被介绍为“前 Googler” 或“前 Netflix 工程师”。</p>
<p>一些科技公司有如此严格的招聘程序--以及如此高的标准--甚至在该公司获得一份工作都是一个很大的成就。</p>
<p>雇主看候选人以前在哪里工作有一些实际原因。它减少了招聘失败的风险。</p>
<p>你可以通过努力提高自己的声望等级来建立自己的声誉。你可以从一个本地公司晋升到财富 500 强公司，并最终进入大型科技巨头公司之一。</p>
<p>当然，在巨头公司工作并不适合所有人。我将在第四章中更多地谈论这个问题。但要知道，这是你建立自己声誉的一个选择。</p>
<h3 id="">如何通过建立自由职业者客户组合来建立自己的声誉</h3>
<p>你可以通过以自由职业者的身份与公司合作来建立自己的声誉。</p>
<p>自由职业者通常从事较小的单人项目。因此，这可能是在当地建立你的声誉的一个更好的策略。</p>
<p>例如，如果你为当地的一家银行做了很好的工作，这可能足以说服当地的一家律师事务所也与你签约。</p>
<p>做一个“家乡的英雄”是有道理的。我知道很多开发者可以通过亲自参加会议和认识当地人来有效地与网络竞争。</p>
<h3 id="">如何建立你的开发作品集</h3>
<p>一旦你建立了一些项目，你就会想把它们展示出来。做到这一点的最好方法是用短视频。</p>
<p>人们都很忙。他们没有时间拉下你的代码并在自己的电脑上运行它。</p>
<p>如果你把人们送到一个网站，他们可能不会完全掌握他们正在看的东西，以及为什么它是如此特别。</p>
<p>这就是为什么我建议你使用屏幕捕捉工具来录制 2 分钟的视频演示（demo）。</p>
<p>两分钟的时间应该足够展示项目如何运作。一旦你完成了这些，你就可以解释一些实施细节，以及你所做的设计决定。</p>
<p>但总是，总是从演示开始。人们希望看到一些作品。他们想看到的是视觉上的东西。</p>
<p>一旦你用你的应用程序运行的引人注目的演示吸引了人们，你就可以解释你想要的所有细节。你的听众了解了更多的背景，也会更感兴趣。</p>
<p>两分钟也是一个神奇的长度，因为你可以把视频上传到推特上，当人们滚动经过它时，它就会在推特上自动播放。自动播放的视频在 Twitter 上被观看的可能性要高得多。它们消除了必须点击播放按钮的摩擦，或导航到另一个网站。</p>
<iframe id="twitter-widget-0" scrolling="no" frameborder="0" allowtransparency="true" allowfullscreen="true" class="" title="Twitter Tweet" src="https://platform.twitter.com/embed/Tweet.html?creatorScreenName=ossia&amp;dnt=false&amp;embedId=twitter-widget-0&amp;features=eyJ0ZndfdGltZWxpbmVfbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfaG9yaXpvbl90aW1lbGluZV8xMjAzNCI6eyJidWNrZXQiOiJ0cmVhdG1lbnQiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3R3ZWV0X2VkaXRfYmFja2VuZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfcmVmc3JjX3Nlc3Npb24iOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYnVzaW5lc3NfdmVyaWZpZWRfYmFkZ2UiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2NoaW5fcGlsbHNfMTQ3NDEiOnsiYnVja2V0IjoiY29sb3JfaWNvbnMiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3R3ZWV0X3Jlc3VsdF9taWdyYXRpb25fMTM5NzkiOnsiYnVja2V0IjoidHdlZXRfcmVzdWx0IiwidmVyc2lvbiI6bnVsbH0sInRmd19taXhlZF9tZWRpYV8xNTg5NyI6eyJidWNrZXQiOiJ0cmVhdG1lbnQiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3NlbnNpdGl2ZV9tZWRpYV9pbnRlcnN0aXRpYWxfMTM5NjMiOnsiYnVja2V0IjoiaW50ZXJzdGl0aWFsIiwidmVyc2lvbiI6bnVsbH0sInRmd19leHBlcmltZW50c19jb29raWVfZXhwaXJhdGlvbiI6eyJidWNrZXQiOjEyMDk2MDAsInZlcnNpb24iOm51bGx9LCJ0ZndfZHVwbGljYXRlX3NjcmliZXNfdG9fc2V0dGluZ3MiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3ZpZGVvX2hsc19keW5hbWljX21hbmlmZXN0c18xNTA4MiI6eyJidWNrZXQiOiJ0cnVlX2JpdHJhdGUiLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmx1ZV92ZXJpZmllZF9iYWRnZSI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfbGVnYWN5X3RpbWVsaW5lX3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0Zndfc2hvd19nb3ZfdmVyaWZpZWRfYmFkZ2UiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYnVzaW5lc3NfYWZmaWxpYXRlX2JhZGdlIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd190d2VldF9lZGl0X2Zyb250ZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH19&amp;frame=false&amp;hideCard=false&amp;hideThread=false&amp;id=1603405016525688834&amp;lang=en&amp;origin=https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Flearn-to-code-book%2F&amp;sessionId=5fb6a17a050a6f4d155b53178392f91afe5602a7&amp;siteScreenName=freecodecamp&amp;theme=light&amp;widgetsVersion=2b959255e8896%3A1673658205745&amp;width=550px" data-tweet-id="1603405016525688834" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: static; visibility: visible; width: 550px; height: 708px; display: block; flex-grow: 1;" loading="lazy"></iframe>
<p>一个 Twitter 克隆项目的视频演示，由 freeCodeCamp 的校友建立。这个视频没有画外音解释，只有 2 分钟的 UI 演示。但它仍然非常好。</p>
<p>你可以把这些项目演示视频放到 YouTube、Twitter、你的 GitHub 档案，当然还有你自己的作品集网站上。</p>
<p>为了捕捉这个视频，我建议使用 QuickTime，它是 MacOS 内置的。如果你是在 Windows 上，你可以使用 Game Recorder，它在 Windows 10 中是免费的。</p>
<p>如果你想要一个更强大的工具，OBS 是免费和开源的。它比较难学，但可以无限地定制。</p>
<p>至于录音技巧：保持你的字体大小尽可能大，并使用外部麦克风。任何你能找到的麦克风--即使是廉价的耳机--都会比对着你的笔记本电脑的内置麦克风说话好。</p>
<p>投入尽可能多的时间来录制和重新录制片段，直到你掌握了它。</p>
<p>能够演示你的项目和介绍你的代码是你整个职业生涯中都会用到的宝贵技能。练习演讲的时间永远不会被浪费。</p>
<h3 id="">如何启动你自己的开源项目、公司或慈善机构</h3>
<p>成为创始人是建立开发者声誉的最快--但也是风险最大的方式。</p>
<p>它的风险最大，因为你在用你的时间、金钱，甚至可能是你的个人关系作赌注--所有这些都是为了一个未知的结果。</p>
<p>如果你为开放源码贡献了足够长的时间，你<em>会</em>建立一个作为开发者的声誉。</p>
<p>如果你在黑客马拉松赛场上磨练了足够长的时间，你<em>会</em>建立起作为一个开发者的声誉。</p>
<p>但是，你可以尝试启动创业项目数十年而没有得到牵引力。而在这一过程中，你的时间、金钱和关系都会被浪费掉。</p>
<p>创业已经超出了本书的范围。但如果你对它感兴趣，我将给你这个快速建议。</p>
<p>企业家是一个法语单词，本质上翻译为 "承担风险的人"。</p>
<p>大多数创业者都会失败。有些失败是由于他们无法控制的情况。但很多失败是由于不了解他们所承担的风险的性质。</p>
<p>不要急于创建一个项目、公司或慈善机构。尝试为已经在你感兴趣的领域开展工作的其他组织工作。</p>
<p>通过为别人工作，你在有收入的情况下学习。你可以接触到这些工作，以及围绕这些工作的风险。而且，你可以为最终的创业项目积累储蓄。</p>
<h2 id="">如何避免毁掉你的声誉</h2>
<blockquote>
<p>“建立一个好的声誉需要一生，但你可以在一分钟内失去它。” - 威尔-罗杰斯，演员，牛仔，是我的在俄克拉荷马城长大的英雄之一。</p>
</blockquote>
<p>建立你的声誉是一场马拉松，而不是一场短跑。</p>
<p>它可能需要几年的时间来建立一个足够强大的声誉，以打开正确的大门。</p>
<p>但就像在一场竞争激烈的马拉松比赛中，一个趔趄会让你失去宝贵的时间。导致受伤的跌倒可能使你完全退出比赛。</p>
<h3 id="">不要在互联网上说傻话</h3>
<p>人们过去经常说一些愚蠢的事情。这些话可能会在空气中停留几分钟，而每个人都会畏惧。但这些话最终都会消散。</p>
<p>现在，当人们说蠢话时，他们经常在网上说。而且是用不可磨灭的墨水。</p>
<p>始终认为，当你在网站上输入东西并按下回车键时，它将被保存到一个数据库中。该数据库将在世界各地的几个数据中心进行备份。</p>
<p>你可以证明数据的存在，但没有办法证明没有数据。</p>
<p>你应该假设，就所有的意图和目的而言，猫已经离开了袋子。没有办法让猫回到袋子里。无论你刚才说了什么：那都是在你的永久记录上。</p>
<p>你可以删除这句话。你可以删除你的账户。你甚至可以尝试把它从谷歌搜索结果中删除。但是有人可能已经在网站时光倒流机（Wayback Machine）上备份了它。而当这些数据库中的某一个在几年后不可避免地被黑客攻击时，这些数据可能仍然在那里的某个地方，准备重新出现。</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>
<p>如果这是一个你坚信的问题，我不会阻止你说出你的想法。只是在你打字之前要考虑，在你点击发送之前要考虑。</p>
<h3 id="">不要过度承诺和不充分交付</h3>
<p>我看到开发者破坏自己声誉的最常见的方式之一是过度承诺和交付不足，使他们自己的声誉受到损害。这不一定是一个致命的错误，但它是不好的。</p>
<p>还记得吗，我说过在拉斯维加斯黑客马拉松上，我完全没有及时完成项目，而我们不得不使用幻灯片，而不是一个运行的应用程序。</p>
<p>是的，那是我学习代码旅程中的最低点之一。我的队友们都很有礼貌，但我相信他们对我很失望。毕竟，我过于自信了。我对自己在那个时间段内能够取得的成绩作出了过高的承诺，而我却没有兑现。</p>
<p>谦虚地估计自己的能力要好得多。</p>
<p>记住伊卡洛斯的寓言，他用蜡质的翅膀飞得太靠近太阳。如果他能采取更有分寸的方法。上升得慢一点。那么他的翅膀就不会融化，他也就不会坠入大海，留下一个内疚的父亲。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg" alt="1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus" width="600" height="400" loading="lazy"></p>
<p>Pieter Bruegel the Elder的《伊卡洛斯坠落的风景》，约1560年。伊卡洛斯本可以是一个竞争者。他本可以成为一个人物。但相反，他只是双腿消失在海里。农民和牧羊人不屑于从他们的工作中抬起头来看一看他的渺小。</p>
<h3 id="">在声誉受损前，控制住瘾</h3>
<p>如果你有未经治疗的毒瘾、酒瘾或赌瘾，请先寻求帮助。开发者找工作可能是一个漫长而艰苦的过程。你要全神贯注地去做这件事。</p>
<p>即使是像视频游戏成瘾这样看似无害的东西也会分散你的注意力，并占用你太多的时间。值得先把它控制住。</p>
<p>我不是医生。我也不打算给你讲 "毒品是坏事"。但我要说的是：你可能听说过硅谷的风潮，在那里，开发人员滥用药物，认为他们可以以某种方式提高他们的编码或解决问题的能力。</p>
<p>有一段时间，那里的开发者们有使用微剂量 LSD 和安非他命的趋势。</p>
<p>我的直觉反应是：这些东西可能给你带来的任何优势都可能是不可持续的，而且在一个较长的时期内是净负值。</p>
<p>不要感受到服用精神活性药物的同伴压力。不要感受到在欢乐时光喝酒的同伴压力。（自从 7 年前我的女儿出生后，我还没有喝过这么多的啤酒。我不觉得我错过了什么。）</p>
<p>如果你正在从毒瘾中恢复，请注意学习代码和获得开发人员的工作将是一个紧张的过程。给自己定个节奏，这样你就不会有复发的风险。</p>
<p>你不希望在职业转型过程的最后阶段--取得了如此大的成就--却让旧的习惯重新出现，使你的努力付诸东流。</p>
<h3 id="">尝试将你的职业生活与你的个人生活分开</h3>
<p>你可能听说过这样一句话：“不要把生意和娱乐混在一起”。</p>
<p>作为一个开发者，你将成为一个有实力的人。你将从你所在城市的其他人那里获得一定程度的尊重。也许没有医生或宇航员那么多。但仍然如此。人们将仰视你。</p>
<p>你将和一些以你为榜样的人们交谈。</p>
<p>不要炫耀你的财富。不要表现得好像你比其他人更聪明。</p>
<p>不要滥用权力来获得你在关系中想要的东西。</p>
<p>这将使你不被你周围的人喜欢。而且，如果你的行为以某种方式被捕获并发布到网上，它可能会在你的职业生涯中持续困扰着你。</p>
<p>永远不要忽视你拥有多少，以及你有多少可失去。</p>
<h3 id="">使用讲述者技巧</h3>
<p>在这一章节的最后，让我来分享一个给自己打气的小技巧。</p>
<p>首先，请记住，你是你自己编码之旅中的英雄。在你的脑海中有一个剧场，每个人都在关注你——他们都支持你。</p>
<p>讲述者技巧是，当你在执行一系列操作时，在脑海中讲述你的动作。</p>
<blockquote>
<p>Quincy 大步穿过黑客空间，他的笔记本电脑夹在胳膊下。他将马克杯放在热水器下面，然后放入一个新鲜的茶包。 他拉动拉杆。当热气腾腾的水装满他的杯子时，他用他最好的英国口音大声说道：“茶。 伯爵茶。 热的。”</p>
<p>他手里拿着提神饮料，钻进一个隔间，将笔记本电脑平放在桌面上，并瞥见了一位开发者的目光。他们对视了一会儿。Quincy 微微地点头，表示注意到了这位开发者。开发者也点头回应，仿佛是在心灵感应般地分享着这种情绪：“我看到你了，朋友。我看到你出现了。我看到你把事情做好了。”</p>
</blockquote>
<p>这可能听起来很荒谬。当然啦，这是很荒谬的。但我一直这样做，而且还很有效。</p>
<p>即使是在脑海中讲述生活中最平凡的时刻，也能帮助你充满活力。将摆在你面前的时刻具体化，可以使你的目的明确。</p>
<p>而当你以时代为单位思考你的生活时（“Taco Bell 时代”），这就更有效了。或者拐点（“通过高考”）。</p>
<p>这与建立你的声誉有什么关系？你的声誉本质上概括了“你是谁”，你对周围的人意味着什么。</p>
<p>通过更认真地对待自己，通过把你的生活想象成一部电影，你会逐渐了解你是谁，以及你有一天想成为的人。</p>
<p>通过讲述你的行为，你可以在自己的脑海中照亮它们。我为什么要那样做？我在想什么？在这里有更好的举动吗？</p>
<p>很多人都在不知不觉中破坏了自己的声誉，只是因为他们养成了坏习惯。</p>
<p>多年来，我一直认为我必须一直“有趣”。我会找任何机会加入一些自嘲的幽默。很多人意识到我在做什么，觉得很好玩。 但他们中的很多人不明白，只是觉得我是个混蛋。</p>
<p>我为什么要那样做？我想这可以追溯到小学，那时我总是想成为班上的小丑，逗别人笑。</p>
<p>但几十年后，这种用笑声来填补沉默的条件反射对我来说并不合适。</p>
<blockquote>
<p>“当你重复地犯一个错误时，它就不再是错误了。 它是一项决定。” – Paulo Coelho</p>
</blockquote>
<p>如果我没有注意到这个坏习惯，我可能会坚持更长时间。 但是有了讲述者技巧，我行为的尴尬就暴露无遗了。</p>
<p>我确信我有很多其他的思维方式和行为方式都不是最理想的。 在讲述者技巧的帮助下，我希望将来能够发现它们并加以完善，以免给人留下错误的印象。</p>
<h3 id="">你的声誉将成为你的遗产</h3>
<p>想想看在你的故事的结尾，你想成为谁。 你希望人们如何看待你在地球上的时间。 然后从那里向后推进。</p>
<p>电影结尾你想成为的那个人。 你希望人们钦佩的那个英雄。 为什么不从现在就开始这样装扮自己呢？</p>
<p>你能想象成为一名成功的开发者会是什么样子吗？ 开发出了人们依赖的软件系统？</p>
<p>那个未来的你——他们会怎么想？ 他们将如何处理情况和解决问题？ 他们会如何谈论他们的成就？ 他们的挫折？</p>
<p>仅仅想一想未来的自己，就能帮助你理清思路。 你的优先事项。</p>
<p>我经常考虑“Quincy 老头”和他不是很好的腰。 他每隔 30 分钟就得借口跑去上厕所。</p>
<p>但 Quincy 老头仍然尽力为自己的事业尽力。 尽管关节酸痛，他还是能动。 尽管头脑一片模糊，他还是在思考。</p>
<p>Quincy 老头还是想把事情做好。 他为自己所取得的成就感到自豪，但他并没有花太多时间回顾过去。 他期待那天他要做什么，以及他要完成什么目标。</p>
<p>我经常想起 Quincy 老头，然后倒回到今天。</p>
<p>我今天可以做出哪些决定，使我明天成为值得钦佩的人？ 我必须等上几十年才能赢得那个声誉吗？ 或者我可以从未来借用一些尊重吗？</p>
<p>通过像我未来的自己那样思考，我可以采取一些行动来为我赢得现在的正面声誉吗？</p>
<p>我相信你现在可以利用你未来的声誉——你的传承。 想想你未来的自己和你将取得的成就。 并将其用作引导你前进的路标。</p>
<p>我希望这些工具——讲述者技巧和想象你未来的自我技巧——不仅能帮助你思考声誉的本质。 我希望它们也能帮助你采取具体步骤来提高你的声誉。</p>
<p>因为建立声誉——让自己名声大噪——是作为开发人员获得可持续成功的最可靠途径。</p>
<p>对很多人来说，成功可能意味着很多事情。 但来自大多数文化的大多数人都会同意：成功的一个重要方面是为自己和家人提供食物。</p>
<p>这就是我们接下来要讨论的内容。</p>
<h2 id="chapter-4-how-to-get-paid-to-code-freelance-clients-and-the-job-search">第四章：如何靠编程赚钱——自由职业与求职</h2>
<p>如果你一直在培养自己的技能、人脉和声誉，那么获得一份开发人员的工作并没有那么复杂。</p>
<p>请注意，我说的是并不复杂——工作量仍然很大。 并且这可能是一种折磨。</p>
<p>首先，让我告诉你我是如何找到第一份工作的。</p>
<h3 id="30">故事时间：一位 30 多岁的老师是如何获得第一份开发人员工作的</h3>
<p><em>故事时间前情回顾：Quincy 在黑客马拉松赛道上表现出色，甚至赢得了一些赛事。 他正在建立自己作为一名使用 JavaScript 的“危险”开发人员的声誉。 不是超级熟练。 只是危险...</em></p>
<p>我刚刚在圣巴巴拉市中心的图书馆结束了漫长的一天学习、喝茶和做项目。</p>
<p>住在加利福尼亚最好的事情就是天气。 我们开玩笑说，当你在郊区租了一套价格过高的单居室公寓时，你不是在为室内买单——你是在为室外买单。</p>
<p>我的目标是尽可能少地呆在那个狭窄的、有 100 年历史的老鼠窝里，利用剩下的时间就在城里四处走走。</p>
<p>那是一个美丽的星期三晚上。 我还有两天时间准备那个周末的黑客马拉松。 我的大脑因为那一天的编码而乱成一团。 我妻子工作到很晚，所以我查看了日历，想找点事做。</p>
<p>在每个月的第一个星期一，我会规划南加州当月即将举行的所有科技活动，所以如果我有精力的话，我总会找到一个我可以参加的科技活动。</p>
<p>啊——今晚是圣巴巴拉 Ruby on Rails 聚会，我已经回复了。</p>
<p>我对 Ruby on Rails 了解不多，但我用它完成了几个小项目。 更多的时候，我是一名 JavaScript 和 Python 开发人员。</p>
<p>但是我想，管他呢。 我需要保持建立人脉的势头。 并且会场就在几个街区之外。</p>
<p>我走进去，只有几个开发人员围坐在桌子旁聊天。 我很快发现，他们都在当地的一家初创公司工作，一起维护着一个庞大的 Ruby on Rails 代码库。 他们中的大多数人已经在那里工作了几年。</p>
<p>在这一点上，我在过去的一年里建立了我的技能、我的人脉和我的声誉，所以我能够在谈话中持有自己的观点。</p>
<p>但我也意识到自己能力的局限性，所以我保持谦虚的态度，低调。我见过许多其他成功的开发人员在技术活动中操纵对话的方式。</p>
<p>很明显，会议桌上的一位开发人员是工程总监。他直接向 CTO 汇报。</p>
<p>然后很明显，他们正在寻找 Ruby on Rails 开发人员。</p>
<p>我对自己的背景和能力持坦率态度，“我的背景是成人教育，教英语和办学。我大约一年前才开始学习编码。”</p>
<p>但出乎意料的是，他毫不在意。“行吧，如果你想过来面试，我们可以看看你是否适合这个团队。”</p>
<p>那天晚上，我走在回家的路上，感觉浑身像是通了电似的。那是一种恐惧，而不是兴奋。</p>
<p>我觉得还没有准备好。而且我甚至没有在找工作。我只是靠积蓄过活，全职学习编码，并通过我妻子的工作获得健康保险。</p>
<p>我是一个强迫性储蓄者。人们会因此而为难我。 我会自己换机油，自己剪头发，甚至在叫外卖的时候自己在家煮米饭——只是为了省几块钱。</p>
<p>在我当老师的十年间，我成功地存下了将近四分之一的税后收入。我会在 Craigslist 上购买旧的游戏，然后在 eBay 上出售它们。这听起来可能很愚蠢，但这对我来说是一个重要的收入来源。</p>
<p>我们存这一切是为了什么？我们不确定。也许将来某个时候在加利福尼亚买房子？但这意味着我不必急着找一份工作。我知道我处于一个特权位置，我试图通过每天学习更多来充分利用它。</p>
<p>所以简而言之，我认为我还没有为我的第一份开发人员工作做好准备。我担心如果他们雇用我，那将是一个大错误。他们会意识到我是多么缺乏经验，解雇我，然后我必须在以后的工作面试中解释失败的原因。</p>
<p>当然，我现在知道我错误地看待了这个机会。但是让我把这个故事讲完。</p>
<p>当我申请安排面试的时候，他们找我要简历。 我不知道该怎么做，所以我把我所有的专业经验都写在了那里。这些年来我工作过的所有学校。（我故意遗漏了在 Taco Bell 得来速工作的时间。）</p>
<p>当然，我的工作经验都与编码无关。但我该怎么办，递给他们一张白纸？</p>
<p>好吧，我确实有一个我构建的线上项目组合。最重要的是，我有一份我赢得或参加的所有黑客马拉松的清单。 所以我包括了那些。</p>
<p>在面试前的最后几个小时，我重温了过去一年中使用过的所有 Ruby on Rails 教程，以刷新记忆。 然后我穿上连帽衫、牛仔裤和背包，走到他们的办公室。</p>
<p>办公室经理是一位和蔼可亲的女士，她带我到开发人员分区，并将我介绍给他们的小型开发团队。 他们大概有十几个人，大多数穿着牛仔裤和连帽衫，年龄从 20 出头到 40 出头。 其中两人是女性。</p>
<p>我轮流在乱七八糟的桌子和电缆中穿行，与他们每个人握手并自我介绍。 这是我作为课堂老师记住学生名字的所有经验都派上用场的地方。 我能够记住他们所有的名字，所以在那天晚些时候当我离开时，我可以跟他们每个人道别：“很高兴见到你，[名字]。 期待能和你一起工作。”</p>
<p>首先我见了工程总监。 我们走进一间小办公室，关上了门。</p>
<p>墙上的白板上写满了统一建模语言（UML）图的草图。 彩虹般的马克笔列出了各种服务器和服务之间的关系。</p>
<p>我一直盯着那块白板，担心他会派我去解决一些编码问题并展示我的技能。也许是著名的 fizzbuzz 问题？ 也许他想让我反转二叉树？</p>
<p>但他甚至从未提到过白板。他只是坐在那里，一直盯着我看。</p>
<p>他们是一家约有 50 名员工的公司，拥有大量风险投资资金和数以千计的付费客户——主要是小企业。 他们以务实为荣。他们从来没有问过我在学校学的是什么，或者我过去做过什么工作。 他们真正关心的是......</p>
<p>“听着。 我知道你会写代码”，他说。“你一直在写代码，赢了黑客马拉松。我检查了你的一些组合项目。对于刚接触编码的人来说，代码质量还可以。所以对我来说，真正的问题是——你能了解我们在这里是如何做事的吗？你能和团队中的其他开发人员一起工作吗？ 最关键的是：你能把事情做好吗？”</p>
<p>我咽了咽口水，身体前倾，尽我所能地鼓起信心。“可以，”我说，“我相信我可以。”</p>
<p>他说：“很好，很好，可以。去楼下的越南米粉餐厅等着。[CTO 的名字]应该马上就过去。”</p>
<p>于是和 CTO 边吃边聊，主要是听。我了解到人们会将智慧投射到安静的人身上。专心聆听不仅可以帮助你变得更聪明，甚至可以让你看起来更聪明。</p>
<p>这种方法奏效了。会议持续了大约一个小时。米粉很好吃。我学到了很多关于公司历史和近期目标的知识。CTO 说，“好的，回去和[工程总监]谈谈。”</p>
<p>我也这样做了。然后他给了我一份工作。</p>
<p>现在，我要强调。这不是大多数人获得第一份开发人员工作的方式。</p>
<p>你可能在想，“哎呀，Quincy 只是随便做做，就得到了他甚至都没有寻找过的开发人员工作。要是我们都能这么幸运就好了。”</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><strong>X</strong> 是拥有十倍效率的“摇滚明星”天才程序员。X 还具有令人难以置信的生产力。但 X 经常对同事脾气暴躁，还经常错过最后期限或会议。</p>
<p><strong>Y</strong> 是一个不错的程序员，输出速度较慢但更始终如一。Y 与同事相处融洽，很少错过会议或截止日期。</p>
<p><strong>Z</strong> 在输出上与 Y 相似，能够与同事和睦相处，按时完成任务。但是 Z 在过去 3 年里换了 3 次工作。</p>
<p>好吧，你可能会从我到目前为止所说的一切中猜到：<strong>Y</strong> 是首选候选者。这是因为雇主最看重可预测性。</p>
<p><strong>X</strong> 是一些新任经理可能会在招聘时犯的错误的陷阱候选人。如果你好奇为什么雇用 X 会是一个糟糕的主意，请阅读<a href="https://www.freecodecamp.org/news/we-fired-our-top-talent-best-decision-we-ever-made-4c0a99728fde/">《我们解雇了我们的顶尖人才，我们做出的最佳决定》</a>。</p>
<p>我将 <strong>Z</strong> 添加到此列表只是为了说明一个观点：尽量不要过于频繁地更换工作。</p>
<p>你可以通过从雇主到雇主的阶梯式跳跃快速增加收入。接受录用通知后，你就可以开始申请新工作。 但这会遭到许多招聘经理的排斥。</p>
<p>毕竟滚石不生苔。 你会进入然后退出代码库，还没来得及了解它们的工作原理。</p>
<p>考虑一下：经理可能需要 6 个月或更长时间才能让新开发人员跟上速度，让他们可以为团队带来正向收入。</p>
<p>在那之前，新员工本质上是在消耗公司资源，从同事那里吸收时间和精力，而同事必须让他们入职，帮助他们找到解决代码库的方法，并修复他们的错误。</p>
<h3 id="">大多数雇主都厌恶风险</h3>
<p>假设一个经理雇用了错误的开发者。 花点时间想象一下，这对团队来说会有多糟糕。</p>
<p>平均而言，填补一家公司的开发人员职位需要大约 3 个月的时间。 雇主必须首先：</p>
<ul>
<li>获得预算，来雇佣一个已经被老板批准的开发人员</li>
<li>编写职位描述</li>
<li>在求职网站上发布职位并与招聘人员沟通</li>
<li>筛选简历——其中许多都是盲目申请尽可能多的工作的求职者的低成本努力</li>
<li>开始面试过程，这可能涉及让候选人飞到当前城市并住在酒店</li>
<li>涉及许多其他团队成员的多轮面试。 对于一些雇主来说，这是一个为期数天的事情</li>
<li>选择最终候选人，并谈判报价......</li>
<li>许多候选人无论如何都不会接受</li>
<li>签订合同和帮员工入职</li>
<li>给与让他们访问敏感的内部系统的权限</li>
<li>将他们介绍给他们的队友，并确保每个人都相处得很好</li>
<li>然后是几个月的非正式培训，让员工了解一项服务或遗留代码库的一部分</li>
<li>让他们沉浸在团队的做事方式中</li>
</ul>
<p>简而言之——大量的工作。</p>
<p>现在想象一下，在完成所有这些之后，新员工说：“嘿，我刚刚从另一家公司得到了更高的薪资。拜拜了，您嘞。”</p>
<p>或者想象该员工并不可靠，经常在工作开始后几个小时才出现。</p>
<p>再想象一下，该员工与未经许可的药物、酒精或赌博成瘾、愤怒问题作斗争——或者只是被发现是一个争强好斗、破坏团队的人。</p>
<p>现在你必须重新开始整个过程，并为该职位寻找新的候选人。</p>
<p>招聘是很难的。</p>
<p>所以你可以明白为什么雇主厌恶风险。 他们中的许多人会忽略看似合格的候选人，直到找到他们认为有 99% 把握的人。</p>
<h3 id="">因为雇主非常厌恶风险，所以求职者受苦</h3>
<p>如果你现在认为招聘很困难，等你了解了工作申请流程有多复杂再感叹吧。你或许已经对它再熟悉不过了。就像这样……</p>
<ul>
<li>你必须准备简历。同时，你将在整个求职过程中不断地摸索着做决定。</li>
<li>你必须在网上四处寻找职位空缺，研究雇主，并且评估他们是否适合你。</li>
<li>大多数职位的申请都需要填表，你将不得不一遍又一遍地重新填写简历，希望表单不会因服务器错误或 JavaScript 验证错误而崩溃。</li>
<li>提交这些工作申请后，你必须等待雇主处理它们。有一些雇主并不会人工审阅所有申请，因为他们收到的申请实在太多了。（比如谷歌每天能收到 9000 份申请。）雇主会使用软件来筛选。内部招聘人员 <a href="https://www.freecodecamp.org/news/you-in-6-seconds-how-to-write-a-resume-that-employers-will-actually-read-fd7757740802/">平均只花 6 秒查看每份简历</a>。通常你的申请甚至永远不会被人工审阅。</li>
<li>你可能永远不会收到公司的任何回复。他们几乎没有动机告诉你他们为什么拒绝你（他们不希望你提起歧视诉讼）。如果你幸运的话，你会收到一封“我们已经决定选择其他候选人”的电子邮件。</li>
<li>所有你花在申请这些工作上的时间——可能是每周几个小时——是消耗精力的，当然，也是无偿的。</li>
</ul>
<p>是吧。所以你可以看到招聘过程对雇主，尤其对求职者来说都是一场噩梦。</p>
<p>但如果你坚持下去，你最终可以拿到一些 offer。毕竟好运也是连着来的。</p>
<p>以下是一位 freeCodeCamp 贡献者在 12 周内的求职数据：</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/85L921BMzXxKhVySPo9gxWamr5J4QLFJaVEn.png" alt="在投递了 291 份申请之后，他最终收到了 8 个 offer" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>在投递了 291 份申请之后，他最终收到了 8 个 offer</figcaption>
</figure>
<p>随着 offer 的陆续到来，起薪也越来越高。当然，请注意，这是在世界上消费水平最高的城市之一——旧金山的工作薪资。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/bDp3eVv6VQS3Og3ulVpwp6dDylIybdpRczsD.png" alt="到第 12 周时，在他收到的 offer 里，起薪几乎是第 2 周的两倍" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>到第 12 周时，在他收到的 offer 里，起薪几乎是第 2 周的两倍</figcaption>
</figure>
<p>这位开发者得到面试的几率相当高。而且他的谈判能力也很强。如果你感兴趣，可以<a href="https://www.freecodecamp.org/news/5-key-learnings-from-the-post-bootcamp-job-search-9a07468d2331/">在这里</a>了解更多关于他求职过程的内容。</p>
<p>但正如我之前所说，其实从“旁门”进入一家公司会更容易一些。</p>
<p>这就是我写这本书的原因之一。我不希望你们都在雇主的“前门”排队。</p>
<h3 id="">如果你建立了自己的技能、人脉和声誉，你就可以绕过很多工作申请流程</h3>
<p>在本书中，我一直在教你一些增加“走运”获得工作机会可能性的技巧。</p>
<blockquote>
<p>“运气是准备遇见机会。如果你在机会来临时没有做好准备，你就不会'幸运'。” —— 奥普拉·温弗瑞</p>
</blockquote>
<p>这就是为什么在整本书中我都鼓励你同时发展这三个领域，并且从第一天起就开始考虑它们——在你找工作之前。</p>
<p>我没有特意找工作但却找到了工作的故事可能看起来有点蠢。但这种情况发生的频率可能比你想象的要高。</p>
<p>现实是：学习编程很困难。</p>
<p>但是知道如何编程很重要。</p>
<p>在每个行业中——几乎在世界上的每个公司中——管理者们都在试图找到用软件处理他们的流程的方法。</p>
<p>这就意味着需要开发人员。</p>
<p>你可能听说过科技行业偶尔会出现大规模裁员。 但是，如果你缩小并查看更长的时间线，开发人员的招聘趋势无疑是增长的。</p>
<p>我希望凭借优秀的技能、强大的人脉和良好的声誉，你将额外耗费最少的精力并找到一份好工作。</p>
<p>希望在我们有生之年的某一天，雇主和有技能的员工可以更容易地找到彼此，而无需漫长、残酷的工作申请和面试过程。</p>
<h3 id="">我应该在第一份开发工作谈判薪资吗</h3>
<p>只要你礼貌地进行谈判沟通，尝试提高你的薪水通常不会有什么坏处。</p>
<p>我写过一篇更详细的关于<a href="https://www.freecodecamp.org/news/salary-negotiation-how-not-to-set-a-bunch-of-money-on-fire-605aabbaf84b/">如何进行开发工作的薪资谈判</a>的文章。</p>
<p>从本质上讲，谈判更高的起薪取决于你有多少筹码。</p>
<p>你的雇主有工作要完成。他们有多需要你来为他们工作？他们还有什么其他选择？</p>
<p>而你需要收入来生活。你有什么其他的选择？你的备选计划是什么？</p>
<p>如果你有另一家雇主提供的工作机会，并且愿意支付某个金额的薪水，你可以将其作为谈判薪资的筹码。</p>
<p>如果你的最佳后备计划是回到学校并获得研究生学位……那不算特别强大的筹码，但总比没有好。你可以在薪资谈判的过程中提到它。</p>
<p>回想一下我之前描述的漫长的招聘过程。雇主必须经过至少十几个步骤才能与候选人到达将要发放 offer 的那一步。他们可能已经预料到你会进行薪资谈判，并不会对此感到惊讶。</p>
<p>现在，如果你和我一样，有家公司突然给你一份工作，你可能会觉得谈判薪资很尴尬。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/92508.jpeg" alt="《辛普森一家》里的史密瑟斯" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>《辛普森一家》里的史密瑟斯</figcaption>
</figure>
<p>我承认——在我上面写的故事里，当我的经理给我这份工作时，我没有谈判。</p>
<p>回想起来，我本应该协商我的报酬吗？也许吧。</p>
<p>我有什么筹码吗？可能不多。我的备选计划是继续参加编程比赛，在公共图书馆喝茶和写代码。</p>
<p>我也许能去谈判并每小时多赚几美元。但在他们给我那份工作的那一刻，报酬是我最后才考虑到的事情。我只是欣喜若狂，因为我即将成为一名专业的开发人员。</p>
<p>顺便说一句，一旦你在一家公司担任开发人员一年左右，你可能会想要求加薪。我已经写了更详细的关于<a href="https://www.freecodecamp.org/news/youre-underpaid-here-s-how-you-can-get-the-pay-raise-you-deserve-fafcf52956d6/">作为开发人员如何要求加薪</a>的文章。但归根结底都是同一件事：谈判筹码。</p>
<h3 id="">你应该找猎头帮忙搜寻开发职位吗</h3>
<p>是的。如果你能找到一位猎头来帮助你找到第一份开发工作，那么你应该这样做。</p>
<p>我已经写过关于<a href="https://www.freecodecamp.org/news/the-tech-recruiter-red-pill-967dd492560c/">为什么猎头是你找工作时被低估的工具</a>的文章。</p>
<p>许多雇主会向猎头支付中介费，用以向他们输送高质量的求职者。</p>
<p>猎头的目标和奖励机制与作为求职者的你完全一致：</p>
<ol>
<li>他们将根据你的起薪获得报酬，因此他们倾向于帮助你协商到尽可能高的起薪。</li>
<li>他们成功输送的候选人越多——输送的速度越快——他们赚的钱就越多。所以他们会希望帮助你尽快找到工作，这样他们就可以转向其他求职者。</li>
<li>因为他们只有在你成为一名正式员工（并且至少待 90 天）后才会得到报酬，所以他们会努力确保你能胜任这份工作，并且适合公司的文化。</li>
</ol>
<p>话说回来，如果猎头要求你为任何事情付钱给他们，那就是危险信号。</p>
<p>并不是所有的猎头都是相同的。在与猎头合作之前先做个调查。即使他们最终得到了雇主的报酬，你仍然在花时间帮助他们把你推荐到合适的位置。时间是很宝贵的。</p>
<p>说到时间，有一种可以让你更快达到写代码获得报酬的方法——即便你还在为求职做准备——做一些自由开发者的工作。</p>
<h3 id="">如何找到自由客户</h3>
<p>我鼓励初级开发人员在开始找工作之前尝试获得一些自由客户。这里有三个很好的理由：</p>
<ol>
<li>获得自由客户比找到全职工作要容易得多。</li>
<li>自由职业的风险较小，因为你可以在不辞去日常工作的情况下进行。</li>
<li>你可以更快地开始通过写代码获得报酬，并更快地开始构建你的专业作品集。</li>
</ol>
<p>获得自由客户比找到开发工作要容易得多。这是为什么？</p>
<p>想想当地的小型企业。它可能只是一个经营餐馆、商店、管道公司或者律师事务所的家庭。</p>
<p>这些企业中有多少可以从交互式网站、后台管理系统和工具中受益，以自动化他们的日常工作流程呢？答案当然是他们中的大多数。</p>
<p>然而这些公司中有多少能够聘请全职软件开发人员来构建和维护这些系统呢？没有那么多。</p>
<p>这就是自由职业者的用武之地。他们可以根据具体情况提供更加经济实惠的服务。小型企业可以为单个项目或短期聘请自由职业者。</p>
<p>如果你正在积极建立你的人脉，你遇到的一些人可能会成为你的客户。</p>
<p>例如，你可能会遇到一位想要更新其网站的本地会计师，他可能想添加安排咨询或接受信用卡支付的能力。这些是小型企业可能要求的常见功能，你可能会非常擅长实现它们。</p>
<p>你可能还会遇到需要 ERP 系统、CRM 系统、库存系统或无数其他工具之一的小型企业的管理者。</p>
<p>在许多情况下，你可以为他们部署和配置一个开源工具。然后你可以教他们如何使用那个系统。你可以按月向他们收取服务费，让你“随叫随到”并准备好解决可能出现的问题。</p>
<h3 id="">我应该签订自由职业合同吗</h3>
<p>你需要找到一个标准的合同模板，修改它，然后请律师审核。</p>
<p>让当地的面包店与你签订合同只是为了帮助更新他们的网站或社交媒体形象，这可能会让人感到尴尬。但这样做会让整个交易比单纯的握手协议更专业。</p>
<p>一家小企业不太可能会因为几千美元而将你告上法庭。但如果发生这种情况，你会很高兴自己签了合同。</p>
<h3 id="">我应该为自由职业的工作收取多少费用</h3>
<p>我会把你日常工作中做的所有事情考虑在内，计算出你的时薪，然后支付双倍的薪资。这听起来可能是很多钱，但自由职业比常规工作要难得多。你必须学习很多东西。</p>
<p>或者，你可以以单个项目为单位计费，“我将以 1000 美元的价格为你部署和配置此系统。”</p>
<p>请务必指定你愿意维护项目的时间范围。你不希望人们在 3 年后打电话给你，希望你回来修复一个没有人维护的系统。</p>
<h3 id="">我如何确保自由客户会付钱给我</h3>
<p>很多其他的自由职业者——包括我自己——都使用这种简单的方法：在开始工作之前预先索取一半的报酬。当你能证明你已经完成了一半时，就要求他们支付另一半。</p>
<p>尽量在你真正完成项目之前拿到所有报酬，这样，客户就无法用未支付的报酬来试图让你做额外的工作。</p>
<p>如果你已经得到全额报酬，那么你之后为客户所做的工作将传达这个意思：“我为你付出了更多。”</p>
<p>这带来了一种完全不同的气氛：“啊哦——你会为我做的所有工作付钱给我吗？”</p>
<h3 id="upworkfiverr">我应该使用像 Upwork 或者 Fiverr 这样的自由职业网站吗</h3>
<p>如果你在一些偏远地区并且在当地找不到任何客户，你可以尝试其中的一些自由职业网站。但除此之外，我不会关注它们。原因如下：</p>
<p>当你尝试在自由职业网站上找兼职工作时，你是在与世界各地的所有自由职业者竞争。他们中的许多人居住在生活成本比你低得多的城市。他们中的一些人甚至不会像你一样真正关心自己的声誉，并且可能愿意接受低于标准报酬的工作。</p>
<p>在某种程度上，这些网站助长了一种“逐底竞争”现象，即提供最廉价劳动力的人通常会得到这份工作。</p>
<p>如果你转而专注于通过自己的本地人际关系寻找客户，你将不必与这些国外的自由职业者竞争。</p>
<p>需要寻求自由开发者帮助的人也是如此。如果你想雇用一名自由职业者，我强烈建议你与可以见到面的人一起工作，他与你的社区有联系。</p>
<p>在你的城市生活了几年，并且与你有很多交集的人——他们不太可能试图占你的便宜。如果你和你的合作方都关心自己的声誉，那么你们会成就一段有效的合作伙伴关系。</p>
<p>你们可能成为彼此履历中的成功故事。</p>
<h3 id="">我什么时候应该停止自由职业并开始找正式工作</h3>
<p>如果你有能力以自由职业维生，你可能只想继续做下去。慢慢地，你甚至可以建立自己的软件开发机构，并聘请其他开发人员来帮助你。</p>
<p>话说回来，如果你渴望拥有稳定的开发工作，那么你可能很走运。如果你坚持足够长的时间，自由客户可能会给你全职工作。在某些时候，客户以较低的时薪给你提供一份全职工作可能更经济实惠。你得到一份稳定的每周工作 40 小时的工作，而他们全职获得你的技能。</p>
<p>当你找到工作时，你也可以保留一些自由客户。这是很好的收入补贴。但请记住，正如我们将在下一章中了解到的那样，你的第一份开发工作可能会需要你非常尽职尽责。至少在一开始的时候是这样。</p>
<p>成为职业开发者的第一年会有多疯狂呢？让我们来谈谈这个。</p>
<h2 id="chapter-5-how-to-succeed-in-your-first-developer-job">第五章：如何在第一份工作中取得成功</h2>
<blockquote>
<p>“待在港口的船很安全。但这不是造船的目的。” —— 格蕾丝·霍珀，数学家，美国海军少将，计算机科学先驱</p>
</blockquote>
<p>一旦你获得第一份开发工作，那就是真正学习的开始。</p>
<p>你将学习如何与其他开发人员一起高效工作。</p>
<p>你将学习如何浏览大型遗留代码库。</p>
<p>你将学习版本控制系统、持续集成和持续交付工具（CI/CD）、项目管理工具等。</p>
<p>你将学习如何在技术管理者手下工作。如何在截止日期前交付。以及如何解决工作中的大量分歧。</p>
<p>最重要的是，你将学会如何管理自己。</p>
<p>你将学习如何突破影响我们所有人的心理障碍，例如冒名顶替综合症。你将了解到自己的极限，以及如何稍微地超越它们。</p>
<h3 id="30">故事时间：一名 30 多岁的老师如何在他的第一份开发工作中取得成功</h3>
<p><em>故事时间前情回顾：昆西在当地一家科技初创公司找到了他的第一份开发工作。他将成为维护一个庞大、复杂的代码库的十几名开发人员中的一员。他不知道自己在做什么……</em></p>
<p>我凌晨 4 点醒来，再也睡不着了。我努力尝试睡着。但是焦虑就像在我的胸口燃烧一样，恐慌包围了我。</p>
<p>我在教育领域工作了十年，先当辅导员，然后当老师，接着担任校长。</p>
<p>几个小时后，我将从头开始，成为一名开发人员。</p>
<p>我过去的任何学习——过去的成功——对我的新职业来说有什么意义吗？</p>
<p>我做了我感到焦虑时最常做的事——跑步。我跑下山坡，头灯在黑暗中摇晃。当我到达海滩时，太阳慢慢爬上树梢，我沿着大海奔跑。</p>
<p>当我回到家时，我妻子已经出门上班了。她告诉我不要担心。她说，“即使你因为不知道自己在做什么而被解雇，我依然爱你。”</p>
<p>当我到达我的新办公室时，那里没有人。作为一名教师，我习惯于 7 点 30 分准时到校。但我很快意识到，大多数软件开发人员并没有那么早开始工作。</p>
<p>所以我盘腿坐在入口走廊上，在我的上网本上按照教程写代码。</p>
<p>一名员工朝我走来，脸上带着紧张的表情。她可能认为我是一个来占位的闲杂人等。我向她保证我确实在她的公司工作，并说服她让我进去。</p>
<p>穿过空荡荡的开放式办公室走向开发人员工作的区域，我感觉像在做梦，只有出口标志的灯光指引着我的路。</p>
<p>我在一张空的站立式办公桌上设置了我的上网本，并完成了编码教程。</p>
<p>过了一会儿，我周围的灯光亮了起来。我的老板来了。起初他并没在意我的存在。他只是在办公桌前坐下，开始敲击他的机械键盘。</p>
<p>“拉森”，他终于开口了。“你准备好迎接你这个重要的第一天了吗？”</p>
<p>我还没准备好。但我想表现出我的信心。所以我说了最早出现在我最喜欢的 80 年代电影之一《妖魔大闹唐人街》中的一句台词：“我生来就准备好了。”</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/big-trubs-born-ready.jpeg" alt="big-trubs-born-ready" width="600" height="400" loading="lazy"></p>
<p>你可能已经听过上百万次“我天生就准备好了”。但这句话最早是在 1986 年杰克·伯顿（Jack Burton）对他的朋友王驰（Wang Chi）说的，当时他们正准备在他的死亡仓库中与一位千年老巫师对峙。我不敢相信我的父母当时让我看这个，但我很高兴他们这么做了。</p>
<p>“好极了”，我的老板说，“那么先给你配一台电脑。”</p>
<p>“哦，我已经有了一个”，我敲了敲我 200 美元的上网本说，“这个宝贝正在运行 Linux Mint，我已经自定义了我的 .emacs 文件，以便能够……”</p>
<p>“我们是一家 Mac 商店”，他说着走向储藏室。他搜寻了一会儿，然后出现了。“这是一个已经用了 3 年的模型，但它应该还够用。我们把它重置到出厂设置。”</p>
<p>我开始说我已经熟悉我的电脑配置，而且我用它能更快地工作，但他并不接受。</p>
<p>“我们都在使用相同的工具。它使协作变得更加容易。你要知道，惯例优于配置。”</p>
<p>那是我第一次听到“惯例优于配置”这个词，但在接下来的几天里它会出现很多次。</p>
<p>我花了接下来的几个小时来配置我的新电脑，而其他开发人员陆续到了公司。</p>
<p>接近上午 10 点时，我们开始了团队“站会”。我们站在白板前围成一圈，轮流汇报当天的工作。</p>
<p>每个人都提供简洁、准确的进展更新。</p>
<p>轮到我了，我开始自我介绍。当时我已经非常紧张了，结果这时候迈克走了进来，他是超级马拉松运动员，也主持举办圣塔芭芭拉的初创企业活动。他正在吃一些小胡萝卜，那天早上他已经跑了大约 30 英里。</p>
<p>在我结束后，迈克说话了，欢迎了我并且说他在一些活动中见过我。然后，他用 15 秒的时间讲述了有关他正在写一些功能的工作。</p>
<p>整个会议只进行了大约 10 分钟，大家就各自回到了自己的办公桌。</p>
<p>我最终让公司的代码库在我的新笔记本电脑上运行。这是一个已经发展了 5 年多的 Ruby on Rails 应用程序。我运行了 “rake stats” 命令，发现它有数百万行代码。我不寒而栗。我怎么可能能理解这些东西呢？</p>
<p>我的隔壁桌，一个看起来粗鲁的、留着胡子的开发人员说，“嗯，其中大部分只是包。你实际要处理的代码库可能只有 100000 行。别担心。你会掌握它的窍门的。”</p>
<p>我咽了咽口水，心想：“这还不到一百万呢，还行。”</p>
<p>“顺便说一句，我叫 Nick”，他自我介绍道，“如果你需要任何帮助，请告诉我。我已经在这个代码库上摸索了好几年，所以我应该可以帮到你。”</p>
<p>在接下来的几天里，我向 Nick 提问了每一个我遇到的内部系统问题。</p>
<p>终于，Nick 开始将他的聊天状态设置为“代码模式”，并戴上了降噪耳机。他转身背对我，用肢体语言说：“让我一个人待一会，我也要完成自己的工作。”</p>
<p>这是我关于团队动力学到的第一个教训。你不想因为提问太多而不受欢迎，你需要更善于自己学习。</p>
<p>但这个代码库很庞大，除了内部注释和内容相当少的团队 wiki 外，基本什么都没有。</p>
<p>这个代码库是闭源的，只有我身边的人在进行开发，也没办用 Stack Overflow 搜索，我只能在黑暗中摸索。</p>
<p>我开始纠结该骚扰哪个邻桌同事提问，但又感觉这样是在消耗队友的热情。</p>
<p>我开始过分担忧，连最简单的问题也羞于提问。我定了一个规矩：先自己摸索两小时再去向别人求助。</p>
<p>有一次，折腾了几个小时后，我终于求助了。主管发现我整个上午都没有进展，问我：“为什么不早点开口呢？”</p>
<p>我遇到的另一个难题是理解代码库，包括整体和微服务部分。</p>
<p>整个代码库有几千个单元测试和集成测试。贡献新的代码时也要编写测试，用来确认新代码实现了预期功能，且不会破坏现有的功能。</p>
<p>往往我提交了自认为充分测试的代码，却影响了其他我没有考虑到的部分，破坏了程序构建（break the build）。其他人在根本问题解决之前无法合并代码，整个团队都很失望。</p>
<p>程序一周会出几次问题，我不是唯一一个犯这种错误的人，但我<strong>感觉</strong>都是我的错。</p>
<p>有段时间我觉得自己不是做开发的料，我自己想着，“开什么玩笑呢？怎么突然就决定来做开发了呢？”</p>
<p>我不断回想起一年前我刚刚开始学习编程的时候，其他开发朋友们对我说过的话。</p>
<p>“你怎么和那些从小学编程的人共事？”</p>
<p>“为什么不去做你擅长的事呢？”</p>
<p>“你怕不是得痛饮知识的海洋。”</p>
<p>我离开电脑的时间越来越长。办公室的厨房里摆满了零食，我不停找借口起来吃零食，不管怎样，只要能摆脱那种不知道自己在做什么的感觉就行。</p>
<p>最开始几个月很难。每日立会的时候，我感觉每个人都在飞快前进，修补 bug、发布新功能，只有我没什么可说的，我还在做前一天的那个功能。</p>
<p>每天醒来去上班时我都感到恐惧，“今天就是他们炒我鱿鱼的日子。”</p>
<p>但是工作中每个人都很友善，很有耐心。遇到真的无法解决的问题我会去求助，渐渐地，我有了<strong>一点</strong>进展，还修复了一两个 bug。</p>
<p>我浏览代码库的速度越来越快，代码出错时，我读取堆栈轨迹的速度也越来越快，也能更快地发布新功能了。</p>
<p>每次老板叫我去办公室时，我都在想：“完了，这次没跑了，我今天就要被炒鱿鱼了。”但他只是给我更多bug来修，更多要开发的功能。谢天谢地。</p>
<p>最离谱的就在这了：我怕被解雇怕得要死，他却完全不知道怎么回事。</p>
<p>当然，我也听说过“冒名顶替者综合症”，但我没有意识到这件事会发生在我身上，我这肯定是得了“编程很烂”综合症，对吧？</p>
<p>有一天我坐在 Nick 旁边，看他好像很累，我去厨房给他拿了瓶汽水。</p>
<p>我回来后，他打开拉环喝了一口，靠在椅子上，盯着满是代码的显示器，“这个 bug 啊，哥们我花了三周时间来修，做梦都在调试。”</p>
<p>“三周时间修一个 bug ？”我问道。我从未听说过这样的事。</p>
<p>“有些 bug 更难修，这个就坏得很。”</p>
<p>这句话给了我当头一棒。我总是把我的任务按份处理，比如修一个 bug 要半天时间，超过了半天就肯定是我做的不对。</p>
<p>但是，有着加利福尼亚大学的计算机科学学位、多年同一代码库工作经验的尼克却在一个bug上困住了三个星期。</p>
<p>也许是我对自己太苛刻了，可能我修的一些 bug 不是“半天的 bug”，而是“两三天的 bug ”。是，我缺乏经验，工作也慢。但就算这样，我是不是给自己设立了不切实际的标准呢？</p>
<p>在开发新功能时，有的功能开发要 5 天，甚至是两周时间而修 bug 的时候没有这样的时间规划，但其实修复 bug 所需的时间也是不同的。</p>
<p>回家后，我深入了解了下“冒名顶替综合症”，也缓解了不少焦虑。</p>
<p>在接下来的几个月里，我还在为代码库构建新功能，与队友合作。虽然工作还是很难很费脑，但开始没有那么困难了。</p>
<p>每天午餐时，我都会和队友一起下棋。有一周有一个全公司的国际象棋锦标赛。</p>
<p>几轮后，轮到我和 CEO 对弈。</p>
<p>这位 CEO 的下棋风格很不一般，他开局开得很不好，少有棋手会做出这样的选择，最初我取得了领先。</p>
<p>但接下来的几步，他慢慢地夺回了比赛的控制权，最终占了上风，打败了我。</p>
<p>我问他在经营公司的同时，怎么还有时间保持棋艺精湛，他说：“没有，我一年只下一两次。”</p>
<p>他停顿了一会儿，手停着不动，好像准备开始演讲。他说：“我叔叔是一名优秀的棋手，他给了我一个简单的建议：<strong>“轮到你的对手时，放慢速度，试着从他们的角度来理解比赛——他们为什么要这么做？”</strong></p>
<p>他鞠了一躬，然后告辞去开会了。</p>
<p>这些年，我不停在想他说的话，我想他的建议不仅仅适用于国际象棋，也适用于任何对局。</p>
<h3 id="">重复任务就该自动化</h3>
<p>关于软件开发我还学到了一个经验。由于我是团队中资历最浅的人，就经常被分配到没有人愿意做的苦差事，其中一项任务就是“代码保姆”。</p>
<p>每当有人破坏了代码，我就会 pull 主分支的最新版本，并使用 <code>git bisect</code>来找到破坏代码的提交。</p>
<p>打开提交，运行测试，找出出错的地方，向破坏 build 的人发送消息，告知要修复的地方。</p>
<p>这套流程我做的飞快。在充满迷惑的 bug 报告和含糊不清的功能请求的一天里，我期待着 build 出错，这样只需要花上很短的时间，我就能感受到自己的价值。</p>
<p>没过多久团队中有人说：“build 出错的频率太高，应该自动化一下。”</p>
<p>我什么也没说，但产生了戒心。这可不是什么好主意，一个脚本怎么能像我这个有血有肉的开发人员一样找到有问题的提交呢?</p>
<p>但又过了几天，果不其然，队友随手写了一个脚本，我再也不用做代码保姆了。</p>
<p>收到 build 出错的消息，没过多久，又收到是哪个 commit 破坏了 build ，需要谁来修复，总感觉怪怪的。</p>
<p>我感到气愤，什么也没说，但心里想：“这是我的工作，脚本抢了我的活。”</p>
<p>当然，现在每每回想起自己的反应我都感到好笑。我想象着自己已经 40 多岁了，每周还要放下几次别的事情，来做代码保姆。</p>
<p>工作中，如果一项任务可以自动化，可以分解成计算机可以可靠完成的小步骤，那么就应该自动化。</p>
<p>你的时间应该留给更有趣的工作。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2023/01/is_it_worth_the_time_2x-1.png" alt="这张 XKCD 的图表，帮你弄清一项任务是否值得投入时间来实现自动化" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>这张 XKCD 的图表，帮你弄清一项任务是否值得投入时间来实现自动化</figcaption>
</figure>
<h3 id="">多听老人言</h3>
<p>我向团队里每个人都学到了很多。我从 Mike 那里学到了产品设计概念。他带我在沙滩上跑步，教我如何用前脚掌跑步，前脚掌先于脚跟着地，这样对关节更为友好。</p>
<p>从Nick那里我学到了敏捷软件工程（agile software engineering）的概念，他帮我从图书馆挑选了软件开发书籍，甚至还邀请我去他家参加乔迁派对，那次我见到了他的几个孩子。</p>
<p>在这家公司工作了大概一年时间，我觉得到了创业的时候了，我想要做与在线学习相关的内容。我找到CTO坐下谈话，把要离开的消息告诉了他。</p>
<p>我说：“很感激大家雇用了我，显然我是全公司最弱的开发者。”</p>
<p>他大笑着说：“当然，最开始你是团队中最烂的开发者，我得说，现在你还是团队中最烂的开发者。”</p>
<p>我坐在那里尴尬地笑着，朝他眨了眨眼睛，不知道他是不是因为我要离开而生气。</p>
<p>然后他说，“但这很聪明，你是个聪明人。你<strong>总是想成为乐队里最差的乐手</strong>，希望身边都是比你优秀的人，这样你才能成长。”</p>
<p>两周后，我检查了当天的代码更改，交接了我未完成的工作，把 Mac 电脑重置为出厂设置，交给了主管。</p>
<p>我和队友们握了握手，走出门，走在被夜幕笼罩的加州。</p>
<p>我全力以赴，争取签约自由职业维持收入。我在奥克兰物色了一套公寓，与旧金山市场南的科技中心隔桥相望。</p>
<p>我已经是一个有一年经验的专业开发人员了。</p>
<p>我已经准备好追寻新的梦想，采取新的行动。</p>
<p>我走向了创业之路。</p>
<h3 id="">开发者第一年的经验教训</h3>
<p>作为专业开发者的第一年，我做了很多正确的选择，我给自己打个 B-。</p>
<p>但如果有机会重新来过，有些选择会不同。</p>
<p>接下来是我的建议，希望这些建议能使你的学习效果最大化，减少你的烦恼。</p>
<h4 id="">丢下自负</h4>
<p>许多进入软件开发领域的人都是从最底层开始的，你可能会获得“初级开发者”的头衔。</p>
<p>人到中年，头衔里还有个“初级”总觉得有点尴尬。但只要耐心、努力，就能克服这一点。</p>
<p>每天我都面临的问题是：我有十年的专业经验了。我不是个入门员工。是，我是个开发新手，但我在教学与管理方面都经验丰富。（上一份教学工作中，我管理了 30 名员工。）</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>在某种程度上，这种感觉并没有不会消失，它总是在脑海中，在尝试做新的事情时随时蠢蠢欲动。</p>
<p>“能帮我处理这个错误信息吗？” “嗯……找我可能不太合适吧。”</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>你和他们有很多共事的时间，感觉成为了一个紧密的单位。</p>
<p>但请不要忽视周围的非开发人员。</p>
<p>前文中我提到了产品经理 Mike，他也负责创业活动。他“不懂技术”，在编码方面的知识有限，但我敢说我从他身上学到的东西和其他人一样多。</p>
<p>你可能会和其他部门的人一起工作——设计师、产品经理、项目经理、IT人员、QA人员、营销人员，甚至是财务和会计人员，从这些人身上也可以学到很多东西。</p>
<p>确实，你应该与团队其他开发者之间建立牢固的联系。但请保持好奇，在餐厅或公司活动中与不同的人一起活动，你永远不知道谁会是下一个帮你学习技能、建立人脉或声誉的人。</p>
<h3 id="">不要太舒适，也不要太早专攻</h3>
<p>我经常给第一次学习代码的人这样建议：“从一般的编码技能（JavaScript、SQL、Linux 等等）开始学起，然后专门从事这项工作。”</p>
<p>我的想法是一旦学会了最常用的工具，就可以学习那些不太常用的工具。</p>
<p>比如说，学会了 PostgreSQL，很容易就能学会 MySQL。学会了 Node.js，很容易就能学会 Ruby on Rails 或 Java Spring Boot。</p>
<p>但有些人在工作中太早专精了，老板可能会要求他们“专管”某个API或特性。如果在这方面做得好，老板可能就会继续给类似的项目。</p>
<p>你只负责管理自己，而老板在管理很多人，无法细致地了解你能力和兴趣，可能会把你看成“某专业人”，只给你安排相关的任务。</p>
<p>但你知道自己擅长什么，对什么感兴趣，可以尝试自愿走出舒适区。如果能让老板给你分配舒适区之外的任务，就能继续扩展技能，并可能与新的团队合作。</p>
<p>记住：老板要为你工作上的表现负责，而你要为自己的整个职业生涯负责。</p>
<p>接受那些既能履行对雇主的义务，又能为自己的长期职业目标做好准备的项目。</p>
<h2 id="epilogue-you-can-do-this">后记：相信自己，你能行</h2>
<p>在这里我只想留下一句话，那就是：<strong>你能够做到</strong></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>
<p>正如老子所说：</p>
<blockquote>
<p>“千里之行，始于足下。”</p>
</blockquote>
<p>读完这本书，你就已经迈出了一步，说不定已经朝着目标走了许多步。</p>
<p>一鼓作气，继续保持阅读这本书的势头。</p>
<p>现在就开始编写下一个项目。</p>
<p>永远记住：</p>
<p>你能够做到。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 掌握学习方法——作为开发者最重要的能力 ]]>
                </title>
                <description>
                    <![CDATA[ 具备高效的学习能力和编程能力同样重要。 作为一名开发者，即使你的精力被微信、微博、知乎（译者注：原文是 Hacker News,Twitter,Reddit,Facebook）分散，你每天在工作中都需要学习。 在上班的时候你经常会遇到新的代码库和技术挑战。回家看看开源项目和别人的作品，也需要你跟进他们的进度。 技术发展变化非常快，你会发现你无时无刻不在追赶着新的工具、语言、框架的潮流。 常言道：学如逆水行舟，不进则退。 在过去的一年里，我从一个连 Chrome 调试台都打不开的小白，变成了一个在一流电子货币加密公司的开发工程师，我非常快地掌握了编程的能力。 但是，学习对我来说并没有那么轻松。 坦白来讲，在学习的过程中充满了煎熬。有太多的未知和不确定。 “这样我怎么坚持的下去呢？”我想。 “要是每天学习写代码这么痛苦，我会疯掉的，看来我对编程并不感兴趣吧？” “要是我感兴趣的话不应该觉得轻松点么？艺术家搞创作的时候需要绞尽脑汁么？作家也会江郎才尽么？运动员也会遭遇瓶颈么？我们去做自己感兴趣的事情时都会觉得难受么？” “学习不该使我快乐么？” 学海无涯有捷径么？ 有 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/learning-how-to-learn-the-most-important-developer-skill/</link>
                <guid isPermaLink="false">5d3a9628fbfdee429dc5f346</guid>
                
                    <category>
                        <![CDATA[ 学习编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ 余博伦 ]]>
                </dc:creator>
                <pubDate>Mon, 28 Feb 2022 02:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/04/nick-morrison-FHnnjk1Yj7Y-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>具备高效的学习能力和编程能力同样重要。</p><p>作为一名开发者，即使你的精力被微信、微博、知乎（译者注：原文是 Hacker News,Twitter,Reddit,Facebook）分散，你每天在工作中都需要学习。</p><p>在上班的时候你经常会遇到新的代码库和技术挑战。回家看看开源项目和别人的作品，也需要你跟进他们的进度。</p><p>技术发展变化非常快，你会发现你无时无刻不在追赶着新的工具、语言、框架的潮流。</p><p>常言道：<strong>学如逆水行舟，不进则退。</strong></p><p>在过去的一年里，我从一个连 Chrome 调试台都打不开的小白，变成了一个在一流电子货币加密公司的开发工程师，我非常快地掌握了编程的能力。</p><p>但是，学习对我来说并没有那么轻松。</p><p>坦白来讲，在学习的过程中充满了煎熬。有太多的未知和不确定。</p><p>“这样我怎么坚持的下去呢？”我想。</p><p>“要是每天学习写代码这么痛苦，我会疯掉的，看来我对编程并不感兴趣吧？”</p><p>“要是我感兴趣的话不应该觉得轻松点么？艺术家搞创作的时候需要绞尽脑汁么？作家也会江郎才尽么？运动员也会遭遇瓶颈么？我们去做自己感兴趣的事情时都会觉得难受么？”</p><p>“学习不该使我快乐么？”</p><h2 id="-"><strong>学海无涯有捷径么？</strong></h2><p>有是当然有。学习新的编程知识是很难受的，因为它需要你自律和努力。</p><p>但你可以痛并快乐着。</p><p>怎么才能获得学习的快乐呢？</p><p><strong>很简单：</strong> 我改变了我对学习的看法。学习并不是困难的而是有趣的。</p><p>请容我在接下来的篇幅里娓娓道来。</p><h2 id="--1"><strong>万事开头难</strong></h2><p>学习写代码最难的就是开始。</p><p>试想一下你要学习的第一门编程语言。你首先要了解它的语法和格式。你还得理解值、类型、操作符、控制流、函数、高阶函数、作用域、闭包、递归等等……</p><p>这就好像是学杂耍——一上来就让你耍 18 颗球一样。</p><p>最早我用了好几个礼拜才理解了闭包到底是什么玩意儿。我读文档的时候感觉我理解了，当我准备应用一个闭包时，就又不知所措了。</p><p>这是很普遍的，作为一名老师我了解到：想要理解一个新的概念，往往需要你尝试一次、两次甚至更多。</p><p>但只要一个人坚持的足够久，总会有豁然开朗的时候。就像当我读完了无数有关闭包的博文、Stack Overflow 和文档之后的体验。</p><p>每一段我阅读过的材料都让我有了一些新的理解，直到最后我完全理解了闭包。</p><p>理解闭包对我来说意义深远，因为成就感鼓励了我继续前行，后来我甚至自己写了一篇解读闭包的博文。</p><h2 id="--2"><strong>学习是过程，不是结果</strong></h2><p>如果我们把“学习”视作我们必须完成的一件事，我们就会急功近利。这样我们才能赶快完成好在课余时间去玩玩别的。</p><p>只可惜学海无涯，学无止境。要是你把学习当作一场赛跑，你永远也到不了终点，反而会带来失落和失望。</p><p>相反，如果你把学习理解为一种过程，你就能体会和感受到一点一滴的进步，这也将鼓励你继续前行。</p><p>学习就好像锻炼一样。太剧烈了会受伤，你的伤痛会一直持续，甚至恢复之后你也忘却不了那种痛苦。以后每次运动的时候你都会记起。除非你每次的痛苦都能得到缓解，你慢慢的习惯和适应了它。最后你获得了强健的体魄和有型的身材，这也将鼓励你继续锻炼下去。</p><p>运动是一个积极效应的循环：</p><p>这在学习上也同样适用。</p><h2 id="--3"><strong>学习可以渐入佳境</strong></h2><p>试想你在构建你的第一款 Web 应用。</p><p>最一开始你只能面对一屏幕空旷的代码编辑器。开发工作对你来说像是不可能完成的任务。你什么都不懂，在你真的能开发出来个什么玩意儿之前还有太多东西要学。</p><p>令人欣慰的是，你还是勇敢的去尝试了。</p><p>从现在开始，你每次只关注和完成一个小点。</p><p>首先是构思你的应用。你要做个什么出来？目标用户是谁？有什么困难?</p><p>之后，你开始画一些你脑海里构思的草图。并拿给你的朋友或者发到网上给别人看，再慢慢改良它。</p><p>再然后，你去搜索那些最适用你开发这个应用的工具、框架、语言。</p><p>脚踏实地的，你绞尽脑汁去完成你的目标。</p><p>有时候你可能写写代码。</p><p>更多的时候是在处理Bug和暂时解决不了的难题。</p><p>有时候你实在烦的不行，那就休息一下。</p><p>或者别的时候你不想写代码，但是可以去看看相关的文章资料。</p><p>最后，经过几周的努力，你终于为你的构想打好了基础。这时，开发你的应用感觉上就不那么痛苦了。你从之前的努力中获得了成就感，接下来你只需要完善功能就好了，就像你之前已经做过无数次那样，这根本就不是事儿。</p><p>你把一项令人痛苦和胆怯的工作转换成了循序渐进，享受其中的工作。</p><p>这就是成长，这就是进步。不管是编程、跳舞、跑步、阅读：他们都不轻松，而且学习是没有止境。</p><p>你要享受你付出其中的过程，享受随之并来的痛苦。你慢慢会理解到那不能称得上是痛苦——而是一种个人努力的成就感和自我满足。</p><p>换句话讲，煎熬和享受都是相对的。记住这个循环：</p><h2 id="--4"><strong>一种学习技术的方法</strong></h2><p>下面我介绍一种我所掌握的学习方法。可这并不是什么终极秘籍，如果你有不同的意见，可以在评论区提出。</p><p>我们拿如何学习 <a href="https://link.zhihu.com/?target=http%3A//reactjs.cn/" rel="nofollow noreferrer">React</a> 来举例。</p><h3 id="--5"><strong>明确你学习的目的</strong></h3><p>首先：我要先搜一下有关 React 的文档，了解一下这个框架的背景和它想解决的问题。</p><p>明确“为什么”对于你的学习是非常有帮助和意义的，他回答了下面这些问题：</p><ul><li>它的独特之处在哪里？</li><li>学这个对我有用么？</li><li>它主要是为了解决什么问题？</li><li>它只是昙花一现哗众取宠的小玩具，还是能够从此改变我对编程的理解？</li></ul><h3 id="--6"><strong>了解核心概念</strong></h3><p>其次：我会认真读完文档里的介绍和示例。</p><p>到目前为止我还没有上手尝试。阅读一项技术的核心概念一定要在动手实践之前。这对你之后的学习至关重要。</p><p>这也使我避免了在不知道 React 是个什么玩意儿的情况下就稀里糊涂地用它，搞堆Bug出来。</p><h3 id="--7"><strong>尝试编码</strong></h3><p>之后，当我有一种我已经了然于胸的感觉时，就是我上手实践的时候了。</p><p>我开始跟着视频教程试着用这种新框架编写一些非常简单的小东西，或者跟着文档里的教程指引写写代码。</p><h3 id="--8"><strong>遇到坑</strong></h3><p>我不可避免地会掉到坑里。</p><p>读文档当然小菜一碟，可是自己实践的时候就完全不知所措。</p><p>这时我开始有半途而废的念头。但遇到困难正是应该迎头而上的时刻。没有付出哪儿有回报。只有懦夫才会放弃！</p><p>接下来我开始做这些事：</p><ol><li>首先我需要确定一下我到底遇到了什么 Bug，之后假设几种导致它的可能性，即使我还不太了解，猜猜也罢。</li><li>接下来离开电脑跟前，稍微放松一下换换心情换换气。可其实心头上总是难以放下那个我没有解决了的问题。</li><li>接下来我根据我的假设开始调试——而不是直接去网上搜答案。要知道，全凭自己的思考获得答案是一种非常难能可贵的体验。即使你犯了很多错误，它也能加深你的印象好下次不再犯。</li><li>如果我的假设被验证了，那么万事大吉！反之，我就会去搜文档，博客，或者 Stack Overflow 或者任何其他可以辅助我的资料。</li><li>当我阅读这些资料的时候，我会把那些可能帮到忙的信息记录下来。</li><li>还是没有办法?没关系，即使我搜的这一大堆资料对解决目前的问题没有帮助，我也通过阅读学到了很多，而且它们也有可能解决我之后会遇到的问题。</li><li>直到这时，我才会在知乎上提个问题（译者注：原文为 Stack Overflow）或者问问同学同事。</li><li>与此同时，我会不断地重复研究这个问题，它总有被解决的时候。</li></ol><p>有时候这个过程可能只需要几秒，而有时候需要几个小时甚至更久。无论怎样，在这个过程中你都能学到很多东西。</p><p>在编程中解决 Bug 就好像在隧道里寻找射灯一样。你总会找到它，可是沿途你会发现和了解更多有关隧道的信息。在学习上，这些了解正是你的收获。</p><p>调试错误其实是一个了解和发现的过程，享受它吧。</p><h3 id="--9"><strong>温故而知新</strong></h3><p>在学习的过程中，我开发了一些简单的小东西，跨过了一些坎。就像你所了解的，这过程肯定纠结，我需要用这个新工具进行更多实践。</p><p>所以接下来我会在开发一些练手小项目。不是好高骛远地去搞一个大项目，而是做一些可以构建我应用的基础模块。</p><p>例如我在网上看到一个用 React 写的有增删改查功能的待办事项应用。那么我可以做一个另外一种形式的增删改查的，确保我能根据参考项目的逻辑写出来的，而不是可能会出错让我受挫的应用。</p><h3 id="--10"><strong>掌握</strong></h3><p>熟能生巧，所以我不停地构建小项目，知道我感觉我已经掌握了它的核心概念。</p><p>最后，我开始试着不看文档和示例把所有的知识梳理起来。直到这时，我才会开始完全独立地做自己的项目。</p><p>在整个学习过程中，我不断地挑战稍微难一些的任务，但也不至于难道打击的我不想干的程度。</p><p>最后，我会在这项学习让我厌恶之前，赶快转移注意。</p><h2 id="--11"><strong>学习使你快乐</strong></h2><p>通过一些努力和方法，学习编程可以变得非常有趣。最初它看起来很复杂，我想这也是为什么很多人不敢开始的原因——并不是因为它无聊，而是因为它困难。</p><p>通过不断地联系这种学习方法，它将会形成一种肌肉记忆。你不用太努力去想它。你只需要驾驭挫折和享受成就。</p><p>就好像变魔术一样，学习变得轻松多了。</p><p>你是如何学习掌握新知识的？欢迎留言分享！</p><p>原文链接：<a href="https://www.freecodecamp.org/news/learning-how-to-learn-the-most-important-developer-skill-7bf62dfaf67d/">Learning How to Learn: The Most Important Developer Skill</a>，作者：Preethi Kasireddy</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ freeCodeCamp 2021 年新开发者调查——超过 18,000 人分享他们学习编程的方式和原因 ]]>
                </title>
                <description>
                    <![CDATA[ 超过 18,000 人填写了 2021 年 freeCodeCamp 新开发者调查问卷（2021 freeCodeCamp New Coder Survey）。这使我们能够深入了解世界各地的人们是如何学习编程的，以及他们为什么要学习编程。 问卷包含 49 个问题。我们已经在 Open Data Common 许可证下将整个反馈的数据集发布在 GitHub [https://github.com/freeCodeCamp/2021-new-coder-survey] 和 Kaggle [https://www.kaggle.com/fccuser/2021-new-coder-survey]。 在接下来的几个月里，众多数据科学家、数据爱好者和研究人员（包括我自己）将深度挖掘这些数据，分享更多和编程学习者相关的洞察。 在这篇文章里，我将分享新开发者们目前的状态。我将关注他们是谁、他们如何学习编程、他们的职业目标是什么。 本文的后半部分会介绍我正在进行的定性研究的一些洞察，分享新开发者正在采用的一些学习策略。 新开发者们是谁 新开发者们生活在世界各地。 居住在美国的新开发者并不 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/2021-new-coder-survey-18000-people-share-how-theyre-learning-to-code/</link>
                <guid isPermaLink="false">61b02650f942e1068cb34c45</guid>
                
                    <category>
                        <![CDATA[ 学习编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Wed, 08 Dec 2021 07:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/12/pexels-christina-morillo-1181472.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>超过 18,000 人填写了 2021 年 freeCodeCamp 新开发者调查问卷（2021 freeCodeCamp New Coder Survey）。这使我们能够深入了解世界各地的人们是如何学习编程的，以及他们为什么要学习编程。</p><p>问卷包含 49 个问题。我们已经在 Open Data Common 许可证下将整个反馈的数据集发布在 <a href="https://github.com/freeCodeCamp/2021-new-coder-survey">GitHub</a> 和 <a href="https://www.kaggle.com/fccuser/2021-new-coder-survey">Kaggle</a>。</p><p>在接下来的几个月里，众多数据科学家、数据爱好者和研究人员（包括我自己）将深度挖掘这些数据，分享更多和编程学习者相关的洞察。</p><p>在这篇文章里，我将分享新开发者们目前的状态。我将关注他们是谁、他们如何学习编程、他们的职业目标是什么。</p><p>本文的后半部分会介绍我正在进行的定性研究的一些洞察，分享新开发者正在采用的一些学习策略。</p><h2 id="-">新开发者们是谁</h2><p>新开发者们生活在世界各地。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-4.png" class="kg-image" alt="image-4" width="600" height="400" loading="lazy"></figure><p><br>居住在美国的新开发者并不都是来自技术中心区域：</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh4.googleusercontent.com/VRdm3EySzUjmHKZ-OWm8ajt5d2BNZL3-0TOYWa6LE6KlIS-u3uYK2RFsy9qrOPfkaGNUlAYjwaEBnZtfS3XBl-TG6GINbQeqnlnEGXSJbqlpQkMeV9h-_xxetgn-yY8v-fHw76Q" class="kg-image" alt="Chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>他们的年龄中位数为 25 岁，大约 70% 的新开发者是男性。</p><p>以下是全球新开发者的种族和民族分布：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-6.png" class="kg-image" alt="image-6" width="600" height="400" loading="lazy"></figure><p>这是居住在美国的新开发者的种族和民族分布：</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/0_qyRqIL3ZMbEqG67LRKqQDJATfmFy5ERRFh_gltq7GD1s_8uGLsaBaBQs2Y9-F8oneb0jVO8m5GBvI9ffBEjzFvQ6NrPrRkIUEl-9fzt7QJ6xHxSD8HZUKg4cMr1TWhHgdXqZY" class="kg-image" alt="Chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>编程经验少于 5 年的人们平均的编程时间是 9.5 个月，中位数为 3 个月。他们每周花在学习上的平均时间是 8 小时。</p><p>只有 10% 的人已经在从事开发工作。还未从事开发工作的人中大约 90% 的人感兴趣获得开发工作。</p><p>在对开发者职位感兴趣的人中，约有 33% 的人已经在应聘或计划在未来 6 个月内应聘开发者职位，而 31% 的人尚未决定。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-7.png" class="kg-image" alt="image-7" width="600" height="400" loading="lazy"></figure><p>他们中的大多数人都愿意搬迁，或者会考虑搬迁。</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/UKHlGZNMjjvFxgR-78sS35mF-el9XpeauhvSNCJw6KF08raYhVCkzMRG2xb6Lhs-Fa8Wp6q8jDc0Oc6MLDBPbQtsPaQHbEdDdf8J3TvZgbJpHhaeRdm8Dwje31e7XI8dMlwdnV0" class="kg-image" alt="Chart, pie chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>至少 45% 的新开发者目前正在工作。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-8.png" class="kg-image" alt="image-8" width="600" height="400" loading="lazy"></figure><p>43% 的新开发者至少拥有学士学位。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-9.png" class="kg-image" alt="image-9" width="600" height="400" loading="lazy"></figure><p>只有 20.5% 的新开发者就读了计算机科学、计算机工程或软件工程专业。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-10.png" class="kg-image" alt="image-10" width="600" height="400" loading="lazy"></figure><h2 id="--1">新开发者们如何学习编程</h2><p>新开发者们在学习编程时使用最多的是在线资源。以下是他们使用的一些资源：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-11.png" class="kg-image" alt="image-11" width="600" height="400" loading="lazy"></figure><p>他们发现最有用的在线资源是：</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/c3d_mtogiWQH4sP8l3_FC-ctqbAeDwqGzvLnHqzO5-p8DsYEeohtpqHlDZpWOWBUYE74lN-nXupva3m6xPTqrH1sKR73NMjwSFlQ-DZe0MFJqKcxyWMImrg2HN3BTRdOCExsx0E" class="kg-image" alt="Chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>新开发者们最喜欢的与编码相关的 YouTube 频道是：</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/27zGffQmm8_lncNcgUZA7-KX-GEIZ4OXL-n-0AyIdLby2ONHQRrF6L3cbbgHis46Vebz6H-WW-QrRsCGU4KOBPhCATHoMACBKsMcCn0kTg-EIqCoFqmC2GFHZUT7KJikKWjwq70" class="kg-image" alt="Chart, bar chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>1,831 名新开发者跟我们分享了自己最喜欢的编程类播客，前五个播客是：</p><ul><li>Code Newbie Podcast</li><li>Learn Code With Me</li><li>Syntax.fm</li><li>Darknet Diaries</li><li>Talk Python to Me</li></ul><h2 id="--2">人们为什么要学习编程</h2><p>超过 2/3 的新开发者学习编程是为了转行、创业或找到第一份工作，或者成为自由职业者。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-12.png" class="kg-image" alt="image-12" width="600" height="400" loading="lazy"></figure><h3 id="--3">新开发者对职业的期望</h3><p>我们要求大家选择他们对软件开发职业感兴趣的最多 3 个原因。以下是主要原因：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-13.png" class="kg-image" alt="image-13" width="600" height="400" loading="lazy"></figure><p>大约 55% 的人希望在跨国、中型或初创公司工作，而 28.5% 的人希望成为自由职业者或自己创业。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-14.png" class="kg-image" alt="image-14" width="600" height="400" loading="lazy"></figure><p>在对软件开发职业感兴趣的人中，超过 1/3 的人对全栈开发感兴趣。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-15.png" class="kg-image" alt="image-15" width="600" height="400" loading="lazy"></figure><p>超过 93% 的人希望每周至少有一天在家工作。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-16.png" class="kg-image" alt="image-16" width="600" height="400" loading="lazy"></figure><p>对于自己的第一份开发工作，新开发者们的期望年薪是多少？</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/KExh1qaCSUhobWcVZnqk54t9fcrjbERGpXUMpOCN5HnDdjM5rLXeoMRvJOPnCKR1ax7SCHtfBeTdPDe68KHEKWgIson4lBjTqQZBfgJGAvW-tlFaHzTPwGURASM-X2OxJUf4GEU" class="kg-image" alt="Chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>在美国，39.5% 的新开发者希望在他们的第一份开发工作中赚取 5 万美元到 7.5 万美元的年薪。</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/vRgN0Dohb6F98TW1HsCtS7ILO0Jymb7FM2l5lLig9VyBVasxs9ltdhT4JpXP2i72W_HF8EBwqqFInpyfFmDjD9zAOBjSxrYgpI5Jm1EiEXRE-_yxVPiMeMK9PFw6oMKPAZOtS2g" class="kg-image" alt="Chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><h2 id="--4"><strong><strong>新开发者们目前的职业</strong></strong></h2><p>目前在职的新开发者们都在哪些行业？</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2021/12/image-17.png" class="kg-image" alt="image-17" width="600" height="400" loading="lazy"></figure><p>至少 51% 的人没有足够的储蓄来维持 3 个月没有收入的生活。</p><p>这是他们去年的收入：</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/aDMQTNfh_XSo1ULyAGo03_46ueo0Ehe9TJ58rQiz6LqEJNFSxKJta8InwMpUg-FmScCqFzIeYNWU2YoPGpmClZ_gBdwneV8h4ZuIS77MMAFeUmdT7wsO9dpQB0fn___r2hCMGPQ" class="kg-image" alt="A picture containing chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><p>这是居住在美国的新开发者们去年的收入：</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/7hHneVfgUrhLqTN_xrXigdY-PS1BhfjdKGxTx8jdekiDeTiCxGcd3EJW85hPToNVgwMe_8aQo75VduP44oxjKcyP9eYrc16NRS9gKx4D8kgLNyKoMxlnQ9wL0jLzcrSGNmMx7pI" class="kg-image" alt="Chart, bar chart

Description automatically generated" width="600" height="400" loading="lazy"></figure><h2 id="--5">关于新开发者的更多统计数据</h2><p>对于大约 60% 的新开发者来说，英语是他们的第二语言。</p><p>22% 的人在自己的国家是少数民族。</p><p>约 75% 的人生活在大城市。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-128.png" class="kg-image" alt="image-128" width="600" height="400" loading="lazy"></figure><p>72% 的人是单身，没有结过婚。</p><p>82% 的人没有孩子。</p><p>17.5% 的人家里的网络情况不好。</p><p>5.6% 的人曾在自己国家的军队服役。</p><p>2.5% 领取伤残津贴。</p><h2 id="--6">定性研究的洞察</h2><p>有些读者可能已经知道我在波士顿大学攻读社会学博士学位。许多新开发者慷慨地同意与我分享他们的编程之旅，这个内容将作为我的博士论文的一部分。</p><p>因此，在过去的五个月里，我有机会与美国各地的人们见面聊天。他们在没有计算机科学相关学位的情况下学习编程。</p><p>作为一名混合方法研究人员，我重视将调查统计数据与定性访谈的深入洞察相结合的社会科学。</p><p>不过，需要注意的是，定性数据需要太多时间来收集和分析——特别是如果你喜欢观察随着时间的推移而发生的变化，就像我一样。然而，我写这篇文章是为了描述关于新开发者当前状态的高层次分析，我忍不住添加了一些关于他们学习策略的定性研究洞察。</p><h3 id="--7">新开发者如何找到时间学习</h3><p>许多新开发者都有全职工作和/或照顾孩子和其他家属的责任，那么他们如何腾出时间学习编程呢？</p><p>学习编程确实需要适应力、努力和牺牲。事实证明，凌晨 4 点起床并在忙碌的一天之前练习编程的情况在新开发者中并不少见。他们还倾向于将任何暂停的时间用于编程：</p><blockquote>“……我会利用通勤时间，我也会乘火车上班，所以当我在火车上时......只学一些小的课程或者做小的测验。”</blockquote><blockquote>“我起得很早，我通常在凌晨 4 点左右醒来......有时在午餐时，我通常有 30 分钟到一个小时的午餐时间。我会吃得很快，我可以使用手机或笔记本电脑，有时甚至可以一次练习 10 或 15 分钟的编程，有时只有 5 分钟。”</blockquote><p>有些人甚至采用更有创意的方法来腾出时间学习。Barb 是两个蹒跚学步的孩子和一个 5 岁孩子的年轻母亲，她最近也从新冠中康复，她将学习、儿童保育和康复整合到一项活动中：</p><blockquote>“每当我阅读时，我都会大声朗读。我需要做肺康复。所以，这真的很棒，你知道，一石三鸟。因为它可以帮助我学会更自然地说话和调整自己的节奏。而且，这也有助于培养孩子的早期识字能力。当他们上幼儿园时，已经比其他孩子多听了 140 万个单词。这个方法可以帮助我真正坐下来学习，因为我不仅在为我读书，我还在为他们读书。我们开始讨论一些有趣的话题，他们吸收的东西比我想象的要多。”</blockquote><h3 id="--8">新开发者在构建什么项目</h3><p>新开发者的第一个项目是他们新获得的技能和长期兴趣和专业知识相结合的产物。</p><p>他们构建的项目范围从为副业创建交互式网站到构建音乐、心理健康或自然冒险应用程序。</p><p>Henry 将他对 Python 和骰子游戏的兴趣与跟 7 岁女儿共度美好时光的乐趣结合在一起。由于新冠疫情而休假几周，父女俩开始创建一个简单的骰子游戏，并在几周内不断修改和开发：</p><blockquote>“我的意思是，这是你一生中见过的最基本的事情。然后我们将一些代码更改为更具交互性。你知道，我们加入了一些声音和音频，然后尝试整合一些这样的视频，很有趣，而且我真的很想尽可能多地学习一切。”</blockquote><p>如果你曾听或读过软​​件开发人员谈论他们的工作，那么你已经熟悉“我喜欢解决问题”这句话了。</p><p>我与之交谈过的新开发者们也喜欢解决问题，但他们也喜欢做其他事情：基于不同的背景、兴趣和专业知识，他们认识到以前没有认识到的现实问题。</p><p>拥有语言学和哲学背景的 Kevin 对语言学习应用程序有了新的认识。他的应用语言学知识使他能够以不同的方式处理单词匹配算法，以改善第二/第三语言的学习体验。</p><p>Barb 热衷于构建的项目是她为儿子编写的一个游戏，当她发现读书可能不是他学习的最佳方式时，她可以帮助他更好地学习。这个方法奏效了！它也适用于许多其他孩子。</p><p>我很高兴继续关注这些新开发者，并看到他们的观点对我们使用的技术和产品做出贡献、重塑和改进。</p><h2 id="--9">即将推出更多内容</h2><p>这里调查结果仅代表一些描述性分析。我们想尽快与你分享调查问卷，而且还有很多事情要说！</p><p>我将继续进行调查，进行更多的统计分析，并将与你分享我的洞察。但是，如果你是数据爱好者，请不要等我，你可以自己作分析，并与我们分享！你可以访问 <a href="https://github.com/freeCodeCamp/2021-new-coder-survey">GitHub</a> 或 <a href="https://www.kaggle.com/fccuser/2021-new-coder-survey">Kaggle</a> 上的数据集。</p><p>如果你对我的研究以及描述性分析之外的定性结果感到好奇，请继续关注，我需要时间来完善。</p><p>感谢所有参与此次调查的人们，他们非常慷慨地与我分享他们的经历。我越来越接近回答一个很多人想知道的问题：<strong>成为一名自学成才的开发者需要什么？</strong></p><p>原文：<a href="https://www.freecodecamp.org/news/2021-new-coder-survey-18000-people-share-how-theyre-learning-to-code/">The 2021 New Coder Survey – More than 18,000 People Share How and Why They are Learning to Code</a>，作者：<a href="https://www.freecodecamp.org/news/author/dilan/">Dilan Eren</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何成为一名出色的开发者，提升你的编程技能 ]]>
                </title>
                <description>
                    <![CDATA[ 技术领域充满无尽的挑战。 你会的构架会改变。你最熟悉的工具会进化。有的技术正流行，有的技术已落后。你会因为兴趣改变而投入到一个新的技术领域。 在工程行业工作代表着你会一直学习新的东西，保持新鲜的技能。 5年前，Angular 是非常受欢迎的。大部分的前端工作都想要 Angular 的技能，现在市场变了。 React 超越所有前端构架，成为最火红的新技术。 5年前，Rails 是非常受欢迎的。 现在职务描述里出现频率最高的是 Node 和 Python。 保持新鲜的技能是主要元素之一，那会让你在众多的工程师当中脱颖而出，营造一个持久的事业生涯。 我还记得我当时看着所有我要学的东西，大家讨论我不懂的新技术，我会非常沮丧。 每次我感觉我可以胜任一个构架的时候，就会有另外一个变得更受欢迎。 我感觉我永远都赶不上。 但是那也是做工程师最好的部分 —— 你永远不会感觉到无聊。那也是一个可以帮助你在竞争里脱颖而出的工具。 开发者的学习方式和你在学校学习的方式是完全不一样的。会有一些阅读，一些课程。但大部分时间应该用来构建项目。 从实践中学习 小时候，你是从实践中学习。 你先学会 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/become-a-standout-developer-and-accelerate-your-coding-skills/</link>
                <guid isPermaLink="false">5ffbfdfc39641a0517d53908</guid>
                
                    <category>
                        <![CDATA[ 自我提升 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 学习编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jenny ]]>
                </dc:creator>
                <pubDate>Mon, 11 Jan 2021 07:32:49 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/01/photo-1588364384672-560e33514629.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>技术领域充满无尽的挑战。</p>
<p>你会的构架会改变。你最熟悉的工具会进化。有的技术正流行，有的技术已落后。你会因为兴趣改变而投入到一个新的技术领域。</p>
<p>在工程行业工作代表着你会一直学习新的东西，保持新鲜的技能。</p>
<p>5年前，Angular 是非常受欢迎的。大部分的前端工作都想要 Angular 的技能，现在市场变了。 React 超越所有前端构架，成为最火红的新技术。</p>
<p>5年前，Rails 是非常受欢迎的。 现在职务描述里出现频率最高的是 Node 和 Python。</p>
<p>保持新鲜的技能是主要元素之一，那会让你在众多的工程师当中脱颖而出，营造一个持久的事业生涯。</p>
<p>我还记得我当时看着所有我要学的东西，大家讨论我不懂的新技术，我会非常沮丧。</p>
<p>每次我感觉我可以胜任一个构架的时候，就会有另外一个变得更受欢迎。 我感觉我永远都赶不上。</p>
<p>但是那也是做工程师最好的部分 —— 你永远不会感觉到无聊。那也是一个可以帮助你在竞争里脱颖而出的工具。</p>
<p>开发者的学习方式和你在学校学习的方式是完全不一样的。会有一些阅读，一些课程。但大部分时间应该用来构建项目。</p>
<h2 id="">从实践中学习</h2>
<p>小时候，你是从实践中学习。</p>
<p>你先学会讲话，虽然不是完整的句子。从做中学会画画。你婴儿的时候没有读过有关的书籍。你没有读过“婴儿手指绘画101教学”。</p>
<p>你通过练习学会走路。这才帮助你快速驾驭新的概念。你永远都在 —— 做。</p>
<p>在工程领域，你是通过构建项目来掌握概念的，而不是通过死背。</p>
<p>当我刚开始做工程师的时候，我不断阅读书本和做抽认卡。我用了无数的时间制作抽认卡。我以为买了一本新书或网上课程就会教会我自己怎么编程，然后变成工程师巨星。但是这并没有发生。</p>
<p>回想起来，我不确定那些抽认卡会有什么作用。</p>
<p>花了几个月时间熟背句法和定义, 我还是在原地。 只有开始构建项目的时候，技能才开始进步。</p>
<p>在热爱阅读工程书籍的同时，我大部分的时间会花在略读一本书，然后立刻尝试新的概念。</p>
<p>这是一个比较痛苦的学习方式。我不会骗你 —— 挺可怕的。 但是没有什么能像亲自构建项目一样帮助你提升编程技能。速度最快的学习方式就是构建项目。</p>
<p>但你怎能办到呢?</p>
<h2 id=""><strong>逃离教学地狱</strong></h2>
<p>当我学习怎么编程的时候， 我花了几个月的时间跟随网上教学。 我会一边看教学，一边跟着每个步骤的做。 永远都不会试着靠自己。</p>
<p>如果教学太难的话，我会换另外一个。我会每天花几个小时再看教学。</p>
<p>我尝试过用我在大学学习的方式用在编程里。但并没有用。学习编程是要活跃的学习，不是被动式的。</p>
<p>但是模仿网上教学挺容易的。我永远都不会觉得愚蠢或感觉到冒牌者症候群。我会最终觉得很有成就感。</p>
<p>与此同时，我会盲目的跟随着影片，而不会学到任何东西。我不会逼迫自己。如果你想要学一门新的技能的话， 你一定要逼迫自己往前进。</p>
<p>6个月过去，徘徊在教学地狱里面，享受着那里的温暖气候，舒适圈。我发觉到我没有学到任何东西。我没有任何的技能。我太重视抽认卡和被动式得看网上教学，多过于构建任何东西。</p>
<p>与此同时， 早已经开始构建项目的朋友们会在我身旁略过，他们的学习速度快到难以置信。</p>
<p>我会感到很沮丧。我连写一个基础的程序都不会。如果不是跟着一个教程的指导一步一步地做，我真的不会。直到我开始写小型的程序，我才被点醒。</p>
<p>若感到舒适的时候，马上远离网上教学。教学只是刚开始的时候才好。但是，到某一个程度，那只会把你的学习缓慢，特别是如果你是太过于依赖的话。</p>
<p>这可以应用在你整个事业的旅途。如果你是一个初级工程师，选一个小小的方案。不要用网上教学。尝试自己了解怎么建设。不要气馁，不成功没关系！从小方案开始做起来。</p>
<p>还有，如果你是一位拥有很多年经验的工程师，而想要从后端工程转做机器工程话，选一个小方案开始编程吧。</p>
<h2 id=""><strong>持续学习</strong></h2>
<p>另一个可以让你变成一名出色的开发者的技能是当一个永久学习者。</p>
<p>当你刚开始学习编程的时候，每天的素材非常多。你不断的吸取新的概念。要学的知识好像无止尽似的。</p>
<p>在理想的世界里，无论你当了工程师多久，你还会永远学习新东西。始终会找到平衡的。</p>
<p>你会开始觉得在工作上变得很舒适，然后抱怨自己的技能怎么好像凝滞似的。 很快就会感觉到无聊。</p>
<p>保持技能敏锐会帮助你工作稳固，就算经济不好的时候。</p>
<p>以下是几个可以让你永久学习的方法。</p>
<ul>
<li>写编码，常写</li>
<li>跟比你优秀的开发者合作</li>
<li>如果感觉被耽误的话，要求在工作上换队伍</li>
<li>为开源项目做贡献</li>
<li>参加会议和讲座</li>
<li>定期邮件</li>
<li>开始在 Twitter 跟开发者交流</li>
<li>不断的阅读</li>
<li>构建项目</li>
<li>考新的文凭</li>
<li>网上课程</li>
<li>休息。年休假是不可以带到棺材里面的。</li>
<li>阅读部落格</li>
<li>找导师</li>
<li>分享知识</li>
<li>写部落格</li>
</ul>
<p>以上会有些是你不可以在你空挡的时间做的。没关系。 我们都会有私生活。专住在工作上学习，像换团队，找导师，或成为一位导师，等等。</p>
<p>成为一位出色的工程师不代表要无时无刻的编程。编程是一个工作。这是你朝九晚五的工作。但是你可以选择在你工作上成为一个建设者。</p>
<p>当你在学新技能的时候， 远离书籍和课程。尝试在工作上找一个任务可以用的上你想学的新技能。这样会帮你快速的学会。</p>
<h2 id=""><strong>适应非舒适区</strong></h2>
<p>在学习新技能的时候，你要逼迫自己。让你适应非舒适区。</p>
<p>当工程师前，看教学感觉很容易。我会很少感觉到疲倦。我会用 Codecademy 和其他频道，然后觉得我有进步。但是我并没有。</p>
<p>6月过后，比起刚开始的编程路程里，我并没有前进。 我还是很初级。</p>
<p>当我刚开始担任初级软件工程师的时候，我是在一个持续的恐惧状态。我感觉我有做不完的工作。那是一个很恐怖的感觉。我突然间比以前学快很多。我脑袋像一个海绵一样。</p>
<p>寻找机会成长。你如果继续做同样的事情的话和待在舒适圈，你永远都寻找不到机会成长。你如果做同样的任务和继续地做同样的事，你不会推自己向上和成长。</p>
<p>保持“自不量力”。 你如果花所有的时间看网上教学，你会感觉到轮回而不会觉得有挑战性。你也不会觉得正在学习。</p>
<p>但是，你如果选择强迫自己，你会学得比较快。觉得不习惯就到表正在成长。</p>
<p>就像学钢琴一样，你如果不停重复练习同一个你已经很熟练的曲子，你是不会进步的，因为你要学一些比较有挑战性的曲子。</p>
<p>同样的逻辑可以放在人生的其他阶段。</p>
<p>当我在找我第一份开发者的工作的时候，选择有在 Apple 的一个职位或新兴小型企业当学徒。</p>
<p>Apple 的那一份工作薪水比较高，我也认识几个朋友在那里工作，相对来说我已经有一个朋友圈和支持系统。但是，那职位是一半 QA 一半工程，如果做的好，会有机会转到全职工程师。</p>
<p>那个新兴小型企业的工作是非常的不稳定。没有任何保证。公司里没有另外一个女工程师。我是在工程团里唯一的女生。</p>
<p>我还没有提到那不是一个工作邀约！那只是当学徒 3 个月，之后不保证会录用我。我要搬进城市里，签一个租约，如果当学徒失败的话，还要负担租金。</p>
<p>那时候是编程训练营最澎湃的阶段。当时有非常多旧金山的毕业生，所以他们都面临了市场最饱和的时期。很多招聘都会常常写着‘拒招训练营毕业生’，情况让人非常的沮丧。</p>
<p>我知道如果我在 Apple 工作的话, 会对我的简历非常好。 我也会赚比较多钱。但是我不停的思考小型企业可以带给我的成长和指导机会。</p>
<p>我真的不知道该怎么办。 在训练营的时候，我一直都被灌输一个概念，就是会得到高薪水的开发者工作。不是一个低薪水和没保障的学徒经验。</p>
<p>我始终答应了3个月的学徒期。我大部分的朋友都以为我疯了。我家人也觉得我疯了。</p>
<p>我突然要在3个月内在学徒期证明自己。我很快就有数不完的周末和夜晚都在工作中度过。我吓坏了。</p>
<p>这里速度非常快。我不可置信我会的东西有多么的少。有几天，我紧张到我快要请病假了。 我幻想火车会延迟，让我可以不用上班。每一个会议都是折磨，因为我会觉得我做得不够。</p>
<p>与此同时，跟我读同一个训练营的朋友都会跟我讨论他们在 Apple 轻松工作，他们每天都有合理的工作时间。更不用提他们还赚得比我还多！</p>
<p>2个月过后，我经理想要跟我开会商量学徒期的事。我当时深信他们会开除我。</p>
<p>他们反而告诉我会提前一个月结束学徒期，给我一个全职工程师的职位。我没办法形容我那天有多开心。</p>
<p>我继续把自己投身于工作里面。我会义务去做一些我没把握的任务。我如果不懂怎么做一些事，我还是会说我可以。一年半后，我在同一个小型企业里成为了一位资深的工程师。</p>
<p>若是答应了 Apple 的那一份工作会比较容易吗？肯定会。但是答应做那 Apple 工作的工程师永远都不会像我这样有一个好导师逼迫他们自我挑战，提升技能。</p>
<p>长期来说，他们会花更多时间来弥补早期失去的学习机会。有一些几年后还在同一个职位。</p>
<p>根据你的目标，那可能对你来说很好。没问题。但是，我是要成为一个出色的开发者，并且拥有非凡的事业。我猜如果你正在阅读这篇文章的话，你也是如此的想。</p>
<p>答应小型企业的工作会很冒险吗？肯定会。很多人都觉得那不是一个好策略。但是，我选择非舒适，我也得到收获。会觉得习惯吗？肯定不会。我或许老了5岁吧。</p>
<p>选择非舒适。人生最大的收获就是努力工作。把网上教学放下，选择你不会解决的任务吧。</p>
<h2 id=""><strong>深度工作</strong></h2>
<p>编程是一份需要深层集中精神的工作。切换场景看手机或社交平台，只会对你一天的工作有害。</p>
<p>大部分的人都会工作几分钟，然后就会看手机。如果普通员工每天都会花 8 小时工作，然后花 2 小时以上做一些没有效率的事，你很快就会脱颖而出，因为你是真的好好利用工作时间，完成了任务。</p>
<p>你只要培养专注和深度工作的习惯，你会成为一名出众的工程师。 创造这一种习惯也会呈现你拥有坚不可摧的工作道德。</p>
<p>你可以多长时间不看手机或 Facebook 或 Twitter? 5 分钟？10 分钟？ 15 分钟？</p>
<p>你如果还没阅读它, 去取一本 Cal Newport 的《<a href="https://www.amazon.com/Deep-Work-Focused-Success-Distracted/dp/1455586692">Deep Work</a>》。从一点开始。尝试在同一个任务无干扰地专注 20-25 分钟。把手机调到飞行模式。删去所有没用的标签，在你门口放一个大的招牌写着‘请勿打扰’。</p>
<p>从这个时间起，开始构建程序。尝试不打扰之下工作 45 分钟。在一个干扰匆匆的世界里，有能力做这样的事是很宝贵的。你会发觉你在这么短的时间内可以完成的工作量会很惊人的。</p>
<p>有很多应用程序使用 Pomodoro 技术帮助专注力。尝试体验一下，看看那个适合你。</p>
<h2 id="">结语</h2>
<p>要成为一名出色的工程师是要不断地持续学习。如果你运用我刚分享的技能策略的话，你永远都会找到工作的。</p>
<p>这个文章是出于我的新书《The Standout Career》。欢迎点击<a href="https://gumroad.com/l/xOzJU">预购</a>这本书。</p>
<!--kg-card-end: markdown--><p>原文：<a href="https://www.freecodecamp.org/news/become-a-standout-developer-and-accelerate-your-coding-skills/">How to Become a Standout Developer and Accelerate Your Coding Skills</a>，作者：<a href="https://www.freecodecamp.org/news/author/randallkanna/">Randall Kanna</a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
