何为速学?顾名思义,即“快速学习能力”。但是程序羊在这里说的速学,并不是说一定要去快速去学习各种各样的新技术,而是说当我们遇到有需要的时候,能够快速的学习。发现现在的很多人在开始学习新的技术或者技能时,从一开始就是一头扎进去写案例、写Demo、看源码;或许以前用这样的方式来面对学习,我认为上个重本不是问题,但现在我们说的是面对学习技术的方面。所以我认为这不是好的方法,而且比较耗费时间,收获效果也不怎么明显。
给大家分享一位阿里云的架构师总结的快速学习方法(五部曲):
(1)这个技术能解决什么问题?
(2)这个技术适合在哪些场景应用?
(3)这个技术跟你已经掌握的哪个知识或技能类似,有什么差别、特点、优点和缺点?
(4)理解了前面的三步后,就可以开始尝试写案例,或者更进一步去应用;
(5)弄清楚前面的四步后,就可以去研究一下这个技术的原理机制,分析源码等。
程序员都应该具备“良好的理解能力”。这个不用多说了,例如:当你需要将产品人员或者用户用自然语言表述的需求翻译成程序语言。自然语言有一个特点就是通俗但不严谨,而程序语言必须是非常严谨的。如果对产品人员或者用户提出的需求没有很好的理解,即使程序语言写的再漂亮,技巧再高,最后做出来也是一个不符合要求的产品。
要玩编程首先要掌握一门编程语言,编程语言是做软件的基础,初学编程都是从一门基础的编程语言开始,要真正掌握一门编程语言必须经过项目实战,很多在校大学生在学校期间学了很多编程语言,但不能称之为掌握,只能叫学过,所有编程语言主要在于实践,只是理论上掌握的,非常熟练,不算真正的掌握一门编程语言。
不用多说,想要成为一名合格的程序员,你就要掌握一门真正的编程语言,而掌握一门真正的编程语言必须要经过项目实战,现实中有两类程序员,一类是不把所有的基础搞定会让自己不踏实,把所有的基础学的差不多之后才开始尝试做项目;另一类是属于实战型,在项目中遇到不懂的再去寻找资料,最后也是把所有问题解决了。不过前者的编程效率会更高喔,因为具备良好的编程基础之后再去项目实战效果会好很多。
其实,真正的编程语言玩到一定程度之后就是工具般存在,而且掌握了一种编程语言之后再去学习别的编程语言要快速很多,很多程序高手切入新的编程语言只需要半个月或者更短的时间就能上手做项目,主要还是得益于前面的积累,有几年工作经验之后重点就是编程思想,也就是实际解决问题的能力,这才是玩编程的核心。
如果你以后有更高的目标,甚至是冲着架构师那方面发展,那么精通一门语言就是必须的了。这种精通,不是你自我感觉已经会了这门技术,精通不能只说感觉,也不是说看了一本《24小时精通XXX》,编写了几个程序就能说精通的,要靠长时间的积累和实践。记住:精通远远大于掌握。
(1)编码工具
工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你在编写程序时,有没有选择一个很好的IDE?工具是为目的服务的,好用,提高效率就行,形式无所谓。
(2)文本工具
另外一个常用的工具就是记事本,一个好的记事本让你记录的文字都格式都好看很多,常见的有myBase、Notepad++等;这里看你个人喜欢吧,我用的是Notepad++,还可以设置文件编码,感觉也挺好用的。
(3)查询工具
还有一个最重要的工具就是搜索引擎了,搜索引擎用好了,就等于打开了一扇通向知识宝库的门,推荐一款无敌有良心、无敌安全的搜索引擎,不会收集私人信息,保护私隐,没有Cookie,并且秘迹搜索聚合了百度、360、Bing、搜狗等搜索结果。
网站:https://mijisou.com
我曾经论坛等地方看过很多初学程序员写的程序代码,在同一个jsp或者java源文件里,出现了三种以上的对方法的命名方式,有下划线间隔的,有全大写的,有拼音首字母命名的。就像一个菜市场,杂乱无比,估计一段时间后,他自己都看不懂这个方法是干嘛的。遵守编码规范,是一个程序员最基本的要求,可悲的是,很多程序员根本没有意识到这个问题的严重性。根本不管代码的可读性和可维护性,只要能实现功能就行了。
一个优秀的程序员,其代码必定脱离不了注释,准确地注释可以起到注解说明,便于阅读,方便调试的作用,同时也属于规范中的一部分。
但是要注意不是为了注释而注释。对于类,以说明职责为主;对于方法,以说明意图为主;对于方法体,以说明实现思路为主。对于一大段的代码,要进行分段,使用空行隔开,并使用行内注释进行说明。
如今,多数编程语言都是面向对象的编程语言。而这些面向对象的编程语言的共同的精髓就是面向对象的思想。掌握这些比面向对象语言本身更重要,比如对Java中继承,多态,重载的理解。对于面向对象基本原则的理解,比如开闭原则,接口隔离原则,单一职责原则等。在此基础上,应该去了解Java中的23种设计模式,并掌握常用的。
思维的条理性:写代码之前,先简单计划一下,用自然语言把流程写下来,用于整理实现思路。不要看了需求或设计之后,马上就敲代码了,敲完代码马上 就debug。花点时间思考,敲代码只是最后一个很简单的工作,不要把自己变成一个代码打字员,编写边想,写了删,删了写。先把实现过程想清楚,在脑子里先实现一遍,再去敲代码,水到渠成,这样不香吗?
想要成为一名优秀的程序员,自身没有一点英语能力是不行的。怎么说?你要清楚,编程语言都是英文的,换句话说,代码都是英文,如果你英语不好,在编程的时候,你就能体会到其痛苦,例如:关键字或者报错的异常,你看的懂吗?不过现在有翻译工具了,很多程序员在编码时都习惯依赖使用翻译工具,但是学习英语是一个过程,我们可以通过在编码中遇到不认识的或者不会的,通过笔记的形式记录下来,业余时间去阅读,这样也是一个学习的表现。
学习英语其实和编程语言有差不多的含义,首先做的就是要培养语感,有了感觉之后才会变得简单一些,这种语感的培养需要具备一定的基础,并且需要一定时间的积累,一般能达到这种感觉需要坚持,
总而言之,学英语,首先是要有信心,其次就是肯花时间,最后贵在坚持。
很多人都说学IT是一个很吃香的职业,但是在IT界想混饭吃可不是一件容易的事情,当今科技在不断的进步,技术在不断的更新,你不学习,就等于落后了。所以学习就要有针对性,首先要认清自己的目标,自己短期目标是什么,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。
当然,不能只学习技术,要经常练习自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。
每个人可能都有自己的学习方法, 意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。
不为失败找借口,只为成功找理由。这句话说得很好,在学习我们也要发扬这种精神,不要一昧躲避错误,不要说,“这个只能这么解决了,我想不出有什么别的方法。”,当你说出这句话时,在别人眼中就会觉得,可能你根本都没想过别的方法,或者懒得去想。只是应付式的敷衍了事。
对任何一个问题,找出两种以上的解决办法都是非常容易的,打开浏览器百度一下,可能就是数十种。悲哀的是,有些程序员经常止步于自己构建的狭小领地之内。出现这种现象,要立即改之,千万不要让其培养成为一种习惯,如果不改掉,将来步入社会,入到公司,对待客户也是这种态度,不是积极的帮助客户解决问题,而是推脱这只是唯一解决方案。
打破这一思维定势的第一个办法就是:在面临一个问题时,首先想到的是“没有不可能”,或是“一切皆有可能”,前者是阿迪的广告语,后面是李宁的。只有这样去想,才能寻找解决问题的别的出路,即使最后我们试了很多种办法,还是只有着一种解决方案,但我们在这种寻找解决方案的过程中,常常会产生很多好的想法,这样才会使我们真正深刻思考一个问题。建议大家看一看《水平思考》这本书,它提供了一些进行创造性思考的方法和工具。
但我认为,坚持认为存在另一种解决方案的信念是第一位的,方法和工具都是其次。
也许会有人质疑,程序员跟写文档有什么关系。大家开源软件也用过不少,看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他们的文档写的多么的易懂。其实写代码也相当于写文档,只不过用的是编程语言。同样,写文档,用自然语言,也相当于写程序,简单明了,清晰易懂,这样的“程序”谁看谁舒服。同样,对于想进阶到设计师或者需求分析员角色的程序员,文档能力更是非常重要。
word是一个最实用的工具,很多程序员,多级编号都不会用,索引目录也不知道如何生成,更别灵活应用样式了。
这里建议可以将文档编写到博客(注意文章的排版,不会的参考这)或者博客园等网站中,方便以后查阅,同时别人看到你的博文还可以与你进行互动,这样对你的帮助也是挺大的。
PS:善于总结的人,运气都不会差!
抽象能力是认识事物从现象到本质的能力。如果你只是停留在“见山是山,见水是水”的层次,客户说什么,你就做什么,设计怎么做,你就怎么实现,从来不过问为什么,也不去想他是满足了用户哪些方面的需求呢。这样可能只解决了表面的问题,可能会引起返工。认识到本质,才能让你的程序具备更大的灵活性和可扩展性。在做企业应用软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。
一个项目的上线,它是前期必定需要经过测试,可以是模块测试,自动化测试、单元测试等,常使用的就是单元测试了。
没有单元测试的代码,只能说是半成品。因为没有什么能证明你的代码是可以运行的。测试开发是一个非常好的敏捷过程的最佳实践。单元测试还可以作为回归测试,在修改代码时,起到警戒线标志的作用。是否具有单元测试的意识是区分程序员是否合格的重要标准。写不写单元测试是区分平庸程序员和优秀程序员的重要标杆。
代码评审和单元测试是保证代码质量的两种常用手段之一。代码评审能力,说明了你的审美标准,知道什么是好的,什么是不好的,什么是优雅的代码,什么是糟糕的代码,你才能让自己做的更好。
DRY是一种原则,就是Don’t Repeat Yourself。出自《程序员修炼之道-从小工到专家》。这条原则可以用到很多地方,比如你经常要编译,打包,部署应用程序,供集成测试用。每次你都在重复你自己,写一个自动化脚本(比如用ant,批处理命令)来将这些工作自动化,以提高效率。类似的例子太多了,如果你发现你经常做一些重复的工作,就要警惕了,是否违背了这个原则,想一些办法将他们自动化。
软件开发领域设计的知识和技能太多了。从广度上来说,有操作系统、数据库、编程语言、网络、设计等,编程语言又有几十种;从深度上来说,操作系统、数据库、编程语言等都是可以不断深入去学习的。无论你是从事对技能广度要求更高的业务开发,还是从事对技能深度要求更高开发专项系统,都需要不断的学习,这样才能不断的提升自己的能力。同时,这个过程也是一个非常煎熬漫长,这时候,考验你的坚持能力就体现出来了。
很多对于编程感兴趣的人开始热情高涨,遇到难点了热情没了,就中途放弃了,做任何事情都是这样,不可能什么事情一帆风顺,什么事情都要坚持一段时间,看看是不是真的不行再下结论,很多人觉得编程很难,主要还是没有坚持到一定程度,在还没明白的时候就开始说放弃了。
如果单纯从个人完成工作的能力来看,可能确实也有很多程序员不爱分享但确实很厉害。这个我们不能否定,但我认为真正优秀的程序员一定是除了自己优秀外,还能让其他人也变得优秀,或者能够贡献优秀的开源项目以降低别人的重复工作。分享的途径有很多种,例如:可以写博客,可以贡献开源项目,可以给身边同事培训等。
哈哈哈,假如每个程序员都可以做到这样?年入百万真的不是梦!
以上仅仅个人看法,其实评判标准有很多,希望大家交流指正。好东西就是要分享。