一本好的C++教材其实应该最先(或者尽早)告诉读者”不应该怎样使用C++“

53 views
Skip to first unread message

pongba

unread,
Oct 8, 2007, 9:57:24 AM10/8/07
to pon...@googlegroups.com
支持理由:程序员会仅仅因为可以用某特性,而就去用它。

--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba

red...@gmail.com

unread,
Oct 8, 2007, 9:59:41 AM10/8/07
to pon...@googlegroups.com
近年来看起来有望流行的一些新语言, 例如 ruby 啊, D 啊, 似乎都设计得很丰富, 很有更乱用的潜力 :)

pongba 写道:

Huafeng Mo

unread,
Oct 8, 2007, 7:55:05 PM10/8/07
to pon...@googlegroups.com
不尽知用兵之害者,则不能尽知用兵之利也。
                                                     ---孙子兵法.  作战

在07-10-8,red...@gmail.com <red...@gmail.com> 写道:



--
反者道之动,弱者道之用

pongba

unread,
Oct 8, 2007, 10:53:48 PM10/8/07
to pon...@googlegroups.com


On 10/9/07, Huafeng Mo <longsh...@gmail.com> wrote:
不尽知用兵之害者,则不能尽知用兵之利也。
                                                     ---孙子兵法.  作战

这句话引得好!:)实在是妙!

red...@gmail.com

unread,
Oct 8, 2007, 11:16:00 PM10/8/07
to pon...@googlegroups.com
告诉得太早, 读者可能基本上都看不懂呢.

C++ 还是复杂了, 如果对于一个编程初学者, 你不让他学习好基本语法语义, 再写上一段时间程序, 就告诉他不要怎么怎么做, 他只能如读天书, 不要说理解 why, 连场景描述可能都看不懂.

即使是对于别的语言的熟练用户, 没有碰过C++ 的很多阴险的地方, 碰到相关的提醒, 也多半看不懂的.

pongba 写道:

pongba

unread,
Oct 8, 2007, 11:29:57 PM10/8/07
to pon...@googlegroups.com
其实我认为学习编程,应该先学语言无关的思想。用一个语法很loose的伪码来表达。OO设计嘛就用UML即可。FP嘛用数学符号。过程是那就不用说了。

这样可以避免初学者一上来思维就被语言套牢。

Huafeng Mo

unread,
Oct 8, 2007, 11:30:23 PM10/8/07
to pon...@googlegroups.com
我觉得应该在开始教育的时候"立规矩",立很强的规矩,比如,不要强制类型转换,不要随便new,不要返回局部对象等等。必要时用电电他。呵呵,开个玩笑。:P
立规矩还是很重要的。我大学里金工实习的时候,师傅们上来就劈头盖脸的给我们上安全课,说不注意要死人的。还给我们看一个被几千rpm旋转的砂轮飞溅出来,打得七歪八扭的灯罩。还告诉我们,在食堂里那个右手没有手指头的人,原先就在这里工作的...。
实际上,安全意识是"吓"出来的。我觉得教科书不仅仅展示正确的案例,还应该在醒目的位置放一些错误的、会产生吓人效果的例子。可能的话还应该配合一些具有冲击力的声光效果,以帮助形成条件反射。
那些搞计算机教学的人,真应该好好学学巴普洛夫的条件反射理论。:-D


在07-10-9,red...@gmail.com <red...@gmail.com > 写道:



--
反者道之动,弱者道之用

pongba

unread,
Oct 9, 2007, 12:03:15 AM10/9/07
to pon...@googlegroups.com
On 10/9/07, Huafeng Mo <longsh...@gmail.com> wrote:
实际上,安全意识是"吓"出来的。我觉得教科书不仅仅展示正确的案例,还应该在醒目的位置放一些错误的、会产生吓人效果的例子。可能的话还应该配合一些具有冲击力的声光效果,以帮助形成条件反射。
那些搞计算机教学的人,真应该好好学学巴普洛夫的条件反射理论。:-D

 啊哈哈,深刻。确实如此。说一大通道理不如吓一下。

