那一年高考,大家都为自己选择什么专业有点犯愁,我也不例外,面对形形色色的专业,自己也不知道自己今后适合做什么,喜欢做什么,好多都是由父母来决定,对于我们这个80年代初的人来说,起码在当时,有很多是这样的,父母也总是左打听,右打听的,生怕自己的子女选错行,古语云,男怕选错行,女怕嫁错郎,这在有着5000年传统文明的中国来说,在选行的关键时候,确实是个让人左右为难的事.我嘛,小时候喜欢打电子游戏,感觉这东西很神乎,想着这些都是电脑程序所做,很想自己以后也能作出自己的程序,于是,不顾父母的推荐,(父亲是教师,他想让我考师范,继承他被美誉为人类灵魂工程师的职业),在自己的坚持下,选择了计算机科学这个专业.
四年的大学生活,跟平常读书一样,认为只要学好了书本中的内容,在考试中名次排在前十就可以了(我们那个年代的家长,很看重考试名次的,班级名次,年级同专业名次),很少参加实践,就这样,在一直争名次的学习氛围下,度过了大学生活,开始面临严峻的就业形式.
毕业后,一直待在省份城市,希望找到一份自己渴望的,实现当年选专业时的理想的开发工作,看到只要带有计算机或是软件或是科技等关键字眼的公司,就去投简历,但现实总是那么的无奈,面试的公司对于我们这种应届毕业生,总是不太感冒,同时,自己也感觉在面试时,问到的很多在实际工作中要用到的实用技术点,似乎在大学四年里,根本就没有接触过,也慢慢知道,想要马上找到一份软件开发的工作的成功率太小了.在面试的公司,有不少公司同意招我进去,但不是做开发,而是做软件业务工作,并提出如果以后在工作中能自学加强自己的开发技能,是可以提供机会转到开发技术部门,我想,这样也好,先熟悉下这个行业的特点,在工作之余来向公司的技术人员加强学习实用技术,如果有机会,再转到自己曾经向往的开发.
就这样,我一边做着软件业务员的工作,一边自学VB(当时的公司就是用VB语言进行开发的),终于,在一年之后,我通过了技术部门的考试,被调到了技术部门,跟那些前辈一起,整天坐在电脑边上,敲着abcd.
转到开发的前期,很少会考虑代码的优化,都是一股脑写下去,功能虽然说是实现了,但是性能等什么的一概未管.这也让我吃了不少苦头,一旦有需求变更,改起来很麻烦.(大家不要笑我,真的是这样的)
总是在这种苦头下,真是很折磨,于是,我便找了个机会,打电话叫技术经理出来吃夜宵,并向他请教怎么样摆脱这种现态,他告诉了我,程序入门是容易的事,但真正要做到熟练的驾驭它,以最好的方式来组织代码,这个还需要很多的功底,不是仅仅知道语言的语法就可以的,更多的要去关心语言的实现机制,运行原理,加载顺序,并活用语言的特性,让代码最大化复用,在写代码的时候,要多去考虑某个功能今后可能需要扩展的功能,不能只是考虑现有功能的实现.
那次请教之后,我开始学会去看那些出问题较少的老前辈写的代码,试图了解他们是否有什么秘密武器,慢慢的知道了什么是设计模式,什么叫重构,什么叫颗粒度等等这些以前一无所知的"秘密武器".
就这样,几年后,随着java语言在网络应用开发的表现出来的优越性,以及它跨平台的支持,很快席卷了大江南北,我也开始关注并自学起java来了.
java的入门跟VB一样简单,看看语法,学会如何搭建环境,你就可以写出"hello word"了,但你千万不要认为java就这么点东西,不值得深入研究,学会了ssh框架的使用,知道如何写配置文件就掌握了java,这其实才算是真正的入门.
为什么这么说,java是开源的,基于java的框架技术层出不穷,不论这些框架有多么优秀,但有一条共性,这些都是活用java编程思想,巧妙运用设计模式的结晶,万变不离其宗,最核心的技术还是它的思想,以及在实际业务中的活学活用.
如何做到活学活用呢,这就要求我们在学习技术点时,一定要明白这个技术的运行机制,思想原理,并根据实际情况来具体分析,例如,设计模式一书说到单例模式,常用于对一些config对象使用,那么你要明白为什么常用于config对象,这是因为这些配置信息一般都是全局共享的,在运行过程中不经常发生属性变化,为了保证各处的调用都是同一个对象,但是,如果这个config对象对于不同的情况有不同的配置,情况有成千上万中,但每次可能使用到的只可能是其中的某一种或几种,这个时候,我觉得,如果,把所有config对象都做成单例模式就不是那么合适了,我们知道,单例的对象是static的(当然,登记式单例除外),static对象的生命周期是跟main thread一起的,如果每次应用中,只可能用到这其中的几种,我们就没有必要把这成千上万的配置都做成单例,做成第一次使用到时,再加载是不是会更好呢?根据具体使用到几种来实例化这几种.这只是举个例子,在这里并不是跟大家讨论单例模式,只是说明,每一项技术都有它常规的适应场景,在不同的场景中,我们就要了解这个技术点的原理,以及内存分配情况,生命周期,作用域等等基础的原理,来活用每一项技术.
有几次,去几家公司面试,面对那种喜欢问jdk原理,java编程思想,以及各种应用场景的面试官,总是喜欢跟他们一起探讨下,从中学到更多的不同的理解.作为我自己,当我面试前来应聘者的话,我也更希望他能更多的了解这些基础的知识,而不是简单的说知道ssh怎么用,怎么配置,而说不出其实现机制,当在实际应用中,如果,你了解一项技术的思想和原理的话,你对它的驾驭能力就上了一个档次,当出现特别需求要求对这些技术根据业务所需进行改造时,你就会轻车熟路了.
另外,走上开发这条道这些年,我也越来越感觉到了,作技术的人,表达和理解能力是相当的重要,如果你知道一项技术怎么运用,但是如果你不能用通俗易懂的语言把你理解的思想表达出来,可能会误导你的同事,造成不必要的成本升高.当然,反之,作为一个接受思想传递的开发人员,不能很快理解对方所要表达的真实意思,也是不好的,在团队合作中,要善于发现自己的同伴喜欢用何种表达方式,如何正确理解对方的意思.(这里,大家可能会觉得我说的这正反两方面是矛盾的,其实,谁真正作到了正确的表达,谁作到了正确理解,项目团队的其他同事会给你答案的).
有些开发人员喜欢用专业术语,PO,VO,POJO等等层出不穷,沟通起来就满嘴的专业术语,当然,这并不是说不好,我觉得也应该看场合,如果跟你沟通的同事也是一个专业术语领悟能力很强的人,用术语表达,也未必不可,简单明了,如果,对方是一个喜欢通俗表达方式的,我们就应该尽力找到一个最能比达你的意思的朴实的小例子来进行说明,这样,这样,可能会更快的让对方明白你的所思,所思.
说了这么多,有点凌乱,最后,谈谈自己的迷茫,都是快奔三的人了,有朋友劝说我尽快挑选一个其他行当,不要再在开发的道路上走下去了,他说,在中国,软件开发是一个青春饭的职业,奔过三之后,就基本上在这条道上会走不下去的,有时,看看全国各地的各大公司的招聘以及职员介绍,确实也感觉,只有青春才能扛住这个行业的艰辛......真的有点迷茫了....
唉,不说了,唱着这首"我拿青春赌明天.......",收拾电脑包,回家吃饭先.