今天不聊别的,给大家聊一下我认为学编程当中最重要的三点,尤其是针对新人来说。
热爱努力解决问题的能力
先说热爱
有的同学是一开始就热爱,所以选专业的时候就选择了计算机专业;有的同学是误打误撞,比如说我就是,大学其实选的是机械自动化,后来被调剂到了计算机网络专业,属于典型的后知后觉型。
一开始,和大多数新人一样,我认为编程好难学,班里面的好多同学也认为好难学,能转专业的就转,只有不能转的才留了下来。
十几年前的计算机专业远没有现在这么热闹,很多学校都是作为边缘专业来录的。和我同届的高中同学,我认识的当中,没有主动选择计算机专业的。
所以,我对计算机的热爱,纯粹是经过后天刻意练习的。
很多同学可能会不解,热爱也能练习?
当然。
当我发现这个专业找到工作,能养活自己,能不再伸手向父母要钱的时候,热爱就一点点的来了。随着年纪的增长,我越来越喜欢这个专业了,不是因为它充满魅力,而是它让我的生活变得越来越好。
对,我是个俗人。
一开始,这很难,因为经过两次高考的打击,我的厌学情绪特别强烈,以至于我大学的时候好几门专业课都挂科了,同学们可能很难想象:二哥,好多人心目中的榜样,大学还会挂科。
真实情况就是这样,所以很多新人给我抱怨说,“二哥,编程好难啊,总是学着忘着,我该怎么办?”我知道原因在哪?你对编程还不够热爱!
当我拿到第一笔实习工资的时候,元,我记得清清楚楚,当时心里乐开了花,知道吗?人生第一次一次性地挣到这么多钱!拿到工资就赶紧给父母打了一通电话,对,现在回想起当时的场景还是有点热泪盈眶的。
虽然电话里没有喊出那句:“爸妈,你们的儿子终于挣钱了,终于不用再伸手找你们要钱了!”但其实,心里面早已经喊了几千遍!
同学们可能很难想象,元的实习工资,能有那么激动!能,对于当时的我来说。
有了热爱,你自然就会去努力!这是水到渠成的一件事情。
但往往很多时候,我们会迷茫,不知道该往哪里去努力,不知道自己的劲往哪里使!
我也有过。当我拿着元的实习工资高兴的屁颠屁颠的时候,身边的一些同事,尤其是一些苏州的本地人,来实习根本就不是为了挣钱,而是给自己一些历练的机会而已。
印象很深刻。我问过一个同事,“你拿到工资后干嘛呀?”
“加油啊!这点钱还能做什么!”这个回答对我的冲击感特别强烈,有那么一刻,我觉得努力毫无意义。
但后来我想明白了。
原来,人与人之间的差距是与生俱来的!你只有努力地追赶,才有可能把这些差距缩小;而一旦你停止努力,差距就会被越拉越大!
想明白了之后,我就去一个叫编程入门网的网站上抄Demo,每天一有时间我就去抄。对于那时候的我来说,看书提升得太慢,只有通过实战,我才能快速地提升。
后来,从前辈们那里又了解到,公司接下来会非常依赖一个前端框架,我就硬着头皮去研究源码,并利用空闲时间做了一个局域网性质的聊天工具。
learnbydoing,就是我的经验心得,它让我急速地成长,很快就在技术上领先了同一批进公司的新人。
让你的代码量从行到0行,再到00行,再到10万行,你就不会再有那种“学的时候能学会,做的时候不会做”的感觉了。
当然了,在敲代码的过程中,你要学会思考,为什么人家要这样实现,为什么不能换一种方法?举个很简单的例子,人家用的ArrayList,你能不能用LinkedList?人家用的插入排序,你能不能用冒泡排序?
在那段野蛮成长的过程中,我确实很少看书。但最近两年,我读了很多很多经典的书,比如说《代码整洁之道》、《人月神话》、《编程珠玑》、《重构》等等等等。
读书可以让你知道为什么要这样做,背后的原理是什么。
再加上大量的输出,就让我对编程的思考更加深刻了。
大家想一想,程序员最核心的竞争力是什么?
解决问题的能力,是我认为最核心的竞争力。
当一个问题摆在你面前,你不能束手无策呀!你热爱,你努力,最终是要解决问题的,你做不到的话,就只能被扣上“纸上谈兵”的帽子了。
解决问题的过程可以分为三步:
透彻理解问题是什么?导致问题出现的根本原因是什么?找到最佳的解决方案。
一开始,由于缺乏编程经验,我们很可能连问题到底是什么都搞不清楚。而解决一个bug的首要条件是要能够重现问题,然而编程和其他很多事情都不大一样,有些bug是很难重现的。
所以对于新人来说,一开始遇到问题的时候,只能面向搜索引擎,去看看别人有没有遇到类似的问题,有没有解决方案,然后套用一下,看能不能把问题给解决了。
问题解决不了的时候,想问领导,想问大佬,能不能手把手教一教啊!
有一说一,我一开始也是这样的。但渐渐地,我就会去思考,为什么会出现这个问题,这个问题的底层逻辑是什么,除了这种解决方案,还有没有其他更好的呢?要不自己再花点时间去研究一下?
当你有了敢一个人去解决问题的胆量后,其实已经证明你进步了,因为只有支撑你的基础扎实了,你才会有这样的胆量。
最后,总结一下我认为非常重要的东西吧
热爱、努力,解决问题的能力,除此之外,你还应该重视基本功:
编程能力:大量地练习、会debug,追求高质量的代码;基础知识:操作系统、计算机网络、数据结构与算法;抽象思维:现实是物理的,而程序是虚拟的,这个转化的过程,需要极强的抽象思维能力。
好了,今天就聊到这吧。
声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。