安阳it吧 关注:4贴子:18
  • 0回复贴,共1

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

只看楼主收藏回复

作者:XNan
链接:OXNan: 学习编程照着别人的代码敲进去有效率吗...
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
初学编程的核心问题据我的经验,初学编程所遇到的问题无非就是以下3种:思路混乱(问题领域)不清楚每行代码的作用(静态思考)不知道每行代码当前所处的状态(动态思考)思路混乱,这个问题在很多的程序员中也会出现,它属于领域问题,在于对需求理解不够,对问题的分析不到位所导致的。而对于初学者,则会容易出现另一个问题:把问题领域等同于编程问题。也就是从一开始就以 “我要写代码” 的方式去思考,结果越想越混乱。为什么呢?因为初学编程首先对语法就不熟悉,更别提语言里面的各种概念了。所以,以 “写代码” 的方式直接思考问题领域中的问题,本身就会让你的思维更加混乱。例如,我现在叫你写一个判断9102年是不是闰年的程序,如果你的脑子里面飞出来一堆 “应该怎么写?”、“是用if吗?”、“还是要用到for?”、“if语句怎么写来着?”、“糟糕,我忘了main函数的写法了”;那么你应该先去买杯奶茶冷静一下(顺便给我带一杯)。接下来,你应该准备纸笔,边喝奶茶边想 “闰年是什么意思?”、“我应该先判断它能不能被4整除(在纸上写下 判断9102/4是整数)”、”噢,这样还不行,我还应该判断它是否同时满足不能被100整除(在纸上写下 判断9102/100不是整数)“、“哎呀,还有还有,如果刚好是400的倍数,那么虽然可以被100整除,但是也是闰年(在纸上写下 判断9102/400是整数)”。你看,这就是所谓的问题领域,跟编程其实一毛钱关系都没有,大家都是这样思考问题的,而编程,只是把问题转化为语句罢了(其实你在纸上写下这些的时候,也是把问题转化为中文而已,只是因为你对中文的表达形式太熟悉了,所以能直接写出来)。不清楚每行代码的作用,你已经知道什么是闰年了,也知道靠你自己的脑子里的数学运算知识,就可以知道9102年是不是闰年了。但是,程序应该如何表达你的思维过程呢?这个就是你需要学习的所谓的“编程语言”,也就是它的语法以及语句所表达的含义。不知道每行代码当前所处的状态,这点对于初学者来说是个非常头疼的问题,因为它需要你去感知代码在CPU上跑的时候,究竟是怎么样的,也就是你的大脑在模拟CPU,这也是程序员的标准日常。而对于初学者来说,最难越过的就是这道坎。这相当于什么呢?比如在学音乐的时候,会不断地听音、模唱、脑补这个音在五线谱上的位置,以及在你所学乐器中如何表现出来,直到你能够看到五线谱上的音符的时候,脑中就自然地响起那个音,这在音乐中被称为内心听觉(敲黑板)。或者说你对绘画比较熟悉?那么在学习绘画的时候,学习勾线,然后看看别人的画是怎么布局的、怎么勾线的,锻炼自己在画的时候就能在脑中清晰地脑补出想要画的事物。你看,其实每个学科都是同样的,需要你培养对这个学科的感知能力。编程也不例外,它要求你在看别人的代码或者自己写代码的时候,你的脑中应该有清晰的“图像”,并且这个图像是动态的,随着你关注问题的不同部分,这个图像就会不同。OK。既然知道了初学会面临什么样的问题,那么就等于有了目标。不过,在谈如何解决这些困难之前,我们先来学点最简单的“哲学”,当然,不是专业课上的哲学,而是经过简化的编程哲学。PS:另外提几句,如果题主是想以编程为主业或者对编程特别感兴趣,那么建议你从C、Java/Kotlin、Golang等(半)编译型语言,理由很简单,这些语言会迫使你去认知你写的代码到CPU执行会经过什么步骤,让你对计算机基础概念的理解有极大的帮助。我的建议当然是直接学C,虽然入门之后的指针、垃圾回收等概念有些困难,但是你会了解到非常多计算机原理的知识,对你未来学习其他语言,以及精进的帮助是非常大的。如果你只是想学个编程来辅助你的工作,比如,你是搞金融的、搞地质勘测的、社交/交易数据分析的,那么学个Python、JavaScript就非常合适,没必要去碰真·程序员的那些“烧脑”的东西。(最近不知道哪来的风气,说C、Java不适合入门,要学Python之类的脚本语言,并且一律全是学爬虫,看得我一脸懵逼。我只能说,如果你先学了这些语言,倒也问题不大,只是你可能很难再去认真学计算机原理了;为什么?因为你会选这些所谓的“简单”的语言的时候,就已经表明你并没有想要去接触计算机原理了,而当你学会之后,你就会有一种“我都已经学会编程了”,我还学那些干嘛?当然,一切还是看你自己。)1、抽象&认知#18103100404#


1楼2020-03-26 18:22回复