新年游北京

其实来了北京还一直没游过。。我是一只不懂游泳的鱼~~漂啊漂泊在外地~~(哈哈转眼文艺起来了。。)

本来都想继续窝家睡觉的,没想到昨晚忽然下起雪来,今天早晨一睁眼,满世界白白的一片,加上前几天不幸“罹患”的流感也好了,心情极其好,说走就走,瞟了两眼地图就出发了。

原定计划:天安门-南海-中海-北海-前海-后海-西海-鼓楼

这个全是海计划实在是瞟了一眼地图随意想到的。。回想一下假如真的按这个路线走了还不得无聊死。。当初只是觉得没带地图嘛,沿着一堆海边上走比较方便,不用问路。。

结果一下地铁就已经迷路了。出发前说好了尽可能不问路练习自己倒霉的方向感的,所以很是坚决的自以为向东走了快半个小时,结果发现其实自己是在往西走。赶紧掉头回去,终于迎来了(其实感觉没那么)恢弘的天安门广场。下着大雪气氛奇迹般的肃穆而宁静,连路边趁雪卖帽子手套口罩的吆喝都没那么刺耳了。穿地道进广场,北京实在是一个过于谨慎的城市,啥地方都有安检。不过也好,就当是被交警姐姐上下乱摸了一通,就感觉很开心了。。囧
不过鉴于天安门自杀事件那么多,多检查检查还是有道理的。恩。一边这样想着一边在空旷的广场上疯跑,像小孩子一样翻滚玩雪。。超级开心。。一边气喘吁吁的一边跑过去拜见了人民英雄纪念碑。一般来说嘛,设计成柱状的东西都是有点阳具崇拜的意思。比如说法国人的铁塔(你知道法国人眼里没有别的…)。所以这个也不例外。。就好象为摆脱封建建设祖国奋斗了数百年的人民英雄们,向着那堵红墙竖起一根手指。好吧,或许设计不是这个本意,不过这样YY也挺让人心平气和的。。

再次下地道,从刚才乱摸我的那个姐姐身边穿过去,向北海进发。为什么说是向北海进发呢,本来的计划是要从南海经中海去北海的。。然而一下子找不到路,只看到一条胡同隐隐向北伸去,也不知道会通向哪里,就假装是往北海走吧。转念一想,莫非“中南海”就是中海+南海。。若真是如此肯定不会让我“经过”的。。所以不去也就罢了。。

胡同很宽敞,不过也能些许感受到老北京的韵味。毕竟还是皇城根底下,估计还不是平常人住的地方。一个小屋门口贴着“私人府邸,非请勿入”,大笑肯定以前让不少旅游观光打酱油人士走进来溜达得烦死了。。再往前走肚子开始叫了,在一家不太靠谱的小店吃了碗不太靠谱的牛肉面,面条不靠谱,不过牛肉丁很好吃,满足了我无语的肚皮(喂喂,肚皮,你倒是说话呀…)。

走着走着浑身就开始发起热来,越走越有劲。果然宅男不能当久,一直窝家一定要生病的。。你看出来逛逛多开心啊。就是两只脚比较郁闷,还穿着春秋天的跑鞋,冻得发紫(好吧我承认我没把鞋脱下来看颜色…)。加上前面踏雪踏得太HI,雪全钻进脚脖子里了好冷好冷。。一路上赞叹北京到处都是名人痕迹文物古迹,这边一个中学是陈云提的字,那边一个小学用的是国家级文物的庙宇。。。闷头又走了很久终于出了巷子,心想这回还是问路吧,结果一抬头就是北海南门,好吧天助我也。

