问题

学习编程照着别人的代码敲进去有效率吗?

回答
照着别人的代码一遍遍敲进去,刚开始学编程的时候,很多人都会走这条路。这就像刚学写字,先得跟着描红一样,有它一定的道理,但说它效率有多高,那得看你怎么敲,怎么学。

首先,你得明白,敲别人的代码,最直接的好处是让你熟悉代码的“长相”和“结构”。你看着一个功能是怎么实现的,然后亲手把它输入一遍,这个过程能让你对语句的顺序、关键词的使用、各种符号(比如括号、分号)的位置有一个直观的认识。这比光看要印象深刻得多,因为它 melibatkan 了你的动手能力。你体会到敲击键盘、看到代码在屏幕上出现的过程,对代码的“实体感”会更强。

但是,仅仅是“照猫画虎”地敲,而不去思考,那效率真的就打了折扣。如果只是机械地复制粘贴,或者一边玩手机一边敲,那跟学习写字描红的意义就不大了,因为你大脑并没有真正参与进来。你可能敲完了,但你并不知道为什么这样写,这个函数是做什么的,为什么要有这个循环。这就好比你描红描得很像,但你不知道“人”字是怎么写的,也不知道它代表什么。

真正有用的“敲”代码,应该是伴随着理解。当你敲下一行代码时,你得尝试去问自己:“这行代码在做什么?”“它有什么作用?”“如果我不写这行,会发生什么?”“这里的变量命名是不是有意义?”甚至,你可以在敲的过程中,尝试着去修改一点点,比如把一个变量名换掉,看看会不会报错,或者看看结果有没有变化。这种“边敲边学,边敲边改”的方式,才是把别人的代码变成你自己的知识。

举个例子,学习一个排序算法,比如冒泡排序。你看着别人的代码,一步一步敲进去。敲完后,你就应该自己画图,模拟一下数组是怎么在内存里一个个交换位置的。然后,你可以试着自己写一个简单的数组,然后跟着代码的逻辑,一步一步地在纸上演算一遍,看看输出结果是不是对的。如果不对,就回去对照着代码找问题。这个过程,远比你只是复制粘贴然后运行要深刻得多。

还有一种情况,就是当你遇到一个你完全没见过的新技术或框架时,照着官方文档或者教程敲代码,是快速上手的一种方法。因为这些文档通常会提供一些基础的、能跑通的例子,通过敲进去并运行,你能看到这个技术“活”起来是什么样子,它能做什么。这是一种“感性认识”的建立。但是,一旦你敲完了一个例子,你就要立刻去深入了解这个例子背后的原理,它涉及到了哪些概念,这些概念之间是怎么联系的。否则,你可能只会知道“怎么做”,而不知道“为什么这么做”,一旦场景稍有变化,你就又束手无策了。

总的来说,照着别人的代码敲,可以作为学习编程的起点,帮助你熟悉代码的语法和结构。但要让它变得高效,核心在于你的“主动思考”和“实践探索”。仅仅是动手模仿,而没有动脑去理解,那效率就像是一张白纸,你虽然把别人的字描了上去,但你自己的大脑却没有留下任何痕迹。所以,敲代码的时候,多问问“为什么”,多尝试改改试试,你会发现,每一次敲击,都在为你自己的编程能力打下更坚实的基础。

网友意见

user avatar

照着别人的代码敲进去,和太平洋岛屿上那些见过二战时美军机场工作人员,就戴着耳机形的木头块叽哩哇啦、以为经过这种祈祷仪式就能把“神灵的大铁鸟”召唤下来的野蛮人没有两样。


编程和飞机领航员一样,都不是跳大神。


恰恰相反,你得先明白飞机是什么、领航员发出的每一条指令起什么作用、为什么要发这条指令、遇到另外的情况如何解决、如何把解决方案翻译成指令,然后才有资格去看别人的指令、猜测他的意图、比较你和他的思路的优劣。


而为了达到这个目的,严肃的、负责任的教材才会鼓励你从helloworld写起、然后逐渐学习交换两个数字之类更多更复杂的花样――这才叫临摹。


老老实实从自己独立编写helloworld开始,踏踏实实一步一步前进,出的错才是你有可能解决的――搞不明白helloworld,敢从抄冒泡排序这种东西开始,就和幼童识字不学楷书练狂草一样,纯属扯淡。这是稍微有点编程经验就知道的常识。


