<?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>Thu, 14 May 2026 19:59:02 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/career-development/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何转行找到理想的技术工作 ]]>
                </title>
                <description>
                    <![CDATA[ 在这篇文章中，我将探讨一些能够帮助你在你的目标公司的面试中取得好成绩并最大限度地获得工作机会的专业建议。 自我介绍 — 从华尔街到谷歌总部 2019年3月31日，我被一家初创对冲基金公司裁员了。在过去的10多年里，我一直是金融行业的一名量化软件开发人员，但我不想再做一份同样的工作。我开始追寻自己热切想去做的事，在人工智能/机器学习/深度学习(AI/ML/DL)领域寻找我的下一份工作。 在接下来的六个月里，我为了这个目标付出了非常大的努力。到2019年9月时，我已经有了多个与机器学习相关的现场面试和offer，包括来自谷歌和Facebook的offer。 这篇文章讲述了我是如何做到这件事的，希望它能鼓励和帮助其他潜在的想要换工作的人完成这种转变。通过这种转变，你可能会获得能力上和经济上的双重回报。 Googleplex:谷歌的全球总部 文章概览 如果你时间不够，这里有一个对我很有效的五大秘诀：  * 展示: 做一个你感兴趣的项目，并在网上展示出来  * 学习: 集中练习算法与数据结构的程序设计问题和系统设计问题的解答方法  * 应用: 利用多种渠道获得面试机会  * 面试 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/career-switchers-guide-to-your-dream-tech-jo/</link>
                <guid isPermaLink="false">6672da4f5c4dc803d18ad2b2</guid>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Tsukistar ]]>
                </dc:creator>
                <pubDate>Wed, 19 Jun 2024 13:26:53 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2024/06/googleplex.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/career-switchers-guide-to-your-dream-tech-job/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A Career Switcher’s Guide to Landing Your Dream Tech Job</a>
      </p><!--kg-card-begin: markdown--><p>在这篇文章中，我将探讨一些能够帮助你在你的目标公司的面试中取得好成绩并最大限度地获得工作机会的专业建议。</p>
