风雨程序路(二)



5 暑假


大一的暑假,惊帆没有回家,大一末的时候,学院发了选课通知,大意是让学生在java和c+中选择一个,正好趁着暑假,好好看看这些,在他的印象里,java仅限于诺基亚手机里的java小游戏,所以大部分时间,他都在图书馆,图书馆是学校最为得意的东西,据说是学校的镇宝之物,里面的书籍是相当丰富,于是他就在里面翻遍了所有的java相关的书籍,花了好几天他才弄清楚java,jdk,jvm,jre之间的区别,一旦弄清楚之后,他觉得也不过而而,很多时候觉得很多东西很难,其实不是东西难,而是内心惧怕去了解它,一旦了解了,那么所有的事情都不过尔尔,所以惊帆就在他的linux下载了jdk弄好了开发环境,因为他决定选择java,暑假里面大多数时候,他都在图书馆闷头研究java,但是因为是暑假,图书馆不是全天开放,所以有时候进不去,于是他就带着笛子去学校的一个小竹林吹笛子去,本来以为会有路过的姑娘驻足,结果去了几次后周围跳广场舞的大妈和大爷慢慢的向他开始靠拢,后来干脆直接坐他旁边了,于是他不去了,全部埋头专研java,笛子是他从小就玩的一个乐器,一直坚持自己要有一个音乐细胞,那时候看过一篇文章,写的是人一定要有三个计划,A,B和Z计划,a计划用来作为当前的谋生之路,b计划用于a计划失败后的备份,z计划用于a和b都失败了,保证最低不会给饿死,惊帆觉得这个很有道理,于是把音乐定位z计划,就算以后失业去大街要饭那也叫卖艺,不叫乞讨。


惊帆的java入门知识,基本是从李刚的那本疯狂java讲义中学来的,书中李刚提到一句话:很多年前,大家需要一个工具,就自己做一个,现在很多人需要一个工具,就从网上下一个,很难说软件到底是在进入还是在后退。但是看久了他也能发现书里有一些地方是不合理的,例如李刚说java里面的Hashtable,的第二个t应该大写,书中他还提到曾经给sun发过邮件,建议将第二个t大写。在李刚的很多书里,都提到这个小写的t,他后来将其归结于开发jdk的人的一个误操作,但是为了兼容性又不便纠正,可是后来惊帆在sun的一个页面看到一句话:所有复合词在任何大小写样式中都视为一个完整单词,例如,hashtable是一个紧凑格式的复合词,应将其视为一个单词并相应地确定大小写。所以,这里本来就是应该小写,看来人家sun并没有做错。


自打电脑换了linux系统后,为了打造成一个人可以用的系统,惊帆还真耗费了不少的精力,首先带着个耳机,一边写代码,一边听歌,或者偶尔拿着电脑看看电影,是在正常不过了,可是偏偏这么个小事,惊帆还搞了很久,首先音乐播放器,找了很久,也不知道是运气差还是怎么的,好几个播放器都只能播放wav没办法播放mp3,电影就别提了,avi和rmvb,根本没有可以打开的播放器,于是一狠心,干脆自己做一个吧,那时候sun有一个框架叫jmf框架,专门用来应对java处理多媒体的库,于是惊帆就用它活生生的做了一个和酷狗一摸一样的音乐播放器,还带媒体库,当然媒体库是直接调用多米音乐的,后来惊帆知道其实linux下是有很多不错的播放器,比如Rhythmbox就很不错,可是自己已经做完了,并且也不差,于是干脆就一直用自己的播放器,除此之外,惊帆还为自己的系统做了多线程断点下载器,以及视频播放器等等小玩具,有时候惊帆也想,就是那个写疯狂java的李刚,他有亲自的做过这些东西么,他也不过如此云云,于是自己也飘飘然起来。然后他又把这几个软件,用exe4j打包成exe发给其他人看,唯一不足的就是jre打包进去,本来一个几mb的东西硬是给弄到了近百mb,在程序员里面很流行的一句话,就是不要重复造轮子,可惊帆不这样想,不但要重复造,还要造的比别人好,如果不重复造轮子,那么你就丧失了发明一个新轮子的机会,所以很多时候惊帆都在重复的造着轮子,并且乐在其中。所以啊,很多时候那些重复造轮子的程序员,才是值得尊敬的,因为他们乐在其中,享受这个过程,这才是真的热爱这个职业,这个事情。


