为什么是QWERT,不是ABCDE?

1971年底的一天,英国工程师雷•汤姆林森(Ray Tomlinson) 在互联网的前身ARPAnet系统上编写了一个程序,经过几次尝试后,程序 成功的运行了,一段信息呈现在了另一台电脑上的屏幕上。汤姆林森当时还没有意识到,这是世界上第一封真正意义上的电子邮件。二十多年后 ,当电子邮件成为日常生活不可缺少的一部分时,作为历史上的伟大瞬间的缔造者的汤姆林森被问及邮件的内容时,他答道“或许是 QWERTYUIOP”。与人们想象的“Hello”,“How are you”一类内容不同,汤姆林森当时只把这封邮件当成一次普通的程序运行尝试,随手输入了计算机键盘上第一行的十个字母。  很多人第一次接触电脑键盘时,都会问这样的问题,电脑上键盘的第一行为什么是QWERTYUIOP,而不是按照字母顺序排列的ABCDEFGHIJ?如果那样的话就不需要花时间记住每一个字母键的位置了。  这个问题要由键盘最早的发明者来回答。你或许不知道,键盘的历史比计算机的历史还要早很多,虽然世界上第一台计算机在20世纪四十年代出现,个人使用的小型计算机到70年代才开始出现,但是作为现在计算机一个组件的键盘在19世纪70年代就出现了。  键盘最初是出现在1868年美国人Christopher Latham Sholes发明的机械打字机上,作为世界第一台商用的机械打字机,使人们彻底告别了“活字印刷”的时代,当时“这台神奇的机器可以将一个个字母整齐、准确的打在羊皮纸上”,马上吸引了众多工厂购买专利进行生产,大量政府、公司职员去购买使用。 typewriter.gif 最初这台打字机的键盘分布就是按照ABCDEFGHIJ的顺序,但是在实际中却出现了问题。你或许会猜是不是这种排布不利于提高打字速度?正相反,这种排布的打字速度太快了!受当时的机械设备的限制,如果打字员打字的速度过快,打字机相邻键杆撞在一起而发生卡壳。所以Christopher Latham Sholes对他的发明进行了改进,人为地降低了一些常用字母的输入速度,设计了QWERT式的键盘,也就是我们现在使用的键盘。 qwerty.gif 后来打字机的设计水平得到了提高,卡壳的现象几乎不再出现,到了20世纪中期,电子键盘代替了机械键盘,对输入速度过快的担心完全成了杞人忧天了,QWERT式的键盘几乎成了昨日黄花。  与此同时,在20世纪,经过了蒸汽机时代和爱迪生时代后,各种各样的机器和新发明走进了人们的身边,同样的机器,怎样设计可以使用户使用更加方便,怎样设计可以使这些产品更加人性化逐渐成了一个棘手的问题,于是出现了一门新的学问——人机工程学。从人机工程学角度分析,QWERT式的键盘或许是人类历史上最糟糕的发明之一,有很多缺陷。  首先,英文26个字母在实际中使用的频率是不同的,最常见的字母e出现的频率高达12.702%,字母t也有9.056%。与之相比,字母q出现的频率仅有0.095%,最少出现的z则只有0.074%。  按照键盘打字的指法,在键盘的三行中,中间一行是主行,应该尽量把出现频率较高的字母(如e,t,a,o,i)都放到中间一行。但实际情况是,QWERT式的键盘在设计时为了故意减慢这些键的输入速度,把他们分散到了上、中、下三行,我们在打字时,手要不停的上下移动。有人曾作过统计,使用QWERTY键盘,一个熟练的打字员8小时内手指移动的距离长达25.7公里,一天下来疲惫不堪。不经常使用的字母j,K(排在倒数第四第五位)占据了主行的两个位置,而比较经常使用的m,n却设置在了最下面一行不显眼的位置。  从左右手的工作量来看,我们平常使用的键盘对于左手是不公平的,据统计有57%的击键由左手完成,而大多数人都不是左撇子。有一些常用词像was,extra完全要用左手完成,这让打字员的右手可以忙里偷闲,左手却成了“苦劳力“。  根据每一只手各个手指的工作量统计,也是不合理的,与手指的力量和灵活性不匹配,例如瘦弱又不灵活小手指经常受“欺负”,承担的负荷过大。  看来,QWERT式的键盘似乎是一个“充满杯具”的键盘设计。1936年美国人Dvorak根据以上的这些研究发明了一种新型的键盘  400px-KB_United_States_Dvorak_svg.png !  在这种键盘上,可以看到,在主行,AOEUIDHTNS都是字母频率使用表中排在前列的,而最下面的一行的那些字母都是较少使用的。按照Dvorak的解释,70%的按键都可以单单靠主行完成,另外22%的按键靠最上面一行,只有8%在最下面一行,可以使手指不用总是上下换来换去,符合人的正常习惯。Dvorak键盘还可以使左右手、各个手指之间的任务量分配更加公平,右手的平均使用时间也超过了左手,不再出现左撇子现象。  在20世纪70年代,一位名为Lilian Malt的发明家又对DVORAK键盘作了进一步改进,不仅考虑了字母位置的排列,还将键盘做成弯曲的形状,分为左右两部分,分别有两只手控制,这一种设计可以使打字员在打字时身体保持舒服的姿势,手腕不容易酸痛和损伤。  尽管DVORAK键盘和Malt键盘在易学性、输入速度、人体保健等方面都好于QWERTY键盘,当时很多人也乐观的预计它们大有发展潜力,会很快取代现有键盘,但是实际情况却是,时至今日,计算机前的敲打着键盘仍然是QWERTY键盘,DVORAK键盘和Malt键盘“出师未捷身先死”,完全没有走入市场。  人们普遍认为,QWERTY键盘作为过时的东西仍然活跃在舞台上的原因主要在于它的先入为主,尽管存在种种缺陷,但是成千上万的使用者已经熟练使用它,加上产品已经成型,电脑从业者也不希望费力地改变与键盘相关的各种硬件软件,引入新的键盘。  不过,QWERTY键盘也不会永远存在于世上,语音识别、手写输入、触摸、点击输入和其他各种更先进的输入方式都有可能有朝一日取代键盘的存在。

