一些总结
以下是我个人对于怎样学习的一些总结,这结合了我的一些经历,尤其是各种坑。希望可以对各位有所启发吧。可能这更适合新手。
下面不是按照重要性来的,,别误会了。。。。
摒弃完美主义
编程中的“完美主义”是非常致命的。举个简单的例子,我们要学习某个技术,并把它应用到实际开发中。如果是以前的我,那么我可能会把与该技术有关的书都借来,然后研读每个细节,直到所有的点都弄明白,然后再动手尝试着去开发。其实这就是一种所谓的“完美主义”,绝大多数起因于我们之前的应试教育的阴影。正确的做法应该是尝试着去做,边学边做,这样才可以更加高效的学习,而且可以满足项目的进度。之前的方式,不仅影响进度,而且会让我们迷失在细节的汪洋大海中,失去兴趣。学中做、做中学。
想清楚了立马就去做,不要瞻前顾后
之前,我在学习某个技术的时候,一直在想这个东西有没有用,学了可以干什么。总是在纠结这种问题,很难全身心的投入到学习中;而且,纠结的时间,就几乎可以入门某个技术了。更要命的是,我们的知识体系不够,或者说是我们不了解整个知识框架,才有这种幼稚的想法。其实多学习一些技术,在很多时候可以拓宽我们的知识面,虽然很多东西会忘记,但是一些基本思路和基本方法都会有较深地印象,一些资深架构师、技术专家和项目负责人等,都有很广阔的知识体系。
学习编程的核心是学习思路和特性,而不是所谓的词法、语法
首先,我要说明,词法语法很重要,这是程序能运行的基础,但是在刚开始学习的时候,不要过分的纠结于这些细节,要把主要的精力放在语言本身特性上,如果是新手,还要注意学习算法和数据结构。
举个简单的例子,C++本身的特性相当复杂(看看标准手册就知道了),号称最难的语言。如果我们有了C语言的基础了,再学习C++的话,最好不要直接看那么复杂的手册。其实应该C++的基本特性入手(我不是C++高手,不当的地方还请包含):C++相比于C语言,最核心的是扩展了面向对象部分和泛型编程(包括STL)部分(先不考虑C++11以及以后的版本),因此我们在学习的时候,先把这两个基本点弄清楚。或者说,这两个点的基本用法先弄明白,搞清楚怎么回事后,在一步步地深入拓展下去;而不是每天都看标准手册,我估计那样正常人都会GG。。拓展的时候也是,每个点都要边学边练的策略,由浅入深。我之前踩的坑是刚开始就像搞明白所有的东西,结果最后搞得身心疲惫,以至于很难学精,而且丢了兴趣。
同样的例子,如果由C++转Java,我们需要了解Java语言的基本特性是什么。先不考虑JVM的情况下,主要的区别有两大点:面向对象的部分和自动垃圾回收的部分(包括指针引用之类的)。掌握了基本特性,在一步步地去解决,不仅效率高,而且不会丢失兴趣。
学习编程不要钻牛角尖,编程最终目的是为了解决问题(需求)
我遇到过很多同学,包括之前的我在内,总是容易钻牛角尖。比如说,将来是要做后台的,那么前端的东西一点都不碰;或者说,我认为Linux才是一个合格开发者必备的工具,用Windows显得很菜(可能一般是是服务端同学这么想);又或者说,大佬们都用vim or Emacs,用IDE显得没有那么Geek等等。这样类似的问题有很多,我个人把它们归结为钻牛角尖。其实,现在来看,这种想法是很幼稚的,连基本的东西都搞不明白,就一味地追求所谓地“高手地配置”,没什么卵用;而且,只要能高效地解决问题,就不要管那些是否是“Geek”的东西,编程的本质是为了解决问题(需求)
要合理分配学习的重心,搞明白问题的轻重缓急,以需求为导向
现在,各种新技术层出不穷,令人眼花缭乱,别说是新手了,就是有一定编程经验同学,也会纠结各种各样问题。但是,以我现在的观点来看,造成这种现象的一个很重要的原因是,我们没能搞明白自己的真正需求。技术总是学不完的,如果再像 应试教育那样,非要搞明白每个知识点,那么肯定完不成任务,正确的做法是先弄明白自己到底要干什么,然后再去搜集有关的资料等,最后确定解决问题的大体步骤,然后根据步骤来有计划地、分部分地学习。很多时候,编程学习需要不求甚解,这是和应试教育最大区别,也是我们最需要克服的障碍之一。
多向他人请教,多与别人交流,保持一个谦卑的心态
“程序员是最骄傲的一个群体”,这话不是没有道理的。甚至可以说相当一部分的程序员,都想要证明自己的牛×高明之处,总是有想要证明自己比别人聪明、比别人强,总要成为整个项目的最最最核心的人物,总是有强烈的个人英雄主义情结。我承认,曾经的我也是这样的,后来接触的人和事情多了以后,我也一直在反思自己的不足之处,我也一直在努力地克服自己的缺点。
《商业的本质》一书有一句很经典的话:“商业的本质是一个团体活动”。我个人十分赞同这句话,我们在IT界,先排除那些纯粹公益性质的开源项目,我们中的绝大多数人编程是为了做商业性质项目来获取收入的。那么,我们从事的活动本质上也是一个商业活动,那么也就是团体活动了。而上述的行为,是非常“反团体”的,这种行为肯定会对真个项目组造成极为恶劣的影响。
人都有有自己的个性,但是不能把这个作为一些坏毛病的借口,所谓“人不可以有傲气,但不可无傲骨”。我们要学会欣赏并学习周围同学(同事)有点和长处,多和他们交流,取长补短,真正地去发挥团队的力量。要记住一句话:别人总是有地方比自己聪明的。
别和自己较劲
这一点和别钻牛角尖类似,在这里单独拿出来,是为了再次强调。很多人遇到问题总是想自己去解决,总是认为参考别人的思路或者代码就显得自己很low,非要和自己较劲。其实才是这是一种非常low的想法,编程本身是一个思想活动,而思想最重要的还是交流,思想交流的价值不言而喻。因此,如果有自己确实解决不了的问题,应该及时向搜索引擎或者懂的人请教,这没什么,重要的是解决问题和学习新的思路与方法。
多读多写代码
编程和写作有很多类似的地方,都是一个将思维反映在“纸面”上的活动,不过写作是一个比较“模糊”的映射,而编程需要一个精确的“映射”。成为一个优秀的作家,巨大的阅读量是一个先决条件;同时,只看不写也永远成不了作家。编程也是同理,要多看别人写的“文章”,同时也要自己不断练习,只有这样,才有机会成为dalao。
善于总结、多思考和反思
“吾日三省吾身”,总结自己的得失,思考和反思自己的优劣,并合理地调整自身,才可以取得长足地进步。作为IT人,博客可能是一个最好的方式了,技术人要有自己的博客,至少是作为自己的笔记。
有自己的判断力
这和我自己踩的坑有关,我在这里不想指责谁,也不想埋怨有些事情,只能说当初选择“Leader”和“Team”的时候,确实是经验不足,不过这正好是一个很宝贵的经历,至少让我有了比其他同学更多的阅历!“悟已往之不谏,知来者之可追”,这些都过去了,重要的现在和未来。在这里,我只想说一句:选对方向、做对事、跟对人。
英文能力
这一点不用多说,对于准备从事IT行业的大学生来说,更进一步说,对于想要成为未来某一个领域的精英来说,熟练的英文都是必不可少的,不要仅仅把自己局限于所谓的四六级上。我更要对一些普通院校的同学强调一下这一点,因为普通院校学生高考时的英文平均水平就相对来说低一点,然后大学的学习氛围可能远不及那些重点院校的,因此好多同学到大四甚至还没过四级,如果是IT类专业的同学,我也只能表示很无语了。
大部分最新的资料或者文档等,都是英文的;所有的顶级期刊的论文,也都是英文的;还有其他很多等,都是英文的。别跟我说有翻译软件,首先,翻译软件的能力还远不能精确无误地处理处理所有的语句,这在很多场景下是致命的;其次,这只不过是你不愿意去学习英文的一个借口罢了。我见过一些同学,总是爱拿自己英文底子不好作为借口,不去学习,真是可笑至极。你就是每天学习一点,四年的大学积累也足够你熟练阅读科技类文献了,我们都不是英文母语,谁也不是天生就会的,都是靠后天自己学习的,遇到困难总是爱找这样或者那样的借口,这种人很难成功,做一个熟练的底层码农就可以了,还天天幻想自己能成为顶级架构师和资深技术专家,简直是痴人说梦,呵呵。。哀其不幸。。
不要受周围环境的影响,尽量寻找一个好的环境
“物以类聚,人以群分”,我很赞成这句话。尤其是到了大学里面,我们会遇到各种各样的人,会加入到不同的圈子里面。我想给各位的意见是,不要被周围那些不好的环境给同化掉了 ,要时刻提醒自己,时刻记着自己的目标。那我自己经历过的一些事情来说,在我还在飞行器专业的时候,每当背着书包去看书时,有时遇到一些很“奇怪”的声音,比如:“哟,×××又去学习去啊”,再加上那种东北特有的声调,你可以想象一下那场景,不过好在没有被那些天天混吃等死之类给同化;即使是来到计算机,也很惊讶地发现,好多科班学生的代码量总和都没有我一个学期写的多,好多人连基本的代码都写不了几行。。(上述的一些情况,可能很大程度上与学校有关,这些经历可能更贴近那些普通院校的同学)。
对于这种情况,我们没必要跟那些人进行理论,最有力的反击是用收入来吊打他们,反正钱赚了是自己的。。。而且,很多时候,不要自己一个人前行,还需要一些志同道合的伙伴一起,大家可以互相激励,取长补短。
最后一点是最好不要和那些满身都是负能量的人经常接触,否则我们也可能变得那样。记住,前途是光明的,但是发展的道路可能是曲折的。我们要做的是坚信光明的前途,正视道路的曲折并想办法克服!!!
IT人不仅要有智商,还要有情商
重要的事情说三遍:情商很重要、情商很重要、情商很重要。没有人愿意天天和一个冰冷的“编码机器”打交道,即使这个“机器”很牛×。不要感觉自己能力比别人强一点,就目中无人,处处体现自己的优越感。这在IT人身上非常常见。我承认,我曾经也犯过类似的错误,不过我现在更加清醒地认识到情商地重要性了。
前面提到过团队的重要性,一个好的团队是成功的基石。团队是否优秀,不仅仅取决于团队成员的平均水平;团队成员的协同能力也非常重要。而协同力需要成员之间的互相配合,这和智商无关,取决于情商。
如果你和那些成功人士接触过,你会发现和他们交流是一种享受。这很大程度上,是因为他们不仅仅知识渊博、阅历丰富,更是因为他们还有非常高的情商!情商的培养,不是一蹴而就的,需要在平时中逐渐养成,如果你也想成为一个成功人士,那么现在开始就要注重情商。
保持耐心,懂得分解难题和循序渐进
我犯过一个非常致命的错误:总想一次性解决一个问题,没有考虑对难题进行分解,也不去想着分阶段解决问题,问题过长的时候总是缺乏耐心而放弃。我感觉,可能好多同学都有过类似的错误或者经历。我总结了一下我会犯这种错误的原因:
缺乏科学合理的指导与训练。这是最主要的一个原因,我们以后需要解决的都是工程应用问题,而之前接受的都是一个个离散的点的知识,如果没有科学的训练和指导,很难把问题分解成为我们学过的知识。因此,我建议如果有机会,大家就要想办法加入一个项目组,感受下实战的氛围。
内心的自负。我总想一次性解决问题,这样才能显得比较“牛×”。现在想想,真是可笑。那些大型的项目,都是一点点分解成小的可解决的项目,然后分步解决,最终组合起来的。很少有一次性能解决的问题,因此要拜托不正常的心态,积极应对。
应试教育的后遗症。这也是比较有争议的一点,我感觉我在这方面受到了部分的影响,你可以有自己的看法。
广泛的阅读
这里的阅读,不仅仅是技术类的。当然,如果作为技术人,技术类的书籍肯定是最多的。但是,在技术类之外的,还要广泛阅读其他类型的:政治、历史、经济、人文、军事、心理和职场类等,都要有所涉猎。个人认为,对IT人来说,未来的竞争是以技术作为突破点,比拼综合实力的过程。
补充一点,那些毫无营养的书籍就不要看了,这里主要是指那些给屌丝们用于YY的书籍,毫无营养价值不说,还会让你沉迷于那种纯粹是痴想的境界,具体书籍我就不举例子了,主要是那些个 ruo zhi 的小说类的。。。。有这功夫,还是想想怎么赚钱吧,23333333333。想要放松式的阅读,就多看下那些名著之类的,比那些la ji xiao shuo不知强了多少倍。。
养成批判性的思维方式
前边提到的那一个“有自己的判断力”是这个的子集,大学学的不仅仅是知识,更重要的是思维方式。知识我们会忘记,但是养成的批判性思维方式会是最宝贵的财富之一。这里,强烈推荐一本书《学会提问》,这部书可以作为批判性思维方式的入门书籍,多读几遍!!!!!!!等你读完这本书之后,剩下的不用我说,你也知道怎么办了。
技术人要有自己的博客
我是今年年初开始写博客的,博客里面有各种配置过程,学习的一些知识,各种坑之类的。博客是最好的笔记,如果你没有自己的博客,那么现在就开始写。
PS:博客园里的主要是我的软工作业。。。我实际的博客在CSDN,但是我不会告诉你我的地址的,23333333
还有其他的,留作后续补充
其他的还有,时间原因,后续不断补充。