程序员生存定律--如何尽快变的稍微专业一点

程序员生存定律这系列的目录在这里:程序员生存定律--目录html

喜欢从头瞄的,能够移步。程序员

------------------------------------------------------------------------------面试

1 掌握读代码的方法和技巧

无论最终想成为何,刚入行以后,必定离不开的是读代码和写代码。这里将介绍一些读代码的方法和技巧。数据库

读代码这事,先要分是精读仍是泛读。从学习的目的来看,必定要精读必定量的经典代码。而精读是指每行都读懂,不看代码脑子里就能勾画出程序的基本结构。编程

要想判断是否是精读了有个很形象的判断方法:精读代码时会满脑子都是代码,放不下,甚至睡觉前脑子里也是代码。达到这个程度就是精读了,不然应该就还不是。精读代码要控制规模(初始阶段一万行如下便可)并用心,不太须要什么特别的方法。性能优化

 

这节里主要关注的是如何泛读较大规模代码,不是精读。编程语言

 

现存的不少系统每每很大,几十万行的可能也只算普通。这时候一旦加入了这样一个项目,应该如何去读代码? 工具

读规模较大的程序前,先得把规格说明书大体弄清楚,而不能上来就读。好比:对于应用程序,要先大体整清楚它的使用方法、使用场景;对于库则要弄清楚它对外接口的定义。 oop

若是其中有涉及到某些专门的领域知识,好比:流程、财会等,那也最好预先有些认识。这类东西完全的从代码里反推回来是不太可能的。若是弄不清这类东西,不少时候对读程序是个很大的障碍。你不知道代码作的是什么,却去读对应的程序,那就只能看到调用来调用去,最终会云里雾里。post

接下来从大往小,从面到点来看。

一旦开始接触代码,那要先弄清楚代码的基本静态结构。如:包构成、类构成等。这里几乎必定会涉及一个层次问题。一会儿把层次探的太深,就容易盯在细节上出不来。把层次拔得过高,又容易流于表面。从数目上看,一个层次最好不要超过10个关键概念,超过了真记不住。在静态结构这步,要弄清楚每一个部分的核心职责,能够是很简单的归纳,最好能记住。 

接下来选择出最经常使用的典型场景,而后在典型场景下考察上面的静态结构是如何发挥做用的。典型场景下用到的接口每每就是关键的接口,要弄清楚他们的定义和做用。也要整清楚典型场景下数据流的变迁。

经过这两个步骤等价于脑子里能够生成一份比较高层次的静态和动态结构图,很像UML里的Sequence图和类图。牵涉到数据库的时候,通常须要对相应的数据规格有所了解。

接下来要关注进程、线程的结构。好比:都是何时开始、何时结束的,在上述典型场景下都负责干什么。

 上述四步(规格、静态结构、典型场景、进程线程)完成后,对程序的第一次泛读完成。检验是否达成目标的方法能够很简单,若是真的基本读懂了,这时应该可以单靠纸笔描述出程序典型场景的Sequence图。

作第一次泛读的时候,要抑制本身的求知欲,由于老是很想在调试器里经过call stack把一个功能的实现细节整清楚。至少在第一个次泛读里,能够先不要这样。

第一次泛读后,就要进入深掘的过程,通常来说须要针对本身会负责的部分进行深刻挖掘。这部分功能每每会隐藏在某个接口之下。

这时候通常来说能够把功能型的模块优先级下降,好比:XML解析的模块等。其余部分能够认为是须要把以前所说的四个步骤再重复一下。但这时候要关注细节和调用堆栈了。

不论是在那个读代码的层次,有两个基本技巧老是须要的,一个是要掌握具体程序里内嵌的Log机制,要能看Log,必要时可能还得加Log;一个是基本调试方法。同时一个合适的代码阅读工具会对提高代码阅读速度有所帮助,好比:一款名叫SourceInsight的小工具中能够把窗口分拆为几个部分,点击任何方法的时候,这个方法的实现以及Calls Graph均可以被自动展开,这样的小功能无疑的对阅读代码是有帮助的。

 