唱着“水面倒映着美丽的白塔,四面环绕着绿树红墙”,就走进了北海。从小就喜欢这支歌,从小就向往这个虽然大雪中完全没有微波荡漾绿树红墙的北海。尽管我早已经不带红领巾,也完全没有心思去当起双桨。其实游北海的主要是老年人居多。果然这完全是一个回忆中的故园。偶尔有几个外国人和带着三脚架和长枪短炮的专业摄影人员或者职业装逼男。两个老太太在雪里照相结果滑倒了两人跟欢声笑语一起摔到雪堆里,周围的人都看呆了。
爬白塔山,古人建的台阶果然好陡的,古人果然是不怕吃苦,身体练的也比现代这班宅男强得多。下了大雪我爬上去还是要手扶着石墙慢慢走。心想要是年轻十岁准一溜烟跑上山。果然转眼看到一个小男孩,两手叉兜蹬蹬蹬就下了山,自愧不如,上山易下山难啊,自愧不如。心想果然老了老了。山上亭台楼阁很有旧时风韵。以前小的时候学画,画山水花鸟亭台,怎么画怎么不像。总觉得那松树怎么可能那么怪异,那亭子又怎么可能有那样翘起的飞檐。然而今天看到的,全是过去画过的东西,积雪的苍松,孤单的亭台。往山下一望尽是万千屋舍,炊烟袅袅,雪落屋檐。 正感叹间,只听得扑通一声,刚刚下山那小男孩一屁股摔倒在台阶上啦。。吃了这一次亏,吓得连一步都不敢下了,慌慌张张在台阶上坐着。。唉只好无聊的把刚才的喟叹都收回来,继续往山上爬。
在爬就没什么话说了,像是遭了沉默法术一样就逛完了北海,从北门出去,眼前就是前海,只见一片欢乐的都在滑冰,我想想自己走了这么久也感觉到冷了,不如冲进去蹦达蹦达暖暖身子。可惜咱根本不懂滑冰的,也不想玩那冰车,就土掉渣的在冰上打出溜滑玩 。。不过还是很欢乐的。。把前几天在寝室里放音乐大闹天宫没闹够的劲头都使出来了。可惜雪下得太大,冰面一点都不滑,时机果然不对啊。这冰上果然没有代沟,老太太老先生,情侣们还有小孩子们,都在这里撒欢。好吧像我这样形单影只的比较另类。。。不过也还是有一些的。。比如那边那个穿着警察制服的男孩子,跟我也差不多大吧。。

热闹够了疯也发够了,继续向北走,才发现自己的策略完全失误了。抗冻其实是个体力活,把体力都耗掉了才会觉得冷。想起来以前说过冬天掉进水里,千万别脱了大衣自己扑打,除非离岸边进,若是掉进大海里,就得穿着大衣抱成一团节省体力,这样即使在水里也是最抗冻的方法。。唉这下疯发的虽然浑身出了不少汗,反而觉得更冷了。。也不知道鼓楼在哪边,心想走到哪算哪吧。没想到沿着湖边走出去,往旁边一望,正有一座红色琉璃檐的塔楼,近前一瞧,正是鼓楼。今天老天真是玩了命的帮我。开心死了。
鼓楼钟楼一起游下来,没啥曲折。只是再度感叹了古人建的楼梯就是陡。鼓楼是木制,钟楼是石质。一开始还不知道为什么会这样。然而登钟楼的时候,每一步台阶都能听到上面金属的回音。原来整个钟楼都建成大钟的共鸣箱 ,用跟金属频率比较接近的石头,才更容易产生共鸣吧。我是这样想。于是回想鼓的木桶结构,果然用木制建立鼓楼才更能与木材共鸣吧。看了介绍牌,心中想着古代一到晚上七点,击鼓鸣钟,闭城门断交通,大家都回家休息,鸡犬不鸣。暮色消散万家灯火。那光景定是美妙。不过估计也就是新鲜吧。假如让我天天九点睡觉,又没水没电(更别说上网打电话…)那肯定得无聊死。。于是果然又叶公好龙了一次。。

再往回走,一路上看到到处贴着“文明拆迁”之类的封条,各大小商店都在放血甩卖。尤其一家店,周围用金属围栏围得严严实实。上面贴满了各种“合法文明拆迁”之类。又被撕得不成样子。在一瞧那围栏里面,只能看到灯箱被扯得稀烂,灯管也砸的粉碎。至于再里面什么情节,就被围栏围住看不到了。心想这围栏估计就是用来掩盖这坨“合法”和“文明”的。。
不过话又说回来,这拆迁是为了修地铁。如果地铁不修,作为老百姓我照样会骂这班人办事不力,连个地铁都修不来的。然后修了地铁,又要骂拆迁过于暴力。于是人家肯定是正反不得好。一般来讲,这时候干正事的人就可以大喊“站着说话不腰疼,要不你来试试”之类的回敬。可惜咱们貌似听不到这种回敬。主要还是坚持党的领导是写在四项基本原则里并且不可动摇的,这种事情没法说“让你试试”。。。于是干活的那帮人只好继续假装哑巴吃黄连吧。。。

