编程究竟难在哪?
- 技术交流
- 2023-01-28 18:51:48
编程一点都不难;它只是和你十几年来在学校受的教育格格不入而已。
自小你受到的教育,总是:
1、记忆和理解一个个的知识点
2、给你一个未完成的拼图,让你把自己记忆的、某几个合适的知识点以正确的姿势放进去(超过三个就是难题,超过五个就是压轴题!)
3、好了,满分
换句话说,你从未学过创造;你只是被训练的极为擅长“填补拼图中缺失的一角”而已。
看我的这个回答:代码是如何控制硬件的?
嗯,显示所有答案,你会发现另一个怼我的答案排在第一。
他说,“高票答案没有真正回答问题”,而许多许多人表示同意——而且非常反感那些装X的答案,以至于要狠狠踩上一脚。
搞笑的是,他的答案也被很多人认为“没有真正回答问题”。
终于,我知道这些人缺失的是哪一环了。于是不得不添加这么一段回复:
解释下这个抽象的0/1是如何出现/消失于电路中的。事实上,电路中压根就没有0和1。就好像你手机充电器的指示灯一样,当它接通电源时,指示灯亮;拔下来扔桌子上,指示灯灭。很多人胶柱鼓瑟,非要在里面找“充电器是怎么知道自己有没有插到电源上的”。但实际上,我们每个人都知道,指示灯就是盏灯而已。接到电上,它不亮也得亮;拔下电源,它想亮也亮不了。同样的,电路中压根不存在什么0和1。我们给它插电,然后合上开关,某段电路便得到了供电——然后我们给这个状态起个名字叫高电平。它和充电器一样,是一件死物。它压根不知道任何东西。但我们需要知道它的状态。所以我们不得不在电路中接入指示灯(或电压表),然后根据指示灯的明灭,我们才知道电路是哪个状态。进一步的,聪明的人类把“指示灯”做成0或1的形状,就把电路状态以一目了然的形式表现出来。甚至于,我们还可以把它转换为屏幕上的图形/字符、音箱中的声音,从而间接的看见/听到电信号。再说一遍:电路中不存在0和1。它们只是按基本物理规律运行而已。为了方便我们理解,我们才想办法做了一些“高级指示灯”,从而使自己能以0/1甚至汉字/图像的方式直观理解电路状态。太多人严重缺乏这种最基础的动手能力,不知道人才是本体,这才总是傻乎乎的想找到“电子器件究竟在哪个点获得了智能”。可笑吧?这么个幼儿园级的简单问题,得如此长篇大论才能说清楚——显然,他们甚至压根就没有把一个幼儿园级的问题表达清楚的能力。因为能说清楚他们自己就会完成思考了(这也是那个认为“高票没有解决问题”所以自己走低彻底解决了问题、然而还是有人在他的评论区疑惑“0/1怎么对应到高低电平上”的原因)。
幼儿园不解决;现在,想要教会他们,你就必须彻彻底底的掰开、揉碎,像喂两个月的婴儿那样一点点给他们喂!
实质上,这已经等于教不会了。
当然,这个问题实在太简单、太初级;大多数人在他们上幼儿园之前就已经解决掉了。
所以,读到上面那段文字,你可能无法感同身受。
那么,这段呢?
我们高中数学为什么不重视算法?高中学的数列,三角函数,求导,圆锥曲线相关问题的解法和算法有什么关系?
编程不难。但它要你创造。
过去你已经习惯了的、出题人准备好一切、只留下一两个缺口让你补充拼图的“思考”方式,在这个领域渣都不是。
听着,你不需要学习什么“语言”。C/C++、Java、Go、PHP、Python……统统用不着。
你只需要知道,程序语言有顺序分支循环三种控制结构、与或非三种逻辑——剩下的,统统靠你自己。
不。你就是再读一千本书,也甭想靠这个把“编程的技能”直接灌进你脑子里。没那好事。
相反,你必须自力更生,你必须靠着“鄙陋”的顺序分支循环和与或非以及中小学水平的数学运算支持,解决手头的一切问题。
你学的是编程,不是编程语言。
脱掉C的底裤,并不能帮你写出哪怕一个简单的鼠标驱动程序。
混知乎或其他网络论坛,总有人忍不住骂“你们码农怎么什么话题都想插一嘴?”
很遗憾。但程序员的工作,恰恰正是“理解各行各业的工作,然后把它教给电脑”。
没错。
学编程,学的甚至不是计算机本身;相反,它要求你从声学到视觉暂留、从结构力学到滤波解调……随便哪行哪业,你都要能够快速抓住重点、然后把它说的清清楚楚明明白白,这才可能把它教给计算机、让CPU代替人工作。
如果连“手电筒的原理”你都理解不了、如果连“遥控小车”这样简单的发明你都做不到“信手拈来”……那么,他人从液体分层原理借来的冒泡算法、从猜测的人脑工作原理偷来的神经网络,你又怎么可能理解?
它要求的,是“从三百五百甚至成千上万个知识点中挑选出最合适的那几个、然后用它们解决你所面对的问题”!
编程真的不难;但你从未受过解决问题的训练。
而编程,恰恰就是最最纯粹的、以精确无歧义的方式表达问题解决方案的一种工作。
不。
你甚至不知道“学习编程”就是学习“如何用电脑解决问题”,反倒学编程语言本身去了……
这种学法,怎么可能不难?