[译]作为一名新手开发,我是如何克服焦虑的?

在Twitter上看了一篇文章,觉得写得很好,一些事例跟自己当初学习编程时心情特别像,想着项目也没啥事,就试着翻译一下,贴出来,与君共勉!

关于挣扎与焦虑

提到代码,我相信很多人会想到"挣扎",如果你是一名新手或初级开发者,这份“挣扎”可能会更加突出。学习编程就是:找正确的资源、理解并整合、找份实习或者开发的工作,然后开始上手正式的项目-每一步都可能充满着挣扎与迷茫

挣扎带来的好处在于,你可以学习,走出自己的舒适区来体验新事物、实践自己新颖的想法,不断地打磨自己,让自己变得越来越好。

在教育界,很多成功人物的例子都有过挣扎。表面看起来一切都是那么的迷人和灿烂。 这种感受对于初级开发者尤甚,因为他们的同事:中级的、经验丰富的人是总能用自己了不起的逻辑思维、精彩的编码手段惊讶到他们。

但是当我们走进他们并弄清事实,才意识到每个人都有必须面对的困难或挑战,每个人都会被bug、错误所困扰。相比我们,他们面对的是高难度的、复杂的bug而已。

我分享一下让我学到很多的,也是最喜欢的两篇推文。这些推文总能让我开心并推动着我前行。让我感到也许我们在同一艘船上,有着同样视角,奔向同一个目标。

第一篇推文

大意是:没有人能做到足够好,因为 足够好是一个永远无法抵达的目标

当我艰难挣扎在学习JavaScript的路上时,生命我看到这篇推文,这对几个月前的我来说是一个震惊的观点。 10个月的时间学习、探索、实践之后,我终于得到了一个远程的、带薪的实习机会。

在学习过程中,我总是寻求一些欣赏或承认,让我认为自己会成为一名好的程序员。我想知道自己是否适合编程。以及自己能否像其他程序员一样写 出好的逻辑和代码。

在小的问题上折腾、不能很快地修复问题常常让我变的沮丧。 看到一些顶尖的编程界名人向自己的关注者坦承他们也非完美,我又找回了自信。

第二篇推文

来自 《你不知道的JavaScript》系列的作者Kyle Simpson 20多年经验,8本书(10万销量)作者、4k多场演讲的他一样对写代码感到困惑。

哈哈,感觉好点了吧。 我不知道你感觉如何,反正好几次都让我倍感轻松。

我最近开始了在某公司的远程实习,我意识到随着学习和体会,我的担忧和不安全感会慢慢改善。这篇文章记录了初期的几周内我面对的担忧和挑战

我希望帮助那些努力并适应工作的新手和初级开发者,让他们明白每个人都会有挣扎,这对于学习是必要的。

开始实习

在Mozilla开始工作的前天晚上我做好了准备,很开心也很紧张。一件意想不到的事发生了:我的工位持续了8个小时的断电。

我无法跟有经验的人交流也没法开展工作。

庆幸的是,下午5点终于来电了,公司举行了欢迎仪式,见了其他同事和来自Mozilla的技术人员。

很有趣也很新颖,就像会见来自世界各地的人们一样,交谈了几乎一个小时,见了我的技术领导Armen 和Dustin,感觉很好。

感觉跟他们通过邮箱、短信沟通留给我的印象不太一样。

我的导师在github上列了一些issues,它们有着不同的复杂性。第二天我就开始认领这些issuses并着手修复工作。

从这时候起,我发现正式的号角才刚刚开始,上一次挣扎仅仅是一个小前奏。

我的发现

一切都是为了理解代码

我在开始工作时的感受与当初申请实习时的感受大相径庭,工作中的担心是自己做的不够好或失去这份工作。

当我卡在第一个Issue:根据需要实现graphJS工具提示的自定义化,这也太难了。

最初我以为自己很很快就搞定它,事实证明确实花费了不少的时间和精力。 我想了2天也没找到合适的方案。 我问了导师好几个问题,并试着给出自己的见解,有一段时间,我觉得自己可能无法搞定因为过程太令人沮丧了。

当时,导师并没有给我施压,相反他们帮我树立信心,告诉我面对一个新项目的代码时困惑是很正常的事。 有时,理解事物和别人写的代码真的需要时间,我们不必过于苛求自己。我们需要做的在时间消耗中get到新的东西。

