书接上文,继续初代程序员GraceHopper的精彩演讲摘记。她的心得在今天看仍然极有现实意义。 ThatDecember1953reportproposedtomanagementthatmathematicalprogramsshouldbewritteninmathematicalnotation,dataprocessingprogramsshouldbewritteninEnglishstatements,。。。IwaspromptlytoldthatIcouldnotdothat。AndthistimethereasonwasthatcomputerscouldntunderstandEnglishwords。〔Laughter〕 不能用英文语句写代码,因为计算机不懂英文这句话听起来是那么熟悉,70年后的今天,还有很多人拿计算机不懂中文也不懂英文来推出没有英文编程,也没有中文编程。 Thisisthepreliminarydefinitionofadataprocessingcompiler,dated31January,1955。ThelanguagethepseudocodeistobevariablelengthEnglishwordsseparatedbyspaces,sentencesterminatedbyperiods。Oneofthefirstthingsweranintowasnobodybelievedthis。Soweadoptedanengineeringtechnique。ItsonethatIwishmorepeoplewouldadopt。。。Whenanengineerdesignsorbuildssomething,healmostalwaysbuildseitherapilotmodelorabreadboard。Heprovesfeasiblity,heuncoversanydifficultieshehasntthoughtuptheoretically,andhegetsvalidcostestimates。Bestreasonsintheworldforbuildingapilotmodel。 这里的伪代码似乎是初代的自嘲,因为该语言语法与英文自然语言的相似性(词汇不等长,句号结束等等),当时看起来就像是伪代码。相比上文的助记符ADDMUL等等,明显是向自然语言语法接近了一大步。 没人信,就干工程师能干的造原型。可行性论证、发现问题、估计成本,都是好理由。至今也是如此。 Anoperationlist,asubroutinelist,ajumplist,andastoragelist。Ofcoursewequicklyrealizedthatmanagementwouldntknowwhatalistwas,andwechangedthatwordtothewordfileandkeptfilessotheydunderstandallright。 在与管理层沟通时,需要用对方能理解的词汇,也是浅显但经常被忽视的道理。 下面有一段插曲,由于主存放不下他们的所有list,他们不得不把一些部分用子程序临时放到磁带存储,需要用时,再调用子程序将其放回主存。而这一技术在12年后被RCA重造了轮子并叫做虚拟存储,又在六、七年后在IBM发现之后才被认真对待。说到这台下听众哄笑。然而,好技术往往要商业推手这点在六十年后的今天仍然。 下面到了关键。她们完成了个小编译器,可以接受20个语句。在她们的预算申请报告书上,写着: 亲爱的管理层:如果你们到机器室来,我们很乐意为您运行这段程序:(为易读我分了行)INPUTINVENTORYFILEA;PRICEFILEB;OUTPUTPRICEDINVENTORYFILEC。COMPAREPRODUCTAWITHPRODUCTB。IFGREATER,GOTOOPERATION10;IFEQUAL,GOTOOPERATION5;OTHERWISEGOTOOPERATION2。TRANSFERATOD;WRITEITEMD;JUMPTOOPERATION8。REWINDB;CLOSEOUTFILECANDD;STOP。 (所以这就是最早借鉴自然语言语法的编程语言了吧。看上去的确挺自然,尤其对商界人士来说,也没有什么费解的符号) 但她们越看这段代码越觉得渺小,尤其是她们申请的金额之大是从未有过的。于是,她们把所有的英文词换成了法语。接着,又换成了德语。 结果,管理层看到这里就炸了。对他们来说,一台本土制造的美国计算机,当然不可能懂得法语或者德语!导致她们花了四个月来澄清,她们并不打算用英语之外的语言来编程。 这里很值得琢磨。对技术人员来说,编程语言的语法用词修改成另一种自然语言易如反掌,但对管理层来说,这却意味非常。接下去这段她的原文: Whattoushadbeenasimpleperfectlysimpleandobvioussubstitutionofbitpatterns,tomanagementwedmovedintothewholeworldofforeignlanguages,whichwasobviouslyimpossible。Thatdangerous,dangerouspointofsomethingthatsobvious,evidenttotheresearcher,totheprogrammerwhenitsfacedbyManagement,isoutofthisworld。 那时美国的管理层的这种编程不能用非英文的思想,似乎在今天仍然盛行,即使在非英文母语的开发者中。比如前两年关于unicode命名标识符的论战中就很明显。 下面是个有趣的技术细节: 。。。wedidntknowanythingaboutparsingalgorithmsatthatpointintimeandwhathappenedwasyoupickeduptheverb,andthenjumpedtoasubroutinewhichparsedthattypeofsentence。Inordertodothatquickly,andalsotomakeiteasytomanufacturethatjump,thefirstandthirdlettersofalltheverbsinFLOWMATICwereunique。ThatsurviveduntillastyearinCOBOL。。。 就是说,不需复杂的语法分析算法,而是从每个语句开头(?)动词的第一第三个字符映射到了对应的处理子程序。这机制也许在现在看有些原始,但抓得住老鼠就是好猫。 下面是两点小结: twothingsinfluencedFLOWMATICoverandbeyondmathandbeyondprogramminglanguages。Onewasthatwewantedtowritetheprogramsinanybodyslanguage,whichmeantallthestatementshadtobeimperativestatements,becausethatwastheonlytypeofsentenceinGermanthatbeganwithaverb。〔Laughter〕 她们想支持多种自然语言语法应该是真的(选择了法语和德语,大概是由于组里有懂这两个的)。但就因为德语只有祈使句才是动词开头,决定了所有的语句都是祈使句,这听起来总有点玩笑意味。个人感觉祈使句式和之前的助记符式语法是一脉相承。 Andthesecondwasthatwehadtoselecttheverbs,sothatthefirstandthirdcharacterswouldbeunique。Oneofourmostdifficultsituationswasofcoursedisplayandpide,andthatswhyithadtobefirstandthirdcharacters。Andtherearecertainoftheotherverbswhichranintothatproblemaswell。 选择第一和第三字符的理由没完全看明白,似乎是在选择动词和字符位置时作了综合考虑。 【待续。下面一段很有意思,让我想到UI设计的一个原则:尽量让用户作选择,而不是自由输入。】 Thedatadescriptionsinthatcasewerentinformal。Wehadforms,andyouenteredthedatadescriptioninit。