荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 吾所到之处,君亦可至(候捷)
发信站: 荔园晨风BBS站 (Tue May 15 21:44:19 2001), 转信

我再次整理了一些来函,与大家分享。这些信件经过「依媚儿」的往返,
展现出一问一答的形式。我想在此对读者们说,有不少问题您其实可以
写到 BBS programming 版上,会有许多热心的前辈提供经验。如果写给
我,难保什麽时候收到回信。

这一次我谈到一些十分基本的观念。也许电脑高手们会说我浪费篇幅。
可是,我和林振辉主编很早以前就发现到,这些基本的观念问题存在於
许多许多面对繁重资讯茫然无措的资讯新人身上。我希望这几页篇幅能
对他们有点帮助。


--------------------------------
送件者: Hsin-Ji Wang <wat0130@top2.ficnet.net.tw>
主旨: Thank you very much!!
日期: 1997年3月17日 PM 08:30

侯俊杰先生您好:
   我是台湾大学工学院的学生。最近我读了RUN!PC上您回答李松辉先生的
文章。在文章中,您提到要把基础打好,程式语言要从 C/C++ 学起。


   我是指科班学生。不一定其他科系也都得研究基础科学。
--------------------------------=
   我想请问您,倒底 C,C++,TURBO C 有什麽分别没有?我之所以问这样
的问题,是因为我想学 C 已经很久了,只是分不清楚这三者之间的分别。希
望您可以告诉我他们的分别。又,如果我想学 C,应该先学哪一种呢?可不
可以请您推荐几本书给我。谢谢。

P.S. 我学过的程式语言有 BASIC 和 FORTRAN。C 和 C++ 都是一种程式语
言。C 是结构化语言,它的动作是一行行执行,但可以把一群动作包装在
一起,称为函式。函式有一个入口,和一个(正常情况下)出口,程式主架
构就是由一个个的函式构成。这是结构化的基本精神。


   C++ 则架构在 C 之上,也就是和 C 的所有指令、关键字都相容,再加上
物件导向的能力。它的一切物件导向性质,都是从 "class" 这个关键字开展。
程式架构是由一个个 classes 构成。也许有人会说是由一个个 objects 构
成,其实大家的意思是一样的,class 是属性,object 才是沿用该属性的真
正实体。

  关於物件导向,说来就话长了。物件导向的精髓(像多型、虚拟函式)并不
容易,但学会了之後,使用别人写好的 class library 却很方便,你可以轻
易站在别人的肩膀上。MFC 或 OWL 或目前的当红炸子鸡 C++Builder 便都要
求使用者先有 C++ 能力。所谓 Turbo C,只是「使用 Turbo 工具来学习 C?
谷绱硕选urbo 工具是 Borland 公司的产品。一般而言前面冠上公司名称
的,就表示和「产品」有关,而不是一种通用性的、一般性的学门或技术,例
如Borland C++、Microsoft Foundation Classes(MFC)、Symantec C++、
Borland C++Builder。若论电脑语言,只能说 C 和 C++,没有所谓 Turbo C
或 Turbo C++,或Visual C++。

「学习 Turbo C」就是「以 Turbo C 这套工具学习 C」的意思。Turbo 工具
(Borland 公司)常喜欢自己创造更新更前卫的机能,逸出标准的语言范围
,所以面对这些特殊部份要特别注意,以免同一个 C 程式在不同的编译器产
品上不能够顺利编译。如果你不在乎这一点,倒是可以放心大胆地使用更新更
前卫的机能。

C 语言的学习过程,对我是遥远的回忆。晚近这方面的书籍看得不多,所以我
没有什麽关於书籍的建议可以给你。


非常谢谢您的回答,使我对於 C/C++ 有了些了解。
您提到 Turbo 工具是 Borland 公司所研发的,他们喜欢创造更新更前卫的机
能,而这些机能需要特别注意。如果是这样,那麽我学习 C 时,应该用什麽工
具学习比较好呢?我所谓要注意,意思是你自己得留心是否用了些「非语言标
准的功能」,以後移植(换工具)时才知道哪里可能有问题。更新更前卫的东
西可能是个正因素,也可能是个负因素,端看你的考量和需求。好比说
Borland 的 Object Pascal 远远超出标准 Pascal 的范围,你在学校学习
Niklaus Wirth 博士发明的传统 Pascal 语言,面对 Object Pascal 一定傻眼。
但是 Object Pascal 功能强大。

  用哪一种工具比较好,难说。若为了单纯的 C/C++,任何产品都能胜任,因此