从那之后,我挣扎于代码中——上百个函数和文件。我的导师跟我介绍了橡皮鸭技术。然后让我把代码解释给“橡皮鸭”。 这种方式帮助我更好地理解代码以及内部运行机制。

“It is okay to get stuck, we all get stuck with issues and errors. With the years of experience we get stuck less, but we still get stuck.”—Armen Zambrano

知道从何处开始意味着胜利了一半

大多数时候,你知道答案,也许是逻辑,然后如何应用它。但是你不知道从哪里开始? 有很多的代码文件和函数,你困惑于吧这个方案放到哪里才能正常工作? 我的导师建议我根据注释来理解代码和函数,还有我自己的方法(console.log,永远有效)

在第一个issuses以后,事情变得顺利点了,但依然充满挑战。 我又被一个相对复杂的issuses绊倒了,花了几天才解决。 但是幸运的是,我的导师和开源人展示了足够的善意,让我们这些初学者面对困扰的心情至于太糟糕。 我们需要类似的乐于帮助或指导的人,他们给初学者提供了最好的资源,而不是让人精疲力尽。

代码合并很棘手

哈,如果你不熟悉开源或是个新手,那么关于代码合并我得提醒你几点。 如果你不好好对待这件事,结果可能是:你花费了几个小时查找并解决了问题,结果你在合并代码中丢失了这段代码。

我的代码有几次冲突,我直接 通过 git commits 清理掉了。 这很烦人也很恐怖。但是如果没有这些事情发生,我也不会学到关于git合并 、提交、解决冲突的新概念 感谢导师帮助我突破了代码冲突的陷阱。

"理解自己的代码"也是一种挣扎

这适用于几乎所有人,几天后我们被这些自己亲手写的代码所困惑是件有趣的事情。解决一个bug后,我试着解决了一个类似的bug , 一个接一个。 我就像是... 我怎么会写这样的代码 ? 这他妈的竟然也能正常运行?

能工作的代码跟不能工作的代码一样令人费解。根据经验,能工作的代码会给我们制造更多的麻烦。在翻看老代码是,你重新思考并发现了一个更好的解决方案。 所以你就不必去担心或者郁闷 这些代码是之前自己或别人写的了,因为你可能已经学到了新东西。

导师或Mozilla牛人的意见

不要太在意一些事情,专注于学习

当一个中级开发者或导师对我们的工作做出改正或提出意见,很难不去在意这个事或感到沮丧, 这种情绪在开源项目或公共平台上可能会更加难以平衡。

但是我建议专注于特定的层面,拥抱一个学习的态度。 只有怀着虚心学习的态度,你才能学到新的概念和好的编码实践。 抛开自我,专注于经验的学习或其他人的知识的学习。

尽可能大量地吸收信息,面对新事物要多问 对于信息保持一种开放、吸收的姿态,对待学习如饥似渴。 不要害怕尝试舒适区之外的新的或陌生的东西。 有时候我们习惯了自己的代码书写方式,而不去关注那些好的实践或设计模式。 尽可能试着去学习。这也是第一条推文所倡导的建议。

问问题之前,先做好功课

问问题是个好的注意,尤其是当你被困住时。 先做好功课和一些努力的尝试绝对是个好的做法,有助于提出有效的问题或可能的答案。

然后你就能得到一个来自导师或中级工程师的回馈。 有助于找到自己的做事模式,你的导师也会觉得你有自己的思考。 开源项目的人或有经验的人一把都乐意、愿意帮助你,前提是你提出了一个有效的问题。

不要拿自己跟别人比

不要一直跟别人比,这会影响自己的表现,也会失去自信。 记住,任何一个管理者都是从新手开始的。 他们了解这种痛苦和挑战。罗马不是一天建成的--这是每个人都必须跨越的过程。 在那个属于自己时代到来之前,保持努力的姿势。

记住,每个新手都处于你的位置,你不是例外。 学校所学跟真实生活中的有着很大的差异,我们必须不断学习才能胜任一个领域的开发任务。 每个新手都曾处在你的位置,对你的痛苦感同身受。你只需要专注拥有一个学习的态度保持不断学习不断成长。


本文完,尽量贴近原文,本着文章流畅的必要性,有所删减,结构也做了些调整,更适合读者阅读。

猜你喜欢

转载自juejin.im/post/5c36f9f6e51d45520f193510