在暑假后惊帆义无反顾的在java的课程后面打了勾,当然这个结果他还是比较过的,为啥不选c++呢,当时只要一提到c语言大家想到的就是vc6,一提到c++大家想到的就是微软,搞得惊帆自己都认为c++就是微软的,而我一个linux派系岂能玩微软的东西,而java不是号称跨平台么,于是坚定了选java,结果放眼一眼,整个java那边只有他一个人的名字,其他的全是c++的,不知道当时谁透露的消息是只要精通了c++,分分钟就会了java,还有就是c++以后的工资比java高很多,但是他还是在java里面写了自己的名字,后来陆陆续续又有几个人,也放弃c++选了java,当然宿舍的里的小鸡也选了java,为啥,因为惊帆选择了java,这样他选择java至少不会挂科,在他的眼里惊帆就是大神,所以跟着大神肯定是不会错的,小鸡这个人,惊帆一直觉得是一个很神奇的人,他可以默默的对着电脑用手机看小说看整整一天,能够从周五下午睡觉睡到周日下午,一天周六有人敲门,惊帆去开门后只见管理员阿姨站在门口,手里提着饭说是找小鸡,他定的饭,这件事后来成为所有人调侃他的话柄,说小鸡是学校唯一一个能够让宿舍管理员亲自送饭到床上的人。


6.半路杀出的培训班
一天辅导员在qq群里发了一则消息,大意是有一个公司,要到学校开一个专门的java培训班,是需要面试的,过关的人,就可以加入培训班,这个时候惊帆心动了,因为一个人研究太痛苦了,当年就是没有人指导,自己绕了很多弯路,而自己学习java一直都是一个人在琢磨,因为找不到知音,大神每天按时在宿舍打坐,打坐的时间比他学习的时间还多几倍,小鸡就更不用说了,他基本上只会说:嗯,哦,啊。所以对着小鸡说话就像对着一个木头一样了,你没法和木头去讨论为什么静态代码块在构造器前面执行,普通代码块在构造器后面之行,另外一个原因是培训班就开在学校内部,学校专门在一个教学楼,腾出整层楼作为上课用的场所,基本上来说就是学校和公司联手合作的,看起来十分的官方,甚至整层楼都贴上了对方公司的logo,所以惊帆打算去。


上课时间是在周末两天,人数差不多有50多人,于是分了两个班,惊帆和很多人的思想不一样,参加这个培训班他是带着自己的小九九的,别人参加是因为真的是自己完全不懂,希望这样专业的培训能够提高自己的能力,避免挂科,所以很多人的思想,在惊帆看来就是错的,因为能够提高自己能力的,只有自己,如果自己不努力,别人再怎么帮你也无济于事,可是很多人就是不明白这个理,一味的怪老师没教好。可惊帆不一样,对于惊帆来说,虽然自己的能力并不是多么的优秀,但是应付学习的考试,那可是闭着眼睛也会过的,他希望和别人接触接触,看看人家平时在公司是怎么工作的。


那些抱着希望通过培训提高自己的那些人,一到上课就开始昏昏欲睡,于是惊帆一边嘲笑着他们一边听着课,下课后赶紧去找老师私聊一会儿,递一根烟,然后就开始聊了,好在老师也是一个烟鬼,不但是个烟鬼,简直是个大烟鬼,他抽烟的时候,你能够看到烟成指数的速度递减,抽烟的空闲是最好的闲聊的时刻,烟鬼和烟鬼,格外的话多,慢慢的和老师混熟了,然后惊帆后面就不用每次都给老师递烟了,而老师每次会给他丢根烟过来,这里惊帆是算过的,一包烟,怎么着也的十块钱,投资太多,不划算,所以一旦混熟后,就立即停止投入。本来是两个人的聊天,后来慢慢的又加入了一个人,也是通过递烟的方式加入的,所以啊,烟有时候也真是个好东西,本来没话说,递根烟,一下就有话说了,这个人成了后来惊帆随时一块谈技术的对象,惊帆叫他大爷,因为他看起来就像大爷一样,就像古代的地主,所以惊帆一致叫他大爷,他也加入了培训班,而且就坐他身边。通过和老师的聊天,惊帆又懂得了很多东西,比如如何使用svn或者git,那时候惊帆第一次听到svn协同开发工具这个东西,要知道老师讲课的时候,都是通过拷贝jar的方式,多年后每次只要是学生来面试,惊帆都会问,你们试用过协同开发工具吗,可惜基本上所有的人,都没听过这是个什么东西,看来大学讲的东西,和实践起来,还是有一定的差距,如果大学上程序课,让学生提交代码的时候,给每个组一个branch,然后挨个checkout看他们的代码,通过看log就能过发现谁写了代码,谁的代码能力最强,根本不用在检查作业的时候去问你做了啥他做了啥,不过很多时候,大概是因为老师平时基本上也不用这些工具吧,所以就干脆忽略了。