2 从那门编程语言开始学习好些?

 

学习编程至少要掌握一门编程语言,但从那门编程语言开始是一个极其容易引发争议的问题。为使结论经得起推敲,这里须要作一点系统的分析。

纯从将来应用的角度看,结果是不肯定的,在学习的时候,其实没人可以知道将来会主要使用那门语言。由于最终工做中使用那门编程语言每每取决于一些很偶然的因素,好比现有产品的开发语言,待解决问题的领域等。好比说若是命运安排你去作和Hadoop相关的工做,那极可能会用到Java,若是安排你去作驱动开发,那就极可能会用到C/C++。

若是上述这点成立,而且被预设为前提,那么在学习阶段应该学什么就能够有个相对肯定的答案:学习阶段学习语言的目的是为了掌握编程的基础概念并能更快速的学好另外一门语言。显然这仍然是打基础的范畴。

从这个角度看,只有一门语言是必须学的,那就是C。由于不了解这门语言会形成必定视野上的限制,使基础薄弱,好比不掌握C语言的人,极可能没法了解《深刻理解计算机系统》这样的书,进一步也就不理解什么是指针,什么Stack,什么是Stack Overflow,什么是写超界,作性能优化的时候可能也就想不到一些系统级的手段。Joel在《软件随想录》里专门有一章叫“学校只教Java的危险性”,其中所表达的观点与这里的观点相似。

做为结果,尽管极可能在工做中用不上C语言,在学习的时候仍是要把它掌握,除非在最初阶段就已经下定决心只把技术当作敲门砖,而不想走的更远。要否则根基就过于薄弱了。

至于其余一些比较主流的语言好比C++,Java,C#等能够彻底按照兴趣来进行选择,惟一关键的是无论选择那个都要累积必定代码量并把它学透。这样依此扩展到未来要用的编程语言,学习曲线每每就会很平,大体2~3周就能够用新的语言作一些基本的开发工做。

选择编程语言的另外一种思路是从脚本语言入手,好比PHP,Python,Javascript等。这就和赵匡胤当年要下决策是先搞定弱的南唐仍是先搞定强的辽国同样,是个两难的话题。从入手容易,培养兴趣的角度看,显然脚本更好些,而且脚本语言也是互联网的显学,将来用到的机会很高;但若是想多积累,厚积薄发那么就仍是从C入手会好些。我我的的建议是若是在大学里那就先难后易好些,由于人生里不老是有这么大块的时间;但若是是后想转入这个行业,那就直接找脚本开始吧。

 

3 小结

写程序、读程序、学好学习曲线陡的知识、避免IDE依赖这些事情的根本目的都是为了打好基础。这个环节里最忌讳的是急功近利,好比:学习一堆IDE的操做方法、每一个编程语言都掌握一点。不少人可能误觉得这对找工做有帮助,因此把但凡接触过的技术都列到简历里是很常见的作法。但其实这个认识是不对的,但凡是有点规模的公司招聘毕业生或者刚毕业不久的开发人员的时候都更看重他的基础和发展潜力。而基础和潜力这两样东西很难精确度量,但并不难判断,经过简单的面试既能够判断出来。只关注当下这我的能干什么的公司极可能是看不到明天的公司。

------------------------------------------------------------------------------

 

关于我本身的各类信息,在左边栏可找到,想了解下写这系列文章的人是否是骗子和大忽悠的能够瞄。

 

最后但愿感兴趣的支持V众投,感受上这应该是国内最靠谱的生活购物等的问答社区了吧,都是朋友给朋友作的答案,同时实行一人一号,一人一票制度,想找什么答案关注公众号:vzhongtou(左侧有二维码)就好了。

相关文章
相关标签/搜索