距离上篇文章已经过去一个多月了,这段时间之所以没有更新文章不是因为偷懒,而是因为在实习。7月份的时候来到了目前的这家公司实习,当初笔试的时候自己做的不是很好,后来面试时也有些地方变现地也不尽如人意,不过最后还是很感激我老大给我来公司实习的机会。在实习的一个多月时间内自己也学到了很多,今天这篇文章就记录一下我的学习过程。

学校&公司的区别

来到公司实习,其实自己已然不是一个学生了,别人也不会当你是学生,所以很多事情上需要自己去跟上团队的节奏。学校里学到的东西不能说没用,但是与实际的公司其实是有许多不匹配的,我们更需要将自己学到的知识运用在实践中,而不是单纯地纸上谈兵;从另外一个角度上来讲这也是为什么企业招员工时很喜欢招那些有一定的项目经验的学生。很幸运的是自己之前有过一定的项目经验,虽然谈不上是多大的项目,但是这些经历足以培养一个人独立完成工作、独立解决问题的能力,这点也恰恰是在课本上很难学到,但是在实践中却又很有必要积累的。
上面的道理大家都懂,但是没什么卵用,我举个例子向大家说明一下这个问题。
我有一个工作内容是阅读之前的一个eclipse工程,并将这个工程移植到Android Studio平台上
大家或许觉得这个工作内容很简单啊,Android Studio本身就很强大,完全可以解决这个问题。实不相瞒,我一开始也是这样想的,但是当我阅读这个旧的工程的时候,我觉得自己回到了”远古时代”,之所以会有这样的感叹,不是因为代码写的不好,而是整个工程缺乏一定的架构思想,导致一个Activity文件动不动就600~700行,有的甚至到了1000行,尽管逻辑不复杂,但是性能肯定是大打折扣的,并且如果工程日后是别人接手,或者日后需要扩展功能,那么将会彻底地违背了开闭原则(对扩展开放,对修改关闭)。也是基于这样的理由,我就打算将整个项目进行重构,而重构使用的方法则是我经常在项目中使用的MVP设计架构,尽管这种架构仍然有他诟病的地方(代码量不少反增,逻辑也会更加的复杂),但是这仍然不失为一个较好的选择。确定了目标,我也就开始干了,也正因为有了之前项目的积累,所以重构起来也才得心应手。

需要慢慢培养的技能和规范

技能

做程序开发,经验是需要慢慢积累的,而技能也不是一下子就炉火纯青的,需要经历项目的考验才能慢慢成为巨人,在这里我列举一下个人觉得比较重要的开发技能。

文档阅读能力

许多大公司都有维护文档的习惯,并且文档的数量和质量也都是顶呱呱的,作为进入团队的新人,对于业务不熟悉的时候,第一时间并不是问老大问同事,而应该自己阅读文档,当然不得不承认的一点就是我一开始是比较笨的,遇到问题就问我老大问我同事,到了后来我才悟到这点,也算是积累吧!

前面讲的是要有阅读文档的习惯,接下来讲讲要怎么去阅读文档。想必大家或多或少都会看Android官方的文档吧,但是应该不是每个人都看得下的,这里我也承认其实我对官方文档还是有些许排斥的,不仅仅是有的时候都是英文,增加了阅读的难度,当然对于本科生而言,英语阅读不应该成为开发的阻碍,再者就是尽管将英文翻译成了中文,读起来还是有些许的晦涩拗口(也许是我个人的感受),但是。。。不得不承认的就是官方文档是最权威的,并且它的很多内容是很有帮助的,毕竟文档是由项目的开发者编写的,没有人比开发者还懂项目了吧!另外文档中有的时候还会记录一些开发者遇到的坑,作为项目的接手者,如何避免跳入这些坑,看这些文档就对了。我个人的建议就是:

  • 要静下心来阅读,并且适当的做一下阅读的笔记,将冗杂的内容提炼出真正对自己有用的东西,这里推荐一个Chrome的插件——简悦,他能让你沉浸在阅读之中,排除掉页面其他无关元素的干扰
    简悦图示
    简悦图示
  • 再者就是不要妄想一下子就读完整个文档,毕竟这是很多开发者花了许久才编写完成的,我们要做的就是阅读与你相关的内容,或者你感兴趣的内容,这样的效率才会比较高一点。

独立解决问题的能力

文章开头讲到我们在课本上学到的知识很多时候并不会派上用场,但是当真正需要的时候我们却早已遗忘,如果你在开发的过程中遇到了一些困难,首先并不应该也不推荐直接向自己的同事询问解决方式,毕竟别人也有工作要做,这里我非常感谢我的同事和老大,因为刚进公司时初出茅庐,很多事情都不是很懂,向他们请教了好多好多,但是大家都十分的nice,很耐心的为我解答,他们帮助我很快的熟悉了业务,非常感谢他们。
话说回来如何独立的解决问题呢?以下列举一些我积累的方法,不过大家平常都有用到的啦!

  • 善于利用搜索引擎尤其是Google。搜索引擎装的东西肯定是要比人脑多的,并且互联网为全世界的网民提供了知识分享的平台,你遇到的这个问题或许别人也遇到过,并且已经有了解决方案。

  • 利用好Stack Overflow 。这是一个编程问题问答平台,很多人遇到问题之后都会来这里提问,如果你对某些问题有了解决方法,那么就慷慨的给出你的答案吧!

  • 仔细分析代码。如果上述两个方法都不能解决你的问题,那接下来就得靠你自己了,有可能是你写的代码存在某些问题,这个需要你耐心地去排查,如果问题解决了,那么你应该在你的文档或者笔记中记录下这个问题,为团队提供解决方案,而对自己而言也是一种积累。

规范

规范在企业中十分地重要,体现在软件开发中就是指代码的编写规范、工具的使用规范、版本控制工具的使用规范、文档的编写规范等等。这里讲讲代码的规范和版本控制工具的使用规范
其实两者的关系十分的密切,因为很多时候代码是需要提交到版本控制系统上的,在这里我就指公司使用的比较多的SVN了。举一个例子,也是我老大跟我们强调的一点,在开发过程中代码的每行的缩距虽然并不是特别的重要,很多时候每个人都有每个人不同的缩距方式,但是这在团队协同工作的时候就会存在问题,例如我将Android Studio的默认行缩距进行了调整,将代码提交到了SVN,接下来我的另外一个同事查看我的代码时,发现缩距有点奇怪,于是为了阅读的方便,他将缩距调整为自己能够接受的程度,当阅读完代码之后,SVN提示我的同事已经将代码修改了,但是实际上他并没有对代码做一些实质性的修改,只是做了缩距的修改,但这仍然被SVN识别成一次成功的提交,所以这就是问题所在了。解决问题的方法就是团队约定一个准则,使用IDE的默认缩距设置,这样就不会存在这种问题啦!

接触和学习新知识

正所谓术业有专攻,每个人都有自己擅长的方面,但是知识是不断更新的,并且也很少人能够做到对整个知识体系的每一块都了然于胸,所以如果到了新的团队,接手新的业务,而开发内容是你不熟悉的,那也没有必要慌张,这个时候你得尽快的熟悉这方面的知识,通过许多的手段去让自己融入团队,这个才是新手的最佳技能。

尾声

以上就是这段实习经历中我学到的一些经验,写出来与大家一起分享,也当做是这段实习经历的总结,对以后的工作或许会有帮助。希望大家会喜欢!