所以你被困住了
这是 《编程第一年》一书的其中一章,这本书为新开发者提供了实用的操作指南和建议。如果你正在考虑从事软件行业,不妨看看这本书。该书可在 https://leanpub.com/firstyearincode免费下载。
程序员的工作职责之一就是排查缺失的分号和复杂的缓存问题,对应用程序中的每一行代码进行仔细研究和绞尽脑汁。这是代码最令人沮丧的地方之一:我们用它来减轻大脑的复杂性,但与此相反的是,任何有用的程序都会过于复杂,以至于我们无法完全理解。复杂性会产生未知数,而每个未知数都可能是一个潜在的错误。
代码学习的另一个令人沮丧之处在于它必须死记硬背。你不太可能通过盲目的实验发现你需要的关键字或 API。而且每种语言和库都有一些陷阱,这些陷阱可能在文档中描述,也可能没有。在这种情况下,经验是无可替代的。
我猜大多数程序员都经历过那种深陷困境、不知如何继续前进的沮丧感。关于这个问题,Stack Overflow 创始人发了一条推文:
这种特殊的思维方式可能让我的预期寿命缩短了几年。如果你是一名程序员新手,可以参考我这里推荐的类似流程来避免这种情况。每一步都建立在前一步的基础上,并不断升级,大多数情况下,你早在到达最后一步之前就能摆脱困境。
1. 有自我意识
如果你照顾好自己,关注自己的感受,一切都会好得多。睡眠不足、饥饿、恶劣的工作环境或个人生活中的压力因素都会直接影响你解决问题的能力。理想情况下,你应该在开始工作时保持平和的心态。然后,当你感到沮丧时,你可以给问题贴上标签(“我被困住了”),深吸一口气,开始着手解决问题。
2. 为你的沮丧设定时间限制
一旦你确定自己遇到了问题,就设置一个 20 分钟的计时器。关掉 Slack 和电子邮件,戴上耳机,礼貌地推迟与同事的提问和对话,然后开始在 Google 上搜索问题。尽可能多地阅读相关资料。尝试几种不同的搜索查询。你可能会惊讶地发现,有这么多人也遇到过你遇到的特定问题,即使这个问题看起来是独一无二的或专有的。如果你幸运地收到了错误消息,请在引号中搜索。考虑所有与应用程序故障部分交互的系统(库、包、框架、API、服务等),并问问自己问题是否可能出在与你想象的不同的地方。
3. 橡皮鸭
向想象中的同事解释问题。手边有橡皮鸭或毛绒玩具?那就更好了。我的桌子上一直放着一只鸭嘴兽佩里毛绒玩具。尽可能详细地描述问题,并假设你的同事对你正在讨论的代码并不十分熟悉。
如果这对你来说很难,可以尝试写一封电子邮件或 Slack 消息给可能提供帮助的同事。先不要发送,先写出来,然后反复修改,直到你满意地用清晰的措辞描述了问题。一定要提到你所做的研究以及你排除的任何可能原因。
4. 画出来
在一张纸或一块白板上,画出问题区域中交互的方法、类和文件的基本图表。这里不需要花哨的涂鸦——一堆圆圈和线条就可以了。同时画出一条贯穿该系统的数据。如果您需要稍微研究一下代码以确保绘图正确,请花点时间仔细研究一下。
5. 休息五分钟
现在你应该已经很了解这个问题了(或者知道你对它有哪些不明白的地方)。这时,把电脑关掉,让你的大脑休息一下。任何不费脑力的事情都可以。和朋友或同事聊聊天,小睡一会儿,散散步,吃个午饭,看个搞笑视频,去健身房,或者洗个澡。也许你在做其他事情的时候,就会突然想到解决办法。
6.寻求帮助
到目前为止,你独自一人的能力已经达到了极限;你可能已经在这个问题上花了 30 到 90 分钟。是时候寻求帮助了。找一位有相关经验的同事寻求帮助。如果你没有同事,或者没有同事可以帮忙,那就联系你的导师。如果你还没有导师,现在是时候把它列入你的待办事项清单了。Stephanie Hurlburt 的推特账号上有很多愿意在各个领域提供指导的人(也汇总在这个网站上)。
别担心浪费他们的时间。你已经研究并思考过这个问题,所以你可以完整而简洁地描述它。如果你继续独自尝试,可能会更加浪费时间。
7. 隔离问题
如果您仍然遇到问题,是时候从头开始了。创建一个小型 Git 仓库或 Codepen,看看能否添加足够的代码来重现问题。一次复制一个代码片段,围绕问题复制环境和代码,直到问题得以解决。然后尝试依次删除各个代码片段,确保没有添加任何不必要的代码。最终您将得到问题的最小示例(MCVE),这将方便其他人帮助您解决问题。请与您在上一步中寻求帮助的人一起回顾此示例。
8. 写下来
完整地描述问题。请包含代码示例、Git 代码库或 Codepen 的链接、屏幕截图(如有),以及您尝试过的方法和研究的摘要。请勿包含任何公开发布后会对您的公司造成安全风险的内容,因为这是下一步。
9. 找个朋友上网问问
找一个朋友(可能是步骤6中提到的人),让他们通读你步骤8中写的内容,确保其合理性。然后把它发布到网上。Stack Overflow 和其他 Stack Exchange 网站(例如 Server Fault、Software Engineering 或 Database Administrators)是及时获得问题答案的最佳选择,但它们的社区可能对提问者不太友好,所以不要孤军奋战——请你的朋友为你的问题点赞,并帮助你应对那些粗鲁的评论或关闭问题的投票。运气好的话,你会在一两天内得到一些好的反馈和想法。
10. 寻找解决方法
如果您仍未解决问题,那么是时候采取 B 计划了。您可以考虑修改受影响的功能、添加一些回退代码,或者切换到其他软件库。这听起来很像放弃,但妥协是所有软件的核心,所以不要为此自责。
最后:记录解决方案
解决问题后,可以考虑撰写一些文档,以减轻其他人的挫败感。文档可以是代码中的注释、公司内部文档中的页面、电子邮件、博客或 dev.to 上的帖子,也可以是 Stack Overflow 上的自答问题。
再次强调,一定要注意心理健康。编程本身就容易让人感到沮丧。我们都需要休息。如果你总是感到倦怠,那就该休息一天,改变一下日常习惯,或者另谋高就了。
祝你好运!
文章来源:https://dev.to/isaacdlyman/so-youre-stuck-30el