引言:相信每个自学编程的人,入门之路都经历了许多坎坷。不过我们身边藏着很多“良师”,多以利用总是能够带来惊喜。善用“搜索”就是其中一位。 
本文选自《一路编程》,如何通过搜索解决自学编程中遇到的问题。

  假如你在做一个 JavaScript项目,其中你得到了一个字符串格式的日期(比如, ’2014-10-08’),你想要计算下一天的日期是什么。我们可以用 parseInt将字符串转换成文字,所以你就用了这个函数。

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解决方案时,一些有用的(以及一些不那么有用的)建议。

升级

  你要找的资源依赖于你处于学习的哪一个级别。比如,如果你在考虑学习写 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档案,以及任何其他你能找到的资源。如果他们看起来明白他们在说什么,你就找到了一个很好的信息源。这类博客就像编程导师;他们给你如何更好编程的免费建议。记住,如果你接收他们的建议,要在文档中提一下那篇博客。

  本文选自《一路编程》,点此链接可在博文视点官网查看。 
                       

巧用“搜索”解决自学编程遇到的难题相关推荐

  1. 如何解决自学编程的犯困问题

    最近压力较大,虽然deadline日益临近,然而该犯困还是犯困,无奈之下查找了原因以及解决之道. 之前一直以为是自己不适合编程,有兴趣的人会越玩越兴奋,所以很自卑,在网上小搜了下,果真很多和自己类似的 ...

  2. 电脑硬件知识学习_学习计算机基础必读的4本经典入门书籍,自学编程必备书单!...

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你看好文,读好书! 文/黄小斜 转载请注明出处 新手学习计算机并非易事,作为一个自学编程的过来人,深知打好计 ...

  3. 自学编程难吗?如何学?

    推荐给那些喜欢编程的,迷失学习方向的伙伴! 自学编程2年来,加过n多群,泡过n多论坛,接触过心怀激情的编程新人,遇到过沉着冷静的技术大牛--编程,吸引了一批又一批的热血青年,或许是为了理想,或许是心中 ...

  4. 自学python怎么找工作-我是如何在自学编程9个月后找到工作的

    昨天在我在国外网站 reddit 上看到一篇文章,作者分享了他 自学编程 9 个月后找到工作 的经历.文章不到一天就得到3千多赞,2百条回复.我看了下内容,非常中肯,其中有不少建议也是我在编程教室屡次 ...

  5. 我是如何在自学编程9个月后找到工作的 1

    昨天在我在国外网站 reddit 上看到一篇文章,作者分享了他自学编程 9 个月后找到工作的经历.文章不到一天就得到3千多赞,2百条回复.我看了下内容,非常中肯,其中有不少建议也是我在编程教室屡次提过 ...

  6. 业余时间零基础自学编程,9 个月后我成为一名软件工程师

    在这篇文章里,我想分享自己如何在 9 个月内一边做着全职工作,一边自学编程,从一名小白成长为年薪六位数软件工程师. 每当阅读别人的成功故事时,我的第一反应都是查看作者的背景,希望他们的经历和故事也发生 ...

  7. 零基础如何自学编程?| 程序员有话说

    作者 | 阿文 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) [程序人生 编者按]很多想转行的朋友会问:零基础我该如何自学编程?作者作为一名文科生,零基础转行为网易工程师,在本文 ...

  8. 自学编程,我该如何寻找自学资源?(含视频)

    今天分享的将是非常干的干货! 我们一直在讲自学编程,那么自学编程有什么不一样的地方吗?在我看来,那就是如果你是选择自学的话,那么就意味着很多事情你得一个人去解决. 自己去找资料,自己去安装相应的软件, ...

  9. 原创 | 自学编程,我该如何寻找自学资源?

    自学编程,如何寻找资源? 没有目录,全是干货 今天分享的将是非常干的干货! 我们一直在讲自学编程,那么自学编程有什么不一样的地方吗?在我看来,那就是如果你是选择自学的话,那么就意味着很多事情你得一个人 ...

  10. 普通人,自学编程,5个必备步骤

    天给大家分享个干货哈 普通人自学编程 想学成找到一份工作甚至进大厂 非常有效且必备的5个步骤 文章最后 还给大家提供了一些免费的学习资料 记得提前收藏起来 相信很多人在最开始学编程的时候 上来就是去网 ...

最新文章

  1. linux虚拟磁盘管理pe大小6,Linux下磁盘的高级管理——LVM逻辑卷管理
  2. Django项目知识点(二)
  3. Centos7防火墙的常用指令
  4. (转)matlab各类数学公式
  5. register_sysctl_table实现内核数据交互
  6. AuthenticationManager验证原理分析
  7. C语言和设计模式(之单件模式)
  8. 九宫格图片上传可展示,可删除,可添加功能
  9. win7 java下载_Windows7系统下JAVA运行环境下载、安装和设置(第二次更新:2012年03月14日)...
  10. python 多个excel合并成多个sheet以及多个excel合并成一个sheet
  11. Python购物车系统模拟1
  12. python语言turtle库画图代码示例_5分钟轻松搞定,Python开发之turtle库的基本操作...
  13. vue实现导入导出xlsx exel的数据渲染到table表格上面,表格数据改动然后再导出数据
  14. web中间件应用系列:负载均衡(二)负载均衡算法和常见实现方式
  15. 微信公众号申请access_token报错appID无效
  16. Lample-Ziv文本压缩(java实现)--学习笔记
  17. Option3X 5G 全网部署(基于 IUV_5G 软件)
  18. Java基础【之】循环、流程控制 (if else、whitch case、while、do while、for...i、foreach、多层循环与退出)
  19. java源码解析之反射(二)
  20. python操作微信电脑版_python 通过微信发送消息控制电脑

热门文章

  1. react入门(一)
  2. 关于VS中Compile Symbol 使用方法
  3. 将输入的字符串进行大写格式化
  4. 【Spring学习笔记-0】Spring开发所需要的核心jar包
  5. js原生attachEvent与addEventListener的用法
  6. 使用HttpWebRequest自动更新客户端应用程序[转]
  7. [转载]MySQL优化之索引的运用(2)
  8. LeetCode 590. N叉树的后序遍历(N-ary Tree Postorder Traversal)
  9. python 第一章 基础语法
  10. fatal error LNK _X