“原来北魔工并没有计算机学院?”
办公室里,坐在沙发上,捧着茶杯的玛丽恍然大悟。
坐在斜对面的李力有些尴尬地挠了挠头,“原本是没有的,因为计算机的发展和研究一直以来都是几个实验室用有限的人在去做,这个学科还不太成熟,所以归到了机械学一级学科下面。”
顿了顿李力又说道,“不过随着计算机学科的复杂性与日俱增,我们现在也在考虑创办计算机学院,只是这个想法还停留在构思上。”
“那您不应该对我欺骗呀”,玛丽无奈地说,虽说是指责的语气,不过玛丽却并没有露出多少指责的表情,“我是学习计算机技术才来到遥远的东方国度,如果您这里没有计算机,那么我就一走了之。”
李力表情抽搐,脑海中努力转义玛丽说出来的别扭的帝国语,看着她将茶杯轻放在茶几上,准备站起离开,他连忙上前劝解道:“稍安勿躁稍安勿躁,有句老话说得好:既来之,则安之,你说来都来了是吧,哪有空着手走的道理,况且我们没有计算机学院,但是其他地方也没有啊!”
坐在旁边的樾樾满脸不忍地看着李力,他这是留人呢还是赶人呢?
得亏玛丽的帝国语也不怎么样,在歪着头思考清楚李力的话后,她问道:“那么我该去哪里学习呢?”
“咳”,李力轻咳一声,“刚才我已经说了,计算机科学现在还处于原始的阶段,这个学科目前归类到魔导机械一级学科下面,原因就在于大部分时候,我们只关心处理器以及各部件,说白了就是硬件,而将软件作为硬件的驱动。”
玛丽努力地消化着李力所说的话,在明白李力所说的意思后,她眼睛蓦然亮了起来,“您说得正确!”
“而且我看了你的那篇论文”,李力回过头来向樾樾,樾樾从随身空间里掏出玛丽邮寄来的论文递了过去。
玛丽表情惊讶地接过自己的论文,奇怪地问道,“为什么我的论文出现在您这里?”
“大概是因为只有我能看得懂你的论文吧。”李力耸了耸肩,“打开看看。”
玛丽低下头,翻开自己的论文,结果刚翻开第一页她就呆住了。
论文的空白处用红色和黑色的笔迹写满了各种各样细致的批语和意见——用正常的字体。
论文的内容她早已烂熟于心,因为这是她反复推敲过的内容,几乎已经细致入极,完善如终,但是在浏览了李力所写的批语,理解了李力对所谓编程语言与面向对象概念以后,新的感悟涌上心头,这让她惊呼出声。
“怎么样?能不能帮到你?”看到玛丽似乎已经沉浸其中,李力露出引诱小萝莉一般的微笑,循循善诱地说道:“留下吧,在我们实验室你可以接触到比这些更先进和抽象的东西,你甚至可以开创一个新的学科,将计算机科学发扬光大,成为计算机程序设计的奠基人!怎么样?跟我签订契约,成为马猴烧酒吧。。。”
“这是您写的?”玛丽的眼睛瞪得滚圆,不可思议地表情略显可爱,抬起头来看向李力。
“是啊”,李立点点头,“我刚才不是说了,能看懂你的论文估计也只有我一个人了,所以学校就把论文转给我了啊。”
听了这话,玛丽“噔”地从椅子上弹了起来,直接对着李力弯腰九十度,大喝一声:“师父!!!!”
“噗——”
一口水还没喝下去的樾樾,就听见这一声突如其来的“师父”,直接喷了出去,好巧不巧地喷在了震惊地张大嘴的李力脸上。
满脸水花的李力生硬地转过脖子,瞪着樾樾。
“咳咳。。。对不起对不起。。。你们继续。。。”樾樾不好意思对着李力说道,招了招手瞬间蒸发掉李力脸上和身上的水珠,然后努力缩在沙发里,假装自己是个抱枕。
勉强从震惊中回复过来的李力转回头去,对着玛丽委婉地说:“八戒呀,我们这里是研究机构,不兴旧社会那一套,不搞拜师的。”
玛丽微微抬起头来,疑惑地看向李力,“那么。。。教练?”
“你想打篮球吗?”李力瞪了她一眼,“叫教授!”
“哦哦,教授”,玛丽反应过来,又重新鞠了一躬,“我想学习计算机科学跟您!”
李力身心疲惫地抹了把脸,才反应过来水珠已经蒸发了,将玛丽扶起来以后说道:“来了实验室的话我们就是同事关系,当然如果遇到问题,我们可以探讨,共同进步,计算机的知识浩如烟海,它可以应用到人类的方方面面,从抽象到具体,从研究到应用,即便是我也仅仅有一些算不上多的灵感而已。”
“嗯嗯!”玛丽努力地点点头。
“就比如说你对语言的抽象化是怎么想的?”李力伸手将论文翻到了第二章节,指了指上面的文字。
“通过设计好的指令,将机器的执行细节掩埋,这样的话编辑者在编辑时就可以不用记忆和拆解每一个步骤将其指令,就可以开发快速。”突然谈到正题让玛丽一下子兴奋了起来,“很多步骤都可以包裹成一个命令,开发好的程序可以将命令转化为机器执行码。”
“但是你所说的其实已经将两个东西混杂在了一起”,李力指出,“语言和库。
“语言是用来进行逻辑编辑的,它通常基于某种抽象逻辑,比如数学,比如符文学,当然为了能让处理器执行,计算机语言已经将数学语言或者符文学语言复杂化了。而另一种东西则是库,也就是通过语言编写和封装的,可以被别人使用的成熟代码段,两者的关系就好像帝国语和诗词的关系,当你感慨‘念天地之悠悠,独怆然而涕下’的时候,就是在调用登幽州台歌的代码段。”
旁边的樾樾眼前一亮,刚想说话,却猛地捂住自己的嘴。
帝国语贫穷如玛丽,并没有感受到诗词中的韵味,但前面的逻辑她懂了大概,“语言只有我们定义,库不仅仅我们定义,也你们定义,也他们定义,和调用。”
“是的”,强忍着玛丽用错误语法编写的帝国语,李力点点头,“当然为了保证语言使用的简洁,编程环境一般都会自带官方库,我们会写一些通用的库内置进去方便调用,尤其是涉及外部硬件控制的指令,都会进行封装。”
“可是,怎么样能保证使用者按照库的编写者要求调用呢?”玛丽又问道,“我们提供库,要使用者调用正确能使用,但是不正确不能,这样怎么办?”
“哦?有一些没法封装的步骤,但需要使用者按正确方式调用么?”李力抬了抬眉毛,“举个例子。”
“材料加工程序,开始前必须检查材料的形状和纯度,一些半永久转换或者对称转换需要结束的时候转换回来。”
听了这个问题,李力摸了摸自己的下巴,“按照开放程度高的语言设计,这种需要前置或者后置的东西通常只是留出语法让使用者自己调用,当然如果对方没有调用就会出现系统级别的故障,比如内存泄露,比如锟斤拷烫烫烫什么的。。。”
“如果限制呢?”玛丽迫不及待地问道。
“这样的话,就需要运行环境,而且如果你真的要限制使用者使用方式,那么你所写的就不是库了。”
“那是什么?”
“框架”,李力说道:“与库不同的一点在于框架是控制反转,虽然这个词听起来挺高大上,不过意思就是原本是由使用者调用库来完成某些工作,但现在是框架调用使用者所写的一些东西来完成某些工作,既然如此,使用者就必须按照框架的使用规则来写这些东西。
“比方说如果你需要使用者在执行对称转换程序时必须初始化和销毁,那么你就必须留出初始化和销毁的接口,让使用者完善它,这样程序就可以在执行主体程序之前调用初始化内容,并在结束之前调用销毁。”
听了李力的话,玛丽兴奋地叫了起来,“就是它就是它!我在写转换程序时思考过这个问题,但是在编写c语言的时候总是无法将这个想法融入里面,原来是我搞错了!”
“c语言。。。”李力满脸纠结地看着玛丽,心想着要不要建议她换个名字,既然想做框架限制的语言类型,不如建议改叫java?
“当然了,这只是软件级别上的框架,如果你想要做到硬件层面上的框架,要求使用者按照你指定的规则,在你的控制下进行运行,那就是另外一种东西了。”
“什么东西?”
“操作系统。”