|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
常常有很多初学者问的问题是因为不暸解计算机的架构.
计算机不是万能的吗? 为什么计算机不能这样做呢?
事实上当我们暸解计算机的架构后, 这些问题大都可以解决.
从历史的演进来看, 计算机由真空管到晶体管,
由晶体管到集成电路, 由集成电路到超大规模集成电路,
不管硬件的技术如何变, 计算机所依循的架构仍然是
John von Neumann 提出的 stored instruction 架构.
在此架构下, 程序是由存在内存中的指令所组成.
如果暸解程序在内存中如何被执行,
操作系统替我们做什么事,
那么程序设计学起来就比较容易了.
要暸解计算机的架构, 当然要学汇编语言.
其实汇编语言也没有那么难学, 汇编语言也可以分级的,
一个适合初学者的汇编语言应该以介绍机器的架构为主要着眼点,
从机器的架构开始, 接着介绍数据存在计算机中的形式,
再简单介绍机器指令, 最后简单的介绍操作系统与编译器终结.
在这个时期, 不要求初学者写什么应用程序,
毕竟对初学者而言, 高级语言是比较容易写的,
但是在学高级语言之前, 应该对计算机的架构有所认知,
而这也是我认为初学者应先学汇编语言的理由.
学完了汇编语言, 对计算机架构有初步的认识后,
接着就是学习一种高级语言, 要学 Pascal 或 C 或二者都学,
我还没有一个答案.
最后一个阶段是整合的工作, 将汇编语言, 高级语言及操作系统整合起来,
如此算是一个完整的语言学习过程.
以上所提的是针对IT系学生或想精研程序语言的人,
如果只是玩票性质, 那么学 BASIC 即可,
我这样说并没有贬抑 BASIC 的意思,
毕竟 BASIC 当初就是为初学者而设计,
所以 BASIC 被设计成直译器, 语法也比较简单,
相对的程序较无结构, 也不适合大程序.
虽然时至今日, BASIC 早已不是当年的 BASIC,
不过跟 Pascal 及 C 比起来, BASIC 的能力还是较弱,
另外附带一提的是在工作上没有见过 BASIC 的直译器或编译器.
> 如果暸解程序在内存中如何被执行,
> 操作系统替我们做什么事,
> 那么程序设计学起来就比较容易了.
> 要暸解计算机的架构, 当然要学汇编语言.
> 毕竟对初学者而言, 高级语言是比较容易写的,
> 但是在学高级语言之前, 应该对计算机的架构有所认知,
> 而这也是我认为初学者应先学汇编语言的理由.
> 常常有很多初学者问的问题是因为不暸解计算机的架构.
> 计算机不是万能的吗? 为什么计算机不能这样做呢?
> John von Neumann 提出的 stored instruction 架构.
> 在此架构下, 程序是由存在内存中的指令所组成.
> 如果暸解程序在内存中如何被执行,
Von Neumann架构并不是唯一的架构. Backus有functional programming架构, Prolog有prolog的架构.
但我想您说的 "是因为不暸解计算机的架构", 其实 "计算机的架构" 是另外一个意思. 但无论如何, 应该不需要以那么细节的汇编语言为解决方案.
> 以上所提的是针对信息科系学生或想精研程序语言的人,
"程序语言" 所指的应该是程序设计的方法吧? 如果是这样的话,
许多抽象观念可能比您所说的知识还要重要. 初学者只是学习如何表达
自己的意思? 接着学习如何让程序漂亮, 精简? 可读? 可重用? 可移植性?
如何让程序移植不等于重写? 如何确保程序的正确性, 确定他不会在跑
第1001次的时候出现意想不到的bug? OO是解决这些问题的一个方法.
而这显然是人造的观念.
另一个例子是在我的一个compiler project中, 需要以recursive的方式做
lambda lifting, 找出strongly connected component,
做toplogical sort (想不到compiler中也用到这么多图论的东西).
这当然更和计算机架构无关了.
> 如果只是玩票性质, 那么学 BASIC 即可,
学弟认为, 如果只是玩票性质, 学汇编语言可以提供另一种玩
计算机的玩法, 但是对学信息的人来说, 卡死在计算机架构上是错
误的认知. :)
其实两位的看法, 相当于两种极端:罗学长是 bottom-up, 而穆学弟是 top-down。
何种方式较适合? 有标准答案吗?
有人看世界是夸克胶子质子中子等等的组合, 有人以上层系统组织之目标论点往下
分析万千世界;有人以个别理性化作用体角度来建构经济学, 有人以整体市场贸易
公共政策来建构经济学理;也不能说谁对谁错, 角度不同罢了。
至于我, 我一向喜欢平行处理... :-)
就像做数学题目, 总是要把已知未知项挑出来, 把欲求欲证项挑出来, 再两面夹挤,
则答案易生焉。
写作也是, 以前我受的训练是:一开始先拟大纲, 再逐条铺陈, 但时时观照事先拟
的纲目, 避免天马行空;或是藉此再回头雕琢纲领, 使其更切演进中的思路。这种
反复的正向逆向回馈过程, 常常出现。
我有个心得:平行处理容易触类旁通, 偶有会意, 便欣然忘食...
软件生产方式都已由老式的瀑布模式转变为喷泉模式了, 我们的学习路程又何必局
于一条鞭呢?
★ gis83568@cis.nctu.edu.tw said:
> 要暸解计算机的架构, 当然要学汇编语言.
那为何不说要先学电子学﹑数字系统, 再来学汇编语言呢?
学习是很有弹性的...
> 其实汇编语言也没有那么难学, 汇编语言也可以分级的,
> 一个适合初学者的汇编语言应该以介绍机器的架构为主要着眼点,
> 从机器的架构开始, 接着介绍数据存在计算机中的形式,
> 再简单介绍机器指令, 最后简单的介绍操作系统与编译器终结.
Yes, 有道理。
> 但是在学高级语言之前, 应该对计算机的架构有所认知,
> 而这也是我认为初学者应先学汇编语言的理由.
其实学高级语言前, 只要有计概的东东当背景, 并不需要碰到组语, 就能顺利学习。
像指标, 也没必要以组语来解释, 直接拿 stored-program computer﹑memory 之
概念介绍就行了。
当然啦! 更复杂的低阶概念, 就得佐以组语的知识了。
> 另外附带一提的是在工作上没有见过 BASIC 的直译器或编译器.
Computer Science
> 学的是抽象化. Programming Language的讨论从来就不是直接架构在计算机
> 硬件上的.
ㄟ... 你这是比较 theoretic﹑top-down 的看法。但是不要忽略了另有
realistic﹑bottom-up 的观点。
> 计算机没有struct, 没有array, 没有cartsian product, 没有data type,
> 没有stack, 没有tree. 这些不是计算机的架构, 是人类设计
> 的抽象架构. 信息科学研究的是人类的抽象架构.
但是我们总不能要求每个初学者都从 Turing machine﹑automata 开始吧!
> 但我想您说的 "是因为不暸解计算机的架构", 其实 "计算机的架构" 是另外一个
> 意思. 但无论如何, 应该不需要以那么细节的汇编语言为解决方案.
如果对一个电机出身的人, 可能由此入门会较顺利, 因为这可以轻易和他过去
的知识背景衔接起来。
>> 如果只是玩票性质, 那么学 BASIC 即可,
> 学弟认为, 如果只是玩票性质, 学汇编语言可以提供另一种玩
> 计算机的玩法, 但是对学信息的人来说, 卡死在计算机架构上是错
> 误的认知. :)
言重了... :-)
意思不是要把你“卡”在计算机的架构, 而是以其为阶梯﹑途径。
过河须渡船, 上岸了, 船可丢, 也可不丢;
得鱼而忘荃, 还是不忘, 端看自己的选择与方向。 |
|