能比较自信地回答上面的大部分问题,恭喜你已经具有中级程序员的开发经验了。我不知道辞海里有没有对“工作经验”这个词下定义,根据我的理解我觉得程序员的工作经验包含了两个方面的经验:社会方面的经验和技术方面的经验。社会方面的经验包括了比如生活与
工作产生了冲突该怎么处理及与领导在某些
问题上意见不
一致该怎么处理等,这个如果不是应聘技术管理方面的岗位面试单位关注得比较少。技术方面的经验招聘单位会更看重一些,通常所说的程序员的工作经验也主要是指技术经验。它至少包含了以下几个方面:
对于一些常见的编译错误和异常描述我们能迅速知道问题出在那里并及时解决;
对于一些可能会有多种方法实现的功能,我们应该如何根据当前项目的实际情况选择比较合适的方法;
对于一些容易影响性能的地方我们应该知道一些如何提高,如果存在多种解决办法,如何去评估那种办法的效率高;
对于一些容易发生安全性问题的地方我们应该知道如何去防范;
对于具体的应用如何去
设计数据库或者去评估已经存在的数据库的设计好坏,如何在第三范式和字段冗余之间取舍;
如何在时间复杂度和空间复杂度之间取舍,知道如何用空间换时间(比如使用缓存就占用了内存但是换来了效率的提高,但是缓存并不是使用越多越好,此外对于数据库中索引字段也存在这样的问题);
对于常见的问题我们应该知道如何去处理;
对于从来没有遇见过的问题我们又该如何借鉴已有的经验来处理而不是束手无策。
要解答以上问题,可能要求我们的知识面要相对广,在某些问题上要有一定的深度。实际上上面的这些问题已经脱离了语言本身了。在武侠小说中经常听到高手会说所有的武功最终都是百川归海,在编程开发中我们经常会听到编程高手会说“语言只是一种实现手段,重要的是思想”,那么思想到底是什么呢?为什么有人要求在项目中某个类只允许一个实例存在你就会想到单例模式?这就是经验,但是经验是什么呢?真的不好定义,尽管在上面我列出了经验的一些体现,但是那并不是全部,我只能说“经验是一种很玄很玄的东西”。
如何积累经验
不要晕,也不要倒,其实我们有很多办法增加自己的经验。围绕磨盘转了一辈子的骡子并不是一头有经验的骡子,将木棍捅到蚁窝中来捕食蚂蚁的熊也没有太多经验,因为它们做那些事情不是出于被指使就是出于一种本能,很少去想是不是可以做得更好,而我们的祖先就做到了,所以今天我们成了世界的主宰。
说到这里,也就说出了我的第一个答案: 技术的深度来自于总结 。不管是学习还是做项目,不管是自己编写的代码还是别人的代码,我们都尽量学会分析总结,首先分析一下那些地方做得好,那些地方做得不好,做得好是因为什么方面的原因?安全、高效亦或者是其它?这种好的做法今后可以用在某些场景下?有没有可能存在比这些你认为做得好的
方法还要好的方法?对于那些做得不好地方,又该如何去改进?特别是以前自己所做的项目一定不要做完了就算完了,有时间一定要拿出来经常看,看看最近所学的知识有没有可以用于改进这些项目的。
也许有些朋友特别是初学编程的朋友会说自己以前根本就没有做过真实的项目,缺乏实战机会。光凭自己所做的工作上所做的一些项目可能对于个人提高不是很快,会受到公司业务的限制,项目类型不是太多,所需要用到的知识自然也不会是太多;或者在一些大公司里面,由于在这里一个人一个坑,每个人的职责单一,一个项目做上一年你可能仅对自己所负责的模块比较熟悉,对于项目组其他成员的模块不熟悉,时间长了之后就会感觉自己进步很慢,这种感觉我以前也有过。
在当时我做了几件事情,我现在总结起来觉得比较