测试之道--编码
更多原创文章请到我的个人博客网站:http://www.codetracer.cn/
本次说下我对测试人员学习一门编程语言的心得与方法,仅个人愚见。
测试人员掌握一门或者多门编程语言是必不可少的,许多测试人员对编程天生“恐惧”,其实编程并不是你想象中那样触不可及。
许多测试人员为了提升,抱着一本书(或者电子书)“死啃”,效果肯定是有,但不是最高效的,我并不推荐。在平时繁忙的工作当中,抽出大量的时间来学习,不大现实,有时候会因为紧张的工作不得不停下来,投入到工作中,待空闲时再继续学习编程,你又会发现许多之前看的内容又忘记了。其实编程语言就是这样的,你不用它,就会很快忘记。那么如何利用碎片化的时间高效的学习呢?后面我会一一为大家解惑,并提供我自己的见解与学习方法。
测试人员掌握的编程水平不能与专业的程序员相比,其中有两块区别,一是熟练度,二是思想经验,熟练度的差距会比较大一些,而思想境界上我们可以无限的接近甚至超越程序员,就好比许多人玩LOL游戏,有人是大神,有些人是普通的玩家,对于同一个角色英雄,发挥出来的水平是不一样的,你与大神的区别,一在熟练度上,二在思想境界上,为什么会说熟练度差距大,程序员每天使用一编程语言,熟能生巧,编码敲击速度要快很多,这需要长时间的锻炼才能实现,测试人员天生没有这样的条件,熟练度差距自然很大,在思想境界上【所谓思想境界指的是对某类问题的解决方法】我们可以与程序员很容易的接近,程序员解决这类问题,方法是这样的,你告诉了我,我懂了,那么这类问题以后我也能解决了,无非就是编码速度,代码规范的差距,结果都是一样的,程序员不可能每天都在解决没有遇到过的问题,大部分时间都是将已知问题的实现方式(方法、经验、思想)编码实现出来,若我们将一些常见的问题的思想罗列出来,通过交流或者分享的方式,让你一一体会了解,是不是要相对容易些,懂了就是懂了【不纠结深层次的问题】,你懂了才能成为你自己的。程序员与程序员之间的能力差距,其中一点主要体现在思想境界上。
那么到了这里又会产生另外一个问题,别人在讲解或者分享某些问题的解决方法时,我们能够理解么?就好比你在参加一个别人的分享会,你能完全的吸收别人的思想么?请想一想!这需要一定的基础。就好比一个物理学家在分享一个问题的解决方法时,你能够听懂么【不排除一些牛人】?若有另外一个物理学家,也遇到该问题时,听完分享后,茅塞顿开,最终成功解决问题。因为他们在那一层次上有一定的基础。
若要吸收别人在编程上遇到问题的解决思想,你需要一定的基础,这些基础我将其归纳为固定的知识,理解掌握别人的思想需要固定的知识点来作为支撑。
哪些是属于固定的知识?如:基本数据类型、字符串常用操作、数组常用操作、正则、文件目录操作、常见容器对象、日期、多进程、多线程等等这些基础知识属于固定的知识点。很容易理解,例如获取字符串的长度,就一个len方法,参数为字符串,返回字符串的长度,没有歧义。
若要使用一种编程语言的话,需要熟记这些基础知识么?没有必要,一种编程语言的固定基础知识点就好比一种编程语言的编程手册,这类书籍属于字典类书籍,你听说过有人会去背诵一本字典么?你所需要做到就是会用这本“字典”即可。技术组也在逐渐完善这类的公共的代码库,并根据经验整理出合适的字典,我这边称之为公共代码库,当然你也可以自己收集与整理固定知识点的体系【建议后期大家统一在公共代码库进行维护】。
公共代码库类的字典与我们平时的新华字典的用法可不一样,公共代码库中每个知识点你需要全部的弄明白,你是不是觉得很多?相反,这类的学习反而更加简单,因为每个固定知识点已经没有任何的歧义,你只要理解、懂了就行了,但是有些东西得记住了,例如不同容器的特性【数组:有序,可重复;集合:无序,不可重复等】等等(其中有部分的概念还需要稍大的篇幅去讲解,例如:理解多线程、多进程概念,线程、进程同步,锁的概念),你不用去记忆,你只需要按顺序把知识点都理解了即可。
关于公共代码库你只需要知道某一种知识点有或者没有,并且知晓其在公共代码库中的位置即可,比如我有一字符串,需要用python获取到该字符串的长度,或者扣取字符串中一段子字符串,这类小问题属于固定知识点可解决的问题,你只要知道好像有这样的固定知识点可以解决这样问题,并且能快速在公共代码库中查找到即可。
公共代码库只需要弄明白常见的知识点的含义,以及别人问起时,可以给出有或者没有,并且能找出其位置在哪即可。
有些人可能会问,这些我早就看了很多遍了,还是无从下手,别着急,往下看。
想一想一个复杂的问题是不是由多个稍小一点的问题组成,而有些稍小一点的问题又可以分为多个更小的子问题,当分解成的子问题已经不能在分之后,到了这里,这个复杂的问题我们已经知道如何详细的去实现了,因为不能再细分的子问题都对应一个个固定的知识点【公共代码】。
到了这里有些人就明白了,这不就是分析问题的能力么?非常好,别人能想到该问题的分析方法,而我为什么却没想到【没想到与想不到是有差距的,主要区别在于每个人对基础知识掌握的广度与深度的不同】,你没想到,我告诉了你如何的分析方法,你就懂了,就真正成为了你自己的东西。这类分析方法,其实就是经验、思想,他与某一固定的编程语言无关,有了经验、思想你学习更多的其他编程语言,会得心应手,你经常会听到别人说编程语言之间基本上是想通的。
剩下的就是思想经验的吸收,何谓思想经验,在之前已经做过解释,这里再啰嗦下,公共代码库中都是解决一些小问题的公共代码,一些复杂问题【复杂问题也是由多个小问题组成】的解决方法、分析方法就是经验,有了固定的知识点作为支撑,听别人讲解一些问题的解决方法思想还是比较容易接受的,无非就是多看看别人如何将一个大问题分解成多个小问题的过程,小问题只需要熟悉公共代码库即可,自然而然问题就可以解决了,这样才能真正让别人的经验变成为属于自己的经验,甚至基于你自己掌握公共代码库的广度加以优化,能够给出更加合适的解决方法,那么在这个问题的解决方法上你已经超越了对方。思想经验的吸收相对来说就比较容易了,看别人代码或者与别人交流,只有体会后,在遇到时才会自然而然的想到。
以上仅仅只是个人在测试需要掌握一门编程语言方面的愚见,欢迎大家踊跃与我交流,说出你目前的困惑让我体会,一起完善我对这一块的理解,我会设计出最适合大家学习的方法。技术组会将更多的固定知识整理出来,后期我也会陆续给出测试人员在其他方面能力的见解,让你在其他方面的能力也能非常容易的提升起来。