总归欢乐的游了北京,感叹了自己老了然后又默默把话收回来了,之后又感叹了一下古代人楼梯建的真陡,再之后又感叹了下怎么每回自己都是形单影只的,有多少开心事也没人分享,虽说可以挂到博上来说不定有人看看。。不过文字能表达的,也只有超级欢乐的一日(其实只有半日而已)游的一点点而已嘛。。

希望能一直这么欢乐下去吧~新年要努力啊!也祝大家欢乐还有好运。

元旦快乐!!

恩。。元旦快乐!

好吧。。自娱自乐一记。。

一年很快就过去了。。很久没有这样自言自语的回忆往事了。。不过今天还倒轻松。。经历了压力和负重的一年,能静下来想一想,确实很轻松。就像收拾一个整整一年只顾着往里面乱塞东西的旧钱包,里面有太多让你出其不意的东西拿出来回忆了。。

大学生活就这么匆匆结束,以至于还没来得及记住他的味道。满脑子还充满着初中高中记忆,就已经恍恍惚惚被赶出大学校门上街打工了。。回想起来,幼稚的心曾经憧憬了多少年大学时光啊。曾经暗暗发誓要在大学期间做出多么宏伟的事业,曾经YY过多少浪漫和梦想。。结果全都荒废在每日懒觉和课堂上的嗑睡上了。。再就是补作业的纠结和备考的慌张。。无聊的假期消耗在荒蛮土地之间的“快速列车”之上,再就是依旧昏黄的灯光和项目。。当然也少不了昏天暗地的游戏。。不吃精神鸦片,不知人间苦辣酸甜。。。光有好高骛远的雄心是万万不行的。。要么就真有力可拔山的盖世之气,要么就有甘于消沉堕落的平凡之心。。固然学学刘邦的狡猾蛮混也不错,不过相比胜者为王,败为草寇似乎更适合我。。

悄悄地说声。。最好是能败得回肠荡气月夜箫声秋风落叶英雄没骨。。不过嘻嘻又是YY啦。。

疲劳,困惑,纠结,彷徨。。

像我这种急性子直心肠,还真少遇到这种扭曲的症状。。也不知道究竟怎么了。。想要的太多,只好跑得更快跳得更高飞得更远,最后也只会摔得更惨。。然后想要的还是得不到。。只是徒增了期盼和压力。。只是徒增了疲劳和包袱。。于是背着这包袱,挤出一个笑容,继续前行。

思考。。我所能剩下的唯一荣耀。。因为思考,能把自己推上至高的宝座,尽享宇宙之宏伟自然之广博人性之多变。。然而说到底也不过是自己的YY而已。。像是过家家的小孩子。。。

虚荣,虚荣而已。。

以此虚荣献给这坨死要面子活受罪的小强吧~

新年快乐!!!

手机的相关知识记录

虽然做了挺长时间手机开发了,对手机的最基本的功能完全没有了解。今天听了公司里面的一个讲座,讲STK的,顺便把SIM卡的功能之类的也一起做了research, 一起贴出来做个总结吧。网上很多资料是有关破解啦之类的邪恶内容,就不记录了,主要以了解大体的功能和原理为主。

手机的基础结构是一个叫做Mobile Equipment(ME)的芯片组和一片SIM卡构成的。它们两个合起来叫做Mobile station(MS)。智能手机处理复杂应用的那个部分,大多数情况使用了另外一片叫做Terminal Equipment(TE)的芯片,计算能力应该比ME来的要强一些。给我的感觉TE的构造就更加近似于PC的CPU了,此外多数智能手机还会有一片显卡芯片。

SIM卡里面也有一个简单的芯片,但是计算功能非常弱,它的功能仅是用于做一些加密计算(稍后提到)和一些简单的逻辑判断。因此基本上来说SIM卡就是一个纯粹的存储装置,没有任何计算和通信功能。打电话发短信上网等等功能,基本上都是ME配合无线设施完成的。

