是非人生 — 一个菜鸟程序员的5年职场路 第5节
作者: 花8 天涯IT: http://cache.tianya.cn/publicforum/content/itinfo/1/77229.shtml
日期:2008-2-27 21:03:27
8 —— 文档
董延明从外面归来的时候已经天气大热了,他受到了吴博士一干人的热烈欢迎,吴博士掏出十块钱来,“董啊,去买雪糕去,你走了都没有人去买雪糕了……”
董延明热泪盈眶,毕竟有了自己的定位了。他买回了雪糕,吴博士马上就安排他写产品使用手册,把他一肚子的新公司见闻生生憋回去。
董延明进公司已经一年了,老实说除了写产品使用文档之外什么也没有做过,帮刘大隆写的那个东西不能算数,那毕竟是为他人做嫁衣裳。后来董延明在华为看到部门庞大的资料部,终于悟到了吴博士一定是想把他培养成优秀的文档人才,这才会让他花费那么多时间写文档然后又对写出来文档横挑鼻子竖挑眼,不过当时的董延明不知道吴博士的苦心每日陷在文牍中苦不堪言。
一天吴博士给董延明共享了一份文档,“董啊,你研究一下这个文档。”
董延明看了看是个交换机使用手册,他翻了翻,迷惘道:“老大,你让我搞这个?”
吴博士说:“你看看人家文档的那个格式,那个用词,那个排版……”吴博士说的很激动,几乎要击节叫好了。
董延明又翻了半天还是不得要领,心想这用词也太平庸了,连个成语也没有,前面重复的道理说了又说,这不车轱辘话么?算了,扔一边上不看了。
转过天来,龚明明也跟董延明也提到了华为的文档,不过不同的是,他提到的是设计文档。
“设计什么文档?”
董延明是没有听过设计文档这个概念的,不过桑军可听过,他做对日外包整日面对的就是日本人的设计文档。他解释说,“就是设计事项书……”
“两个饼子!中国就毁你头猪手里了,一个天天混日子,一个帮日本人富国强兵,凡事还要指望我们海关,我们关……”,龚明明还是不习惯说我们公司,总要把“我们关”挂在嘴上,“我们关现在开始了学华为,大力的学啊!!我们现在编程也是从文档写起,我看了华为的内部设计文档,老牛B了。那格式,那排版,那用词……”
董延明听着耳熟,不过他还是不明白什么是设计文档。桑军又给他解释说:“就是别人给你写好了怎么编怎么编,全都用日语写好了,你把日语换成编程符号就可以了。就好像if,人家就写上如果,你照着编就可以了……”
董延明似乎明白了,但是又产生了一个疑问,“写文档的人都写到那个程度了,直接写代码不更快,这不是脱裤子放屁嘛?”
龚明明敲敲桌子,“你俩懂个屁,那是要一步一步地体现编程者的智慧!要从市场调查做起,一步一步地一条一条的实现客户需求。你俩大学简直就没上软件工程课。那个文档是一个接着一个,最开始简单,后来详细,好像叫什么需求设计……不管了,差不多这么个名字,桑你接触的那个是最后一步,叫详细设计。我跟华为……”
董延明打断龚明明描述自己跟华为的关系,又很虔诚的问龚明明,“明哥,你他妈的写文档要多久,有那个功夫是不是代码早就写出来了?”
龚明明一时语塞,桑军又趁热打铁问:“我写程序能实现你要的功能就行了,最后给你用就行了,你管我怎么做的干鸡吧毛。哦,对了,那玩意是给自己看得哈,我写那个文档给我自己看,我这不是贱么?”
龚明明又再次语塞,脸憋的通红,就好像孔乙己一样喷着,“这个文档跟你们的文档不一样……我们程序员的事情跟二B说不清楚……”
07年,董延明在华为领导team按照流程开发,review文档出名的严格,最喜欢在别人文档上打注释,“一坨屎,请参照培训要求重写。”
07年,龚明明在北软做QA,天天盯着别人写文档的时间点,经常因为写文档的时间缩短了而建议PM延长阶段时间。
07年,桑军去了日本工作,身在瀑布式的开发流程中,再也想不起来自己当年对这种流程开发有过微词。
日期:2008-2-29 9:48:38
9 —— 线程
吴博士又给董延明安排工作已经是半年后了,这半年董延明快变成杂役了。
吴博士让他写的是一个语音聊天程序,功能描述完全是口述,“董啊,你写个语音聊天程序,我要用?……什么功能,就是语音聊天啊。……你打开麦,说句hello,我这边听到了说句yeah,你也能听到,然后再说……还要什么设计思路呀?……就是你先写一个录音程序,然后存储起来,然后再用socket传送到对端,然后自动播放。……”
又是socket?董延明高兴了,会啥来啥。
他从吴博士那里拿走了一个麦,回到自己座位上赶紧打开《VC编程100例》,结果居然没有关于录音的程序。他猛地开始发毛了——从上次socket事件之后,这本书就被他当成了圣经,可是当羔羊迷途的时候发现圣经里面居然没有指明方向,这无异于大海航行看不见灯塔呀,能不发毛么。
他又打开《VC++技术内幕》找了许久,里面没有相关的例子,他意兴阑珊的打开《C++primer》,果不其然里面也没有,他随手扔掉这本破书,心里想着,“这两本破书里面一个有用的例子也没有,怎么还他妈的那么贵??对了,不知道书店里有没有编程1000例或者10000例来卖呢?”然后他又产生了一个很严肃的想法——编程这玩艺买本例子书照着编,只要会打字就能干呀,怎么还整的神叨叨的又要大学本科又要什么培训的?
董延明在google上输入“录音程序”搜索,结果艘出来一个“基于API的录音机程序”的介绍网页。他也无心去研究API是什么东西了,只是照着代码输入了一串wavexxxx的函数,输入完后有编译错误他凭感觉修改了几个地方误打误撞居然让他编译通过了。他给自己录了一段音,然后播放了一下,居然成功了,顺利到他不敢相信。他记得socket似乎也有个什么API的,莫非所有跟API相关的东西都是要按照次序写好函数就能用了?他想到这里兴奋不已,想打开窗户大喊又想找人分享——他发现了一个惊天大秘密!
最终这个秘密没有跟人分享倒不是高手董小气,只是他实在说不清楚API是个什么东西。高手董把录音软件研究了一下,发现了一个问题,就是他这个软件只能录下来存到硬盘上,也就是说想要这边说那边听不可能,只有可能这边说完了然后用socket把文件传送过去,对方接收了文件同时播放才能听。
他把这个顾虑跟吴博士分享了一下,吴博士眼镜差点滑落到地上,“你没跟我开玩笑吧,这边说完了,一摁钮对方就能听到?这不成了电报机了么?我要即时通话,不要你这个什么什么电报机!!”
董延明灰溜溜的回座位,忙不迭的上网搜索。在试过录音和程序、录音和传送、录音和socket等关键词搜索之后,他终于想到了语音聊天源代码这个关键词,这才解决了电报机的尴尬。其实解决也很简单,就是一个buffer满了之后就触发传送的socket线程进行传送,对方就接收播放,连存储都省了。高手董对这个设计叹为观止,自己验证了几次,证明可以通畅对话就赶紧送给吴博士检查。
吴博士用了一下觉得还可以,发现还用了多线程便意外了一分钟,鉴于董延明的个人素质也实在不好提太多要求便勉强接受了。不过他又发现这个程序一运行CPU占用率便窜到100%,他问董延明这是怎么回事,董延明笑道:“是不是这台机器太慢了啊?”
吴博士白了他一眼,自己看了看代码,然后再接受和发送的两个线程里各增加了条语句sleep(1),问题便解决了。董延明又一次如同雷击般的兴奋,这就是实力啊,换腐朽为神奇点石成金的实力啊。随便加两个字母便能解决一个大问题,他又一次紧紧抓住椅子扶手来抑制住自己高呼“太神奇了”的冲动。
其实这个应用程序还有个小bug,不过因为这程序最终吴博士没有用上,所以这个bug也没有被发现,董延明觉得有点幸运。Bug是,程序运行一段时间就是弹出error的对话框,必须要重启程序才能继续使用,当时董延明想了无数方法都无法解决,其中包括一个异常经典的主意——就是让程序每隔1分钟自动重启一次。
董延明在一年后终于知道了为什么,就是缓存区的反复使用只有申请没有释放,与上一次的socket问题如出一辙。
董延明在两年后还知道了吴博士的sleep加的有些武断了,应该在传送完毕并且缓冲区未满的时候sleep,然后再在缓冲区转满后被触发醒来,每传送一次便sleep一次是会影响性能的。