一、从头说起
我最初对于程序的概念仅仅是为了完成学业考试而去死记硬背面向对象(OOP)的概念。当初觉得计算机或者说只是微型电脑感兴趣。后来参加了一次关于Java的培训,才渐渐的理解了编程语言的神奇和优美,更多的是要比任何人都听话,只要你的语法是对的。培训仅仅是浅层次的对知识进行了普及,而我个人觉得最大的获取不是学会那些概念,也不是会用框架去构建自己的项目,而是如何去获取知识——互联网。谷歌、CSDN、CnBlog,那个时候感觉JavaEye好像还没和CSDN合并,时间太长远,已经记不清了。
随着培训的进行,也渐渐的会用Java代码写几行HelloWorld程序,也学会了几句增删改查,但不包括内(外)连接、可编程性等。不过也得感谢这些老师们,让我弥补了以前数据库仅得了60分的尴尬局面。后来也学习了Servlet、Struts1、Struts2。恰恰再这个时候,浪潮集团通用软件有限公司来招人,就被招走了,200多人选8人。对于Servlet、Struts1、Struts2 来说,我还真的是仅仅了解了一个概念,或者说,比着葫芦画瓢还是勉强可以,真的说深入的理解Struts 的原理还是以后的事。其间比较荣幸的是接触了一段时间的Java 的GUI界面,基于事件驱动的Form代码,当然也仅仅是接触了一下。遗憾的是没有接触本来在培训课程内的Hibernate 和Spring 。
回顾这段时间,看看自己的技能树,似乎是选择了一条前期技能学习困难,但是中期打野甚至BOSS都可以轻而易举的应对的技能方向——Java。然而,也许是这个语言体会起来麻烦,也可能是天生愚钝,那三个月的培训感觉对于Java基础,JavaWeb的技能,都只加了一个技能点。
二、初进公司
初进公司的时候,竟然只有.Net 和PB 两个方向可以选择。对于单机版的PB来说(当时的思路),还是觉得网络化的软件系统更有优势,所以就选了了.Net 方向。后来随着PB对网络的支持,在速度方面的优势,也让我有点遗憾没有接触一下相关的知识。
进的部门是煤炭事业部,处理的是基于开滦的项目的煤炭产品发版的问题。老实说,当时处理Winform问题完全颠覆了培训时期JSP标签的思路(其实后来才意识到对于程序员来说,.net的Winform程序开发确实简单且速度快 )。但是很快就上手了,结构比较简单:数据持久层——业务逻辑层——客户端访问业务逻辑层处理层——客户端。因为是基于产品和平台框架的,所以数据持久层已经封装好了,对于需要修改的地方也仅限于其他几层。对于这样的BS结构的富客户端来说,更多关注点被放在了业务流程的处理上。
回顾这段时间,看看自己的技能树,仿佛又在一个学习简单,但是中期打野微感吃力,对付BOSS有点难度的技能C# Winform。当然也不是没有好的BOSS,只是感觉少了些,刷野的人也多,不一定能得到相应的装备。
三、新鲜过后
随着开滦发版之后,算是迎来了第一个项目,也没想到这个项目从始至终我竟然全程参与下来了。起初接这个项目的时候,也只是做一做简单的字典,对单据的简单二次开发。也对于一个字典或者单据的数据流模式有了个简单的理解:单据加载(GUI页面构造)——数据加载——数据绑定——页面处理。于此同时也开始了我的毕业设计之旅,毕业设计基本上是对平时工作的一个总结。这段时间也自己尝试去封装一些东西,包括自定义帮助、单据编码生成规则等。
再往后来,随着业务逻辑要处理的复杂程度的提高和项目的工期紧张,也开始通宵加班。也因为业务逻辑层打补丁的时候,对于客户实际使用过程会卡三到五分钟而把大量的业务处理开始尝试往存储过程中转移。也因为原产品对于计量单位处理的复杂程度而开始接触自定义函数。因此对于数据的知识得到了很大的提升。也正是这段时间,对于C#的理解或者说对于面向对象的语言有了更多的说不出来的感觉。代码已经开始有意识无意识的去运用面向对象的特点。
回顾这段时间,看看自己的技能树,可以说,对于C# Winform 和SQL SERVER 数据库知识 多加了几点。于此同时,也通过对基于BS结构C# Winform 的开发 也激发了一些隐藏技能,学习能力,和对语言的感悟能力。
四、工作的思考
1.关于技术
扯初这个话题是因为,现在很多面试的时候会问一些,二叉树算法,冒泡算法什么的,也可能去问一些 Int 变量能存放多少数,float与int 转换,堆栈啊什么的。必须说,对于技术的研究是无止境的,而且个人也很想也很愿意拿出时间来去研究一下。可是 有一次,客户需要一个参照界面,参照界面上可以填一个金额,然后,需要归集某一个单据上的金额,仅归集那些金额合计刚大于或者等于填写的金额的单据,并且优先归集那些金额小的。最初为了完成功能,我仅简单的写了一个游标循环,插入临时表,然后判断,这样大概用了几分钟才归集完,后来,我用了二分法,速度明显提升了很多,而且就当时的环境,没法继续优化了,感觉很有成就感的提交给客户了,结果客户仍旧不满意,觉得速度慢,他反而拿着一个用一个SQL简单实现的功能跟你做比较,说这个功能怎么怎么快,也可能是因为客户觉得本人刚毕业,没有更多的实力来处理这个问题,对本人有点歧视。还有一个例子就是可能选择了很多优秀的技术缩短了程序处理问题1秒的时间,可是也许是因为系统硬件的问题,也许是因为网络延迟的问题,也许是因为操作系统的问题,可能就造成用户体验不到这1秒优化所带来的感受,这也让我想起一个笑话,说的是苹果公司努力让平板变得薄一点,可是中国人喜欢贴膜,话费几亿的研究经费让平板变薄反而让一张膜给毁了。也许选择这样的几个例子说明不了太多问题,只是想说,无论你用了一个多牛的多复杂的业务处理,对于客户来说,个人感觉,他们在乎的仅仅是一个用户体验问题,就是说,你哪怕用最垃圾的技术,只要我想要的功能,能够在我能接受的范围内迅速的处理,我做最少的工作,就能实现我所有想要的功能。
当然,不是说不推崇对于技术的研究。就如一个正常的系统中声明的变量的个数可以用万甚至更高来做单位,可能适时的选择Int16要比Int32来的要好一些。只是这样的一些理解。
2.关于方向
不得不说,对于Java来说,可选的面还是非常多的,所以在平时又重新回顾了一下Java方面的知识,这包括Java基础、Servlet和Struts 1,Struts2 只是简单的看了一下,所有看过的框架都缺乏实际项目应用的经验。突然有一天感觉jQuery很强大,所以又拿出了将近半个月的空余时间,简单的学习了一下jQuery。不过这期间,因为那个200进8的一个同事跳槽了,去做SAP了,结果他之前处理的Silverlight的项目仍到我手上了,因为项目经理觉得我有这个能力处理这个问题,我也只是简单的看了看他的流程,像是Java的思路,但又不全是,牵扯到了WCF编程。但是我也只是简单的看了看他的思路,没有深入研究。我觉得Silverlight对于MS来说,是在HTML5时代的一个先行者,另一种不是太胖的富客户端(还是需要下载一堆东西),不过更后来的时候我在无意识状态下接触了ASP.Net MVC 我是从第三个版本看起的,并且缺乏ASP.Net Web的开发知识。不过我发现它的这种约定优于配置、控制器——模型——视图的思路,和Java的模式相仿,真是两大阵营的相互学习。控制器更像一个servlet 而模型更像JavaBean。看的时间比较短,可说的话也不多。
回顾一下现在,感觉自己的技能树有点乱,好像各种技能都涉及到了一些,但是没有特别优秀的技能,能打打中小怪,打BOSS还是得有人带领,至今也没找到一个让我专心点技能而不用考虑吃穿问题的工会,也算是一大遗憾。不过看着这么多技能也是蛮有成就感的,关键对于隐藏技能的提示,和未来因为隐藏技能所带来的优势也是不可限量。
五、关于技能树
这就是我的技能树,虽然有的技能点的少,但是还是在不断的加点过程中,有的技能点点的多了,处理问题也得具体分析。技能树总是随时更新的,现在截图的时候,是更新到了2012年8月3日。