早一个多月,收到了一位网友的求助信,请我帮他做一道程序题。这样的求助我是不会直接解答的。如果要想通过读程序来学习,可读的程序太多了,不在乎由我写的这一段程序。
我给他的回信是,他可以自己做出来一个版本,无论对错,我们就他的做法进行讨论。这是我认为有效的交流。提问者没有做,靠着人给讲,这种学习方式,可以休矣。无论对错、好坏,他自己做过了,针对他自己的讨论点就出来了。我当时的答复是:
我的时间有限,将你做过的给我发来,并提出具体问题再讨论为佳。在学习中,这种交流的方式(有一个问题,不说自己的见解,直接就找人说:“你做个答案,给我讲明白”),并不能称为交流,也不能起到什么大的作用。
他发来了自己的版本。一个用循环可以完成的任务,但是循环体中的计算不对。我为他修改了程序,作为回复。针对他提出的疑问“当输入数值很大时,结果却为负”,我给他指点该明白一下“溢出”的问题。答复中说:
当数值很大时,结果为负,请找资料明白int型占4个字节,意味首其最大正数可以取值为2^31-1,而不是能表示无限大的数。若计算得到的值超出了,这叫数据溢出。百度“整型 溢出”,你可以知道。
他很重视我“布置的作业”,他翻阅了不少的书,包括经典的Bjarne Stroustrup的《The C++ Programming Language》英文版。初学者博览很有必要,但应该有种“开放”的心境,有些事情该放要放一放,留待以后解决。学习,不是一个线性的过程,而在于多次反复,同样的问题,回头看,别有风味。显然,他是一位很执着和认真的人,他列举出了好几种观点,并问“int、long int、long long int三者间究竟有何区别?”
我给出的答复是:
对于这四种情形,按字面“短整型、整型、长整型、长长整型”,区别在于表示数的范围,然而究竟有何不同,依平台而定。
根据你给我看过的程序,我建议你可以暂时不必抠这样的细节,优先能用语言提供的机制能写出解决问题的程序为第一要务。语言细节的问题,你可以采用“回头看”的策略去做,而不少人,是在轰轰烈烈开始后,终结于刚起步时期的细嚼慢咽。
如果你不是这种类型的学习者,请忽略这条建议。
不久后,他再次来信,给的是另外一个程序。给出的程序,以及问出的问题之间,我总觉得有“跨度”。如果他会用调试手段,一跟踪,也就能自己解释通了。由于当时手头的事情很多,我给的回复是:
近日期末加毕设,各种忙。我决定还是不为你在代码中奋战了。类似的问题,你发到CSDN论坛中,会有人很快给你出主意,比等我要快得多。
不少急着要结果的,或者需要抠程序中细节的问题,我常这样回答。我也需要给自己时间。
今天,在人人上看到他发的状态。可以看出,他的求助途径已经拓展了很多,他的钻研精神依然。提醒他可以注重效率,也引出了一些探讨。
人人上的状态:
用了一个多星期的时间写了两道题(其实是一道题),用一种很笨拙的方法解决了问题。对算法有了初印象,对向量有了更深的理解。埃拉托斯特尼筛法也成为我学会的第一个算法。真的收获颇多。越来越觉得C++难,但也越来越觉得编程是一件很有趣的事情。感谢CSDN新手乐园的各位大牛;感谢百度C++吧的诸位大神;感谢无名的印度高人。没有你们,愚笨的我写不出这个44行的程序,没有你们,我可能早就放弃了。最后,我这个笨蛋要用一颗虔诚的心膜拜Alan Mathison Turing和John von Neumann,若无你们,一切都是空谈!
我的评论:
我感觉你是在没有球感就在强练投三分球。这样也能练出来,但显然更艰苦。通过做一些水题”,积累一些感觉,会学得轻松、自然、效率一些,所需要成本、资源也会降下来,不再需要用意志约束自己的学习。可能有不对之处,仅供参考。
他反问:
那您认为应该怎么学呢?这道题是一本初级教材课后习题中的一道。我也是没想太多,就想尝试一下。您认为该选什么样的题作为练习呢?请您不吝赐教!谢谢您!
我答复:
一道题,一星期,效率太低了,你可以用意志强迫自己做下去,但这种感受并不全是好感受。百度一下"SMART原则",这也适合学习目标(大目标和选择题目的小目标)的确定,找让自己踮起脚跟,或者跳一跳就能够着的题目去练习。记着当前这个问题,会有一天,长高了的你,踮起脚跟就够着了。评价的标准不该是“初级课本的最后一题”,你花这么大的代价解决,说明对你来讲是难了。你做到咬住问题不放并解决,实现了一种“跨越”,很了不起,这样的精神将有助于你能在将来解决别人都无法解决的问题,这种精神不丢。我想,现在不少同学学习进行不下去,就是缺少这种精神。我还是建议你可以对自己更好一些。当然,你能这样做,并以此为乐,这是最好的了。
重复地学习,螺旋上升,这在学习理论中的一个重要原则,而效率和感受,这是我从诸多咨询中得出要强调的。希望这位同学能坚持自己的,也能做到改进真正不当的方式。
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |
编程学习中要注意效率和感受