工作几年后,你还在持续地学习吗?
很多人可能在工作本身上已经耗掉了所有的精力,尤其是在软件行业,加班是常态,空余时间再想集中精力学习某方面的知识会很吃力。
如果像我一样,开始几年做的是基本的功能测试,软件开发相关的东西涉及的少,也不深入,停留在基本的使用上。长时间没机会应用和练习,慢慢地就生疏了,甚至有些概念会遗忘。
等到自己想有所改变,想突破的时候,就会发现心有余而力不足。每天的工作任务要完成,下班后就想放松下,朋友之间聚一下,打打游戏就过去了。工作久了就会对重复的工作产生厌烦的情绪,排斥当下的工作内容,想做点不一样的,用编程语言实现一个网站、做一个小游戏、做测试自动化之类的。
软件的发展在不断推进,各种框架不断的出现,网上宣传的或者同学、同事经常提到的也是最新的流行的框架,自己当时也是走了不少弯路。越是无知想法越单纯,哈哈,有段时间还在研究怎么开发手机游戏,也许当时刚流行手游,又有些爆款游戏被报道多么多么赚钱,就想自己也可以做一款出来,于是网上搜怎么开发游戏,用什么语言、什么框架、作图要什么软件、怎么切图、贴图、建模、2d引擎、3d引擎、哪些开发者平台、发布平台等等。
也确实做了一段时间,不过效果可想而知,首先就是语言,C++看基础的部分都没有坚持下去,unity也跟着教程做了几个有些demo出来,用C#语言相对简单些,但是怎么设计,怎么创造自己想要的图片、模型、音效,都需要很大的学习成本,没人指导,自己也没有对应的基础,从0开始一个个的学,当时想,没有个几年的时间怎么做能出来,有点开始要自我劝退了。
既然前端这种表现层的东西,没有什么基础直接能转过来做,那么游戏的后端支撑是怎么做到的呢?是否可以做后端开发?
当时比较火的就是nodejs,前后端统一语言,我去,这一看还不学那等啥呢?搜了下真有后端框架pomelo,学搭建环境,本地跑demo,socket编程,学了一段时间,逛论坛发现还有可以用js进行开发的游戏引擎cocos creator,又是一顿乱学,三消游戏、卡牌游戏都想做。
实际做起来都是走走停停的,加上空余时间才做一点点,遇到一些问题,得百度很多,找论坛发帖子,加群问问题,感觉每一步都是在加深自我劝退。做一个游戏的想法逐渐开始放弃,不过在自我怀疑和迷茫中,也在网上发现了牛人,就是A大,AliveGameStudio,B站上可以搜索,关注了解后,个人独立游戏的路果断还是放弃了,各种差距不是一点半点。以后当一个兴趣吧,能做个小游戏就不错了,重点还是回归到了本职工作,软件测试上。
有一段时间,我在的公司工作相对轻松些,系统都是比较成熟的,改动也不大,顶多做个活动页,抽奖发券之类的。里面也不限制内网,机器也没封USB接口,完全自由安装软件。闲的时候,想用自动化来简化自己的工作,我测试的系统虽然改动不多,但是流程很长,需要某一类数据,点的手脚发麻。开发会有些写好的脚本,直接批量产生数据,但是不全,这不能每次都找开发改脚本吧,自己能实现的还是先自己想办法解决。
测试这么多年,到过几家公司,系统也有十几个左右,无一例外都是java后端,正好对java也“熟悉”(其实当时就记得点基本的基础类型了),UI自动化可以用selenium,支持java语言。官网走起,先看一遍,拿几个例子程序跑一跑,再封装下页面的各种操作,对着公司的系统开始UI自动化,哈哈,一步一个坑,自己踩出来自己填。
完全按照自己的想法,做一次UI层的封装,然后跑起来自己想要的流程,简化了造数据的繁琐步骤,做测试以来,真的体会到了程序带来的效率提升。java就在身边,为啥要走弯路,贴近工作本身而且对金融行业来说,java占主流,对后续想了解系统功能是如何实现的也会有帮助,为啥不学不用呢?
再换工作时,java基础又看了一遍,基本常见的算法熟悉了下,就去面试了,结果面试的时候正好跟我做的UI自动化扯上了,其他方面我觉得都是通用的一些面试题,但是谈到了平时的学习内容,和自己解决工作效率上的实践方面,面试官很明显会有不一样的表情和语气。
就跟我前几篇文章谈到的观点一样,作为测试人员,如果对系统是怎么实现的不清楚,遇到一个bug查到日志,看得到是一堆exception,而不知道源码哪里出了问题,开发修改了代码后无法评估出来影响的功能点,那测试起来是不是很没有底气?想保证功能的正确,只能是拼时间拼精力,加班加点的不断验证各种场景,投入了大量时间也不一定能保证最后的质量。
当然每个人的情况不一样,对于我来说,切身的体会就是要不断的学习,哪怕最近半年没有用上所学的知识,将来某个时间点也一定会让你有不一样的展现。那么该怎么学,学哪些呢?
我建议是跟自己做的工作相关的学起,很多测试现在都在用Python,但是测试的系统又是java开发的,如果遇到了问题想看看源码,必要的概念理论跟不上的话,看起来还是比较吃力的。不是说Python不能学,这个肯定是因人而异。我个人而言,是选了java作为最近持续要学习的内容,有时可以判定一些现象的原因,分析下系统原有业务逻辑,做自动化也在用,还有一些其他的工具辅助测试,“收益”相对可观。
定好了方向,是不是就可以一步到位地拿框架做系统了呢?比如用spring boot开发一个web系统。
看了上面的经验,你可能也知道了,不要太过于追求直接的效果。每一个成品的背后,都存在着各种基础零件的支撑。spring boot 确实精简、开发速度快,要知道这背后的实现逻辑才能更好的用起来,比如给了一个注解就解决了一个功能需求,只是记住就可以了吗?会不会有如下的困惑:
- 为什么写上注解就可以了呢?
- 注解的处理类框架里是怎么实现的呢?
- 注解提供的参数值可以写哪些呢?
- 什么时候要自己自定义一个注解呢?
- 怎么样让框架知道你写的注解?
如果你有很好的java基础,有练习过很多次自己实现注解,了解java的动态代理,知道spring框架IOC、AOP的原理,再来分析看提供的注解功能,就不会这么迷茫。先学基础,再追求高效。
怎么在实践中完成学习目标呢?相信大部分人也不是没有自己立过flag,但是大都坚持不下去。可是让你打一局游戏,你很可能是打一把就睡觉一直打到凌晨;追一部剧也是,看完这集就做的别的,可是一看就收不住,两三天追完一部剧。
打游戏、追剧其实都不是一个平滑的过程,这里面都有很多起伏的情节,游戏紧张刺激的节奏效果等,都是有间断的,相对来说比较短暂,大多时间处于期待和兴奋,自己被带入到里面去了。想想一局游戏的时间20~30分钟,我们上学一节课的时间感觉很长,玩游戏就很快过去了。如果这个时间用来学习呢,看一个教程的开头就会分散了精力走神做别的了。
一定要控制自己,一旦开始,最少坚持看完一集或者最开始的一段教程,然后再休息会,玩会别的,再接着去练习,集中精力地完成自己既定的目标后,才去做点别的事情。否则,今天有学习的想法,但是没有开始,那可能要等上一周甚至几个月之后,才会翻开书本或者教程去看看,不仅会自己有失落感还学不到东西。拖延是最大的阻力。
不定太多太高的目标,只要想到应该学会哪个知识点,当下就去做,精力集中半个小时,绝对的投入,快速的开始,就已经很好了。
我自己也在不断地尝试,补足基础。你也可以试试,想想看还有什么更好的方法,欢迎留言讨论。