引言:相信每个自学编程的人,入门之路都经历了许多坎坷。不过我们身边藏着很多“良师”,多以利用总是能够带来惊喜。善用“搜索”就是其中一位。
本文选自《一路编程》,如何通过搜索解决自学编程中遇到的问题。
假如你在做一个 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档案,以及任何其他你能找到的资源。如果他们看起来明白他们在说什么,你就找到了一个很好的信息源。这类博客就像编程导师;他们给你如何更好编程的免费建议。记住,如果你接收他们的建议,要在文档中提一下那篇博客。
相关推荐
入门期遇到难题,耗了半天时间还是没弄懂,可以暂时跳过,知识积累到一定程度,回头再进行解决您会发现简单多了。不要钻牛角尖,避免浪费时间和精力。 3、站在巨人的肩膀上:善于利用前人的经验 您遇到的那点小...
在踏入编程世界的旅程中,很多初学者常常会遇到第一个难题:“我应该从哪种编程语言开始学起?”这个问题虽然看似简单,但实际上却是一个误区。真正需要思考的核心问题是:“构成编程学习的基础是什么?”为了更好地...
根据给定的文件信息,我们将聚焦于“PHP编程起步自学教程1.pdf”这一主题,深入探讨PHP编程的基础知识、学习路径以及自学过程中可能遇到的关键概念和技术要点。 ### PHP编程基础知识 PHP(Hypertext Preprocessor...
对于遇到的难题,可以尝试搜索相关的MATLAB社区论坛,那里有众多的用户和专家可以提供帮助。同时,定期复习和应用所学知识,以确保技能的巩固和提高。 总的来说,MATLAB+R2012a的结合使用能够提供一个全面的数据...
同时,学习编程是一个理论与实践相辅相成的过程,需要不断循环学习和实践,特别是在遇到难题时,学习计算机科学和数学理论基础可以提供解决问题的新视角。 此外,编程还需要一定的耐心和毅力,因为这是一个需要不断...
10. **问题解决**:学习过程中遇到的难题,可以通过阅读源码找到解决思路,这有助于培养独立解决问题的能力。 总的来说,《小梅哥FPGA自学笔记书本源码》是一份系统全面的学习资料,不仅覆盖了Verilog的基础知识,...
自学编程的过程中,可能会遇到挫折,如理解概念的难度、找不到合适的资源、缺乏实践机会等。这时候,参加专业的培训课程,如沈阳北大青鸟提供的课程,可以帮助解决这些问题。这类机构通常会根据市场需求设计课程,...
自学编程是很多渴望进入IT行业的朋友们的一个必经之路,它不仅仅是学习一种技能,更是一种对逻辑思维、耐心、好奇心和自学能力的考验。在自学之前,有几个关键的问题需要先进行自我评估: 1. 是否具有较强的逻辑和...
这些内容对于读者来说是十分宝贵的,尤其是当遇到难题时,参考他人的经验和心得可以大大缩短问题解决的时间,提高学习效率。 本书提供部分阅读,说明作者愿意分享知识,但基于版权保护和个人劳动成果的尊重,完整版...
《C#范例完全自学手册》是一本专为软件工程师入门C#编程设计的自学教材。作者团队由明日科技的王小科、吕双梁和冰组成,由人民邮电出版社出版。本书针对C#这一.NET平台上的主流编程语言,为解决实际问题和热点技术的...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、开源和强大的功能而闻名。"Java自学光盘源文件.rar" 是一个包含Java学习...同时,源文件也可以作为查找问题解决方案的参考,帮助解决在实际开发中遇到的难题。
这个过程能锻炼他们的自学能力和解决问题的能力。 8. **文档编写与报告**:在实习结束时,实习生需要整理实习成果,撰写实习报告,这将锻炼他们的文档编写能力,同时对整个实习过程进行反思和总结。 9. **技术分享...
5. 专业指导与辅导:教师在教学过程中应该及时给予学生专业指导,帮助他们解决学习上的困惑,鼓励他们在遇到难题时不断尝试和探索。 总之,C语言课程的教学方法应当注重实际应用能力的培养,通过创新教学模式和改革...
C++是一种广泛应用于系统软件、游戏开发、应用软件、嵌入式系统等领域的高级编程语言。它具有面向过程和面向对象的...同时,自学过程中,建议结合教科书、在线教程和社区论坛,以便更全面地掌握知识并解决遇到的难题。
Java自学大全是一个全面而深入的学习资源集合,专为那些希望通过自我学习掌握...在遇到难题时,不要害怕寻求帮助,多与他人交流可以更快地解决问题。记住,成为Java高手并非一日之功,持之以恒的学习和实践才是关键。
- **2.1 目标**:提供一个自学平台,解决学习者在计算机基础学习中遇到的问题,提供学习资源和指导。 - **2.2 运行环境**:开发环境是Windows XP,而运行环境可以是Redhat Linux或Unix,用户通过网络终端(Windows...
《历年全国高等教育自学考试——C++面向对象程序设计试题集及答案》是针对C++编程语言,特别是面向对象编程(OOP)领域的学习者而设计的一份宝贵的复习资源。这份资料集涵盖了历年的高等教育自学考试题目,对于考生...
《C语言解惑》是一本针对C语言编程学习者的进阶书籍,旨在帮助读者从错误分析的角度提高编程技能...通过深入浅出的讲解和丰富的案例分析,本书能够帮助读者在遇到编程难题时找到解决的思路和方法,提高编程效率和质量。
本书的编写目的是解决许多自学者遇到的问题,如自学后仍无法独立编写PB程序,或是在参加培训后依然难以参与到实际项目开发中去。 #### 三、传统学习方式的局限性 传统的静态图书作为学习媒介,在非编程知识的学习...
初学者往往在学习过程中会遇到许多概念性的难题和实践中的挑战,而这个宝典可能包含了详细的教程、示例代码以及逐步指导,有助于他们理解和掌握Web编程的核心概念。 【标签】"java"表明了这个资源至少包含与Java...