技术是否有前途取决于个人
声明:这仅是个人头脑风暴,鉴于个人的经历和掌握的知识有限,所有的信息都无法保证没有错误。
很多技术人员或多或少都听过搞技术没有前途,博客园首页也有很多文章针对这个论调进行讨论。对于这些文章,我一直置之不理,对于我来说,技术有前途。如果要说没有前途,那是个人没有前途。有没有前途,其实这是和经济论相关的。如果做过生意的人,都知道,如果有一样东西,只有你有,别人没有,那这种东西一般具有很高利润;如果这样东西,你有他有,大家都有,那么你可能赔本了。因此,没有前途的不是技术,而是在于你自己是否懂得思变,懂得通过变化去获得别人没有的技能。顺便说明一下,我既是一个搞技术的,同时我也是做贸易的人,我恪守道义。
为什么会出现“技术无用论” 呢?举个例子,前一段时间,有一个公司让我做一个项目,涵盖一个基于Web的MIS、GIS和3D呈现的项目,价格是不高于5W,我评估了1天后拒绝了,因为这个项目要做下来的话,低于10W便亏本。但是为什么他们会出一个这样的价格呢?因为是现在的应用系统价格实在太低廉了,同时,搞IT的人普遍的工资也是一般般的。技术无用的结论,从这种表面的经济现象就可以看出来了,即技术是艰苦且廉价的。在世界上,所有的动物都是经济学家。如果一个搞技术的人掌握的技能,其它人都会,那么你这项技能就不值钱了。有用与无用与技术本身无关,而是跟经济学相关。
问题来了,技术如何有前途?从经济学角度看,就是只有你掌握了绝大部分人无法掌握的技术你才能获得比别人更多的收益。因此,答案你也发现了,技术如何有前途就是取决了你如何把握技能。一般来讲,那些你通过正规渠道能够学习的东西,别人也都能够做到,原因很简单,这在于人性。人是人他妈生的,大家都一样,思维方式差别也不大,只是因个人经历、教育背景等因素会有所不同。因此,你需要和一般做的不一样,比如你学习更刻苦,你看问题角度不一样,你选择也和别人不同,凡是同质的东西一般来说竞争力都是比较弱的。获取与别人不同的技能,需要因人而异,我无法提供一个统一模板。在我看来,学习是一个螺旋上升的过程,在刚开始阶段螺旋半径很小,上升也很慢,甚至感觉不到任何的提高,等积累到一定程度,螺旋半径和上升速度会呈加速度提高。在此,我会描述一下我的学习经历,与君共勉。
本科是在一个二流的二本学校上的,学的专业是计算机科学与技术。我的学习方法是,把时间集中花在听讲上,课堂时间充分利用,然后学以致用。我从大二开始学习VB,不过,学不懂。大三开始学习了数据库原理,使用VC++编写了2个MIS系统。这两个MIS系统都是我给自己定的题目,一个是考试管理,另一个是学生管理。大三下学期学了了PB,然后又做了一个学生管理系统。大四上学期学习了ASP,然后做了党员管理系统和就业管理系统。大四下学期学习了ASP.NET,做毕业设计课题,课题是基于Exchange Server 2003的工作流系统,我在这个项目上,把Exchange Server 2003的英文SDK翻译了60%(我英语很烂,4级62.5,6级最高分46,到现在还没有过六级),做成了一个工作流系统。在本科时期,我一直觉得自己很厉害,骄傲狂妄,因为我觉得我比一般的学生掌握了更多的技能。
研究生也是在同一个学校上的,学的是计算机应用技术专业。研一边上课,边帮别人做项目。当时做了2个工作流审批系统(都是16W的项目,我和另一个小伙一起做),基于学习的自动机理论和从Exchange学习到的工作流知识,设计了一个简单的工作流引擎,并基于这个引擎实现了这两个项目。研一下半学期,偶然的机会接触了一个公司的智能体SDK,我对该公司的产品非常的感兴趣,于是自己也思索如何设计。不过,我太菜了,不知道如何入手。于是,我就使用Reflector反编译了所有代码,然后打印出来分析,代码大概有80页A4纸。看完这个代码,让我感到很震惊,我发现自己和企业的差距是如何巨大了。因此,我使用了6个月时间分析了所有源代码,然后自己独立设计了一个新的Agent SDK。这个SDK比原来多了很多的功能。研二期间,导师让我们做一个20W项目,共9个研究生。我又自学了Delphi,并设计了这个项目的框架和体系结构,这个框架我命名为Common Form Framework,他提供了一个可复用的主界面,基于Delphi Package技术,支持模块化功能,从而能够适用团队协作开发。此外,由于这个项目的表单非常复杂,有一个表的字段是300多个,因为数据库是委托方提供的,无法进行修改,我们只能按照要求做。如果使用普通方式开发一个表单的话,会有很多繁琐的代码来进行CRUD操作。于是,我发明了一个Control Relation Mapping(思路是基于Hibernate支持的ORM之上的),这个组件能够使用自动生成的映射文件实现表单和数据库双向映射。在2006年的时候,我把它移植到C#。在研三期间,开始编写毕业论文,论文内容是MIS体系结构。我设计了一个轻量级和企业级体系结构,这个体系结构以Common Form Framework为核心,Control Relation Mapping、Object-Object Mapping、ORM、Service Wrapper、IOC等组件为基础。(PS:这一阶段我学习和领悟了一些设计模式和OOP设计原则)
2007年研究生毕业,我到西安Sybase上班,使用Java开发Sybase Central的插件。于是我又自学了Java,并快速的适应公司的要求。2008年因工作需要,我开始自学了Flex,使用Java + Flex开发基于SCC的插件。在工作业余时间,我把研究生学习的东西进一步深入研究和探索,研究了CAB、OB等源码,并找了几个搞技术的师兄弟们,设计了一些小东西。目前,基于自己的东西,我成立了一个小公司,公司业务分为“A SaaS中间件; B 基于MAOP的技术培训和中间件丛书; C CODEEYES网站; D 外包业务”,企业文化是“道法自然”。
在我目前经历中,我有几个很深的体会:(1)本科的时候很狂妄自大,实则非常的无知;(2)研究生毕业的时候,我感觉自己是刚爬出井口的青蛙,才突然发现计算机的知识是如此的丰富,我终于对自己有所了解了;(3)对我个人技能提高最快的是我看了别人的源码,然后自己分析和重新设计;(4)真正有用的东西往往是被老师和一般人忽略的所谓的高级知识,其实所有的知识都是基础知识,学习了基础知识了,才能创新;(5)学习没有诀窍,在于耐心,我对自己的定位是反应迟钝型的笨蛋,我需要付出比别人更多的努力才能够获得自己想要的东西;(6)实时对自己进行反省,只有通过不断的反省才能发现不足,在反省过程总,实时修正自己;(7)与人为善,待人真诚,明辨是非;(8)想要获得想要的东西,方式方法有很多种,每一种道义的方法都是值得尊敬的;(9)只要是你拥有的东西别人没有,那么这个东西就有用,不一定非得一条路走到黑,非得搞技术;(10)多研究点人性,这样才能更好的为人处事;(11)很多事情,你都很难说那是对的还是错的,即使到你死的那一刻,你都无法定论。这与小时候不一样,因为那时候我们总的得出一个结论,就是那个人好这个人坏;(12)无知很可怕,千万别认为自己知道的很多,认为自己很牛,如果有这样的想法,一般都比较菜。
附件是Microsoft ObjectBuilder源代码分析,通过这个代码分析,我相信我们可以从微软的这些高手们学到一些东西的。