但是为何没有SIM卡就不能打电话发短信呢?这是因为SIM卡里面有一些与手机基站交互的必要信息。手机开机时,会对SIM卡做合法检测。SIM卡内有ICCID和IMSI两个明文信息和ki作为信令加密的密钥。ICCID包含了SIM卡的一些基本信息比如使用的服务类型,国家地区等等,而IMSI是SIM卡的全球唯一标识符。在手机运营商那里,这个标识符跟一个手机号码唯一对应。手机开机时,要对ICCID和IMSI做合法检查,确定SIM卡的合法性。同时将IMSI发送到基站,基站接收到该IMSI后,临时生成一个随机数RAND,发回手机,手机将该RAND传送给SIM卡,SIM卡使用存储在卡中的ki和硬连线在SIM卡中的加密算法,生成一长一短两个密文。分别使用的加密算法称作A3和A8。A3生成的短密文称作SRES,发送回基站,与基站生成的密文进行匹配确定是合法的SIM卡。A8生成的长密文当作接下来通信使用的加密密钥。通信加密将使用A5算法。注意到ki, A3, A8都是硬连线在SIM卡上的,并且运营商对这些信息保密,以防止SIM卡被破解和盗用。而A5算法是在ME上运行的,由于整个通信过程都要持续计算,这个算法必须非常简单,并且为了保证手机可以跨国漫游,这个算法其实是全球统一的。而A3, A8两个算法仅是定义了输入和输出的位数,没有要求加密的规范。各个运营商理论上可以采用各种不同的算法来保证安全性。但是事实上这些算法也有些通用的标准,导致某些SIM卡可以被破解。

由于运营商的惰性,导致事实上采取的A3A5A8算法都有通用算法。虽然这些算法被保密,但A3算法的一部分仍然泄漏,并在研究人员使用SIM卡读卡器,对比已知的明文和密文进行测试,推算出了未泄漏的其余部分。使用已知的算法,使用巧妙设计的输入并分析输出,就有可能破解任何SIM卡上的ki密钥。因此有些SIM卡一卡多号,或者例如iphone手机可以破解后加入到移动网络,就是利用这个漏洞。由于v1版本的A3算法被破解,国外后来又开发了v2版本的加密算法,目前没有泄漏,这种SIM卡就是无法破解的了。但是由于这种算法刚刚研发出来,技术上不稳定,因此国内运营商采取的办法是在v1算法上稍作修改,称作v0算法。此算法避开了原先v1算法被破解的某些漏洞,因此更难破解。但由于原理基本相同,实际上地下仍然有某些破解的办法。对于SIM卡破解的方法,此处不做任何讨论和记录。仅对SIM卡曾被破解的事实作为历史注记在此说明记录。

除此之外,手机启动入网时系统也需要对本机进行检查,手机上有一个设备码IMEI用于发至基站以检测该手机的合法性。

手机与基站通讯,首先手机定时与基站通信,使得基站确定手机的位置,判断手机应该属于哪个服务小区。这里涉及到一个很有趣的算法问题即如何生成Voronoi diagram,即beach-line算法。不在本文议题范围之内。

手机第一次与基站通讯,应该会得到基站的一个RAND并用ki计算出今后加密信道使用的密钥。此外基站会临时生成一个TMSI发送给手机并存储在SIM卡中。此后就不再传输IMSI而仅传输TMSI,避免其他组织个人监听信道频道获取个人信息。TMSI会定时更换以保证安全性(当然这些加密措施仅能阻止第三方的监听,很显然运营商当然能获取所有的通信资料以及手机所在的服务小区,因此有些运营商也提供API允许其他第三方获得这些数据,当然了,这就是出卖你的隐私吧,用手机是没有隐私可言的)。

ME与SIM卡通信采用规定的编码格式,除可从SIM卡中获取相关数据之外,还可通过SIM Application Tool Kit(STK)做其他的应用。比如动感地带SIM卡上自带的动感地带的一些服务,就是通过STK完成的。GSM 2G中的STK协议在GSM 11.14中定义。3G中STK被USIM Application Toolkit(USAT)取代。