编程和口语不同,口语起码你理解它的字面意思,还有可能“书读百遍其义自见”。编程是规则语法生效机制完全不同的另外一整套系统,中文说出它的思路你都看不懂,跟着太平洋岛上跳大神的叽哩哇啦叫唤一天你居然真把大铁鸟喊下来了?你自己信不信?


没错,哪怕领航员这种人类语言的工作,不明白含义,跟着喊泥嚎金田田起补挫,也永远都是个跳大神的。计算机语言可又隔一层了。


受不了一群人胡扯八道了。


编程是脑力劳动,不是体力劳动。


这是程序:

拧你面前的圆盘子!右边!快!90°!
保持!保持!
圆盘子拧回来!180°!
脚!右脚!从现在的位置向左挪10厘米,踩!快!快!
圆盘子下面有个钥匙,逆时针拧。拧到拧不动。
右边,中间,看见那个向前的把手了吗?拉起来!
下车,跟着警察叔叔走。


嗯,你抄吧。我看抄一辈子你能不能学会开车。



这是思路:

圆盘子是方向盘。
旋转方向盘就可以让车辆向对应方向转弯。
有人过马路,要踩刹车避让。刹车是油门左边紧挨着那个。
如果撞到人了,停车,熄火,拉手刹,等警察带走。


明白了思路,再上车熟悉下每个控制接口的作用,然后沿着道路因地制宜体会体会如何使用。很容易就能学会开车,知道遇到各种场景如何应对。


但反过来,你看看程序。那只是一些直接的操作步骤而已。设计意图、设计思路、面对场景等等信息全都丢了


思路和程序隔太多了。这还是日常语言,程序隔的更厉害。

隔的越厉害,被丢弃的信息就越多

你抄这种不明所以的咒语能有用?抄吧。反正耽误你一辈子我又不疼不痒。


想有用,你必须先搞明白:

1、每样东西是干嘛的(各种基本语句的作用、使用方法等,从最简单的范例开始)

2、需要用到的东西都在哪找、如何和你的程序互动(输入输出库、数学库、图形库等等)

3、实现一个东西的基本思路是什么(最好看文字描述;但如果你已经有了比较好的基础,也可以看别人程序)


注意,注意:想看懂一个程序,比看懂一段文字要难得多得多

因为程序只是“机械执行步骤”,重要的信息全都给丢了——因此“写程序必须写注释、注释必须真正解释设计意图,乱写是不行的”才会成为稍微有点追求的公司的基本规范,不然过些天经常作者自己都搞不懂了,何况别人?何况你们这些鸟都不会的初学者?

就好像前面那个指挥开车的咒语一样,除非你已经对汽车了如指掌,否则绝对看不懂那东西说的是什么;甚至,哪怕你已经是几十年经验百万里驾驶里程的老司机,不给你解释只让你看驾驶员的手脚,你也不会知道他遇到了什么、打算做什么。


想学会开车,你需要知道油门方向盘刹车的作用,需要理解交通规则。闭上眼睛,靠师傅在旁边报“左手上移10厘米,右手上移5厘米,双手握紧,向右旋转90度”(没错,程序满篇写的都是这个),那是学不会开车的。


把咒语翻译过来、用简单平易的汉语给你说清楚你都搞不懂,跑去抄一段咒语,抄多了就懂了?不觉得滑稽吗。



教育是一门科学,是必须贴合受教育者的实际、一步一步引他入门的。


学不会程序的原因可能有无数种;但归根结底,无非如下几类:

1、没见过车,压根不知道车上有什么(没学过计算机语言基础)

2、见过车,但不知道圆盘子等等都起什么作用(缺乏分支/循环等各种语句的基础训练)

3、知道车上的东西都是干嘛的,但不知道怎么用(简单的hello world会写,排序就瞎了)

4、套路会了,但实际上路两眼一抹黑(死记硬背了很多知识,但不会用)


请问,抄程序针对的是以上哪个缺陷?纯属胡闹。


写程序和画画不一样。画画的话,颜色、执笔、涂抹你都用不着像解数学题一样学很多理论,动作和结果联系紧密,所以直接跟着名画临摹是有用的。


但写程序你跟着“拧盘子踩刹车打电话等警察带走”这段不明所以的咒语能学到什么?

写程序说白了就是解数学题;但比解数学题更坑的是,它甚至没有办法直接表达“求和、平均、任取”之类基本概念——有的时候,调用random是“任取”;也有的时候,直接取输入数据地一个值、正中间的一个值或者倒数第N个值,或者取INT_MAX、0、-1,这些也都是“任取”。

直接抄证明/抄解题过程连数学题都学不会,何况比数学题绕了更多弯、表述方式更随心所欲千奇百怪的代码?