一天惊帆在看一本从图书馆借来的jms的书籍,老师说这种书暂时不用看,去看看think in java吧,于是惊帆去找了这本书,好书就是好书,好的书,就像是美女,不管时间多久,始终会让人眼前一亮,所以这本书他一直带着,有事没事就看看,而这位老师,由于是第一次上课,可以说是一个标准的程序员,自然和学校的老师是有很大区别的,在代码方面十分的苛刻,但是怎奈下面听课的大部分人,都没有一点程序细胞,用他的话说就是,孺子不可教也。有时候他也会去指点指点其他人:


“你这个对象的构造器应该是私有的”
“构造器是什么东西?”
“你父类重写了构造器,系统不再提供无参构造器,子类需要先调用super初始化父类”
“super是什么意思”
“。。。。”


时间久了他也懒得去再看了,这个时候惊帆又开始同情老师了,想到大学的老师,之前惊帆也一度抱怨这些老师,简直就是个复读机,可是现在他不这样认为了,因为下面坐着的人,让上面的人称为了复读机,而老师要一年又一年的像个复读机一样的去讲课,也真不容易。在讲spring的时候老师问道:


“有谁知道spring aop是根据什么机制实现的” 
“动态代理”,惊帆随口说道。


打那以后,有时候老师也就直接来找到惊帆和大爷聊天,好像终于有一个能够听得懂我说话的人了,而大家在一起聊天的时候,基本谈的都是程序都是代码,彷佛怎么也说不完一样。培训老师彷佛给惊帆指点了很多迷津,于是后面只要有空,他就在图书馆写代码,把所有能够想到的东西,全部用代码去实现一遍,想不到了,就照着图书馆书里的例子,挨着敲一边,用他的话说,只要是java的书籍,你说出名字,我立马告诉你它在哪个书架上,当时学校有地方专门通宵,他每周都会在里面通宵好几天,有时候他都不知道为什么要去通宵但是还是去了,去了没啥事,那就继续写代码呗,有时候行为可以驱动精神的,当你精神上不想做某件事情的时候,可以身体先行动,到那个点,精神自然就会思考了。另外也许是受网上说的,程序员在深夜最有灵感的影响,有没有灵感惊帆不知道,但是深冬冬的要命倒是真实的。


后来没有过多久,接到通知,说是根据学生反馈,这位老师讲课讲授的不好,被fire了,果然后面老师再也没有来了,听到这个消息,大爷和惊帆感到非常的不值,因为老师讲的很好,只是要求比较高,后来惊帆知道老师也离职了,虽然不知道是因为老师离职,然后机构干脆给出被fire的消息,免得自己的面子无光,还是真是直接的被fire了,在后面来的老师,那简直就是和大学老师一个模子刻出来的,也许他是吸取之前的老师的教训,基本上一个课程下来,只说两句话:“同学们,上课了”,“同学们,吃饭了”。然后其余时间就直接放录制好的教学视频,大爷抱怨的最厉害:


“我考,这个老师每天都说这两句话,就特么可以封装成方法直接调用了”。




7不一样的英语课


英语课一向是惊帆的软肋,几乎只要是英语课,全部挂了,有一门英语课,因为是好几项考核按照百分比算成绩,居然是59.3,四舍五入就成59了,于是他也挂了,他开始愤愤不平了,因为这节英语课他算是去的最多的,可能是因为那个老师长得还挺年轻漂亮,可是让他挂了,都说每人蛇蝎心肠,现在他还真信了,不过虽然去上了英语,他带着的几本都是java编程思想,或者就是java加密与解密,虽然他知道,凭着自己的毅力,像写程序一样的去学英语,必然能够达到一个不至于挂科的水平,但是他仔细衡量过,首先,以他几乎只剩下只能读懂26个英语字母的水平,开始学英语,最终只能达到一个和普通人一样的水平,而时间经过这样的切分,自己无论从精力还是时间上来说,投入到写程序里面的时间都会大大的减少,所以他决定先把自己的程序能力练到炉火纯青再说,这样,至少自己有一样杀手锏,不至于样样会,样样不精,这样的人实在是太多了,他不想成为其中的一员。所以他说,英语嘛,不过是一门语言,你说的再好也不如美国大街上要饭的说的好,有朝一日我去美国呆个1年半载还丑不会说几句英语?于是他继续坚定的写程序。当时他看了一段笑话,大意是无论玉帝说什么,如来都说你被猴子打过,他觉得这个很好笑,所以他希望有一天,他也能够说,我程序很牛,就够了。


