最近刷某乎,发现有很多朋友有年龄焦虑了,比如:“我今年28了转行来不来得及”,“我今年30了还能转软件测试吗?”......这种问题在网上上有很多,仿佛大家都觉得年纪大了,很多事情都来不及了,我来说说我的经历吧,希望可以帮助到迷茫中的你!
先说下我基本情况。我是87年的,计算机专业普通本科毕业。在一个二线城市,毕业后因为自身能力问题、认知水平问题,再加上运气不好,换过多份工作,每份工作都干不长。导致我30多岁时,还一事无成,也几乎没有积累到什么经验技术、行业知识等。甚至还一度去开过网约车,送过外卖。
转行程序员前,我每个月收入仅三四千元。2020年下定决心,准备转行!我知道自己最大的劣势就是年龄太大了,但考虑再三,因为以下几个原因,我还是决定走这条路:
我目前的情况已经算是城市里的底层了。我不会做生意,没其它经验和技能,性格偏内向,销售和交际也不太擅长。所以我不怕失去什么,因为也没有什么可失去的。
我想学个谋生技能从新开始,而学开发最适合我。因为我并非0基础,毕竟大学时学的这个专业,而且自己也曾经很喜欢编程。
我对待遇的要求不高,只要工资有5k以上就行。如果能有6、7 那我就太满意了。
当时我的瞎推断:因为国内出生率特别低,以后可能没那么多年轻人供雇主挑选,所以我们这些中老年人,也有一定的机会。
受到一些心灵鸡汤的鼓励,比如什么种一颗树最好的时机是十年前,其次,就是现在!
我辞去工作,开始在家自学软件测试。主要的学习方式就是在网上看视频教程。那些视频教程,初级的基本上免费。中高级的有些会收费,大概50-300元左右一套。反正“学费”上我没花什么钱,总共不到一千元吧。
软件测试是IT相关行业中最容易入门的学科~不需要开发人员烧脑的逻辑思维、不需要运维人员24小时的随时待命,需要的是细心认真的态度和IT相关知识点广度的了解,每个测试人员从入行到成为专业大牛的成长路线可划分为:软件测试、自动化测试、测试开发工程师 3个阶段。
先是学了些测试基础。在学测试时,犹豫了下学Java还是Python。在我读书时是学过JAVA的,虽然已记得不多了。于是我就想学个新的吧!还因为Python比JAVA简单,我这个情况,肯定进不了大厂,做不了大项目了。所以就决定学Python自动化。
学完基础后,我还跟着视频教程,自己做了两三个简单的项目。在我学习过程中,让我比较有自信的是——没遇到什么挫折。当然,肯定遇到过各种问题被卡住,但自己都去百度解决了。
接下来开始准备找工作,第一个难点就是简历。快32岁的人了,如果老实说刚自学出来没任何实际工作经验,肯定是没人要的。没办法,只好去包装简历,说成有两年开发经验。瞎编简历的过程还是很困难的。以前呆的哪家公司,做了什么项目,完全凭想像去编造。
然后海量投简历,艰难地面试,不断地被淘汰…当时我的信念就是,大不了我花一年时间去找工作,找不到就继续学,直到找到为止!最终我花了近两个月时间,可能参加了20次的面试,才勉强找到份工作。
因为没有实际工作经验,造假的简历,是很容易被发现的。只要稍有经验的面试官,多追问你几个细节,就露馅了。因为你并没有做过,不可能编造出全部的细节。所以面试过程很艰难。说几次印象深刻的:
1、一家特别小的公司,还是与人合租的办公室,我当时见到的员工,似乎只有两个人。与技术面试官简单交流了几句后,他当场决定录用我,让我明天来上班,并且说稍后会发短信给我确认。但不知道为什么,后来没再联系我了。
2、另一家小公司,还是在居民小区里办公,不过办公环境还不错,约有七八个人的样子。与面试官交流的地点是在生活阳台上,面试官坐着一个简易塑料板凳,旁边是个洗衣机。和他聊了较长时间,自以为他问的所有问题,我回答得都不错,也很希望拿到这个offer。满心期待的回家等了好几天,结果也没下文了。
3、也是一家在居民楼里办公的小公司,办公环境给人压抑的感觉。去的时候就遇上,老板模样的人,在对开发人员大发脾气,那些开发人员都不敢支声。然后那老板对待我们这些面试者,态度特别粗鲁,抱怨我们为什么早到了10分钟?笔试的内容甚至包含直接给他们现有项目找bug,和改bug。我心中生气,中途离开了。
4、最后能找到工作,通过面试,主要是运气。是老板直接跟我聊的,没经过技术面试官。老板觉得我有相关行业工作经验(其实没啥帮助),又是统招本科,专业对口,就直接决定录用我了。如果当时他让懂技术的人来面试我下,估计我多半过不了。
那是家小公司,连同老板在内,总共十几个人,给的待遇是6k。这待遇对于开发来说,算是最低水平了。但我当时还是很高兴。说出不来怕丢人,比起以前的工作,6k对我来说已是高薪了。
刚去上班那段时间,还是发现了很多“新奇”的东西。比如,原来还有一个岗位,叫作“产品经 理”。以前我一直以为,只需要有开发人员撸代码就行了。我怎么动手操作!
当我同事滑动着手机告诉我,此处忽略一些情节…。于是我点头,装作原来如此的样子。其实内心却震惊了!没错,我就是这么菜,甚至当时我都搞不明白,啥是接口。感觉这是一个很难的东西。
在那里呆了两三个月后,我就没那么白痴了。给我安排的日常任务,都能按时完成。呆了半年后,我渐渐地发现。我后面进来的同事,水平也不过如此,可以说基础还不如我,我还时不时给他们解答下问题。当时我还有点飘飘然了,觉得他们只不过对业务更熟悉些。
现在的我回想起来,当时我的看法大致没错。道理很简单:愿意去这家公司,拿6-7k工资(除了工资以外,啥也没有)的程序员,只能是初级水平。
经过一年的时间,我已成长为一个合格的自动化软件测试测试工程师。这里已学不到什么东西了,现在回想起来,那个公司没有任何技术氛围,在里面呆着,有一种养老的感觉,外部没有什么动力和压力,逼自己继续学习。
经朋友介绍,我跳槽去了另一家公司,很顺利地通过了笔记和面试,工资开的9k。
刚去的第一个月,我经受了很大的压力。部门负责人,看我年龄这么大,就以为我是一个很牛逼的人。就给我安排了些较难的任务,我很费力的完成了一两个后。
这里开发人员的技术水平,和上家公司完全不是一个档次的。氛围也和第一家公司不一样了,同事们经常聊各种新出来的技术。哪怕聊点8卦,也是以IT新闻为主。他们聊的东西,很多我都听不懂。让我深感自己知识面的狭窄。
这里的学习气氛也浓厚。做过开发的都知道,忙的时候真是喝水都顾不上。但有时没事,又闲得很。上家公司在没事干时,大家就偷偷玩游戏、看视频、小说等。这里没事时,大家就是看文档,学新东西。
两三个月后,我慢慢适应这里了。但还是那个问题,一直让我焦虑——年龄。同事闲聊时,我最怕聊到年龄的话题。哪怕和年龄有一点点关系的话题,我也会警觉。比如同事们聊起用的第一部智能手机。我一般就不接话,因为我用的第一个智能手机还是palm!
但是,怕什么还是来什么了。
有一次聚会,又聊起年龄。每个人就在说说笑笑地报自己的年龄。轮到我时,我强笑着说:“我嘛,永远18岁。”一个正常情商的人,都会明白,这就是不愿意说,识趣的话应该也就别多问了。但是,在坐有个同事,情商真的太低了,他直接跳出来说:“他87年的!”此时,刚走进来一个95后同事,听到“87年”这三个字,顺口就说了句:“卧草,谁87年的啊?”当时我感觉整个空气都凝固了,我的大腿控制不住的抖动,背上密密麻麻地出汗,把衬衣都湿透了。我只好举手示意,说:“是我,我是85年的…”当时我的尴尬和羞愧,永远也无法忘记。
目前我工资17k,仍然是一个技术普通的测试开发人员。对于这个收入我是知足和满意的。
我是个脸皮薄,性格敏感的人,2022年又要满35岁了,哎!
其实让我目前感到尴尬和羞愧的并不完全是因为年龄。而是我的年龄和技术能力完全不匹配!公司中也有年龄和我相仿的人,但在我的眼中,他们都是技术大牛了。感觉什么都懂,随便说一个问题,他们都能给你上上课,讲讲底层原理。当我新听到一个技术概念,觉得很新鲜,正准备去了解个大概时。他们不仅熟悉,甚至还知道茴香豆的茴字,有四种写法!
青春逝去,时光不再。比我聪明,比我入行早的人,都还在努力,我现在能做的,只能是继续努力学习,仅仅希望不要那么丢脸。
对于那些一毕业就干开发,目前不到30岁,但经常听说程序员只能做到35岁,并为此焦虑的同学。请你们尽管放心,只要你们做的不是养老的工作,每年在技术上都有明显进步,找到好工作绝对没问题。至少在中型公司当个leader是没问题的。
但在此劝那些30多岁想转行程序员的人,如果你们像我一样,不是一个脸皮厚的人,一定要慎重!
不过如果呆在那种10个人左右的小公司,这种年龄尴尬,要稍好点,但就没什么技术氛围了,成长较慢。
下面是我整理的这份2021年最全的软件测试工程师发展方向知识架构体系图,会很明确的告诉你该往哪里努力:
1、软件测试基础理论知识:
软件测试理论知识是开展测试工作的理论依据和支撑,是测试很重要的阶段必须掌握的技能。
软件的质量模型:软件测试过程保障软件的质量,从哪些方面保障可以从质量模型出发思考
测试分类:软件测试过程可以按照不同角度进行分类,基础测试到高级测试递进过程
开发流程:告诉测试人员一个软件完整的生命周期,软件从无到有到消亡的过程
测试流程:掌握并指导测试人员在实际项目中如何开展测试工作。这要求测试人员对常见的主流测试流程有较为透彻的理解。遇到不同的软件项目,知道从何处着实能最有效率的测试软件缺陷
测试计划与方案:如何规划在项目中开展测试活动,确保测试活动有序进行
设计用例方法:黑盒测试阶段必须掌握的一些测试用例的设计方法。比如黑盒测试用例的设计方法、测试用例元素等等
软件缺陷:在测试执行过程中应该确定缺陷并提交缺陷报告
缺陷管理:提交缺陷后在实际工作中如何和开发协助处理验证提交的问题。例如:bug的等级优先级分类、bug的描述、bug的生命周期、缺陷管理工具使用,如禅道等。
测试报告:测试过程的回顾和结果确认,生成系统性的专业软件测试评估报告。
2、软件测试功底技术——Linux系统
linux系统是主要的服务端操作系统,也是从事IT岗位的大部分人员必须具备的基本技术之一。
linux系统基本知识:多用户,多任务,发行版本等
常见 linux操作命令:日志查看,文件压缩、解压,用户管理,文件权限等
会部署和配置基本的应用jdk、 mysql、 tomcat
docker安装使用
编写基本的 shell RAD本
远程终端工具使用: shell, xftps等
3、软件测试功底技术——Sql数据库
数据库作为软件系统必备的应用系统,在诸如接口测试、性能测试等等过程中往往需要操作数据库,验证数据正确性完整性,都离不开数据库的增删改查操作,在项目部署阶段数据库还需要配合项目部署。在性能测试、接口自动化测试中都需要数据库的支撑。
数据库基本概念
关系型数据库
MYSQL基本的增改查语句,存储过程
MYSQL复杂查询、多表查询
MYSQL索引及事务相关概念
数据库客户端工具使用:如 Navicat
4、软件测试功底技术——编程语言
推荐没有编程基础的朋友可以学习Python语言
Python语言的学习内容包含以下知识点:
Python基础:Python语言特点、运行环境、基本语法、代码风格、示例程序
数据结构:
基本数据结构:数字、字符串、类型判断、类型转换、切片、字符串格式化、数值运算、位置参数和关键字参数;
组合数据结构:列表、元组、范围、字典、集合、不可hash对象、解包、内存地数据结构址、不可变数据
程序控制:顺序结构、循环结构、判断结构、异常处理、逻辑运算符
函数:定义函数、函数的参数、返回值、变量作用域、匿名函数、常用内置函数
模块和库:模块和包、import关键字、常用标准库、常用第三方库、包管理工具pip
面向对象:面向对象起源和优势、面向对象的特性类和对象的联系、对象的特殊方法
日志记录:baseConfig、文件日志、邮件日志、定制格式、内置占位符、等级过滤、分级传播、配置文件
测试框架:unitest、pytest等
并发编程:多进程、多线程、协程、线程池、同步控制、线程通信、分布式、猴子补丁、 async语法、生成器
网络编程:socket编程基础、TCP服务端和客户端、并行请求处理、HTTP服务端和客户端
5、软件测试自动化进阶——接口测试
接口测试本质也是功能测试的一种,通过脚本或者工具,模拟客户端对服务端接口进行调用。因为是从接口层测试,所以能更早的发现问题,从而提高测试效率,降低修复成本。
http/httpst协议学习
常见请求方法学习:GET、POST
cookie和 session学习
接口的基本概念
接口文档认识
接口测试用例编写
接口测试工具使用:postman、Jmeter、SoapUl
6、软件测试自动化进阶——性能测试
性能测试的技术要求很高,不仅仅要对性能测试的指标、测试分类、测试设计有很深刻的理解。还要学习系统业务和架构相关知识,这样才能更好的设计性能场景。
性能基本概念:性能测试意义、常见性能指标理解、性能测试的分类
性能测试流程:性能需求分析、性能场景设计、测试脚本编写、测试执行资源监控、性能调优、回归测试
Jmeter及 roadrunner使用
性能测试报告输出
7、软件测试自动化进阶——app自动化
越来越多的项目和系统通过移动端来提供服务,移动端的软件质量越来越重要,App自动化测试已经成为自动化测试的重要内容。借助Appium,使得App自动化测试和Web自动化测试有很多相通之处,不过作为测试工程师,依然需要掌握移动端应用的工具和特性。
Appium移动测试环境搭建:Appium ServerAppium和 Desktop、 Android运行环境搭建、模拟器安装和连接、真机设备调试模式、adb、 weditor、 - - UiAutomator22、 Monkey
Appium元素定位:原生应用元素定位、纯web应用元素定位、混合应用元素定位
Appium元素交互:等待元素加载,元素的基本属性和方法、滑动、拖动、缩放操作、下拉选择操作、 toast消息处理、常见控件分析、常见布局分析
封装测试框架:集成Appium、adb等工具、预定义异常处理、记录Appium日志、屏幕截图、打造多用途测试框架
8、软件测试自动化进阶——持续集成和持续测试
持续集成和持续测试是一个在迭代中构建、测试产品并修复Bug的过程。它有助于团队在开发阶段的初期发现缺陷,这时的缺陷通常相对不那么复杂,并且更容易被解决。通过持续集成和持续测试,可以尽早地将错误风险降至最低,并加快交付更好质量的软件。
版本控制Git:背景介绍、环境部署、工作区、暂存区和提交区、分支创建与合并、解决冲突、标签、 config与别名、本地仓与远程仓、 GitHub与码云
持续集成 Jenkins:背景介绍、环境部署、文件结构、远程仓库与私服、ja包依赖、插件管理
容器Docker:了解 Dockers的镜像、仓库、容器、 Docker Engine和架构图、网络设置、数据持久化
凡事要趁早,特别是技术行业,一定要提升技术功底。
其实每个程序员也能意识到目前自己面临的窘境,但能够及时作出改变,顺应时代变化的人太少了。毕竟更多人的情况是,忙着上班,也没人引路,自己也不太会规划。多数人明明“泰山崩于前,而面色如土”只能眼睁睁看着自己被行业淘汰吗?
软件测试学习资料领取和学习经验分享扣扣群:938856006,群里都是学软件测试,或者是业内的同行,如果在软件测试学习和工作中遇到什么问题,都可以在群里进行交流,同时群里有最新的软件测试学习资源领取,包括一些面试题和自动化进阶资料!包括我自己整理的一份2022最新的Python自动化资料。