<h1 id="">自我介绍 — 从华尔街到谷歌总部</h1>
<p>2019年3月31日，我被一家初创对冲基金公司裁员了。在过去的10多年里，我一直是金融行业的一名量化软件开发人员，但我不想再做一份同样的工作。我开始追寻自己热切想去做的事，在人工智能/机器学习/深度学习(AI/ML/DL)领域寻找我的下一份工作。</p>
<p>在接下来的六个月里，我为了这个目标付出了非常大的努力。到2019年9月时，我已经有了多个与机器学习相关的现场面试和offer，包括来自谷歌和Facebook的offer。</p>
<p>这篇文章讲述了我是如何做到这件事的，希望它能鼓励和帮助其他潜在的想要换工作的人完成这种转变。通过这种转变，你可能会获得能力上和经济上的双重回报。</p>
<p><img src="https://miro.medium.com/max/3264/1*nhcfyWkKLu_q4mBTetSHyw.jpeg" alt="1*nhcfyWkKLu_q4mBTetSHyw" width="600" height="400" loading="lazy"></p>
<p>Googleplex:谷歌的全球总部</p>
<h1 id="">文章概览</h1>
<p>如果你时间不够，这里有一个对我很有效的五大秘诀：</p>
<ul>
<li><strong>展示</strong>: 做一个你感兴趣的项目，并在网上展示出来</li>
<li><strong>学习</strong>: 集中练习算法与数据结构的程序设计问题和系统设计问题的解答方法</li>
<li><strong>应用</strong>: 利用多种渠道获得面试机会</li>
<li><strong>面试</strong>: 在电话面试和现场面试中保持冷静</li>
<li><strong>谈判</strong>: 在工作机会谈判与匹配团队时，知道自己想要什么</li>
</ul>
<p>如你所见，这是一个非常常见的五步秘诀，然而完成每一步都需要付出很多努力。如果想了解更多细节的话，就继续读下去吧。</p>
<h1 id=""><a href="https://www.linkedin.com/in/dctian">关于我</a></h1>
<p>这里有一些关于我的介绍，因为我认为这个指南对和我有相似背景的人最有帮助。也就是说，我是一名非科技行业经验丰富的软件工程师/开发人员，希望跳槽到西海岸(湾区或西雅图)的一家顶级科技公司。如果你没有软件工程的工作经验，上面的方法应该仍然适用于你，你只需要比那些有编程经验的人更加努力。</p>
<p>我毕业于加拿大滑铁卢大学，是一名计算机工程师。在我早期的职业生涯中，我曾在微软和甲骨文担任软件工程师。MBA毕业后，我进入了量化金融行业。</p>
<p>在过去的10多年里，我曾在美国银行、瑞银集团、Citadel和一些较小的公司担任量化软件开发人员/量化分析师。但当我在2016年第一次偶然发现机器学习/深度学习时，我就爱上了它。我知道我最终想要在AI/ML领域找到一份工作。</p>
<p>2019年4月，我开始为转行做全职准备。下周我将搬到旧金山湾区加入谷歌，它是人工智能和机器学习领域的领导者之一。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/11/image-4.png" alt="image-4" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.linkedin.com/in/dctian">https://www.linkedin.com/in/dctian</a></p>
<h1 id="">迈向成功的五个简单步骤</h1>
<h2 id="">第一步，展示: 做一个你感兴趣的项目，并在网上展示出来</h2>
<p>2019年2月，我最好的朋友Igor鼓励我创造一个很酷的项目并写些东西记录它。那时候我没有任何好的想法，同时我从未在网上发表过任何东西，也不知道怎么开始做这些事。</p>
<p>但是在四月初，当我在墨西哥和我的家庭一起度假时，某天晚上我突然有一个“我想造一辆自动驾驶汽车”的想法。考虑到我之前没有机器人技术或电子技术方面的经验，我决定先开始建造一辆可以在我的客厅里跑的<a href="https://towardsdatascience.com/tagged/deep-pi-car">深度学习/自动驾驶机器人汽车，DeepPiCar</a>。</p>
<p>一个月后，当我成功造出来了这辆自动驾驶汽车时，我开始在“<a href="https://towardsdatascience.com/">Towards Data Science</a>”上写一篇一共六个部分的博文来教其他人如何造一辆这样的车。我的博文在几周的时间内获得了超过10000次的阅读量，世界各地的读者对这篇文章的回应非常热烈。我感觉我两周的努力（一周用来造车，一周用来写博文）都是值得的。</p>
<p><img src="https://miro.medium.com/max/1776/0*PqGFISPKqUjwc_Ki.jpeg" alt="0*PqGFISPKqUjwc_Ki" width="600" height="400" loading="lazy"></p>
<p>在我的客厅里跑的DeepPiCar</p>
<p>然而，直到我参加面试和获得团队匹配的要求前，我一直没有意识到这件事对我的职业生涯产生了全面的影响。当面试官问我:“你为什么想从目前的行业转行?”时，我已经准备好了回答这个问题的话题!</p>
<p>我不仅能够告诉他们我对AI/ML的热情，而且当我从背包里拿出我的车(是的，真正的机器人车)并把它放在面试官手中时，我可以从他们的眼睛里看到兴奋!他们中的许多人甚至说，他们很想和自己的孩子一起造一辆这样的车。然后我告诉他们，我已经在网上发布了完整的步骤说明和源代码(我的简历中有链接)，供他们参考。我很确定他们不会把我的简历扔进回收箱。: -)</p>
<p>我的一些朋友们想让我推荐一些可以开展的好的项目，这是我给出的一些建议：</p>
<ul>
<li>如果你想转职去做前端开发，那就用流行的开源框架（例如<a href="https://reactjs.org/">React</a>、<a href="https://angular.io/">Angular</a>或<a href="https://vuejs.org/">Vue.js</a>等）搭建一个炫酷的网站。</li>
<li>如果你对服务端开发感兴趣，尝试使用分布式服务技术创建网络爬虫或搜索引擎，如<a href="http://cassandra.apache.org/">Cassandra</a>， <a href="https://zookeeper.apache.org/">ZooKeeper</a>， <a href="https://memcached.org/">Memcached</a>，和<a href="https://www.elastic.co/webinars/getting-started-elasticsearch">Elastic search</a>等。</li>
<li>如果你想做移动端开发，尝试创建并发布一个苹果/安卓应用。请注意，在苹果的App Store上发布应用比在谷歌的Play Store上发布应用要花费更长的时间。</li>
<li>如果你对人工智能/机器学习感兴趣，尝试使用现有的计算机视觉或自然语言处理深度学习模型之一，并尝试从中制作产品。例如，我使用了一个预训练的<a href="https://arxiv.org/abs/1512.02325">目标检测模型，SSD</a>，并将其改编为我的DeepPiCar的交通标志检测器。如果您是AI / ML新手，请务必阅读<a href="https://towardsdatascience.com/deeppicar-part-1-102e03c83f2c?source=---------5-----------------------">DeepPiCar的第一部分</a>，在那里我列出了几个ML课程和资源，以帮助您开始学习。</li>
<li>如果你对机器人技术感兴趣，试着用树莓派或英伟达Jetson Nano制造一些很酷的机器人。一定要使用新的<a href="https://www.raspberrypi.org/products/raspberry-pi-4-model-b/">Raspberry Pi 4</a>或<a href="https://developer.nvidia.com/embedded/jetson-nano-developer-kit">Jetson Nano</a>。树莓派更被制造商广泛使用，因此具有更好的技术支持，而Jetson Nano自带GPU，因此可能更适合<a href="https://www.sparkfun.com/products/15365">深度学习项目</a>。</li>
<li>如果你没有任何有关项目的想法，不要绝望。如果你对人工智能/机器学习感兴趣，你可以为上面提到的开源项目之一做出贡献，也可以为<a href="http://tensorflow.org/">TensorFlow</a>或<a href="http://pytorch.org/">PyTorch</a>做出贡献。你可能认为您需要成为一名专家才能为这些知名的开源项目做出贡献，但实际上并不需要。每个开源项目中都有相当多的小特性和简单的错误修复是专门为新手准备的，让新手可以先动手做。这样，你就可以在处理更复杂的问题之前熟悉代码库和提交流程。</li>
</ul>
<p><img src="https://miro.medium.com/max/1688/0*Ch5vkdlhxP1uRsbe.png" alt="0*Ch5vkdlhxP1uRsbe" width="600" height="400" loading="lazy"></p>
<p>顶尖的开源项目</p>
<p>一旦你完成了你的项目，你一定要让全世界都知道这件事！你以为只是在GitHub上发布完成的代码就足够了吗？不！因为大多数人更喜欢先阅读博客来了解代码的功能。</p>
<p>优秀的、精心设计的博文对于你的项目，更进一步来讲对于你来说，是一份很好的营销材料。是的，用漂亮的图片和图表写精致的博客需要很长时间。我花了整整一个五月写了6篇文章。我估计我总共花费了200个小时或每篇文章花费了大约30个小时。如果你是全职工作，也许可以写一篇写得很好的博文作为你项目的概述。</p>
<p><img src="https://miro.medium.com/max/1080/1*blXkdzZ0Z2T9cezJmmX96g.png" alt="1*blXkdzZ0Z2T9cezJmmX96g" width="600" height="400" loading="lazy"></p>
<p>DeepPiCar的博客系列</p>
<p>有一件事你需要牢记：你<strong>必须</strong>享受你正在做的事情，而不是仅仅为了找到一份工作而做这个项目。如果你真的对自己所做的事情充满激情，那么当你和面试官交谈时，这件事情就会成为一个亮点。</p>
<h2 id="">第二步：聪明并努力地学习</h2>
<h3 id="">算法与数据结构</h3>
<p>如果你需要掌握一项技术面试技能，那就是算法和数据结构（A&amp;DS）编码技能。无论你面试的是大公司还是小公司，他们都会详细询问你的编程技能，尽管大多数公司并不关心你使用哪种编程语言。</p>
<p>我最喜欢的编程语言是C++和Python，但对于编码面试，我推荐Python。C++是非常冗长的，而与C++相比它是如此简洁，你可以用这么少的行做这么多的事情。有很多资源可以让你为算法和数据结构（A&amp;DS）做准备。我使用了以下资源：</p>
<p><a href="https://amzn.to/2LLxmSm"><strong>Cracking the Coding Interview Book</strong> <strong>(CtCI)</strong></a>: 这本书大约有700页，并且只卖30美元。如果你需要复习A&amp;DS的概念，这是一个很好的起点。除了概念之外，它还提供了一系列简单到中等水平的练习题和完整的答案。我花了2 - 3周的时间，花了1-2天的时间在每个A&amp;DS相关章节上。我跳过了关于数学/脑筋急转弯/OOD/C++/Java/SQL的章节，因为它们与A&amp;DS无关。</p>
<p><img src="https://miro.medium.com/max/350/0*AGWwwLapmQvGVQ6o.jpg" alt="0*AGWwwLapmQvGVQ6o" width="600" height="400" loading="lazy"></p>
<p><a href="http://leetcode.com/"><strong>LeetCode.com</strong></a>：我也大量使用LeetCode (LC)，因为我觉得CtCI没有给我足够的练习。Leetcode可能是最全面和有组织的编程面试问题在线数据库，有1000多个简单，中等和困难的问题。每个问题都有一个唯一的数字(例如，LC#1是TwoSum)。许多网上帖子只是简单地把他们的面试问题称为LC# xxx，而不是把整个问题打出来。</p>
<p>我强烈建议每月花30美元注册LeetCode高级版，因为它可以让你访问所有的LC问题和解决方案。我觉得这很有帮助，我以99美元的价格注册了年度会员，因为我认为这是“我大脑的健身房会员费”。</p>
<p>我完成了100多个LeetCode问题(35个简单，60个中等，14个困难)。我实际面试中90%的问题，或者它们的细微变化，都可以在LeetCode上找到。在大多数情况下，我直到事后才知道它们来自Leetcode。但是由于我练习了足够多的LC中等难度的问题，所以我能够解决相同难度的问题。最后，我觉得我永远不能做足够的LC中等难度的问题，因为直到今天，我仍然与一些LC中等难度的问题斗争。</p>
<p><img src="https://miro.medium.com/max/1360/0*nS7N-kMs_oFwiTcG.png" alt="0*nS7N-kMs_oFwiTcG" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.youtube.com/watch?v=l3hda49XcDE&amp;list=PLrmLmBdmIlpuE5GEMDXWf0PWbBD9Ga1lO"><strong>Tushar Roy’s LeetCode Hard Solutions</strong></a>: Tushar实际上是苹果公司的工程师经理。他做这些视频的时候还是个软件工程师。我想说，看他的视频不仅教会了我这些算法，还教会了我如何清晰地呈现复杂的想法/算法。当我在现场面试时用白板写代码时，这给了我很大的帮助。</p>
<p><img src="https://miro.medium.com/max/1280/0*sTf-RyIfjStnTdf1.jpg" alt="0*sTf-RyIfjStnTdf1" width="600" height="400" loading="lazy"></p>
<p>请注意，大多数面试官会给LC中等水平的问题，因为要求某人在20-30分钟内解决中等水平的问题是相当公平的。我建议你在第一次电话面试前至少做20个简单的问题和30个中等的LC问题。我第一次电话面试是在我写完CtCI的书之后，在我开始写LC之前的时候，而我很快就被淘汰了。</p>
<p>我也会在每次做练习题的时候计时，就好像我在面试一样。但是我使用的是带有自动补全和调试器的IDE。你不会在实际的面试中得到这些，所以我在练习时通常会把时间限制得更紧，每道题大约30分钟，而不是45分钟。你可以选择只使用常规的文本编辑器，甚至是白板来模拟真实的考试环境。这取决于你的个人喜好。</p>
<h3 id="">系统设计</h3>
<p>你需要掌握的第二最重要的技能是系统设计。通常来说，一个现场面试环节会让你设计一个大型分布式系统，比如Netflix视频服务系统，或者WhatsApp即时通讯系统，或者Instagram故事等等。</p>
<p>这是一项同时测试你的硬实力与软实力的技能测试。对于硬实力的部分，你需要了解许多常用的分布式系统组件，例如分布式数据库、分布式内存缓存、分布式配置管理器、分布式文件存储和分布式搜索引擎等，以及何时使用它们是正确的。而对于软实力的部分，你需要能够画出清晰的图表来说明你的设计，并口头讨论和维护你的设计。有人告诉我，如果你通过了现场面试，系统设计面试会严重影响你获得的职级评定结果(也就是说，它可能决定你得到的是4级还是5级工程职位)。</p>
<p>下面是我在准备这一部分的过程中使用的一些资料:</p>
<ul>
<li><a href="https://amzn.to/2LLxmSm"><strong>Cracking the Coding Interview Book(CtCI)</strong></a>: 书中有一章讨论了系统设计，但这只包括了系统设计中最基础的部分。</li>
<li><a href="http://youtube.com/watch?v=quLrc3PbuIw&amp;list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX"><strong>Gaurav Sen 的系统设计 YouTube 频道</strong></a>: 在阅读了CtCI的系统设计章节后，我不满足于其中包含的知识。然后我偶然发现了 Gaurav Sen 的YouTube频道，里面有22个视频。我把他所有的视频都下载到我的笔记本电脑上，以便在长途飞机上观看。哦我的老天爷呐，这个兄弟的视频真的很棒，其中对于系统设计知识的讲解非常清楚！这些视频中大约有10个视频是对单个分布式系统组件的深入描述，其余的是关于如何构建NetFlix, Tinder或Facebook系统等的实际用例讨论。</li>
</ul>
<p><img src="https://miro.medium.com/max/1280/0*rIMPbQS57T_u5U-R.jpg" alt="0*rIMPbQS57T_u5U-R" width="600" height="400" loading="lazy"></p>
<ul>
<li><a href="https://www.youtube.com/watch?v=UzLMhqg3_Wc&amp;list=PLrmLmBdmIlps7GJJWW9I7N0P0rB0C3eY2"><strong>Tushar Roy 的系统设计视频</strong></a><strong>:</strong> 虽然Tushar非常擅长LeetCode上的难题，但他也有5个很棒的系统设计视频。我建议在Gaurav的视频之后再看这些视频，因为Gaurav为你提供了系统设计的坚实基础，而Tushar的视频则提供了一些进阶知识。</li>
</ul>
<p>就我个人而言，由于我之前从事过相当多的分布式系统，所以即使我没有使用上面视频中提到的一些新技术，我也能够很快地掌握总体思想。在看了足够多的视频后，我能够将大多数分布式系统概括为以下几层:</p>
<ul>
<li>客户端（PC端/移动端应用程序，浏览器）。</li>
<li>一个用来处理客户端请求的分布式负载均衡器。</li>
<li>基于位置的内容分发网络(CDN)或内存缓存，快速交付大型和相对静态的内容(视频和图像)到地理上更接近CDN/缓存的客户端。</li>
<li>一系列微服务来处理各种业务逻辑，如认证、服务/保存用户内容、在用户之间传递消息。微服务之间的通信是通过分布式消息系统发送的。</li>
<li>用于保存用户内容和消息的分布式数据库。你可以选择在数据库之前添加分布式缓存层，以提高读/写吞吐量。</li>
</ul>
<h3 id="">行为型问题</h3>
<p>我认为行为型问题是面试中最简单的部分。不幸的是，它们在面试评估中所占的比重也是最小的。科技公司当然知道，在行为面试中“表现得很好”和“说正确的话”是很容易的，但要训练自己成为一个优秀的程序员却要困难得多。</p>
<p>对于一个跨行找工作的人来说，最重要的问题当然是“你为什么想换行业？”希望你在步骤1中完成的项目可以帮助你通过展示你的项目和你对新行业以及你申请的公司的热情来完美回答这个问题。</p>
<p><img src="https://miro.medium.com/max/1280/0*7R7K7tRug6GBHdfT.jpg" alt="0*7R7K7tRug6GBHdfT" width="600" height="400" loading="lazy"></p>
<p>以下是一些其他需要准备的行为型问题：</p>
<ul>
<li>你为什么想为我的公司/我的团队工作？</li>
<li>举一个你达到目标的例子，并告诉我你是如何实现的。</li>
<li>举一个你未能达到目标的例子，并告诉我你是如何处理的。</li>
<li>描述一个你在工作中遇到的压力情况，以及你是如何处理的。</li>
<li>你是否曾遇到过没有足够工作可做的情况？</li>
<li>你是否曾犯过错误？你是如何处理的？</li>
<li>描述一个你与同事/老板/下属有分歧的情况，以及你是如何处理的？</li>
</ul>
<p>所有回答行为型问题的关键是以积极的态度结束。例如，即使你被问到与同事发生分歧或职业生涯中的失败，也要如实描述发生了什么，但更重要的是提到你从中学到了什么。谈谈当类似情况再次出现时，它如何帮助你成为一个更有效的团队成员/工程师。</p>
<h2 id="">第三步：通过多个渠道申请</h2>
<p>我在六月初（在我发布DeepPiCar博客之后的那段时间）开始密切关注湾区的机器学习工程师职位市场。同时，我开始了一个月的全职高强度编码准备（总计约200小时）。</p>
<p>到六月底，尽管我感觉自己还没完全准备好，但我开始向公司投递简历。原因是从我递交简历到电话面试之间需要有1-2周的准备时间。通过多个渠道，我联系了超过20家公司，并进行了超过30次电话面试。有时同一家公司会进行多次电话面试。</p>
<h3 id="">简历 —— 把相关的内容放在前面</h3>
<p>我不会详细讨论简历写作，因为已经有很多优秀的文章讨论过这个话题。我的重点是从跨行找工作的人的角度出发，这样招聘人员才能快速识别你是否适合新的行业/职位。</p>
<p>记住，我是从金融领域的量化开发人员转到科技领域的机器学习工程师——这是一个天大的困难，因为这个跨度既有角色的转变也有行业的转变。再次强调，我的项目帮了我大忙。我把它们作为“个人项目”列在我的工作经历的顶部。尽管它们不完全是“工作”，但它们是我的工作，并且与我想要的下一份工作高度相关。</p>
<p>你应该知道，大多数招聘人员不会阅读超过一页的简历。如果他们在10-20秒内找不到他们想要的关键词，你的简历就会被抛到一边。我还在简历的第一页上半部分列出了与新工作相关的技能（以及所有关键词）。见下图。</p>
<p><img src="https://miro.medium.com/max/937/1*a-pon57rs0aflAfiOj86lw.png" alt="1*a-pon57rs0aflAfiOj86lw" width="600" height="400" loading="lazy"></p>
<h3 id="linkedin">LinkedIn —— 让他们来找你！</h3>
<p>最好的工作申请是不需要你主动发出的。在我在LinkedIn上发布DeepPiCar博客文章后，我很高兴收到许多招聘人员的消息和电话，其中包括一些大型自动驾驶公司，问我是否对他们的机器学习工程师职位感兴趣。</p>
<p>我对Medium博客和LinkedIn帖子带来的影响力感到惊讶。但请确保在LinkedIn隐私设置中标记自己为“在找工作”，这样招聘人员可以轻松找到你。当招聘人员联系我时，我几乎总能得到电话面试。</p>
<p><img src="https://miro.medium.com/max/1176/1*wZtT-iVYzKI26gNohTXAhw.png" alt="1*wZtT-iVYzKI26gNohTXAhw" width="600" height="400" loading="lazy"></p>
<h3 id="">内部推荐 —— 有一个强有力的推荐人</h3>
<p><img src="https://miro.medium.com/max/700/0*07v0u9hdLQjmnQ00.jpg" alt="0*07v0u9hdLQjmnQ00" width="600" height="400" loading="lazy"></p>
<p>我认为第二好的工作申请是通过内部推荐提交的。我在Facebook和Google都有内部推荐。我第一次在Facebook的面试表现很差，但由于我的推荐人给了我强烈推荐，Facebook允许我再试一次。幸运的是，一个月后我通过了第二次电话面试。</p>
<p>在Google的情况更加令人惊讶。尽管我是远程候选人（顺便说一下，我住在芝加哥），他们直接跳过了电话面试，安排了现场面试，其中一部分是因为我有很棒的推荐人，一部分是因为我告诉他们我有其他现场面试。</p>
<p>所以我建议你找到在你想加入的科技公司工作的家庭成员/朋友/同学。如果他们没有在那工作，也许他们认识在那里工作的人。请你的朋友介绍你们认识，并让他们通过内部推荐提交你的简历。这样你获得电话面试的机会会高很多。</p>
<p>另一种方法是明智地使用你的LinkedIn网络。你可以搜索在特定公司工作的人，并请你的共同朋友介绍你们认识。如果没有，给那个人发送LinkedIn Mail。</p>
<p>注意，如果你发送很多LinkedIn Mail，你需要LinkedIn Premium。我订阅了大约3个月的LinkedIn Premium（大约每月30美元），并能直接与更多的人联系。有些联系导致了面试。附带的好处是，我收到的招聘人员信息比以前多得多，因为我相信LinkedIn的推荐算法将我排在了非付费用户之前。</p>
<h3 id="">第三方招聘机构</h3>
<p>总体而言，我觉得大多数第三方招聘机构在这次求职过程中并没有起到很大作用。作为参考，以前我寻找金融工作时，主要依赖高管猎头公司，并且这样做的效果非常好。但大多数科技巨头并不使用第三方招聘机构。对我来说，唯一有效的机构是 <a href="https://triplebyte.com/iv/Wzwz8pq/cp/header">TripleByte</a> 和 <a href="http://deeplearning.ai/">DeepLearning.ai</a>，我将在下面详细介绍。</p>
<h3 id="triplebyte"><a href="https://triplebyte.com/iv/Wzwz8pq/cp/header">TripleByte</a> — 免去电话面试</h3>
<p><img src="https://miro.medium.com/max/1067/1*N8n2DoEP57Wpmtb0xmKF6w.png" alt="1*N8n2DoEP57Wpmtb0xmKF6w" width="600" height="400" loading="lazy"></p>
<p>TripleByte 是一家独特的招聘机构。它对候选人的吸引力在于，一旦候选人通过了 TripleByte 综合的2小时现场技术筛选测试，就可以直接进入多家公司的现场面试。对公司来说，它的吸引力在于 TripleByte 为他们筛选掉了大多数不合格的候选人，节省了工程师大量的电话筛选时间。</p>
<p>当我通过 TripleByte 的测试后，可以选择约200家公司。这些公司主要是小型初创公司，但也有不少大公司，如 Apple、Adobe、American Express 等。我最终与 <a href="https://www.apple.com/siri/">Apple Siri 团队</a>（大公司）、<a href="https://zoox.com/">Zoox</a>（中型公司）和 <a href="https://determined.ai/">Determined.ai</a>（小公司）进行了现场面试。所有这些公司都在令人惊叹的工程中工作。</p>
<p>我强烈推荐通过 TripleByte 的流程，因为它识别到了我薄弱的地方，并为我节省了许多电话筛选和相关的麻烦。<a href="https://triplebyte.com/iv/Wzwz8pq/cp/header">点击这里参加 TripleByte 的在线测试</a>。</p>
<h3 id="deeplearningaiworkeraai"><a href="http://deeplearning.ai/">DeepLearning.ai</a> 和 <a href="http://workera.ai/">Workera.ai</a> — 数据科学家/机器学习工程师的福音</h3>
<p><img src="https://miro.medium.com/max/1171/1*I5gI_cSrZLdT3fFf4N_cYQ.png" alt="1*I5gI_cSrZLdT3fFf4N_cYQ" width="600" height="400" loading="lazy"></p>
<p>如果你是一个有志成为数据科学家或机器学习工程师的人，你一定听说过或参加过 Andrew Ng 在 Coursera/Deep Learning.ai 上提供的机器学习/深度学习课程。</p>
<p>实际上，DeepLearning.ai 有两部分：一部分广为流传的是教育板块；另一部分相对较少人知道的是招聘板块，即 <a href="http://workera.ai/">Workera.ai</a>。这是因为 Workera.ai 在2019年中期创立，成立时间很短。他们没有像 TripleByte 那样多的合作公司，但我相信他们正在迅速扩展这方面的努力。他们也会让你参加一个测试。</p>
<p>Workera.ai 的测试与 TripleByte 的测试有两点不同。首先，它是为数据科学家（DS）/机器学习工程师（ML）设计的测试，而 TripleByte 有为通用软件工程师以及 ML 工程师设计的测试——ML 工程师测试是全新的。</p>
<p>其次，Workera.ai 的测试是非约束性的，这意味着通过测试并不能让你直接进入现场面试。相反，Workera.ai 会将你推荐给其少数合作公司的 DS/ML 团队，并基本上让你排在前列。但你仍然需要经过完整的电话/现场面试过程。</p>
<p>我认为这仍然非常有价值，因为 Andrew Ng 在深度学习领域及其在湾区的网络非常广泛。我最终与 <a href="http://pinterest.com/">Pinterest</a> 和 <a href="http://scale.ai/">Scale.ai</a> 的 ML 团队进行了面试。如果我只是直接申请，我不认为我会得到这两家公司的面试机会。<a href="https://workera.ai/candidates/">点击这里申请 Workera.ai 的高级工程师 AI 项目</a>。</p>
<h3 id="">在线招聘平台——不要过于依赖它们</h3>
<p><img src="https://miro.medium.com/max/870/0*13Twl2pnw3RyDtFu.jpg" alt="0*13Twl2pnw3RyDtFu" width="600" height="400" loading="lazy"></p>
<p>为了扩大我的求职范围，我在一些在线招聘平台上设置了职位搜索提醒，例如 LinkedIn、GlassDoor、Indeed 和 ZipRecruiter，这样它们会在有符合我搜索条件的新职位发布时通知我。随着时间的推移，我在申请后确实收到了一些电话面试。</p>
<p>总体而言，我发现信噪比有点低，也就是说，我每天会收到很多邮件，但来自顶尖公司的好职位却很少。不过，不要完全忽视这个渠道。你需要在一开始就广撒网，或许你会通过这个渠道捕捉到一些机会。</p>
<h3 id="">直接申请——效果并不好</h3>
<p>过去，人们会附上一封漂亮的求职信和简历寄给公司，期待着人力资源部门的回复。但这次，这种方法对我来说完全不起作用！</p>
<p>我找了大约10家公司（主要是自动驾驶公司），并在它们的官网上的招聘页面直接申请了职位。让我惊讶的是，我没有收到任何一家的回复，连拒绝邮件都没有！</p>
<p>幸运的是，在线申请每家公司并没有花费太多时间。我认为，还是要申请你感兴趣的公司，但不要指望一定会收到回复。</p>
<h3 id="">分阶段申请工作</h3>
<p>尝试在第一阶段申请一些你不太感兴趣或者你认为更容易进入的公司。然后在后续阶段申请你的梦想工作/公司。你可以利用第一阶段来练习和提高，如果得到Offer，还可以用这些Offer来争取更好的梦想公司的Offer。</p>
<p>这似乎是种非常“功利”的方法，听起来可能有些争议，但想一想：许多人会先在一家不那么知名的公司工作，计划积累经验后再跳槽到更知名的公司。而且谁知道结果会怎么样呢，如果你没有得到梦想工作，至少你在第一阶段的公司中有一些选择。</p>
<h3 id="">将信息组织起来：持续更新一个日志本</h3>
<p>通过这么多渠道申请工作后，你很难跟踪你申请了哪些公司，以及对于每个公司你目前位于哪个阶段。</p>
<p>为了帮助解决这个问题，我维护了一个详细的面试日志本。它按面试阶段（已申请、面试中、已录取、被拒绝等）和公司进行分类。每家公司本质上是一页包含背景信息和按时间顺序排列的事件列表（例如电话和面试）的日志。这样，我可以看到我申请和面试过的公司，以便进行适当的跟进。</p>
<p><img src="https://miro.medium.com/max/528/1*LCR7hMBbjU3yzZGuze_sNw.png" alt="1*LCR7hMBbjU3yzZGuze_sNw" width="600" height="400" loading="lazy"></p>
<h1 id="">第四步：面试</h1>
<h2 id="41">4.1 电话面试</h2>
<h3 id="hr">初步与HR电话交流</h3>
<p>你与公司的第一次接触通常是通过与招聘人员的邮件往来。招聘人员会询问你的时间进而安排何时进行初步电话交流，这通常是一次“适配”电话，你们在电话中会讨论你的兴趣、背景以及为什么你适合这个职位。不必过于担心各种细节，这通电话通常很短，招聘人员会希望把你推进到下一个阶段，即技术电话面试。</p>
<h3 id="">技术电话面试前</h3>
<p><img src="https://miro.medium.com/max/485/0*vN0RSfOWzKkGulG7.jpg" alt="0*vN0RSfOWzKkGulG7" width="600" height="400" loading="lazy"></p>
<p>在技术电话面试前的一两天，请务必在 <a href="http://glassdoor.com/">Glassdoor</a> 和 <a href="https://leetcode.com/">Leetcode</a> 上查阅该公司以前的面试题目。对于谷歌和Facebook这样的大公司，这样做效果可能不会很好，因为有成百上千的面试题目。</p>
<p>但对于较小的公司，这种方法还是比较有效的。我会浏览Glassdoor上的许多帖子，记录下具体的技术问题，然后尝试解决所有这些问题。在电话面试中，遇到与网上发布的题目完全相同的情况非常少见，但做这些公司的过去问题能更好地为该公司的电话面试做好准备。</p>
<p>这类似于在参加同一教授的期末考试之前练习往年的期末题目——问题可能会有所不同，但问题的风格和类型会相似。</p>
<h3 id="">技术电话面试</h3>
<p><img src="https://miro.medium.com/max/1280/0*P4QVsG3vBNfY6UhY.jpg" alt="0*P4QVsG3vBNfY6UhY" width="600" height="400" loading="lazy"></p>
<p>技术电话面试是展示实力的关键阶段。这个阶段的目的是区分有能力的候选人和能力较弱的候选人。据说只有大约10%至20%的候选人能够通过顶级科技公司的技术电话面试。</p>
<p>评价的标准只有一个编码测试，而不是你的口才、当前工作的经验、掌握的编程语言数量，甚至不是你的个人项目。大多数面试官只想让你在你最熟悉的编程语言中完成一个编码练习。</p>
<p>个人而言，我并不认为这是发现最佳工程师的最佳方式。例如，我与许多非常有经验的软件工程师合作过。有些是GUI/应用开发专家，有些是C++专家，还有些是低级Linux专家，但他们中的许多人告诉我，他们会在限时的算法和数据结构（A&amp;DS）编码测试中表现得很差。</p>
<p>但既然这是唯一的途径，想要进入科技行业，<strong>你必须“破解编码面试”</strong>……</p>
<p><img src="https://miro.medium.com/max/940/0*ZPXWlO_1OlBQa5fw.jpg" alt="0*ZPXWlO_1OlBQa5fw" width="600" height="400" loading="lazy"></p>
<p>编码练习通常通过共享在线记事本进行，例如CoderPad或Google Docs，面试官和你可以同时在共享文档中进行输入。</p>
<p>虽然一些公司（比如Google和Facebook）只要求你写出正确的算法，不要求你运行代码，但许多公司期望你在45-60分钟的时间内完成可以正确运行的代码。</p>
<p>除了共享记事本，大多数公司采用语音通话进行面试，而一些公司则通过Zoom/Skype视频通话进行。</p>
<p>对我来说，电话面试是面试过程中最困难的部分。作为参考，我大约只有50%的技术电话面试通过率。它们困难的原因包括：</p>
<ul>
<li>45-60分钟的时间窗口通常对我来说很紧张，因为我打字速度不快。（无论你是否相信，我在白板编码时更快，原因将在现场面试部分讨论。）</li>
<li>你需要在整个通话过程中与面试官保持交流的同时编写代码。大多数人更喜欢先讨论设计/方法，然后在安静中编写代码和调试，包括我自己。但如果在实现阶段你有20-30分钟不说话，会显得很尴尬。</li>
<li>在线记事本是基于文本的，不是白板。因此很难画图或图解代码工作流程。</li>
<li>在线记事本不是集成开发环境（IDE）。虽然大多数在线记事本，如CoderPad，可以做不错的语法高亮和缩进，但它们不是全功能的IDE。例如，它们不能做自动补全，也不能在你输入时高亮明显的语法错误，更不能支持逐行调试。所以很多时候，我不得不依靠“老实可靠”的print语句进行调试，这非常慢且笨拙。</li>
<li>语音通话是非视觉的。当我试图在电话中解释我的方法时，我不能画图，也不能通过面试官的面部表情或肢体语言来判断我的表述是否正确。</li>
</ul>
<p>为了应对上述困难，我采取了以下措施：</p>
<ul>
<li><strong>使用一个好的电话耳机</strong>。这是显而易见的，因为你需要解放双手来编码！所以买一个好的蓝牙耳机，并确保在电话面试前充满电。</li>
<li><strong>把闲聊时间降到最低</strong>。在我的前几次面试中，我会试图给面试官留下好印象。所以我会花大约5-7分钟谈论我的背景、经验，然后是我的自动驾驶汽车。有时面试官会问我一些问题，这可能会拖延到前10分钟！我很快发现所有这些闲聊时间都占用了面试分配的45分钟，这意味着我有更少的时间来处理编码问题。事实上，大多数面试官只想评估你的编码技能，你的强大工作经验此时对他们来说并不重要。所以我学会了在开始时将闲聊时间缩短到2分钟以内，并将我的问题留到面试结束。如果我成功完成了编码问题，面试官通常更愿意和我多聊一会儿。相反，如果你在编码面试中表现不佳，聊天也不会改变面试结果。同样的建议也适用于现场面试。</li>
</ul>
<p><img src="https://miro.medium.com/max/600/1*HOQJzGbrCYQrXMZoIPl3UQ.png" alt="1*HOQJzGbrCYQrXMZoIPl3UQ" width="600" height="400" loading="lazy"></p>
<ul>
<li><strong>使用两个显示器</strong>。一个显示器用于共享记事本，另一个显示器用于搜索和IDE等。现在大多数笔记本电脑都有外接显示器的端口。确保在编写代码时将笔记本电脑连接到至少一个外接显示器，这样你就不必在窗口之间来回切换。</li>
<li><strong>使用外接鼠标</strong>。如果你使用笔记本电脑，务必购买一个外接鼠标。对我来说，使用外接鼠标显著提高了选择、复制和粘贴代码的能力。</li>
</ul>
<p><img src="https://miro.medium.com/max/650/0*_KphaQpx9VCemE2C.jpg" alt="0*_KphaQpx9VCemE2C" width="600" height="400" loading="lazy"></p>
<ul>
<li><strong>使用IDE</strong>。尽管你在共享记事本中编写代码，有时为了排除故障，最好将代码复制粘贴到IDE中，修复语法错误和错误，然后将可以正常运行的代码复制回共享记事本。大多数面试官不会介意，只要你能在规定时间内完成代码。他们也希望看到你成功！在电话面试前，确保设置一个空项目，方便快速粘贴代码并运行。你不想在宝贵的面试时间内创建项目和设置运行参数。打开IDE还意味着你可以在面试结束时直接粘贴代码，这样你可以保存问题和解决方案以供进一步分析。</li>
</ul>
<p><img src="https://miro.medium.com/max/2000/0*4QQMQfLgKT0Y7XLV.png" alt="0*4QQMQfLgKT0Y7XLV" width="600" height="400" loading="lazy"></p>
<ul>
<li><strong>使用节省打字的编程语言</strong>。这里的大多数技巧都是为了帮助你节省打字时间，以便你可以花更多时间思考解决方案。因此，尝试选择一种打字量少的语言。我的最佳语言是C++和Python。除非面试官特别要求C++，否则我在所有面试中都选择Python，因为与C++相比，它更加简洁。</li>
<li><strong>善用Google</strong>。这是电话面试相对于现场面试的一个优势，因为你可以搜索。如果你不太熟悉某个函数的API或某种语言的语法，随时可以搜索。大家都理解你可以在电话面试中使用Google。如果你的面试官懒得从LeetCode上直接拿问题，那么恭喜你！;-)</li>
<li><strong>在开始实现前与面试官彻底讨论你的方法</strong>。在我的前几次面试中，我会在大致了解该做什么后开始编码，想着可以在编码时细化细节。这不是一个好主意。尝试在与你的面试官的初步讨论中尽量细化细节。这实际上可以为你节省很多后续实施时间。面试官当然非常熟悉这个问题的所有优缺点。如果你提出一个次优或不正确的方法，他们可能会引导你走向更优的方向，并可能指出你忘记考虑的错误/角落案例。这可以为你节省大量的实现时间。但务必尽可能多地涵盖角落案例，因为如果面试官必须指出缺少的角落案例，你会被扣分。</li>
<li><strong>解决问题比不解决问题更好</strong>。当你在寻找最优解决方案时，这一点可能不太明显。有时，如果我无法想到最优解决方案，我会提出并完成一个次优解决方案。无论如何，提出某个工作方案（尽管次优）能给面试官提供一个不错的比较数据点。在某些情况下，面试官在事后告诉我，我认为可能的“最优”解决方案实际上并不存在！根据我的失败经验，如果没有提出工作方案，面试肯定会失败。</li>
</ul>
<p><img src="https://miro.medium.com/max/516/0*zYwn2rtIyq9npuS_.png" alt="0*zYwn2rtIyq9npuS_" width="600" height="400" loading="lazy"></p>
<p>记住，在这个阶段，你不应该专注于系统设计问题，因为这些问题只会在现场面试中提问，因为它需要白板来画图。</p>
<h3 id="">在线编程能力测试</h3>
<p><img src="https://miro.medium.com/max/1386/0*ZQjHTN8X0xZw0A1J.jpg" alt="0*ZQjHTN8X0xZw0A1J" width="600" height="400" loading="lazy"></p>
<p>我很少遇到还给在线编码测试（如 HackerRank 或 Codility）的科技公司，虽然很多金融公司仍然会给这些测试。这些测试的目的是节省招聘公司的人工成本。</p>
<p>通常，你会从公司的招聘人员那里收到一个在线测试的链接。在线测试通常有 3-5 道编码题，你需要在 2-3 小时内完成。在收到招聘人员的邮件后的 7-10 天内，你可以随时完成这个测试。在你进行测试时，没有人监视你，你需要通过大部分测试用例才能通过这一阶段。</p>
<p>以下是一些关于在线编码测试的建议：</p>
<ul>
<li><strong>使用 IDE</strong>: 你可以在你喜欢的 IDE 中完全编写和测试你的代码，然后将其粘贴到在线测试页面以运行正式的测试用例。</li>
<li><strong>在开始之前阅读所有问题</strong>: 有些在线测试的设计是让大多数人在规定时间内无法完成所有问题。因此，在开始做题之前，一定要先阅读所有问题，先从简单的问题开始，这样你可以尽可能多地完成问题。</li>
<li><strong>首先让代码运行起来</strong>: 对于大多数在线测试来说，时间是一种稀缺资源。所以目标是尽可能通过更多的测试用例，而不是所有的测试用例。如果你有一个可行的解决方案，它应该能通过大部分测试用例。如果你的解决方案不是时间优化最好的，你可能会在一些测试用例上超时，这没关系。继续解决下一个问题，如果有时间再回来。（注意：编写生产级别代码时不要这样做。对于生产级别代码，一定要花时间把算法搞对、整理干净，并添加足够的文档，以便你和其他人将来能维护你的代码。）</li>
<li><strong>保存问题和你的解决方案的副本</strong> 以便日后分析。不管是电话面试、在线面试还是现场面试的题目，都应养成保存所有面试题目的习惯。</li>
</ul>
<h3 id="">居家项目</h3>
<p>一些公司在技术电话面试之前或代替技术电话面试给求职者布置居家项目。我有两家公司给我布置了居家项目，这两个项目都是与机器学习相关的。我发现这些项目比技术电话面试更有趣，也更贴近我申请的职位。因此我希望更多公司能用居家项目代替技术电话面试。</p>
<p>但我也理解这样做可能不是那么有效或公平，因为</p>
<ol>
<li>公司不知道是你还是你的机器学习专家朋友完成了这个项目，</li>
<li>即使是你自己完成的，公司也不知道你花了多长时间。</li>
</ol>
<p><img src="https://miro.medium.com/max/750/0*2DB9c6E9xy1Hsu_e" alt="0*2DB9c6E9xy1Hsu_e" width="600" height="400" loading="lazy"></p>
<p>由于居家项目通常需要花费大量时间，请确保你在明智地使用你的时间。</p>
<p>对于你非常感兴趣的公司，居家项目确实需要花8-10小时好好编写代码并记录你的方法和设计决策。例如，我为 <a href="http://scale.ai/">Scale.ai</a> 的项目花了至少10小时，尽管说明中让我只花大约2-3小时。我这样做是因为我觉得很有趣，并且通过探索不同的机器学习方法学到了很多。</p>
<p>对于你不太感兴趣的公司，不要花费太多时间，把时间留给更多的 LeetCode 问题，这样你可以更好地准备编码面试。</p>
<h3 id="">面试安排</h3>
<p><img src="https://miro.medium.com/max/400/0*XF9LDZeQZ6_GVE0J" alt="0*XF9LDZeQZ6_GVE0J" width="600" height="400" loading="lazy"></p>
<p>当你完成了几次电话面试后，你应该会收到一些现场面试的邀请。在电话面试的初期阶段，你的成功率可能会比较低。我在前4-5次电话面试中都失败了。后来我意识到需要更多地练习动态规划和递归算法。</p>
<p>你的经历可能不同，但在面试过程中收到拒绝邮件时不要气馁。向招聘人员请求反馈并继续学习，还有很多公司等着你去尝试。</p>
<p>以下是一些面试安排的建议：</p>
<ul>
<li><strong>保持详细的面试日志</strong>: 这与第2步提到的日志相同。现在是时候开始记录每次面试的时间和讨论内容。</li>
<li><strong>将所有面试放入日历并设置提醒/警报</strong>。你不想因为忘记面试而错过任何一个面试。此外，确保确认面试的时区，为简便起见，我总是按招聘人员所在的时区（通常是太平洋时间）与他们沟通。</li>
<li><strong>安排某一时段的多场电话面试时至少间隔30分钟</strong>。这是因为有些面试官可能会晚打5-10分钟电话，有些面试官可能会允许面试超时5-10分钟。如果你把两个电话面试安排得太近，可能会不得不缩短一个或错过另一个。此外，你还需要5-10分钟的时间来清理思绪并记下面试笔记。</li>
<li><strong>请求第二次机会</strong>。这可能是一个鲜为人知的事实。如果你第一次电话面试失败，很多公司会允许你有第二次机会。大多数公司不会自动提供第二次机会，但如果你礼貌地请求，它们通常会同意。因此你每次都要尝试请求它们再给一次机会，但将它安排在第一次面试后的几周，这样你有足够的时间学习。除非你等6个月，否则通常不会有第三次机会。</li>
<li><strong>错开你的面试</strong>。我将面试分阶段进行。把认为较容易通过的公司安排在早期阶段，把较难通过且更知名的公司安排在2-3周后的后期阶段。这样，如果你发现自己在某些主题上较弱，还有2-3周的时间来学习。</li>
<li><strong>集中安排你的现场面试</strong>。因为我面试的大多数公司都在湾区，我尝试在1-2周内安排所有的现场面试，这样我只需要飞一次就能完成所有的现场面试。例如，我的湾区现场面试持续了整整两周，其间我面试了6家公司，每周3次面试。如果公司知道你会在城里进行其他面试，他们更愿意安排你进行现场面试。此外，他们不需要支付你的机票。不同公司支付了一些酒店费用，剩下的酒店费用由我自己承担。这样对我来说没问题，因为它为我节省了很多时间，我能够集中安排所有的现场面试，这样可以在同一时间段内收到所有的面试结果。</li>
</ul>
<h2 id="42">4.2 现场面试</h2>
<p><img src="https://miro.medium.com/max/696/0*C5eicXplRRZIxXk3.png" alt="0*C5eicXplRRZIxXk3" width="600" height="400" loading="lazy"></p>
<p>在现场面试前的2-3周，你需要开始专注于系统设计问题。许多公司允许你在通过电话面试后安排4-6周内的现场面试，这应该能给你足够的时间准备算法与数据结构（A&amp;DS）和系统设计问题。</p>
<p>通常每个公司的现场面试包含4-5个45分钟的面试环节——上午2个，午餐时间，然后下午2-3个。面试内容一般包括1个系统设计面试，1个行为面试和2-3个算法与数据结构（A&amp;DS）编码面试。很少有公司会问到数学或脑筋急转弯问题，所以我不会花太多时间准备这些。</p>
<h3 id="">系统设计面试</h3>
<p><img src="https://miro.medium.com/max/1280/0*Vnhf3KUToEKuUIGV.jpg" alt="0*Vnhf3KUToEKuUIGV" width="600" height="400" loading="lazy"></p>
<p>Gaurav Sen 正在设计 WhatsApp</p>
<p>这一阶段被包含在第二步（面试准备）中。如果你看了所有我推荐的所有系统设计YouTube视频，并能够将其概括为一个类似于我所概述的框架，说明你掌握得非常好。</p>
<h4 id="">明确需求规范</h4>
<p>在系统设计问题中，一个重要的技巧就是及早明确系统的功能和特点。你需要定义一组既不太简单也不太复杂的功能，以便在45分钟的时间内完成。</p>
<p>例如，在被要求设计一个即时通讯应用时，请确保提及以下基本功能：</p>
<ul>
<li>用户认证（这是大多数系统中应有的）</li>
<li>一对一消息</li>
<li>群组消息</li>
<li>用户在线状态</li>
<li>离线消息（如果有时间）</li>
</ul>
<p>对于一个45分钟的面试，我不会提及以下非基本功能：</p>
<ul>
<li>语音通话</li>
<li>视频通话</li>
<li>多人通话</li>
<li>个人时间线（如Facebook Stories）</li>
</ul>
<p>当然，如果你被要求设计Skype，你必须设计语音和视频通话，但我不会在设计的功能中包括共享计算机桌面，这样做是为了将已有功能限制在可管控的范围内。</p>
<h4 id="">注意意外事件</h4>
<p>在面试中，你需要注意面试官提出的一些奇怪的问题，并能做出聪明的回应。</p>
<p><img src="https://miro.medium.com/max/1000/0*FuUaWBV2H26hOdIy.jpg" alt="0*FuUaWBV2H26hOdIy" width="600" height="400" loading="lazy"></p>
<p>例如，在Facebook的面试中，我被要求设计一个简化版的Google搜索。我在白板上画了一个相当不错的高层设计。然后面试官抛出一个意外的问题：</p>
<p>面试官：“你认为需要多少台服务器？”</p>
<p>我：“嗯，这取决于有多少人在使用它以及服务器的性能如何……”</p>
<p>面试官：“你为什么需要知道服务器的性能？”</p>
<p>我：“我的想法是，实际使用情况就像分子，服务器硬件的能力就像分母，所需的服务器数量取决于这两个数字。”</p>
<p>面试官：“不，服务器的硬件规格是无关紧要的。”</p>
<p>我：“硬件规格当然很重要，如果我可以用10台高性能服务器托管一个服务，我可能需要100台笔记本电脑来托管相同的服务。”</p>
<p>面试官：“硬件规格无关紧要。”</p>
<p>此时，我感到困惑，因为我觉得他有点不讲理。在长时间的尴尬停顿后，我几乎要放弃了。</p>
<p>我：“所以你的意思是硬件规格不重要？”</p>
<p>面试官：“假装你不知道服务器的硬件规格，你怎么确定需要多少台服务器？”</p>
<p>哦，他的意思是这样！！他不是说硬件规格无关紧要，而是说我们不知道确切的硬件规格。</p>
<p>我：“哦，在这种情况下，我需要基准测试服务器的吞吐量，所需的服务器数量大致是最大使用量除以单台服务器的吞吐量。我这样说对吗？”</p>
<p>我看到他微微点头。</p>
<p>我讲这个故事的意思是，在面试中进行补充说明从而明确面试官的问题/陈述有多么重要。你可以通过用自己的话复述问题/陈述来做到这一点。如果你真的卡住了，问他们刚才说的是什么意思。也许他们会以不同的方式重述问题/陈述，以便你理解并继续。</p>
<p>记住，许多面试官不是母语为英语的人，所以<strong>他们说的</strong>和<strong>他们想说的</strong>可能不完全一致。同样，许多面试者（包括我在内）也不是母语为英语的人，所以<strong>他们听到的</strong>和<strong>他们以为听到的</strong>也可能不完全一致。</p>
<p>让面试官以不同的方式重复同样的话，可能会大大帮助面试者理解面试官的真正意思。</p>
<h3 id="">在白板上进行的算法和数据结构编码面试</h3>
<p><img src="https://miro.medium.com/max/1280/0*zrHrbhiBz6Mfv79F.jpg" alt="0*zrHrbhiBz6Mfv79F" width="600" height="400" loading="lazy"></p>
<p>Tushar Roy 讲解 Trie 数据结构</p>
<p>现场面试中的算法和数据结构（A&amp;DS）问题几乎都是在白板上完成的。包括我自己在内，许多人最初都对白板编码感到害怕，因为在实际工作环境中，谁会在白板上写详细的代码呢？</p>
<p>但在经历了所有这些现场面试之后，我发现白板编码在某种程度上比电话面试更容易。我将在下面介绍一些专门针对白板编码的技巧。</p>
<p><strong>用图表/表格来说明你的算法</strong>。有句老话说，“一张图胜过千行代码”，或者类似的说法。在写代码之前，尝试用图表/表格来说明你的代码如何工作。这会给面试官一个你代码可能是什么样子的路线图，并允许他们指出他们看到的任何潜在问题。</p>
<p>一旦你写完代码，尝试逐行检查代码，并在旁边放上图表，这样你就可以向面试官展示你的实现与你的意图是一致的。一定要观看<a href="https://www.youtube.com/playlist?list=PLrmLmBdmIlpv0b07yUFtY8eN5odlw1Pse">Tushar Roy的LeetCode高难度解决方案</a>的YouTube视频，学习如何在白板上展示想法。</p>
<p><strong>将白板分成几个部分</strong>。出于前一条提示提到的原因，我建议将白板至少分成2-3个垂直部分。一部分用于图表，其他部分用于代码。这样，你可以在编写代码的整个过程中随时参考图表。</p>
<p><strong>不要纠结于语法细节</strong>。如果允许你使用任何编程语言（这是常态），那么面试官不应该对你的代码语法太挑剔。例如，如果你漏掉了C++/Java中的分号，或Python中的冒号，只要你的缩进正确，就没关系。或者如果你拼错或缩短了内置函数的名称，只要面试官理解你的意图，也没关系。相反，在电话面试中你没有这样奢侈的宽容度。</p>
<p><strong>使用简化的变量/函数名称</strong>。因为用记号笔写长名称需要很长时间和很多空间，告诉面试官变量的全名和含义，然后在代码中使用简化的名称。这会节省你很多宝贵的时间和白板空间。</p>
<p><strong>不断寻求反馈</strong>。这是现场面试的一个重要好处，因为你可以很容易地判断面试官的反馈。当我展示我的设计或方法时，我会定期检查面试官的面部表情，并随口问，“我这样做是正确的吗？”或“看起来怎么样？”通常，面试官都很乐于提供一些反馈，或者至少点头或皱眉。在你偏离正确答案太远的时候，如果你问的话他们肯定会告诉你。</p>
<p>正如我几次惨痛的经历告诉我的那样，当我不寻求反馈时，一些面试官会先让我完成整个实现，然后在最后指出一些重大缺陷。结果，我惨败了所有那些面试。所以尽量在编码前尽量细化你的设计并寻求反馈。</p>
<p><img src="https://miro.medium.com/max/400/0*VOO-nVdsgXIbDUr5.png" alt="0*VOO-nVdsgXIbDUr5" width="600" height="400" loading="lazy"></p>
<h3 id="">其他的在线面试技巧</h3>
<p>其中一些非技术技巧可能是常识，但我将它们列出来作为提醒。</p>
<p><strong>在结尾提出好的问题</strong>。在每次面试结束时，你可能没有太多的时间来提问。所以这些问题要简短而有影响力。面试是一个双向的过程——公司在评估过程中试图从你身上提取信息，你也需要对这些公司做同样的事情，这样当你得到工作机会时，你就可以做出最明智的决定。</p>
<p><img src="https://miro.medium.com/max/998/0*rvbji0M2GsMoD0CW.png" alt="0*rvbji0M2GsMoD0CW" width="600" height="400" loading="lazy"></p>
<p>以下是我喜欢问的经典问题:</p>
<ul>
<li>你能告诉我你的工作背景和你现在的工作吗?</li>
<li>你能告诉我贵集团/公司的技术栈和开发方式吗?一旦面试官提到一些编程语言或工具，你可以回应说你也使用过这些技术。</li>
<li>谁是贵集团/公司的理想人选?一旦面试官提到了理想候选人的一些特征，你可以回应说你也有这些特征，并给出一个快速的例子来支持它。</li>
<li>推销一下自己。这可能并不适用于所有人。我还利用面试结束时的“提问”时间，向面试官展示了我的自动驾驶机器人汽车和几段关于这辆汽车的YouTube视频。我觉得效果出奇的好，因为我看到大多数面试官在拿着车的时候都非常惊喜。</li>
</ul>
<p><strong>保持充足的水分</strong>. 在面试过程中你会说很多话，你会(无意识地)出汗很多，所以你总是想要随时补充水分。这意味着每次面试结束后都要把杯子重新斟满，不在白板上写字的时候就喝一小口。我发现咖啡因(咖啡/茶/可乐)在让我保持最佳状态方面非常有效。</p>
<p><img src="https://miro.medium.com/max/2000/0*VsgMcMV6BniWLJgN.jpg" alt="0*VsgMcMV6BniWLJgN" width="600" height="400" loading="lazy"></p>
<p><strong>记笔记</strong>. 我总是详细记录我的面试。因为大多数面试都是连续进行的，所以你唯一能做笔记的时间就是上厕所的时候。带上你的手机，快速记下一些面试时收到的提问和你的解决方法，这样你就可以在完成一天的面试后让自己回想起来这些。这应该不超过1分钟。</p>
<p><strong>吃一顿清淡的午餐.</strong> 午餐时不吃得过多是很难的，因为许多顶级科技公司都有很棒的免费食物!Facebook甚至还有免费的冰淇淋!虽然你很想在那里品尝所有的免费食物，但你需要记住，<strong>你去那里不是只为了吃一次很棒的免费午餐</strong>，而是去面试，然后<strong>得到这份工作，这样你就可以每天都在那里吃饭了</strong>。</p>
<p>不要暴饮暴食的两个原因:第一，你需要在下午的会议上保持清醒，而不是感到昏昏欲睡。第二，你需要花大部分时间和你的午餐伙伴聊天。虽然在一些公司(谷歌/Facebook)，你的午餐伙伴的反馈不是决定offer的一部分，但很多时候，他们是公司的高层，所以他们的意见可能很重要，而你需要给他们留下好印象。</p>
<p><strong>上厕所</strong>。每次面试结束后，一定要去一下洗手间。不幸的是，这些45-60分钟的面试通常是连续的，中间没有休息时间。所以你一定要在下次面试开始前去一趟卫生间。你想要能够走路和伸展一下你的腿，更重要的是，洗干净你的手和脸，这样你就可以神清气爽地去参加下一次面试。不要休息太久，因为休息时间会占用你接下来的45分钟。</p>
<p><img src="https://miro.medium.com/max/1024/0*TBXEsZ8Nnx8eWzk-.jpg" alt="0*TBXEsZ8Nnx8eWzk-" width="600" height="400" loading="lazy"></p>
<h3 id="">带些零食</h3>
<p>与上一点相反，在我参加的一些现场面试中，不管是有意安排还是因为时间冲突，午餐时间有时会被安排在下午1:30-2:00，有时甚至会被直接跳过！那时我会饿到几乎撑不住了，所以我学会了随身带一根麦片棒和几块巧克力，这样可以在面试间隙快速吃几口。</p>
<h3 id="">带几份简历</h3>
<p>虽然大多数面试官确实会带上一份你的简历，但偶尔我会遇到没带简历的面试官，所以我会递给他们一份。对于技术面试，这可能并不是特别重要，但这是一个贴心的举动。</p>
<h3 id="">事后分析</h3>
<p>当天的面试结束后不要马上放松，你需要在回到酒店或家里后，趁着记忆还比较新，立刻尽可能详细地记录面试情况，包括面试官的姓名/背景、所有提问、你的应对方法、面试官对你提问的回答等。用电子方式记录（而不是纸质笔记），这样以后更容易搜索和存档。</p>
<p>之后，你需要再次回顾所有的面试问题，找到优化的解决方案，并思考如何在下次面试中提升自己的表现。如果在LeetCode上找到相应的面试问题，务必将问题标注上公司名称，以便其他人从你的经验中受益。</p>
<p><img src="https://miro.medium.com/max/2000/0*m4TbZx-yWlVl0HCy.jpg" alt="0*m4TbZx-yWlVl0HCy" width="600" height="400" loading="lazy"></p>
<p>以上只是一些小技巧，可以稍微增加你的胜算。你仍然需要大量练习算法和数据结构问题，学习快速识别每个问题的解决方法。</p>
<p>例如，了解在树/图中何时使用BFS或DFS，何时使用递归与迭代算法，何时在处理数据之前进行排序或建立索引等。并且一定要熟知你使用的算法的时间和空间复杂度。我从5月底开始准备面试，6月底进行了第一次电话面试，8月底完成了最后的现场面试——这是我生命中最紧张的三个月。</p>
<p>如果你们中有人问我遇到的具体面试问题，很遗憾，我不能在这里透露。但我已经在LeetCode上将所有相关的面试问题标注了公司名称，作为对在线社区的匿名回馈。我希望你们在面试后也能这样做。</p>
<h1 id="step5offer">Step 5. Offer谈判和团队匹配</h1>
<h2 id="51offer">5.1 Offer谈判</h2>
<p>如果你在阅读这部分，说明你可能已经收到至少一个 offer 了。哇，恭喜！(如果你还没有收到任何邀请，立即停止阅读，回去继续做更多的LeetCode练习和面试吧！😜)</p>
<p><img src="https://miro.medium.com/max/480/0*cU5XEYWCmu9FJg8u" alt="0*cU5XEYWCmu9FJg8u" width="600" height="400" loading="lazy"></p>
<h3 id="offer">Offer薪酬包的组成部分</h3>
<p><img src="https://miro.medium.com/max/624/0*mU6OkvJojAbaIaV5.png" alt="0*mU6OkvJojAbaIaV5" width="600" height="400" loading="lazy"></p>
<p>来源: levels.fyi</p>
<p>以下是科技公司Offer薪酬包的典型组成部分。我将举一个通常有3-5年的工作经验（YoE）的中级软件工程师（SWE）的例子。</p>
<ul>
<li>签约奖金: 这是你开始工作后立即得到的钱，而不是在你签署聘用合同时。例如，一次性支付$30,000。</li>
<li>基本工资: 这是每个月进入你银行账户的钱。例如，每年$150,000。</li>
<li>年度奖金: 这是你基本工资的一个百分比，通常为10-30%，每年发放一次。例如，20%，对于$150,000的基本工资来说就是$30,000。</li>
<li>股票期权或股票奖励: 大公司倾向于给予股票（称为受限制股票单位，RSUs），在授予时有一定价值。初创公司倾向于给予股票期权，在授予时价值较低但有很大潜力。例如，价值$300,000的股票奖励，分四年归属，每年归属$75,000。</li>
<li>搬迁补助（如果你需要搬迁）: 通常包括：
<ol>
<li>几周的公司住房供你和你的家庭使用</li>
<li>搬运你所有的物品</li>
<li>帮助买卖房屋，并且可选地</li>
<li>一些现金以帮助其他搬迁相关的费用。搬迁补助取决于你的家庭构成、位置和级别。通常是不可协商的。</li>
</ol>
</li>
<li>年度总薪酬（TC）: 这是使所有Offer薪酬包可以进行对比的一个数字。</li>
</ul>
<p>TC = 基本工资 + 年度奖金 + 年度股票奖励 + 分摊的签约奖金（假设你将签约奖金在3年内分摊）</p>
<p>我们中级SWE的TC = $150k + $30K + $75K + $30K / 3 = $265,000</p>
<p>注意，搬迁补助不被视为TC计算的一部分，因为在预期情况下你大概会花掉大部分（如果不是全部）搬迁补助。</p>
<h3 id="">知道你的技术水平所对应的等级</h3>
<p>即使你知道自己的求职目标，公司也可能会根据公司的具体情况对你进行面试。例如，一个4级工程师可能会选择谷歌的L3或L4级、Facebook的E3或E4级或者微软的59-62级的面试。</p>
<p><strong>询问招聘人员你面试的是哪个级别的岗位</strong>，但这可能不是你得到这份工作的水平。例如，你可能在Facebook的E4面试，最终，招聘委员会可能会认为你的表现不足以达到E4，但足以获得E3的offer。 所以<strong>再次询问招聘人员</strong>你的工作offer是什么级别。通过这一层，你可以找到TC的期望值和范围。(见下文)</p>
<p><img src="https://miro.medium.com/max/1025/1*iSvZ60-cnf0qTPfwEGDHCw.png" alt="1*iSvZ60-cnf0qTPfwEGDHCw" width="600" height="400" loading="lazy"></p>
<h3 id="">知道你自己在市场上的价值</h3>
<p>如果你不知道你的市场价值，你就无法有效和目标公司进行谈判。多年来，公司一直对薪酬信息保密，因此候选人在信息方面处于巨大的劣势。</p>
<p>幸运的是，近年来薪酬信息已经逐渐透明化，许多网站从许多候选人中收集到必要的信息，然后按级别、工作职能和地点呈现匿名的薪酬数据。一个著名的网站是<a href="http://levels.fyi/">levels.fyi</a>。</p>
<p><img src="https://miro.medium.com/max/917/1*LCu-2A8IXNYVfe-m9t5AFQ.png" alt="1*LCu-2A8IXNYVfe-m9t5AFQ" width="600" height="400" loading="lazy"></p>
<p>3-5年SWE工作经验的最高薪酬。来源:levels.fyi</p>
<p><img src="https://miro.medium.com/max/912/1*9pETieZ01nFFBNkjoz7MbA.png" alt="1*9pETieZ01nFFBNkjoz7MbA" width="600" height="400" loading="lazy"></p>
<p>5年以上SWE工作经验的最高薪酬。来源:levels.fyi</p>
<p>正如你在上面看到的，所有高薪工作都在旧金山湾区(Bay Area)。拥有3-5年工作经验的SWEs可以获得高达29万美元的TC，拥有5年以上工作经验的SWEs可以获得超过40万美元的TC。</p>
<p>对于任何非湾区的工程师来说，30万至40万美元的总薪酬可能令人瞠目结舌。但请记住，湾区是美国房价最高的区，因为很多人的工资要高得多。加州帕洛阿尔托的房价中位数为280万美元(资料来源:Zillow.com)，旧金山都会区(资料来源:<a href="https://censusreporter.org/profiles/31400US4186041884-san-francisco-redwood-city-south-san-francisco-ca-metro-division/">censusreporter.com</a>)为110万美元。</p>
<p>相比之下，纽约曼哈顿的房价中位数为120万美元(数据来源:Zillow.com)，而纽约/新泽西都会区的房价中位数仅为44万美元。(来源:[censusreporter.com] <a href="https://censusreporter.org/profiles/31000us35620-new-york-newark-jersey-city-ny-nj-pa-metro-area/">42</a>)</p>
<p>结合在levels.fyi上筛选出你的水平(从上一步获得)和公司名称，你可以清楚地看到offer的平均TC及其范围。例如，对于旧金山湾区的谷歌L4 SWE，offer的平均TC约为26万美元，范围从20万美元到32万美元。所以，如果你收到了只有20万美元的谷歌L4的offer，那么你就知道你还有讨价还价的空间。</p>
<p><img src="https://miro.medium.com/max/1055/1*de6XA2-BzEbzRDASwdWEXA.png" alt="1*de6XA2-BzEbzRDASwdWEXA" width="600" height="400" loading="lazy"></p>
<h3 id="">初创公司</h3>
<p><img src="https://miro.medium.com/max/285/0*m0izqd9brSBsnkdr" alt="0*m0izqd9brSBsnkdr" width="600" height="400" loading="lazy"></p>
<p>Levels.fyi 是一个很好的用来比较更成熟公司的offer（无论是上市公司还是私营公司）的工具，因为这些公司的薪酬中的股票部分可以更有把握地用美元来评估。</p>
<p>但是对于早期的初创公司，你在 Levels.fyi 上通常找不到可靠的数据，这往往是因为以下两种情况：</p>
<ol>
<li>一定比例的公司股票，或者</li>
<li>一定数量的股票期权。公司招聘人员或CEO可能会告诉你，虽然你现在的股权价值很低，但如果公司在3-5年内上市，它的价值可能会增长20-50倍。</li>
</ol>
<p>实际上，这些股权成分很难评估，极其缺乏流动性，多年来没有任何货币价值，实际上当<a href="https://www.forbes.com/sites/neilpatel/2015/01/16/90-of-startups-will-fail-heres-what-you-need-to-know-about-the-10/#35d103c06679">90%的初创公司失败时</a>（来源：福布斯），它们的价值确实会归零。</p>
<p>我收到了一些来自早期初创公司的offer，他们大多存在典型的薪酬包现金部分较少（即基本工资和奖金较低），而股权部分较重（很多期权，潜在回报巨大……或者一无所有）的特点。这很符合常理，因为大多数早期初创公司并不盈利，他们支付的任何现金工资/奖金都会消耗他们手头的现金，或者用风险投资（VC）的术语来说，烧光他们的资金。</p>
<p>虽然我收到的这些初创公司offer确实做着令人兴奋的工作，前景看起来非常有希望——其中一个公司还有谷歌风投的支持——但最终我选择了谷歌，因为我需要大公司的确定性和稳定性。毕竟，我的孩子即将上大学。我不能承担加入初创公司几年后看到它失败而我的股权部分被抹去的风险。</p>
<p>然而，如果我年轻且没有孩子，我肯定会去初创公司工作，尝试一鸣惊人。如果我失败了，我不会有养家的压力，还有足够的时间重新开始。如果我的妻子赚的钱足以支付我们全家的开销，那么我也可以去初创公司工作，追求其潜在的上升空间。在金融术语中，这称为<a href="https://www.investopedia.com/terms/d/diversification.asp">多元化</a>——通过将风险较高的股票与较安全的股票或债券结合起来，你实际上可以实现更高的<a href="https://www.investopedia.com/terms/r/riskadjustedreturn.asp">风险调整后收益</a>。</p>
<h3 id="offer">不要在第一次电话联系中接受Offer</h3>
<p><img src="https://miro.medium.com/max/740/0*dhK83JNgpbSsRcI-.jpg" alt="0*dhK83JNgpbSsRcI-" width="600" height="400" loading="lazy"></p>
<p>当你第一次通过面试被发放Offer时，招聘人员通常会通过电话告诉你 Offer 的详细信息（基本工资、奖金、股权奖励等）。这被称为“口头 Offer”。你在第一次电话中需要做的是感谢招聘人员，记下这个 Offer 所有的详细信息，重复一遍以确认，并请他们通过电子邮件发送这些详细信息。然后挂断电话。</p>
<p>记住，不要当场接受工作。（如果这是你的梦想工作，可以在挂断电话后跳起来庆祝。）有时候，招聘人员会拒绝以书面或电子邮件形式发送给你。如果是这样，那么请你将刚刚写下的 Offer 详细信息发送给他们，并询问你所听到的是否正确。他们通常会确认。</p>
<p>这很重要，因为一旦有书面记录，招聘人员就不容易收回他们在电话中告诉你的内容。</p>
<p>很多时候，招聘人员会催促你立即在电话中口头接受 Offer，或者给你一个 24 小时的接受期限。不要上钩！你应该总是尝试争取更好的 Offer。</p>
<h3 id="offeroffer">Offer 谈判——当你有多个Offer的时候</h3>
<p><img src="https://miro.medium.com/max/293/1*I3BYbnGWZCkQOJKaxwGSdA.png" alt="1*I3BYbnGWZCkQOJKaxwGSdA" width="600" height="400" loading="lazy"></p>
<p>Offer 谈判就像玩高赌注的扑克——毕竟，我们谈的是成千上万的美元——这既令人兴奋又有压力。对于像我这样的人来说，这也可能很让人害怕。不过有了 levels.fyi 的信息后，如果那个 Offer 太低的话，你可以揭穿招聘人员的虚张声势。</p>
<p>在 Offer 谈判过程中，有一个强有力的 Offer 或者说一副强有力的底牌是有帮助的。很多招聘人员很愿意尝试匹配竞争对手的 Offer。他们可以将竞争对手的 Offer 呈递给招聘/薪酬委员会，作为提出更好 Offer 的强有力理由。</p>
<p>在这种情况下，你可以尝试让这些公司竞标你的薪酬。竞标每天都在我们身边发生，比如在股票市场、eBay 和 Google Ads 中，当某种商品有需求时，这很正常。竞标过程确保商品以公平的市场价格展示它的价值。</p>
<h3 id="offeroffer">Offer 谈判——当你只有一个Offer</h3>
<p>即使你没有底牌——即只有一个 Offer 或者仅有比这个 Offer 更低的 Offer——你也可以告诉招聘人员你对这家公司非常感兴趣，但你的薪资期望实际上是 $XYZ。招聘人员可能会要求你证明这个数字，你可以说这是基于 levels.fyi 的数据，或者是你朋友/同事的相似年资和他们的总薪资是 $XYZ。</p>
<p>如果你表现得专业，很有可能最初的 Offer 会有所提高。公司很不可能因为你试图谈判就收回其原始 Offer。毕竟，公司投入了大量精力寻找合格的候选人，所以他们不想因为小幅增加而失去好候选人。所以你礼貌地要求更多薪酬是没有任何损失的。</p>
<h3 id="offer">Offer 谈判——可以不只是谈钱</h3>
<p>记住，<strong>不仅仅是薪酬可以谈判</strong>。公司可以提供的任何东西都在谈判桌上。</p>
<p>例如，你可以要求在不同的组工作（比如核心组而不是支持组）、不同的职称（比如高级软件工程师而不是软件工程师）、不同的工作职能（比如研究工程师而不是软件工程师）、更多的带薪休假天数、灵活的在家办公时间，或更好的搬迁打包。</p>
<p>当然，这在不同公司之间差异很大。大公司可能不那么灵活，但较小的公司可能无法匹配大公司的货币补偿，可能更愿意考虑这些替代要求。再次强调，如果你礼貌地提出要求，是没有坏处的。</p>
<h3 id="offer">Offer 谈判——不要太贪心</h3>
<p>经过几轮与招聘人员的来回交谈后，如果你感觉没有太多空间可以谈判了，就停止要求更多。大公司中的招聘人员每天都会见到这种情况，可能不会太介意。但对于较小的公司，招聘人员可能直接与你的招聘经理甚至是老板/创始人合作。如果你讨价还价太激烈，可能会被认为太贪婪。因此，即使他们雇用你，他们可能会对你产生负面看法。<strong>知道何时收手。</strong></p>
<h3 id="offer">Offer 拖延策略</h3>
<p><img src="https://miro.medium.com/max/650/0*m5gcnqcx9RKhAzZj.png" alt="0*m5gcnqcx9RKhAzZj" width="600" height="400" loading="lazy"></p>
<p>如果在谈判后你对任何 Offer 都不太满意，你应该尝试推迟接受这些 Offer。这可能发生在某些 Offer 的工作职能非常有吸引力，但薪酬太低，而其他 Offer 的薪酬很好，但你不喜欢工作职能的情况下。</p>
<p>推迟一个 Offer 可以让你有更多时间进行面试，获得那个完美的 Offer。但这确实有风险，因为职位可能随时被填满。但对于大科技公司，这种风险很小，因为他们总是在招聘。如果你需要推迟一个 Offer，以下是一些策略。（免责声明：我没有尝试过所有这些策略，有些是别人建议的。）</p>
<ul>
<li>与团队/同事见面：请求一次通话、一起喝咖啡或共进晚餐，以了解团队其他成员或同事的更多信息。这不仅是展示兴趣的好方法，也是了解公司/团队文化的有力信号。</li>
<li>请求产品演示：请求对方进行产品演示是展示兴趣的另一种好方法。这也是评估技术挑战、产品路线图以及公司产品导向程度的好方法。你通常可以将此与团队共进午餐结合起来。</li>
<li>询问各种股票/期权相关问题，例如公司的当前估值、最近的融资轮次、公司的退出计划/策略以及期权行权计划等。</li>
</ul>
<p>这些策略对大多数公司都很有效。对于一些大科技公司，一旦他们决定给你 Offer，通常这个 Offer 至少会有效几个月，因为你达到了他们的技术门槛，他们会随时愿意雇佣一个优秀的软件工程师。你的招聘人员可能不愿意告诉你这一点，因为他们希望尽快敲定你，但你可以通过其他渠道了解，例如 Google 搜索和 Blind App。</p>
<p>最后，记住所有招聘人员都希望你被公司录用。能够敲定一个候选人（即将合格的候选人转化为员工）是他们的绩效指标之一，与招聘人员的绩效奖金挂钩。所以<strong>把你的招聘人员视为你的支持者，而不是对手</strong>。</p>
<h2 id="52">5.2 团队匹配/选择</h2>
<p><strong>不要仅仅因为一份工作现在支付最高工资就选择它。</strong> 虽然在你决定是否接受offer的过程中薪酬是一个重要因素，但更重要的可能是这份工作对你职业生涯的影响。我将在下面讨论如何选择一家公司/团队，以最大化你职业生涯的潜力。</p>
<h3 id="">团队匹配过程</h3>
<p><img src="https://miro.medium.com/max/922/0*tD7uB2HX3Adlzhsm.png" alt="0*tD7uB2HX3Adlzhsm" width="600" height="400" loading="lazy"></p>
<p>对于许多公司（包括苹果、微软和许多其他公司），你将与几个特定的团队进行面试。当你获得这份工作时，你将只会参与其中一个团队的工作。</p>
<p>然而，对于一些公司，如谷歌和Facebook，他们会将大多数候选人作为通用的软件工程师（SWE）进行面试，并且只有在决定向该候选人发放offer后才尝试将其匹配到一个团队。由于我只经历过这两家公司的团队匹配过程，下面我将谈一谈我的经验。</p>
<p>Facebook会先发出一个正式的书面offer，然后再将你匹配到一个团队。团队匹配可以在你加入之前进行，例如你与招聘经理通话时，或者在你加入后，在前4-6周的培训/入职阶段进行。这一过程的优点是候选人知道他们的offer是确定的。缺点是你可能会面临在入职培训期间找不到喜欢的团队的风险。不过我在Facebook的朋友告诉我，这种情况极不可能发生。</p>
<p>谷歌的做法则非常不同。他们不像Facebook那样进行长时间的培训/入职流程。他们首先会给你一个口头offer，然后要求你在<strong>发出正式的书面offer之前</strong>匹配到一个团队。即使在你被匹配到一个团队之后，这个offer也可能会被招聘委员会拒绝或修改，甚至是最终的薪酬，也可能由薪酬委员会在最初的口头offer基础上进行调整。</p>
<p>我从许多帖子中了解到，这个过程既漫长又艰难。就我个人经历来看，团队匹配过程花了我1.5个月，这确实漫长且令人沮丧。有时候我真的认为我无法完成团队匹配过程，并想加入另一家公司。</p>
<p>如果谷歌像Facebook那样先给我一个正式的书面offer，这会为我减少很多压力，因为我会明确知道自己将要为谷歌工作，只需找到一个团队即可。幸运的是，事情最终对我来说很顺利，我终于与一个自己选择的小组匹配，之后不久offer也被各个委员会批准了。</p>
<h3 id="">如何选择一个团队</h3>
<p><img src="https://miro.medium.com/max/1540/0*QValU2nlepbet2yU" alt="0*QValU2nlepbet2yU" width="600" height="400" loading="lazy"></p>
<p>这里有一些我在面试期间或录用阶段问自己的一些问题。你不需要问面试官这些问题，但你需要从你的面试中，或者从与公司和团体的对话中提取出这些问题的答案。</p>
<ol>
<li><strong>我将加入哪个组?</strong> 我想加入公司的一个“核心”小组——公司为这个小组大量投入资源，这样的小组通常是它的旗舰产品集团或高增长集团。在这些团队中工作可以得到稳定性和成长。</li>
<li><strong>我将为公司或小组做什么类型的工作?</strong> 我寻找的是能在我以后的职业生涯中应用的工作经验。我更喜欢使用公开可用的工具和技术，而不是使用公司的专有技术。举个例子，如果我在做一个广告推荐机器学习系统，我相信我很容易就能找到另一家想要改进其广告/产品推荐系统的公司。但是，我对使用公司专有的脚本语言自动化一些内部流程不太感兴趣。</li>
<li><strong>我能在这家公司/小组里学到什么?</strong> 工作是双向选择，能为双方都带来价值的。我希望能够为我的公司做出很大贡献，与此同时，我想从工作中学到很多东西，这样当我找下一份工作的时候，我掌握的技能就能让我很受欢迎。我相信AI/ML、计算机视觉、云计算、自动驾驶汽车和AR/VR技能在未来会有很大的需求，所以我想在下一份工作中学习这些技能。</li>
<li><strong>我对这份工作有热情和激情吗?</strong> 如果你对自己的工作没有激情，那么不管这份工作给你多少薪水，你都不会快乐，也不会投入120%的精力。我对量化金融充满热情，因为看到数学和技术改变整个行业是很酷的。但在10多年后，我现在对AI/ML充满热情。你不需要告诉电脑该怎么做，这真是太棒了，太神奇了。你所要做的就是给它提供数据，它会找出比别人用代码做得更好的方法。</li>
<li><strong>我喜欢我的领导和同事吗?他们喜欢我吗?</strong> 想要一个欣赏你并在新工作中支持你的领导。你也想享受和队友在一起的时光，因为你每天和他们在一起的时间超过8个小时，甚至比和家人在一起的时间还要长!</li>
</ol>
<p>很多时候并不是所有这些问题都能得到让你满意的答案，然后你必须权衡利弊。但如果以上任何一项给了你一个危险的信号，我会认真考虑放弃那个职位。</p>
<p>我最终选择了谷歌Pixel Phone的相机组，因为它提供了我非常感兴趣的三样东西:计算机视觉、机器学习和硬件，这正是我的机器人自动驾驶汽车项目的全部内容!此外据我所知，谷歌现在正致力于其硬件和智能家居战略，Pixel手机将成为该生态系统的核心部分。</p>
<h2 id="">结语</h2>
<p><img src="https://miro.medium.com/max/445/1*ehMi2Z73NL4MxN6alUr1yw.png" alt="1*ehMi2Z73NL4MxN6alUr1yw" width="600" height="400" loading="lazy"></p>
<p>感谢你读到这里。在过去的6个月里，我经历了一段漫长的旅程。通过我的个人项目和密集的面试准备，我相信我现在是一个更好的工程师(或者至少是一个更好的面试者 ;-)。在这篇文章中，我讲述了自己的经验和教训。</p>
<p>我发现数据结构和算法是任何科技面试的核心，除了练习更多的LeetCode上的问题外，没有捷径可以做得更好。一旦你对数据结构与算法和系统设计问题有了良好的了解，我在这篇文章中提出的建议应该会帮助你做些更有利于你的事情。</p>
<p>我建议你把这篇文章收藏起来，因为在接下来的2-6个月里，随着你找工作的进展，你会需要回顾这篇文章。在你真正进入某一阶段之前，那之后的阶段中所需要的一些技巧并没有多大意义。例如，你可能需要进行几次电话面试来理解第四步中提出的建议，在你得到任何offer之前，你当然不应该考虑第五步的offer谈判。</p>
<p>如果你正在参加面试，请在下面留言，让我知道我的建议哪些有效，哪些不太有效，这样其他人也会受益。也欢迎在评论中提出新的建议，谢谢!</p>
<h2 id="">一些使用到的资源</h2>
<p>以下是我在求职过程中使用过的资源的附录(按字母顺序排列)。希望你也会发现它们对你有帮助。</p>
<p><a href="https://www.teamblind.com/"><strong>Blind</strong></a>: 这是一个允许不同公司(主要是科技公司)的员工匿名发布问题和答案的应用程序。人们通常会讨论职业决策、公司文化、面试和薪酬等问题。</p>
<p>我发现这个平台有好有坏。好的地方是你会得到更坦诚的回答/回应，有时还会得到内幕消息。坏的地方是有些人会因为匿名而写下冒犯性的回复，这样的环境有时可能是有害的。我已经警告过你了。</p>
<p><img src="https://miro.medium.com/max/730/0*r7S6egJR6P9O9WP7" alt="0*r7S6egJR6P9O9WP7" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.coursera.org/"><strong>Coursera</strong></a>: 学习你感兴趣的科目。它是免费的，或者只收取象征性的费用。我在那里学了ML和DL课程。</p>
<p><img src="https://miro.medium.com/max/512/0*EcegqF8UG1uE9qGO" alt="0*EcegqF8UG1uE9qGO" width="600" height="400" loading="lazy"></p>
<p><a href="http://deeplearning.ai/"><strong>DeepLearning.ai</strong></a> <strong>and</strong> <a href="https://www.freecodecamp.org/news/career-switchers-guide-to-your-dream-tech-job/Workera.ai"><strong>Workera.ai</strong></a></p>
<ul>
<li>如果你对计算机视觉(CV)或自然语言处理(NLP)中的深度学习技术感兴趣，参加5门课程的深度学习系列课程。</li>
<li>通过筛选测试，被推荐给顶尖科技公司ML团队的招聘经理</li>
</ul>
<p><a href="https://amzn.to/31O2JBe"><strong>Elements of Programming Interviews</strong></a> <strong>Book:</strong> 这是另一本优秀的面试准备书，类似于CtCI书。但它更适合有经验的工程师，而CtCI可以被没有多少算法背景的初学者阅读。</p>
<p><img src="https://miro.medium.com/max/350/0*5aU2C4jyITY0A8-D.jpg" alt="0*5aU2C4jyITY0A8-D" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.geeksforgeeks.org/"><strong>GeeksForGeeks</strong></a>: 这是另一个与LeetCode类似的有非常全面的A&amp;DS问题和解决方案的网站。这个网站是免费的，有时会包含在LeetCode中找不到的面试问题。</p>
<p><img src="https://miro.medium.com/max/667/0*ZTMjAXFNZJnxw5wM.png" alt="0*ZTMjAXFNZJnxw5wM" width="600" height="400" loading="lazy"></p>
<p><a href="https://www.glassdoor.com/index.htm"><strong>Glassdoor</strong></a></p>
<p><img src="https://miro.medium.com/max/589/1*qVt2_-4lyAnBgBxpQ7JV5A.png" alt="1*qVt2_-4lyAnBgBxpQ7JV5A" width="600" height="400" loading="lazy"></p>
<ul>
<li>查看公司的员工评价</li>
<li>找到之前的面试问题</li>
<li>设置工作提醒以接收新的工作更新</li>
</ul>
<p><a href="https://www.google.com/"><strong>Google Search</strong></a>: 生活中<strong>任何</strong>问题的起点。我还需要多说吗?</p>
<p><img src="https://miro.medium.com/max/1280/0*foG6evRh08Khr-wZ.jpg" alt="0*foG6evRh08Khr-wZ" width="600" height="400" loading="lazy"></p>
<p>[<strong>Internal Employees:</strong>] 总是试着联系你的朋友或者朋友的朋友，如果他们在你想申请的公司工作。他们将是你最有效的线人和支持者。如果你适合这份工作，<a href="https://www.linkedin.com/in/dctian/">在领英上联系我</a>, 我很乐意把你推荐给谷歌，或者我在其他顶尖科技公司工作的朋友。</p>
<p><a href="http://leetcode.com/"><strong>LeetCode</strong></a></p>
<ul>
<li>练习A&amp;DS问题</li>
<li>使用LeetCode高级版(35美元/月或99美元/年带优惠券)查找给定公司过去的面试问题。我建议你付年费。就把它想象成你的编程大脑的健身房会员吧。</li>
</ul>
<p><a href="https://levels.fyi/"><strong>Level.fyi</strong></a>: 这个网站按公司、资历级别、地点和工作职能列出了众包工资信息，这样你就知道你是否从公司得到了一个公平的报价。当然，这只适用于大公司，因为大公司往往有更多的数据来源。</p>
<p><img src="https://miro.medium.com/max/560/0*y6YcevhJEHIeMO0-.jpg" alt="0*y6YcevhJEHIeMO0-" width="600" height="400" loading="lazy"></p>
<p><a href="http://linkedin.com/"><strong>LinkedIn</strong></a>:</p>
<ul>
<li>查找人员的专业和教育背景</li>
<li>打开“Open to new opportunities”设置，这样招聘人员就能找到你。</li>
<li>使用领英高级连接到谁感兴趣的人你</li>
<li>设置职位提醒以接收新的职位更新</li>
</ul>
<p><a href="https://medium.com/"><strong>Medium</strong>/<strong>Blog Sites</strong></a>:</p>
<ul>
<li>阅读教程和操作指南来帮助你的个人项目</li>
<li>在媒体或其他地方写博客，展示你自己的个人项目</li>
</ul>
<p><img src="https://miro.medium.com/max/590/1*YNzUC78SPulsAznKTeUyNw.png" alt="1*YNzUC78SPulsAznKTeUyNw" width="600" height="400" loading="lazy"></p>
<p><a href="https://triplebyte.com/iv/Wzwz8pq/cp/header"><strong>TripleByte</strong></a>: 如果你通过了他们的技术筛选，你就可以跳过电话面试，直接去现场面试。详情请参阅上面的详细说明。</p>
<p><a href="https://youtube.com/"><strong>YouTube</strong></a></p>
<p><img src="https://miro.medium.com/max/491/1*lVrmEfw_VMiq51OoZNKVkw.png" alt="1*lVrmEfw_VMiq51OoZNKVkw" width="600" height="400" loading="lazy"></p>
<ul>
<li>当你在做个人项目时，观看教程和操作指南</li>
<li>观看系统设计和算法视频</li>
<li>警告：不要在准备面试期间分心，看几个小时的视频摸鱼取乐！</li>
</ul>
<p>就是这些，这是一项艰巨的任务，但只要你付出时间和努力，你就能做到。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Ep. 3 陈志成：极客，老师，佛子 ]]>
                </title>
                <description>
                    <![CDATA[ 今天我们邀请了全栈工程师陈志成。他从小在父母的影响下，对编程和教育感兴趣，小学时开始接触电脑，初中时和父亲一起用 Visual Basic 为学校开发教学成绩管理系统。在大学阶段，他未能就读自己喜欢的专业，但持续自学编程，给学校做项目，并和老师一起搭建在线问答平台，解答同学们的各种问题。 陈志成志成在大三时停止学业，成为一名全职的后端开发者。在几年 996 工作和短暂的辞职流浪之后，他理解了生活的意义，重返职场，在一个月之内学完 freeCodeCamp 的全部认证课程，系统地学习前端和 NodeJS，并参与开源贡献，成为 freeCodeCamp Top Contributor，而这段经历也让他在面试时受到雇主的青睐。 志成曾经加入初创公司，也曾在全球化的企业中参与过用户过亿的产品的开发。现在，他在一家做企业管理产品的创业公司担任技术负责人。 他将分享自己的学习经历、职业发展历程、对前端和后端开发的思考，以及对于人生使命的探索。 如果你喜欢我们的节目，请记得给我们好评，并把节目分享给朋友们。 欢迎在 https://chinese.freecodecamp.org/ 查看更 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/interview-chen-zhi-cheng-mission-and-front-end-vs-back-end-development/</link>
                <guid isPermaLink="false">64c8e970b05f0606c70fb728</guid>
                
                    <category>
                        <![CDATA[ 播客 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 后端开发 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 全栈 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 03 Aug 2023 04:10:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/08/----_--.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>今天我们邀请了全栈工程师陈志成。他从小在父母的影响下，对编程和教育感兴趣，小学时开始接触电脑，初中时和父亲一起用 Visual Basic 为学校开发教学成绩管理系统。在大学阶段，他未能就读自己喜欢的专业，但持续自学编程，给学校做项目，并和老师一起搭建在线问答平台，解答同学们的各种问题。</p><!--kg-card-begin: html--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2023/08/WechatIMG43-1.png" class="kg-image" alt="Chen Zhicheng" width="1110" height="1292" loading="lazy"><figcaption>陈志成</figcaption></figure><!--kg-card-end: html--><!--kg-card-begin: html--><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/6436a1ad" title="嵌入内容" loading="lazy"></iframe><!--kg-card-end: html--><p>志成在大三时停止学业，成为一名全职的后端开发者。在几年 996 工作和短暂的辞职流浪之后，他理解了生活的意义，重返职场，在一个月之内学完 freeCodeCamp 的全部认证课程，系统地学习前端和 NodeJS，并参与开源贡献，成为 freeCodeCamp Top Contributor，而这段经历也让他在面试时受到雇主的青睐。</p><p>志成曾经加入初创公司，也曾在全球化的企业中参与过用户过亿的产品的开发。现在，他在一家做企业管理产品的创业公司担任技术负责人。</p><p>他将分享自己的学习经历、职业发展历程、对前端和后端开发的思考，以及对于人生使命的探索。</p><p>如果你喜欢我们的节目，请记得给我们好评，并把节目分享给朋友们。</p><p>欢迎在 <a href="https://chinese.freecodecamp.org/">https://chinese.freecodecamp.org/</a> 查看更多免费的编程学习资源。</p><h2 id="-"><strong>更多关于嘉宾的信息</strong></h2><ul><li><a href="https://github.com/ZhichengChen">GitHub 主页</a></li></ul><h2 id="--1"><strong>主要话题</strong></h2><ul><li>02:58 初中时开发教学成绩管理系统帮助学校提升效率</li><li>05:00 在父母的影响下萌发对编程和教育的热爱</li><li>07:25 大学时自学编程，将 96 年开始的电话热线构建为在线帮助平台</li><li>08:33 辞掉 996 的后端开发工作，成为“流浪的程序员”</li><li>11:17 在云南过泼水节，明白生活的意义</li><li>12:15 加入创业公司，在 freeCodeCamp 自学前端</li><li>13:55 开源贡献经历助力自己进入大厂</li><li>17:05 五级工程师模型</li><li>17:46 把算法中的分治思想应用于工作</li><li>20:10 前端开发 .vs. 后端开发</li><li>22:29 如何学习框架</li><li>23:09 工程师掌握哪些知识可以加分</li><li>25:53 技术团队如何协作</li><li>29:08 REST API</li><li>30:44 如何不断提升自己</li><li>32:18 成长为合格的软件工程师需要几年</li><li>34:33 通过禅修找到人生使命</li></ul><h2 id="--2"><strong>提到的资源</strong></h2><ul><li><a href="https://www.wikiwand.com/en/Visual_Basic">Visual Basic</a></li><li><a href="https://cloud.tencent.com/developer/article/1140927">五级工程师模型</a></li><li><a href="https://www.wikiwand.com/zh/%E5%88%86%E6%B2%BB%E6%B3%95">分治算法</a></li><li><a href="https://www.freecodecamp.org/chinese/news/frontend-vs-backend-whats-the-difference/">前端 .vs. 后端</a></li><li><a href="https://www.freecodecamp.org/chinese/news/search?query=rest%20api">REST API</a></li><li>《一个瑜伽行者的自传》</li><li>《世界上最快乐的人》</li><li>《从哈佛到阿弥陀佛》</li><li>《佛子行》</li><li>《高效能人士的七个习惯》</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 软件开发人员是做什么的？软件工程师职业概述 ]]>
                </title>
                <description>
                    <![CDATA[ 如果你正在学习成为一名专业的软件开发人员，你可能想知道软件开发人员每天在工作中做什么。 在本文中，我将讨论软件开发人员的典型一天以及做什么工作。 软件开发人员的主要职责 作为一名软件开发人员，你的主要职责将包括修复代码库中的错误、构建新功能、为应用程序编写测试、编写文档、执行代码审查以及参与团队讨论会议。 非常有经验的开发人员，如软件架构师，将负责软件应用程序的更高级别的技术和架构决策。 让我们更详细地了解每一个职责。 调试代码库和修复错误 当你刚开始作为软件开发人员时，你的主要职责之一是修复小错误并调试代码库中的小错误。 会有一个问题（issue）列表，将工作分解为可管理的部分，其中一些将包含应用程序中的错误。 你将处理一些有助于你学习代码库的小项目。作为初级开发人员，头几个月花在代码库上是很正常的，很多工作对你来说都是新的。 只需确保提出大量问题并尝试与团队中的其他开发人员结对编程即可。与其他开发人员协作将帮助你学习新技术并更快地成长。 我从我的同事那里学到了很多东西，而且大多数时候，他人可以帮助我以不同的方式看待问题。 构建新功能 随着你开始对工作感觉更加自在 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/what-does-a-software-developer-do-software-engineer-career-overview/</link>
                <guid isPermaLink="false">63034f3860480505ded7ae73</guid>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 软件开发 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Mon, 22 Aug 2022 09:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/08/desola-lanre-ologun-IgUR1iX0mqM-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/what-does-a-software-developer-do-software-engineer-career-overview/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What Does a Software Developer Do? Software Engineer Career Overview</a>
      </p><p>如果你正在学习成为一名专业的软件开发人员，你可能想知道软件开发人员每天在工作中做什么。</p><p>在本文中，我将讨论软件开发人员的典型一天以及做什么工作。</p><h2 id="-">软件开发人员的主要职责</h2><p>作为一名软件开发人员，你的主要职责将包括修复代码库中的错误、构建新功能、为应用程序编写测试、编写文档、执行代码审查以及参与团队讨论会议。</p><p>非常有经验的开发人员，如软件架构师，将负责软件应用程序的更高级别的技术和架构决策。</p><p>让我们更详细地了解每一个职责。</p><h3 id="--1">调试代码库和修复错误</h3><p>当你刚开始作为软件开发人员时，你的主要职责之一是修复小错误并调试代码库中的小错误。</p><p>会有一个问题（issue）列表，将工作分解为可管理的部分，其中一些将包含应用程序中的错误。</p><p>你将处理一些有助于你学习代码库的小项目。作为初级开发人员，头几个月花在代码库上是很正常的，很多工作对你来说都是新的。</p><p>只需确保提出大量问题并尝试与团队中的其他开发人员结对编程即可。与其他开发人员协作将帮助你学习新技术并更快地成长。</p><p>我从我的同事那里学到了很多东西，而且大多数时候，他人可以帮助我以不同的方式看待问题。</p><h3 id="--2">构建新功能</h3><p>随着你开始对工作感觉更加自在并获得更多经验，你将开始对代码库承担更多责任。你可以开始构建新功能。</p><p>功能是软件产品的基本组成部分。这种类型的工作将比小错误修复花费更长的时间，并让你有机会为项目做出更多贡献。</p><p>这也将为你提供解决更复杂问题并作为开发人员成长的机会。我处理的第一个功能是为公司网站实现一个浅色/深色主题。</p><p>我花时间思考如何为我们现有的代码库实现此功能的最佳方法，然后我开始实施我的解决方案并测试网站。</p><p>最后阶段是通过代码审查并更新网站文档以包含新功能。</p><p>整个经验教会了我如何构建可维护和可扩展的解决方案，这些解决方案可以很好地与现有代码库配合使用。</p><h3 id="--3">为应用程序编写测试</h3><p>软件应用程序的一个重要元素是确保它们以应有的方式工作。这就是测试的用武之地。</p><p>软件开发人员负责编写不同类型的测试，例如单元测试、集成测试、功能测试等等。他们还可能参与手动测试，其中包括开发人员使用一组测试用例检查应用程序，并确保它按预期的方式工作。</p><p>我最初的测试经验之一是冒烟测试和为我们的几个应用程序编写手动测试指南。冒烟测试是开发人员检查应用程序并确保基本功能完好无损。</p><p>编写测试指南涉及开发人员了解应用程序的所有功能并创建测试用例。这些测试用例涉及写下用户应该经历的确切步骤和预期结果。</p><p>我第一次必须编写手动测试指南时，并没有意识到在写出每个步骤时需要多么具体。但是一旦我写了几个测试用例，这个过程就开始变得更有意义，编写这些手动测试用例变得更容易了。</p><p>如果你有兴趣了解有关测试的更多信息，那么我建议你阅读这篇<a href="https://chinese.freecodecamp.org/news/types-of-software-testing/"> freeCodeCamp 文章</a>。</p><h3 id="--4">编写文档</h3><p>文档是任何软件应用程序的重要组成部分。记录应用程序的主要功能以及为开发人员在本地运行它所需的所有步骤非常重要。</p><p>每当你加入一个新项目时，如果你发现文档中有任何令人困惑或遗漏的地方，请务必向团队提出。这将是更新文档的好机会。</p><p>有时，当你正在处理一个项目并且团队忙于按时完成任务时，你们可能会耽误文档更新。当事情稍微平静下来时，请确保重新访问文档并确保它是最新的和准确的。</p><h3 id="--5">执行代码审查</h3><p>构建软件是一项团队活动，团队中的每个人都必须让他们的同事审查他们的代码。对代码库进行更改后，你将创建所谓的“拉取请求 pull request”。</p><p>该拉取请求代表你要添加到代码库的更改。然后，你将请求团队成员进行审核，他们将查看你的代码并提供反馈。</p><p>重视反馈也很重要，因为你的团队只是试图帮助你发现问题并就如何优化你的解决方案提出建议。</p><p>提供建设性的反馈并确保拉取请求中的所有内容都能解决问题或满足新功能的要求也很重要。</p><p>要了解有关代码审查过程的更多信息，请阅读这篇 <a href="https://www.freecodecamp.org/news/proven-code-review-best-practices/">freeCodeCamp 文章</a>。</p><h3 id="--6">参加团队讨论会</h3><p>构建软件产品有很多移动组件。在整个过程中，整个团队能够保持信息对称，这一点很重要。</p><p>这些会议的目的是让每个团队成员与团队分享状态更新，并分享任何阻碍他们推进项目的障碍。如果你是软件开发的新手，你可能会对参加会议感到紧张。</p><p>你可能还会对会议中使用的一些讨论和所有新术语感到不知所措。试着提出问题并记住，理解软件过程的所有细节需要一段时间。</p><p>我的自然倾向是在会议中更加矜持，但我更加努力地直言不讳，并就我不明白的问题提出问题。有时你会发现其他人也有同样的问题，并且很高兴你问了这个问题。</p><p>尽你最大的努力积极参与会议，分享你对项目的意见，并就你需要帮助的问题提出问题。</p><h2 id="--7"><strong>总结</strong></h2><p>如你所见，构建软件产品有很多组件。你的时间不会花在连续 8 小时编写代码上。</p><p>相反，你的时间将被用于会议、结对编程、调试代码、阅读文档、编写文档和测试软件。</p><p>我希望你喜欢这篇文章，并更好地理解成为一名软件开发人员是什么样的。祝你在软件之旅中好运。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何通过可持续的小习惯获得你的第一份开发工作 ]]>
                </title>
                <description>
                    <![CDATA[ 过渡到新职业是极具挑战性和要承受很大的压力的事。 信息的数量不是问题。我们可以获取比以往更多的信息。但问题是如何有效利用我们获取的信息。 我在生活和事业获得的收获越大，我越相信，通往成功的道路不是设定巨大的目标，然后每天都为实现这些目标而努力。 路径在于你选择的目标，然后设计简单的系统，用于小习惯促进实现这些目标。 但是一个关键的部分，不要在达到目标时衡量你的成功，而是在每次成功执行在你的系统内。 这意味着你处在持续成功的状态，而不是在99%时间内处于失败状态，只有短暂的成功。 这不仅在心理上更好，而且提高了你实现目标的可能性。 在这篇文章中，我们将讨论如何将这一理念应用于获得你的第一份开发工作的目标。我也注意到，即使你已经从事开发工作，这些策略依然适用于任何一个希望建立一个更充实，更健全的职业生涯的人。 这一点很重要，所以我要重申一下。我们在这里不是寻找短期的胜利，我们是在设计一个系统，建立一个习惯的集合，你将在你的职业生涯中作为一名开发者。 这些习惯不仅能让你找到第一份工作，而且随着你的进步，它们将帮助你扩大你的人脉，影响力和技能。这能帮助你找到你喜欢，报酬丰厚的 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-use-small-sustainable-habits-to-get-your-first-dev-job-2/</link>
                <guid isPermaLink="false">61e7d8076161280665ed82e6</guid>
                
                    <category>
                        <![CDATA[ 自我提升 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ luojiyin ]]>
                </dc:creator>
                <pubDate>Wed, 19 Jan 2022 09:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/01/1_NlqpTTAM8DbGl4paBmjE_g.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>过渡到新职业是极具挑战性和要承受很大的压力的事。</p>
<p>信息的数量不是问题。我们可以获取比以往更多的信息。但问题是如何有效利用我们获取的信息。</p>
<p>我在生活和事业获得的收获越大，我越相信，通往成功的道路不是设定巨大的目标，然后每天都为实现这些目标而努力。</p>
<p>路径在于你选择的目标，然后设计简单的系统，用于小习惯促进实现这些目标。</p>
<p>但是一个关键的部分，不要在达到目标时衡量你的成功，而是在每次成功执行在你的系统内。</p>
<p>这意味着你处在持续成功的状态，而不是在99%时间内处于失败状态，只有短暂的成功。</p>
<p>这不仅在心理上更好，而且提高了你实现目标的可能性。</p>
<p>在这篇文章中，我们将讨论如何将这一理念应用于获得你的第一份开发工作的目标。我也注意到，即使你已经从事开发工作，这些策略依然适用于任何一个希望建立一个更充实，更健全的职业生涯的人。</p>
<p>这一点很重要，所以我要重申一下。我们在这里不是寻找短期的胜利，我们是在设计一个系统，建立一个习惯的集合，你将在你的职业生涯中作为一名开发者。</p>
<p>这些习惯不仅能让你找到第一份工作，而且随着你的进步，它们将帮助你扩大你的人脉，影响力和技能。这能帮助你找到你喜欢，报酬丰厚的工作，并有丰富的机会供你选择。</p>
<p>这里的大部分想法源泉是<code>BJ Fogg</code>的《小习惯》，<code>James Clear</code>的《原子习惯》，以及我在没有任何经验或教育下获得第一份开发工作的经历。</p>
<p>我现在在阅读《微小的习惯》，我非常喜欢书中对简单性的关注，所以我们在这篇文件中关注<code>Fogg</code>的技巧。</p>
<p>让我们开始吧.</p>
<h2 id="">小习惯的的概述</h2>
<p>非常简单，让我们看看小习惯的理念和方法，在其核心部分，该系统遵循的理念是，最佳方法是做出持续的小改变。</p>
<p>Fogg 认为在进行持续的改变时，动力是可怜的工具。它让我们认为我们可以在短时间内发生重大改变。</p>
<p>问题是动力并不持续。因此，动力减弱时，你不会坚持你为自己设定的大的，雄心勃勃的目标，然后你会觉得自己是个失败者，于是你的动力就会消耗更多。对于你想做的大多数的大的改变，这个循环会重复。</p>
<p>相反，你应该在实现你的目标的过程中，通过尽可能小的行动来实现。</p>
<p>因此，与其试图养成每天做50个俯卧撑的习惯， 不如设定一天做两个的习惯。</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>我再次推荐你看Fogg的书《小习惯》，会对这种方法有更深入的探索。</p>
<p>现在，让我们看看如何将这种方法用于成功转型为一名开发者。</p>
<h2 id="">需要关注的事</h2>
<p>我们想把重点放在建立我们的开发工作的三个主要组成部分:</p>
<ol>
<li>你的开发技能</li>
<li>建立一个线上的东西</li>
<li>网络影响力</li>
</ol>
<p>让我们简单介绍这些内容，然后我们将它们转化为小习惯的方法。</p>
<h3 id="">你的开发技能</h3>
<p>这一条是不言自明的，如果你想成为一名开发者，你的开发技能要成长 <a href="https://chinese.freecodecamp.org/news/how-to-learn-from-coding-tutorials-and-avoid-tutorial-hell/">不要永远陷在教程的地狱里</a>.</p>
<p>教程地狱这样吸引人，是因为遵循教程和课程，并不像从头开始创建东西那样要花费大量的精力。</p>
<p>因此，你欺骗自己，以为自己在学习，而实际上你做的东西是在复制别人的东西。</p>
<p>但是，你把它建立起来，让它顺利工作，然后看到成品，让你的大脑感觉很良好，所以这个习惯巩固了，循环继续。</p>
<p>你要开始养成自己写代码，自己造东西的小习惯，这样会有一个更有用的反馈代替学习教程的反馈。</p>
<h3 id="">建立一个线上的东西</h3>
<p>建立一个线上包含了一些不同的东西，最重要的是社交媒体和你的个人网站。我的说的社交媒体是指<code>Twitter</code>和<code>LinkeIn</code>。</p>
<p>说出的你对线上的想法， 我也有我的想法。但是它们对你的职业生涯来说是无价的。</p>
<p>与大多数事情一样，在这些平台上的发展的关键是要保持一致的。因此也是跟<code>小习惯</code>框架是完美结合。</p>
<p>这些平台很大，特别是在开始时，你的账号影响力很小，你要保证你的账号每天活跃。</p>
<h3 id="">网络影响力</h3>
<p>最后，我们有网络，虽然在我们的在线存在包含了一些网络,因为要与其他人互动， <a href="https://chinese.freecodecamp.org/news/networking-for-aspiring-developers/">但是网络关注是更直接的</a>.</p>
<p>当你刚开始的时候，直接联系你欣赏的公司，向他们介绍自己，这是非常有用的。</p>
<p>这点像秘密武器，因为很少人这样做，但它非常强大。</p>
<p>让我们看看我们如何围绕这三个主要目标创造一些小习惯。记住，目标是在我们的大脑中建立习惯。然后，你可以随着时间推移增加这些事情中每一件的数量。</p>
<h2 id="">如何培养小习惯</h2>
<p>你需要想出锚定动作，锚定行动是针对每个人，因为它们是由你已经作为日常工作的一部分的事情组成的。</p>
<p>所以，我向你推荐养成小习惯，以及锚定动作，但需要你养成自己的小习惯。</p>
<p>对应技能发展，我推荐一些非常简单的事情。</p>
<p><strong>在我喝完第一口咖啡后，我将在自己的项目写一行代码</strong></p>
<p>记住，锚定动作应该针对你的，我在早上工作之前已经泡好了咖啡，所以第一口咖啡就是我的锚定。</p>
<p>不要因为这个任务简单容易，就打折扣。这是问题的关键，让它开始的时候容易得令人发指，随着你逐渐增加任务，雪球会越来越大。</p>
<p>现在，对于线上。</p>
<p><strong>在检查完我的电子邮件，我会在推特上写个深思熟虑的回复。</strong></p>
<p>同样，我在日常工作中，将自己的习惯固定下来。</p>
<p>最后，在网络方面:</p>
<p><strong>在我查看推特后，我会写下一个我想联系的人。</strong></p>
<p>相同的概念。</p>
<p>这些只是例子，我建议你从这三个开始，过几天，当你习惯这种工作方式。然后你可以逐渐扩展这些习惯，并开始为你的特定任务增加更多的内容。</p>
<p>请不要过分复杂化或试图增加任何东西。我们的目标是使它变得如此之小，如此之容易，以至不会感到愚蠢和毫无意义。当你开始养成这种习惯并每天执行时，从中获得复利。</p>
<p>不要忘了庆祝！这一部分对于在你大脑中形成路径是至关重要，这将使这些行动具有可持续性和乐趣。</p>
<h2 id="">收尾工作</h2>
<p>人们在为目标获得进展而挣扎，是因为他们的目标过大或者时间紧。或者信息过载。</p>
<p>这个简单的系统解决这个两个问题，但我们自然会抵制它，因为它似乎太小了，无法产生影响。</p>
<p>在现实中，我们会全力以赴一两天，然后倦怠一两个星期。我们是前一步，退了两步。无论这一步有多大， 我们都没取得进展。</p>
<p>但是，当我们实施小习惯的方法时，我们可能采取的是微型的小步骤，但是我们每天都在采取这些步骤，而且一直在前进。</p>
<p>最后，如果你想一步步了解如何找到第一份<code>web</code>开发工作,我有一个免费10天电子邮件课程<a href="https://LaunchYourDevCareer.com">LaunchYourDevCareer.com</a>。它涵盖我们在这里谈到的很多内容，以及更多内容，为你提供找到第一份工作的路径。</p>
<!--kg-card-end: markdown--><p>原文：<a href="https://www.freecodecamp.org/news/how-to-use-small-sustainable-habits-to-get-your-first-dev-job/">How to Use Small and Sustainable Habits to Get Your First Dev Job</a>，作者：<a href="https://www.freecodecamp.org/news/author/ken-rogers/">Ken Rogers</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 一个月之内参加 60 多场软件开发面试，我收获了什么？ ]]>
                </title>
                <description>
                    <![CDATA[ 在这篇文章中，我将分享我是怎么动力满满地在一个月内参加 60 多场面试的。更重要的是，我将分享从成功和失败中吸取的经验教训。 我将文章分成三个部分，对应典型招聘流程的不同阶段。 本文的大多数经验值得软件工程师和专业技术从业者借鉴，同时，这些经验背后的原理适用于所有的职业。我希望你能从中找到一些对你职业生涯有帮助的东西。 我是怎么开始的 跟别的软件工程师一样，我经历了许多不同类型的技术面试 —— 从可怕的白板面试到在类似 HackerRank 等平台上的 45 分钟虚拟编码挑战。其中一些面试我的感觉很好，有一些我却感觉非常糟糕。 但是我想要变得非常善于面试。我想要克服面试恐惧症，在面试中表现自信。就像一个冲浪老手一样，我想要学习如何在波涛汹涌的面试高压浪潮中乘风破浪，同时我也想换一份工作。 所以，从 2020 年的 1 月份到 3 月初，我申请了在美国和欧洲的公司（并且获得面试机会），包括：早期初创公司（如 Coda），创业后期的公司（如 Crunchbase），中型公司（如 Affirm），超大型公司（如 Amazon），甚至是允许员工远程办公的公司（如 Webflow）。  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/60-interviews-in-one-month/</link>
                <guid isPermaLink="false">5fcefed039641a0517d51b26</guid>
                
                    <category>
                        <![CDATA[ 面试 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jiawei Pan ]]>
                </dc:creator>
                <pubDate>Tue, 13 Apr 2021 09:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2020/12/maranda-vandergriff-7aakZdIl4vg-unsplash--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>在这篇文章中，我将分享我是怎么动力满满地在一个月内参加 60 多场面试的。更重要的是，我将分享从成功和失败中吸取的经验教训。</p><p>我将文章分成三个部分，对应典型招聘流程的不同阶段。</p><p>本文的大多数经验值得软件工程师和专业技术从业者借鉴，同时，这些经验背后的原理适用于所有的职业。我希望你能从中找到一些对你职业生涯有帮助的东西。</p><h2 id="-">我是怎么开始的</h2><p>跟别的软件工程师一样，我经历了许多不同类型的技术面试 —— 从可怕的白板面试到在类似 HackerRank 等平台上的 45 分钟虚拟编码挑战。其中一些面试我的感觉很好，有一些我却感觉非常糟糕。</p><p>但是我想要变得非常善于面试。我想要克服面试恐惧症，在面试中表现自信。就像一个冲浪老手一样，我想要学习如何在波涛汹涌的面试高压浪潮中乘风破浪，同时我也想换一份工作。</p><p>所以，从 2020 年的 1 月份到 3 月初，我申请了在美国和欧洲的公司（并且获得面试机会），包括：早期初创公司（如 Coda），创业后期的公司（如 Crunchbase），中型公司（如 Affirm），超大型公司（如 Amazon），甚至是允许员工远程办公的公司（如 Webflow）。</p><p>在投递超过 109 份面试申请后，我获得了 60 多场面试机会，其中包括 60 多场电话面试，50 多场视频技术面试，18 个可以线下在家写的代码项目，11 个在线编码挑战，以及 8 场现场面试（其中包括 3 场虚拟现场面试）。</p><h2 id="--1">我学到了什么</h2><p>为了便于大家阅读，我将文章分成三个部分，对应典型招聘流程的不同阶段。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/12/kevin-ku-w7ZyuGYNpRQ-unsplash.jpg" class="kg-image" alt="kevin-ku-w7ZyuGYNpRQ-unsplash" width="2000" height="1500" loading="lazy"></figure><h2 id="--2">面试前</h2><p>这部分涵盖了从和一家公司首次建立联系到得到第一次面试邀请的所有内容。</p><h3 id="--3">我从面试申请中学到了什么</h3><p>当我开始向公司发送面试申请时，我以为发送的申请越多，获得面试机会的可能性就越高。看上去很合理，对吧？所以我设定了每天发送 5 份简历的计划，希望每 5 份申请可以带给我 1 个面试机会。</p><p>但是计划没有如我所愿。面试邀请的数量经常达不到我的目标。这个比例大概是 1:12 —— 每发送 12 份申请，获得 1 个面试机会。</p><p>我面临的问题是：我应该增加每天投递简历的数量吗，比如每天 10 家公司？或者有什么其他方面是我需要改变的？</p><p>随着申请失败的次数增加，我发现有些东西需要改变。</p><p>我抽出一天暂停投递简历，并且重新思考我简历投递的方式，然后意识到需要改变。我开始将每份简历看成是向招聘经理（或者任何将要阅读我简历的人）的推销，而现在出售的商品是我自己。</p><p>如果一家公司需要填补人才缺口，而我说我有这个能力，那么我需要找到一个方法让 TA 们相信我所说的。</p><p>我给自己一个新的任务，那就是找到一个能有效地推销<strong>我的独特能力、经验和性格</strong>的方法，让招聘经理相信我是这份工作的合适人选。</p><p>这里是我<em>推销</em>自己的一个例子：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/12/image-7.png" class="kg-image" alt="image-7" width="2065" height="1371" loading="lazy"></figure><p>在我的简历的加持下，这份求职信帮助我获得面试机会的成功率达到 95%。其中有一次不成功，但是招聘经理仍然回复我说那个岗位已经停止招聘了，但是他也很愿意和我继续保持联系。</p><p>这里的经验是，你需要非常注意简历的内容 —— 质量比数量更重要。当然能兼顾两者就更好了。了解你自己的特有的经验和能力，以一种符合公司要求的方式表现出来，且不失个性。</p><p>了解你投递公司的背景和特殊需要同样也很重要。一家初创公司或者中小型公司可能与大公司的需求不同，因此需要一份不同的技能清单。</p><p>推销你自己，并确保有实质的内容能在面试中支撑你的推销。</p><h3 id="--4">我通过邮件对招聘人员了解更多</h3><p>在此期间，我收到了一堆来自招聘人员的邮件（大部分是不相关的），其中大部分职位是我不感兴趣的。</p><p>阅读这些邮件花了我不少时间，但是我学着具有同理心，去理解这些招聘人员只是在完成 TA 们的本职工作。</p><p>我不再将这些邮件视为噪音，并开始努力回复这些招聘者，甚至回复那些我不感兴趣的岗位的相关邮件。这样一来，我成功地与这些招聘者建立了联系。如果将来我需要转行，这将为我提供丰富的资源。</p><p>你可能不会回复每一封你收到的邮件。但是，你可能会觉得有意思的是，我上面说的其中一些面试机会是通过回复一些不相关的邮件而获得的。回复邮件并没什么坏处。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/12/azharul-islam-9LMGWHqUwnc-unsplash--1-.jpg" class="kg-image" alt="azharul-islam-9LMGWHqUwnc-unsplash--1-" width="2000" height="1333" loading="lazy"></figure><h2 id="--5">面试阶段</h2><p>这部分包含面试过程中的所有内容，我把它们分为几种不同的面试类型。</p><h3 id="--6">电话面试</h3><p>是的，我知道，你很忙，你需要处理许多事情。但是，你同样是一个专业人士，因此当你接到电话前，你至少需要知道两件事：</p><ul><li>面试官姓什么，怎么称呼</li><li>至少一件关于公司的事情 —— 公司是做什么的，地址在哪，关于公司的新闻，或者其他和公司相关的事</li></ul><p>我注意到，当我向面试中询问这些事情时，给人的感觉是我真的对那家公司感兴趣。招聘人员通常会在面试中关注这一点。</p><h3 id="--7">视频技术面试</h3><p>是否能够清晰表达自己的想法，基本上就决定了你在视频技术面试中表现得怎样。</p><p>你之前可能听过这个说法：</p><p>“<em>面试官关心的是你的思考过程。是的，TA 们能看到你的代码，但是更重要的是 TA 们想要知道你</em><strong><em>为什么</em></strong><em>这样写代码。</em>”</p><p>面试官不在你旁边，所以 TA 们看不到你的非语言提示，例如手势或者其他细微动作。面试官能了解到的只有你用来表达思维的声音。</p><p>现在你知道了如何进行这次对话，接下来的问题是怎么熟练应对？实际上，虽然表达自己的想法对某些人来说是很自然的事情，但对其他人来说却不然，比如我。</p><p>所以 —— 练习！练习！练习！</p><p>多练习模拟面试。我跟朋友进行模拟面试练习，使自己在表达观点的时候更加自信。更有趣的是，这也帮助我建立了一个新的面试思维。</p><p>我开始将面试看成是一场与朋友或者团队成员间的对话，将面试官看成是我的朋友（我有时候在心里会给面试官取个名字）。因此，原本是一场超高压力的面试，我现在会把它看做是一次关于技术的友善的“聊天”。</p><p>基于这个新的理念，在很多场模拟面试之后，我树立了极大的信心，开始享受面试，不好意思，我是说技术聊天。</p><h3 id="--8">如何开始处理一个问题</h3><p>绝对不要在没有了解清楚问题说明的情况下，就开始解决它。如果你先向面试官询问清楚问题是什么意思，那么你的答案也基本不会错。你通过提问来明确问题而不是自己在那儿猜测，也能让面试官对你留有好印象。</p><h3 id="--9">如何解决问题</h3><p>好的候选人知道如何解决问题（例如一个排序问题），但是优秀的候选人知道一个问题的多种解决方案，并且能权衡每种方案的利弊。</p><p>我表现最好的一场面试（思如泉涌）是我不但解决了逻辑问题 —— 我还提供了替代方案，并且讨论了它们的利弊。</p><p>你的目标是提供多种解决方案，愿意讨论它们之间的区别，并且能够至少实现其中一种方案。</p><p>对于技术面试，你需要编写简洁的代码。很多面试官都关心你的代码质量和解决方案的正确性。你的目标是——编写模块化代码，拆分可复用的逻辑单元为一个个方法，正确的变量和方法名——就像老板管理公司一样管理你的代码！</p><h3 id="--10">当你被问题困住时怎么办</h3><p>有时候你会卡在一个问题上，原因有很多：你没有相应的知识，做了错误的假设，缺少细节，等等。</p><p>我曾经认为，在这种情况下，考验我能力的标准是我处理问题有多快，所以我会安静地思考，不和面试官交流，只是自己思考。</p><p>这就是我们很多人误解的地方。我知道，你需要一段单独思考的时间，但是，很抱歉地告诉你——在面试时最好不要单独思考。</p><p>是的，你的面试官希望看到你想出解决方案，但是有一件事你不能忘记—— TA 们也希望看到你能够<strong>与团队同事协作</strong>讨论出解决方案。虽然公司希望有大牛，但 TA 们也想要团队合作。</p><p>你的面试官就是你的朋友、伙伴、你的团队成员。所以，在处理问题时，你可以大胆和 TA 们交流。</p><p>在遇到困难时，自信地分享你的思考过程，而不是那种嚷着要人帮忙。通过这样的方式，你可能找到解决方案。我在面试 Coda 时就是这样做的。</p><h3 id="--11">如何应对编码挑战</h3><p>这部分内容适用于在像 Hackerrank，Codility 等平台上进行编码挑战形式的面试。通常这些是定时挑战，比如 45 分钟或者更长的时间。</p><p>我之前分享的一些内容在这里很有用，但是其他的诸如“明确问题的意思”等在这里并不适用，因为这个时候没有你能问的人。所以我建议你采用这些步骤：</p><ol><li>通读并明确问题</li><li>先编写能运行的代码，即便是<a href="https://www.freecodecamp.org/news/brute-force-algorithms-explained/" rel="nofollow">暴力匹配算法</a>，它可能不会跑通所有的测试用例，但是首先要有能够运行的代码，理想的情况是在 15-20 分钟内编写出来</li><li>通过输入不同的用例测试你的代码，因为这有助于你处理边界情况</li><li>优化执行效率</li><li>重复步骤 4 和 5，直到最后一分钟</li></ol><p>这里的关键是掌握良好的计算机基础知识。我在文末添加了一些相关的资料。</p><h3 id="--12">如何应对线下编写代码的面试题</h3><p>带回家写的项目是一个能展示你的亮点的机会，因为你有更多的时间。这同样意味着这种面试可能会比较花时间。</p><p>我面试的其中一家公司是按时薪（大概每小时 68 美元）支付给员工，然后员工在家里写代码—— TA 们很认真地对待这个项目，所以你也应该认真对待。在你开始花时间写项目前，请想清楚你是否真的想成为这家公司的一员。</p><p>不要在带回家的项目中牺牲代码质量。对你的整体框架设计，命名约定，代码结构等要非常用心，并且准备坚持自己的选择。</p><h3 id="--13">你应该使用哪些技术</h3><p>在面试 Coures Hero 时，我使用了<a href="https://en.wikipedia.org/wiki/Regular_expression" rel="nofollow">正则表达式</a>解决问题，我本可以使用相对简单的字符串解析法。事实证明这是一个错误的决定，结果我没有通过面试。</p><p>教训：只用你用起来<strong>非常</strong>熟悉的且有<strong>很多相关</strong>经验的技术。</p><h3 id="--14">现场面试</h3><p>前一晚睡个好觉，面试的那天早点到，多微笑（这有助于提升自信，但是更重要的是能够帮助你保持轻松的状态并控制自己）。</p><p>直面你的恐惧，明白即使不能解决问题，也不会是世界末日——毕竟你只是进行了一场技术交流——然后沉浸到纯粹的交谈中。</p><p><strong>如何进行虚拟现场面试</strong></p><p>这可能会和直接的线下面试有很大的不同，因为所有人的眼睛都看着你，并且会令人不安。</p><p>我经历过 3 次虚拟现场面试，而且没有通过任意一场。抱歉，我不是你要寻找的那个对虚拟现场面试很在行的人，但是我在文末分享了一些可能对你有帮助的资源。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/12/essentialiving-yvG7vDXCzDE-unsplash.jpg" class="kg-image" alt="essentialiving-yvG7vDXCzDE-unsplash" width="2000" height="1335" loading="lazy"></figure><h2 id="--15">面试后</h2><h3 id="--16">如何面对失败</h3><p>有很多原因导致你没有通过面试。有些我知道的最好的工程师在某些时候也没有通过面试，而且现在依然如此。</p><p>所以，忘掉那些失败的面试，从每次失败的面试中吸取经验，并利用这些让自己进步。就像有些人说的——我们继续前进！</p><h3 id="--17">那么如何面对成功呢</h3><p>庆祝你的成功，无论是你认为它是多么小的成功。我有一些庆祝的点子。</p><h2 id="--18">做了这些之后，我会变得更好吗</h2><p>我不是要告诉你，我顺利通过了每次面试。但是可以肯定的是，我在每场面试之后都变得更擅长面试，而且我的自信心也真的提升了。是的，我也同时获得了很多入职邀请。</p><h2 id="--19">接下来做什么</h2><ul><li>和朋友反复练习模拟面试。练习能够帮助你<strong>快速</strong>地辨识出面试问题的模式，熟练掌握，最终帮助你树立自信。</li><li>对于技术面试，熟练掌握数据结构和算法能够打败一切。我在文末分享了一些可能对你有帮助的资源。</li><li>开始面试，并持续面试，即使你有一份工作，也要不停的面试——可能每个月一次或者每个季度一次面试。面试是一种技巧，所以要不断磨练。</li></ul><p>我真心希望这篇文章对你有所帮助，希望这里分享的一些经验教训将有助于你在面试时更加自信，面试表现更好——最终将帮助你找到心仪的工作。</p><p>如果你需要一个人来和你进行模拟面试，可以随时通过 Twitter<a href="https://twitter.com/meekg33k" rel="nofollow"><strong>@meekg33k</strong></a> 联系我。</p><p>后会有期！</p><h2 id="--20">有用的资源</h2><ul><li><a href="https://learntocodewith.me/posts/technical-interview/" rel="nofollow"><strong>技术面试终极指南 | 与我一起学习编码</strong></a></li><li><a href="https://www.themuse.com/advice/how-to-ace-your-technical-interview" rel="nofollow"><strong>如何进行技术面试</strong></a></li><li><a href="https://www.freecodecamp.org/news/the-essential-guide-to-take-home-coding-challenges-a0e746220dd7/" rel="nofollow"><strong>带回家的编码挑战的基本指南</strong></a></li><li><a href="https://firstround.com/review/The-anatomy-of-the-perfect-technical-interview-from-a-former-Amazon-VP/" rel="nofollow"><strong>前亚马逊副总裁剖析完美技术面试</strong></a></li><li><a href="https://online.hbs.edu/blog/post/virtual-interview-tips" rel="nofollow"><strong>掌控下一次线上面试的 9 个技巧 | HBS 在线</strong></a></li><li><a href="https://www.salary.com/passages/8-tips-for-acing-virtual-interviews/3/" rel="nofollow"><strong>8 个 Skype 面试技巧：轻松完成虚拟面试</strong></a></li></ul><p>原文：<a href="https://www.freecodecamp.org/news/what-i-learned-from-doing-60-technical-interviews-in-30-days/">What I Learned from Doing 60+ Technical Interviews in 30 Days</a>，作者：Uduak Obong-Eren</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 自学编程 16 个月后，我从销售员成功转型为程序员 ]]>
                </title>
                <description>
                    <![CDATA[ 2015 年 8 月 18 日，我正在多伦多飞往哥本哈根的单程飞机上，准备开启在哥本哈根商学院为期两学期的交换生活。 那天是我哥哥的生日，所以我对这个日期记得格外清晰。他在机场度过这个生日，因为全家人都在机场为我送行，他们原以为我只是去八个月。 过去我对哥本哈根的唯一了解来自 CPH Open on Thrasher Magazine's YouTube channel [https://www.youtube.com/watch?v=EYOCa7kusJg]  这个频道。幸运的是，我完完全全爱上了这个城市，于是在第一个学期之后我决定要在哥本哈根待更久时间。我没有选择在加拿大实习，而是尽可能在哥本哈根找一份实习工作。 在哥本哈根工作 我之前没有好好计划这件事，所以开始找销售发展代表的实习工作。我之前在某节课上听说过这个初级职位，因为之前的工作经历都与销售和客服有关，我以为这会非常合适。 我投了简历给一家初创企业，四小时不到，他们的销售经理就跟我通电话了。这是我第一次感受到创业公司的快节奏！一个月后我入职了。这也是我第一次接触到专业程序员。 虽然我只在高中的 Visual Ba ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-i-landed-my-first-developer-job-without-an-application/</link>
                <guid isPermaLink="false">5fb1307d5f583f05650910be</guid>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 自学编程 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Casey Cui ]]>
                </dc:creator>
                <pubDate>Sun, 28 Mar 2021 08:36:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1484417894907-623942c8ee29-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>2015 年 8 月 18 日，我正在多伦多飞往哥本哈根的单程飞机上，准备开启在哥本哈根商学院为期两学期的交换生活。</p><p>那天是我哥哥的生日，所以我对这个日期记得格外清晰。他在机场度过这个生日，因为全家人都在机场为我送行，他们原以为我只是去八个月。</p><p>过去我对哥本哈根的唯一了解来自 <a href="https://www.youtube.com/watch?v=EYOCa7kusJg" rel="nofollow">CPH Open on Thrasher Magazine's YouTube channel</a> 这个频道。幸运的是，我完完全全爱上了这个城市，于是在第一个学期之后我决定要在哥本哈根待更久时间。我没有选择在加拿大实习，而是尽可能在哥本哈根找一份实习工作。</p><h2 id="-">在哥本哈根工作</h2><p>我之前没有好好计划这件事，所以开始找销售发展代表的实习工作。我之前在某节课上听说过这个初级职位，因为之前的工作经历都与销售和客服有关，我以为这会非常合适。</p><p>我投了简历给一家初创企业，四小时不到，他们的销售经理就跟我通电话了。这是我第一次感受到创业公司的快节奏！一个月后我入职了。这也是我第一次接触到专业程序员。</p><p>虽然我只在高中的 Visual Basic 课程里接触过软件开发，但是我对技术一直有着很深的兴趣。</p><p>这份工作让我第一次有了和程序员共事的机会。他们的工作听起来非常酷。他们谈论一些专业术语和技术——React，Ember，Scala，Python，TypeScript，样板代码，编译器，渲染......开发软件竟然需要了解这么多内容，这听起来令人害怕。</p><p>接下来的一年半时间，我继续在销售职位上打拼，最终升职成了客户主管。在这份工作中，我感到我的沟通能力、时间管理能力、表现能力都得到了很大的提升。</p><h2 id="-freecodecamp">发现 freeCodeCamp</h2><p>虽然我作为一名客户主管还算成功，但是我对自己未来是否愿意在销售业发展还是存在疑问。而且在母语非英语的国家里做英语销售，职业选择也有所限制。</p><p>我开始拓展阅读，寻找新爱好或者挑战。我就是在这时发现了 freeCodeCamp 的博客的（当时还建在 Medium 上）。我花了几天时间才意识到 freeCodeCamp 并不仅仅是一个博客，它是一个在线免费学习编程的平台！其实从它的名字就可以看出来。</p><p>在做完几道 HTML 题之后，我已经完全着迷了。那时我就决定在空闲时间完成 freeCodeCamp 的课程，为了在遥远将来的某天能成为一名开发人员，和我的同事讨论 React。我喜欢这个想法。</p><h2 id="--1">艰难地学习基础知识</h2><p>我很快地学习了 HTML 和 CSS，在我开始尝试完成一个项目之前我都相当自信。搭建一个作品集网站？小菜一碟！</p><p>离开了 freeCodeCamp 的编辑器，我突然感到非常迷茫。从头开始写项目似乎变成了不可能的任务，我好像把学到的东西忘得一干二净了。我突然认为自己不可能成为一名真正的程序员。</p><p>而此时，寻求帮助是我做出的最好的决定。我的一位同事耐心地教我使用 VS Code，构建 HTML 文档并链接相应的 CSS 文件。拙劣地完成了作品集网站后，我把这项任务勾选成了“已完成”，虽然我的成果和其他人的相比非常糟糕。</p><p>在历时一个半月学完 HTML 和 CSS 课程后，我终于开始学习我期待已久的 JavaScript 课程。</p><h2 id="-javascript">学习 JavaScript</h2><p>开始时很简单，但没过多久我又感觉到迷茫和受挫了。学完了 JavaScript 的所有模块后，我没有自信和韧劲去挑战更难的 JavaScript 项目。相反，我选择了容易的路线，开始学习 Codecademy 的 JavaScript 课程。</p><p>这对巩固基础知识当然是有帮助的，毕竟反复练习是关键。然而，在学习过程中我犯的最大错误就是没有回过头去尝试那些更难的项目。</p><p>学完 Codecademy 的所有模块后，我又买了 Udemy 上的 “The JavaScript Bootcamp” 准备继续学 JavaScript。鉴于这已经是我第三次梳理基础知识，课程结束后我感到自己对 JavaScript 更有把握了。</p><h2 id="-pleo">进入 Pleo</h2><p>在这时我直接开始学习 Node，紧接着学习了一门 React 课。</p><p>在两门课之间的某个时间，我在 <a href="https://www.pleo.io/" rel="nofollow">Pleo</a> 找到一份客户经理的工作。作为发展如此迅速的创业公司的一员非常令人兴奋。更令人兴奋的是，遇到如此多年轻有天赋的开发人员，并有机会向他们学习。</p><p>在做了三个月左右时，主管和我讨论我的职业规划。我非常坦诚地告诉她，我不想再在销售行业发展了。我想尽全力自学编程，争取在未来某天成为一名程序员。</p><p>没有人想在自己组里一个初级销售代表的口中听到这些话。但是令我惊讶的是，她非常支持我的决定，并且愿意尽力帮助我达成目标。</p><h2 id="--2">尝试编程挑战</h2><p>和公司的一位技术总监聊过之后，我了解到我需要完成招聘流程中所要求的前端编程任务，才能继续从销售部到产品部的转行。</p><p>尝试这件事的想法令人害怕又充满动力。也是从这时起，我开始在办公室待到更晚。我不想浪费时间骑自行车回家，所以每到下午五点，我会赶紧找点晚餐吃，尽快回到工位，开始我假装作为程序员的一天。</p><p>我终于在圣诞假期前上完了 React 课，并且开始做一些没头没尾的个人项目。我知道我需要把学到的知识应用于实际中，但我发现我很难完成没有最终目标的项目。</p><p>假期里时间变得充裕，我便又开始看之前遇到的前端挑战了。我对自己有能力提交一个有价值的成果仍然表示怀疑，但是因为有目标，我想我说不定最终能完成一些东西。</p><p>幸运的是，我们公司的前端挑战很像那门 React 课程里的期末项目，所以我可以复用很多之前的代码和组件。我感觉我有点像在作弊。</p><p>我还是提交了我的项目，并积极地等待回应。公司的两名高级工程师评审我的代码，我感到非常害怕，准备好接受一些严苛的反馈。</p><p>几周后我拿到了结果，我提交的作品还不算太糟！我收到了一些非常有可行性的批评和建议。我的一位同事甚至在下班后留下来和我逐行讲解那些反馈信息。代码评审会议进行得非常顺利，于是我们决定每周都约一次，直到我有能力转行成一名真正的开发人员。</p><h2 id="-pull-request">我的第一次 Pull Request</h2><p>接下来的几个月里，销售主管和技术总监时不时来监督我的进程。四月时，我有了一个可以进入内部工具组工作的机会，后勤系统有一些不紧急但还是需要处理的 issue。</p><p>我非常兴奋——这是我得到和产品部合作经验的绝佳方式，而且已经明确了这个任务并不会妨碍到销售工作。一想到能接触到生产环境的代码，我就感觉非常疯狂！</p><p>在简短的入组介绍并得到公司 GitHub 页面的权限之后，我开始处理第一个 issue。</p><p>我需要给合规组加一个可编辑输入字段。我毫无头绪。 我以前的确知道怎么加输入框，也粗略地了解表单在 React 里是如何运作的，但是我好像从没在任何教程里看过和这段代码类似的东西。</p><p>我突然感觉自己掉进了问题的深渊里：怎么写 TypeScript？分支是什么？我怎么提交 Pull Request？这些库都是做什么用的？我到底怎么写代码并且发给其他用户？要是我破坏了重要的功能怎么办？</p><p>我花了好几天才搞明白，但是因为有了工程师主管的耐心与帮助，我终于成功提交了两段能发布的代码。这是我编程之旅上巨大的里程碑。</p><h2 id="--3">职业转变</h2><p>在接下来的五个月里，我继续在办公室待到很晚，9 到 17 点做销售工作，17 点之后开始做开发者，直到我对自己写的代码满意之后才离开。</p><p>可想而知，我对销售工作的热情每天都在减少，我开始想要有个正式的职业转变。</p><p>当然，这个转变并不是很顺利。没人知道把一个销售转到产品部意味着什么。首先，我必须完成销售目标。我想这对绝大部分销售部门来说都很正常——无论如何要完成自己的工作配额。</p><p>经过多次来回周旋之后，我终于被允许在 8 月 1 号正式转岗，只要我能完成销售配额。这就像是隧道尽头的亮光。我马上就要签一份软件工程师的合同，这对我来说挺难想象的。接下来几周过得飞快。在 7 月 31 号 17 点这一刻后，我不再是客户经理了。</p><p>适应新角色需要一个转变期，这就像在交易所工作的股票经纪人突然变成图书管理员一样。</p><p>抛开一切不说，我没有任何一天不期待来上班的。我继续在内部工具组工作，搭建合规组和用户支持的后台系统。</p><h2 id="--4">我学到的东西</h2><p>之前的销售工作经历对我现在的工作非常有帮助。很强的沟通能力、时间管理能力和表达能力，对于一个开发人员也是无价的。但我发现很多开发人员普遍缺乏这些品质。</p><p>我意识到自己真的非常幸运，能这么快就得到了写生产代码的机会。这毫无疑问是我在学习编程过程中的巨大跳跃，也扩展了我对现实中开发工作的理解，这些在网课中是无法得到的。</p><p>有一位导师极大地帮我加快学习进度，也帮助我坚持写项目，所以我才能一直处于学习状态。如果我没有周围那么多的支持，我想自己可能还在花费整个晚上和周末看教程或者搭建“<a href="https://github.com/braedongough/random-pokemon-generator">随机生成皮卡丘</a>”之类的项目吧。</p><p>我下决心要把所有空闲时间用在个人发展上。我想人们很容易低估这个过程的时间成本。有指导者是一个巨大的帮助，即便只是有一个偶尔能回答你的问题的人，也能让你不用花数个小时陷在沮丧情绪中。千万不要害怕寻求帮助。</p><p>回过头来看，我希望我能花更多时间搭建一些小项目，应用我所学的知识。我频繁地开始做项目但又半途而废，因为我一直认为自己不能用正确的方式写完代码。</p><p>花时间艰难地研究一些东西对我的学习过程更有帮助。学一些交互性的编程网课确实更安心，但这对你把编程知识应用于现实世界有一定的限制。我确实踩过坑。</p><p>我花了一段时间才意识到，并没有人知道什么是正确的（学习）方式，那些都是人为编造的。作为一个编程新手，能以新角度看问题也是有价值的吧。</p><p>如果我希望过去的我能得到一则建议，那它会是“更努力地边学边应用”。特别是在你学习的过程中，并没有什么现实代码或者做事的正确方式。任何你能在过程中学以致用的机会都是有价值的。</p><p>不一定要等到有人给你薪酬，你才觉得自己是一名开发人员。只要你开始写代码，你就已经是了。</p><p>看完希望能交个朋友！如果有任何问题或者有推荐的书籍，欢迎给我发<a href="mailto:braedongough@gmail.com">邮件</a>，在 <a href="https://www.linkedin.com/in/braedon-gough-ba92a048/" rel="nofollow">LinkedIn</a> 上找我，或者关注我的 <a href="https://twitter.com/bbbraedddon" rel="nofollow">Twitter</a>！</p><p>原文：<a href="https://www.freecodecamp.org/news/how-i-landed-my-first-developer-job-without-an-application/">How I Landed My First Developer Job Without Writing a Single Application</a>，作者：Jean-Marc Möckel</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何写好简历，找到第一份编程工作 ]]>
                </title>
                <description>
                    <![CDATA[ 每个人在求职时都表示自己对编码和开发充满热情。作为一名开发人员和招聘经理，我正在寻找的是这种热情的证据。 本周，我看了一些人的简历，他们想要转行并寻找他们的第一份开发工作。在决定他们是否可以入围候选人之前，我对每个人花了 2-5 分钟研究他们的简历。 找工作的时候，要在短时间内打动一个陌生人！我关注这些东西：  * 在 GitHub 上持续提交  * 个人项目  * 展示具备良好的书面沟通能力 在 GitHub 上持续提交 你的 GitHub 贡献记录是什么样的？ 如果你热衷于编码，那么我想你会持续写代码。 展示这种热情的一种简单方法是公开你的编码记录。在 GitHub 上建立仓库，了解如何在上面提交代码，并开始提交。 这给雇主一个很好的信号，表明你每天都在编码，以及你真的对编码充满热情。 我要寻找的是一张漂亮的绿色图表。让我们在 GitHub 上查看某人的公开贡献历史： GitHub 贡献历史示例这个人在一年中仅在 11 月、12 月、3 月和 7 月有公开编码记录。我怀疑这些项目是训练营要求他写的，也就是强制性要求编写的项目。当查看来自同一训练营的候选人时，每个人的 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-get-your-first-dev-job/</link>
                <guid isPermaLink="false">6029f5ab6183a705401568b2</guid>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 求职 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Mon, 15 Feb 2021 07:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/02/photo-1455849318743-b2233052fcff.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>每个人在求职时都表示自己对编码和开发充满热情。作为一名开发人员和招聘经理，我正在寻找的是<strong>这种热情的证据</strong>。</p><p>本周，我看了一些人的简历，他们想要转行并寻找他们的第一份开发工作。在决定他们是否可以入围候选人之前，我对每个人花了 2-5 分钟研究他们的简历。</p><p>找工作的时候，要在短时间内打动一个陌生人！我关注这些东西：</p><ul><li>在 GitHub 上持续提交</li><li>个人项目</li><li>展示具备良好的书面沟通能力</li></ul><h2 id="-github-">在 GitHub 上持续提交</h2><p>你的 GitHub 贡献记录是什么样的？ 如果你热衷于编码，那么我想你会持续写代码。</p><p>展示这种热情的一种简单方法是公开你的编码记录。在 GitHub 上建立仓库，了解如何在上面提交代码，并开始提交。</p><p>这给雇主一个很好的信号，表明你每天都在编码，以及你真的对编码充满热情。</p><p>我要寻找的是一张漂亮的绿色图表。让我们在 GitHub 上查看某人的公开贡献历史：</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screen-Shot-2020-08-10-at-5.41.51-pm.png" class="kg-image" alt="Screen-Shot-2020-08-10-at-5.41.51-pm" width="600" height="400" loading="lazy"><figcaption>GitHub 贡献历史示例</figcaption></figure><p>这个人在一年中仅在 11 月、12 月、3 月和 7 月有公开编码记录。我怀疑这些项目是训练营要求他写的，也就是强制性要求编写的项目。当查看来自同一训练营的候选人时，每个人的贡献历史图相同，他就很难脱颖而出。</p><p>这个贡献历史图一年中有几个月是没有记录的，没有向我这个雇主展示出这个人强烈的编程热情。</p><p>这个人可能每天都在自己的个人笔记本电脑上编码，但是作为雇主，我无法看到并认可这种努力。</p><p>让我们看看另一个人的贡献历史：</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screen-Shot-2020-08-11-at-8.00.53-pm.png" class="kg-image" alt="Screen-Shot-2020-08-11-at-8.00.53-pm" width="600" height="400" loading="lazy"><figcaption>几乎每天都在 GitHub 上贡献</figcaption></figure><p>这个人几乎每天都在对 GitHub 提交。这是一个非常强烈的信号，表明她对编码感兴趣，并且在过去的十二个月中每天都有编码。</p><p>这真是太棒了，特别是如果她不是专业程序员的话。我想和这个人交谈，并了解她的工作状况！ 即使她大部分的提交都是对 <code><a href="README.md">README.md</a></code> 文件的文本编辑，但这仍然表明她在坚持持续编程。</p><h2 id="-"><strong>个人项目</strong></h2><p>在简历里加上你的项目链接，并确保这些项目可以让雇主眼前一亮！</p><p>你可以参考这些方法：</p><ul><li>放入真实内容。</li><li>加入自己的个性，比如加入对你来说有些意义的图片。</li><li>为你的工作而感到自豪：不需要精美的设计——我在寻找的是工程师，而不是视觉设计师。但是也要注意有基本的美感：元素重叠吗？有足够的空白空间吗？它既可以在移动设备上也可以在网页上显示吗？</li></ul><p>我注意到简历中常出现的问题：</p><ul><li>没有项目链接。</li><li>项目是一个训练营项目，没有个性。当我有来自同一训练营的 20 名毕业生的简历时，项目都是差不多的。如果你不将你的作品集做得有个性，则无法向雇主展示出“我很有热情”。</li><li>链接的项目无法运行。确保你有一位朋友在与你的设备不同的设备上进行测试。</li><li>链接的项目需要一定的设置才能查看。让我们轻松一点！ 准备一份详细的 <code>README.md</code> 文件，阐述如何进行设置。放入大量屏幕截图、UX 流、序列图等。雇主有可能会点击鼠标，但我想雇主极不可能下载你的项目。因此，屏幕截图、UX 流等将需要演示你的项目如何运行。</li></ul><p>举一些“好”还是“坏”的例子？我不想评价别人的作品，因此我展示一个自己的项目吧。<a href="https://codepen.io/ailyntang/full/oJeLdr">这个项目就是没有个性的例子</a>：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/01/image-41.png" class="kg-image" alt="image-41" width="600" height="400" loading="lazy"><figcaption>我的 drum machine 项目</figcaption></figure><p>看起来是不是很熟悉？这是我在 freeCodeCamp 做的项目。我完全没有给它加入个性。更糟糕的是——成千上万的人已经完成了这个项目，并使它变得更酷！ 我永远不会告诉雇主去查看这个项目，以此来表达我的热情。</p><p>我还在 freeCodeCamp 做了一个个人作品集，这个项目就完全不同了。我花了很多时间来个性化<a href="https://ailyntang.github.io/">这个项目</a>。无论从哪方面来看，它都不是完美的（它不是响应式的！），但它有我的特点。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/01/image-42.png" class="kg-image" alt="image-42" width="600" height="400" loading="lazy"><figcaption>我的个人作品集项目</figcaption></figure><p>我的作品集包含了上面列出的其中一个问题：链接的项目无法运行。当我创建这个项目时，我的<a href="https://ailyntang.github.io/#projectPomodoro">番茄计时器</a>看起来很漂亮。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/01/image-43.png" class="kg-image" alt="image-43" width="600" height="400" loading="lazy"><figcaption>我的番茄计时器本来是这样的，背景很漂亮</figcaption></figure><p>过了几年之后，我之前链接到的图片已经不能用了。因此，我的<a href="https://ailyntang.github.io/pomodoro/">实时番茄定时器</a>看起来有点可悲。这不是很大的问题，但确实无法展示出我的能力。这仿佛是我在让雇主去点击链接，但是显然我自己作为雇主都不想去点击。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/01/image-44.png" class="kg-image" alt="image-44" width="600" height="400" loading="lazy"><figcaption>我的番茄计时器现在看起来是这样——没有图片</figcaption></figure><p>底线是：如果你要让一个雇主去点击一个链接，那么你需要自己先点一下试试，确保你自己对其满意。</p><h2 id="--1">展示具备良好的书面沟通能力</h2><p>我会说，每一份技术工作都对书面沟通能力有要求。你的代码中有文档（尽管理想情况下，你的代码本身就可以说明其含义）。日常工作中还包括在 Slack 等社交软件沟通，以及在 GitHub 提交。</p><p>这是简历中包含的另一个简单的要点：“出色的沟通技巧”。每个简历都列出了它。作为雇主，我很难理解这一点，因为很难通过简历评估沟通能力。</p><p>但是，如果你通过 GitHub 上优秀的 <code>README.md</code> 文件、你写的在线文章或你的个人博客的链接来展示这种能力，那么你就做对了！</p><p>作为雇主，我一定会点击那些链接。它们可以帮助我了解你的性格、沟通风格，以及你如何投入精力实现你的想法，等等。</p><p>下面是我的一个很差的 <code>README.md</code> 文件。我没有为此文件付出任何努力，因此，如果不先更新这个 <code>README.md</code> 文件，我就不会在简历中放这个项目的链接。</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/01/image-45.png" class="kg-image" alt="image-45" width="600" height="400" loading="lazy"></figure><p>但是，我肯定会链接到我在 freeCodeCamp 上编写的一些教程。</p><h2 id="--2"><strong>总结</strong></h2><p>如果你想要转行，那么找到第一份开发工作可能让你感到很困难。请坚持下去！ 你已经具备很多核心能力，可以帮助你适应不同的行业。</p><p>希望这篇文章帮助你创建一份简历，让你在人群中脱颖而出，彰显独特个性，从而找到第一份开发工作。</p><p>原文：<a href="https://www.freecodecamp.org/news/how-to-get-your-first-dev-job/">How to Get Your First Dev Job – Insights from Reviewing Career Switchers' Résumés</a>，作者：<a href="https://www.freecodecamp.org/news/author/ailyntang/">Ai-Lyn Tang</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 初入职场的开发者如何自我提升 ]]>
                </title>
                <description>
                    <![CDATA[ 前言 如果你正在阅读这篇文章，你可能刚刚开始做第一份工作——祝贺你，获得第一份工作是你在技术路上遇到的最为困难的事情之一，你一定为此付出了很多努力。 或许你还没有工作，但是你想了解可以从第一份工作中期待些什么。 不管怎么样，在这篇文章中我将阐述一些常见的担忧和问题，比如在工作中应该期待什么，以及怎样在事业上成为一名成功的开发者。 以下是我们将要讲的内容：  1. 在工作中可以期望什么（前几天/几周）  2. 你的短期到中期计划  3. 成功的心态  4. 如何成为一名优秀的初级开发者 在工作中可以期待什么 这一天终于到来了，你第一次作为一名新的开发者走进办公室（或者参加早会）。即使你很紧张，也要记住和适应你的第一天。这是非常激动人心的时刻！ 你工作的第一天很可能做流程上的事情：配置电脑，适应和培训，和一些人力资源方面的事情（如银行信息，保险等）。 让新开发者在第一天就向产品中 push 一个小实践是一种常见的做法。通常是一些小的任务，比如在公司网页上添加自己的名字和照片，或者修复网页中的一个错字。这会测试你的计算机环境是否配备良好，给你一点成就感，以及让你参与到开发团队中 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-become-an-astounding-junior-developer/</link>
                <guid isPermaLink="false">5f9b65275f583f0565090c58</guid>
                
                    <category>
                        <![CDATA[ 个人成长 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 沟通 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miever ]]>
                </dc:creator>
                <pubDate>Fri, 30 Oct 2020 01:38:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2020/10/essentialiving-yvG7vDXCzDE-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-">前言</h2><p>如果你正在阅读这篇文章，你可能刚刚开始做第一份工作——祝贺你，获得第一份工作是你在技术路上遇到的最为困难的事情之一，你一定为此付出了很多努力。</p><p>或许你还没有工作，但是你想了解可以从第一份工作中期待些什么。</p><p>不管怎么样，在这篇文章中我将阐述一些常见的担忧和问题，比如在工作中应该期待什么，以及怎样在事业上成为一名成功的开发者。</p><p>以下是我们将要讲的内容：</p><ol><li>在工作中可以期望什么（前几天/几周）</li><li>你的短期到中期计划</li><li>成功的心态</li><li>如何成为一名优秀的初级开发者</li></ol><h2 id="--1">在工作中可以期待什么</h2><p>这一天终于到来了，你第一次作为一名新的开发者走进办公室（或者参加早会）。即使你很紧张，也要记住和适应你的第一天。这是非常激动人心的时刻！</p><p>你工作的第一天很可能做流程上的事情：配置电脑，适应和培训，和一些人力资源方面的事情（如银行信息，保险等）。</p><p>让新开发者在第一天就向产品中 push 一个小实践是一种常见的做法。通常是一些小的任务，比如在公司网页上添加自己的名字和照片，或者修复网页中的一个错字。这会测试你的计算机环境是否配备良好，给你一点成就感，以及让你参与到开发团队中。</p><h3 id="--2">你的公司希望你成功</h3><p>对于一名新入职的开发者，录用你的公司知道你目前的知识和技能的局限，他们知道为了你的成长，他们需要投入大量的时间去教你和训练你。</p><p>记住，公司<em>想要你成长</em>！他们站在你这边，会投入大量的精力来发现、面试、录用你。对公司来讲，无论是在时间和金钱上都是一个昂贵的过程。他们不会把你晾到一边——那将是他们投资你的一种糟糕的方式。有些技能你一开始就能掌握，但是有些技能在专业环境之外获取是非常困难的（也不是不可能）。</p><p>既然这是你的第一份工作，可能你从来没有与使用源代码管理工具或者维护生产应用程序的大团队合作过——没有关系！这些技能在生产环境中是很容易学到的。</p><h3 id="--3">你的第一天/周</h3><p>当你的电脑设置好了，你可以使用所有你所需要的工具。你的第一个任务可能是改进一个小功能或者处理一个小 bug，这些只是让你在不同的项目中试水。</p><p>除了纯粹的技术知识之外，每个公司都有你需要掌握的领域知识或者“业务逻辑”（公司做什么产品或服务，以及是如何做的）。</p><p>如果公司有多种产品，他们可能会在每个源代码中给你一些小任务让你去探索这些产品。可能他们会在团队中给你分配一个带你或者至少在前几周为你解答问题的导师。</p><p>在最初的几周里，你只有一个目标：<em>学习，学习，再学习</em>。</p><p>学习你正在使用的技术，学习公司是如何运转的，学习怎样和你团队的成员协作。在这一阶段你的工作产出不重要，重要的是你的成长速度。</p><h3 id="--4">接触生产源代码</h3><p>当你开始接触公司的代码库，你可能会觉得非常困难。这是非常正常的——写代码比读代码容易得多。</p><p>生产代码跟你学过的教程或者练手的项目有很大不同。</p><p>首先，生产代码可能存在了数年，期间由不同的人进行开发，他们有自己的编程风格并且犯过不同的错误。</p><p>此外，软件依赖或者插件可能比你以前遇到的更多，你可能需要处理一些教程文档中没有讲过的不常发生的事例（比如错误处理）——这是一个真正的应用程序。</p><p>一开始你可能会不知所措，但是阅读别人的代码是你必须提升的技能，你会在你的整个职业生涯中用到它（在文章末尾，我会给你一些关于此技能的建议和帮助）。</p><p>最后，不要害怕寻求帮助！你的同事会支持你，在过去的某一个时候，他们可能也在问相同的问题。</p><h3 id="--5">对于新开发者的期待</h3><p>首先，公司并<em>不会</em>指望你能够迅速适应，去开发新功能。他们知道你需要时间去学习你还没有掌握好的技术，比如熟悉源代码，如何有效进行团队合作。</p><p>你的领导可能会与你碰面来制定 30/60/80 天计划，如果他们不这样做，你可以主动询问！任何领导都会欣赏你拥有自己的工作规划。</p><p>在起初 30 天，你可能通过写一个小需求或者处理一些小 bug 来熟悉公司产品和代码。60 天的时候，你可能会做稍微大一点的功能以及 bug 修复。到 90 天的时候，范围会扩大一点，但是他们还是不会期望你独自负责大的功能。</p><p>公司希望你能不断学习和吸收身边的信息。你不可能什么都知道，也不可能在 90 天后都知道，没关系，一天天慢慢来。</p><h3 id="--6">新开发者的思维模式</h3><p>进入一家新的公司，有很多东西你没法控制，但是有一个你可以控制的非常重要的事情，那就是你的心态。 <strong>你每天所想、实践以及你如何内化发生在你身边的事情将决定你的成功。</strong></p><p>有时候你会困惑，有时候你会感到不知所措，有时候你甚至会怀疑你是否能做到（我确实这么想过）。你如何消化这些想法很重要。记住，这些问题不仅只有你会遇到，所有新开发者都要面对。保持冷静，你会成功的。当你遇到令你困惑或沮丧的事情时，端正你的想法：<em>这个障碍是一个学习的机会</em>。</p><p>这是一个了解新事物和成长的机会。在这个过程中你可能会很痛苦，但不久之后，你会成为一名好的开发者。这就是在面对新事物时需要面对的现实。</p><p>不要说：</p><blockquote>“我今天被困住了 10 次”</blockquote><p>而应该尝试说：</p><blockquote>“今天我有 10 次学习的机会”</blockquote><p>这是非常有力的转变，你的同事会看到，你的工作表现也会证明。</p><p>保持头脑清醒，不要让失败的感觉悄悄潜入，这不仅能帮助你在这种情况下表现得更好，而且还能在你摆脱这种情况时增加你的知识和技能。深呼吸，放轻松，寻求帮助并坚持下去。</p><p>在一天结束的时候，轻松地耸耸肩。在当天你离开办公室或者关闭电脑的时候，把它忘了。开始全新的第二天，准备迎接新一天的挑战。</p><p>还有，记住庆祝一路走来的小的成功！随着时间的推移，这些小成功会积累成为巨大的成功之山。</p><p>还有一件重要的事情你要记住：<strong>给你自己犯错误的空间。</strong>你会搞乱代码，你会做一些糟糕的数据库更新（我就犯过这种错）——这些都是可以恢复的，不是世界末日，也不是你工作的结束。任何有经验的开发人员都会犯这些错误，这只是过程的一部分。</p><h3 id="--7">新开发者最好的技能</h3><p>你可能没有意识到，作为一名新的开发人员，最好的技能是<strong>学习如何去学习</strong>。</p><p>你已经学会了如何处理困难、复杂、模糊的问题，并将它分成块，一步一步地解决。</p><p>无论你学 JavaScript、React、Ruby 或者其他任何东西，你学到最好的事情是如何自学。多利用你掌握的这个技能并每天都实践它。</p><h2 id="--8">拥抱自己的成长</h2><p>对于处于职业生涯任何阶段的开发人员来说，这可能是最重要的：<strong>你的事业是你自己的，你必须拥抱它，你必须管理自己的成长。</strong></p><p>有时你的公司、职位或老板会帮助促进你成长，但最终还是取决于你。大多数公司都有某种固定的审查程序，可能是季度或年度。如果他们有，那很好。如果没有，管理自己的成长！定期征求上司的意见，并按他们说的去做。如果有人提到了你从未听说过的东西，问问他们，或者自己去研究一下。</p><h3 id="--9">“微小收益的力量”</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/818f9a1eb06a29be31ff3d16fc6959ed8675e710/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f7065722e3032372e6a706567" class="kg-image" alt="https://jamesclear.com/marginal-gains" width="600" height="400" loading="lazy"><figcaption><a href="https://jamesclear.com/marginal-gains" rel="nofollow">https://jamesclear.com/marginal-gains</a></figcaption></figure><p>我最喜欢的书之一—— <a href="https://jamesclear.com/atomic-habits">James Clear 的《<em><em>Atomic Habits</em></em>》</a>，有一个非常棒的图表标题叫 “微小收益的力量”。这是一个简单的图表，它显示了每天 1% 的<em>提高</em>和 1% 的<em>下降</em>之间的差异。</p><p>如果你每天都有 1% 的提高，一年之后，你会比年初好 38 倍！这就是“微小收益”的力量，对于成为一名伟大的软件开发人员来说也是如此。</p><p>每天你都有机会学习新东西，不管它有多小，也许是一个你不知道的数组上的新函数，一种不同的 CSS 结构化方法，一个新的文本编辑器快捷方式，或者是一些全新的东西，比如学习 SQL 以及如何在数据库级别存储数据。</p><p>无论如何，每天提高 1%（大多数日子你会做得更多），你职业生涯最初几年的成长将是惊人的。</p><h3 id="--10">每天一页</h3><figure class="kg-card kg-image-card"><img src="https://camo.githubusercontent.com/28745cf448e8731520afdef2ddf9478c0a650aed/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f53637265656e2d53686f742d323032302d30352d32392d61742d31302e31302e32332d414d2e706e67" class="kg-image" alt="68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f53637265656e2d53686f742d323032302d30352d32392d61742d31302e31302e32332d414d2e706e67" width="600" height="400" loading="lazy"></figure><p>我曾经在一档程序员播客上听说过一个故事，讲的是一位为 Ruby 维护<code>pg</code> gem 的人。<code>pg</code> gem 是 Ruby 和 Postgresql 之间的一个接口。这是一个相当严肃的事情，因为大多数 Ruby 开发人员每天都在使用它。</p><p>他如何成为 gem 的维护者的故事非常有趣。他说刚开始的时候，他会打开 Postgresql 文档并阅读一页——每天只读一页。</p><p>随着时间的推移，他对 Postgresql 有了广泛的了解，并开始为 <code>pg</code> gem 做贡献。过了一段时间，他成为了 gem 的维护者。</p><p>这是积累点滴的完美例子——每天一页就够了。我们每个人都可以做到这一点，我鼓励你将同样的理念应用到你正在使用的任何语言或系统中。</p><h3 id="--11">实践出真知</h3><p>你以前可能听说过这个短语：<em>实践出真知</em>。</p><p>我的钢琴老师使用了不同的短语：<strong>正确的</strong>实践出真知。</p><p>我认为他说得对，我可能会用错误的方式练习钢琴，如：用糟糕的技术，马虎，没有稳定的节奏，结果就是马虎的钢琴演奏。</p><p>重要的不只是实践，而是你<em>如何</em>实践。我可以一遍又一遍地练习一首歌曲的第一小节，并把它写得很完美。但如果我只关注第一小节，我就永远学不会这首歌。我可能可以以世界级钢琴家的水平演奏这首歌的第一小节，但我想弹钢琴，所以我不得不学习整首歌。</p><p>这对于开发来说是一个完美的对比。你实践开发的方式（你的日常习惯、开发方法以及路线）决定了你将成为什么样的开发人员。</p><p>一开始你会犯很多错误（每个人都会犯），但是如果你对你的工作上心，你就会发现你有可以改进的地方。这些都是完美的练习时刻，是学习新东西或以更好的方式做某事的机会。</p><p>当你从现在开始回顾十年的职业生涯时，你想要的应该是十年的成长、实践和学习，而不是一年的成长、实践和学习，经历十次。</p><p>所以去问那些愚蠢的问题，问那些可能显而易见的问题。当别人提到一些你不知道的事情时，大胆地问“那是什么”，我希望他们能以一种和蔼可亲的方式回应。无论如何，你都要做好学习的准备。</p><p>这一切都会见证你的成长。</p><h2 id="t-">T 字型的人</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/4571ed9e22c32ec9aec3582eacf389ad1a408865/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f706572322e3030312e6a706567" class="kg-image" alt="A &quot;T-shaped&quot; person" width="600" height="400" loading="lazy"><figcaption>一个 T 字型的人</figcaption></figure><p>在你的开发生涯开始时，你可以从了解许多方向中获益，因此你希望努力学习多个学科的知识。</p><p>如果你立志成为一名全栈工程师，你可能需要掌握 HTML、CSS、JS、一种你想使用的后端语言、SQL、Git 等。在每一个方向中都有比较容易获取的知识，你可以慢慢进行吸收。</p><p>随着时间的推移，你会发现你最喜欢哪种开发，可能是前端、后端、数据库、运维、设计或者这些和其他的一些组合。</p><p>随着你事业的发展，你会开始成为 T 字型人才。T 字型人才，就像字母 “T”，指对很多事物有广泛而浅显的了解，而在一些领域有丰富的知识和经验。</p><p>这种深刻的认识需要一段时间来建立，每一步都要比前一步付出更多的努力，这正是你在精通一门学科时的事实。在开始的时候，在广泛的学科领域里，掌握所有那些初学者容易掌握的东西。</p><p>拥有 T 字型的能力将帮助你成为一个更好的开发者了解数据库模式的前端开发人员，或者了解如何在前端将数据库表用作模型的后端开发人员，将比那些只局限于自己领域的人更有见识，也更能成为好的团队成员。</p><p>在开始阶段，对开发的各个方面的小尝试也有助于找到吸引你的东西，并给你一个软件世界中更大的蓝图。</p><p>追随你的兴趣，保持求知欲!</p><h2 id="--12">给新开发者的一个建议</h2><p>现在我们已经介绍了你的期望以及如何考虑它们，这里有一些实用的技巧可以帮助你成为一名优秀的开发人员，一名团队成员喜欢与之共事的开发人员。</p><h3 id="-1-">#1 沟通是非常非常重要的</h3><p>第一天上班时，你可能没有令人惊讶的开发知识和技能，但你<em>可以</em>有令人惊讶的沟通技巧。</p><p>作为一名新开发人员，你将需要大量的帮助和指导。没关系，这里有一个如何有效地寻求帮助的小窍门。</p><p>被困住是令人沮丧的（对我来说就是这样）。这种挫败感很容易将你压倒，你可以向旁边的同事请教（或者通过电子邮件和聊天应用）。</p><p>类似：</p><blockquote>“我困住了”</blockquote><blockquote>“显示错误”</blockquote><blockquote>“页面不能加载”</blockquote><p>现在退一步，从你请求帮助的那个人的角度来看待这个问题。像<em>“页面无法加载”</em>这样的信息对这个人毫无帮助。没有上下文，没有信息可以让他们继续。事实上，他们还得向你<em>获取更多的信息</em>。这样做效率非常低，而且会让试图帮助你的人非常沮丧。</p><p>寻求帮助的一个更好的方式是像填词游戏一样思考（如果你还记得 freeCodeCamp 课程中有一道这样的题目的话）：</p><blockquote>我正在做 _____，但是在我尝试_____的时候，却发生了____。</blockquote><blockquote>我试着_____，_____和_____，我发现_____ 和 _____。</blockquote><p>举个例子：</p><blockquote>我正在处理<strong>用户密码重置错误的 bug</strong>，但是当我尝试<strong>生成密码重置链接时</strong>，<strong>用户的令牌已经为空</strong>。</blockquote><blockquote>我看过<strong>令牌是在哪设的</strong>，我发现<strong>令牌在数据库中</strong>，但是<strong>这个令牌在文件 Y 的 X 行上丢失了。</strong></blockquote><p>如果你给别人发了上面的信息，他们可以理解:</p><ul><li>你在做什么</li><li>问题是什么</li><li>你已经试过了什么</li><li>问题发生在哪</li></ul><p>对于你寻求帮助的人来说，这是一个丰富的信息。他们会<strong>非常</strong>感激你给了他们如此清晰的信息，并且你已经尝试自己去解决它，这让他们知道你尊重他们的时间，而不是你在等待他们简单的施舍。</p><p>寻求帮助并没有错，但是如果有人只是帮你解决问题，他们实际上是在剥夺你学习和成长的机会。</p><p>这并不是说你必须解决这十个问题，然后你就再也不会遇到问题了。作为一名开发人员，你每天都会遇到问题。所以最好的结果是，他们给你足够的帮助让你摆脱困境，但允许你自己独自解决问题。</p><h3 id="-2-">#2 用好谷歌</h3><p>就像在武术中施展技能一样，作为一名开发人员，随着时间的推移，你将施展谷歌的才能，这就是用谷歌搜索答案的艺术。这是每个有经验的开发人员都拥有的一项真正的技能，它是随着时间的推移而开发出来的。</p><p>有时，你只需要直接键入你所遇到的问题（这对报错非常有效）：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/c11fee08f72cafbce244262a6515c1129bc81a9f/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f7065722e3034312e6a706567" class="kg-image" alt="有时粘贴整个错误消息可以得到结果" width="600" height="400" loading="lazy"><figcaption>有时粘贴整个报错信息就可以解决</figcaption></figure><p>有时，搜索准确的错误信息将产生正确的结果，正如上面所做的。你遇到了一个技术问题，其他人也遇到过完全相同的问题。</p><p>但有时你需要对搜索信息进行一些编辑，以删除特定项目的信息：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/103996da6677e8d7cbc920fd425424c918cd3f0d/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f7065722e3034322d312e6a706567" class="kg-image" alt="太多特定于项目的信息不会得到结果" width="600" height="400" loading="lazy"><figcaption>有太多特定于项目的信息你不会得到一个满意的结果</figcaption></figure><p>如上图，谷歌从未在 <code>gotta_catchem_all.rb</code> 文件中见过 <code>whos_that_pokemon_its_pikachu()</code> 这个函数（但是我仍然还在搜索它）。删除特定项目的信息并添加通用信息将会返回更好的结果。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/bb51eab244a3403958befba870be3d2c4e68b31b/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f7065722e3034332d312e6a706567" class="kg-image" alt="基本的通用错误" width="600" height="400" loading="lazy"><figcaption>基本的通用错误</figcaption></figure><h3 id="-3-">#3 尝试使用计时器</h3><p>作为一名新开发人员，你会遇到很多困难。可能会出现以前你从未见过的错误消息，如何处理这些情况将决定你作为开发人员的成长速度。</p><p>尽管这可能是非常令人沮丧的时刻，这些是你学习和成长的时刻。你不能通过一遍又一遍地做同样的工作来学习，只有在经历坎坷的过程中才能成长。</p><p>当你遇到其中一个问题时，请花些时间尝试并自己解决它。有些公司会把这句话作为培训的一部分来告诉你，比如“30 分钟后再寻求帮助”。在其他一些公司，虽然没有这么明确，但这个提示依然适用：尽你所能。如果你还是卡住了，那就寻求帮助。</p><p>这不仅让你有机会弄清楚，而且也是尊重在专注于自己的工作的团队成员的时间。因为一些你本可以很快意识到的事情而去打断别人，这将对团队来说是一种净损失。</p><p>所以好好尝试一下，然后再寻求帮助!</p><p>下面是成为一名优秀的新开发人员的秘诀：<strong>总是重置计时器</strong>。</p><p>假设你被困住了，尝试了 30 分钟，然后再去寻求帮助。下次你被困住的时候，去寻求帮助之前，<strong>再试 30 分钟</strong>。</p><p>显而易见，当你觉得你遇到了一个又一个问题的时候，你会感到沮丧，你会想要在遇到下一个问题之前寻求帮助，这是很自然的。</p><p>深呼吸，去快走一会儿，用全新的视角来看待每一个问题。</p><p>（当然，说起来容易做起来难！）</p><h3 id="-4-">#4 记住放松和休息</h3><p>记住，当事情开始让你感到难以承受时，要休息一下。</p><p>去散个步，接杯水，如果可以的话，放一个晚上。有时候仅仅睡一觉或者动一动就可以帮助你重新调整自己。</p><p>请记住，每个开发人员都曾经历过你这种情形，你会度过难关的。</p><p>在某种程度上来讲，开发总是令人沮丧，你永远不会停止犯错或者不再遇到问题。但随着时间的推移，你会越来越擅长处理这些问题，你解决这些问题的信心也会增强，所以这些问题对你的困扰会越来越少。</p><h3 id="-5-">#5 小黄鸭调试法</h3><p>你是否曾向某人发邮件或短信描述你遇到的一个问题，然后在你点击发送之前你已经知道了解决方法？在软件世界里有这样一个短语：<em>小黄鸭调试法</em>。</p><p>这个名字是引用了《实用程序员》一书中的一个故事。在这个故事中，一个程序员带着一只橡皮鸭，通过强迫自己一行一行地向橡皮鸭解释代码来调试他的代码。</p><p>通过写电子邮件或与另一个人交谈，你被迫整理整个上下文逻辑，以便让另一个人理解发生了什么。</p><p>用这种方式解释这个问题， <em>你自己</em>必须有逻辑地思考和整理。仅仅是试着为别人准备上下文的行为就会让你从不同的角度来思考问题，很多时候你自己就会找到解决方案。</p><p>回到尝试使用计时器，在你寻求帮助之前，试着用你没有发送的邮件解释问题的概要。你很有可能在不打扰别人的情况下对这个问题有了新的见解，最糟糕的情况是，你有一封很好的邮件或聊天信息要发送给他们（我也见过很多人把真正的橡皮鸭放在桌子上！）</p><h3 id="-6-">#6 记笔记</h3><p>这个建议可能看起来很明显!</p><p>当你第一次加入一家公司的时候，你会接触到很多不同的东西：源代码、产品、人、业务逻辑，不可能把这些全部记住，所以把这些东西写下来。</p><p>当我开始我的第一份工作时，我的老板告诉我他可以向我解释任何事情，但是他不想解释两次。那时候我明白，但 8 年后的今天我真才真正明白，这是在尊重你的团队成员以及他们的时间。</p><p>如果他跟我解释了某件事情，我却忘了，我们就浪费了彼此的时间，所以只能再问他一遍。在他的建议下，我甚至开始在我的显示器上贴物理便利贴，记下我想经常遇到和需要记住的事情，就像：</p><ul><li>尝试 30 分钟</li><li>在请求 PR 评审之前，检查构建是否通过</li><li>确保你有最新的代码</li></ul><h3 id="-7-">#7 每天与冒名顶替综合症作斗争</h3><p>如果你不知道什么是冒名顶替综合症，你的脑海里这样想:</p><p>我不属于这里，我是一个冒名顶替者。除了我，其他人都知道这一点。</p><p>这是一种你每天都要与之抗争的心态。作为一名开发人员，会有令人沮丧的时候，但是你已经面对过挫折并努力克服了它。每个开发人员都有这种感觉，而且这种感觉也会过去的。</p><p>实际上，冒名顶替综合症看起来更像这样:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/8ce7a2f6f71bff1b05ba1dc5e2ac7ee23231b828/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f696d706f737465725f2e706e67" class="kg-image" alt="骗子综合症 " width="600" height="400" loading="lazy"><figcaption>冒名顶替综合症</figcaption></figure><h2 id="--13">“高级”和“初级”开发者之间的一个关键区别</h2><p>当然，高级开发人员比新开发人员有更多的知识和经验，但这并不是他们的根本区别。一个高级开发人员有一个<strong>解决问题体系</strong>。</p><p>当我第一次开发时，我想我最终会停止犯错误——停止遇到报错。</p><p>相反，我每天仍然会犯很多错误：错误的语法，错误的文件，错误的函数。</p><p>我没有停止犯错误——<em>我只是很快就修复了。</em></p><p>这是一种随着时间发展而来的技能，需要有意识地解决问题。</p><p>这里有一些关于如何构建这个体系的提示。</p><h2 id="5-">5个调试技巧</h2><h3 id="-1--1">#1 不要盲目敲代码</h3><p>我看到许多新开发人员遇到问题时会开始疯狂的开始改代码（我是新开发者的时候也这么做过）。他们没有系统的代码评估过程，只是对代码做大量的修改，看看这样是否能解决问题。</p><p>这是一个很坏的习惯，这样做只会犯更多的错误。你应该做的是:</p><h3 id="-2--1">#2 读错误信息</h3><p>这个建议似乎很明显，但实际上是在<em>读取</em> 信息。错误是什么？发生这个错误的文件是什么？错误产生在哪一行？这些都是至关重要的信息。</p><p>如果你不愿意快速更改代码的话，你可以直接跳到错误产生的地方。</p><p>这是有经验的开发人员的方式：读取消息然后直接找到问题所在。</p><p>这样做会为你节省大量的时间和精力。</p><h2 id="-3--1">#3 不要把时间浪费在不可能的事情上（或者是至少不可能的事情）</h2><figure class="kg-card kg-image-card"><img src="https://camo.githubusercontent.com/36a41cbcb3139c7a9de34d3d197cb44221d45da7/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f323032302f30352f6e65775f646576656c6f7065722e3035392e6a706567" class="kg-image" alt="不要把时间浪费在不可能的事情上！" width="600" height="400" loading="lazy"></figure><p>我看到的新开发人员会经常做这样一件事：他们在代码中遇到错误，然后在代码中发现了一些他们认为是问题的东西，然后不相信这有问题。举个例子：</p><p>"我发现问题出现在第 14 行，它会检查 <code>is_admin"</code> 变量是否为真，但是它不是真，然而用户确实<em><strong>是</strong></em>管理员！</p><p>他们是这么思考这个问题，<em>“这怎么可以！”</em> ，而不是 <em>“为什么会这样？”</em></p><p>有时候你会遇到核心语言或框架的 bug，但在 99.9% 的情况下， <strong>你可能是做错了什么，或者情况并不像看上去的那样。</strong></p><p>有些事并不像看上去的那样，被不可能的事情吓到只是在浪费时间。开始解决问题吧，不要在眼前不可能展开的事情上花时间，质疑你对情况的假设。</p><h3 id="-4--1">#4 “当有疑问时，打印更多的信息”</h3><p>我不知道最初是谁说的，但这是最有效的调试技术之一。当你不知道发生了什么情况时，开始在你认为发生问题的地方打印程序的相应信息。</p><p><code>user</code> 变量中有什么？HTTP 请求的响应是什么？在这种情况下，我们使用了 <code>if</code> 或 <code>else</code> 分支吗？我们调用过这个函数吗？是否在此页面？</p><p>我见过无数的开发人员尝试调试和修复一个问题的时候（我自己也做过很多次），他们甚至没有在正确的文件中进行调试。快速打印或者在“控制台”中可以显示你实际上正在查看实际运行的代码。</p><h3 id="-5--1">#5 一次只做一件事</h3><p>每个新开发人员都会犯的一个常见错误是：<strong>一次做的事情太多了。</strong></p><p>他们想要编写 30 分钟的代码，单击运行，然后查看结果。他们发现，花了 30 分钟来编写 bug 和错误，现在修复起来简直是一场噩梦。</p><p>当我在应用程序中新建一个页面时，我做的第一件事就是把<code>&lt;p&gt;hi&lt;/p&gt;</code>标签放到页面上。我想确定我所有内部代码设置是正确的，以至我可以在页面上看到<code>hi</code>。我一次只做一件事。</p><p>一次只做一件事。在页面上看到 <em>“hi” </em>显示。接下来获取用户输入，接下来保存输入。如果你一步一步来，你就知道问题发生在哪里，该如何解决。</p><p>即使在从事开发工作 8 年后，我仍然是一步一步来。我知道我将会犯很多错误，而且我想<em>立即</em>知道这些错误在何时何处发生的。</p><h2 id="--14">总结</h2><p>读完这篇文章，你已经了解了很多，但是你还有很多知识得学，很多技能需要提升，也有很多乐趣和有益的工作在等着你。</p><p>抬头挺胸，记得要休息。每天提高 1%，一年之后你就会对结果感到惊讶。</p><p>感谢阅读！</p><p>原文：<a href="https://www.freecodecamp.org/news/how-to-become-an-astounding-junior-developer/">How to Become an Outstanding Junior Developer</a>，作者：John Mosesman</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 程序员职业发展的 23 种路径 ]]>
                </title>
                <description>
                    <![CDATA[ 过去 5 年中，我在芝加哥的一些编程训练营做过很多次分享。 听到的问题大多千篇一律：接下来我该学什么语言呢？ [https://www.freecodecamp.org/news/what-programming-language-should-i-learn-first-19a33b0a467d/] 如何准备技术面试？ [https://www.freecodecamp.org/news/interviewing-prep-tips-and-tricks/] 你们公司招人吗？诸如此类。 但有一个问题直击我的灵魂深处：如果我不想再当程序员了，该怎么办？ 关于这个问题我后来思考了很久。我带产品和技术团队将近十年了，我意识到自己遇到了新的挑战。所以今年夏天，我开始了自由技术写作 [https://www.karllhughes.com/writing/] 。很快我便意识到，技术写作完全可以作为程序员转型后的职业发展道路之一，而在遇到第一个客户时我甚至还没有意识到这一点。 程序员还能做什么工作？ “除了开发软件外，程序员还能做什么工作？” 意识到技术写作是其中一个选择后，我开始思考 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/alternative-career-paths/</link>
                <guid isPermaLink="false">5f7c48d2027c3105323f59aa</guid>
                
                    <category>
                        <![CDATA[ 职业发展 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 产品经理 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 开发者关系 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miaomiao Ma ]]>
                </dc:creator>
                <pubDate>Tue, 06 Oct 2020 10:47:03 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2020/10/Alternate-Career-Pathways.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>过去 5 年中，我在芝加哥的一些编程训练营做过很多次分享。</p><p>听到的问题大多千篇一律：<a href="https://www.freecodecamp.org/news/what-programming-language-should-i-learn-first-19a33b0a467d/">接下来我该学什么语言呢？</a><a href="https://www.freecodecamp.org/news/interviewing-prep-tips-and-tricks/">如何准备技术面试？</a>你们公司招人吗？诸如此类。</p><p>但有一个问题直击我的灵魂深处：如果我不想再当程序员了，该怎么办？</p><p>关于这个问题我后来思考了很久。我带产品和技术团队将近十年了，我意识到自己遇到了新的挑战。所以今年夏天，我开始了<a href="https://www.karllhughes.com/writing/" rel="nofollow">自由技术写作</a>。很快我便意识到，技术写作完全可以作为程序员转型后的职业发展道路之一，而在遇到第一个客户时我甚至还没有意识到这一点。</p><h2 id="-">程序员还能做什么工作？</h2><p>“除了开发软件外，程序员还能做什么工作？”</p><p>意识到技术写作是其中一个选择后，我开始思考有无其他选择。选项出乎意料地多。</p><p>这篇文章会历数程序员转型后的职业发展路径，尤其是对最近的编程训练营毕业生而言。我会介绍每份工作的内容、如何起步，以及长期规划。</p><p>不管你是因为没有找到程序员的工作还是因为不适合软件开发而开始寻找其他工作，这篇指南会帮你根据自己的技能找到一份适合你自己的工作。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/10/image-2.png" class="kg-image" alt="image-2" width="2088" height="1069" loading="lazy"></figure><h2 id="--1">面向客户工作</h2><p>程序员会因人际沟通技能而受益颇多，我之前沟通过的一些编程训练营毕业生也不打算整天坐在电脑面前写代码。如果你想做一份能与人更多互动的工作，下面这些选择可能会比较适合你。</p><h3 id="1-">1. 开发者关系、开发者布道师</h3><p>随着越来越多的公司重视与开发者建立关系（这些开发者可能是公司的客户、用户或者布道师），开发者关系领域正在快速发展。</p><p>开发者关系专家（有些公司称他们为布道师、社区经理或“DevRels”）协助公司围绕软件产品建立社区。</p><p>他们在技术公司中的日常工作是创建演示应用程序、写博客、在会议上演讲，和运营社交媒体账号。许多著名的技术公司（如脸书、谷歌、亚马逊等）都有开发者关系专家团队。</p><p>如果你对这个领域感兴趣，可以看看 <a href="https://www.marythengvall.com/">Mary Thengvall</a> 和 <a href="https://medium.com/@aspleenic">PJ Hagerty</a> 正在做的事情。他们是我在开发者关系领域最喜欢的两位，他们一起推出了 <a href="https://www.communitypulse.io/">Community Pulse 播客</a>。</p><h3 id="2-">2. 开发者营销</h3><p>开发者营销与开发者关系有些重叠，但开发者营销更聚焦外部。</p><p>开发者都不喜欢传统的销售方式，所以面向开发者的营销并不好做，很多在其他市场可行的更加激进的营销策略在这个市场行不通。具有技术背景的人可以顺畅地理解开发者们的思维方式，较传统营销人员更具有优势。</p><p><a href="https://www.slashdata.co/blog/">SlashData</a> 发表了很多关于开发者营销的内容，比如 <a href="https://www.slashdata.co/blog/developer-marketing-guide-selling-softly">2018 年的时候出版了一本相关的书《Developer Marketing Guide: Selling It Softly》</a>。如果你想从事这一领域，学学 SEO、社交媒体、内容营销、影响力营销等在线营销内容。你可以运营自己的博客，练习这些技能，然后再应用到实际工作中。</p><h3 id="3-">3. 销售工程师</h3><p>很多工程师一看到带有“销售”字眼的工作就不感兴趣，但这是因为我们常遇见的销售人员都不合格。</p><p>事实是<a href="https://www.theladders.com/career-advice/everyone-is-in-sales-and-thats-a-good-thing">每一个人都或多或少地会做销售</a>。面试找工作、给工程团队介绍新框架等都属于销售。销售的意思是用合适的解决办法匹配消费者的需求。</p><p>销售工程师具有技术背景，颇有优势。这对于不想整天写代码、但懂软件工程的开发者来说是一个绝佳的选择。</p><p>此外，销售不需要任何专业资格，这是它的另一个好处。你可以<a href="https://blog.hubspot.com/sales/how-to-become-sales-engineer">在 Hubspot 搜索一些入门技能和资源</a>。随着越来越多的公司开始为工程师开发软件工具、提供服务，未来十年，市场对销售工程师的需求将可能日益增多。</p><h3 id="4-">4. 技术招聘人员</h3><p>另一种不受软件工程师待见的职业是技术招聘。</p><p>我遇见过一些诚实的、真诚的技术招聘人员（如我们芝加哥的 <a href="http://www.taylordorsett.com/">Taylor Dorsett</a> 和 <a href="https://www.linkedin.com/in/humanrecruiter/">Matt Hoffman</a>），但我也遇见过一些糟糕的、什么都不懂的招聘人员，只会乱翻简历达成业绩。</p><p>若是有软件开发背景，那你就较很多其他技术招聘人员更具同理心和可信度。正如销售，技术招聘要求招聘人员更加外向、关注人际关系，但技术招聘并不需要专业资格或课程。</p><p>但不幸的是，很多技术招聘入门级工作需求都是一些比较差的公司发布的，所以，在申请之前，务必查看该公司在 <a href="https://www.glassdoor.com/Salaries/technical-recruiter-salary-SRCH_KO0,19.htm">Glassdoor上面的评价</a>。</p><h2 id="--2">产品工作</h2><p>如果你想在产品团队，但不确定自己想不想成为一名程序员，你可以试试其他工作。这些工作跟程序员联系紧密，因此你的编程知识会给你提供帮助，但产品工作也需要其他的专业知识。</p><h3 id="5-qa-">5. 质量保证工程师（QA）或测试工程师</h3><p><a href="https://www.360logica.com/blog/qa-engineer-test-engineer-whats-pick/">质量保证和测试工程师的区别较小</a>，在软件正式使用之前，他们都需要做测试工作。</p><p>如果你关注细节，想要提出一些创造性方式来自动化重复工作，这可能是一个不错的选择。除去一些手动测试工作外，可能也需要写一些代码。</p><p>小型公司会让程序员彼此互相检查代码，大型公司才有专门的测试和质量保证岗位。公司做测试的方式不一，所以一定要问清楚公司使用什么工具做测试，测试自动化达到何种程度，你所应征岗位的手动和自动测试占比各为多少。</p><h3 id="6-">6. 商业分析师</h3><p>产品开发生命周期的另一端是商业分析师，这是商业和技术团队之间的桥梁，可以保证各方理解需求、限制和时间点。在团队结构中，商业分析师还助测试和质量保证一臂之力，所以他们还要具备广泛的产品知识。</p><p>如果你有商业、产品开发，或者设计、编程的背景知识，那么你就具备了商业分析师的基础入门资格。如果没有的话，我建议你学习一些在线课程，了解一下商业分析师及其工作内容。</p><h3 id="7-">7. 项目经理</h3><p>正如商业分析师，项目经理必须理解产品的商业需求和技术限制。</p><p>但商业分析师和项目经理之间的关键差异在于，项目经理需要深入单个项目。项目经理需要为项目团队分配任务和资源，负责追踪项目进度。</p><p>小型公司可能会将商业分析师、项目经理、敏捷专家、产品经理的工作结合在一起，但大型公司可能会具体细分岗位职责。</p><p>一名项目经理要想成功，离不开卓越的组织能力、业务理解和人际关系处理能力。这份工作需要你管理预期，激励可能比你资深或有经验的前辈，所以你得快速建立信任。这份工作需要考虑多个方面，很适合不想再写代码的分析、技术人才。</p><h3 id="8-">8. 敏捷专家</h3><p>在敏捷开发团队中，<a href="https://www.scrum.org/resources/what-is-a-scrum-master">敏捷专家</a>帮助确保每一个人了解并完全相信敏捷理论、最佳实践和规则。</p><p>敏捷专家很像项目经理，但特别强调与其他团队的配合，尤其是在大公司中，分工比较细，就更强调这一点。</p><p>作为一名敏捷专家，管理预期和局限性的能力十分重要，同时也需要了解敏捷最佳实践，因此我建议大家看一些这方面的课程或者书籍。敏捷在各种规模的组织中均有广泛应用，所以在未来十年这个职业的需求可能会继续增长。</p><h3 id="9-">9. 产品经理</h3><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2020/10/image-3.png" class="kg-image" alt="image-3" width="853" height="463" loading="lazy"></figure><p>2019 年，我花了大量时间学习产品管理，以改善我们的产品团队的<a href="https://www.karllhughes.com/posts/product-management-process">交付流程</a>。</p><p>产品经理要全面审视公司的产品，确保这些产品是消费者想要的、有商业意义的并且可以被设计出来。站在这种角度思考的能力并不多见，所以如果你有这种能力，还有些技术背景，你也可以成为一名产品经理。</p><p>入门级产品经理可以从产品的小模块或在某些组织中担任产品经理起步。这可以让你在负责管理自己产品之前明白产品开发，帮助你和所有的相关人员建立关系。</p><h3 id="10-">10. 设计师</h3><p>如果你有设计或艺术背景，再有一些编程基础，那么你可以成为一名优秀的 UI 或 UX 设计师。这些能力可以让你更有效率地和工程师配合设计出互动性的 HTML 或 CSS，而不仅仅是静态图像文件。</p><p>如果你没有太多设计经验，找一个课程学习一下，开始打造作品集。哪怕你没有学历，但只要你有知识和技能，很多公司也愿意聘用你。我经常看到 <a href="https://dribbble.com/">Dribbble</a> 这个作品集平台，当然你也可以使用其他平台。</p><h3 id="11-">11. 零代码或低代码开发者</h3><p>过去几年<a href="https://medium.com/@rrhoover/the-rise-of-no-code-e733d7c0944d">零代码和低代码工具</a>爆火，给没有开发团队但想要快速开发软件的公司带来了机会。使用这些工具，你无需花费数周，在数小时内便可创建一款移动或网页应用。这些工具每年都会进步，所以越来越多的公司正在接受零代码应用。</p><p>可以在 <a href="https://www.makerpad.co/jobs">Makerpad</a> 和 <a href="https://nocodejobs.co/" rel="nofollow">No Code Jobs</a> 这两个平台找相关工作。因为这是一个新兴领域，需要的技能和所给报酬变化范围较广，但编写代码能力无疑是一项非常重要的技能。</p><h2 id="--3">支持工作</h2><p>很多软件工程师没有意识到幕后有很多员工负责维护服务器、网站和运营工作顺利开展。这其中就有些工作要求员工会写自动化脚本或对服务器管理有较深的理解。如果你想在产品开发之外寻找跟技术相关的工作，这类工作也很适合。</p><h3 id="12-devops-">12. 系统管理工程师或 <strong>DevOps </strong>工程师</h3><p>大型软件公司每年都有成百甚至上千的服务器需要修复、升级、轮换。尽管当下广泛应用云计算，上述工作都可以通过 <a href="https://www.terraform.io/">Terraform</a> 和 <a href="https://kubernetes.io/">Kubernetes</a> 之类的软件而不是人工操作来实现，但是相关招聘需求还是很多的。</p><p>一直以来，工程师团队需要系统管理员<a href="https://devops.stackexchange.com/questions/157/what-is-the-difference-between-sysadmin-and-devops-engineer">负责维护和管理服务器</a>。随着组织扩张并逐渐转用云主机，很多团队开始使用“DevOps 工程师”这一称呼，以反映这些工作的自动化程度越来越高。从实践来看，两者的工作内容有很多重叠之处。</p><p>如果想要做这类工作，你需要对操作系统、托管平台、自动化工具、Bash 脚本编程和系统架构有基本了解。在这一领域<a href="https://www.reddit.com/r/devops/comments/hne5q0/getting_into_devops_as_a_beginner_is_tricky_my_50/">找一份入门级工作有些难</a>，因为其对技术知识要求广泛。但如果你喜欢解决问题，不想受面向消费者产品的 UI 和 UX 要求束缚，这类工作也值得尝试。</p><h3 id="13-">13. 数据库管理员</h3><p>有些公司将数据库管理员与系统管理员混为一谈，但其实数据库管理员是一个不同的职务。</p><p>数据库管理员负责低层次数据存储系统的安全、配置、扩展和优化。你需要懂得 SQL 和 NoSQL 数据库、安全最佳实践和一些基础脚本知识，但无需整天写代码，处理的都是类似修复索引和缓存的小优化问题。</p><p>如果你是软件开发的新手，那就开始尽量学习有关数据库的知识吧。你需要知道哪个数据库适合哪个应用，以及如何大规模优化这些数据库。实践起来可能会有些难度。如果你想要找一些工作中使用的大数据集，可以去 <a href="https://www.kaggle.com/datasets" rel="nofollow">Kaggle</a> 看看。</p><h3 id="14-">14. 网站可靠性工程师</h3><p>网站可靠性工程师负责响应并修复产品运行中出现的重要问题，也就是说你需要随时处于待命状态，工作时间会比较特殊。但乐观一点来看，网站工程师将会成为解决各种异常问题、创建自动警示和读服务器日志的一把好手。</p><p>由于网站可靠性工程师总是需要人处于随时待命状态，有经验的软件工程师不太可能长时间地一直呆在这个岗位。然而，从另一个角度看，如果你正在寻找你的第一份软件开发工作，但又不知如何是好，网站可靠性工程师可能是一个不错的入门选择。我认识的两个训练营的毕业生在正式从事软件开发工作之前，就是从网站可靠性工程师过渡的。或许在这份工作中，你会发现自己喜欢快节奏解决问题所带来的挑战和激情。</p><h3 id="15-">15. 技术支持或客户支持</h3><p>一些工程师害怕与客户交流，但也有些工程师认为帮助人们解决问题非常鼓舞人心。在需要技术人员解答问题和提出修复建议的软件公司，如果你有写代码的经验，那么你就是客户支持岗位的理想人选。</p><p>然而，不好的一面在于，在支持岗位工作，意味着不得不跟处在最糟状态下的用户打交道。如果用户不满意或者感到沮丧，他们很可能不会心平气和地与技术支持团队沟通。所以这份工作需要你耐心十足，且厚脸皮。</p><h2 id="--4">教学和写作工作</h2><p>我一直都对教学怀有热忱，所以如果工程师角色能够让我从事教学相关工作，会对我有莫大的吸引力。如果你喜欢将复杂问题掰开揉碎分析，并把这些展示给其他工程师，那你可以考虑一下下面的几种职业选择。</p><h3 id="16-">16. 技术写作者</h3><p>读大学时，我的第三份实习是在一家大公司担任技术写作者，工作内容就是纯粹写作。我很喜欢，因为每天都能学到新东西。</p><p>自那以后，我发现技术写作不仅仅意味着文档写作，还包括<a href="https://www.karllhughes.com/posts/start-freelance-blogging" rel="nofollow">技术博客</a>、文案写作、内部或外部文档、示例程序和指导手册。对写作者而言，技术写作收入可观，值得考虑。</p><p>如果你决定走这条路线，那么你需要擅长写作（很明显）、组织复杂观点和学习新东西。自我编辑能力越强，产出的作品越有价值，所以要投资那些能帮你变得更好、更高效的工具。</p><p>刚开始写作时，你可以给<a href="https://github.com/malgamves/CommunityWriterPrograms">一些有偿社区写作项目</a>投稿，在你建立起人际网络和作品集之后，你可以借助这段经历找到一份全职工作。</p><h3 id="17-">17. 老师</h3><p>有多种方式可以从软件开发中跳出来成为一名老师，比如去训练营任教、去大学或高中任教，可以加入类似 <a href="http://egghead.io/" rel="nofollow">egghead.io</a> 之类的平台，或者可以在 Teachable 或 Educative 创办自己的课程网站。</p><p>无论在何种情况下，老师们都需要快速学习新知识，并需要将知识转变成易于学生理解的形式。想要成为一名成功的老师，你需要考虑学生的水平，并与学生建立信任。老师的收入可能比不上软件开发，但这份工作带来的成就感十足。</p><h3 id="18-">18. 培训师</h3><p>企业培训是教学的另一种形式，也值得考虑。在大公司里，培训师可能是独立的咨询师或者员工，会前往客户的办公地点提供专门的软件实践培训。</p><p>一般来讲，培训师具有丰富的技术知识，但也有些培训师是具备一定的技术知识，然后沟通能力比较出色。企业培训的收入比教学要好，但企业培训的销售导向也会更强。培训师经常在大会上发言，办社区工作坊，或参加各种沙龙。</p><p>如果你喜欢站在舞台上，展示各种技术概念，那么这份工作也是理想的选择。</p><h2 id="--5">分析工作</h2><p>技术公司的大量工作都对分析技能做了要求，有些领域需要专门的教育背景，如果你想从软件开发转行，这些分析岗位也是备选项。分析工作与专注产品的工程师工作的节奏非常不同，类似上面提及的支持工作，分析工作需要与业务的其他部门互动对接。</p><h3 id="19-">19. 数据科学家或工程师</h3><p>这两种职务（一些公司会将这两者混为一谈）都涉及到使用大量数据集帮助业务部门或他们的客户做出更好的决策。</p><p>数据工程师通常负责数据获取和组织管道，数据科学家则负责设计实验和算法，以使得数据形成有用结果。<a href="https://en.wikipedia.org/wiki/Data_science" rel="nofollow">数据科学（人工智能、机器学习等）是一个大的领域</a>，扎根于数学、软件工程和统计学。</p><p>有许多课程、训练营和大学学位与数据科学和工程相关，但如果你数学背景强大，你也有能力自学一些这方面的基础课程。如果你没有数学背景，可以首先考虑进修数值分析、矩阵代数和统计学。</p><p>学习这些知识要花大量时间，当前也对数据科学家有大量需求，因此这份工作收入不菲，也不太可能短时间内就消失。</p><h3 id="20-">20. 安全分析师</h3><p>从事信息安全工作的人一般都很低调，除非出了什么岔子。虽然每个开发者应该都能觉察到安全漏洞和风险，但安全分析师就是专门雇来发现、记录安全问题并提出修复方案的。</p><p>有些安全分析师是独立的咨询师，但在大一点的公司，可能会有一个内部安全分析团队。这个岗位很有趣，因为它需要结合技术、沟通、业务和风险评估技能。</p><p><a href="https://www.csoonline.com/article/3153707/top-cybersecurity-facts-figures-and-statistics.html">安全岗位比较难招聘到合适的人</a>，所以这个工作的稳定性比较高。信息安全是一个很广阔的领域，如果你对这个领域感兴趣，不妨<a href="https://medium.com/bugbountywriteup/jobs-in-information-security-infosec-93a5efc12ca2">看看这些你可以选择的路径</a>。</p><h3 id="21-">21. 研发</h3><p>对有软件开发技能的人而言，在研发部门工作是一份不可多得的经历。谷歌和亚马逊这类大公司把一部分利润点放在了高风险，但同时也具有高回报潜力的实验上，由研发团队负责实施。这些跨学科团队可能包括软件开发人员、数据科学家、商业分析师和项目经理。</p><p>加入一个好的研发团队很难，这些工作岗位竞争力十足，对知识的专业性要求很高，而这基本不可能在编程训练营中习得。也就是说，一些公司会雇佣<a href="https://www.simplilearn.com/roles-of-ethical-hacker-article">道德黑客</a>、创始人或<a href="https://levelup.gitconnected.com/how-to-become-a-polyglot-programmer-fff48562e708?gi=7e625563d43e">通晓多种语言的人</a>来整顿团队，提出一些创造性思维。</p><h2 id="--6">独立和灵活性</h2><p>尽管在技术领域工作，我们可以远程办公，有时也有<a href="https://blog.hubspot.com/marketing/sabbatical">学术休假</a>，但你可能在生活中想要更多的灵活性。如果你有驱动力，想要自己创业，那你可能每周只工作 4 小时，每年出差 6 个月，或者花费一半的工作时间在开源项目上。这并不容易。但作为一名软件开发人员，相比大多数人，你已经具有很大的优势。</p><h3 id="22-">22. 自由职业者或咨询师</h3><p>想要获得更多自由，其中一个方法是辞掉朝九晚五的工作成为一名自由职业者，这样你便可以自己雇佣自己，为一位或多位按时支付薪酬的客户写代码。公司通常也会雇佣自由职业者来负责具体的短期项目、清理技术负债或顶替休假的正式员工。</p><p>咨询师是高级的自由职业者，可以为客户解决具体问题。他们可能写代码，但客户更看重的是他们的专业知识或特殊背景。自由职业者与咨询师之间的界限非常模糊，所以不要在两者之间过于纠结。</p><p>自由职业者或咨询师起步时期最为艰难。如果你没有强大的人脉积累，你很可能需要依赖 <a href="https://www.upwork.com/" rel="nofollow">Upwork</a> 或 <a href="http://toptal.com/" rel="nofollow">Toptal</a> 等平台来寻找客户。这些平台会从你的收入中收取一笔不小的佣金，而且你要与平台上世界各地的自由职业者直接竞争。</p><p>在你不断积累起名声、积攒起客户后，就可以通过转介绍获得更多客户。转介绍非常有效，因为客户与你一开始就建立起了信任关系，而不再是互联网的匿名陌生状态。如果你的自由职业或咨询做得非常不错，你可以提高收费，在接手项目之间也可以适时休息。</p><h3 id="23-">23. 创业公司创始人</h3><p>互联网上有着各种软件工程师创业的故事（<a href="https://medium.com/@a13n/software-engineer-to-saas-founder-c16154013e12" rel="nofollow">1</a>, <a href="https://medium.com/@dvassallo/only-intrinsic-motivation-lasts-92c0497cf97c" rel="nofollow">2</a>, <a href="https://www.indiehackers.com/podcast/096-ben-orenstein-of-tuple" rel="nofollow">3</a>），这可能给你留下了“创业很简单”或“创业是个好主意”的印象。</p><p>但真相是，创业有成有败。</p><p>创业公司获得收入要花很长时间，所以很有可能在创业的前数个月甚至数年你都没有工资收入。换句话说，如果你想成立自己的软件公司，发展是个未知数。</p><p>你也可能在自己的工作时间之外成立一家公司，但是这很难，也可能<a href="https://www.entrepreneur.com/article/251931">有些法律风险</a>。如果你能找到一两个合伙人一起承担创业贷款，那成功的几率会高一点。</p><h2 id="--7">最后的一些想法</h2><p>软件工程是一个充满乐趣的领域，但并非所有人都适合从事这方面的工作。即便你离开了，决定去做一些别的事情，你在这个领域积累的知识也并不会浪费。</p><p>许多训练营毕业生惧怕在软件开发领域之外找工作，但我鼓励你们沿着自己的路径去发展。平衡好实用性（赚的钱要保证自己生活）和自身兴趣，找到一条并不像是“工作”的职业发展道路还是很有希望的。</p><p>我想听到你们的想法。如果你走过的路不同寻常，或者你转行了，我都希望能在<a href="https://twitter.com/karllhughes">推特</a>上了解你的所思所想。</p><p>原文：<a href="https://www.freecodecamp.org/news/alternative-career-paths/">23 Alternative Career Paths that Software Developers Can Grow Into</a>，作者：Karl Hughes</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