学生可以从售价上考量。若为计久长,C/C++ 之後还要学习 Windows 程式设计,
那麽又有两种考量,一是以纯粹的 raw API 写 Windows 程式,那也是任凭哪一
种工具都能够胜任,而且原始码彼此相容。对於学生我还是认为价格是最实际的
考量因素。但如果要以 application framework(一种威力强大的 C++ class
library)来发展 Windows 程式,你就面临抉择了,因为不同的 application
framework(如 MFC 和 OWL)完全不相容。最近几版的 Borland C++ 宣称可以
吃 MFC 程式码,我想这是没有什麽意义的事情,第一,它通常不能够吃最新版
的 MFC 应用程式码,第二,你把 MFC 程式拿到 Borland C++ 环境下继续开发,
意义何在?一时吃进去了,又能保证日後(你总是还要继续发展的)相敬如宾吗?
还是会相敬如冰?相敬如兵?

   对於工具的选择,工业界的考量点复杂得多,包括所谓主流性(市场占有率)、
价格、稳定度、速度、後续支援性。我不是说学生不在乎稳定度和速度,而是毕竟
学生能写出多大的程式呢?如果有同学不服气我这一点,我问各位:你写过十万行
的大案子吗?(写过的同学不必回信给我,基本上你已经是专业程式员了)


另外还有一个问题,最近好像很流行 Visual C++,不知道这东西与 C/C++ 有何关
系,可否请您告知?


   近年来凡 Microsoft 的开发工具,都冠以 Visual 之名,如 Visual C++、
Visual Basic、Visual FaxPro。Visual C++ 的意义就像 Borland C++ 一样,只
不过是某家公司出的一套 C++ 软体开发整合环境套件。

学习 Visual C++ 或 Borland C++,其实要学的是三样东西:
1. C++ 语言。
2. 整合环境(Integrated Development Environment,IDE)的使用。
3. 一套 class library(在 Borland 为 OWL,在 Micorsoft 为 MFC)。这套东
西让你很容易写 Windows 程式(但我可没说它们的学习很简单唷)。

------------------------------------

送件者: Evan <hungvan@ms7.hinet.net>
主旨: 小生怕怕
日期: 1997年4月4日 AM 03:42
侯先生您好:
    我是您的忠实读友(自从看 RUN PC 之後),自觉自己对电脑有相当的
兴趣,但是总是抓不着正确的学习方向,总觉得资讯一日千里,坊间又有许
多令人目不暇给的书籍。想学的很多却没有目标,所以总有些失落感。自从
在 RUN PC 拜读您的文章後,深深被您对资讯专业及笔锋所吸引,迫不及待
的想将您所有的大作全都买回家,但发现你所着有很多。所以希望您能提供
我您到底出了多少本书及它们的书名。对於想了解 Windows 作业系统及发展
Windows 程式的我,盼望能获得您的指导,我该以何种方式或顺序来学习
您的大作呢?至於程式发展的语言该学习哪一种呢?虽然,略懂一些语言但
总是不专,盼您也能提供我意见。谢谢!


  在杂志上列出全部着作,有广告之嫌。此项请免。我想回答您的第二个问题。
要使用哪个语言来学习 Windows 程式设计,这不是一翻两瞪眼的事儿,请叁
阅RunPC 1997 二月份的「到此踌躇不能去」一文。如果想走 C/C++ 这条路
线来学习程式设计,并且最终要进入 Windows 领域,那麽我认为首先你要在
 Console(DOS-like)模式把 C/C++ 的基本功练好,千万别这时候就接触
Windows 程式设计。西谚有云「太多的厨子坏了一锅汤」,我要说「太多的
配料也会搞坏一锅汤」。由简入繁还是一般人比较能够接受的方式。

    C/C++ 基本功练好之後,学习一点点 Windows SDK 程式设计(也就是使
用 raw API 写程式)。不一定要完全动手写,可以多看书并且尝试动手改一
两个程式,经历一下编译联结的过程。这时候也还不要用整合环境,宜使用命
令列模式下的编译器和联结器。编译联结的过程可写成makefile,不会写
makefile 的人可以写 batch 档。虽然不精致,有什麽关系呢,只是过渡期而
已。再来就真正进入会影响你日後工程师生涯的动作了。你可以挑选 Visual
C++ 或Borland C++ 或 C++Builder 或 Optima++ 或 IBM Visualage C++ 或
Symantec C++...,学习比 raw API 更高阶的程式设计方法。说穿了其实是选
择一个 application framework(MFC 或 OWL 或 VCL 或 Open Class Library
 或...),那才是程式设计主战场。整合环境虽然也需要一些时间去学习熟练,