最有影响力的编程图书

编程问答社区StackOverflow上最受欢迎的问题之一是每个程序员都应该读的编程图书,Internet Security博客总结了其中十本最有影响力的编程图书,包括: 《代码大全》第二版,《程序员修炼之道》,《计算机程序的构造和解释》第二版,《C程序设计语言》,《算法导论》,《重构:改进现有代码设计》,《设计模式》,《人月神话:软件项目管理之道》,《计算机程序设计艺术》第一卷第三版,《编译器:原理、技术和工具》。

从:solidot

斯坦福大学开放更多计算课程

“最近报道的斯坦福的人工智能开放课程注册人数已经超过10万,最新的消息称斯坦福大学将另外两门计算机科学的课程纳入”大胆试验性分布式教育”,这意味着学生们不仅仅是像以往的开放课程那样下载讲课视频和其他的材料,而是在学习中参与到提交作业和收到回馈。这两门课分别是由Andrew Ng机器学习导论Jennifer Widom数据库导论,到目前为止这两门课程的注册人数已经超过20,000.”

IBM宣布创造出模拟大脑神经系统的芯片

蓝色巨人宣布,它与四所大学及DARPA合作,创造出一种模拟大脑处理信息方式的试验性芯片。 在大脑内部,信息是被并行处理,计算和记忆是相互交织在一起。每个神经元都连接着许多其它神经元,这些连接的强度会随着大脑的学习过程而持续变化。此种动 态过程被认为对于学习和记忆至关重要。IBM获得了DARPA的2100万美元资助,与四所大学合作研制了认知计算芯片原型,模拟大脑神经系统的信息储存 和处理方式。未来,此种芯片也许能模拟和超越大脑的感知、交互和识别能力。IBM目前共研制出两个可工作原型,采用45nm制造工艺,包含256个神经 元,1个包括262,144个可编程突触,另一个包含65,536个学习突触。IBM研究人员已用其成功演示了导航,机器视觉,模式识别,联想记忆和分类 等简单应用。

【高效程序员系列】2、别做机器人——让工作自动化

每 天打开电脑,首先要做的是打开最常用的软件:要和朋友联系,你打开了QQ;要收邮件,你打开了Outlook;要听音乐,你打开了酷狗……但是你不想做机 器人,每天重复的打开这些软件,于是你让它们开机启动。恭喜,你有不做机器人的基本思想。这些简单重复的操作扔给电脑吧,你需要把宝贵的精力用来做其他更 有价值的事。但是聪明的你有没有想过,日常工作中有没有其他事也可以丢给电脑,让你摆脱机械的操作?下面分享一下我的经验,如果你也有相关的经验,希望也 拿出来和大家一起分享!

1、VS代码段的使用和定义

在使用Visual Studio编程的时候,你肯定会喜欢智能提示,还有代码段的功能。比如输入foreach:

clip_image001