转眼又到选课的时间了,英语课学校有明确的等级,那就是过了四级的选这个,过了六级的选那个,四级没过的,就安心的选你的基础英语吧,等级分明,对照着选课,如果选错了,是没有学分的,而对于惊帆来说,有两种情况他是从来很淡定的,第一是胸有成竹,第二是死定了,所以他干脆选择了等级最高的那个课程,如果你知道你肯定是要死的,那么你是选择被一个野狗咬死呢,还是被一头森林之王的老虎咬死。就算挂了,他以后都可以说,我选择了全校最难的英语课,结果挂了,也许这样别人还会投来崇拜的眼神,而如果你给别人说,我选择了最简单的英语,挂了,人家肯定看不起你。想到这些,他在最难的英语后面,写了自己的名字,据说这个英语的考试方式是一个没有字幕的视频,每说一句话,你跟着说出来,然后根据情况判分。


英语课的好处就是妹子很多,可是去了几次,惊帆发现,凡是妹子,身边都有一个男的跟着,都是名花有主,多看几次后,绝影不再看了,所以英语课要么不去,要么去也继续看程序的书籍,但是在一天下午,他还是发现了一个落单的妹子,第一眼看到她的时候,发现她长得还蛮好看的,发现后惊帆就开始注意她,后来惊帆确实发现她就是一个人,因为他从来没有发现她身边有其他男人,甚至有些时候,惊帆悄悄的跟踪她到她的宿舍,也没见有其他人,因此惊帆确认这儿还有一个漏网之鱼,于是他决定追她,他开始换自己的位置,本来他是坐在最后面的最角落里的,这样在那里看书,不会被老师发现,慢慢的他开始调换座位,每次都朝她靠近,这时候小鸡的反应很大,大意就是有了美女就忘了兄弟的意思,但是他不管,后来终于在一次发作业的时候,他从她背后看到了她的名字,可是还是没有办法获得联系,于是他想到一个办法,去找辅导员,要课堂所有选课人的名单,然后看看联系方式,结果他被辅导员直接从办公司轰了出来。


但是机会总是留给有准备的人的,那时候不是大家都玩人人网么,这些网络还有一个好处是可以根据学校,搜索人,于是他小心翼翼的输入了她的名字,果然出来了一个人,还是带头像的,确认后却是是她,于是他联系上了她,1个月后,他们在一起了,多年后,他给她说:“从我决定追你那一刻起,我就知道我已经成功了,因为我用心了,用心做事,是不会失败的”。他叫她丫头。




8第一个项目


培训归培训,学校的课程还是要上的,在linux网络编程课上,老师在课余时间打了一个广告,找一个java的人,帮他做一个软件,如果有想做的,可以私下找他了解详细的需求,然后他最后补充了一句,说这是一个很大的项目。项目这个东西,惊帆很早就听辅导员见过,意思是学的好的学生可以跟着老师做项目,但是他还是无法明白项目到底是个什么东西,不过在他的qq里面,有一个人,是他的一个学长,那还是在高考后的那一年暑假,从网上找到的联系方式,于是他小心翼翼的问了对方,什么是项目,然后介绍了下自己大概学了些啥,良久之后对方敲出一句话,大意就是帮助老师布布线,组装组装计算机啥的,这在当时是惊帆觉得不能接受的,为啥?这玩意儿在惊帆看来,就是端茶倒水的活,高中的时候,周末经常去网吧当网管,玩玩网络啥的,这些都会了,要是大学出来还是鼓捣这玩意儿,那不如不读。但是还是很客气的回应了他,这时候惊帆开始觉得,对方可能大学的时候大部分时间都泡妹喝茶去了,所以他自己也不知道,事实证明惊帆是正确的,这位师兄虽为计算机出身,最后好像去当了一个公务员,然后从他的动态来看,也没用做任何计算机相关的工作,就计算机的能力来说,应该和小鸡是一个级别的,自己很可能都没有做过任何项目,从那以后惊帆也不在问他。这次听到老师讲了这个项目,惊帆决定去试一试,于是他私下去找了老师,说了自己的情况,老师觉得他也不错,于是给他讲了项目的情况,其实就是仿照国外某个远程控制软件,自己山寨一个,但是部分dll库还得用别人的,整个软件是一个java做的c/s结构,整个开发环境也是一个虚拟机,说完后老师把东西拷给他,然后告诉他要做什么功能,这个东西需要到老师的家里去做的,因为只有他家里才有需要控制的设备的芯片。出来后,他给丫头打了一个电话,说我要跟着老师做项目了,她也很高兴,因为那时候谁要是能够让老师看上,跟着做东西,是莫大的荣幸,以后简历的项目经验里面可以写一行东西,再也不是空白。那天下午他们去吃了过桥米线,惊帆很喜欢吃过桥米线,过桥米线,表面上看着没有一点温度,实际里面温度很高,他觉得很好吃。


