PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不为人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现的更好、更快、更简单易学。尽管如此,我们在面对一项自己不熟悉的新技术时,仍然会感到无所适从,不知从何处入手,似乎总是感觉摸不出一条清晰的脉络来。另外,最大的障碍莫过于学习的过程枯燥乏味,从而失去学习兴趣。不过,如果你能掌握一种适合你的学习方法,就可以事半功倍。本人根据自已的多年PHP教学经验,和众多人才培养的成功案例,列出的学习方法或多或少的有一定借鉴性。 当然再科学的学习方法,也只是让你少走弯路,而不能一夜精通,还是需要持久的修炼!
一、确定学习的目标
学习PHP都是有原因的,是什么让你选择学习PHP呢? 是爱好?是为了找工作?还是工作中的开发需要?或是他人推荐的?等等。当然,不管你是出于什么原因, 即然选择学习PHP就一个要有坚定的信念。不能一时兴起学了一阵儿,当听别人说某某语言有多么的好,马上切换,或是多门语言的学习同时进行。只有专心在一门课上下苦功,才能成为“专家”,持之以恒才能产生兴趣,毕竟兴趣才是最好的老师!
二、PHP学习线路图
刚开始学习PHP时,多数新手都会有一些迷茫, 不知从哪里开始学起,不了解学习的顺序,找不到学习的重点。例如,有新手听说学PHP需要先搭建好运行环境,就按网上资料搭建。网上好多这方面的资料,几乎都是真实项目上线使用的专业环境,所提供的都是Linux下源代码包安装方式,相当的复杂,成手如果按项目功能定制安装都有可能要花费一两天的时间,新手有的需要花费一两个月时间才弄个大概,这就是为什么有好多新手从一开始就选择了放弃。如果有人教你一种学习用的集成安装环境,可能你只需要5分钟就可以搞定。还有新手学了好久,就是不知道如何写项目,反反复复学习基础部分,就是停滞不前。也有的新手找不到重点,学习大量的内容,结果实际用到的并不多, 有一多半可能这辈子都不会用上,浪费好多时间。所以新手开始学习,就像走到大山深处,需要有人给你指引,找到正确的方向才能大步前行。如图1-15为PHP新手学习线路图。
按PHP学习线路图1-15中的指引, 可以将学习PHP的过程分为4个阶段, 一步步前行,为每个阶段设定一个学习目标,并安排好学习计划, 达到目标后就可以开启下一阶段的学习。
Ø 阶段一 入门
这是刚刚接触PHP时的入门阶段,先要了解PHP的开发能力,并多接触一些用PHP开发过的开源项目,网上有很多开源的PHP项目可以下载,先学习一下简单功能操作即可,主要是能产生对PHP的学习兴趣,从中了解PHP的开发需求和PHP开发特点等。就像如果你想学习制造汽车或修理汽车,一定要先学会驾驶汽车一样。在本章的前面了解过Web开发所需的构件儿,所以只孤立学PHP肯定是不行的,先学PHP也不行。如果刚开始接触Web开发就直接学习PHP会力不从心,因为PHP是服务器端脚本,怎么也要安装PHP的运行环境去解析它吧。另外,PHP是嵌入到HTML中的脚本语言,所以怎么也要了解一些常见的HTML标记吧。在开始学习PHP之前先做一点准备是非常有必要的。
Ø 阶段二 打基础
这个阶段是学习的重点,但方法很重要,像PHP的基本语法和语言结构(流程控制、函数、字符串等)这部分内容能学多细就学多细,每个知识点都会在开发中用上。而像数组、对象,以及文件件处理、图像处理、MySQL数据库的操作、PHP操作数据库等内容, 先学一些常用的部分,会一些基本的应用够用就行,这样可以大大提高学习的进度。这个阶段的学习大多数新人都会出现两个常见的问题:第一,可能当天学的内容,下次在学习新内容时,上次学的忘的差不多了,总是记不住。当然,这个大可不必担心,不要停下来,一定要继续往下学习,因为基础的语法都是后面知识中会用到的技术,用多了自然就记住了。 而像高级的部分也不用担心记不住,都是类库或函数库,只要记住系统已经提供了哪些功能就好,用时通过手册查询即可,能记住常用的当然好了。第二,就是书上的讲的内容,看能看懂,也都能理解, 就是自己一动手时,不知从何下手, 没有思路。所以说对这个阶段的知识点有所了解以后,一定要想尽办法做出一个小项目(例如,模拟写个小型商城、论坛,或聊天室等),这个项目不用去管安全、优化及代码质量,只要能实现功能就行。这个项目的目的就是打通你的“任督二脉”, 并将基础部分的零散知识点贯穿在一起,在实际项目中去应用实践,能更好的对其理解掌握。
Ø 阶段三 加强
有了阶段二的项目开发的练习后,积累了一些开发思路,需要再回过头深度学习每部分知识点, 像数组、对象、正则表达式、数据库操作、数据结构和算法等,这些内容是PHP开发中最常用的技术,这个阶段去学习可以学的更全、更透彻,更容易掌握。当然还要学习一些新的内容,像模板引擎和PHP框架,然后再做一个项目。而这个阶段的项目就不能像阶段二时的项目,只是实现基本功能就行了,不仅要求代码质量要好, 业务逻辑要清晰,项目的结构也要基于目前最流利的开发模式,使用框架和模板引擎的,并采用面向对象的思想,和MVC模式的设计要求, 也要学习项目的开发流程和规范, 尽量让这个项目达到真实上线的项目标准。
Ø 阶段四 提高
这个阶段则建议在工作中去学习, 因为这个阶段的内容没有统一的标准,需要根据实际项目去设计解决方案。当然多搜集和学习一些这方面的理论,或模拟场景做一些有关的实验是很有必要的。综上四个阶段,看似简单,却也需要我们全身心投入,持之以恒才行。
三、坚持动手实验
打过篮球吗?投篮理论可能掌握很快,但要提高命中率,灵活自如可就需要反复练习。学编程也是一样的,能看懂的代码,可不一定能写出来,写不出来可就不是你的!多动手练习是非常有必要的,可能刚接触时,写了几行代码就会出现n个错误, 出现的错误就是你没有掌握的技术, 解决掉的问题就是你学到的, 当错误出现的越来越少时,你的代码编写能力也就越来越熟练。当然,为了能更快的解决代码错误,初期可以写几行代码就运行一下,这样方便定位查找Bug位置。另外,写代码可是最好的对理论进行实践的方法,你认为比较迷茫的技术,都可以通过实验解释通过。还有,在练习时一定要边练习边为代码加上注释,或记录学习笔记,总结和分析。
本人作为编程过来人,刚学编程时同样没有思路,至少也是照猫画虎画有上万行代码,才慢慢出现思路的。就像刚开始写作文时要有思路,一般也要经过几个阶段,首先学习词汇,然后学习造句,然后大量阅读别人的文章,再自己模仿着写一些,逐渐的经验积累,才能形成自己的思路。学编程,恐怕也得慢慢的来吧,只是看一看、听一听,不动手是不足以学好编程的。 多动手跟着书上例子或配套的教学视频开始练习,当然最好加一些自己的功能,按自己的思路敲上一些代码,收获会大的多。量变会引起质变的,而这种质变的确发生过不少次。提醒一句,要理解代码思路之后再跟着敲,背着敲,千万不要左边摆着别人的程序,右边自己一个一个子母的照着写,这就不再是程序员了,而成打字员了。纸上得来终觉浅,别问那么多,别想那么多,动手写吧。
四、要事为先的原则
盖房子,要先建骨架,再谈修饰。画山水,要先画结构,再谈润色。认识一台结构复杂的机器,应该首先认清楚脉络,然后再逐步认识每一个关节。为了应付从小学到大学的考试,我们背了各种各样的不应该提前掌握的细节,同时也养成了见到细节就死抠的学习习惯。而现在学PHP,是到改改的时候了。“抓大放小,要事为先”这是对待繁琐事务的态度。对于以前从来没有接触过PHP的新人,PHP无疑是庞大的,似乎每个领域都可以拓展开来,都是一片开阔地,要是深入接触到每一个细节所耗费的精力无疑是巨大的。多数新手都胸怀壮志,两眼发光的盯着每一个崭新的知识点,遇见的任何一个知识点都恨不得抠的清清楚楚,明明白白。难道这有什么不对吗?我的意见是,没什么大毛病,但是学习效率太低了!任何事情都要追求完美才敢继续往后进行,是一种性格缺陷。大胆的放弃一些东西吧,有失才有得,把自己有限的、宝贵的精力用在重要知识点直接相关的地方,这才是最有效率的学习方式!等全部要点拿下以后,有时间有精力闲的没事儿干的时候,再去研究那些边边角角的技术吧。一切和我们的直接工作目标关联不大的东西,扔在一边或者弄清楚到足够支持下一步的学习就可以了。把时间和精力花在开发项目上面,花在写作品以及锻炼解决问题的能力上面,这是迈向高手的正确的而且快速的方向。
当你看书到某个地方暂时不理解的时候,暂时放手吧,追求一些行云流水、自然而然的境界吧,只是不要停下前进的脚步,不要被大路旁边的支根末节干扰了你前进的行程,项目,真实的项目,这才是目的。以项目驱动自己的学习,当把握了技术的脉络之后再去补充细节的研究,是学习PHP的正确途径。
五、Bug解决之道
不管是新手学习,还是成手程序员,写程序就不可能不遇到Bug。那么,自学时遇到Bug之后,环境配不通,程序调不出来,运行不正常,遇见这些恼人的问题的时候,该怎么办呢?首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的PHP经验值就应该上升几百点,问题遇到的越多,知识提升的就越快。
但是总是解决不了Bug也是很恼人的,怎么办呢? 本人的建议是当你遇到一个问题的时候:首先要仔细的观察错误的现象,是的,要仔细。有不少新人的手非常快,访问页面报了一大堆的错误,扫了一眼之后就开始盯着代码一行一行的找,看清什么错误了吗?没有!还有出现Bug马上网上求救,自己都没看一下,这都是典型的不上心的方法!请记住,学习编程并不是一件很容易的事情,自己首先要重视,要用心才可以。别人帮给你解决的问题可不是你的提高,最少也要自己试着解决一会,真的没有思路了,可就别浪费时间了, 再花多少时间也解决不了, 这个时候就该想想别的办法了。在开发中,仔细观察出错信息,或者运行不正常的信息,是你要做的第一件事。如果错误信息读懂了, 就要仔细思考问题会出在哪个环节了;如果没读懂,又要怎么办呢? 读了个半懂,有些眉目但是不太能确定,也要如何处理呢?
Ø 要仔细思考问题会出在哪些环节
一辆汽车从生产线上下来,车门关不上,哪出问题了,你怎么查?当然是顺着生产线一站一站的查下来。程序也是一样的,也是一系列语句完成后产生的结果。当你读懂了一个问题之后,要好好的思考这个问题可能会在哪些环节上出错。例如,客户端产生数据->按“提交”按钮->发送到服务器->服务器接收到后保存到数据库。这几个环节都有可能会出错:有可能客户端根本就没产生数据,有可能提交按钮按下去后根本就没发出去,或者发出去的不是你产生的东西,或者根本就没连接网络,或者发送出去服务器没有接收到,或者接收到没存到数据库等。学着去这样仔细的分析程序的环节和这些环节可能会产生的问题,你的经验值自然会大幅度快速的提升。这样做很累,但是一件事情如果做下来一点都不累的话,这个东西还有价值吗?在网页A输入了一个人的名字,提交到B,首先存储到数据库,然后再读出来,发现乱码!怎么办?当然是分析环节:客户输入->HTTP发送->B接收->存储到数据库->读出->展现到网页。 每个环节都可能出问题,怎么才能知道哪里出的问题?继续往下读。
Ø 如何定位错误
写代码时常见的Bug其实就两大类: 一类是语法错误,例如没写结束的分号,访问时页面中就会提示哪里出错,打印出错误报告,只要认真读完错误报告,这样的问题很容易找到,也很好解决。另一类是编写的逻辑错误,这是因为设计缺陷或是开发思路混乱造成的,要定位这样的错误会麻烦一些,分析清楚有哪些环节之后,通常有三种方法找到错误位置:第一种是输出调试法, 通过在多个可疑的位置打印输出不同的字符串,通过观察输出的结果,并结合输出信息的位置周围的代码来确认错误位置。第二种是注释调试法,先将所有代码注释掉,再从上到下一点点去掉注释, 去一次运行一下观察运行结果,有不正常的结果出现也就定位到了错误的位置。第三种是删除调试法,先将代码备份,然后删掉一部分调试一部分,也就是去掉一部分的功能,做简化,然后调试剩下的功能。如果还查不出来,恭喜你,你遇到的错误是值得认真对待的错误,是会影响你学习生涯的错误,就使用搜索引擎吧。 也可以在专业的BBS中详细列出问题,或加入一些QQ群求指导。但向别人提问是非常需要技巧的!曾经有人问我这样的问题:“请问如何才能学好PHP呢?”这个要求太泛泛了。还有人给我一段长长的代码甚至项目压缩包发过来,然后说有个错误您帮我查查? 还有人问这样的问题,是否有人能帮我完成一个完整聊天的程序?请帮我写一个登陆模块吧?这样的要求有些过分了,有人帮你是你的运气,没有人帮你是正常反应。向别人提问,首先应该确定你已经做了自己应该做的事,不要没有经过认真思考就草率的向别人提问,自己也不会有太多进步的。
六、看教学视频,让学习变的简单
跟教学视频学习可是最好的学习方式了,即有详细的理论讲解又有代码分析,看书和配套视频结合学习可以达到最佳的效果。目前,网上可以免费学习的技术视频越来越多,像兄弟连云课堂(yun.itxdl.cn),不仅视频种类多,视频新,讲解全面详细,而且又会根据企业实际的技术应用,不断更新,不仅可以记录学习笔记,还有专业老师在线指导答疑,也可以和同学互动。 找到比较适合你的全套视频,保存在自己硬盘里就是你的了,不对! 一定要有计划的学习才可以,你可以给自己定一个目标,每天看几集,每周完成哪些部分, 一个月学到哪里,并不断坚持。不然,今天学点,一个月后再学点,这样不会有进展。跟着视频学习,重点内容最好过三遍,第一遍了解大概, 第二遍边听边记笔记, 第三遍跟着视频中的演示,自己练习代码。
七、优秀的Web程序员是怎样练成的
学习软件开发“思维逻辑”是核心,“记忆”只是辅助。每个行业都有新手和成手之分,软件开发也是一样,也可分为普通程序员和高级软件工程师等不同级别的职位。通常刚工作的普通程序员都是在维持生活的阶段,只有成为高手才能做出突出的成绩。当然从初级程序员成长为高手并不是一步到位的,而需要通过不间段的努力逐渐成长起来。例如,在工作中不断积累经验,掌握复杂网站的架构设计,并具有解决问题的能力,还要多研发产品,并能挑战高难度的项目。除了要有强烈的好奇心和学习精神以外,本人还总结以下几点提供给刚入行的新手参考。
1. 克服惯性
万事开头难,克服惯性是学习新技术的第一步。举个日常生活中惯性存在的简单例子,当我们看电视的时候会因为遥控器不在身边而懒得换台。幸运的是有很多的小技巧可以调动我们的积极性,帮助我们克服惯性。对于我来说,微习惯是一个很好用的小技巧。与其被手头的任务吓到,不如将任务细分为一个个具体的微任务,然后挑选其中的一个开始做起。就“拿到遥控器”这个例子来说,首先扭动你的手指,向前伸出,然后推动整个人离开沙发。下一步,身体滑到地上,用脚拿到遥控器,然后起身。通过完成一个个的微任务,你会发现自己克服了惯性,并且这项任务不再显得难以完成。这个方法可以被应用到学习新技能的过程中。关键就是将大块任务细分为微任务。
2.具备扎实的技术功底
PHP是众多计算机开发语言中最容易入门并上手最快的,人人都会写。但如果不了解数据结构、离散数学、编译原理、计算机网络、结合多种语言的编程特点等这些计算机科学的基础,很难写出高水准的程序。当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。因此多读一些计算机基础理论方面的书籍是非常有必要的。
3.遵循良好的编码规范
高质量的代码都具有统一的编码规范,要养成良好的编码习惯,代码的缩排编排、变量的命名规则要始终保持一致。因为在一致的环境下,团队协作中有更高的效率,团队的成员可以减少犯错的机会。另外程序员可以方便地了解其他人的代码,弄清程序的状况,就和看自己的代码一样。另外,也可以防止接触PHP的新人自创一套风格并养成终生的习惯,一次次地犯同样的错误。
4.问题要解决不要逃避
学习过程中遇到比较难理解的重要章节不要跳过,更不能放弃,要多花一些时间和精力在这些知识点上,将其攻破,这样才能不断地提高,否则在开发时会一直是你的障碍。在开发过程中如果遇到障碍,不妨暂时远离计算机,看看窗外的风景,听听轻音乐,再重新开始工作的时候,有可能会发现一些难题竟然可以迎刃而解。解决过的问题再次遇到时将不再是你的障碍。
5.扩充自己的想象力
程序员不要局限于固定的思考方式,遇到问题时要多想几种解决问题的方案,可以试试别人从没想过的方法。丰富的想像力建立在丰富的知识的基础上,除计算机之外,多涉及其他的学科,比如天文、物理、数学等。开阔的思考和了解各种业务流对Web程序员来说是很重要的。
6.对新技术的渴求
我们可以越来越方便廉价地获得大量学习资源。这些资源的传播载体由最初的教室被变成了博客,技术论坛等。坐拥如此众多的学习资源,我们没有任何理由不去好好利用。人类自然科学的发展史就是一个渴求得到答案的程序,即使只能知道答案的一小部分,也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在程序中也会学到很多东西。
7.挖掘设计模式,提高代码质量
动手将一个新的模块开发出来以后,不要认为自己写的代码就是完美的,也不要草率地将别人的代码拿过来就直接使用,更不要在开发中多次遇到相同功能,将同一段代码直接粘贴反复使用。提高自己的编码能力一定要多参考和总结别人的设计模式,还要不断地改进和升级才能提高自己编写代码的质量,也能从中学到新的技术。
8.多与高手交流
尽量多认识一些大互联网公司的程序高手,多了解一些大型网站的解决方案,也许在一次和别人不经意的谈话中,就可以蹦出灵感。也要多上上网,看看别人对同一问题的看法,会给你很大的启发。也要经常参加一些互联网技术大会,了解一些新技术和行业的发展,拓展自己的眼界。它可以是任何你有激情去学,并且想深入学习的一些东西。这种原始的学习欲望非常重要,这种欲望可以在你的学习低潮期给你提供动力。你想学的或许是一门新的编程语言、应用框架或者是新的工具,一旦你确定了想要的是什么,就立刻去收集相应的优秀群体所做的一些优质的工作成果。
9.韧性和毅力
程序高手们并不是什么天才,而是在无数个日日夜夜中磨炼出来的,成功能给我们带来无比的喜悦,但程序却是无比的枯燥乏味。做程序员,停滞不前就是落后,要不断地学习扩展新知识,就像软件版本升级一样,也要不断地更新自己的技术。
10. 写博客
在你进行你的探险之旅的时候,实时记录下你的成长以及犯下的错误大有裨益。在技术领域,博客是最简单易得并且受欢迎的表达载体。当你准备落笔的时候,你会强迫自己整理思路,并且对积累下来的零散的知识片段进行结构梳理。说不定,通过互联网的分享,你的经历和分享会给别人的成长带来帮助。写博客能够提升你的个人沟通能力,这与你学到的技术同样重要。给别人讲解是最好的一种提高的学习方法。
11.考虑接单
许多年轻有才华的程序员正不断的寻找新的项目和解决不同的问题,以此来增加经验。然而,很少有一个单一的环境能够提供这样的条件。如果基于遗留系统代码(维护原有系统),架构方面没有多大的想象空间。因此,许多程序员觉得需要变换工作,到不同的环境去获取新一阶段的学习。然而,“跳槽“只不过是获取丰富经验的途径之一,我仍提议另一个选择:接单。
免费领取LAMP兄弟连原创PHP教程光盘/《细说PHP》精要版,详情咨询官网客服:http://www.lampbrother.net