我想每个开发者在学习成长的过程中,在面临技术难题的时候,都有经历过自我怀疑的过程,但是有时候这并不是你的错,大家都经历过如此的过程。我们作为一个开发者,在成长的过程中,总有一些小的胜利和小的沮丧,学着为自己喝彩吧。
以下任何一个,是不是听起来都很熟悉?
你经常担心自己不够好。
看看你周围的开发者们,他们似乎拥有一切。他们的代码比你的更简洁,他们 Debug 的速度比你更快,他们只需要在编码之前阅读文档就可以很顺利的继续编码。他们看起来很有信心,也对编码富有热情。
但是,你很担心。你担心你对框架和所使用的语言不够了解,你担心会引入新的错误;你担心赶不上最热门的技术;你担心你没有足够的才能,来自然而言的得到这一切。你在想:“也许我不想成为一个开发者!”
如果任何这些自我怀疑的想法,你听起来都很熟悉。那么实际上,你并不孤单。Google 搜索 “self-doubt developers”(自我怀疑的开发者),你会在不到一秒钟内得到超过 200w 的结果。
我就是你
有一段时间,我也经历了强烈的自我怀疑。这是在大学时期,我正在复习和准备面试的时候发生的。这些算法问题每天都让我感觉到彻底的被打败了。我和现在的你一样担心自己不够好。
最终,我通过实践得到了回报,我收到了来自知名科技公司的多份 offer 。一路走来,我学到了两个重要的课程,改变了对我编程的看法,消除了我自我怀疑的想法。
我现在和你分享,希望它们也能帮助到你。
第一课:学习编程和锻炼肌肉一样
为了学习如何踢球,你需要去球场上踢球;为了锻炼出更强壮的肌肉,你需要去健身房举重;想要学习编程,你需要坐下来编写代码。
举重后,第二天你会感到酸痛和疲惫。而当遇到编程难题的时候,这会是非常烧脑的,你将会感到沮丧。
你不会因为疼痛而放弃锻炼,你知道这是锻炼过程的一部分。但是当你在编程的时候卡住的时候,你可能会怀疑自己,想知道自己是否足够聪明。
因为:
你认为卡住是你的错。
而其他人使它看起来毫不费力。
1、卡住是过程的一部分
也许没有人告诉过你,但在编程期间卡住是绝对正常的,它甚至发生在高级开发者身上。编程的很大一部分是要弄清楚为什么你预期发生的事情没有发生。如果你觉得,孩子第一次站起来的时候能够走路是荒谬的,为什么你会希望你的代码的第一稿能够完美运行而没有任何错误?
我记得当我被卡住了很长时间的时候,我想把我的头撞在墙上。我知道这很难过和令人沮丧(特别是在处理与开发环境有关的问题时)。但是就是挂在了这里。深入研究这个问题、借助 Google、问一些朋友、散步。你最终会解决它,并继续前进。而且随着你获得更多的经验,你会慢慢地陷入困境。
假如下一次你又被卡住了,别再浪费时间自我怀疑了。你应该提醒自己,这不是你的错。这是正常的。这只是过程的一部分。
如果你是初学者,花费数天时间来建立开发环境是非常普遍的,这些时刻可能会粉碎你的灵魂。你尝试按照文档一步一步向下执行,但随机的错误不断出现在每一个步骤中。文档看起来很简单,但事实并非如此。这不是你的错。阅读该教程的人中有 99.99% 卡住了。其余的 0.01% 是幸运的,恰好与编写文档的人具有完全相同的操作系统环境配置。
不幸的是,学习编程的第一步也是最令人沮丧和心灵破碎的部分。当你看到你无法理解的错误时,只需将确切的错误日志复制并 Google 搜索即可。(把错误日志加上引号或只搜索错误日志的前半部分可能会有帮助。)尝试不同的解决方案,直到找到可用的解决方案,然后继续下一步。
请原谅我再次强调:在这个阶段卡住不是你的错。大家都这样做。我保证,一旦你经历了这个阶段,编程将会变得更加有趣。
2、我们把"天生聪明"和"显得聪明"混为一谈
在大学的最后一个学期,我的朋友们对我在《高级数据结构和算法》课上的表现感到惊讶。当他们很辛苦的学习时,我看起来毫不费力。
他们不知道的是,在课前几个月,为了准备面试,我花了数小时练习编码挑战,涵盖了与课程完全相同的课题:动态编程,深度优先算法,广度优先算法等。它似乎毫不费力,只是因为我已经经历过这些努力的过程。
当我第一次自学这些概念的时候,我会花上好几个小时的时间来盯着一个问题,而且无法弄清楚它。当我放弃并在网上查找解决方案时,我努力去理解它们。当我终于做到的时候,我感到更加沮丧,因为我怀疑自己是否足够聪明,为什么自己想不出这样的解决方案。
有时甚至当我再次遇到同样的问题时,我可能仍然不知道如何解决它。我会这么强调,我不得不采取长时间的热水淋浴来让自己冷静下来。
所以,当我说我知道自己怀疑自己,担心自己做不到的时候,相信我。我以前也是这样。我可以向你保证,你并不孤单,许多伟大的开发者也经历过同样的事情。
下一次当你身边的人表现出众的时候,而你正在辛苦挣扎,不要以为是你没有足够的才能。很可能,他们只是比你更早地接触到这个主题或类似的主题。他们的大脑已经建立了“肌肉”来处理这种类型的问题。在经历了目前的挣扎之后,你也会显得聪明而轻松。
这和我们的常识一样。
你通过锻炼来锻炼肌肉。你投入的努力越多,训练的时间越长,你的能力就越强。学习编程有完全相同的过程。你花费的时间越多,你就会越熟练。种瓜得瓜,种豆得豆。
第二课:关注你的技术能力,而不是自己
不要想着你是一个多么优秀或者多么差劲的程序员。如果你处于队伍的最后 5%,你想变得更好。如果你有幸进入前 5%,你仍然想变得更好。无论你有多好或多坏,总有人在你面前,同时在你背后也有人。那么为什么浪费时间思考这个问题呢?
相反,专注于你的技术能力。别再问你有多好、问你的代码有多好。你应该思考,如何使它更好,更快,更可读?长期关注那些让你钦佩的工程师,阅读他们的代码,看看和你的有什么不同?他们最近又正在研究什么新玩意儿?
如果您已经是一名软件工程师,则有人会付钱给您编写代码。你应该停下来反思一下,因为这意味着很多:有人要么相信你的编码技巧,要么看到你的潜力。要做到这一点,唯一的办法就是把注意力集中在你的技术能力上,不断地改进。
记录你的小胜利!
你最后一次被卡住了,不确定自己是否能解决问题。而最终,你是如何解决的?
打开一个新的 Google 文档并将它记录下来。
下一次你怀疑自己的时候,看看这个文档,并提醒你自己:如果你能解决上次的问题,你也将解决这个问题。
使用该文档来记录你克服的挑战性问题的过程以及你从中学到的东西,总是庆祝这些小胜利,用这些小胜利来激励自己!
如果你看完这篇文字,留下评论,分享上次被卡住的时刻,提醒那些正在挣扎的人,他们并不孤单!
最后
一天一天的过的真的是太快了,常常感到时间在前进,而我们还在停滞不前,看似每天努力的工作学习着,仔细想想其实又会发现,一天下来我们好像还真的什么都没干,看似忙碌的一天,我们把时间都用在哪了?学习!可是为什么我觉得什么也没学到呢?其实不是没有学到东西,只是我们的学习效率太低而已!
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
需要展开的架构学习笔记导图的加群免费获取 Android架构设计大群(185873940)
PS:群内有许多技术大牛,高手如云,有任何问题,欢迎广大网友一起来交流,群内还不定期免费分享高阶Android学习视频资料和面试资料包~
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
网友评论