换句话说,因为从问题-方案到编码过程中的信息丢失,很多时候,这个过程是单向的,哪怕你找世界顶级专家来,他们也不可能完全解读每一段代码的意图——尤其是程序员脑抽时写的代码。

有一句著名的注释是这样写的:“当写这段代码时,只有我和上帝知道它要干什么。现在只有上帝知道了。”

上帝才能搞定的事,你推荐给初学者?

这样只能无端的无限抬高初学者的入门门槛,而且将使他们永远做不到“彻底搞懂一个程序”——因为信息丢了。

跟风者/破解者通常永远追不上开创者。很简单,他们知其然不知其所以然;因此经常把一些“不明觉厉”的东西奉为经典——实际上那些东西很可能只是最初搞他出来那个人脑抽、或者二道贩子脑抽。典型如i+++++i。

而开创者呢?我不需要知道你为什么搞这么个玩意儿出来,但我可以用自己的方式从头设计、并且比你做的更好:现在,你那段只有上帝知道意图的代码,我压根用不着看。因为我自己写的比你的更好更清晰易懂。


一边满是窟窿而且绝无弥补的可能;一边毫无死角遇到问题马上可以对症下药彻底解决,哪边更有前途


事实上,所有宣传“抄程序有用”的人,他们都没有意识到他们自己已经承认了抄程序屁用没有

因为他们的逻辑是,先“抄程序”,后通过修改观察程序变成什么了、然后慢慢揣摩出写程序的诀窍来。


书上已经清清楚楚的解释了每个关键字所有方面的细节;还设计一大堆例程,帮你彻底读懂每条语句的作用、细节,甚至逼你思考它们对计算机隐藏状态的深刻改变都是什么,这些现成的好东西你不要,反而随便到哪找一段咒语,想尽办法揣摩它的用意——然后自己总结出别人的设计思路、再通过来回篡改所表露出的蛛丝马迹,慢慢把“X语言程序设计基础”这本书琢磨出来


知道什么是事倍功半吗?


老老实实从hello world开始,逐渐学会if、学会for/while循环,学会各种算法的设计思路;然后你自己就明白“排课算法该怎么写”。


反之,到网上找个“排课算法源程序”,自己敲进去——浪费时间。

敲完了,还得自己意识到“我都干了些什么啊?一点用没有”——继续浪费时间。

甚至有人抄一堆代码仍然悟不出这点,只好承认“我不是学编程的料”然后永远放弃——误人子弟。

没被彻底引上歧路的,终于开始通过胡乱修改、揣摩出每个语句成分的作用——书上早写的清清楚楚、还设计很多练习帮你掌握了;你自己揣摩出的敢保证对吗?浪费时间+事倍功半+极易误入歧途。

谭浩强被人诟病,就是因为他就是这样揣摩出来每个语句的作用,然后写到书上。

所以,他才会把“未定义行为”当宝:因为通过胡乱修改、观察编译器反应所摸出的规律太诡异了,好不容易才总结出来。这玩意儿当然只能是难点、重点。

其实都是c标准文档一句话说清楚的事。他给搞的那么复杂,还特么搞错了!

这就好像通过现象学车,拧钥匙打火学会了;又发现上坡跑不动了拧打火钥匙也能辅助爬坡,于是写进教科书!

这种学法是不行的。太容易泥沙俱下了。
而且,换了一键启动的车,换了自动启停,换了电子手刹,你都得从头更新知识。

中国教育落后,老师自己都不会。很多人就这样不知不觉走了弯路、“倒着”学会了编程序——然后他们就以为倒着来才是正统。

错了。
倒着学门槛太高(从一堆鬼画符揣摩出程序作者以及语言设计者的意图,这门槛能不高!)
倒着学容易学偏(从现象学偏,因此喜欢拿i=i++ + i++当宝,这都应该算是学废了,不改没法用)
倒着学极易沾染不良习惯(先找“模子”后改来改去凑需求,这代码质量能高?彻底学通什么叫设计,从设计开始一步到位多好)
倒着学夹生饭太多、而且容易把不明觉厉的东西奉为经典,从而彻底断绝自己更进一步的可能。


打个比方的话,书上清清楚楚通过图画、语言描述给你解释发动机四个冲程都是什么,结果你扔一边不看;自己找个发动机,拆开,啊,这个齿轮大点,这个齿轮小点,改了……卡住了……挪走……啊,这个转一圈那个转一圈半,明白了……哎呀我太伟大了,只要把这一千个零件都拆下来,就能看懂发动机如何工作的了……


