引言:相信每一个自学编程的人,入门之路都经历了许多坎坷。不过咱们身边藏着不少“良师”,多以利用老是可以带来惊喜。善用“搜索”就是其中一位。
本文选自《一路编程》,如何经过搜索解决自学编程中遇到的问题。javascript
假如你在作一个 JavaScript项目,其中你获得了一个字符串格式的日期(好比, ’2014-10-08’),你想要计算下一天的日期是什么。咱们能够用 parseInt将字符串转换成文字,因此你就用了这个函数。java
function nextDay(str) { var num = parseInt(str); return num + 1; } var date = '2014-10-08'; var dateParts = date.split('-'); alert(nextDay(dateParts[1]));
一切顺利。而后有一天你意识到你的程序产生了一些很奇怪的结果,但只是在老版本 IE浏览器才出现:你的程序认为 ’2014-10-08’的下一天是’2014-10-01’,而不是 ’2014-10-09’。你设置了一些断点并单步调试代码,你会发现 parseInt看起来坏了:当参数是 ’08’时,在大部分浏览器中你会获得 8,但在 IE中你会获得 0。你发现了这个问题,但你不知道如何修复它。如今你要怎么办呢?随着你不断地编程,你会不断地遇到相似的场景。比困境更加让人沮丧的是不知道如何脱离困境。程序员
parseInt解释
为何老版本 IE的 parseInt会作如此奇怪的事情呢?缘由是parseInt也对十进制以外的数字有效(好比二进制、八进制,以及十六进制)。若是你不告诉parseInt你在使用什么进制,parseInt就用它认为昀合理的进制来解析数字,而’08’看起来像是个8进制数。新的浏览器倾向于默认使用 10进制,即便字符串以 0开头,但老版本 IE仍然认为’08’是个 8进制。无论怎样,你应该老是在使用parseInt时指定进制:parseInt(’08’, 10);(以 10为基,或者十进制)会在全部浏览器中返回 8。在 Google时代,每一个人都是搜索专家。不到几秒钟,你就能够找到各类信息,好比你正在看的电影女演员的八卦信息。由于互联网之前和如今都是由程序员搭建的,互联网上关于编程的信息格外的多。当你遇到像前面parseInt这样的问题时,你确定会找到答案,只要你知道在哪里找以及怎么找。正则表达式
若是你不知道要搜索什么,你就不可能找到结果。在第一次我要用转义字符时就遇到了这个问题。我不知道有种叫作转义字符的东西。我所知道的就是撇号在破坏个人字符串。在 parseInt例子中,你可能并不知道哪里出问题了,那么你要如何搜索一个解决方案呢?关键在于找到正确的搜索关键字。若是你在找一些针对某个编程语言的东西,就在搜索中包含这个编程语言的名字。而后想象其余遇到一样问题的人会如何描述这个问题。例如,在搜索 parseInt问题的结果时,一个好的查询多是“ javascript parseInt returns 0”。当我运行这个搜索时,第一条记录就返回了我要找的答案。
若是你不肯定要搜索什么,Google的搜索建议能够帮助你。在你输入查询的开始部分时,提示能够帮助引导你找到能够搜到昀佳结果的查询关键字。这些建议意味着其余人搜索过这些关键字而且获得了昀佳结果,因此你也许能成功。下图展现了在搜索 parseInt解决方案时,一些有用的(以及一些不那么有用的)建议。express
你要找的资源依赖于你处于学习的哪个级别。好比,若是你在考虑学习写 Python程序,你想要找些关于用 Python的好处的介绍性信息。在这样的例子中,你会想要用相似“ why use Python”(为何使用 Python)和“Python features”(Python特性)这样的搜索关键字。在你决定 Python适合你以后,你会想要学习 Python基础。这时,你要搜索一些相似 “Python tutorial”(Python教程)这样的东西。在你用 Python工做一段时间后,你也许会遇到一个问题,须要使用正则表达式。你已经知道什么是正则表达式,以及在何时要使用它;你只是须要知道如何在 Python中使用它。那你可能就会搜索“Python regular expression”(Python正则表达式)或者“ Python regular expression documentation”(Python正则表达式文档),找到关于 Python中正则表达式如何工做的文档说明。如今假设文档抽象,难以理解;你能够搜索“ Python regular expression tutorial”(Python正则表达式教程)或者“ Python regular expression example”(Python正则表达式示例),找到一些比较容易消化理解的 Python正则表达式信息。这些例子要说明的就是,若是你在搜索关键字中指定你处于哪一个级别,你就更容易找到须要的信息。编程
错误可能让人特别困扰,由于你的代码不工做,同时错误信息看起来又特别模糊。不过错误信息有一个好处:错误信息中的文字基本上老是不变的。这就意味着,其余人也见过相同错误信息,而且极可能已经找到了解决方案。当你遇到一个不理解的错误信息,复制粘贴整个信息到谷歌,通常你都会找到问题的答案。浏览器
在一开始,你也许并不知道本身到底要搜索什么。你可能不彻底理解要解决的问题,或者甚至不知道你须要学多少东西才能解决它。仅仅由于你不彻底肯定你要找什么,并不意味着你不能搜索它。以终为始,追本溯源。首先,搜索你的昀终目标,在你搜索结果的过程当中,留意不熟悉的字和短语;而后,搜索全部这些看起来相关的关键字,再次记录结果中全部不熟悉的字和短语。
当你到达一个点,可以理解几乎全部搜索结果中的东西时,就能够开始学习那些你不理解的东西,直到你又到达一个点,这时你了解的知识足够搭建你原本要搭建的东西。这个过程会帮助你在达到目标的过程当中学到不少很棒的知识,或者,至少帮你意识到你的目标也许须要比预期更多的工做和学习才能达成。
这种追本溯源式的搜索引导我学习了 Web编程。我以前提到过给个人第一个网站实现“自动补全”功能。那时我并不知道那是自动补全,因此我搜索了一些相似 “google search suggestion”的内容,这让我发现了关键字“autocomplete”。我读了一些关于 autocomplete的文章,确保那就是我要找的东西,而且发现了关键字 AJAX。我了解到 AJAX就是实现基于用户输入的文字展示搜索推荐的技术。我作了些 AJAX调研,发现你必须写 JavaScript才能使用 AJAX。因此我开始学习 JavaScript,直到我学了足够的知识,可使用 AJAX,我就能够搭建自动补全系统了。在这个过程当中,我学到了不少 HTTP、Web服务器,以及数据结构的知识。我相信用追本溯源的方式解决编程问题会有给你很大的回报。服务器
不幸的是,互联网上不是什么东西质量都很高。编程信息和其余内容都是如此。当心那些质量不高的网站和书。由于相信网站上那些过期、写得很差的信息,我学到不少错误指导和坏习惯。不幸的是,在可以区分高低质量资源以前,你也许得吃几回亏。若是你访问的网站有一大堆广告,特别是它们跟编程基本不要紧或者一点关系都没有,那你就要当心了。当心那些尝试把各类话题都囊括进来的网站(好比, About.com包括了报税、园艺、编程,以及发型设计)。当你见到那种说你要学的东西很简单的声明,也要当心,若是太简单了,你极可能学到的是错误方式。大部分编程语言、库和框架都有网站,包含完整的、高质量的文档。这些网站通常包含完整的入门信息、初学指导、教程,以及参考材料。从这些网站上找到的信息一般都是高质量并且正确的。数据结构
尽管你要当心从一个非官方网站上得来的信息,你仍是能够在博客上找到一些有价值的信息。专业程序员喜欢把他们解决过的问题写出来,一般以博客的方式发表。文档和教程很棒,但没有什么能够跟真实的人描述一个真实世界的问题及其解法相提并论。不过在你相信这个信息以前,仍是要调研下做者。看看他们的 LinkedIn简历、StackOverflow档案、GitHub档案,以及任何其余你能找到的资源。若是他们看起来明白他们在说什么,你就找到了一个很好的信息源。这类博客就像编程导师;他们给你如何更好编程的免费建议。记住,若是你接收他们的建议,要在文档中提一下那篇博客。框架