我想每个开发者在学习成长的过程中,在面临技术难题的时候,都有经历过自我怀疑的过程,但是有时候这并不是你的错,大家都经历过如此的过程。我们作为一个开发者,在成长的过程中,总有一些小的胜利和小的沮丧,学着为自己喝彩吧。

以下任何一个,是不是听起来都很熟悉?

你经常担心自己不够好

看看你周围的开发者们,他们似乎拥有一切。他们的代码比你的更简洁,他们 Debug 的速度比你更快,他们只需要在编码之前阅读文档就可以很顺利的继续编码。他们看起来很有信心,也对编码富有热情。

但是,你很担心。你担心你对框架和所使用的语言不够了解,你担心会引入新的错误;你担心赶不上最热门的技术;你担心你没有足够的才能,来自然而言的得到这一切。你在想:“也许我不想成为一个开发者!”

如果任何这些自我怀疑的想法,你听起来都很熟悉。那么实际上,你并不孤单。Google 搜索 “self-doubt developers”(自我怀疑的开发者),你会在不到一秒钟内得到超过 200w 的结果。

我就是你
有一段时间,我也经历了强烈的自我怀疑。这是在大学时期,我正在复习和准备面试的时候发生的。这些算法问题每天都让我感觉到彻底的被打败了。我和现在的你一样担心自己不够好。

最终,我通过实践得到了回报,我收到了来自知名科技公司的多份 offer 。一路走来,我学到了两个重要的课程,改变了对我编程的看法,消除了我自我怀疑的想法。

我现在和你分享,希望它们也能帮助到你。

第一课:学习编程和锻炼肌肉一样

为了学习如何踢球,你需要去球场上踢球;为了锻炼出更强壮的肌肉,你需要去健身房举重;想要学习编程,你需要坐下来编写代码。

举重后,第二天你会感到酸痛和疲惫。而当遇到编程难题的时候,这会是非常烧脑的,你将会感到沮丧。

你不会因为疼痛而放弃锻炼,你知道这是锻炼过程的一部分。但是当你在编程的时候卡住的时候,你可能会怀疑自己,想知道自己是否足够聪明。

因为:

你认为卡住是你的错。

而其他人使它看起来毫不费力。

1、卡住是过程的一部分

也许没有人告诉过你,但在编程期间卡住是绝对正常的,它甚至发生在高级开发者身上。编程的很大一部分是要弄清楚为什么你预期发生的事情没有发生。如果你觉得,孩子第一次站起来的时候能够走路是荒谬的,为什么你会希望你的代码的第一稿能够完美运行而没有任何错误?

我记得当我被卡住了很长时间的时候,我想把我的头撞在墙上。我知道这很难过和令人沮丧(特别是在处理与开发环境有关的问题时)。但是就是挂在了这里。深入研究这个问题、借助 Google、问一些朋友、散步。你最终会解决它,并继续前进。而且随着你获得更多的经验,你会慢慢地陷入困境。

假如下一次你又被卡住了,别再浪费时间自我怀疑了。你应该提醒自己,这不是你的错。这是正常的。这只是过程的一部分。

如果你是初学者,花费数天时间来建立开发环境是非常普遍的,这些时刻可能会粉碎你的灵魂。你尝试按照文档一步一步向下执行,但随机的错误不断出现在每一个步骤中。文档看起来很简单,但事实并非如此。这不是你的错。阅读该教程的人中有 99.99% 卡住了。其余的 0.01% 是幸运的,恰好与编写文档的人具有完全相同的操作系统环境配置。

不幸的是,学习编程的第一步也是最令人沮丧和心灵破碎的部分。当你看到你无法理解的错误时,只需将确切的错误日志复制并 Google 搜索即可。(把错误日志加上引号或只搜索错误日志的前半部分可能会有帮助。)尝试不同的解决方案,直到找到可用的解决方案,然后继续下一步。
请原谅我再次强调:在这个阶段卡住不是你的错。大家都这样做。我保证,一旦你经历了这个阶段,编程将会变得更加有趣。

2、我们把"天生聪明"和"显得聪明"混为一谈

在大学的最后一个学期,我的朋友们对我在《高级数据结构和算法》课上的表现感到惊讶。当他们很辛苦的学习时,我看起来毫不费力。

他们不知道的是,在课前几个月,为了准备面试,我花了数小时练习编码挑战,涵盖了与课程完全相同的课题:动态编程,深度优先算法,广度优先算法等。它似乎毫不费力,只是因为我已经经历过这些努力的过程。

当我第一次自学这些概念的时候,我会花上好几个小时的时间来盯着一个问题,而且无法弄清楚它。当我放弃并在网上查找解决方案时,我努力去理解它们。当我终于做到的时候,我感到更加沮丧,因为我怀疑自己是否足够聪明,为什么自己想不出这样的解决方案。

有时甚至当我再次遇到同样的问题时,我可能仍然不知道如何解决它。我会这么强调,我不得不采取长时间的热水淋浴来让自己冷静下来。

所以,当我说我知道自己怀疑自己,担心自己做不到的时候,相信我。我以前也是这样。我可以向你保证,你并不孤单,许多伟大的开发者也经历过同样的事情。

下一次当你身边的人表现出众的时候,而你正在辛苦挣扎,不要以为是你没有足够的才能。很可能,他们只是比你更早地接触到这个主题或类似的主题。他们的大脑已经建立了“肌肉”来处理这种类型的问题。在经历了目前的挣扎之后,你也会显得聪明而轻松。

这和我们的常识一样。