由于负责计算和消息传输的都是ME,SIM卡本身存储的都是出场时预先写好的一些目录项和每个目录项对应的功能:例如深入一个子目录,或者接受一个输入框,或者弹出一段文字等。这些功能中如果有对应与基站通讯的,ME就将相应的消息发送的基站,并接受响应。这些相应在智能手机上,可通过TE来显示,可通过各种UI来展示。

好吧,能做的记录就是这些了。接下来还需要研究的内容有单片机的工作原理,ME的结构,手机与基站通信的物理机制,手机GPRS上网的机制,以及GMS,TDMA,CDMA,WCDMA这些网络的异同等问题。以后再慢慢查找资料慢慢做笔记吧。

下面列出引用的网址:wiki的链接已经在文中给出于是不再重列
http://www.moon-soft.com/program/bbs/readelite125680.htm
http://www.52rd.com/Blog/Detail_RD.Blog_xuanny_10418.html
http://ido.thethirdmedia.com/article/frame.aspx?…
http://www.mscbsc.com/27829/viewspace-7105.html

Lippam’s talk, first 5min

Today we will talk about ways of thinking about programming languages that i hope you find it’s interesting. Since it is relatively informal, feel free to ask questions as we go if you like otherwise you can go and all ask the questions later.

The image here is how actually I’d like to think about programming. Here in the middle I think projected two imaginal is real statical in the programming. It’s the elemence that you think you understand the program and the code and you do that on your computer terminal and you write your code. It’s really separated from the runtime of the program. So you do the best of you can imagining how the application should work. but its all that in your code that it’s really not going to change once it actualy executed. It’s a very static way of doing execution.

Lippman's talk in Jiading
Lippman's talk in Jiading

Then you have to work dynamic aspects of the programming. Those little alligators coming all of the program really of the character of the runtime. They go and they use their little movements and they go back to program. And that is more going dynamic aspects of the programming, and more interesting, but also more difficult, because those things are moving around. So you see aspects of code you know runtime and the internet that dynamic and more interesting in a way, and you can interact with the plasticsmatical programing ability to generate code at runtime. but it’s much slower and more challenging to be able to come that way. .NET is trying to do that. Java has the semantic specs in fact.

In c++ we  basicaly donging the part that is rejected. that’s the two imagional code. It’s staticaly runs very fast. so the static program doesn’t really look like that exciting is what the runtime machine runs really fast, and they fly the alligators and they think they’d like to get to. but its hard to know how to do that in the time frank. That let us get the result fast enough.

So a lot of more people is trying to do is geting the alligators walking around, and find out what it’s thinking trying to keep them fed and played. But a lot more actually hasn’t be done waiting for you actually run you program is not much you can do about it. So when you see in c++ program really there is nothing you can find out about program when it’s executed. You can find out the machine. You can always break through a c++ program and get access to the registers and memory. But you can’t really get access to the runtime. There is no way of doing that. We invented in c++, the ideas of runtime programming and meta programming and finding out about the code and  generating code. That really was feasible. In the late of the last ten years or so, you know .NET and java is in a movement that try to have more dynamic language. But problem is that they runs very slow and nobody is quite sure how to do it.

So in the sense we have transition that you keep just entering into in terms of programing because what we really like to be able to do is to have programs bodyfy and change themselves as the behavoir of the program goes to look more like living things, if you will. And I think it’s where the programming has to move but we don’t quite have to do it fast enough time in order to get the results or something in cooking.

