开发的关键点在于学习,学习能够说是在任何行业永恒的话题,学习什么?如何去学习?就编程而言,学习最终是为了应用,首先要学习到这种应用,而后学习其如何应用,再学为什么能这样应用,最后学如何创建或者(根据须要)更改这种应用。算法
假设你想学习一个开源项目,首先要了解该项目应用的工做机制,熟悉其业务逻辑,懂得其业务核心在哪里,业务边界在哪里,什么地方正常使用无问题,什么地方正常使用可能有问题(所谓的‘坑’),什么地方在某种状况下使用必有问题等等。编程
而后须要了解其组成原理,便是代码组成。在对代码工做目的充分了解的前提下,从代码源头找起(方法调用部分),学会单元测试,对代码相关位置进行功能验证,对其相应功能分别进行深刻,慢慢排除模块干扰(通常来讲,为了提升项目的可维护性,都会将模块进行划分,以致于相应的功能具体实现被划分模块的代码掩盖),同时学习该模块的建设,积累经验设计模式
最后最终的目的天然是要根据须要更改此项目(或者不须要更改,但最好能有更改的能力,通常项目应用范围难以保证必定在业务需求以内),假设前两点都能正常完成,那么我对于该项目的各个功能的应用点、边界问题、架构划分、具体实现应该有了必定的了解,一般状况下,为了下降功能及模块的耦合度,项目功能的具体实现都是边界狭隘的单面功能,通常边界在一个任务的范围内,若是业务需求要求更改相关具体实现,应该从调用者处改起(不能改变单面功能的实现,而应该在该功能的调用者处增长业务逻辑),但若是调用者处于一个模块内,则最好在该模块外更改,避免模块与模块间耦合度太高。网络
假设前两点不能正常完成,只要注意到项目的边界范围,若是能解决需求问题,短期内也没有关系,而且还能快速解决需求,但若是该项目须要长期使用下去,最好能在有空的时候能将相关的耦合度问题(事实上,全部的设计模式要解决的难题,很大程度上就是这个耦合度难题,只不过在实际开发中这个问题有大有小,一般大的都是小的积累起来的,通常最初发现的都是能够解决的)解决掉,否则你所在的项目可能会愈来愈难改,任何地方稍微动一下,就会出现各类连带问题,到最终就会面临两个选择,项目重构,或者,重建项目。数据结构
项目重构是一件很是吐血的事情,原本到了这个地步,改一小点都会形成恐怖后果,况且重构是要大改,这大概是几个星期不眠不休的节奏了。可是不能否认,重构项目是一个很是好的学习机会,能够加深对解耦的理解。架构
我再简单谈谈新建项目,建一个新的项目,该项目的开展,一定跟创建者的编程基础、开发经验有直接的关系。一个资深的工程师,能够对工程的各个需求完成的效率、工程结构、代码模块、领域知识、资源、实现方案有较强的开展或把控能力,根据公司规模、需求强弱、需求花费、可用人力物力资源在规定时间内进行需求分析、工程规划、代码编写、测试、内部使用测试、上线、迭代需求分析、工程规划......如此这般单元测试
说到底,就编程来讲,学习分两个点:基础积累,和,经验积累。基础能够说是经验的催化剂,由于任何的编程经验都离不开基础知识,换句话说,全部的功能都是基础知识的应用,当基础知识扎实了,积累经验是水到渠成的过程,学习将变成一种习惯。
学习
关于基础知识(如数据结构、算法、网络等),如今的高级语言大多都已将基础知识进行了封装,但基础还是必学之重,基础知识学起来或许比较枯燥乏味,我认为在完成一些个项目,对项目有必定的认识后,再去补习缺乏的基础也许是一种不错的方式
测试