一、关于编程
相信有很多人和我一样在今年走上了工作岗位,和其他的毕业生不一样,我们成了程序员,这个注定了要和别人不一样的职业,一个意味着加班、寂寞、不断学习、时刻变化的职业。通过这几个月的工作,我感觉到了从前和现在的不同,这些不同促使我想写点什么。
最大的不同是现在的编程和从前在学校里的编程不同了。那时候一个程序代码顶多几百行(恐怕很多人还达不到),主要是为了应付老师的作业。为了能够赶快向老师交差,代码大多上来就直奔主题,没有出错检查和健壮性保证的代码。所以一个程序很可能只能输入数字,输入字母就会崩溃。由于那些小程序都只是一些练习,而且很小,所以我们就可以把它交给老师就算完,不去考虑后面的改进和维护。那时候不会去写文档(不知道实验报告算不算),为了显得自己很牛,连代码的注释也很少些。其结果就是,过了一段时间自己写的代码自己都看不懂了。
现在不一样了,写出来的东西会变成商品,商品就要有市场,没有人买就会变成垃圾,所以我改变了,尽管这种改变是很辛苦的。现在写的代码里处理错误的代码甚至要比完成正常功能的多,因为要保证健壮性;变量的命名要符合规范,注释要尽可能的详细,因为现在代码是公司的,会有很多人来维护它;复杂和让人难以理解的所谓“经典算法”已经不被提倡了,因为可读性使然(某些嵌入式系统可能例外)。其实,当初如果多在学校里参与一些项目,或者自己承接一些软件模块的编写工作,这种改变就会不是那么难了。
韩日世界杯刚结束,高考的题目也出来了,大家都在讲规则,规则成了现在热门的话题。其实从学生到程序员的转变何尝不是这样?从普通学生向程序员的转化过程就是一个适应不同规则的过程。你也可以把这种适应规则称之为格式化。
在学校里就要遵守学校的规则,那时候我是以考试不被毙为中心的。不追求高分是因为我不想把有限的经历浪费到无聊的试题中去,但是又必须让自己的成绩〉=60,否则……大家都知道吧。不可否认,学校教育为我建立了走向软件开发之路的基础,但是存在很多的问题,它太不适应现在社会中的真实的软件开发过程了(关于这个话题要说的可就多了)。还好,我的老师对这批学生进行了一些有益的尝试性的教学。他严格的按照软件工程的方法指导我们完成了一个比较大的项目,让我对软件工程有了比较深的理解,而不仅仅是狂背概念然后抄在试卷上。这也使我被格式化的过程变得不是那么的痛苦。那些从小被应试教育打造出来的同学就会很麻烦,他们可以在考试中得到高的令人咋舌的分数,但是却没有分析问题、解决问题和计划过程的能力。到了公司里,规则变了。公司的中心是盈利,对他来说,使用什么技术并不重要,重要的是能够利用已有的技术在规定的时间内完成规定的任务,然后拿到钱,否则死亡。这里的规则不鼓励你去广泛的采用最新的技术,因为它不稳定;这里的规则要求你的代码规范化,因为这样的代码才符合“工厂标准”,你跑了自然会有人来代替你;这里的规则也同样给我带来了压力,程序开发的过程在项目进度的压力变得不再有乐趣。我现在还清楚地记得主管在项目会上说的话“大家都要加把劲,否则别说工资,我们大家都要走人!”这就像足球场上的中心是进球一样,无论你踢得有多么漂亮多么流畅多么具有观赏性,进不了球一样滚蛋。大家都说德国人机械化的足球太难看,可是他进了四强,你行么?我们必须努力去适应这个行业,物竞天择,哪个毕业生都一样。
二、关于学习
上了这么多年学了,如果还说不会学习,那就有点搞笑了。学习的方法每个人的不一样,各有千秋吧。有一点我不得不承认,在学校里的学习和成为程序员后的学习很不一样。
学校教育是基础教育,目的是建立软件开发的最基础的概念。过程不外乎听课—做笔记—写作业,然后就是狂背老师画出来的那些所谓知识点,最后参加考试。当然还有另一条路:上课睡觉,下课后泡美眉/打牌/踢球,考试前粘着老师套题,外加小条,最后参加考试,考完后登门拜访。我比较笨,又没有钱,所以属于前者。这样被训练出来的我好象很多的概念都很清楚,可是如果让我把他们运用到实践中去,那我就傻眼了,而且很容易就会把这些概念丢在风里。这是我在大三的时候的真实状况。感谢MOTOROLA提供的实习机会,感谢《软件工程》老师给我的实践机会(尽管他已经不再是教师了),感谢学校的科技立项经费,我的大四总算没有被荒废,我被初步地改造了。被动学习慢慢地向主动学习转变。
到了公司就发现了自己的不足是巨大的。以JAVA为例,在学校里我就知道RMI是远程方法调用,可是到了这里你就必须要用它来写程序了。学习就变成了自然而然的事情。这里的学习方式与学校有很大的不同。还是以RMI为例,我先到书店去买关于RMI的书籍,如果你能站着看几个小时并且记忆力好并且不怕店员白眼的话,你就可以省了这笔钱了。这个过程里我对RMI有了基础的知识。然后开始在网上到处搜索关于RMI的文章,那些文章里有很多的技巧性的东西。最后自己编码实践,通不过就上各大技术论坛去发“救救我,我的……”之类的求救贴,呵呵,我发现现在这样的贴子不少哦,可能和扩招有关系。现在才对某些网友说的“网络上最先实现共产主义”的言论有了深刻理解。
程序员是个注定了要拥抱变化的职业,不断的学习是我们立足的根本。看着那些机械系的学弟还抱着78年定稿的课本,我觉得有点好笑,那一年我才刚刚出世,我现在算是上了贼船了。
三、关于非计算机专业
我是计算机专业的学生,也就是别人说的所谓“科班出生”吧。在上学的时候就接触过很多非本专业的同学,因为共同的爱好成了好朋友。他们喜欢计算机,绝大部分毕业后也做了和计算机相关的工作,所以我一直认为,其实争论科班不科班的没有多大的意义,关键在你的态度,你爱不爱软件开发这个职业。
说白了,计算机就是工具,如果你没有某一方面的专业知识,这工具也不会用得太好。不懂财务的软件设计人员永远也设计不出好的财务软件,不懂化工的软件设计人员永远也设计不出好的化学分析软件,没有美术基础,你的绘图软件也不会好到哪里去。从这个意义上说,我其实挺羡慕非计算机专业的同学的,他们比我多了一项技能。
目前和计算机专业课程交叉比较大的专业是电子、自动化,我从来不敢在这些专业的学生面前吹嘘自己的那点专业知识,也没有把他们当作外系的,他们可是毕业时很强悍的竞争对手。我还有一个好朋友,他对操作系统很感兴趣,对市面上能够搞得到的操作系统都非常熟悉(Solarise这个东东还是当年他告诉我的),他的机器装了好几块硬盘,有8、9种操作系统。你们猜他是哪个专业的?------机械工程。最后毕业时,他凭借对电脑软硬件的熟悉去了一个专门搞小型机的单位,现在还在向我大谈IBM370的好处。
如果非要说非计算机专业的学生变成程序员的过程和我们这些人有什么不同的话,我感觉最大的不同在一门课上,这就是《数据结构》。这门课可能是对编程影响最大的一门课了,而且非计算机专业几乎不会开。大家都会写代码,可是学过这门课的学生(我说的是认真学习并且理解)和没有学过的学生编出来的代码绝对是不一样的。如果你没有学过,和我的看法相左,我不想无谓地争论,你可以去看一看再说话。
专业并不重要,关键在你的态度,你爱不爱软件开发这个职业。
四、关于未来
你有没有在疯狂加班的夜里感觉到编程的枯燥?
你有没有陷入过无穷无尽的错误里,感觉到产品发布的遥遥无期?
你有没有对层出不穷的新技术感到眼花缭乱,无所适从?
你有没有发现自己的身体好像越来越差,爬几层楼都气喘吁吁? 你有没有发现自己越来越依赖电脑,生活圈子越来越小,连女朋友都要从网上找?
你有没有考虑过自己的未来?
这些我都有,尽管我才工作了四个多月。我承认,我不想永远做一个程序员,我向往自由和有创造性的生活方式,我不想当代码工人。可是我的未来在哪里呢?
我在彷徨和思索着。小时候,我的理想是成为一个伟大的科学家,建造飞船探索宇宙。再大一点,想当一个军人征战沙场,成为英雄。初中毕业才发现原来钱是那么重要的,于是就想,以后一定要做一个富甲天下的有钱人,至于怎么挣钱还没有想过。没想到那时候就那么俗。上了大学后,我不像人家那样意气风发妄图改造世界,我觉得以后有房有车有个爱自己的人就足够了。我的未来在贬值。现在呢?北京的房价那么高、汽车那么贵、女孩又那么地挑剔,连这都有问题了。这时候的心情就像郑智化的那首老歌《中产阶级》里的歌词一样。 这种迷茫期可能每一个人都有,不仅仅是程序员。幸运的是,我的迷茫期已经结束了。我热爱软件开发这个行业,可是中国现在的软件行业水平不高,不是因为中国没有好的程序员,而是好的程序员没有被有效地组织起来。我希望成为这样的组织者。尽管我还是个毛头小子,尽管我还没有经验,尽管我还很笨。可是我有我的资本,我年轻,我不怕失败。 我的未来有点模糊,可现在脚下的路很清楚。不想高喊什么豪言壮语,我只要把现在的事情做好。继续写代码积累经验,提高自己的水平,毕竟这是自己的本行;注意行业内外的动向,不仅仅是一个人埋头苦干;不断学习,并尝试着用别的东西来检验自己的能力(比如物美价廉的国家软件水平考试,我报了系统分析员);画画,玩模型,看电影,继续做我喜欢的事,毕竟编程不是生活的全部;坚持锻炼身体,身体好能做很多事的,不用我多说了吧,各位单身的程序员哥哥们?!呵呵。
从前的政治课本上说过:内因是改变事务发展的主要因素,不要去埋怨外界环境的种种不好,路是自己走的。机会青睐有准备的头。
谢谢观赏,如有雷同,纯属巧合。