today we will talk about ways of thinking about programming languages that i hope you find it’s interesting.
since it is relatively informal feel free to ask questions as we go if you like otherwise you can go and all ask the
questions later.
the image here is how actually I’d like to think about programming.
here in the middle i think projected two “imagional” is the very statical in the programming
it’s the “elamence” that you think you understand the program and the code and you do that on your computer terminal and
you write your code.it’s really seperated from the runtime of the program. So you do the best of you can imagining how
the application should work. but its all that in your code that it’s really not going to change once it actualy executed.
it’s a very static way of doing execution. then you have to work dynamic aspects of the programming.those little
alligators coming all of the program really of the character of the runtime. they go and they use their little movements
and they go back to program. and that is more going dynamic aspects of the programming,and more interesting. but also
more difficult because those things are moving around. so you see aspects of code you know runtime and the internet that
dynamic and more interesting in a way. and you can interact with the “platismatical” programing ability to generate code
at runtime. but it’s much slower and more challenging to be able to come that way.
.NET is trying to do that.java has the “synmatics specs” in fact.
in c++ we  basicaly donging the part that is rejected. that’s the two imagional code.
it’s staticaly runs very fast. so the static program doesn’t really look like that exciting is what the runtime machine
runs really fast and the “fly the alligators” and they think they’d like to get to. but its hard to know how to do that
in the time frank.that let us get the result fast enough.ok.
so a lot of more people is trying to do is geting the alligators walking around. and find out what it’s thinking trying
to keep them fed and played.
but a lot more actually hasn’t be done waiting for you actually run you program is not much you can do about it.
so when you see in c++ program really there is nothing you can find out about program when it’s executed.you can find out
the machine.you can always break through a c++ program and get access to the registers and memory.
but you can’t really get access to the runtime.there is no way of doing that.
we invented in c++, the ideas of runtime programming and meta programming and finding out about the code and  generating
code.that really was “feasible”. in the late of the last ten years or so, you know .NET and java is in a movement that
try to have more dynamic language. but problem is that they runs very slow. and nobody is quite sure how to do it.
so in the sense we have transation that you keep just entering into in terms of programing
because what we really like to be able to do is to have programs bodyfy and change themselves as the behavoir of the
program goes to look more like living things, if you will.
and I think it’s where the programming has to move but we don’t quite have to do it fast enough time
in order to get the results or something in “cookin”.

由于前面的几分钟没有PPT说明,听起来有点费劲,又是比较重要的开场白部分,就凑合着搞个字幕。。不过实在是听力有限单词量有限,尤其是灰色部分就是不知道了把发音乱标在那里。凑合可以看看就是了。

他后面就由此引起语言的发展历程了,最后加上对未来语言的猜测。

宅男搭讪手册

今天跟5+聊天说到虽说他很外向,却不擅长跟陌生人搭讪,我忽然想到可以奉上宅男搭讪手册以戒之

跟程序员:“哇你在用Vim, 我一般是用notepad++, 在Linux上偶尔用用emacs不过把快捷键全改成notepad++的”[挠头]

在篮球场上:“哇后仰。。好球。。你的腰没事吧。。”

跟小学生:“你刚才是不是‘以此两个魔法兔子为生祭召唤出黑魔导’?可是你没有飞刀这个魔法卡。。”

跟初中生:“《意林》没意思,你该看《读者》,我最喜欢里面的《言论》那个栏目。”

跟高中生:“你们学校附近也没有网吧吧。。我记得我那时候逃课去网吧。。都要跑好远好远。。”

跟大学生:好吧。。you get the idea…

跟富二代:“你用Wii玩高尔夫,胳膊不会酸吗?”

跟中产阶级:“唉最近油价又涨了。。对了听说最近要停止供应90号汽油?”

跟房奴:额。。同理了。。房价。。

最后,来自the big bang theory… 跟女生:”Oh, good shoes, where do you get them?”[bazinga…in fact I don’t care…]

Just have a try of Google stuffs

呜今天无聊得去装了google analytics和google webmasters,纯粹是无聊啦因为根本没有什么目的。我又不打算装adwords…那些牛皮癣好恶心。。

analytics居然是收费的。。不过要5M/month流量之上才会收费。好吧我不相信我会有那么多流量。所以无所谓了。好吧假如,只是假如,流量真的涨到那种程度我再去贴牛皮癣小广告也不迟啊。。

无奈的看到analytics无法统计来自中国的流量。。他们正在寻找某种”solution”。。。好吧我只好经常用proxy和公司的VPN自踩来测试他的流量统计了。。唉自娱自乐都这么麻烦。。

貌似装了analytics之后访问速度一下子慢了许多。。唉代价哦代价。。

程序员日记

