“敲代码”学编程的正确方式

简介: 【来信】   老师您好!我自学编程的,我想向您咨询一下,关于敲代码的方法!   第一:我先理解书上、视频的源码,然后根据自己对源码的理解,然后把代码的思路写下来,然后自己这个思路把代码敲出来,当我自己不懂的时候,再返回去看源码!   第二:理解书、视频的源码,完全照抄一篇。

【来信】
  老师您好!我自学编程的,我想向您咨询一下,关于敲代码的方法!
  第一:我先理解书上、视频的源码,然后根据自己对源码的理解,然后把代码的思路写下来,然后自己这个思路把代码敲出来,当我自己不懂的时候,再返回去看源码!
  第二:理解书、视频的源码,完全照抄一篇。
  我很长一段时间是使用第一种方法,但是我觉得好累啊!学得很慢,当我遇到一些难以理解的代码而且200多行的代码的时候,我感觉我虽然理解了代码,但是要我完全敲出来,总是会出错,当我全部功能实现之后,要花很长时间!我不知道我自己的这种方法是不是有问题,身边我也没有人可以请教!所以我想向您咨询一下这个问题!

【回复】
  很感动你的执着。初学遇上困难很正常,这一关过了,就可以迎接下一关的挑战了,不断过关,让自己的知识和能力上到新的高度,有辛苦,但是其乐无穷。
  从你描述的学法上,我先做些点评。
  “理解书、视频的源码,完全照抄一篇(遍?)”这个时期,我觉得不要照抄。“敲代码”靠的不是手指头,靠的是大脑。你首先要做的是阅读程序,深度的阅读。并且在读的时候,不要一下钻到细节中,先看结构。要解决的问题大致是清楚的,于是,程序有几大块,每块的任务是什么(你会发现,最宏观的,无非就是“输入-处理-输出”三块),然后再分解每一块。对十来行代码的程序这样阅读,等阅读200行,甚至2000行的程序时,这种思维就形成了,再不会被其中某个语法上的小疑惑困住了。照抄一遍会让你直接进入细节,忽视了结构,不利于你形成自己解决问题的能力。
  基于上面所说的阅读,在理解后,自己写代码。这时候,思路不清时,想结构,语法不清时,看语法即可。若写出了和源码不一样的程序,完全正常,不要追求一模一样。只要知道自己思路清楚,表达正确就可以了,甚至,在思路上、表达上和源码不一样,是件更好的事。当自己写得过程中糊涂了,有必要再回去看源码时,我也希望你能清晰地知道,是去发现思路(结构)上的问题,还是语法上的问题。语法上的问题,也完全可以去看有关的知识点,而不是源码。
  进入一个新领域学习,总是初时要慢。要学知识本身,还要学方法。从长远看,接受自己的慢起步。在做简单题的阶段,以及现在已经学一段时间后,可以回头再看,尝试一题多解(用多种思路/结构)和一义多表(同样的思路,用多种语法结构描述,如一段分支结构的逻辑,用if-else语句、switch语句、?:运算分别表示)的方式做一做,你学得东西就“活”了。
  以上是对你提问题的直接回答。
  再多说点。
  程序设计初学者,我特指学第一门编程语言的同学,感觉到的起步难就是源于两个方面:语言本身和解题思路。解决一个问题,两方面的能力都需要,但刻意地将这两个方面学着分开一些。初学做小项目时是这样,实际上,到成为高手后,做大项目、大工程,必然也是这样的,并且做宏观设计的人和最终用编程语言实现的人甚至不是一个部门的。阅读程序是学习过程中很重要的手段,先掌握结构,必要时将重点的语法部分再看一看,没必要时就不看了,用自己觉得更自然的语句去表达。而在写程序时,先将结构想清楚,甚至写出来(画流程图,或者就在源码中,用注释的方式标出来,以便后续填空),再考虑用什么样的语句表达。
  在学习过程中,注意一下及时总结。其实初学时,从语法角度,无非就是一些语句、表达式;从结构角度,顺序、分支、循环三种控制结构,再加上模块化程序设计机制等;从数据结构角度,简单变量到数组再到结构体等。学一段时间,将这些成份,以及它们之间的关系,在脑子中从宏观上织一织网,渐次再想到细节,你就不会被各种表象困扰了。
  就说这些。祝你学习顺利,也相信你能渡过难关。
  

目录
相关文章
小米手机 fastboot模式 显示 press any key to shutdown 解决方法(亲测有效,已解决)
小米手机 fastboot模式 显示 press any key to shutdown 解决方法(亲测有效,已解决)
1664 0
|
8月前
|
图形学
unity 物体震动
在Unity中实现物体震动效果,主要通过改变物体的位置、旋转或缩放属性来模拟震动。以下是位置震动的实现原理及代码示例:通过随机生成微小偏移量并累加到物体位置上,在短时间内不断改变位置产生震动效果。生成随机偏移,并结合时间控制持续震动。
|
11月前
|
芯片
2节串联锂电池充电管理芯片,有5V升压,9-12V降压,快充升降压
2节串联锂电池供电电压范围为6V-8.4V,标称7.4V。根据输入电压不同,需选择不同模式的充电管理芯片。5V输入需升压型,9V、12V输入需降压型,5V-20V输入需升降压型。推荐PW4284、PW4084、PW4203等型号,适用于各种应用场景。
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
421 7
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
508 0
|
存储 算法 Java
Java 中如何比较两个不同大小的 ArrayList
【8月更文挑战第23天】
199 0
网段和网络号的区别
网络号和网段是两个不同的概念。在 IP 地址中,网络号指的是这个 IP 地址所在的网络的标识符,而网段是由网络前缀加上主机地址共同组成的一段地址范围,用来划分一个网络中各个子网的边界。
1054 0
|
Shell Linux
高级用法查询指定进程使用到的环境变量
查询指定进程使用到的环境变量
|
负载均衡 容灾 安全
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
460 2
|
网络协议 Linux
关于xenomai3 RTnet的一点记录
Xenomai3的RTnet协议栈支持TCP和UDP,但不包括IGMP,且ARP支持有限,可能导致延迟或错误。服务端仅允许单个客户端连接。启用`CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP`时,RTnet与rtproxy MAC相同,否则rtproxy不支持ARP。TCP/IP的实时性不足,但Xenomai4的EVL核聚焦二层实时网络。更多详情见链接。
301 0