red...@gmail.com

unread,
Oct 9, 2007, 12:32:39 AM10/9/07
to pon...@googlegroups.com
1. 我觉得, 对于大多数人来说, 学习编程最终是做工程人员, 不是做那种旁边配
备一组工程人员的纯理论人员(连 BS 自己都要写代码的哦), 绑定一种典型的, 不
那么阴险的语言, 积累一些真正有用的经验, 并不那么坏.

但是 C++ 是不适合担任这个任务的, 简单的语言, 例如 python, 比 C++ 之类更
合适. 当然目前选择 Java 的比较多.

编程学习 ---- btw 我觉得多数的计算机系算不上多有 sciense, 而engineer 需
要的东西也没有教好, 勉强算CP系, 在里面就算学编程了 ---- 学得太象牙, 出来
还是很麻烦的.

例如, 大家都知道, 只做过作业, 没有自己另外课外好好整过几个项目的学生, 写
代码 99.9% (千足纯金啊)都是仅仅考虑 happy path (幸运 52 ?), 不去考虑边界
条件怎么处理, 碰到错误异常也统统都不管, 从一开头就没有这个意识, 甚至是养
成了习惯, 麻烦啊.


2. 搅和一下:
初学习编程, 还没有编过 > 5000 行代码, 直接就学 OO 设计, 有用 ?


pongba 写道:
> 其实我认为学习编程,应该先学语言无关的思想。用一个语法很loose的伪码来
> 表达。OO设计嘛就用UML即可。FP嘛用数学符号。过程是那就不用说了。
>
> 这样可以避免初学者一上来思维就被语言套牢。
>


pongba

unread,
Oct 9, 2007, 12:49:14 AM10/9/07
to pon...@googlegroups.com
On 10/9/07, red...@gmail.com <red...@gmail.com> wrote:
2. 搅和一下:
初学习编程, 还没有编过 > 5000 行代码, 直接就学 OO 设计, 有用 ?

啊哈哈,我错了,的确没用...:P

SevenCat

unread,
Oct 9, 2007, 12:50:40 AM10/9/07
to TopLanguage
我觉得应该以大量实用的例子来告诉初学者,C++能做什么事情,能完成什么工作,从小例子开始到中等例子,让他们更加有信心,更有成就感。一下子说很复
杂的事情会把人吓跑。

Huafeng Mo

unread,
Oct 9, 2007, 12:51:26 AM10/9/07
to pon...@googlegroups.com
呵呵,我就是这么教育儿子的。比如,不要去碰插座等等。:-)

在07-10-9,pongba <pon...@gmail.com> 写道:



--
反者道之动,弱者道之用

pongba

unread,
Oct 9, 2007, 12:53:44 AM10/9/07
to pon...@googlegroups.com


On 10/9/07, Huafeng Mo <longsh...@gmail.com> wrote:
呵呵,我就是这么教育儿子的。比如,不要去碰插座等等。:-)


难道你说完之后作浑身颤抖、手脚抽筋的骷髅状?:P

pongba

unread,
Oct 9, 2007, 12:56:38 AM10/9/07
to pon...@googlegroups.com
是啊,例子太重要了。只可惜绝大多数编程书籍里面的例子都是简化甚至捏造的... 其实也未必是作者没有经验,只是要随手摘来精到的例子,需要编码时就保持敏锐的积累,很难做到啊~

On 10/9/07, SevenCat <BastE...@gmail.com > wrote:
我觉得应该以大量实用的例子来告诉初学者,C++能做什么事情,能完成什么工作,从小例子开始到中等例子,让他们更加有信心,更有成就感。一下子说很复
杂的事情会把人吓跑。

Huafeng Mo