按下Tab,就出来了一个固定格式的代码段:

clip_image002

在编辑器中按下Ctrl+K,Ctrl+X,就可以查看代码段定义了,如下图:

clip_image003

如果你正在使用VS2008,可以在菜单中找到代码段管理器:

clip_image004

其中列出了系统自带的代码段(不明白为什么VB的那么多,C#的那么少。其实现在VB和C#没多大区别,代码段上也应该做到平等。):

clip_image005

clip_image006

相信你应该对一些常用的代码段应用非常熟练了,比如prop,for,if,try。其实代码段也是可以自己定义的,废话少说,下面就介绍一下代码段的定义。

这里介绍三个工具(都是免费的):

(1)Snippet Editor(下载地址

这是一个独立的软件,而且是绿色版的。解压之后运行SnippetEditor.exe即可。来看一下它的界面:

clip_image007

它会自动识别当前机器上安装的VS版本,然后在左上角列出来。选择不同的版本,左边的树控件会列出该版本的代码段定义。双击代码段文件,左边的编辑 区列出编辑的信息。而在状态栏会显示出当前编辑文件的路径。要创建代码段,单击工具栏上的“New”按钮即可。下面针对编辑区的操作进行讲解:

【Properties】
Title 标题,必须输入,就是显示在树控件中的节点名称
Description 描述,对代码段的详细解释,在VS中输入代码段时会提示
Author 作者,写上自己的大名吧
Shortcut 缩写,在编辑器中输入定义的Shortcut,按下Tab键,即可输入代码段
Language 编程语言,可选HTML、JScript、Visual Basic、Visual C#、Visual J#、XML
Kind 代码段类型,可选Class declaration、Member declaration、Member body、Unspecified,一般选择默认Unspecified即可
Help Url 帮助URL,如果有就输入
【Code】

该区域包含两部分,上面是文本编辑框,下面是参数编辑框。现在文本编辑框中输入代码模板,然后将光标定位在需要变动的地方,点击下方工具栏上面的 “新增”按钮,软件会在文本编辑框中插入一段格式为“$NewLiteral$”的文本,其中NewLiteral即模板参数的名称,根据自己的需要修改 即可。下面列出模板参数的属性解释:

ID 模板参数的名称,在一个模板里不重复即可
Defaults to 该参数的默认值,定义为最常用的默认值,在输入的时候就可以不用再输入了,比如字符串就定义为””,数字就定义为0
Kind 参数类型,可选Literal、Object,一般选择默认的Literal即可
Type 参数的数据类型,一般不需要输入。如果Kind选择为Object,则最好输入参数的数据类型。
Tooltip 提示信息
Function 生成代码的方法,一般不需要输入。在一些特殊场合需要,比如switch代码段中,它会自动列出枚举的值。
Editable 是否可以编辑

定义代码段没什么难度,参考系统中默认的代码段就可以写出自己代码段,可以大大提高输入代码的速度。这里有两个特殊的模板常 量,$end$和$selected$。“$end$”是用来定义在VS中输入完代码段之后,光标定位在什么地方。“$selected$”一般用于多行 代码,我分析了一下系统代码段,感觉没什么实际用途。

【References】

该区域是用来记录要添加哪些dll引用,但是它并不会真的自动去引用,这里只是记录。

【Imports】

该区域是用来记录要在代码中添加哪些命名空间,它也不会真正去添加命名空间。

编辑完成之后点击“Save”按钮保存,然后把该文件放到自定义代码段文件夹中。该文件夹位于“%我的文档%\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets”或者“D:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\My Snippets”,根据自己安装的路径和编程语言查找。将定义的代码段文件放到该文件夹中,再打开VS,输入快捷键然后按下Tab,你定义的代码段就可 以被输入了。

(2)SnippetDesignerSetup-For VS2008.msi(下载地址

这个是给VS2008使用的插件,解压之后安装即可。然后新建一个后缀名的.snippet的文件,用VS2008打开,则会调用安装的插件来编辑代码段。

clip_image008

个人更喜欢第一种方法,所以在此对插件方法不做详细介绍,如果需要了解详细操作步骤可以参考http://snippetdesigner.codeplex.com/wikipage?title=createFromScratch&referringTitle=Documentation,英文的。

(3)SnippetDesigner-For VS2010.vsix(下载地址

这是针对VS2010的扩展,和VS2008不一样,不在需要安装到系统中,双击后会添加到VS2010的扩展中。装好装好会在VS2010中会添加一个文件模板,可以直接在VS2010中新建一个snippet文件:

clip_image009

顺便提一句,VS2010有很多扩展,可以联网下载,打开扩展管理器即可:

clip_image010

2、代码段编译Snippet Compiler

Snippet Compiler(下载地址) 是一个基于 Windows 的小型应用程序,你可以通过它来编写、编译和运行代码。如果你具有较小的代码段,并且你不想创建完整的 Visual Studio .NET 项目(以及该项目附带的所有文件),则该工具会很有用。用一句话概括它的功能:它是一个支持多种编程语言、多个版本的.NET框架、多个代码文件、带智能 提示的编辑和编译软件。下面是它的界面,如果需要详细了解,可以参考:http://www.cnblogs.com/conexpress/archive/2011/07/24/2115308.html

clip_image011

3、SQL智能提示和代码段

上面提到了在VS中可以使用智能提示和代码段输入功能,另一个最常用的软件就是SQL Server。但是这么多年了,SQL Server一直没有智能提示功能,直到SQL Server 2008才加入了字段提示功能,但是和VS的智能提示相比,相差十万八千里。如果你还在吭哧吭哧一个一个字段敲SQL代码的话,这里强烈推荐你使用SQL Prompt。它不仅可以提示字段,还能插入代码段,而且代码段还能自己定义……关于它的种种好处这里就不详述了,当你掌握它之后,效率提高不止一两倍。 具体的用法可以参考http://www.cnblogs.com/conexpress/archive/2011/07/28/2120432.html#

clip_image012

4、代码自动生成

作为.NET开发人员,手边有一款代码生成工具必不可少。最出名的代码生成工具就要算是CodeSmith了,它功能强大,简单易懂,很容易上手。如果你还不会用CodeSmith,那就赶紧去学习吧。可以参考TerryLee的系列文章:http://terrylee.cnblogs.com/archive/2005/12/28/306254.aspx

clip_image013

CodeSmith是一款商业软件,需要花钱购买的。如果你很尊重版权,又不想花钱购买,推荐你另一款同样强大的免费工具:MyGeneration,也是完全基于模板引擎进行代码生成的,功能上并不比CodeSmith差。可以到http://sourceforge.net/projects/mygeneration/ 下载,也可以参考http://www.docin.com/p-83919214.html 学习如何使用。

clip_image014

5、脚本工具

脚本工具Au3、AHK、Python、Ruby、Windows Power Shell等

虽然现在的工具都有很好的IDE界面,但是有时候脚本工具却能带来更高的效率。而且有些功能用脚本语言很容易实现,但是换成其他语言就比较麻烦了。

(1)Au3

Au3的全名是AutoIt3,它是一种类似于VB的脚本语言,设计的初衷就是为了让工作自动化。下面列举一下它的特点:

语法类似VB,很容易理解。

编辑器带智能提示,感觉这一点比VB6强大,有点像VS2005之后的代码编辑器。

可以很方便的操作鼠标和键盘,也可以录制操作过程,类似于宏。

可以设置快捷键,组合Ctrl、Alt、Shift、Win和其他键,按下快捷键即可执行对应的操作。

可以编译成exe文件独立运行,而且支持Win7。

有类似于VB的界面设计器,可以设计具有Windows界面的应用程序。

具有强大的扩展库,很容易的操作系统、Win32API、网络、文件、数据库、注册表、ini文件……

如下图,可以用类似C语言的#include引入扩展文件,代码可以折叠,甚至有类似于C#的#Region折叠。

clip_image015

界面设计器,感觉和VB6的设计器差不多,还能插入Win32控件。

clip_image016

它包含强大的扩展库,涉及到文件、GDI+、界面、网络、数学、进程、内存、数据库、Office、音频、视频……如下图:

clip_image017

至于它的应用场景就很广泛了,最常用的就是执行大量重复的操作,用Au3记录下这些操作之后,就可以代替人工执行了,比如批量安装软件、实现游戏外 挂、热键功能等等。你甚至可以把它看成是一种比VB6更强大的语言,因为它可以编译成exe文件,可以设计具有Windows界面的程序,不需要运行时支 持,copy到别的机器就可以运行,还支持Win7。而且它的很多操作都只需要一个方法即可实现,比如从网络下载文件用 InetGet(url,filePath),打开文件或执行程序Run(filePath),点击鼠标MouseClick(key,x,y),移动鼠 标MouseMove(x,y),发送击键Send(key),关闭窗体WinClose(title)……其中最常用的一个方法就是 HotKeySet(hotkey,method),就是注册热键。比如HotKeySet(“#q”,”MyMethod”)的意思是注册Win+Q键 运行MyMethod方法,当按下Windows键和Q键时,就会调用MyMethod方法。

详细的用法这里就不介绍了,有需要的可以通过如下网址了解:

华军软件园-Au3汉化版(推荐使用,内含中文帮助文档):http://www.onlinedown.net/soft/54314.htm#down

AutoIt中文论坛:http://www.autoit.net.cn/

AutoIt官方网站:http://www.autoitscript.com/site/autoit/

新版Au3教程:http://wenku.baidu.com/view/b0915d1fb7360b4c2e3f6460.html

Let’s AutoIt电子书:http://wenku.baidu.com/view/3418a0cfa1c7aa00b52acb6d.html

另外一个和Au3类似的脚本语言叫AHK,全称是AutoHotKey,据说是从Au3开发组分离出去的一部分人开发的,功能和Au3类似,但是语法有点类似C。有需要的也可以到如下网址了解:

AHK下载:http://www.onlinedown.net/soft/39219.htm

小众软件AHK分类:http://www.appinn.com/category/autohotkey

AHK中文论坛:http://ahk.5d6d.com/

煎蛋-AHK快餐店(适合入门):http://jandan.net/2007/10/21/ahk-fast-food-restaurant-advance-notice.html

(2)Windows PowerShell

这个是微软的脚本语言。之前微软只注重界面,命令行方面非常欠缺。特别是对于系统管理人员,有些操作用命令行比界面更快捷。Unix和Linux中 的Shell命令非常强大,微软决定在自己的Windows系统上也开发一种强大的Shell命令。下面是PowerShell的介绍:

PowerShell是一款基于对象的shell, 建立在.Net框架之上, 目前支持.Net Framework 2.0. 能够运行在Windows XP SP2, Windows Vista, Windows 7,Windows 2003操作系统上. 能够同时支持WMI, COM, ADO, ADSI等已有的Windows管理模型.

在SQL Server2008中也添加了对PowerShell的支持,如下图:

clip_image018

使用PowerShell也很简单,和cmd用法一样,在运行中输入powershell即可,如下图,在其中也可以输入cmd命令。

clip_image019

如果对PowerShell命令不熟悉,可以考虑使用PowerShellAnalyzer,它也具有智能提示功能。官方网站:http://www.powershellanalyzer.com/

clip_image020

下面举个例子来展示PowerShell的便利。比如新招聘一批员工,需要在服务器上给他们每个人创建一个文件夹。一般人都会想到的是:新建文件 夹,重命名,接着再新建重命名。几个人还可以接受,但是如果好几十个人,估计谁都会有点烦。如果用PowerShell则可以很容易解决问题。首先在一个 文本文件中输入每个人的名字,每个名字占一行。然后打开PowerShell输入如下命令即可,是不是觉得很方便呢。

clip_image021

在园子里找了这么一个PowerShell的系列文章,可以参考一下:http://www.cnblogs.com/brooks-dotnet/tag/PowerShellV2/

(3)其他脚本语言

通过上面的介绍,是不是觉得有时候脚本语言更方便呢。其他比较流行的脚本语言还有Python、Ruby等,大家可以根据自己的喜好学习。

6、自动化测试工具

大家在软件开发过程中,肯定需要进行反复测试。但是有的时候测试只是一些重复的鼠标键盘操作,花大量时间来人工完成实在是对人力的浪费。这里推荐给大家一个非常强大的自动化测试工具:Selenium。

先看一下对它的介绍:

Selenium也是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla和Firefox等。这个工具的主要功能包括:测试与浏览器的 兼容性–测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能–创建衰退测试检验软件功能和用户需求。支持自动录制动作, 和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。

如果你想摆脱一步步机械的操作,等待最后验证结果的测试过程,那么就好好学一下Selenium吧。以下是一些参考资料:

Selenium私房菜系列:http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html

利用Selenium自动化Web测试:http://www.oschina.net/question/12_15377

ASP.NET单元测试工具Selenium:http://www.cnblogs.com/ljzforever/archive/2009/05/20/1467801.html

Selenium IDE实践:http://qiuguangchun.blog.163.com/blog/static/126221212010213114517993/

Selenium中文论坛:http://seleniumcn.cn/

本文就写到这里了,涉及的东西比较多,没法很详细的展开介绍,给大家提供了一些参考资料,有需要的可以自己详细学习。

如果你有什么能避免重复操作,提高工作效率的好方法,希望能拿出来和大家共享,让大家能有更多时间去做更有意义的事,谢谢!

作者: Alex Leo 发表于 2011-08-03 22:13 原文链接