但困难度不高啦。

    学习这种 application framework,你必须把程式主轴搞得很清楚,才有
办法游刃有馀地添骨添肉、解决问题。等到主轴的东西都清楚了,其他应用则
泰半只是看范例、查手册的功夫而已,因为现成好用的 classes 会愈来愈多。
想写个简单的 Internet server 程式?简单,MFC 的5个 classes 保送你上
垒。想写个资料库应用程式?简单,MFC 的 DAO 和 ODBC classes 让你轻轻松
松快快乐乐。

    遗漏了一个大重点:Windows 作业系统。要把应用程式写得好,作业系统
的基础一定要有,否则遇到问题就可能像...像苍蝇面对玻璃窗一样,近距离贴
着玻璃乱飞乱舞,看起来很忙碌,却不知道退一步看,原来旁边有一个窗口可以
飞出去。作业系统的知识一定要在程式设计过程中不断地进修,与程式设计相配
合。RunPC 1997.03 的 <无责任书评/侯捷> 中介绍了三本很棒的 Windows 作业
系统书籍。

----------------------------------
送件者: Mcfee Woo <gega0624@ms7.hinet.net>
主旨: 请给一位非本科的忠告!
日期: 1996年3月13日 AM 01:39
侯老师,您好:
    拜读您几本有关於 C++ 的书之後,又碰巧在这期 RUN!PC 看到您所写的一
篇文章,文章中提到 "足够用就好"。碰巧本人是那种不务正业的学生(本科是
电机,兴趣却是电脑),且学的是 C 语言,正努力向 C++ 及 JAVA 挺进,但读
完文章後,深觉恐慌,毕竟非本科的学生总是少了那麽一点点专业知识,是否应
该立即放弃艰深难懂 C++ 而改学习 Visual Basic,使得学习起来也许会快乐一
点(C 的指标至今仍是我的恶梦)。不知侯老师有何意见提供,毕竟老是举棋不
定还不如痛下心决定,蹉跎青春也不是办法。一位主观意识不是很强的少年留。


    关於学什麽东西才好,我仍是那句话:够用就好。但是作为学生的你,又怎
麽知道是不是够用了呢?这就困难些了,好好和师长同学们聊一聊吧,杂志上意
长纸短难概叙。但是,切记,为自己的後路留一些馀裕,把自己压紧一点,是眼
光更远规划更长的人的作法。

   「快乐地学习」的确是一件非常重要的事。如何才能够快快乐乐地学习呢?你
需要反省你的不快乐在哪里。我有一些朋友,他们专挑高难度的东西做:翻译要翻
奥秘级的书,写作要写核心层架构,做专案则不只价格是个考量,有没有挑战性更
是要点。他们希望自己在那种情况下成长进步。感受自己一天天成长进步,是那种
人莫大的快乐。我自己,每天,睡觉前如果觉得「传不习乎」,一定懊恼 24 小时
白过了(不过觉还是睡得香甜就是)。有种人马上就讥讽像我们这种人:『干嘛,
人活过得那麽痛苦』。哼哼,子非鱼,焉知鱼之乐?但也不必反唇相讥:『整天醉
生梦死只知享乐,活着的意义在哪里』,因为「子非彼,焉知彼之不知鱼之不乐」?
基本上人从生物学划分为红黑黄白棕五色人种,没有人企图把这五种人的生理结构、
遗传基因做平头平等的比较(海地人是 AIDS 的高危险群,黑人的身体密度不适合
游泳竞赛...),如果我们承认这五种人不一样(我们都这麽承认,不是吗),我们
也不必去说服不同人生观与价值观的人,因为那是思想上的红黑黄白棕。

    说远了。我意思是,你应该甚清楚你的性向。那麽,不快乐是因为确实不喜欢
那些很伤脑筋的东西,还是因为基础不够常常碰壁?如是前者,当然要痛下决定避
免蹉跎青春。如是後者,你需要好好徵询师长的经验,为你指出好的学习顺序,於
是「观古今於须臾,抚四海於一瞬,选义按部,考辞就班」,也就不觉痛苦了。

    如果你以为我认为 C/C++ 才有高难度,学习它人生才有意义,那误会就大罗。
任何领域都有入门、进阶、精专等等不同层次。C/C++ 之路的确特别坎苛些,又因
正是你的遭遇,所以提出做为例子。


--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店