写给大家的编程书(1)

来源:互联网 发布:百利甜酒 知乎 编辑:程序博客网 时间:2024/05/02 04:41
 刺啦刺啦地拨号声响过后,你打开IE浏览器开始“冲浪”。那个时代“冲浪”很酷也值得炫耀,能经常冲浪就更了不起了。
吵闹的小盒子叫做调制解调器,俗称“猫”。猫从电话线中抓住浪花一样的模拟信号,变换为0110这样的数字,之后猫通过另一根线,一连串将数字传递给笨重主机箱中的网卡。
那个时代互联网的资费和速度都让人无法忍受(现在看来):计时拨号上网费用高昂,孩纸们每次冲浪都会被控制得尽量短。深入一点了解和感知互联网是需要一段相对较长和连续的使用时间的,就像长跑,往往30分钟以后才会进入分解脂肪的有氧运动状态。某些学霸们在权衡成绩和苗条的边际成本后做出了自己明智抉择——每天跑两圈后撤退!于是乎,时光飞逝,成绩依然呱呱叫,体型依然如同大型食肉动物(偷蜂巢那一种)。
这里没有鄙视节制上网的那些孩纸们,那个时代接触了互联网这件事本身比接触的过程更为重要:互联网普及的伊始是另一个新时代的开始,他们在发令枪响起时就起跑了。

再说说让人无法容忍的速度,这样容易过渡到主题些。
看到56kbps是不是有一些熟悉的赶脚?这个曾经是大众“猫”的配置——抓模拟信号老鼠的能力。我们试着来量化大众猫的捕鼠能力:
56kbps中的k是kilo,1000;b是bit,比特位;p是per,“每”;s是second,秒。
“LZSB,讲个毛线!”
伪学术帝喜欢英语的词儿,LZ迁就一下。56kbps,写作:56000 bits per second。意思是,大众猫每秒钟可以捕捉56000个比特位老鼠。
1个比特位老鼠(后文直接叫比特位)在物理层面表示一个二进制位(0或者1),物理层面指的是该物理量可以被测量:比如高电流表示1,低电流表示0;磁化的粒子表示1,未磁化的粒子表示0。
8个比特位构成一个字节Byte,很多时候字节是计算机世界中表意的最小单位。每个字节中有8个比特位,每个比特位有0和1两种状态,那么一个字节中的比特位加以排列组合可以表示2*2*2...*2(8个2)=256个状态。低头数数你的键盘,有256个字符吗?嘿嘿,原来每个键盘上的字符都可以用一个字节加以表示的,每个字节因为其中的比特位排列组合不同,可以表示一个0~255中的整数:因此在计算机中用整数表示字符。
56000bit \ 8 = 7000Byte,对的少年,大众猫1秒钟可以传送7000个键盘上的字符。我们用字节除以1024得到一个新单位KB(千字节);同样的,用KB除以1024可以得到MB(兆);MB除以1024得到G(吉):G是移动硬盘或U盘的基本单位。顺便吐下槽,为什么数码产品的实际容量要比说明书上的小,因为人家厂家每次都是除以1000,而不是1024,这个是工业标准和学术标准的一个区别。
大众猫的能力是每秒7000字节,约为7kb。为了体会到传输速度这个瓶颈,我们做一个测试:用大众猫传输下面这个gif图片需要多少时间?



查看皮卡丘.gif的属性,我们可以获知它的大小,490KB。



按照大众猫的能力指标进行推算:我们需要490 / 7 = 70秒,喵~ >▽< ,是不是很绝望!!想想,如果你用这个gif动画去调戏小伙伴,人家1分多钟才会收到是不是很崩溃呢。
顺便科普一下,网速除以8后才是字节单位。比如我们家的电信宽带是4Mbps,除以8后,是500KB每秒,传送刚才的gif图片需要1秒时间,足足比传统猫快了70倍,忆往昔峥嵘岁月稠。
目前据“有关部门”同学统计汉字字符总量超过80000,即便是常用汉字也有3500。加之各种诸如日文、韩文、泰文等字符,256个状态是完全表示不过来滴!
在新的标准下,比如UTF-8标准,用1-4个字节表示一个字符,这个问题得到了完美地解决。2个字节包含16个比特位,一共可以表示65536个字符。如果2个字节表示一个中文字符的话,大众猫每秒只能传送3500个汉字信息。

从定性、定量角度,我们感受到了传统猫的两个问题:资费高、速度慢。现在看来,这两个问题解决的都不错:作为一个长期的计划,一切均可变。我们试着从短期出发,回到10几年前,设身处地地思考解决办法。我们的前提是,作为一个短期计划,很少有什么东西可以变。
技术推动需要一定周期和研发成本的投入,另外一种方法是制定标准、规范,在传输速率不变的限制下,向着通过最小的信息量传递最多的内容方向前进。

待续