面向CV编程:COPY了别人文章中的代码,想让代码能像作者一样跑通,应该注意什么呢?怎样才能让代码愉快地跑起来呢
互联网发展到今天,基本是应有尽有,五花八门,只有你想不到,毕竟林子大了,除了鸟还有其他飞禽走兽。现在都流行面向互联网编程,或者准确点说是面向百度Goggle编程,CV大法作为一门正派武功,显然人人都得到了真传。这事说来话长,估计得从混沌初开,盘古开天地说起,所以这里省略掉…
一千个读者,一千个哈姆雷特,写代码也是如此,不同人,理解不同,逻辑不同,同一道题,代码各有千秋,所以出现的问题也是千奇百怪;预期结果就一个,解法却千千万。正如列夫托尔斯泰的安娜卡列尼娜中所说:幸福的家庭千遍一律,不幸的家庭各有各的不幸,但是主要不离题万里,错误基本能在一个常见的范围。
有人写代码是为了生计,有的人写代码仅仅是自己的兴趣使然。应该大多人都是第一种情况,我也一样,到了大学才拥有自己的第一台电脑,那时候智能手机刚出现,再往前倒推几年,手机都是个稀罕物,没有条件所以跟兴趣不沾边,唯一沾点边的是以前我喜欢刷竞赛题,锻炼逻辑,对学习算法有点帮助,但是作用有限。甚至有些人对自己所选的专业一无所知,迷迷糊糊就选了,就跟赌博一样,反正押大押小都有机会
圆规正转,然而不管是为了解决温饱问题端稳自己手中的碗也好还是培养兴趣玩玩也罢,不得不承认写代码再有兴趣有时候确实有点枯燥乏味。特别是当你想解决自己遇到的需求,可是毫无头绪,技术不够,俗话说:百度能解决百分之九十以上的问题。于是你网上冲浪一波,突然你刷到一个小姐姐视频,无法自拔,半天过去了,刷腻了,这时候你才想起你还有问题没解决,接着继续翻了无数页,正当快要放弃的时候,定睛一看,大喊了一声(卧槽,你个小可爱,可找着你了,古人诚不欺我,蓦然回首,你就在百度处~百度请打下广告费)正好有一篇文章给出你问题的解决方案,或者给出类似问题的答案,你没有头绪,只想看看运行结果,这是大多数人的基操。(谁拿到一样东西不是用起来,谁还管他怎么生产的)。毕竟榨干脑汁,翻了半天才抓住的最后一根救命稻草,赶紧复制到自己的代码里测试一番,先看看结果是否符合自己的预期,是否和作者说的一样,一切准备就绪,可是当你按下IDE的run键之后,结果翻车了。控制台一片飘红(此时你可能在想:要是股票能飙这么红就好了),全是报错,瞬间石化了,接着感叹了一句:"人间不值得",更有些童鞋骂骂咧咧,摔门而去,就差砸电脑了~但大多在公司上班的同学这个时候都会选择去公司的自由之地(厕所)思考一番,反正都带薪……本来毫无头绪,希望破灭,瞬间兴致全无…经过一番思考后,心慢慢归于平静,给自己打气:杀不死我的只会让我更坚强(瞎编的),既然跑不通,又没有头绪,想着把这一片屎坑填填,打算自己去修改这些bug,让他能跑起来……经过1024次磨难,你终于消灭了所有bug,代码跑了起来,解决了问题,于是你心中又燃起了希望,很有成就感,感觉自己拯救了银河系一般。。。所以写代码再枯燥乏味,但就是喜欢一次又一次被虐一次又一次解决问题的成就感,就是这些成就感让自己在天天写bug修bug的路上坚持下来。——代码虐我千百遍,我对代码如初恋
说了这么废话,一口气说这么多,我这口气真长,给自己加个头衔:说废话小能手。
回归正题,当我们copy别人的代码,想让它尽量按照预期运行起来或者能达到作者的效果,应该怎么做?应该注意什么?
1.运行环境:看看你的环境跟作者的环境是否一致,不同环境对一些代码或者类库支持也是有差别的
2.细节:代码中是否有函数写错,比如漏掉一些字母,单词没拼对。还有就是代码中符号,比如单双引号,括号是否都是英文圆角,因为有些文章作者在写的时候是凭经验手撸的代码,没复制自己已经跑通的代码,也想看看自己是否都消化了,并没有去验证是否能跑通,所以出现一些问题很正常,很多文章对作者来说就是一篇笔记,或者总结,甚至就只是练练手,不会那么严谨。还有一个就是,你复制过来的代码,作者是否提供所用到的数据和文件,代码中的路径是否和你本地实际路径一致,或者你用了自己的数据或者文件,亦或者你修改了文件名,你在代码中是否修改一致.
细节决定成败,比如下面的例子,前天有个同学在群里的问的,他是复制别人的代码,不会看报错,调试了半天,然而仅仅是把engine写成engin少了个e,咋也不知道原作者怎么跑通的
3.所需要的库是否引入:代码所引用的第三方库,你本本地是否安装,路径是否正确
4.版本:这也是最重要,最容易出问题的一个。你看到的文章可能是几年前的,你本地安装了最新版本的插件和库,版本不同,可能有些属性或者方法过时了,有些地方有改动。比如某些函数增减了参数,这时候除非你对相关的类库比较熟悉,不然只能靠文档了,或者可以定位到对应源码查看,毕竟现在编程大家都使用了IDE,自动提示,补全,定位…都很方便,所以这也是使用IDE的好处之一
5.学会Debug:你得学会调试或者测试,还有最基本的就是学会看报错,学会看报错,才能定位错误的地方,而不是就知道打印结果对不对,编译不过都白瞎。报错所涉及的单词不多,如果不知道啥意思,报错一般都是一些术语,用词很规范的,使用翻译软件一下就能出来中文意思。多动手遇得多了就知道怎么回事了,实践是检验真理的唯一标准。
6.关注一些常用开源项目的更新:这也能帮助你快速解决问题,特别是新旧版本冲突
7.学会搜索:掌握搜索技巧,提炼自己的描述,尽量使用术语,表达简洁,才能快速搜索你想要的
8.学会提问:术业有专攻,毕竟每个人的学识是有限,不可能什么都会,不懂就问,不丢脸。而且可以向任何人提问,三人行,必有我师。但是提问之前要先经过自己思考,大概知道问题出在哪里,至少能够了解你所使用这段代码的逻辑和意图,当你思考且搜索之后解决无果,再去去求助别人。尽量言简意赅,把问题描述清楚,且要有条理有逻辑,能用术语尽量用术语,而不是一堆大白话,别人看得一头雾水,或者太啰嗦别人不想看。该画图就画图,该截图就截图。文字加图片别人更容易看懂你的意图,弥补自己表达上的不足。
还有些童鞋根本连字都不想打,遇到问题想都不想,不知道自己在干啥,直接丢一堆代码和报错过来,问怎么回事。大家时间很宝贵的还要替你调试半天,要不半天工资先结下呗。甚至有些直接发一张报错图过来,问怎么回事,请别人玩找茬游戏呗。可是明明报错已经说明了什么问题,他压根不看,看到报错慌得一批
9.学会选择:一道题,有不同的解法,如果你得到不同的答案,根据自己的经验选择最优解,不要在错误的道路上越走越远,浪费时间,当然,你看都看不懂,那只能一个个试了,严肃的人模仿高尚的人的行动,轻浮的人则模仿卑劣的人的行动。
10.还有很多需要慢慢琢磨,共同进步,如果你有其他观点可在评论区补充哦!
借鉴(抄)归借鉴(抄),但终究不是解决问题的办法,而是要从别人的代码中学会解决问题的方法,举一反三,要有所思,有所悟。如果学习只在于模仿,那么我们就不会有科学,也不会有技术——亚里士多德。有思考,有拓展才有进步,解决问题是当下的事,而学会解决问题是一生的事。时间是变化的财富。时钟模仿它,却只有变化而无财富。
最后祝大家所写代码无bug,一次就能跑通,服务永不宕机…希望大家在这条路上越走越好,越走越远
人生万事须自为,跬步江山即寥廓。