你通过锻炼来锻炼肌肉。你投入的努力越多,训练的时间越长,你的能力就越强。学习编程有完全相同的过程。你花费的时间越多,你就会越熟练。种瓜得瓜,种豆得豆。

第二课:关注你的技术能力,而不是自己

不要想着你是一个多么优秀或者多么差劲的程序员。如果你处于队伍的最后 5%,你想变得更好。如果你有幸进入前 5%,你仍然想变得更好。无论你有多好或多坏,总有人在你面前,同时在你背后也有人。那么为什么浪费时间思考这个问题呢?

相反,专注于你的技术能力。别再问你有多好、问你的代码有多好。你应该思考,如何使它更好,更快,更可读?长期关注那些让你钦佩的工程师,阅读他们的代码,看看和你的有什么不同?他们最近又正在研究什么新玩意儿?

如果您已经是一名软件工程师,则有人会付钱给您编写代码。你应该停下来反思一下,因为这意味着很多:有人要么相信你的编码技巧,要么看到你的潜力。要做到这一点,唯一的办法就是把注意力集中在你的技术能力上,不断地改进。

记录你的小胜利!
你最后一次被卡住了,不确定自己是否能解决问题。而最终,你是如何解决的?

打开一个新的 Google 文档并将它记录下来。

下一次你怀疑自己的时候,看看这个文档,并提醒你自己:如果你能解决上次的问题,你也将解决这个问题。

使用该文档来记录你克服的挑战性问题的过程以及你从中学到的东西,总是庆祝这些小胜利,用这些小胜利来激励自己!
如果你看完这篇文字,留下评论,分享上次被卡住的时刻,提醒那些正在挣扎的人,他们并不孤单!

最后

一天一天的过的真的是太快了,常常感到时间在前进,而我们还在停滞不前,看似每天努力的工作学习着,仔细想想其实又会发现,一天下来我们好像还真的什么都没干,看似忙碌的一天,我们把时间都用在哪了?学习!可是为什么我觉得什么也没学到呢?其实不是没有学到东西,只是我们的学习效率太低而已!

互联网寒冬之泪:Android开发程序员,你够优秀吗?的更多相关文章

  1. 对ios、android开发程序员的14条忠告

    ————————本文摘自千锋教育(http://www.mobiletrain.org/)对ios\android开发程序员的14条忠告————————— 1.不要害怕在工作中学习. 只要有电脑,就可 ...

  2. Android 开发程序员必备网站

    开发必备网站: Android 开发各种工具下载 Android 开发国内大牛集合 Android 开发技术博客周刊 Android 开发技术周报中文版 Android 优秀开源项目集合以及源码分析 ...

  3. 浅谈Android移动开发程序员的职业发展之路

    现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...

  4. Java技术开发程序员如果在2019年立足

    2019年的互联网环境相对以往来说要更复杂一些,互联网领域也正在经历从消费互联网向产业互联网转型的阵痛期.其实不少公司从2018年开始已经在陆续进行结构化调整,这些调整中的重要内容就是岗位调整,而岗位 ...

  5. 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计

    <android从程序员到架构师之路>YY讲坛活动:  sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00   报名联系QQ:22243 ...

  6. PHP开发程序员的学习路线

    PHP开发程序员的学习路线 兄弟连PHP培训,简单为大家梳理了每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟 ...

  7. 最全的WEB前端开发程序员学习清单

    史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...

  8. Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码

    Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...

  9. Android开发:程序目录结构详解

    HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...

随机推荐

  1. 《深入理解Java虚拟机》-Java代码是如何运行的

    问题一:Java与C++区别 1.Java需要运行时环境,包括Java虚拟机以及Java核心类库等. 2.C++无需额外的运行时,通常编译后的代码可以让机器直接读取,即机器码 问题一:Java为什么要 ...

  2. 全世界仅有的唯一最高LINUX版本的白菜路由,支持NAND记

    在上上篇 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记 里,有没有还记否之模式退一步,海阔天空 回到了远古时代的ar7 ...

  3. ABAP:如何等待小数秒数

    WAIT UP TO x SECONDS. 和CALL FUNCTION 'ENQUE_SLEEP'都只能支持整数的秒数(如果是非整数,则四舍五入),如果要WAIT非整数的描述,可以如下写法:

  4. Simple Windows Service in C++

    本文是来自CodeProject中的一篇名为Simple Windows Service in C++的译文,原文地址为:https://www.codeproject.com/Articles/49 ...

  5. 第一次appium自动化

    今天,自己独自做了一下app自动化,从搭环境到写好一个脚本花了很长时间.用的主要环境是python3.7+appium+sdk+夜神模拟器.appium环境搭建较于复杂,这里就不累述,参考百度教程. ...

  6. js中更改this指向 以及回顾bind、call和apply

    1.更改this指向 方法1:对this进行保存            var _this = this; 例: var _this = this;     document.onclick = fu ...

  7. GIT和SVN教程

    各种版本控制工具的简单比较 特性 CVS SVN GIT 并发修改 支持 支持 支持 并发提交 不支持 支持 支持 历史轨迹 不支持更名 支持更名 支持更名 分布式 不支持 不支持 支持 SVN SV ...

  8. Java性能测试从入门到放弃-详解篇

    Jmeter组件分类说明 Jmeter的组件可以放在任意位置 线程池:用于创建线程.每个线程会"批次顺序"执行任务,因此后面的任务可根据前面的任务决定具体的操作.          ...

  9. springboot-vue前后端分离session过期重新登录

    springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...

  10. 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试

    大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...