20120629
20120628
我的第一桶金
今天在车上听广播,里面大家在回忆自己的第一桶金,主持人在总结60后、70后、
80后各自的特色。津津有味地听着,也想想自己的第一桶金。
我的第一桶金和邻居同学相比,来得非常晚。小时候家的旁边就是山,或者说,
我的家就在山上。很多同学及学前的朋友们,都认识几种草药,夏秋的时候就上
山去采,然后卖钱。我都只是跟着跑玩,从来没采药卖过。其实我的家境谈不上
好,现在看,小时候家长还是挺娇惯的,再不就是那个时候我已经开始近视了,
所以分不清草和那些现在连名字都想不起来的草药。即使这么多年以后,我认识
的品种也非常有限,比如蕨菜,都是那些与被子植物长相实在差别太大的。
而邻居和同学都挺能挣钱的,当然了,全部交给家长。了解我的成长环境,有些
同学可能更容易理解为什么我会对小资产阶级及资产阶级有那么多意见,而对无
产阶级总是那么有感情。同样是这个原因,我对很多人讲自己小时候都充满不
屑,唯独周治国老师回忆录一出,我登时没声,只有佩服。
就这样,整个小学,我几乎就只是花钱,没挣到一分。
有的同学可能会说,小学么,不就是玩么,怎么还要挣钱呢。我想起前几天看到
的某同学的状态,大意是说,念了这么多年书,交的学费书费给铁道部交车票
钱,我们为社会做的贡献不小啦。我当时想,臭不要脸,那哪里是你的贡献,明
明是你父母的贡献。
小学,除了吃喝要各种好东西,惭愧,我完全是个不立世孩子。跟某些同学现在
有得一拼。
大概在小学六年级,我第一次干点活--跟我哥卖对联。就在离我小学不远的地方
摆摊。前面提过,我那个小学相当之不错,牛人们的孩子都去,所以,地处市中
心,摆摊效果应该好。但是,还是卖不动,收税收各种费的倒是不少。印象深刻
的是有两小伙子--我那个时候比小伙子还年轻很多--收钱,我问,"这是啥税啊。
"答,"国家不就那一种税嘛。"交了。过了不一会,又两个个小伙子,也是收税。
我说,"刚刚交了啊。"答,"这是不一样的,那个不算。"
手捏收据,那个时候我第一次知道,上面写了字的东西,也可以叫做"白条"。按
现在的话说,这非常颠覆世界观的。要知道,我的小学同学们受的是啥样的教育。
比如,我们被教育要把零花钱存起来,班上有银行,存多了可以取出来,可能还
有利息。第一次受到这教育的时候,我在想,什么是"零花钱"。我当然有零花
钱,不过那是每天中午的饭钱。
卖对联没收益,剩了不少。我跟我哥就送福字。送福字是个特别惹人烦的活儿。
不是说这个活让我烦,而是它烦别人。送福字,就是赶在大年三十前几天及除夕
当天,敲人家的房门,一进去,"过年好,给你家送福来啦。"人家虽然恨不得吐
你一脸,但是还是掏钱,迷信的说,怎么也不能把福推出去吧。
虽然我自己从事过这个行业,不过,我似乎从来没给过送福字的人钱。所以说,
什么的自己受了迫害以后就会不加害别人什么的,在我这里没应验。
南方的同学可能不容易想像送福字的艰苦。那个时间段,正是东北最冷的时候,
零下近三十度,而我当时已经开始戴眼镜了,进门啥也看不到,厚厚一层冰 (不
是霜或露) 在眼镜上。要拜年,就没时间擦眼镜,索性啥也不看了。
出来把钱给我哥,然后哈气擦眼镜,下一家。
这次严格地说,不算第一桶金,所得款项全额上交了。非常小的时候,跟父母讨
论过压腰钱 (压岁钱)的归属权,我妈给我讲了非常清楚的道理,那是他们用给
别人家孩子的压岁钱换来的,所以我无权所有。
非常有道理。所以,我记得哪个同学跟我提到父母不让他选自己喜欢的专业,我
撇撇嘴问,"谁出钱。"同学答,"当然是家里啊。"我说,"谁出钱谁有权决定。"
真正我自己挣自己花的第一桶金,得到初三。当时班主任也是语文老师黄晓萍老
师组织我们参加一个作文大赛。名目似乎是叫什么"杯",我就想起这么一个字,
惭愧,不过肯定不是新概念就是了。作文交上去,我都快忘光了的时候,说获了
三等 (?)奖,奖金叁拾元!
我把钱交给我妈,我妈乐够呛,说儿子能挣钱了。敢情前面卖对联送福字的不算
呐,我写到这里才想明白。我妈说,"都给你了,拿去买糖葫芦吧。"
"啊?"三十块钱,能把一个老头的糖葫芦摊包圆了,还能有剩。
后来好几年以后了,我总结出来,我妈一想到好吃的或者任何好东西,糖葫芦稳
居第一。估计是她非常喜欢吃 (我问过,她否认非常喜欢) ,所以推己及人了。
不过我从小牙就不好,那玩意实在难以消受。
这些钱后来给黄老师教研组的老师们买了一大塑料袋桃子。剩下的……似乎给我妈
了吧,我实在想不起来有什么想买的。
黄老师教导我写作文的时候曾经说过,"这个地方如果这么写,看起来就更好了。
"我说,"老师,你不是说写作文要真实吗,它没那么发生啊。"黄老师说,"杨贵
福啊,我告诉你,你这也就是还在学校啊,以后到了社会上,可不能这么说话。
"
大约20年后,我听懂了黄老师的教诲。这句话翻译过来的大意是:你这么做是错
的,即使现在,其实也是错的。
关于真实,当时另一位语文老师,俺非常之佩服他,只是名字真是一时想不起来。
他教导我说,"杨贵福啊 (这个确实是一般性的开头,不过为了还原语气所以我没
有省略),比如说吧,咱们作文要求语言平实,不过考试作文,还是华丽的得分
多啊。你得想想啊。"
20多年以后,姚海军老师说得更直白一些,我终于明白了当年那位语文老师的
话,翻译过来就是:你要是有那个水平吧,你就可以平实,不过呢,你指定是没
那个水平。
20多年来,我的语文水平确实有巨大的进步,老师们如果看到此贴,当为我欣慰。
昨天参加图书馆网站建设会议,刘大侠发信时说"最好要有PPT",我就成功地翻
译为"你*得*整个PPT"。实践证明,我的翻译是对的。
书归正传,我的第一桶金,30元钱,是写作文挣到的。
那天谈到大学当年的同学还有师兄们的性格及他们现在的状况,感叹当年啥样现
在还是啥样,一点也不差。读到上一句,可能有的同学会说,你咋不谈谈师姐
呢?是这样,我本科是在物理系就读,几乎清一色的男生啊,师姐只有三个人。
这种性别偏差,到了我们这届才有缓解,比我们班,男女对等,一班和二班,一
共10个女生左右。而这个物理系,居然是在几乎清一色女生的师、范、大、学。
对比得多么鲜明。
当年大学的时候,同学们一般做家教啊,回家坐火车的时候顺便卖个冰棍啊,什
么的。这些都是常态。
我一共做过两次家教,其中有一例非常失败,即非常失败率高达50%。原因,以后
再细说。反正,虽然也挣了点钱,似乎每小时5元 (?),但实在算不得一桶金。
那两例以后,再没做。
不想卖冰棍,因为铁定以后不做商人。不做家教,我计划以后不当老师 (注:世
事难料) ,因此不必训练教学能力,而且认为家教也训练不出来什么教学能力。
有同学说,以后不做商人或教师,也不影响你大学时候试把两下子啊。恩,是这
样,我担心一试之下会爱上那些行业。我多么热爱计算机,怎么会舍此而求他。
于是,终于到了大二的暑假,家教的同学,没错,我的同学中做家教的同学,介
绍我去了一家计算机公司。装计算机的公司。事先说好了不给钱,白干长经验。
从此,开始了我的IT生涯。
然后,这是一个非常非常非常漫长的故事,长到仅仅开头部分都没法被一篇贴子
容纳下来,只好不写。反正吧,到了某一天,同事说,"臧老师让你上去一趟。"
我知道当时正发工资呢,但是事先说好了没我的份,所以也不做念想,上去估计
就是分配任务呗。结果臧老师给了我四百元钱!
这是我第一笔从计算机挣来的钱,但是现在回想,完全忘记咋花掉的了。
后来。后来就是很长的故事了。比如,毕业了,第一个月的工资是470元,还没有
我兼职挣得多。比如,我经常一定要在开头对学生说,"这个活是没有钱的",这
个时候,我总是要对比臧老师和那些满嘴跑火车给我描绘各种美好未来的老板
们,然后告诉自己,不要做当年的自己讨厌的人。
后来。后来才知道,苦难永远只是刚刚开始,更闹腾的,都在后面等着呢。幻想
破灭,少年开始长大,知道坐办公室穿白领就拿钱啥的都是骗小孩儿的,知道自
己的日子不会比父母现在过得更光鲜,可能比他们年轻时候更艰苦。
不过,尽管后来种种或喜或悲或得意或凄惨如何丰富,第一桶金一直铭记在心。
--------------------
博客会手工同步到以下地址:<p>
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]
20120625
抛掉重用的幻想,好使就行:用脚本生成脚本的例子
阿于同学说过,合肥同学不懂什么是"好使",所以,先解释一下。"好使"可能是
东北方言,大意是 可用,能工作,趁手。
今天讲的是在用脚本生成脚本中,可以对付到什么程度。
当年写用vba自动判卷的时候,某张同学说"这个要是再这么一下,那就更好了",
小韩老师说"唉呀大姐 (我记得是这样说的,小张比小韩要小) ,你是要开发个
工具,不是产品。"
韩老师说的话大抵容易懂,而深刻,对我颇有教益,这一句就是。代码可以重用
到什么程度,给用户提供多大程度上的方便 (友好之类的),在工程中,不仅要
看未来和追求,也要视为一个急功近利的短期行为。
如果我们在VBA判卷上做得那么完美的话,当年我跟偶像多半个下午判完全部试
卷的传奇故事就不会发生了。我们可能今天还在追求某个完美的细节。我记得当
年李老师质疑过我的判法,"你这么判,要是那么答,不就错了也得分么?"我
答,"是啊,不过换成人判,比如你,就能那么认真了?"
写程序,我们要的只是比没程序更好,不是最好。"最"这种事,只存在于当今的
媒体、人民的幻想及文革前后的文革之中。对不起,错了,文革语言不仅是"最
",而且是"最最"。需要补课的同学请自行阅读参考书,这里不展开了。
有时候,追求完美的重用--对未来的无比重视--会让我们失去今天。当然,失去
今天也就没有未来了。
比如,年轻男女经常讨论的问题,类似于"以后到底谁刷碗"啊这样的。重用这和
这个类似。事实上,以我们的年轻和技术之浅薄,大多时候,因为没有足够的经
验,我们根本无法预测未来会如何发展。重用是什么?重用是在*未来*被自己或
别人*再次*使用。咱们这点破技术,知道未来如何再次使用这些代码么?
有同学说,"书里说了"。呵呵。
书归正传。用脚本生成脚本,一看这题目,不少同学就会想到编译原理啥的,还
有同学想到了lisp里的宏。我说的不是这些高级题目,而是极其朴素的刚刚能对
付得过去的手段。
1. 所谓朴素
所谓朴素,就是尽可能不使用和依赖高级的技术。比如,我到C++中的 flow
control的时候,讲到循环执行,给过这样的例子:
请输出从1到5的数字。
同学们给出的答案都是:
for(int i=0;i<5;++i)
{
printf ("%d\n", ++1);
}
当然,漂亮。
我的一个答案是这样的:
printf ("1\n");
printf ("2\n");
printf ("3\n");
printf ("4\n");
printf ("5\n");
我看到了,得有超过半个班级的同学对我的写法嗤之以鼻。这代码太烂了,马上
就会有人指出,"要是输出到100呢,要是输出从8到20呢。"
我的代码的缺陷,缺乏重用性,数量大了不好改。一,谁说我准备重用了呢?我
们一看到别人的问题,往往就要预想提问者的动机,有时甚至解读过度。中层对
上层的解读,往往如此,下层就受了苦。二,数量大的时候,其实也简单,我可
以在excel按ctrl拉鼠标,得到数字序列,然后再把这一列粘到C代码里。
之所以能这么对付,是因为,我也可以假设这段代码只用一次,而且只被我一人
使用。
2. 例1,跟牛同学的讨论
前几天跟刘同学一起破解了个软件,我的解法暴力而有效,刘的解法更好,极其
优雅。可惜现在似乎还不宜显摆具体内容。不过,后续与牛同学的一些交流可以
在此讨论一下。
我为牛同学分配的任务是,把这好几千个文件的名字改成符合某个算法要求的文
件名。文件名的对应关系,一部分在数据库里,一部分是C#代码。
你打算怎么实现?牛同学准备写C#程序读数据库。
我建议的方案是这样的,一个标准的对付流程。
(1) 写C#程序,就是那段算法;
(2) 把数据库里的作为算法输入的那一列复制到C#代码里;
(3) 让段C#程序,输出很多行这样的文字:
mv "源文件名" "目标文件名"
以上,用C#生成了shell程序或批处理,然后跑一遍就改了所有文件名。C#本身
并不操作数据库 (人手拷过来的),也不操作文件系统 (由shell程序完成)。
如果算法变了呢?如果源文件列表变了呢?如果……所有这些问题的答案都是:重
新跑一遍上面的流程。用人,而不是用程序的可重用性。
当鳄鱼冲上来咬你的时候,有一种情况,你绝对不要用刀。那就是,你手头没有
刀的时候。另一种情况,不建议用刀。那就是,你用刀非常不熟练的时候。你可
以抱住鳄鱼的嘴,它的咬合力惊人,但是张嘴的肌肉非常软弱。这个时候,并不
是你训练自己用刀的时候。
同样的,当你不熟悉数据库操作,不熟悉在C#里文件系统操作的时候,你应该做
的是 不用它们。项目是用来解决问题的,其原始动机不是给咱们训练技术的--
技术可以在自己练习的时候做。项目唯一能训练的,是工程能力。就像鳄鱼问题
能训练的是随机应变和灵活寻找解决问题的手段。
3. 例2
我有个top250电影目录,下载的时候不知怎么整的,文件名非常长,而且中文部
分是乱码。一直准备把中文部分都删了,长期拖延,昨天晚上整了。
原始的文件名类似于:
Top093.罪æ¶åŸå¸‚.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
准备改为
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
这样的文件有250个。
这么整的。下面是一个整行
$ ls -1 Top* | awk -F. '{ first=$1;
min=length($1)+length($2)+3;max=length($0);print ("mv \"" $0 "\" "
first "." substr($0,min,max))}'> ren.sh; chmod +x ren.sh
然后,执行这个脚本,文件名就都改完了。文件中有 ' 或 ( 的,可能会出错。
ren.sh这个脚本,是重定向输出的前半段产生的。这是unix系统管理中常用的一
个手段,用程序A生成一个脚本,用生成的脚本,而不是直接用程序A解决问题。
脚本的内容是很多个这样的行,下面也是一个整行:
mv
Top093.罪æ¶åŸå¸‚.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
4. 例4
做等级考试的系统时,要批量ping机器以确定每台机器网络正常。我也使用了类
似的方法,用C生成ping.bat。bat里面是很多ping目标地址,及只ping一次的参
数,似乎还有一个超时设置为半秒的限制;C负责循环IP地址,好象是这样
printf ("ping -n 1 192.168.0.%d", i++);。
IP地址的循环,我也用excel实现过。那套方案里,连C也不用。excel的几例中,有
一例是文字"ping -n 1 ",其余几例是IP地址的4个部分,其中最后一部分用
ctrl实现数字的递增。
更早,也更朴素的方法,我用记事本复制第一行ping,然后粘贴几次,每次复制
已粘过的,行数翻倍增长;然后再手动修改IP地址最后一段。
这些方法都很朴素,但是有效。
5. 总结
核心思想是,用代码生成代码;在这个过程是,保持注意目标是"小工具",抛开
重用的幻想。
关同学前两天提到,我们在既往的开发中,代码最终都没有重用。我想,代码不
必重用,或者说,我们远没有达到那个高级阶段。能够解决问题,并重用解决问
题的手段--设计,就非常不错了。而且,毕竟设计很值钱,而代码够便宜。
--------------------
博客会手工同步到以下地址:
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]
20120621
遇见高手
高手似乎不常见,不过那是因为我们没睁开眼睛。"高手"二字又不是贴在脑门上
的。
今天先是见了奇异天象,然后见识了巨牛高手两位。展示天象的这天,是天天得
见,只是不常抬手,这两个巨牛高手也是早就认识,还有一位没事就见,不过未
曾经常一见身手。
从净月去应化所,我们坐关同学车里。我用嘶哑的声音大喊,"彩虹!"包师弟
说,"啊,你看到的是玻璃吧。"是啊,大晴的天,之前也没下雨,怎么会有彩虹。
不过二猫妈也看到了,不是我的错觉。关同学说,"我也看到了,在那。"我说,"你
快别看了,好好开车吧,吓死我了,你。"
我打小到大没见过这样的彩虹。一长条,非常宽,横在天空里。随着车的移动,
能发现很有一部分藏在楼群的后面。变换了几次位置,始终没有看到全貌。我
想,得有几十公里的长度吧。是谁当时说,"是彩虹桥么?"我想起了赛德克・巴
莱,不过,说话人的意思,也许是以为我在讨论远处的某座水泥桥,叫这个名字。
赶紧掏相机,不停地拍。经常有人问我,你老带个相机干什么。我一般答,"万
一哪天遇到UFO。"今天,虽无UFO,然而也派上了用场。
晚上检查照片,发现其实那不是彩虹,而是更为宏大。那是日晕的一部分,是双
层日晕的外层。而内层日晕,因为阳光太刺眼,我们几个人都没有注意去看。
高手也是这样,不显身手时,你哪里知道这家伙居然如此牛。高手故事之前想起
刘老师讲的一位体育老师,身高一米五几,非常瘦小,但是重达90多斤,练什么
武术的。一次遇到变相劫道的,上去是跟人家握手还是什么,反正一个照面对方
就服了。试想,她就这么往你面前一站,如果不显气场,哪个能看出来这是高手。
我常用的座机是x200笔记本,装了Ubuntu 10.04 LTS,dell U2311H显示器。这
一组合的结果是,长期以来,我只能工作在1920x1080的分辨率下,而我的视力
相当不好,只好更贴过去。还有一个后果,因为x200只有vga输出,所以dell显
示器的hdmi及dvi-d接口都派不上用处。这种分辨率下,vga输出的显示器上经常
有条纹慢慢飘过去。
高度近视的同学都知道飞蚊症。当年我问医生,能手术不。医生说,你不是还能
看见么,先对付着用吧啊。我说,看着这么闹心可怎么办啊。医生说,调整一下
心态就好了。
我明白了,忍一忍吧。后来条纹到是没更重,但是我想,长此以往,眼睛该更完
蛋了。准备忍痛花钱解决一下。花钱,指买点设备,不是换眼睛。
以前就跟包师弟谈过。我说:我那机器有点毛病……包师弟说,因为你那是VGA的,它
的分辨率上限就是这个,规范啊带宽啊云云。
今天,我又重提这个。我说:打算买个PCMCIA卡。
包师弟说:你换个操作系统就好了。
我说:我不打算用windows了。
包师弟说:那你升级一下呗,原来的东西还都在,我升完了。
我说:嗯,不错。
包师弟说:其实你用这样的分辨率 (他指着牛同学的大约1024*720说),就不晃
了。
我说:我的显示器不支持啊,16:9的分辨率只有这一个,其余的都是4:3,看
着太扁了。
包师弟说:那是你的操作系统不支持,不是显示器不支持。如果你的操作系统连
这个分辨率都不支持,你确定它支持PCMCIA。
我顿时没词了。
我:我打算买个vga转dvi-d。
包师弟指着我的vga口:瓶颈在这里,从这出来的时候就有条纹了。
我顿时再次没词了。
包师弟说:其实应该能添加定制的分辨率。
然后,晚上,我添加了定制的分辨率,结束了长期的小字生涯。虽然由于弱视散
光还是看不清楚,但是总比小字容易辨认很多。
再然后,我准备给包师弟发封邮件感谢,发现他已经把一个链接发给我了,就是
如何添加定制分辨率的。
可能有的同学说,添加个定制分辨率么,你这么感慨。
这跟另一件事非常类似。刘同学替我讲算法与程序设计实践课的时候,选的主题
是用setjump实现C语言的异常捕获。我事后对同学们说,他要讲的并非setjump
函数及用法,这些知识没有多么重要。他要讲的是:如何在一个受限的平台上使
用受限的开发工具,实现原来没有的功能。
这正是工程师的一个重要素养,修改原有方法,实现新的功能。
包师弟的杰出在于,精确的判断路径。他一语道破,为啥我的那些解决方案都是
愚蠢的。这甚至不必实验,因为我的计划是不符合原理的。我仅知道原理,并认
同,而他看到了由原理导致的结果。高手的特点就是,你只看到了那家伙一侧
身,而高手知道他是准备来个后踢,然后一脚踹他屁股上。
下午,见另一位高手,董老师。董老师卡卡讲了半下午,数学、信号系统、电子
学、化学、计算机程序--结论是它们都是一致的。事涉项目机密,具体内容不能
深谈了。
总之,牛人说"这个挺简单的",那个时候,他真的觉得那个东西挺简单的,以他
的标准。而当他实现,对他真的很简单。因为我们的那些错误技术路线,他根本
就不会遇到。
比如,他使用针对特殊问题采用特殊的方法,他更清晰地看到问题的本质 (什么
是什么,具有什么特性,而不是什么,那个特点一点也不需要考虑;比如包师弟
上午指出:临域均值是一种拟合,使用线性函数,所以平滑不是什么特殊的东西)。
还有。当我们看到那个理应简单的电路,结果高手用了相当多的器件;那个应该
非常短的代码,高手写了N长。那正是他们比我们高级的地方。他们的设计能够
在更恶劣的环境工作,能检测更精细的信号。
我们的,只有在特定的场合下能测量特定的东西。更糟糕的是,我们可能还不知
道,以为高手们的设计那么多多余的东西。所谓沧海横流,方显英雄本色。我们
平时也挺牛的,沧海一流,我们就成了培养英雄的土壤。
有一次修打印不干胶的机器,串口接计算机上,那个串口坏了。我把机器换到另
一个串口,然后把软件设置中的串口也改了过去。因为第一个判断就对了,所以
前后不到半分钟。所以,当时听到"哇,原来这么简单啊。我也会啊。"
作为答复,我当时讲了个故事。一个家伙马桶堵了,怎么也捅不开,只好找水暖
工。水暖工来了以后,三下五除二把马桶下面打了个洞,然后就修好了。马桶的
主人也是,"这样也可以啊,我也会啊。"
可是,你不知道"这样也可以"啊。这就是画一条线999美元的故事。
在不干胶机器的案例中,我当时还有没说的。除了第一方案,我还设想了四五种
可能的原因,如果一击不中,我还有后手的。你也有么?
我只是极其偶尔才冒充一把高手。不过道理是一样的,我们见不到高手,往往是
我们自己的眼睛睁得不够大,以为他们与我们相同。那些不同,正是我们无缘或
没有能力见到的,把我们与英雄区分开来。
听说海因莱因认为"一个人应该有能力换尿布、策划侵略、杀猪、给轮船掌舵、设
计建筑物、写十四行诗、平衡收支、造墙、接骨、安慰临终之人、写菜单、发布
命令、合作、独立工作、解方程、分析新问题、施肥、写电脑程序、做可口的饭
菜、有效地战斗、英勇地死去。"我除了最后一条能部分实现,其余的,竟无一命
中,真是失败。命中那部分,就是能死,甚至这一条也无法全部满足,因为绝对
无法做到英勇。
不过,能遇到高手,也算幸事。是不是还有很多人以为自己一直没有遇到过高手
呢。
--------------------
博客会手工同步到以下地址:
[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]