本来题目想写为“十八年开发经历总结”,但是一想我的开发生涯还没结束,怎么就总结了呢。再说个人的一些积累和看法也不一定正确,所以还是改为小结比较妥当,言下之意自己还需要继续积累进步。本文主要谈几点个人的体会,这些内容有一部分可能只是我自己遇到的问题,相信还有一些其他程序员也曾遇到或者面对过。之前看到这些问题也思考过,三言两语回复过,现在以小结的方式写出来,算是对自己十八年经历的一个回顾。
一、如何开始写程序的
第一次接触电脑当然是在学校里,可以说什么都没学到,也什么都没学会,相反只是增加了对电脑的恐惧。第一次真正意义上让我开始学习电脑是在1992年,我所在的部门负责销售电脑。由于那时PC(当时叫家用电脑)的操作系统是DOS的,所以为了使用电脑必须学习一下基本的操作命令。我的第一次学会使用电脑就在那个时候,这为后来学习编程打下来了基础,因为当时不会操作电脑是不可能学习编程的。
1994年7月开始在公司的人事部工作了。当时人事部有一个386的台式机,那个时候386算是不错了。机器里装了WPS和Foxbase,这个可以说是标配。我的第一门编程语言就是这个Foxbase。应该说这个东西还是很容易上手的,再则当时领导不安排什么具体的工作,所以有了大把的时间学习,结果很快就掌握了。在完全赶走对电脑恐惧的同时,对编码产生了浓厚的兴趣。当时我完全是自学的,3个月后已具备开发一个小型管理系统的能力了。然后是学习C语言,我还特意买了一本书,书名是《C语言编程300例》。编译器是Turbo C 2.0。应该说C比Foxbase要难一些,但是我比较幸运,还算是学会了。作为一个成果是用C语言写了一些小程序,操作Foxbase的数据库文件,实现Foxbase中的部分命令的功能。
这些经历让我意识到自己的特长在软件开发方面,于是开始有萌发转型为职业程序员的念头了。
二、职业程序员转型之路
发现自己的特长是一件好事,因为可以定位自己的职业方向和规划,但是具体的操作却不是那么简单的,我做了一些思考和评估。其中涉及两个问题:第一,转型是否值得?第二,做职业程序员我的能力是否真的足够。
对于第一个问题,我老爸的意见是不太支持我转的。应该说当时的人都比较相信国营单位的所谓铁饭碗,安安逸逸过太平日子,少折腾。而且当时程序员是吃青春的观念非常浓郁,有的公司甚至以本公司程序员年轻作为炫耀的资本。所以丢掉手上的铁饭碗去干一个相对风险明显要高的职业,确实是一个很难下的决定。所以我面对这个问题是犹豫不决的。对于第二个问题,从我在本单位的表现来看,写程序是我的特长。但是与所谓的以写程序为职业的那些人来说,我是否有优势就不得而知了。从各种关系得到的反馈是很不乐观的。主要是两个原因:1. 我的专业不是计算机;2. 没有实际开发经验。
基于上述的情况,我做了一些准备工作,首先是我给自己出了一道题目,那就是开发一个病毒程序。如果我可以独立开发出一个符合当时公安部规定的病毒程序概念的程序,那么我就下决定转。选这个题目是就很有讲究的。首先这个方向我很感兴趣,其次这个问题足够的难。但是这个题目又不是难的完全脱离实际。因为我已经学了很长一段时间的汇编,平时对病毒资料注意搜集,所以对实现病毒程序的每一个技术细节我是清楚的,只是没有实际写出代码而已。在此后的4个月的时间里,反反复复经历了好几次噩梦一般的起伏,最终还是成功实现了。整个病毒代码大概1.4K,应该不算小了。那个病毒程序发作的症状是让计算机的蜂鸣器发一次声,感染的是当时一个非常著名的工具PC Tools。当运行PC Tools时,听到的那Beep声,可能是我生命中听到的最美丽的单一的声音了。
这个病毒的成功研发完成,让真正看到了自己的专长,于是下决心转行。针对学历和经验的问题,我当时是计划用职称来弥补。所以报名去考了程序员资格与水平考试,这个考试在2000年改了,现在已经不叫这个名称了。那是1996年的事情,结果第一次考试没有通过,那是一个非常大的打击。考试的经历让我意识到自己缺了一门课程,就是数据结构,从这件事情我发现有专业系统学习的和没有专业系统学习的差距是明显的。所以一方面自学数据结构,另一方面参加了一个专升本的成人高考,专业就是计算机。此后的几年基本上就是在积累了,一方面程序还在自己找课题写,另一方面在学习计算机本科段的课程。三年以后我以本科学历,高程证书,在2000年7月开始北漂,寻找我的第一份程序员工作,那年我已经30岁了。
希望我的转型之路可以給有同样困惑的朋友一点借鉴。基本上我转型的过程还是比较慎重的,属于稳扎稳打。其实这个过程还有很多的细节是挺考验人的,限于篇幅就不写出来了。以后有机会写总结的时候再来写吧。
三、第一份程序员工作
2000年7月到了北京,然后在比较困难的情况下用互联网应聘了一个公司。我非常幸运,由于该公司正好有人离职,急着需要人来补上,所以我得到了那个职位。这个职位的考验在于需要维护一个串口通信程序,这类程序我从来没有接触过,并且所有的资料都是英文的,对我来说这个挑战不小。征服这个苦难的方法是两个:1. 硬着头皮读代码,读懂它;2. 硬着头皮读英文文档,读懂它。因为既然出来了,那就没有退路了,只有拼了。读代码的经历让我学到很多东西,基本上以后这类通信程序我可以写的比较到位了。所以这里也建议各位同行,付出一点努力学点东西总是有益处的。
适应了这个职位后基本上就顺手了,而且还主动配合部门经理帮助其他的同事完成其他项目。此后,我就和相当一部分的程序员那样,不断的在跳槽,在同一个公司都没有能签到第二份合同。我就像一个沙粒一样在茫茫的世界中飘荡。
四、关于跳槽
在北京打工的几年发现,要想在一个公司干长是比较困难的。即便是自己主观上有这样的想法,但是实际发生的事情却总会导致跳槽的结果。可能雇主和雇员之间的雇佣关系比较松散,同时雇员有较大的择业自由也是一个原因吧。
首先想说的是,不要只是为了工资跳槽。还有他若干因素的重要性并不比工资低。比如:
1. 工作是否稳定
对于大部分人来说,能力是差不多的,稳定的工作可以避免频繁的跳槽,而导致去和比自己强的人竞争职位。我个人的观点是,今后在中国会出现越来越多的所谓大龄程序员。其原因是70后和80后这一辈的程序员的年龄开始逼近所谓的大龄了。在上世纪90年代非常流行的观点是,程序员这个职业是吃青春饭的。这里面有一个误区,那就是当时从事这个职业的确实都是年轻人,因为这个行业刚开始兴起,没有大量的老程序员。就业市场缺乏比较和选择,所以事实上造成了这个情况。但是当市场出现大量的高龄程序员时,用人单位就会比较选择了。以近几年看到的情况来说,40岁的程序员找工作也有很快的例子。所以,一个稳定的工作越来越会成为一个实际的目标。
其次,我个人的理解是,所谓打工成功,不是在于你的工资有多高,而是在于你在一个公司能干多久。因为绝大部分的软件公司都是合资,独资或者民营的,随着工作时间的增加,雇员和公司以及雇主会有越来深的情感,这在民营企业中尤为重要。这种情感的积累是个人在公司得到好发展和高工资的最好的基础。所以如果能在一个公司干长的话,就尽量不要跳槽。
2. 公司领导对自己是否赏识和器重
一个有缘分的或者好的上司是一笔财富,如果自己能遇到,那就请珍惜。
3. 从事的具体工作内容自己是否喜欢
开发工作包含的具体内容是非常多的,在一个职位上是否能够得到自己喜欢的工作内容,不是一件特别容易的事情。比如有的开发者,实际从事的是修改别人代码的工作,这种读别人的代码再修改的工作,相信很多人都是不愿意干的。如果公司提供的工作,允许你按照自己想法设计并写代码,这样的工作体验就大不一样了。所以如果你当前的工作内容正是自己的喜欢的,那么就不要轻易跳槽了。
4. 与同事的关系
与同事的关系在很大程度上决定了工作环境的好坏。如果自己觉得和同事的关系不错,合得来,相处的也很愉快,那么跳槽的时候就考虑一下,在新公司是否也能得到。我遇到的真实案例,就有人因为同事关系融洽,而不愿以跳槽的。另外,我也相信,一个公司的员工之间的关系都很融洽,那么这个公司也应该是不会太差的。
5. 其他
比如跳槽的机会成本,上班的距离等等。
五、创业
一直以来,看到不少打算或者已经创业,这里谈谈我的看法。我觉得创业不是一件今天想干明天就能行动的事情。创业需要等待机会,你需要一直准备着,等到机会来的时候就可以了。不要等到自己感觉打工不行了再开始创业,这个基本上是晚了,或者成功的可能性也不高了。就我自己来说,我真正开始创业是2009年开始的。而产品的开发从2006年就开始了,之后一直断断续续的在持续着。这期间解决了诸如核心技术问题,产品的定位,发展方向,市场调研等问题。同时,公司的注册,资金来源,办公地点,设备配置,人员招募,公司管理事务等等,这些问题也是在这一期间逐步解决的。于是在2009年回到北京,全职开发产品,正式开始创业。所以我的体会是,以非常淡定的心态,长期积累和准备是可以开始创业的基础。切不可认为自己简单搞一个东西卖钱,就可以创业了,这是不切实际的。当今社会总体上是公平的,没有什么核心竞争力或者核心技术就想赚钱基本上是不现实的。
六、学习
记得我还没有入行的时候,在电视中就听到谭浩强老先生说过,计算机这行发展快,需要不断的学习。如果说现在要选最重要的一句话的话,那么谭浩强老先生说的这句话对我来说,至少可以排在前三名。对于程序员来说学习是终身的事情,当然这个学习是广义的。
很多人的看法是,随着年龄的增长,个人的学习能力在退步。人在80岁时大脑只相当于20岁时的一半大小,所以这个说法当然不错。当初我也是这么想的,所以一度花力气准备考系统分析员资格,打算专职做设计,不用写代码了。但是随着自己年龄的增加,我发现对于还在职场的大龄或者高龄程序员来说却不是这样的,至少对我来说是如此。这里面一个关键问题是,大龄或者高龄程序员的经验发挥了极为重要的作用。对于一个学生往往是空白的被动接受知识,但是对于一个大龄或者高龄程序员来说,可以带着经验来学习。所以学习的速度不但没有减缓,反而是加速的,学习知识的速度会越来越快。在知识的掌握和在编码中的应用程度这两点上,有经验的程序员的优势更为突出。这是年轻人无法比拟的。
所以我觉得不要对新的技术和知识有抵触或者畏惧的心理,尝试去接触,了解并使用其实不是很难。技术虽然发展很快,但是毕竟也是逐步发展的,在每一步中更新的内容并不多。所以,每次都跟上,不要掉队,维持终身学习的状态也不是一件难事。
一、如何开始写程序的
第一次接触电脑当然是在学校里,可以说什么都没学到,也什么都没学会,相反只是增加了对电脑的恐惧。第一次真正意义上让我开始学习电脑是在1992年,我所在的部门负责销售电脑。由于那时PC(当时叫家用电脑)的操作系统是DOS的,所以为了使用电脑必须学习一下基本的操作命令。我的第一次学会使用电脑就在那个时候,这为后来学习编程打下来了基础,因为当时不会操作电脑是不可能学习编程的。
1994年7月开始在公司的人事部工作了。当时人事部有一个386的台式机,那个时候386算是不错了。机器里装了WPS和Foxbase,这个可以说是标配。我的第一门编程语言就是这个Foxbase。应该说这个东西还是很容易上手的,再则当时领导不安排什么具体的工作,所以有了大把的时间学习,结果很快就掌握了。在完全赶走对电脑恐惧的同时,对编码产生了浓厚的兴趣。当时我完全是自学的,3个月后已具备开发一个小型管理系统的能力了。然后是学习C语言,我还特意买了一本书,书名是《C语言编程300例》。编译器是Turbo C 2.0。应该说C比Foxbase要难一些,但是我比较幸运,还算是学会了。作为一个成果是用C语言写了一些小程序,操作Foxbase的数据库文件,实现Foxbase中的部分命令的功能。
这些经历让我意识到自己的特长在软件开发方面,于是开始有萌发转型为职业程序员的念头了。
二、职业程序员转型之路
发现自己的特长是一件好事,因为可以定位自己的职业方向和规划,但是具体的操作却不是那么简单的,我做了一些思考和评估。其中涉及两个问题:第一,转型是否值得?第二,做职业程序员我的能力是否真的足够。
对于第一个问题,我老爸的意见是不太支持我转的。应该说当时的人都比较相信国营单位的所谓铁饭碗,安安逸逸过太平日子,少折腾。而且当时程序员是吃青春的观念非常浓郁,有的公司甚至以本公司程序员年轻作为炫耀的资本。所以丢掉手上的铁饭碗去干一个相对风险明显要高的职业,确实是一个很难下的决定。所以我面对这个问题是犹豫不决的。对于第二个问题,从我在本单位的表现来看,写程序是我的特长。但是与所谓的以写程序为职业的那些人来说,我是否有优势就不得而知了。从各种关系得到的反馈是很不乐观的。主要是两个原因:1. 我的专业不是计算机;2. 没有实际开发经验。
基于上述的情况,我做了一些准备工作,首先是我给自己出了一道题目,那就是开发一个病毒程序。如果我可以独立开发出一个符合当时公安部规定的病毒程序概念的程序,那么我就下决定转。选这个题目是就很有讲究的。首先这个方向我很感兴趣,其次这个问题足够的难。但是这个题目又不是难的完全脱离实际。因为我已经学了很长一段时间的汇编,平时对病毒资料注意搜集,所以对实现病毒程序的每一个技术细节我是清楚的,只是没有实际写出代码而已。在此后的4个月的时间里,反反复复经历了好几次噩梦一般的起伏,最终还是成功实现了。整个病毒代码大概1.4K,应该不算小了。那个病毒程序发作的症状是让计算机的蜂鸣器发一次声,感染的是当时一个非常著名的工具PC Tools。当运行PC Tools时,听到的那Beep声,可能是我生命中听到的最美丽的单一的声音了。
这个病毒的成功研发完成,让真正看到了自己的专长,于是下决心转行。针对学历和经验的问题,我当时是计划用职称来弥补。所以报名去考了程序员资格与水平考试,这个考试在2000年改了,现在已经不叫这个名称了。那是1996年的事情,结果第一次考试没有通过,那是一个非常大的打击。考试的经历让我意识到自己缺了一门课程,就是数据结构,从这件事情我发现有专业系统学习的和没有专业系统学习的差距是明显的。所以一方面自学数据结构,另一方面参加了一个专升本的成人高考,专业就是计算机。此后的几年基本上就是在积累了,一方面程序还在自己找课题写,另一方面在学习计算机本科段的课程。三年以后我以本科学历,高程证书,在2000年7月开始北漂,寻找我的第一份程序员工作,那年我已经30岁了。
希望我的转型之路可以給有同样困惑的朋友一点借鉴。基本上我转型的过程还是比较慎重的,属于稳扎稳打。其实这个过程还有很多的细节是挺考验人的,限于篇幅就不写出来了。以后有机会写总结的时候再来写吧。
三、第一份程序员工作
2000年7月到了北京,然后在比较困难的情况下用互联网应聘了一个公司。我非常幸运,由于该公司正好有人离职,急着需要人来补上,所以我得到了那个职位。这个职位的考验在于需要维护一个串口通信程序,这类程序我从来没有接触过,并且所有的资料都是英文的,对我来说这个挑战不小。征服这个苦难的方法是两个:1. 硬着头皮读代码,读懂它;2. 硬着头皮读英文文档,读懂它。因为既然出来了,那就没有退路了,只有拼了。读代码的经历让我学到很多东西,基本上以后这类通信程序我可以写的比较到位了。所以这里也建议各位同行,付出一点努力学点东西总是有益处的。
适应了这个职位后基本上就顺手了,而且还主动配合部门经理帮助其他的同事完成其他项目。此后,我就和相当一部分的程序员那样,不断的在跳槽,在同一个公司都没有能签到第二份合同。我就像一个沙粒一样在茫茫的世界中飘荡。
四、关于跳槽
在北京打工的几年发现,要想在一个公司干长是比较困难的。即便是自己主观上有这样的想法,但是实际发生的事情却总会导致跳槽的结果。可能雇主和雇员之间的雇佣关系比较松散,同时雇员有较大的择业自由也是一个原因吧。
首先想说的是,不要只是为了工资跳槽。还有他若干因素的重要性并不比工资低。比如:
1. 工作是否稳定
对于大部分人来说,能力是差不多的,稳定的工作可以避免频繁的跳槽,而导致去和比自己强的人竞争职位。我个人的观点是,今后在中国会出现越来越多的所谓大龄程序员。其原因是70后和80后这一辈的程序员的年龄开始逼近所谓的大龄了。在上世纪90年代非常流行的观点是,程序员这个职业是吃青春饭的。这里面有一个误区,那就是当时从事这个职业的确实都是年轻人,因为这个行业刚开始兴起,没有大量的老程序员。就业市场缺乏比较和选择,所以事实上造成了这个情况。但是当市场出现大量的高龄程序员时,用人单位就会比较选择了。以近几年看到的情况来说,40岁的程序员找工作也有很快的例子。所以,一个稳定的工作越来越会成为一个实际的目标。
其次,我个人的理解是,所谓打工成功,不是在于你的工资有多高,而是在于你在一个公司能干多久。因为绝大部分的软件公司都是合资,独资或者民营的,随着工作时间的增加,雇员和公司以及雇主会有越来深的情感,这在民营企业中尤为重要。这种情感的积累是个人在公司得到好发展和高工资的最好的基础。所以如果能在一个公司干长的话,就尽量不要跳槽。
2. 公司领导对自己是否赏识和器重
一个有缘分的或者好的上司是一笔财富,如果自己能遇到,那就请珍惜。
3. 从事的具体工作内容自己是否喜欢
开发工作包含的具体内容是非常多的,在一个职位上是否能够得到自己喜欢的工作内容,不是一件特别容易的事情。比如有的开发者,实际从事的是修改别人代码的工作,这种读别人的代码再修改的工作,相信很多人都是不愿意干的。如果公司提供的工作,允许你按照自己想法设计并写代码,这样的工作体验就大不一样了。所以如果你当前的工作内容正是自己的喜欢的,那么就不要轻易跳槽了。
4. 与同事的关系
与同事的关系在很大程度上决定了工作环境的好坏。如果自己觉得和同事的关系不错,合得来,相处的也很愉快,那么跳槽的时候就考虑一下,在新公司是否也能得到。我遇到的真实案例,就有人因为同事关系融洽,而不愿以跳槽的。另外,我也相信,一个公司的员工之间的关系都很融洽,那么这个公司也应该是不会太差的。
5. 其他
比如跳槽的机会成本,上班的距离等等。
五、创业
一直以来,看到不少打算或者已经创业,这里谈谈我的看法。我觉得创业不是一件今天想干明天就能行动的事情。创业需要等待机会,你需要一直准备着,等到机会来的时候就可以了。不要等到自己感觉打工不行了再开始创业,这个基本上是晚了,或者成功的可能性也不高了。就我自己来说,我真正开始创业是2009年开始的。而产品的开发从2006年就开始了,之后一直断断续续的在持续着。这期间解决了诸如核心技术问题,产品的定位,发展方向,市场调研等问题。同时,公司的注册,资金来源,办公地点,设备配置,人员招募,公司管理事务等等,这些问题也是在这一期间逐步解决的。于是在2009年回到北京,全职开发产品,正式开始创业。所以我的体会是,以非常淡定的心态,长期积累和准备是可以开始创业的基础。切不可认为自己简单搞一个东西卖钱,就可以创业了,这是不切实际的。当今社会总体上是公平的,没有什么核心竞争力或者核心技术就想赚钱基本上是不现实的。
六、学习
记得我还没有入行的时候,在电视中就听到谭浩强老先生说过,计算机这行发展快,需要不断的学习。如果说现在要选最重要的一句话的话,那么谭浩强老先生说的这句话对我来说,至少可以排在前三名。对于程序员来说学习是终身的事情,当然这个学习是广义的。
很多人的看法是,随着年龄的增长,个人的学习能力在退步。人在80岁时大脑只相当于20岁时的一半大小,所以这个说法当然不错。当初我也是这么想的,所以一度花力气准备考系统分析员资格,打算专职做设计,不用写代码了。但是随着自己年龄的增加,我发现对于还在职场的大龄或者高龄程序员来说却不是这样的,至少对我来说是如此。这里面一个关键问题是,大龄或者高龄程序员的经验发挥了极为重要的作用。对于一个学生往往是空白的被动接受知识,但是对于一个大龄或者高龄程序员来说,可以带着经验来学习。所以学习的速度不但没有减缓,反而是加速的,学习知识的速度会越来越快。在知识的掌握和在编码中的应用程度这两点上,有经验的程序员的优势更为突出。这是年轻人无法比拟的。
所以我觉得不要对新的技术和知识有抵触或者畏惧的心理,尝试去接触,了解并使用其实不是很难。技术虽然发展很快,但是毕竟也是逐步发展的,在每一步中更新的内容并不多。所以,每次都跟上,不要掉队,维持终身学习的状态也不是一件难事。