如何摆脱困境
这篇文章预览了您订阅Break In后可获得的内容。Break In 是一份面向编程初学者、正在寻找第一份开发工作或正在为第一份工作努力奋斗的人士的新闻通讯。Break In 分享了来自真正开发者的真实经验和建议。订阅即可获取我们的双月刊新闻通讯,提出问题,甚至分享您自己的经验。
我被困住了!
几周前,我发现自己面临一个特别棘手的挑战。我必须重写一些代码,这些代码负责向我公司合作的一些在线商店(比如 Spotify、iTunes 等)提供音乐内容。
这一天的开始还算顺利,进展不错。直到下午5点左右,我突然遇到了一个难题。当我把专辑里的每一首歌都发送到指定合作商店的远程服务器时,我收到了一条从未见过的错误信息。我压力很大——快到下班时间了,我还没完成计划;我彻底懵了——突然间,我看到了一条从未见过的错误信息,完全不知道它是什么意思。因为压力和沮丧,我没有停下来思考解决问题的方法,只是一头扎了进去。我尝试了各种不同的方法,但都没有什么效果。时间越来越晚,我越来越疲惫不堪。最后,我放弃了(说实话,我还哭了一会儿)。
我最后睡了一觉。第二天,当我头脑清醒地重新审视这个问题时,我能够系统地解决问题,不到一个小时就修复了这个错误。
我想很多人都能从这个故事中体会到自己的感受。无论你是经验丰富的开发人员,却被棘手的 bug 困住,还是初学编程却苦苦挣扎,任何人都可能遇到困境。让我们一起用这份便捷指南摆脱困境!
摆脱困境的指南
- 隔离问题
- 实验
- 了解你的期望
- 提出问题
- 橡皮鸭
- 休息一下
隔离问题
你的代码里有一个棘手的 bug,程序就是不按你期望的方式运行,而你又不知道原因。处理这类问题的第一步是隔离问题。
让我们回顾一下我编写代码向在线商店交付音乐的经历。在执行负责将内容传输到在线商店远程服务器的代码时,我收到了一条错误消息。当我尝试将文件 X 实际移动到远程服务器时,错误消息类似于“权限被拒绝!”。
导致此错误的代码负责两件事:1)连接到远程服务器,2)将文件传输到该服务器。
因此,为了隔离问题,我的第一个问题是:这两个职责中哪一个导致了错误?我可以通过删除或注释掉导致其中一个或另一个的错误的代码来回答这个问题,或者我可以尝试在终端中逐行执行代码。
通过这种方法,我能够看到我的代码成功连接到服务器,但无法成功将文件传输到该服务器。我缩小了问题范围,并且知道应该把调试重点放在哪里。
我们的结论是:当程序出现 bug,或者无法实现预期行为时,我们需要找出所有可能导致问题的代码。然后,我们需要精简代码。从一行或一段代码开始,逐渐重新引入剩余代码,找到程序中导致问题的确切部分。
实验
一旦我们确切地知道了代码中哪个部分导致了问题,我们就可以开始深入挖掘了。当我陷入困境,不知道为什么会出现错误,或者为什么某些功能无法正常工作时,我喜欢直接开始尝试。让我们来看另一个例子。
最近,我的一个学生向我咨询了一个 CSS 问题。他们想修改页面标题的字体样式和颜色。他们给我看了 CSS 文件,代码看起来完全正确,但样式却没有在页面上显示出来。我完全不明白为什么!
于是我们就开始尝试。我们尝试对 CSS 做了一个非常简单的修改——将整个页面的 body 样式设置为背景色。即使页面上有其他样式干扰了 header 样式的设置,这个样式肯定也会显示出来,对吧?
错误的!
我们的背景颜色完全没有显示。这揭示了真正的问题——页面上没有显示任何 CSS 样式。这种理解让我们不禁思考:“我们的 HTML 页面真的知道 CSS 文件吗?” 答案是“不知道”。我们忘了<link>
在<head>
HTML 文档中添加一个指向 CSS 文件的链接标签。问题解决了!
不要害怕尝试对代码进行不同的调整和修改,哪怕只是为了引发不同的行为。这有助于揭示真正的潜在问题,或者至少让我们深入了解问题所在。然而,为了使实验发挥作用,我们需要清楚地了解对代码进行特定修改时预期会发生什么。
了解你的期望
简化复杂问题的一种方法是明确定义我们的预期行为。问问自己:“为什么这是个问题?我到底看到了什么不该看到的行为?/我到底错过了什么应该看到的行为?”
如果我们要解决这个问题,就需要清晰地定义问题的参数。一旦开始尝试新的代码,我们就需要清晰地定义每次修改后的预期结果。在编写一两行代码和查看修改结果之间反复进行,可以让我们更好地理解代码的影响。
提出问题
如果你觉得自己已经准备好把电脑扔出窗外了,那就别再写代码,开始提问吧。具体可用的资源可能因你的情况而异。如果你和其他同学一起上课,可以问问同学或老师。如果你是初级开发人员,可以问问同事或资深团队成员。
不过,有一些资源可供所有人使用:
- 谷歌一下!各种技能水平的开发人员每天都会用谷歌搜索。这是一项真正有价值的编程技能,你不应该回避它。
- 在Stack Overflow等论坛上提问。Stack Overflow 的存在是因为人们愿意帮助你解决问题。快去使用它吧!
- 参加聚会。有很多面向程序员初学者的优秀聚会,也有一些聚会以学习小组的形式进行,会有人自愿解答问题并提供帮助。去那里认识其他程序员吧!
- 问问朋友或同学。如果你上的是线上或线下课程,可以和其他一起学习编程的人交流!他们几乎肯定不会上当受骗,而且很可能自己也遇到过类似的问题。
锦上添花的是——提问是程序员需要培养的一项重要技能。你永远不会停止面对艰难的挑战或学习新事物,而你能够提出清晰简洁的问题将永远是你的宝贵财富。所以,要尽早并经常练习,并且不要犹豫寻求帮助。
橡皮鸭
您是否曾经向朋友、同事或老师问过问题,却在半途停下来意识到——“我明白了!”
嗯,在编程中实际上有一个名称:Rubber Ducking。
它的工作原理如下:通过清晰地描述问题,你可以了解程序的实际功能、与预期功能的区别,以及程序为何未能达到预期效果。除此之外,通过退一步向他人解释问题,你可以从新的视角看待问题,并经常对问题产生新的理解。
有很多方法可以参与这种实践。
- 与朋友或室友交谈——他们不需要了解任何代码,他们只需要愿意听你说话:)
- 与同事或同学交谈
- 与无生命的物体交谈——比如一只真正的橡皮鸭!
这一切都是为了退后一步,阐明问题,以便从不同的角度看待它。
休息一下
当你陷入困境、沮丧和困惑时,你有两个选择来应对这些感受。忽略它们,继续前进,让自己精疲力竭(我哭了,记得吗?)。或者,休息一下!
即使你的休息时间只有几分钟,也要从办公桌前站起来,走动走动,想一会儿别的事情。通常,当你用全新的视角重新审视问题时,解决方案就会跃然纸上。
对我们很多人来说,这是最难接受的建议。当我们正处于一个棘手的问题中时,哪怕只是停下来做一分钟,都会感觉违反直觉,而且完全是错误的。但疲惫不堪、沮丧不已的大脑对你没什么帮助。给自己一个你需要的、应得的休息时间,当你重新审视这个问题时,你会看到回报。
不要放弃
陷入困境的感觉很糟糕。往好了说,它会耗费你的时间和精力;往坏了说,它会让你怀疑自己作为程序员继续前进的能力。但作为一名开发者,陷入困境是最常见的经历之一。不要害怕陷入困境;如果你运用这里列出的一些原则,你就不会陷入太久的困境。
想要更多吗?
如果你喜欢这篇文章,不妨订阅《Break In》,这是一份即将推出的新闻通讯,面向那些努力闯入科技行业的人们!即将推出的期刊将深入探讨这里讨论的一些主题——小黄鸭调试、向 Stack Overflow 提问、向队友和同学寻求帮助、寻找合适的聚会等等!
鏂囩珷鏉ユ簮锛�https://dev.to/sophiedebenedetto/how-to-get-un-stuck-3nbp