编程学习中要注意效率和感受

早一个多月,收到了一位网友的求助信,请我帮他做一道程序题。这样的求助我是不会直接解答的。如果要想通过读程序来学习,可读的程序太多了,不在乎由我写的这一段程序。
  我给他的回信是,他可以自己做出来一个版本,无论对错,我们就他的做法进行讨论。这是我认为有效的交流。提问者没有做,靠着人给讲,这种学习方式,可以休矣。无论对错、好坏,他自己做过了,针对他自己的讨论点就出来了。我当时的答复是:
  我的时间有限,将你做过的给我发来,并提出具体问题再讨论为佳。在学习中,这种交流的方式(有一个问题,不说自己的见解,直接就找人说:“你做个答案,给我讲明白”),并不能称为交流,也不能起到什么大的作用。
  他发来了自己的版本。一个用循环可以完成的任务,但是循环体中的计算不对。我为他修改了程序,作为回复。针对他提出的疑问“当输入数值很大时,结果却为负”,我给他指点该明白一下“溢出”的问题。答复中说:
  当数值很大时,结果为负,请找资料明白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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-09-29 09:38:13

编程学习中要注意效率和感受的相关文章

在编程实践中不可对英文提示视而不见

近日,越来越多的同学调程序中的一个行为引起了我的注意:遇到了问题不看提示,直接蒙头看代码.提示信息不一定准确,但是最重要的参考之一,有的能直接告诉我们问题所在,有的至少能给我们启发.不看的原因据说是看不懂英文提示. 与同学们交流后给我的结论是,看不懂只是因为没有看.英语学了N年,到真正用英语的时候了,先给自己扣个大帽子--英语不好,然后就舒舒服服地对程序中出现的问题胡猜乱蒙去了.真的舒服吗?学编程序要在用中学,英语的学习也要用中学.现在每天都有去用英语的必要和需要,却不去主动挑战一下那个所谓的心

专业学习中,学、用英语

中文教材和书籍中,专业术语在书中第一次出现时,对应的英语词汇会在后面的括号中给出.看到这个括号,需要留意看一看,而现在很多人却直接忽略了.很多时候英语词汇会帮助我们理解术语,在用到之时,立刻知道其意思.编程的时候,要用上英文的错误提示,不仅会找到改正bug的启发,而且能与正在学习的知识产生交互,这是作为一个编程学习者,作为未来的专业技术人员,在工作中要采用的方式.声称看不懂英文提示的学生,我总是能在他的课本里找到拦路虎词汇的出处."做中学"是我们所追求的学习方式,对学习和专业相关的英语

积累编程过程中的经验

我已经无法容忍自己在编程学习的路上缓慢的进步速度了,可是自己又总是很低效的学习,所以从现在开始,在该系列博客中,积累着记录在编程过程中的经验和反思,希望能真正让自己快速成长起来. 下定决心,保持耐心,专注当下,坚定去做而不是去茫然恐惧. 习得 学习他人代码最好的方式就是进到程序中单步去调试,了解大体的框架和流程,然后再深入的去研究 C语言中strlen()的陷阱 strlen()的作用是取得字符串的有效字符个数,但是当赋给字符串的字符大于该字符串的长度时,有可能将字符数组最后的'\0'标识覆盖,

人工智能进阶心得:在战斗中学习,在学习中战斗

以下是精彩视频内容整理: 层次 在人工智能上我们进步空间到底有多大?在内容广度上,会有DNN.CNN卷积网络.RNN循环神经网络.GAN和RL等:在深度上可以分为两大阶段,一是认知上的了解-理解,一是行动上的应用.改造和创造.越向上的人会越少,比如应用层的从业者就会少一些. 认知层即了解概念.理解原理,应用即将所学及时的付诸于实践,改造即针对问题用自己的理解进行更好的改变,改造变多了累积起来就是一种创造.除此之外,前沿的时间维度也是必要的,深度学习技术在不断地进展,如果没有时间维度而以静止观点去

编程学习:Java学习从入门到精通

编程 Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar).不论什么Java应用服务器实质都是内置了某个版本的JDK.因此掌握JDK是学好Java的第一步.最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BE

小结:PHP编程过程中应当注意的各种注意事项

最近一段时间,PHP凭借其功能强大,简单易用的特点被越来越多的人们所喜爱和接受,成为目前最为流行的脚本编程语言之一.本文将结合用户在使用PHP过程中经常容易出现的问题,包括语法错误,程序运行错误以及逻辑错误等展开详细的介绍,希望能够对那些目前正在学习PHP语言的用户有所帮助.此外,本文还将会在文章的结束部分对PHP编程过程中应当注意的各种事项加以汇总,供读者参考. PHP脚本语言所具有一个显著的特点就是能够自动生成变量实例,不要求用户对所需要使用的变量进行声明.该特点既有值得推崇之处,但是同时也

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

PowerPoint在研究性学习中的应用

在平时开展的研究性学习中,从开题报告.小组谈论.合作交流到成果汇报等各个环节,PowerPoint都成为了必不可少的辅助工具.然而,在应用实践中我们发现,由于很多老师和学生缺乏了解,使得PowerPoint的一些十分有用的功能被忽略了,我们一起来看一看. 1.在小组讨论中,使用"会议记录"做电子笔记 由于研究性学习中的研究课题通常是由一个课题组集体承担的,因而要经常进行小组讨论.例如,各类演讲报告,就是在课题组讨论的基础上形成的,首先由课题组的一个主要的撰稿人制作一个演示文稿的初稿,然

[网摘学习]Shell脚本编程学习入门:Shell编程基础

51cto的这篇文章不错,收藏一下:http://os.51cto.com/art/201109/294521.htm(版权归原作者所有) Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):   #!/bin/sh ... 注意:最好使用"!/bin/bash"而不是"!/bin/sh",如果使用tc shell改为tcsh,其