今天吃饭的时候无意听到旁边桌子的一个老外正和另外4个学生聊天。虽然我没用心听但敏感词还是没避过我的审查系统。。我听到了”so you have bought a free version – almost free”, “linux is already free so they could just use it…”, “so that could be an informal promotion paradigm…”等等等等,当然也少不了”番茄花园”,”中关村”等等。。对了,那个老外讲的是”windows qi”,而不是”seven”,这点也挺有意思的。。

so, point is, 番茄花园被铲平仅仅是MS希望用户停止使用XP罢了。。MS希望推广windows 7,而不是打击山寨。。如果大家在家都用windows的话,当企业、学校、政府、公司等等单位需要你帮他们买一批电脑,你就会给他们买预装Win7的。而不是linux或者苹果。你不会在乎那些“公家的钱”的。当然中国并非没有真心想买正版就是为了正义感和优越感的有钱人或者没钱硬撑面子人,不过很明显这帮人早就被苹果笼络了,MS很明显不会去进攻一个早就被占领的大海中的孤岛。。他们只需要加强自己广阔的领地就可以了。。

语言之争-学院派vs实用派

因为Lippman的来访,最近在bbs上跟同学聊语言的发展和竞争的问题,做个记录吧

首先用Lippman本人的话讲,语言最开始是纯应用的,是工业产物。是一种为了解决实际问题而产生的东西,他是bottom-up的,是哥白尼式的。而后来在语言的研究和发展中,学院派从纯粹理性的角度提出了完美的语言模型,比如OO、GP、函数式语言等。这些语言模型是直接从完美的模型角度出发向下设计的,是top-down的,因此往往缺乏实用能力,甚至无法直接编译成机器码(因为从设计的时候就没考虑过如何把这些语言的逻辑翻译成冯诺伊曼结构的通用机器的语言模型这些问题),只好运行在中间平台上(虚拟机之类),从实用主义的角度来说是完全不在上风的。但是由于他们的结构精妙,模型完美,在语言发展的领域做出的贡献则远远超过哥白尼式的语言,Lippman称他们为亚里士多德式的。

工业语言的代表有C/C++, Java, FORTRAN等,学院派语言的代表有smalltalk, lisp, scheme之类。

当然我们的讨论其实是集中在C,C++和Java这里了,因为很显然其他的语言接触的不多,有些仅是耳闻,还有不少根本没听说过,更无可讨论了。我们讨论的主要是从学院派/实用派的角度分析C,C++和Java的利弊取舍问题,而又以关注C++为主。

C是一门工业语言。他原本就是为了更好的服务Unix的迁移而编写的。但贝尔实验室的大牛们显然不乏学术实力,创造的实用工具都是如此的简单和纯粹。加之Unix的成功和推广和C的可移植能力,C在众多语言中脱颖而出成为一门伟大的语言,应是顺水推舟。并且C原本就是为了方便的翻译成机器码而设计的,他的编程范式完全遵循冯诺伊曼结构的机器模型,他的语法规则简单,也容易为他的代码写各种解析器来做自动生成代码等辅助工作。从我现在的眼光来看C真的是一门可以永垂不朽的语言。当然是在计算机模型不变的前提下啦。。
应该说C的设计是自然的,这正是他最成功和最合理的地方。学习C,除了学习计算机原理,体系架构和算法数据结构这些最基本的计算机理论之外,不需要任何额外的知识。对于他是用机器自身最自然最直接最根本的方式去操作机器。同时他又有着良好的形式定义,使人容易理解(不像汇编那么艰深)。这就好像老子说的无为而治,道法自然。如果人类的道要效法自然,编程的道就应该效法计算机模型。这正是他让人愿意接受的主要原因。

