相信大家或多或少都有遭遇技术瓶颈的感觉,那么不妨来各自谈谈自己的体会,因为感觉自己到技术瓶颈的时候,想突破的感觉真的很苦恼,如果能好好总结一下,或许对我们都有帮助,先说说我的经历:
1.最无知的阶段
最开始就是编程方面的基础知识,像编程语言,数据结构,操作系统,计算机组成原理,这个时期基本上是学什么都是一头雾水,各种各样的概念像山一样压得人喘不过气来,感觉看什么不懂什么,很迷茫,这个时候也最容易退缩,这个时期也是最难的,我在这个时期的时候大概是大一大二的时候,我本身专业是自动化,第二学历是计算机,本专业的人没有人学,农村来的孩子以前没有接触过计算机,最开始先学的java(听大肆师兄吹的就想学,后来才知道他根本就没学过也是听别人说的) ,那时候是2000年的时候,上来就windows 95了,没有接触过dos偏偏JDK是在dos下用的,当时以为这么高档的编写界面的IDE(呵呵那时候还不知道什么叫IDE),总是认为肯定是通过鼠标操作的,结果一点屏幕一闪就什么都没有了,当时总以为自己装的不对,反复的重装,那时候根本不知道什么csdn基本上就是上图书馆翻书,反复的捉摸哪装的不对,后来在大一开计算机文化基础老师说到了dos才恍然大悟,呵呵原来是这样,“真原始!”。于是又去图书馆找书,发现了JBuillder几点零忘了,就记得它装完了需要重起系统而学校的机房有还原卡,重起啥都没了。迫于无奈只好厚着脸皮去找机房老师,那时候我们学校废弃的电脑都在一楼机房里,那个老师对我很好和我说有一些旧电脑没有装还原卡,你可以找找。呵呵你能想象的到嘛,一个月的时间我什么都没干,几乎空闲就找这样的电脑了,基本上能用的电脑都是装了还原卡的,不能用的都是没装的,现在回忆起来,这个经历我是学的最多的。后来实在没有办法了,开始看dos。确实不止一次的想过放弃!幸运的是大一下学期计算机专业开c语言了,什么东西老师都告诉了,不会就问。当时最大的乐趣就是做课后习题,并且乐此不疲,几乎谭浩强的那本课后习题我都练过。我认为这个阶段突破瓶颈的方法是,别害怕别气馁坚持就是胜利,突破的标志就是你开始有目的性的有选择性的看书了,最起码你知道了,在这个时候数据结构离你还很远,还是关心指针比较切合实际一些。最开始的时候兴趣很重要,我的自学能力有可能就是这个时候练出来的。我现在印象最深刻的一本书是杨芙清的红皮的讲 OOP和OOD的书,书名忘了
呵呵当时理解了一些概念那个激动啊,想想还觉得好笑,另外就是有点不知天高地厚了,感觉C语言过时了,太简单就那么点事。
2.看什么都会又看什么都不会的阶段
有点基础了,兴趣更强了,开始飘飘然了!开始和不懂的人侃了,给别人的感觉很强。说什么都好象头头是道,看什么都会又好像什么都不会,其实那个时候我就会用Turbo C知道java的一些东西,这已经大二了,买了一台电脑,也知道了JDK怎么用了,呵呵当着别人的面在CMD里敲javac Java这些命令,整的一副高深莫测的样子,很是装了一把。但内心还是很苦恼的因为内心知道,该看的书太多了,该学的东西也太多了。其实这个阶段看书不是最重要的,只要找一本好书,练习例子就行了,最好能动手改改,我记得当时用的是Thinking in Java,语言一定要多练,基本上这个阶段我还是在语言里爬,基本上认为软件就是语言,学好了语言就是高手了。在这个阶段我最有成就感的就是买了一本 Java Swing的书,照它上面的例子,编了自己的第一个可视化程序,呵呵激动了一个下午,书名忘了,黄皮的上面有一个活口的扳手,相信很多人都看过。在这个阶段最重要的是一定要养成好习惯,给程序写注释了,给变量起名字了,另外就是一定要踏实,多动手,不要忽略程序的bug,不要关心程序只跑出个结果就成功了,对照书的内容好好分析总结一下,其实第一次程序出现死循环我也很兴奋的。我认为在这个阶段突破瓶颈的标志有几个:非常渴望和懂的人获得交流,上瘾了基本上不是去图书馆就在电脑前边,不屑于编一些小程序了,渴望编一些大的程序但是又不知道自己行还是不行,很困惑商业上的软件到底是什么样的,并且知道了计算机这个专业博大精深不知道学到什么时候才是个头,愿意和别人承认自己是个菜鸟了开始看数据库网络编程方面的书了。这个过程持续的很长几乎一直持续到我大学本科毕业。
3.学以致用阶段
研究生阶段有幸跟着导师进入了中国民航的一个特种设备研究基地,做机器人的课题。遇到了很多真正的高手,由于课题需要改用VC6.0,开始看WIN32 API(一本黄皮的教材,好像是WINDOWS 95/98程序设计,清华大学的)。那是我最充实的时候,天天都在进步,早上和晚上都有一种获得新生的感觉,我最庆幸的是在第一阶段看的那些书,在这一阶段都穿起来了,呵呵也终于有了自己多于1000行的程序了,并且我发现很多的高手在分析bug的时候都不能从原理上进行解释,我还凑活,这应当很庆幸当年图书馆没有白跑。或许这也是科班和非科班的不同吧。这个时候我遭遇过第一次程序内存泄露,第一次程序死机,第一次主动去看软件工程,第一次机器人爬到墙上掉下来,知道了CSDN进而知道了慰www.codeguru.com和www.codeproject.com等很多网站了。这个时候我学会了MFC STL 数据库编程,学会了网络编程,看了N多本C++方面的书。那时候经常早八点晚十点没有周六周日。并且很清楚的知道了,只要自己肯努力,自己一定能成功。突破学以致用最重要的标志最明显的我一直受用到现在的标志就是不太关注语言了,因为知道语言不是最重要的了。进图书馆总是找一些算法方面的书当然这本身也是课题需要,知道啃数据结构了。我非常庆幸的是我们学校有一个女老师,国内第一批恢复高考的大学生,东北大学数学系毕业,她很关注我经常和我说一些数学问题,还告诉我看一些什么样的书,在后来走向工作岗位的时候真是受用非浅。另外编写代码也变懒了,寄希望于什么东西都从网上下,除了算法模块否则根本就不愿编程序。现在回想起来我还是在细节上进行打拼,还是没有清楚的明白到底什么才是软件,最多也只能算是一个初级程序员。
4.明白真正软件的阶段
工作后顺利的进入了一家软件公司,在一个七人开发小组里做开发(该软件开发从九几年开始的(那时我还没上初中呢哈哈),软件的后台包括实时库部分是由二十多个博士硕士经历几年时间做出来的)我们小组的开发需求是给一些大型变电站(上万个数据采集点)做配变监测系统,我进入公司的时候项目已经启动三个月了,有幸看到了这个平台的很多源代码,终于知道了过去我做的软件简直就是小case中的小case。在发奋图强了半个月后,我发现我在大学的知识点绝对够了。
在进入项目组的第二天,就给我分配了任务,呵呵开始做一些小模块,由于做的很认真,质量效果都很好,研发部经理认为我虽然刚毕业,但是很有潜力,就让项目组内一位我很尊敬的高手(哈工大本科上交硕士,七年大型软件开发经验,手中无剑心中也无剑的那种人)带我,他是公司的技术主干,而且一直负责软件框架方面的工作,在后来的几周里简直就是集训般的编程序,而且他向我详细的阐述了用户的需求和整个软件架构,从底层的数据通道采集,网络通讯架构,实时库的原理,后台的数据处理,前台的数据处理直到前台的界面设计,现在想想我真的是很感谢他。
在我进入这个项目组两个月后,这位大牛不知道因为什么原因被调走了。这个时候项目已经进入测试阶段了,呵呵项目经理让工程部和我们小组的其他六个人测试程序,让我一个人负责bug修正(因为我的优点就是不但快而且好,另外他也没有别的人选了,除了大牛我知道的最多,别的牛都是负责一部分),呵呵短短两周时间200多个bug被我一个人搞定,至今我还为这件事情而得意,期间由于工作的需要我很是花了一番功夫研究了它的框架和代码,包括一些深层次的源码我都有幸看到。这个时候我才终于明白,程序框架和程序根本就不是一个技术层次。于是开始专研设计模式,UML一类的资料。
后来由于研发经理多次在公开场合表扬我引起了项目经理的反感,他处处找我麻烦,加上这种软件不是本专业,我还是喜欢控制软件,我选择了离开。但是我非常感谢这家公司。
在这个阶段我认为跳出瓶颈的标志就是开始向上走了已经开始用一种全局的眼光去看待程序了,再看程序的时候看到的已经不在是具体的代码了而是一种架构,一种数据走向交互图。基本上在这个阶段一般都不会困扰于具体的技术了,关注的信息资料大部分都是软件工程方面的资料了,喜欢用最简单的方法去解决复杂的问题了,知道软件开发过程包含很多事,开始关心CSDN主页上的内容了,喜欢了解业内的动态了,泡论坛的时间变少了。在这个时期的时候,做人做事情也更注重自己的风格了,很多事情也养成了自己的习惯了。一般也不开始盲目的去推崇什么技术或者什么算法了,坚信最实用就是最好的,人也变平和了少了一些锐气多了一些稳重。
5.技术转型阶段
搞软件的估计技术没有转过型的很少原因也很多,我离开了那家公司以后,有三个月的空白期一个是太累了想休息一下,另外就是有可能是毕业之后技术上没有经历什么太大的困难,总感觉真正自己感兴趣的软件不应当是这样的,应当很有挑战性才是,读书时想着捉摸着大型软件到底应当什么样,经历了以后才明白关键并不在于大小,自己做的高兴才好,开发的难点并不在于工程大还是工程小何况80/20法则估计大家也都听过,很多大型软件%80的工作内容都是重复的,没有什么新意。呵呵于是我还是回到了老本行,做我的运动控制软件,并且从事嵌入式系统的开发(新瓶装老酒呵呵),因为运动控制涉及到的算法太多了个人也喜欢。在这家公司一直做到现在。
我认为搞软件不可避免要进行一次技术转型,这个行业很累很辛苦,只有找到自己适合做、高兴做,愿意做的工作,才能让你继续走下去,因为行业待遇虽然高,但那也只能让你高兴几个月而已,你坚持不了多久的。所以这一阶段突破的标志就是发现自己喜欢的行业并且钻进去。
6.走在所在行业前列的阶段
不少人都是这个目标吧,在当前公司所开发的上位软件系统从需求分析到框架到编码一切的上位程序都是我作为主要人员进行开发的或者说上位这里就我自己,初期阶段用了两个月达到了国内同类系统用一年时间做出来的效果(与另外三家企业的软件相比,他们至今还没有超过我的初级阶段),当然这也与公司以前失败的经验有关。后来又用两个月的时间开发了国内一些客户需求好几年但其他软件公司都没有开发出来的功能,国外两家行业内比较强大的公司也只有一家有这样的功能,之后又用了两周时间开发了一种独一无二的功能只有我们的软件有。由于有对公司泄密之嫌,所以具体是什么就不说了,当然你也可以认为我在吹牛,在csdn里还有我其他的同事我想他们也会看到我的帖子。其中涉及到的很多关键性的技术和运动规划算法我想国内或许没有人比我更清楚,因为没有人比我们做的好,而且与他们接触,他们的程序10万行以上而我只用了两万多行的代码。当然如果公司不给我提供好的平台,我也没有这么好的机会,期间也得到了很多同事的帮助,我的人缘还不错。我并不是在这里吹捧自己,我只是认为这是技术人员发展的一个阶段而已。
最近项目已经快收尾了,最近也在开始总结一下自己,我今年28岁,工作到来年四月份就两年了,我下一步的路该怎么走?我现在已经不害怕技术了,经验告诉我只要我踏踏实实的肯学,基本上所从事的实际领域都可以学会只是时间问题,我还需要一些实际项目的历练,一定要更难的。
在这一阶段我总结出来了一个个人认为很重要的结论,技术人员要想突破自己的瓶颈,理论水平不提高光有实际经验是不太可能的,最终水平有限。前几个阶段的总结我几乎都是想到哪写到哪但是仔细回味一下任何一个瓶颈的突破主要还是理论水平的成长,经验和实践只能决定当前阶段的水平,实践只是外功,理论才是内功,没有过硬的理论,成长肯定是有限的,在技术人员的初级阶段理论没有实践重要,但是越到后期理论越重要。
1.最无知的阶段
最开始就是编程方面的基础知识,像编程语言,数据结构,操作系统,计算机组成原理,这个时期基本上是学什么都是一头雾水,各种各样的概念像山一样压得人喘不过气来,感觉看什么不懂什么,很迷茫,这个时候也最容易退缩,这个时期也是最难的,我在这个时期的时候大概是大一大二的时候,我本身专业是自动化,第二学历是计算机,本专业的人没有人学,农村来的孩子以前没有接触过计算机,最开始先学的java(听大肆师兄吹的就想学,后来才知道他根本就没学过也是听别人说的) ,那时候是2000年的时候,上来就windows 95了,没有接触过dos偏偏JDK是在dos下用的,当时以为这么高档的编写界面的IDE(呵呵那时候还不知道什么叫IDE),总是认为肯定是通过鼠标操作的,结果一点屏幕一闪就什么都没有了,当时总以为自己装的不对,反复的重装,那时候根本不知道什么csdn基本上就是上图书馆翻书,反复的捉摸哪装的不对,后来在大一开计算机文化基础老师说到了dos才恍然大悟,呵呵原来是这样,“真原始!”。于是又去图书馆找书,发现了JBuillder几点零忘了,就记得它装完了需要重起系统而学校的机房有还原卡,重起啥都没了。迫于无奈只好厚着脸皮去找机房老师,那时候我们学校废弃的电脑都在一楼机房里,那个老师对我很好和我说有一些旧电脑没有装还原卡,你可以找找。呵呵你能想象的到嘛,一个月的时间我什么都没干,几乎空闲就找这样的电脑了,基本上能用的电脑都是装了还原卡的,不能用的都是没装的,现在回忆起来,这个经历我是学的最多的。后来实在没有办法了,开始看dos。确实不止一次的想过放弃!幸运的是大一下学期计算机专业开c语言了,什么东西老师都告诉了,不会就问。当时最大的乐趣就是做课后习题,并且乐此不疲,几乎谭浩强的那本课后习题我都练过。我认为这个阶段突破瓶颈的方法是,别害怕别气馁坚持就是胜利,突破的标志就是你开始有目的性的有选择性的看书了,最起码你知道了,在这个时候数据结构离你还很远,还是关心指针比较切合实际一些。最开始的时候兴趣很重要,我的自学能力有可能就是这个时候练出来的。我现在印象最深刻的一本书是杨芙清的红皮的讲 OOP和OOD的书,书名忘了
呵呵当时理解了一些概念那个激动啊,想想还觉得好笑,另外就是有点不知天高地厚了,感觉C语言过时了,太简单就那么点事。
2.看什么都会又看什么都不会的阶段
有点基础了,兴趣更强了,开始飘飘然了!开始和不懂的人侃了,给别人的感觉很强。说什么都好象头头是道,看什么都会又好像什么都不会,其实那个时候我就会用Turbo C知道java的一些东西,这已经大二了,买了一台电脑,也知道了JDK怎么用了,呵呵当着别人的面在CMD里敲javac Java这些命令,整的一副高深莫测的样子,很是装了一把。但内心还是很苦恼的因为内心知道,该看的书太多了,该学的东西也太多了。其实这个阶段看书不是最重要的,只要找一本好书,练习例子就行了,最好能动手改改,我记得当时用的是Thinking in Java,语言一定要多练,基本上这个阶段我还是在语言里爬,基本上认为软件就是语言,学好了语言就是高手了。在这个阶段我最有成就感的就是买了一本 Java Swing的书,照它上面的例子,编了自己的第一个可视化程序,呵呵激动了一个下午,书名忘了,黄皮的上面有一个活口的扳手,相信很多人都看过。在这个阶段最重要的是一定要养成好习惯,给程序写注释了,给变量起名字了,另外就是一定要踏实,多动手,不要忽略程序的bug,不要关心程序只跑出个结果就成功了,对照书的内容好好分析总结一下,其实第一次程序出现死循环我也很兴奋的。我认为在这个阶段突破瓶颈的标志有几个:非常渴望和懂的人获得交流,上瘾了基本上不是去图书馆就在电脑前边,不屑于编一些小程序了,渴望编一些大的程序但是又不知道自己行还是不行,很困惑商业上的软件到底是什么样的,并且知道了计算机这个专业博大精深不知道学到什么时候才是个头,愿意和别人承认自己是个菜鸟了开始看数据库网络编程方面的书了。这个过程持续的很长几乎一直持续到我大学本科毕业。
3.学以致用阶段
研究生阶段有幸跟着导师进入了中国民航的一个特种设备研究基地,做机器人的课题。遇到了很多真正的高手,由于课题需要改用VC6.0,开始看WIN32 API(一本黄皮的教材,好像是WINDOWS 95/98程序设计,清华大学的)。那是我最充实的时候,天天都在进步,早上和晚上都有一种获得新生的感觉,我最庆幸的是在第一阶段看的那些书,在这一阶段都穿起来了,呵呵也终于有了自己多于1000行的程序了,并且我发现很多的高手在分析bug的时候都不能从原理上进行解释,我还凑活,这应当很庆幸当年图书馆没有白跑。或许这也是科班和非科班的不同吧。这个时候我遭遇过第一次程序内存泄露,第一次程序死机,第一次主动去看软件工程,第一次机器人爬到墙上掉下来,知道了CSDN进而知道了慰www.codeguru.com和www.codeproject.com等很多网站了。这个时候我学会了MFC STL 数据库编程,学会了网络编程,看了N多本C++方面的书。那时候经常早八点晚十点没有周六周日。并且很清楚的知道了,只要自己肯努力,自己一定能成功。突破学以致用最重要的标志最明显的我一直受用到现在的标志就是不太关注语言了,因为知道语言不是最重要的了。进图书馆总是找一些算法方面的书当然这本身也是课题需要,知道啃数据结构了。我非常庆幸的是我们学校有一个女老师,国内第一批恢复高考的大学生,东北大学数学系毕业,她很关注我经常和我说一些数学问题,还告诉我看一些什么样的书,在后来走向工作岗位的时候真是受用非浅。另外编写代码也变懒了,寄希望于什么东西都从网上下,除了算法模块否则根本就不愿编程序。现在回想起来我还是在细节上进行打拼,还是没有清楚的明白到底什么才是软件,最多也只能算是一个初级程序员。
4.明白真正软件的阶段
工作后顺利的进入了一家软件公司,在一个七人开发小组里做开发(该软件开发从九几年开始的(那时我还没上初中呢哈哈),软件的后台包括实时库部分是由二十多个博士硕士经历几年时间做出来的)我们小组的开发需求是给一些大型变电站(上万个数据采集点)做配变监测系统,我进入公司的时候项目已经启动三个月了,有幸看到了这个平台的很多源代码,终于知道了过去我做的软件简直就是小case中的小case。在发奋图强了半个月后,我发现我在大学的知识点绝对够了。
在进入项目组的第二天,就给我分配了任务,呵呵开始做一些小模块,由于做的很认真,质量效果都很好,研发部经理认为我虽然刚毕业,但是很有潜力,就让项目组内一位我很尊敬的高手(哈工大本科上交硕士,七年大型软件开发经验,手中无剑心中也无剑的那种人)带我,他是公司的技术主干,而且一直负责软件框架方面的工作,在后来的几周里简直就是集训般的编程序,而且他向我详细的阐述了用户的需求和整个软件架构,从底层的数据通道采集,网络通讯架构,实时库的原理,后台的数据处理,前台的数据处理直到前台的界面设计,现在想想我真的是很感谢他。
在我进入这个项目组两个月后,这位大牛不知道因为什么原因被调走了。这个时候项目已经进入测试阶段了,呵呵项目经理让工程部和我们小组的其他六个人测试程序,让我一个人负责bug修正(因为我的优点就是不但快而且好,另外他也没有别的人选了,除了大牛我知道的最多,别的牛都是负责一部分),呵呵短短两周时间200多个bug被我一个人搞定,至今我还为这件事情而得意,期间由于工作的需要我很是花了一番功夫研究了它的框架和代码,包括一些深层次的源码我都有幸看到。这个时候我才终于明白,程序框架和程序根本就不是一个技术层次。于是开始专研设计模式,UML一类的资料。
后来由于研发经理多次在公开场合表扬我引起了项目经理的反感,他处处找我麻烦,加上这种软件不是本专业,我还是喜欢控制软件,我选择了离开。但是我非常感谢这家公司。
在这个阶段我认为跳出瓶颈的标志就是开始向上走了已经开始用一种全局的眼光去看待程序了,再看程序的时候看到的已经不在是具体的代码了而是一种架构,一种数据走向交互图。基本上在这个阶段一般都不会困扰于具体的技术了,关注的信息资料大部分都是软件工程方面的资料了,喜欢用最简单的方法去解决复杂的问题了,知道软件开发过程包含很多事,开始关心CSDN主页上的内容了,喜欢了解业内的动态了,泡论坛的时间变少了。在这个时期的时候,做人做事情也更注重自己的风格了,很多事情也养成了自己的习惯了。一般也不开始盲目的去推崇什么技术或者什么算法了,坚信最实用就是最好的,人也变平和了少了一些锐气多了一些稳重。
5.技术转型阶段
搞软件的估计技术没有转过型的很少原因也很多,我离开了那家公司以后,有三个月的空白期一个是太累了想休息一下,另外就是有可能是毕业之后技术上没有经历什么太大的困难,总感觉真正自己感兴趣的软件不应当是这样的,应当很有挑战性才是,读书时想着捉摸着大型软件到底应当什么样,经历了以后才明白关键并不在于大小,自己做的高兴才好,开发的难点并不在于工程大还是工程小何况80/20法则估计大家也都听过,很多大型软件%80的工作内容都是重复的,没有什么新意。呵呵于是我还是回到了老本行,做我的运动控制软件,并且从事嵌入式系统的开发(新瓶装老酒呵呵),因为运动控制涉及到的算法太多了个人也喜欢。在这家公司一直做到现在。
我认为搞软件不可避免要进行一次技术转型,这个行业很累很辛苦,只有找到自己适合做、高兴做,愿意做的工作,才能让你继续走下去,因为行业待遇虽然高,但那也只能让你高兴几个月而已,你坚持不了多久的。所以这一阶段突破的标志就是发现自己喜欢的行业并且钻进去。
6.走在所在行业前列的阶段
不少人都是这个目标吧,在当前公司所开发的上位软件系统从需求分析到框架到编码一切的上位程序都是我作为主要人员进行开发的或者说上位这里就我自己,初期阶段用了两个月达到了国内同类系统用一年时间做出来的效果(与另外三家企业的软件相比,他们至今还没有超过我的初级阶段),当然这也与公司以前失败的经验有关。后来又用两个月的时间开发了国内一些客户需求好几年但其他软件公司都没有开发出来的功能,国外两家行业内比较强大的公司也只有一家有这样的功能,之后又用了两周时间开发了一种独一无二的功能只有我们的软件有。由于有对公司泄密之嫌,所以具体是什么就不说了,当然你也可以认为我在吹牛,在csdn里还有我其他的同事我想他们也会看到我的帖子。其中涉及到的很多关键性的技术和运动规划算法我想国内或许没有人比我更清楚,因为没有人比我们做的好,而且与他们接触,他们的程序10万行以上而我只用了两万多行的代码。当然如果公司不给我提供好的平台,我也没有这么好的机会,期间也得到了很多同事的帮助,我的人缘还不错。我并不是在这里吹捧自己,我只是认为这是技术人员发展的一个阶段而已。
最近项目已经快收尾了,最近也在开始总结一下自己,我今年28岁,工作到来年四月份就两年了,我下一步的路该怎么走?我现在已经不害怕技术了,经验告诉我只要我踏踏实实的肯学,基本上所从事的实际领域都可以学会只是时间问题,我还需要一些实际项目的历练,一定要更难的。
在这一阶段我总结出来了一个个人认为很重要的结论,技术人员要想突破自己的瓶颈,理论水平不提高光有实际经验是不太可能的,最终水平有限。前几个阶段的总结我几乎都是想到哪写到哪但是仔细回味一下任何一个瓶颈的突破主要还是理论水平的成长,经验和实践只能决定当前阶段的水平,实践只是外功,理论才是内功,没有过硬的理论,成长肯定是有限的,在技术人员的初级阶段理论没有实践重要,但是越到后期理论越重要。