去了老师的家里,他终于看到了那个芯片,焊接在一个电路板上,芯片放在桌子上,几根线连接着一台示波器,惊帆刚想摸一下,老师立马站过来了,不停的说小心点,小心点,这个芯片花了我三千多呢,看着他当着个宝一样,惊帆也不再碰了,项目功能很简单,就是用java做一个客户端,点击按钮的时候,给芯片送一个消息,芯片接到消息后执行对应的指令,使用串口通信,用cs做一个客户端并不难,难就难在java对dll的操作上,dll是现成的,但是没有源码,甚至不知道里面到底有哪些接口,只是有一个文档里面记录了dll里面的几个接口和参数,所以也就没有办法使用jni,找来找去,他最后决定在jawin或者jacob中任意选择一个,经过对比后他决定用jawin来做。他做客户端,老师做芯片那边的开发,大家都写好后,一起来连调,由于笔记本没有串口,还实用串口模拟工具,模拟了几个串口出来。客户端也不是全新开发,而是反编译国外的某一个软件,然后进行修改,理由是简单,可是惊帆觉得这样更复杂了,别人没有做代码混淆还好,一做了代码混淆,那难度就成指数增加了,于是惊帆每天的工作,就是拿着别人的jar,然后反编译,然后看看代码,再转换成源码,其中有一些关键的地方,别人还是做了代码混淆的,虽然他在java加密与解密的那本书里看到,就算是混淆后的java代码也能够恢复它原来的样子,但是对于惊帆来说他还达不到那个能力,于是api嘛,无非输入输出,根据它的要求,自己来实现,虽然代码有点凌乱,但好歹还是实现了,项目差不多做了2个月,大冬天的天气很冷,老师的家里有一个电炉,可是他就放在自己的脚下,虽然他给惊帆说,冷就过来烤火,可是他觉得他根本就不想给他烤火,于是干脆不去了,摸着键盘上的温度,也挺温暖的。


9java3d
两个月后,项目做完了,惊帆又开始玩自己的东西,以前没事就看看博客,或者和丫头去校园走走,出去喝杯奶茶什么的,一天在博客园看到一个提问,就是为什么不使用java开发3d游戏,下面有很多评论,都是说java性能很差根本无法满足游戏所需要的速度,大意就是世界上只有c/c+才能做出游戏,java还是一边去,这个时候惊帆是一个java的狂热爱好者,诋毁java是坚决不允许的,网上不是有人调侃说程序员的女朋友就是程序么,你们都说不行,那我就做一个,我做出来了看你们怎么说,所以要让对手闭嘴的最好办法就是做出他认为不可能的东西,于是他就去sun的网页上照,那时候虽然sun给oracle收购了,但是主页还存在,于是他找到了java3d这个东西,听名字就知道,java3d,当然是java开发3d,要做3d开发需要学很多东西,首先就是要解决模型的问题,于是他自己装了一个3dmax,因为他是linux系统,只能在虚拟机里面用,结果他发现要做模型,还需要会画图,会用各种东西,光是那个左手坐标和右手左边他居然都卡住了一会儿,于是他又去图书馆翻对应的书籍,学会了如何制作一个模型后,还要让它动起来,也就是蒙皮,蒙皮这里他老是过不去,因为他做的模型就是不跟着动,于是他还是放弃了,因为这个太耗时,并且自己还不定学的会,于是他从网络上下载了几个别人做好的模型,然后用max打开,再转换成obj,然后使用java3d载入,然后控制骨骼动画让它动起来,居然它真的动起来了。fps也能达到50左右,于是他把这个东西发出去,别人说不管你怎么做,java始终多了一层jvm,因为他有jvm,他肯定是最慢的,这时候惊帆不说了,因为在锤子的眼里,一切的东西都是钉子,另外他也觉得事实就是这样,多年后他知道,jvm并不是导致java慢的原因,程序真正的耗时,在于它的cpu中断例程和用户库与系统库的调用,但是他再也没有去讨论过c++和java到底谁好。经过这些事,他发现做游戏还是蛮好玩的,于是又做了一些网络象棋,在线斗地主这样的一些小游戏。

你可能感兴趣的:(风雨程序路(二))