C++就不同了。自从smalltalk向程序世界引入了OO这种新的思想之后,淳朴简约的古风不再。C++是尝试在C的基础上,在不牺牲目标代码效率的前提下,尽可能的加入新的编程范式。最早是OO,之后是异常机制,GP,C++0x引入了lambda等,未来还有可能加入更多。多元化的编程范式带来的是丰富多彩的变化和无限的可能性。但是也带来了风险、不确定性和误解。Lippman在做讲座的时候说,写代码就是犯错误,写的代码越多,犯的错误也就越多。更多的可能性,就意味着更多不同种类的错误,更多不容易发现的bug,更多的未知领域。因此尽管C++为工业带来了许多机会和希望,最终却被工业放弃。
OwnWaterloo说,其实C++并非不适合工业,毕竟他不过是C的升级版嘛。只不过是C++的气氛太浮躁了,太花哨了,总是想尝试引入各种新技术新功能。结果反而自食其果。假如能去除这些浮躁,仅仅使用C,而非到迫不得已的时候,迫不得已,才使用C++的新功能,或许就能得到成功。但问题是,仅从实现角度,没有什么迫不得已的,毕竟C++能实现的功能,C都能用其它方式实现嘛,不过是或许代码丑陋一点没有那么花哨就是了。C++的目的是减轻程序员的负担,可以通过类的派生多态,模板的反复重载来实现最大程度的复用。然而如果这些复用的结果是导致程序员的负担越来越重,那就得不偿失了。

唉没想到最近事情好多啊,一篇博客都写不完。本来还想要记录关于Java的讨论的。。结果都这么多天了都抽不出空。干脆先这么发出去吧。以后有想法再另起一篇算了。

程序员日记

今天在电梯间碰到一个熟人,人家问我:“咦你住在这里啊,住在几层?”

我说:“你要知道我住在几层干什么?想去找我玩?”

“没有没有,随便问问。”

“那你就没必要知道了,知道了更累,这些底层实现你都不需要知道,反正想找我就CALL我就对了,接口就是一个11位整数,135xxxxxxxx,免得以后搬了家换了地址你就找不到我了,或者还要我告诉你,那多麻烦,这叫做封装blablablabla……

[对方已经昏掉]

“如果要我告诉你,为了那个目的我还得实现一个observer模式,我还得维护一个所有记得我的地址的人的列表,每次一更新地址,哦对,用你们的话讲就是搬家,再挨个通知一遍,那得多累啊。。这个observer模式还有多种实现方式blablablabla…..

[继续昏厥]

“如果要维护的地址太多,都放在我的地址簿里就已经不可能了,需要专业的大型数据库来维护,对,你们管那个叫做黄页公司。我只记录一部分,记在本子里,就像Cache,其他的都放在他那里,要用的时候去他们那里查,你知道吗,DNS服务器就是这种性质blablablabla……

[已经是面对空气在说话了]

“当然啦,其实电话簿也有黄页的哈哈。看来我说的不对。要不然我还是告诉你我住在几楼吧。反正你的内存也挺多的,暂时不会缺页。咦,怎么这么快就走了。唉通讯连接中断我的发出去的包都丢掉啦…”

记擦肩而过的LIPPMAN嘉定来访

SL大牛精神矍铄、伟岸非常,悉数程序设计之变数,洞察语言发展之本末。以西方形而上学领袖亚里士多德与天文斗士哥白尼之名号划分唯理主义纯OO语言乃至函数式语言与业界典范之C\C++、JAVA等众。其间追思过往程序发展之春秋,痛思语言更替之血泪,自冯氏机器之史,ENIAC鼻祖之兴,由FORTRAN,ALGOL科学计算之路,往C\C++,JAVA之争,之间多经变迁,诸子百家争雄,战国各起,争伐无数,流血漂橹。直至今日三国争霸,统一大业未定,来日何者称雄之势尚不可分。L氏亦自谦,盛赞唯理主义语言之伟业,自贬劳力语言之庸俗。更回顾过往业绩,痛思己之不利,C++之不治,重商文化之轻浮。然亦自得于C++之广括博大,乃人间奇兵,非有大师妙手,不能将其功力发挥万一。

席间振奋学子,慨然曰千里之行始于足下云,又称程序界之未来实属青年一代,另在座诸生无不振奋磨掌,士气高昂。L氏名声显赫,来者云集,因故未竟者无不搓嗟,与网路之上跪求影视语音文字资料,以竟未至之愿。观后众生亦尝讨论激烈,意味悠然,乃有余音绕梁之趣也。

何老师在征集SL讲座新闻稿,结果一时兴起写了这个。。稍后总结一下跟王鹏的讨论吧。
讨论帖
http://bbs.tongji.net/viewthread.php?tid=699839&extra=&page=1
总结笔记语言之争-学院派vs实用派