unread,
Oct 9, 2007, 1:55:29 AM10/9/07
to pon...@googlegroups.com
呵呵,还没那么恐怖。:)
其实,小孩是很敏感的,(就像初学编程的人)。他第一次要把钥匙插进插座里,正巧被我看见,我大叫一声:"不好插的!"他吓得一哆嗦,倒也没哭。然后,为了安抚他,我只能尽可能地用夸张的动作和表情对他说:"这个不可以动的哦,要'哇哇'的哦。"反复说了好多遍。此后,他每次看到插座,就指着说:"哇哇,哇哇。"再也没敢拿东西往插座里塞。
由此我想到编程教学也可以采用这种"吓唬+引导"的方法。小孩通常会对一些强烈的刺激记忆深刻,并且很容易形成条件反射。而初学者也一样。
当然,吓唬得恰到好处。玩儿过了,会有心理问题的。:)


在07-10-9,pongba <pon...@gmail.com> 写道:



--
反者道之动,弱者道之用

pongba

unread,
Oct 9, 2007, 2:07:03 AM10/9/07
to pon...@googlegroups.com


On 10/9/07, Huafeng Mo <longsh...@gmail.com> wrote:
呵呵,还没那么恐怖。:)
其实,小孩是很敏感的,(就像初学编程的人)。他第一次要把钥匙插进插座里,正巧被我看见,我大叫一声:"不好插的!"他吓得一哆嗦,倒也没哭。然后,为了安抚他,我只能尽可能地用夸张的动作和表情对他说:"这个不可以动的哦,要'哇哇'的哦。"反复说了好多遍。此后,他每次看到插座,就指着说:"哇哇,哇哇。"再也没敢拿东西往插座里塞。
由此我想到编程教学也可以采用这种"吓唬+引导"的方法。小孩通常会对一些强烈的刺激记忆深刻,并且很容易形成条件反射。而初学者也一样。
当然,吓唬得恰到好处。玩儿过了,会有心理问题的。:)


呵呵,做父亲的榜样啊~ :-)

Huafeng Mo

unread,
Oct 9, 2007, 2:14:28 AM10/9/07
to pon...@googlegroups.com
新手上路,新手上路。:-)

在07-10-9,pongba <pon...@gmail.com> 写道:



--
反者道之动,弱者道之用

Huafeng Mo

unread,
Oct 9, 2007, 2:16:52 AM10/9/07
to pon...@googlegroups.com
说起新手上路,我想到也可以借鉴学车。我总是说,在马路上压死个把人要比在C++里犯错容易。我们之所以没有天天压死人,是因为我们遵守了规则。也强化训练了规则。

在07-10-9,Huafeng Mo <longsh...@gmail.com > 写道:



--
反者道之动,弱者道之用

hayate

unread,
Oct 9, 2007, 2:45:18 AM10/9/07
to pon...@googlegroups.com
但是这样又矫枉过正了
学习编程必须随时能看到成果和进步 不然很容易疲倦 而且太形而上的东西本身就复杂
总归来说 还是c++太复杂了 要想不走弯路的学习 很难

red...@gmail.com

unread,
Oct 9, 2007, 2:45:59 AM10/9/07
to pon...@googlegroups.com
不太一样吧,

开车的人, 即使没有人去强化训练规则, 心理上对压死一个人还是非常非常警惕
的, 有这个心理在前面, 不是那么容易压死人的.

但是对于写程序, 没有这么强的心理负担, 从而也没有那么大的动力去将避免犯错
误的30页还是50页你的规定给背下来.

说到小孩子, 简单的东西, 吓几次就有条件反射了. 不过, 你这样吓吓他看看能不
能建立条件反射:

如果你没有吃饱, 天上有云, 上弦月, 你的玩具娃娃没有洗干净, 妈妈没有开电视
机, 爸爸再看篮球赛, 隔壁同学没有做完作业, 那你千万千万不要去喂小白兔 !!!

他肯定就只能记住, 小白兔很危险, 不能接近.