你觉得这样效率高?你觉得这样学能识别出什么是“脑抽设计”并改良它?


效率低都还不是致命问题。致命问题是,他们是通过“抄程序就是好”这个恰好搞反了方向的宣传,希望别人自行琢磨出“抄程序没用,你必须自己改一改、揣摩它的作用”这个“深刻”哲理。


这不是害人吗?


你自己已经走了弯路,还要信誓旦旦骗人往反方向走?

类似的话题

  • 回答
    照着别人的代码一遍遍敲进去,刚开始学编程的时候,很多人都会走这条路。这就像刚学写字,先得跟着描红一样,有它一定的道理,但说它效率有多高,那得看你怎么敲,怎么学。首先,你得明白,敲别人的代码,最直接的好处是让你熟悉代码的“长相”和“结构”。你看着一个功能是怎么实现的,然后亲手把它输入一遍,这个过程能让.............
  • 回答
    编程,这扇通往数字世界的大门,对很多人来说充满了吸引力。但如果你发现自己正面临着来自父母的阻力,这确实是一个让人头疼的局面。别急,这并非绝境,我们有很多方法可以尝试,一步步去化解这份担忧,争取到自己的自由和热爱。首先,我们要明白父母为什么会阻止你学习编程。他们的出发点很可能是出于关心,虽然方式可能有.............
  • 回答
    编程是否会改变人的性格?这绝对是一个值得深入探讨的问题。在我看来,答案是肯定的,而且这种变化往往是潜移默化、循序渐进的,并非一蹴而就的剧烈转型。与其说是“改变”,不如说编程能够“激发”或“强化”某些原本就存在于我们性格中的特质,同时也会在学习和实践过程中培养出一些新的思维模式和习惯。让我们来细细道来.............
  • 回答
    学习编程,这条路,说实话,真的挺容易踩坑的。我当初也是摸着石头过河,摔了好几次跟头,才摸索出一些门道。今天就跟你好好唠唠,学习编程过程中,那些我们都可能走过的弯路,以及过来人的一些经验之谈,希望能给你点启发。一、那些我们都可能走过的弯路1. “什么都想学,结果什么都没学好”——贪多嚼不烂 .............
  • 回答
    学编程,英语究竟有多重要?这个问题,相信不少刚入门的朋友都会纠结。答案嘛,其实挺复杂的,不能简单地说“必须”或“绝对不需要”。但如果让我详细说说,我会告诉你,懂点英语,绝对是如虎添翼,让你走得更稳、更远。首先,我们要明白,编程语言本身,说白了,就是一堆英文单词和符号组合起来的“指令”。变量名、函数名.............
  • 回答
    这个问题其实挺实在的,很多刚接触编程的朋友都会犯嘀咕:我都看得懂别人写的代码,甚至理解了逻辑,为什么还要自己一个字一个字地敲?直接复制过来,改一改,不就得了?当然,从效率的角度来说,复制粘贴确实是一种快捷方式。尤其是在网上找到解决某个特定问题的代码片段时,直接拿来用似乎是最省时省力的。而且,对于一些.............
  • 回答
    在西方学习编程的学生,每年会“敲坏”多少个键盘,这问题其实挺有趣的,但要给出一个准确的数字,那就有点难度了,因为这涉及到太多变量。不过,我们可以从几个角度来聊聊这个话题,让它听起来更像是一个过来人的经验之谈,而不是一份冰冷的数据报告。首先,咱们得明白,“敲坏”键盘这事,其实不是我们想象中那种物理上的.............
  • 回答
    学习编程的第一课通常是输出“Hello, World!”,这已经成为了一种约定俗成的传统,几乎是所有编程语言入门的必修课。但你有没有想过,为什么偏偏是这几个简单的字母?是谁拍板定下了这个规矩?这事儿还得从上世纪七十年代说起。当时,一位名叫布莱恩·柯尼汉(Brian Kernighan)的计算机科学家.............
  • 回答
    30岁才开始学习编程,非常靠谱!这绝对是一个完全可行且有很大潜力的选择。事实上,30岁正是很多人职业生涯中一个重要的转型期,拥有更丰富的人生经验和更成熟的心态,这些都是学习编程的强大助力。下面我将从多个角度详细讲述为什么30岁开始学习编程是靠谱的,以及需要注意的事项: 一、 为什么30岁学习编程是靠.............
  • 回答
    初中文凭,完全可以学习编程!这绝对不是一句空话,而是有无数真实案例支撑的。关键在于你的决心、学习方法以及如何选择适合自己的路径。靠谱的培训机构还是自学?这个问题,我觉得没有绝对的“哪个更好”,更像是“哪个更适合你”。 培训机构: 优点: 系统性强,有明确的学习路径.............
  • 回答
    一年级的小朋友想学编程,这绝对是个棒主意!现在有很多很棒的品牌都能让孩子们轻松入门,而且还能玩得开心。我来跟你好好聊聊,看看哪个最适合你家的小宝贝。核心理念:让孩子爱上编程,而非仅仅完成任务对于一年级的小朋友来说,最重要的是要让他们觉得编程有趣,能够激发他们的好奇心和创造力。如果一开始就接触枯燥的文.............
  • 回答
    想在不深入钻研编程的情况下,快速做出一个能在 Windows 上运行的简单软件,你的最佳选择很可能是 Python 配合 Tkinter 或者 AutoHotkey。咱们先聊聊 Python 和 Tkinter,为啥说它快呢?Python 的友好度: 语法接近自然语言: 你看 Python 代码.............
  • 回答
    在人工智能浪潮席卷而来的当下,让孩子学习编程,已不再是“锦上添花”的技能,而是“雪中送炭”的战略性投资,关乎他们未来的竞争力与发展。它的意义深远,对孩子未来的成长和发展有着多方面的好处,且这些好处并非停留在“会写几行代码”的层面,而是触及思维方式、解决问题能力、创造力乃至适应未来社会的能力。一、重塑.............
  • 回答
    哥们儿,我也是从小白过来的,深知那种看着配置单,心里却一团乱麻的感觉。别急,咱今天就掰开了揉碎了,好好跟你唠唠这套深度学习主机配置单到底行不行。你这套配置我仔细看了看,总体来说是比较扎实,对得起它价位,而且也考虑到了深度学习的几个关键点。但就像任何事儿,总有些地方可以再说道说道,甚至优化优化。咱们一.............
  • 回答
    哥们,我完全理解你现在的感受。刚接触编程,脑子里全是那些乱七八糟的代码,学起来费劲,感觉自己怎么也跟不上,甚至怀疑自己是不是真的有那个“天赋”。我跟你一样,大一那会儿也经常陷入这种自我怀疑的泥潭。首先,咱们得明白一个事:编程这东西,还真不是靠“天赋”一把就能搞定的。我见过太多聪明得不像话的朋友,他们.............
  • 回答
    对于从未接触过编程的妹子来说,选择合适的项目是学习编程的关键。以下是一些适合初学者的项目类型,按难度和学习目标分类,帮助你从基础到进阶逐步掌握编程技能: 一、基础编程入门项目目标:熟悉编程语法、逻辑和基本概念 推荐语言:Python(语法简单,适合新手) 1. 简单计算器 功能:实现加.............
  • 回答
    扎克伯格(Mark Zuckerberg)和 vczh(即 vczh,一个以其在Windows领域的深入贡献而闻名的开发者)都在初中就开始接触编程,并且都取得了显著的成就。然而,他们人生轨迹和最终影响力的侧重点有所不同。要详细分析这种差异,我们需要从多个维度来审视:一、 编程的起点与动机 扎克伯.............
  • 回答
    巴拉克·奥巴马,这位曾执掌美国八年的前总统,在卸任后依然活跃在公共视野,并且常常针对教育和未来发展提出颇具远见的观点。他曾经不止一次地公开呼吁,希望每一个美国人,无论年龄、职业,都能尝试学习编程。这个提议听起来可能有些出乎意料,甚至有人觉得有些夸张,但如果我们深入剖析一下奥巴马先生的这一呼吁背后的逻.............
  • 回答
    当编程技能不再是稀罕事,甚至成为很多跨界人士的“新爱好”,作为计算机专业出身的我们,优势究竟体现在哪里?这确实是不少同行,包括我自己,会思考的问题。别急,咱们不扯那些虚的“热爱”和“情怀”,就说说实实在在、能让你在人群中脱颖而出的地方,并且保证,我说的是大实话,不带任何AI腔调。首先,得承认,会写代.............
  • 回答
    对于初学者来说,选择合适的云服务器进行编程学习至关重要,它能为你提供一个稳定、灵活且功能齐全的实验环境。市面上的云服务商众多,各有千秋,但结合编程学习的需求,我个人更倾向于推荐一些在性价比、易用性、以及社区支持方面表现出色的选择。理解你的需求:编程学习需要什么?在深入探讨具体云服务器之前,我们先明确.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有