我大学的专业是基础数学,那种纯理论的数学,让很多人昏头转向的抽象。我自己其实也比较昏头转向,比如加罗瓦群、希尔伯特空间等,都是抽象中的抽象。 数学毕竟是计算机的基础,我们数学系也开一些计算机课程。
96年我们在DOS6.22上玩超级玛丽,FORTRAN课程让我现在只记得72这个东西。之后几年,学过c语言、pascal语言、选修dephi、还有早已记不清的一种数据库。操作系统从DOS6.22到win95,到win98。
大学四年,学校是发机票上电脑室的,可是,直到毕业我还没用完这些机票----那时根本就讨厌计算机。总之,毕业后我基本上是个电脑盲。
唯一让我后来有点用的是c语言,谭浩强的《c语言程序设计》这本书;因为这本书在后来让我走上了自学之路,那是在我及其无聊的时候,c语言编程赶走了我的寂寞,让我自得其乐。如果当时那本书在毕业的时候,以五毛钱一斤的价格,卖给收废品的,那今天我可能还在学校做老师,教数学呢。
今天回头来看,在大学认真读书还是有必要的,因为中国人喜欢以起点论终点,加之中国人又多,一个岗位好多人竞争,所以名校比非名校有优势,成绩好比成绩差的有优势,虽然不是绝对的,但大多数情况还是这样。
当然,大学没有学好,也不必在意,活到老、学到老,我们知道了自己的兴趣,意识到需要学习时,就认真学习自己需要的各种知识,也为时不晚。我也是后来自学的,智力相当的开发人群中,没感觉到比计算机科班出生的差多少;如果智商、情商、逆商相差很大,那自然有差距。
教书生涯,两年不到
高等数学。
小城市,清闲、无聊、寂寞。
开始,教书与麻将占据生活全部,麻将打得太多,自己见了麻将就怕的地步。
某天,一个学VB的老师,前来问我道,“梁兄,可曾在TurbC上写过小程序没有?”我说没有。他就正告我,“梁兄,还是学一点吧,c语言挺牛的,安装盘在这里。”我郑重地接过他那3.5英寸的A盘,跑到学校的电脑房,选了一台好机器安装起来。
之后的日子里,我带着手头上唯一一本计算机书----谭浩强的<<C语言程序设计>>,从头到尾细细阅读,把所有的习题全部做了一篇,编程题是先在备课本上画好流程图,然后在纸上写出程序,因为电脑房的电脑是大家供用的,所以我得预先准备好,然后有机会使用电脑了,就抓紧时间调试程序。
那种学习方法和过程,在今天是不可想象,然而,那段时间是最快乐的,可能是很多人不可理解的快乐。
学完了这本书,做完了所有的习题,我感觉自己是个高手了。然后,就直接向校长辞职,投奔我在广州的同学,立志做一个程序员。
今天看来,那段时间的学习,为我的C语言基本功打下一定的基础。然而,那时的我离真正的开发人员还太远,以至我找工作碰得头破血流,真可谓往事不堪回首,莫重来。
早春二月下广州
天河区。
N次面试,N+1次碰壁,因为有一次简直被一个年轻程序员羞辱,其打击力度算两次。
没有实战经验、没有工作经验-------不同的公司,相同的拒绝理由。
郁闷!
悲愤!!
没有工作经验就不能做程序员了吗?!
痛定思痛,痛何如哉。
一学VB老乡劝我:“梁兄,你还是学VB吧,VB容易学,容易找工作”;我断然拒绝,非学C++不可!
同学把它公司的一个网关系统给我,VC++6.0开发的,那个时候很流行的开发平台。我闭门谢客,强行分析,从需求文档、到系统设计、到详细设计、到源代码、到单元测试案例,认真分析了一个月。
其间,一次他们在傍边的电脑放A片,声音开得越来越大,我回过神来,只“啊”了一声,又回过头去埋头苦读代码。
一月后,终于开关,大功告成。同时经过同学的精心包装,我俨然具有2年开发经验的C++程序员了,在VC++6.0\网络通讯方面是“精通”了。
三月中,更新简历,再找工作,连中两家,选择其一,SP公司,在两千年前后做SP是比较好混的。
回首往事,贵在坚持。
工作经验有时也可以造出来的,问题不在于你的工作经验是否真实,而是你的能力是否和经验不相上下。
小公司,一呆三年
刚开始,朦朦胧胧中开发,对各个基本技术点都把握不清楚,也对各个技术点充满了好奇。
几个同学都是单身汉,合租在一个小区里,同学都是一毕业就进入软件公司的,已经有2年多工作经验。其中一个在大学四年时间里一直在学计算机编程,所以当时他技术已经很不错了。
刚开始我还买了几本国内书:《精通VC++6.0》、《21天学会VC++6.0》等。技术最好的同学告诉我,不要再买这些国内教授的“精通”书了,一定要买国外那些大师级的人写的书,而且要多看几遍。
这之后,我通读过《c程序设计语言》(经典K&C)、《程序设计实践》(K&R,经典的C方面编程实践)、《c++程序设计语言》(C++之父Bjarne Stoustrup)、《深入浅出MFC》(侯捷)、《C++ Primer》(3rd)、《深度探索C++对象模型》、《编程珠玑》、《重构》等。这些书让我大概知道怎么写程序了,同时也为这些书着迷,有些还看了好几遍。
记得当时每天下班回来,我主要做两件事:看这些书,另外就是把白天上班碰到的问题和看书碰到的问题,向技术最好的同学一个个问题请教,他也耐心地回答我的所有问题。这样的日子大概有半年,这段时间我的知识面得到很快的扩宽;半年后我基本上不用再问他了,就是有也是互相讨论了。
所以,刚开始进入一个行业,如果有一个有经验的人指点一下,你将少走一些弯路,少辛苦摸索一些。我一直都很感激这位带我入行的同学,跟他讨论技术有一种发自内心的快乐。之后好几年时间里,我才碰到一个做java的同事,在技术上才有真正的共鸣;其它那些擦肩而过的同事们,要么他们做开发完全是为了生活、为了这个职位这个待遇,要么他们也真正有兴趣学点技术但不善于谈论技术,或者也可能我们谈不到一块去。
三年之后,离开。
因为当你看看周围的开发人员,没有一个技术超过你时,那种没有交流的寂寞,让你不得不离开。
从现在看来,要想学点管理,也必须离开这种小公司。
离开小公司
这段时间,值得回忆,值得思考。
上一节已经说过,我在第一家公司做就是三年,整整三年,真的是协议到期就离开的。在这家公司其实已经做到项目经理的位置,但我从来也没有心思去涉及管理,认为小公司没必要搞什么管理,我自己保持对公司的所用技术和所有业务最熟悉就好了。现在来看,当然是十分错误的。
离开这小公司的理由,其实很简单:一是我要工资再涨1000;二是自己想去中型公司,最好能去大公司,去见见世面,长点见识。
第一个要求跟老板就谈不好。老板当然不想我走,但也不愿意加这么多,刚开始只愿意按公司规定的5%比例加,后来看我态度强硬,就要我真正参与管理,过一段时间加。其实在第二个年头里,那时正是用人之际,公司两次给我提薪,一年不到涨了2000。但现在公司趋于稳定,业务也处于饱和状态,当然公司不会破常规的加薪了。搞笑的是,最后公司还是愿意妥协,不过那时我已经向大家宣布我要走了,当然不会再留了。
其实能不能得到加薪,是一个很容易判断的事:当公司急需人才时,一个是业务快速做大,急需技术跟上;二个是公司人员变动很大,老员工一下子走光,需要你很快顶上来时;一般这两个时候,你可以大胆提加薪,会如愿以偿。而当公司趋于稳定时,不管大中型公司,还是小公司,老板都不会加多少的,一般会按制度来,按很小比例来加,很多还是几年一次的,所以少的可怜,还补不上物价上涨呢。
刚毕业的、步入社会不久的学生,要理解这个道理,不要在该提加薪的时候跟老板客气,而在不该加薪的时候,却跟老板废话,最后搞不好自己走人。
和我玩的很好的一个同事,技术水平也很高,他就曾经常提一句话:要大幅度加工资的唯一办法,就是跳槽!虽然不能说明全部情况,但大部分情况却是正确的。
还有一个现象,就是小公司老板一般都自己在公司和大家一起上班,所以他知道谁在做事,做的怎样。所以你技术好,工作做的好,老板一般是看在眼里的,一般不会给那个偷懒的人待遇高,而给你待遇低;所谓小公司做事,大公司做人,也就是这个道理。但是,老板可能会口头上感激你,夸奖你,说你忠于公司、技术好、业绩好,目的是让你感激流涕,为他卖命,同时不要求太多待遇。
千万别被这种口头的感激迷惑,老板不会跟你真正做朋友的;我们工作上能保证做好,却不要为老板累死累活的干,保持一个度是很重要的。在工作、学习、身体、家庭之间,寻求一个很好的平衡点,我个人感觉是很重要的。
很多人一味寻求高技术水平,不停的工作啊学习新老技术啊,上班累到半死,下班还把大部分时间投入工作学习,把老婆小孩全冷落,其实是很糟糕的生活。
其实你多看看,在一个公司里,技术好的牛的,不一定是待遇最好的;中国的软件公司现象,是技术+管理比较好走的。不要去看那些特例,特例是不适合大多数普通人的。
题外话:
写blog有什么意义?如果说仅仅是记录生活的话,可以放到自家的硬盘上,所以除了记录,另一个重要原因就是交流。如果我的经历能给后来者一点启示,当然是更好的了。
很多人会说,你技术这么差,混得也不好,这经历经验有什么用。其实,厉害的人的经历经验反而对大多数平凡的人没有什么用处,比如打工皇帝唐竣,他说出他的经验和做法,你认为你能学么,你能够超越么。
还有,经历可以作为经验,也可以作为教训。有时教训更重要。
学到东西最多的两年
能进去完全是我在第一家公司的老同事的大力推荐,我一直都是十分感激他的;而他在JAVA方面的技术修养,也是我很佩服的。
在软件技术上,我一直佩服很多人,但那些人都是国内外的名人牛人,其实跟我这个小人物没什么关系的,那是粉丝跟超级明星的关系。而在我所有工作过的公司里,我所接触的技术人员当中,真的没有几个让我佩服的。倒不是我自傲,而是让我佩服总需要确切的理由,总需要一定的技术水平和技术修养,以及为人处事等方面的修养。
让我十分欣慰的是,我在这家公司工作中,再也没有碰到以前5家公司的种种恶心行为。我感觉原因有两点:一是相对那些小公司的制度,这里的制度比较完善;二是这里的人员素质比较高,不管是开发人员还是测试人员。
先说我们的部门经理,他已经不做任何具体的开发和测试工作了。他为人处事十分低调,他自己同时在广州经营着不错的公司,却从来不在我们面前显摆。平易近人,分配工作从来不会蛮横地命令式进行,而是有商量有讨论的,当然任务分配和工时安排,部门里是有规划的,通过大家共同讨论最后一起确定的,特别是中大型开发。
我进这家公司时,已经有做技术管理的想法,所以一开始就带着学习的心态,随时注意这里的开发流程、测试流程、管理模式。正好,我们的部门经理在管理上,好好地给我上了一课,加之和上5家公司那些蹩脚的管理者两相对比,更让人体会到一个好的管理者应该怎么做。
再说说部门里的老员工,没有一个欺生的,那种对新人不理不睬的现象至少在我所工作的两年时间里,我没有看到过。其实大部分老员工,工作时间都没有我长,年龄也没有我大,可是一部分老员工在技术水平和修养上,真的让我佩服和尊敬。正因为有那么一些比较高素质的同事,所以让自己更能静下心来做好工作,学些技术,学些开发和测试管理流程。
记得CS游戏把我们拉得很近,特别是周五下班后,大家约在一起,先一起吃饭,然后回公司分成两组对战,那可能是很多同事感觉最快乐的一段时光。
单身汉和家眷不在广州的,常常下班了一起去吃饭,边吃边聊各种技术和设计方案,聊社会新闻娱乐,也是氛围很好的一段时光。
总之,在这里工作,不光是我年薪上了10万以上(那个时间在广州,仅仅做开发,就我个人水平,感觉不错了,也不知道广州是怎样的一个平均水平,也可能我的待遇很低),而且,我在开发流程、测试流程、技术管理都得到了很大的提高,这段时间我已经会主动去观察、去思考、去对比、去消化。正如很多人所知道的,这些东西是不能生搬硬套的,但是只要你灵活变通,取其精髓,大中型公司的成熟经验,同样可以很好的运用到中小公司的,当然平行级公司的互相借鉴就更有可能了。
两年后,离开。
其主要原因是我儿子快出生了,我而在另一个城市早已经买了房子,那里有亲戚,有很好的照料。而且当时一下子就找到一个工作,就是在现在的公司做开发总监,所以不如回到这个生活比较悠闲的城市来,对我这样的普通开发人员来说,生活压力就相对小一些。
开发和管理工作
从广州回到汕头,还是做软件开发:开发和管理工作。
汕头的IT企业,基本上99%的企业不是卖硬件、搞集成,就是做点小网站。也没听说有什么国内外的公司在这里设办事处、分公司的。
软件公司比较集中的两个地方是科技馆和高新区。
我是在科技馆上班,科技馆在海滨路,环境是不错的。以共才十七八层,1到5楼都不是公司入住的,后来才知道是管理科技馆的科技局办公室,好像楼顶几层也是科技局的办公之地。整个科技馆,科技局就占了三分之一,国营单位办公场所就是大。而剩下的三分之二,企业入住的情况怎样?有一次我吃完中饭,从6楼闲逛到18楼,几乎每一层都有空着的房间,总之企业少的可怜。
所以这里找个一般的软件开发工作都是很难找到的,5k/月以上的待遇就是主管级别的工资了,2500~4000/月的待遇就是熟练的c++/java开发人员的待遇,工作一两年甚至更长拿2000/月的待遇也是常事。
而这里招人也是很难招到的,软件开发人才少得很,高中毕业读两年北大青鸟培训,都算是软件人才呢。由于交通不便,发展停顿,外来人口并不多,而本地人重经商不重技术,年轻人不喜欢搞技术的比例很大。
主管的风格,就是部门的风格?
不一定完全是这样,但我认为主管的做事风格对部门的风格影响很大。
物以类聚、人以群分,主管在招人时就进行了一定的筛选,这种筛选是必然的。
主管身体力行的做事方法和过程,以及管理过程提倡的东西,这两方面影响整个部门。
由于开发部门人手有限,我自己根据项目紧急程度,参与Unix c++、vc++、java三方面项目的开发,在系统设计、具体编码、单元测试过程中,我一方面自己身体力行地尽量做好每个涉及的环节,另一方面反复强调我的观点。
如果问一年半来,在技术管理过程中,我最能记得有那几点?那就是:
1、反复强调沟通合作。提倡面对面沟通、及时沟通,三句话讲不清楚的,反对在QQ、MSN上说来说去。禁止绝对地按人分模块(注意:首先肯定是按人分模块负责的,有一个主要负责人),然后大家互不相干,在开发小组内是不行的,因为这种做法阻止了沟通合作,互相帮助,互相分担工作。
2、反复强调软件功能准确性、程序稳定性容错性、代码简洁、可读、可维护、可扩展性。这是老生常谈的东西,也是很难把握的东西,也是要一定时间以后才能看出效果的。重要的做法是,我自己亲自写代码,然后进行集中培训分析,随时抓住机会点评我的代码和他们的代码。身体力行是很必要的,其实有时就是三五分钟。
3、坚持5天制,坚持不加班。汕头5天制的软件企业很少,多是5天半和6天制。我刚来公司时其实也是5天半,一段时间后才争取到现在这样。重要的是,我反复强调不加班,5:30下班走人,但一定要在白天8小时给我高效工作,至少要按我的工作安排完成任务!
我一直认为,从长远地总体上来考虑,加班是不可取的,是对工作效率和积极性很不利的,是一个坏习惯。社会上常见一些主管以加班来衡量一个员工,我认为是极其错误的,不知道有经验高技术的老员工,在他眼里是什么地位。
4、强调设计、强调文档。
我亲自教大家怎么用PowerDesiger来画类图、部署图、时序图、活动图、状态图,并教他们在什么情况下适合使用什么图来表达设计。文档,特别是功能需求、总体设计,一定要有,不然到后来自己的这个系统是什么都搞不清楚。我也提倡敏捷,教大家怎么保证代码、设计、文档尽量保持一致。
积累与坚持
进入新的一年,2010年,作为老程序员,麻木中还是感慨一下。
2000年7月毕业,一晃就工作了10年,未苍老,已苍伤。
十年前对软件开发满怀激情,如今已发现它改变不了什么;总是对自己所工作的行业充满厌倦,总认为别人的行业很好。其实处在劳资关系的劳方,绝大多数人永远是过不上好日子的,尤其是在这个国度,别听我那老乡宋祖英唱我们进入《好日子》。
十年工作,开发十年,已经不再迷信聪明对软件开发的重要性,积累其实才是最重要的。年年岁岁中积累下来的技艺和经验,才是最有用最牢固的东西;岁岁年年中形成的性格与习惯,左右了自己今后的路。
软件开发,对一个开发人员,一个部门,一家企业,积累都是如此重要。
兴趣是我进入软件开发这个行业的原动力,但并不是所有时候都是让你有趣的。没有兴趣,那我们可能就失去耐心;惟有坚持让我们走下去,完成一个模块,完成一个系统,完成一个项目。
生活也是如此,生活中常逆境,面对逆境,坚持精神总好过无奈行为;我们常常谈不上奋斗和抗争,但坚持走下去还是可以的。
常念:三十功名尘与土,八千里路云和月。年过三十的人,不再欣喜于过新年了,既留不住岁月,也抓不住岁月,用去年流行的两个字眼----寂寞来说,可能我们常常惟有留住了寂寞。
常想年轻,但未必怕老,下一个十年,在积累和坚持中度过吧,不希冀于发达,但求平安。