Huafeng Mo 写道:
> 说起新手上路,我想到也可以借鉴学车。我总是说,在马路上压死个把人要比在
> C++里犯错容易。我们之所以没有天天压死人,是因为我们遵守了规则。也强化
> 训练了规则。

pongba

unread,
Oct 9, 2007, 2:49:06 AM10/9/07
to pon...@googlegroups.com
啊哈哈,想不到肖兄对心理学也颇有研究:=) 赞~

On 10/9/07, red...@gmail.com <red...@gmail.com> wrote:

pongba

unread,
Oct 9, 2007, 2:50:22 AM10/9/07
to pon...@googlegroups.com
On 10/9/07, hayate <haya...@gmail.com> wrote:
但是这样又矫枉过正了
学习编程必须随时能看到成果和进步 不然很容易疲倦 而且太形而上的东西本身就复杂
总归来说 还是c++太复杂了 要想不走弯路的学习 很难

嗯嗯,,确实。。

red...@gmail.com

unread,
Oct 9, 2007, 2:59:55 AM10/9/07
to pon...@googlegroups.com
呵呵, 没有多少研究, 只不过我就是那个小孩子, 很多东西老是记不住, 例如, 什么时候异常在什么条件下会给你带来什么样的问题, 即使这个问题是曾经自己碰到过, 搞清楚过, 过不了几个月, 就忘了.  现在用了一段时间的D, 我再次记不住抛出异常的时候, 应该是直接用构造函数即时构造一个异常对象 throw, 还是应该 new 出来之后再 throw  --- 好像是前者 ? delphi 是后者 ? 我没有什么把握, 呵呵.

最后我就只能记住, 异常很危险, 轻易不要用.

过了几个月, 我又觉得 C++ 里面另外一个东西很危险, 轻易不要用.

然后看到新同事, 连搞明白一些问题都费劲, 我就只记住,  C++ 很危险, 轻易不要用 ;)


pongba 写道:

pongba

unread,
Oct 9, 2007, 3:02:42 AM10/9/07
to pon...@googlegroups.com


On 10/9/07, red...@gmail.com <red...@gmail.com> wrote:
呵呵, 没有多少研究, 只不过我就是那个小孩子, 很多东西老是记不住, 例如, 什么时候异常在什么条件下会给你带来什么样的问题, 即使这个问题是曾经自己碰到过, 搞清楚过, 过不了几个月, 就忘了.  现在用了一段时间的D, 我再次记不住抛出异常的时候, 应该是直接用构造函数即时构造一个异常对象 throw, 还是应该 new 出来之后再 throw  --- 好像是前者 ? delphi 是后者 ? 我没有什么把握, 呵呵.

最后我就只能记住, 异常很危险, 轻易不要用.

过了几个月, 我又觉得 C++ 里面另外一个东西很危险, 轻易不要用.

然后看到新同事, 连搞明白一些问题都费劲, 我就只记住,  C++ 很危险, 轻易不要用 ;)


嗯嗯,正常,大家都一样。容易记住结论(越简单越好,简单到失去精确性,失去前提):-)
所以我现在一有想法就记下来,免得忘掉,记忆太不可靠鸟~

Huafeng Mo

unread,
Oct 9, 2007, 3:13:17 AM10/9/07
to pon...@googlegroups.com
这倒也是。
哦,是的,我搞错了。开车属于条件反射,或反射。学编程应该算是第二信号系统。更加高级,更加复杂,训练的要求更高。
那我们就借鉴借鉴吧。
应该说,编程不是教出来的,而是训练出来的,就像训练士兵打仗;或者训练一个医生开刀一样。
只是我们这个行业里,做事出了篓子,得到的报应比其他行业要小得多。大不了改改程序,或打个补丁什么的。要求不一样。给阿丽亚娜5或者f-22编程的人,也只不过是极少数。


在07-10-9,red...@gmail.com <red...@gmail.com> 写道:

hayate

unread,
Oct 9, 2007, 3:15:04 AM10/9/07
to pon...@googlegroups.com
毕竟人类的智力有限 而且也不是人类擅长的
我一直觉得C++的复杂性来自于需要考虑的问题太多 虽然就问题个体而言并非不能克服 但是同时面对大量明显或潜在的问题以及许多规则时 对人类的记忆力和精确性是个挑战
我们总是想各种办法避免犯错误 训练的再多也难免百密一疏

On 10/9/07, pongba <pon...@gmail.com> wrote:
>
>

pongba

unread,
Oct 9, 2007, 3:19:51 AM10/9/07
to pon...@googlegroups.com
On 10/9/07, hayate <haya...@gmail.com> wrote:
毕竟人类的智力有限 而且也不是人类擅长的
我一直觉得C++的复杂性来自于需要考虑的问题太多 虽然就问题个体而言并非不能克服 但是同时面对大量明显或潜在的问题以及许多规则时 对人类的记忆力和精确性是个挑战
我们总是想各种办法避免犯错误 训练的再多也难免百密一疏

Yepp, indeed.  C++里面有一堆规则,许多规则都有例外,许多例外又都有例外。单单一层例外就很难记住了。

red...@gmail.com

unread,
Oct 9, 2007, 3:52:28 AM10/9/07
to pon...@googlegroups.com
比喻一下:

C 语言是一根棍子, 一根结实的棍子, 狼来了, 一棍打死, 鱼来了, 一棍打死,  坦克来了, 棍打不是可以撬履带, 给些时间, 一样搞翻你; 苍蝇来了, 一棍打不中, 再打一棍, 只要棍法还成, 累是累点, 总不会打死自己;

C++ 是一个变型金刚, 狼来了, 一枪打死, 鱼来了, 一网一家全捞起, 苍蝇来了, 一拍打死, 坦克来了我变大炮, 办法就是多, 高手驾驭之下无往而不利, C 棍只能跟后面吃灰; 只是这玩意的驾驶室里面有三万五千个按钮, 变个形状就换本驾驶手册, 碰到低手来开, 走路可能左脚拌右脚摔倒爬不起来, 想要棍可能出来双截棍将自己脑袋打破, 打坦克可能没留意炮口装错掉, 一炮自己就炸飞, 很危险.


pongba 写道:


On 10/9/07, hayate <haya...@gmail.com> wrote:
毕 竟人类的智力有限 而且也不是人类擅长的

我一直觉得C++的复杂性来自于需要考虑的问题太多 虽然就问题个体而言并非不能克服 但是同时面对大量明显或潜在的问题以及许多规则时 对人类的记忆力和精确性是个挑战
我们总是想各种办法避免犯错误 训练的再多也难免百密一疏

Huafeng Mo

unread,
Oct 9, 2007, 4:13:40 AM10/9/07
to pon...@googlegroups.com
好比喻!
看来C++要发展,需要在不缩减特性的前提下,提高易用性。
我这里也做个比喻。
Java什么的算是自动档。C简陋,只有4挡,但换起来毕竟比较简单。而C++则是强力的7档变速器,功能是强了操作起来却很费事。现在我们需要的是"手自一体"的7档C++。
呵呵,效颦、效颦。:)

在07-10-9, red...@gmail.com <red...@gmail.com> 写道:



--
反者道之动,弱者道之用

hayate

unread,
Oct 9, 2007, 4:55:25 AM10/9/07
to pon...@googlegroups.com
C++ 是要你命3000

On 10/9/07, Huafeng Mo <longsh...@gmail.com> wrote:

pongba

unread,
Oct 9, 2007, 5:18:53 AM10/9/07
to pon...@googlegroups.com
On 10/9/07, hayate <haya...@gmail.com> wrote:
C++ 是要你命3000
 

啊哈哈,想起python 3000了 :P
Reply all
Reply to author
Forward
0 new messages