新手小白如何像程序员一样思考——处理问题的经验

如何你对编程感兴趣,你可能见过这句话:
“Everyone in this country should learn to program a computer, because it teaches you to think.”?—?Steve Jobs
你可能还想知道,像程序员一样思考究竟意味着什么?怎么才能做到?
从本质上讲,这是一种更有效的处理问题的方法。
在这篇文章中,我的目标是用这种方式教你。
最后,你就会知道怎么才能更好的处理问题。
为什么这很重要?
我们每天都有遇到很多问题,无论大的小的。我们解决这些问题的方式有时候都是随机的。
除非你有个系统,否则用“随机的方式”可能就是你“处理”问题的方法(下面我开始学习编程写代码时候做做的事情):
1、试着处理方案
2、假如不行,再试一次
3、假如没有效果,重复第二步知道你运气好
这样的方法,在你运气不好的时候,就傻了。总之这种方法时候处理问题的最糟糕的方法!也是非常白费时间的。
最好的方法是:
a、有一个框架
b、练习它
几乎所有的雇主都把处理问题的能力放在首位!
处理问题的能力已经是雇主们寻觅程序员、测试工程师、系统设计师等最看重的一个方面。
计算思维或者分解大型复杂问题的能力,与工作所需要的基本技术实力一样有价值?—?by Hacker Rank (2018 Developer Skills Report)
一个框架
为了找到正确的框架,我遵循了Tim Ferriss 关于学习的书《the 4-Hour Chef》中的建议, 《The 4-Hour Chef》
这让我采访了两个让我印象深刻的人:
C. Jordan Ball (ranked 1st or 2nd out of 65,000+ users on Coderbyte, and V. Anton Spraul (author of the book “Think Like a Programmer: An Introduction to Creative Problem Solving”.
我问了他们同样的问题,你猜怎样着?他们的答复竟然非常的类似!
接下来,你很快就能认识他们了~~
当然,其实这也并不意味着它们每件事情都是以同样的方式进行,每个人都是不同的,你也会是不同的,但假如你从我们都认同的好的准则开始,你也会走的更远更快。
我看到新程序员犯的最大错误是专注于学习语法,而不是学习如何处理问题。by – V. Anton Spraul (http://vantonspraul.com/)
那么,当你遇到新的问题时,你应该怎样做呢?
步骤如下:
1、了解
非常确切的知道自己被问的是什么问题。大多数难题之所以难,是由于你不了解它们,所以这个是第一步。
如何知道什么时候你了解了一个问题呢?——当你能用简单的、自己的语言解释它的时候。
你可能会记得,当你被困在一个问题上,一旦开始解释它,你就立刻看到逻辑上的漏洞,而且漏洞很可能也是你以前没有看到的。
大多数程序员都知道这种感觉吧!
这就是为什么你应该把你的问题写下来,画个图,或者者告诉别人。
“If you can’t explain something in simple terms, you don’t understand it.”? 假如你不能用简单的语言来解释某件事,你就无法了解它 —?Richard Feynman
2、计划
不要在没有计划的情况下,一头扎进处理问题的过程中(并且希望你能混过去),计划你的处理方案吧!
假如你不能写下计划确切的步骤,什么也都不帮不了你。
在编程中,这意味着不要立即开始进行黑客攻击。给你的大脑肯定的时间来分析问题和解决信息。
为了得到一个好计划,答复这个问题: 给定输入 X,返回输入Y所需要的步骤什么? 程序员的世界里面,有一个伟大的工具 来帮助他们实现这个,那就是注释!
3、拆分
这是最重要的一步
不要试图一次就处理一个大问题,不然你可能会哭的。
相反,当你把这个问题进行拆分成一个一个子问题,这些子问题就更加容易处理了。
而后,一一处理每个子问题,从最简单的开始。最简单意味着,你知道答案(或者者更加接近那个答案)。
另外最简单的方法意味着子问题的处理并不依赖与其余问题的处理。
一旦你处理了每个子问题,再把这些点连接起来
连接所有“子处理方案” ,将为你提供的原始问题的处理方法!那么恭喜你,你做到了!
这种技巧呢,是处理所有问题的基石,请记住它(建议你重新再读一遍这个步骤)
假如我能交给每一个初学者一种处理问题的技能,那就是“减少问题这个技能” ,例如:假设你是一个新程序员,你被要求编写一个程序,读取10个数字,而后算出哪个数字是第三高的,对于一个全新的程序员来说,这可能是一项艰巨的任务,虽然它只要要基本的编程语法
假如你陷入困境,你就应该把问题简化。而不是专注在第三个高的数字上。如何在一个整体中先找到最高的那个数呢?还是太难了?那从三个数字中找到最大的那个呢? 还是太难? 那假如是寻觅两个较大的那个呢?
将问题简化到你知道如何处理问题,并编写处理方案的程度。而后略微开展问题,重新处理方案使其匹配,并继续进行,知道你回到你最开始的地方。—?V. Anton Spraul
4、卡住了呢?
现在,你可能正坐在那里想,这几个步骤看起来还不错嘛,但假如我卡住了,设置不能处理子问题该怎样办?
首先,深呼吸。由于这个很正常!
别担心,朋友,每个人都会这样子!
不同之处在于,最好的程序员/问题处理者,对bug/错误更加好奇,而不是恼怒!
事实上,当你遭遇不幸时,有三件事情可以尝试:
调试:逐渐检查你的处理方案,试图找出哪里出错了。即调试程序。
(调试的艺术在于,找出你真正告诉你的程序去做了什么,而不是你以为你告诉它去做什么)
重新评估:后退一步,从另个一角度来看这个问题,有什么可以笼统成更加一般的方法吗?
(有时候,我们会对问题的细节太过沉浸,以至于忽略了再更一般的层面上处理问题的一般准则!)
经典的例子,求一长串连续整数的总和,1+2+3+4+…+ n , 利用一个简单的消元方法即可以很快的识别出这么一个公式:n(n+1)/2 ,从而避免了不得不做的加分。
(另一种重新评估的方式是重新开始。删除所有的内容,用全新的眼光重新开始。你会惊讶到这是多么有效。)
搜索/研究 :你没看错,就是使用Google,不论你有什么问题,可能有人已经处理了。找到那个人/处理方案。事实上,即便你处理了问题,也要这样做!(你可以从别人的处理方案中学到很多)
(注意:不要寻觅处理大问题的方法。只寻觅子问题的处理方案,为什么呢? 由于除非你努力,(哪怕是一点点),否则你什么都学不到,假如你什么都没学到,那你就是在白费时间)
5、实践
不要期望仅仅一个星期就能变的很厉害,假如你想成为一个好的问题的处理者,就应该去处理很多问题!
练习、练习、练习!迟早你会认识到这个问题可以通过很轻松的方式来处理。
那么如何练习呢?其实也有很多选择的!
比方:国家象棋游戏、数学识题、数独、视频游戏、cryptokittiles ,bla bla bla ………
事实上,成功认识的一个普遍模式是他们练习“围观处理问题”的习惯。例如: 彼得.泰尔(Peter Thiel )下棋,埃隆.马斯克 (Elon Musk) 玩电子游戏….
拜伦.里夫斯(Byron Beeves)说,假如你想知道三到五年后商业领导力会是什么样子,那么久看看网络游戏正在发生什么吧
快进到今天 , 埃隆马斯克、雷德.霍夫曼、马克.扎克伯格和其余许多人都表示,游戏是他们称建立公司的基石。——Mary Meeker (2017年互联网趋势报告)
这意味着你应该只玩电子游戏? 也不全是。
但是这个究竟跟电子游戏有什么关系呢? 没错,就是问题处理!
所以,你应该做的是,找到一个练习的出口,可以让你处理很多小问题的东西。(理想情况下,还是你喜欢的东西,那就更好了)
例如,我喜欢编程挑战,每天,我都试图处理至少一个挑战(通常在Coderbyte)https://coderbyte.com/
正如我所说,所有的问题都有类似的模式!
6、结论
现在,你知道“像程序员一样思考” 是什么意思了。
你也知道处理问题是一种难以置信的元技能。
假如这还不够,你一定也知道了如何练习处理问题的技巧。
你看,这是不是看起很酷!
最后,祝你遇到很多问题哈哈。
你没看错,至少现在你知道怎样处理了,同时,你将理解到,每一种处理方案都会使你得到改进!
“Just when you think you’ve successfully navigated one obstacle, another emerges. But that’s what keeps life interesting. 就在你认为已经成功跨域了一个障碍时候,另一个障碍有出现了,但这正是让生活变得有趣的地方。
Life is a process of breaking through these impediments?—?a series of fortified lines that we must break through. 生活是一个突破这些障碍的过程——一系列我们必需突破的防线。
Each time, you’ll learn something. 每次,你都会学会到少量东西。
Each time, you’ll develop strength, wisdom, and perspective. 每一次,你都将发展你的张力、智慧、和洞察力
Each time, a little more of the competition falls away. Until all that is left is you: the best version of you.”?—?Ryan Holiday 每次,更多的竞争就会消失。直到你成为最好的自己。——瑞安.霍利迪(障碍就是路)
现在,去处理少量问题吧!
为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,帮助大家在成为前台工程师,乃至全栈工程师的路上披荆斩棘。在这里给大家推荐一个前台全栈学习扣qun:784783012
当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。
但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终白费大量时间,所以有效资源还是很有必要的。
学习前台,我们是认真的
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 新手小白如何像程序员一样思考——处理问题的经验