-
2011-04-15 00:41:00
马云语录:
世界是由懒人来支撑的!
懒不是傻懒,如果你想少干,
就要想出懒的方法。
要懒出风格,懒出境界。
McConnell在他的<<Code Complete>>提到三种"懒":"实在的懒","开明的懒"以及"一劳永逸的懒"。并说明第三种"懒"才是最具产值的"懒",因为它需要运用工具或者代码来为自己完成任务:这就是工作中的自动化。<<The Pragmatic Programmer>>的作者也有专门章节提到"一切都要自动化"。这些都有异曲同工之妙。到底我们的开发工作中有哪些是可以自动化的呢?
凡是需要重复的工作(Routine)都可以想办法做到自动化。第一步,可以将编译及软件发布的工作自动化。这类的流程比较固定,还可以在编译后执行一些检查工作。如果你愿意都可以将写Release Note的动作自动化。第二步,可以将手工容易出错,但判断条件单一的工作自动化。比如多国语言的制作以及当前Bug状况检查的动作自动化。 第三步,将测试自动化。对于一些固定的测试用例,或者为新产生的Bug而建的测试用例放置到一个自动化测试脚本中,这样基本可以做到有效的回归测试,对于软件质量将有相当大的帮助。程序员大多对于测试并不热衷,如果有这样一个偷懒的方法,未尝不是件好事。第四步,将编码自动化。至少有些程序是可以这样的。
偷懒的背后是需要自我突破的勇气的,也是一种永不止步的进取精神。如果发现自己不断重复一件事情,或许每次有些小的变化,我们都可以努力建立一个模型或者流程,使它可以自动化。在财务管理中有一个概念叫ABC (Activity based costing),它是强调将工作细化到每个独立的步骤。在软件开发工作中绝大份工作都是遵循一定的流程或模型,只要找到这个不变的内在,就可以想办法加以自动化(或者半自动化)。
而可以用来帮我们做到自动化的工具很多,大部份都在SourceForge中,有空去转转。它们或者有以下一些分类:
代码检查工具:xLint (splint), cyclo
UI自动化工具:AutoIt之类的
强大的脚本工具: Perl, Python
还有一个常在你身边的工具:Microsoft Office. 我经常使用Excel来作公式的验证,我的一个同事也利用Word中的VBA还完成一批文件格式转换的工作。
如果我们可以将工具或自己开发的程序视为自己团队的一员,那我们就不是一个人在工作。让它们忙去吧,我们还有更重要的事做!
参考:
更多相关内容 -
某马程序员-web自动化讲义.pdf
2021-01-29 15:29:13某马程序员-web自动化讲义 -
83程序员练级攻略(2018):容器化和自动化运维1
2022-08-03 14:28:2483程序员练级攻略(2018):容器化和自动化运维1 -
看程序员是如何把自动化做到极致的!1
2022-08-03 23:34:39看程序员是如何把自动化做到极致的!1 -
一种融合程序员和神经网络的自动化程序生成方法.pdf
2021-09-16 00:50:42一种融合程序员和神经网络的自动化程序生成方法.pdf -
一种融合程序员和神经网络的自动化程序生成方法.docx
2022-06-10 08:22:40一种融合程序员和神经网络的自动化程序生成方法.docx -
一种融合程序员和神经网络的自动化程序生成方法.rar
2021-09-19 20:56:42一种融合程序员和神经网络的自动化程序生成方法.rar -
windows自动化操作——程序员必备
2021-04-02 00:33:27windows下自动化脚本,提高生产力必备。 不定期更新 目录 1.bat脚本 1.1.映射网络驱动器 1.2.开机自启动 1.3.自动添加环境变量脚本 1.bat脚本 1.1.映射网络驱动器 参考:...windows下自动化脚本,提高生产力必备。
不定期更新
目录
1 bat脚本
1.1 映射网络驱动器
参考:https://blog.csdn.net/I_am_Benson/article/details/96828872
假设192.168.1.1为服务器ip地址,username指代用户,如果是公司服务器话一般是你的名字。
net use “Z: \\192.168.1.1\username” “password” /user:”username”
“Z: \\192.168.10.106\username”这里一定要加引号,否则报错。这样每次可以省去二三十秒操作。
1.2 开机自启动
参考:https://blog.csdn.net/qq_42297093/article/details/114671373
自动开机软件,用于开比较多的软件(没有开机自启动)
choice 延时精度是秒
@echo off echo start wechat start "" "D:\Program Files\WeChat\WeChat.exe" choice /t 0.5 /d y /n >nul ::延时1s echo start TIM start "" "D:\Program Files\TIM\Bin\QQScLauncher.exe" choice /t 0.5 /d y /n >nul pause
1.3 自动添加环境变量脚本
参考:https://www.jianshu.com/p/7884d64e62f0
这里是以java环境变量举例
setx JAVA_HOME "D:\Program Files\Java\jdk1.8.0_40\bin" -m setx last %Path:~-1% -m if "%last%"==";" (setx Path "%Path%%JAVA_HOME%" -m) else (setx Path "%Path%;%JAVA_HOME%" -m) pause
不用一步步电脑->属性->高级设置去配环境变量了。
%Path:~-1% 这个意思是取环境变量最后一个字符。
bat中设置变量为字符串后,需要%%括起来才能正确使用
2 自动化软件
2.1 mobaxterm的宏操作
mobaxterm,一款终端神器,远程开发必备,一般公司选择mobaxterm会很多,因为是开源软件,不需要付费,其他的终端软件像xshell也是用的比较多的。
只做个简单示范。就两个命令 cd test 和 cd .. ,实际可以根据自己的开发需求改。先要点击录制按钮才能开始录制一个宏。
当然录制好的宏可以进行编辑,如上图
一般第一行是命令,第二行是RETURN(键盘按下Enter键),第三行是休眠时间(其实就是等待时间,看实际选择,一次命令执行时间,一般填500,这里默认ms)。
三行命令反复循环,就可以完成多条命令了。就可以当然宏操作也可用于自动化测试。
实际操作中一般是完成一些高频次很重复的操作,比如ssh远程登录,然后切到项目目录这样的。
2.2 按键精灵
按键精灵是一款模拟鼠标键盘动作的软件,算是比较早比较经典的一款脚本软件了。PC版本只有2014版的,不过也足够处理些简单的操作。安卓版版本就新很多了,后续看看有没机会出个安卓篇的。
下载地址:http://download.myanjian.com/
安装完成后,新建一个脚本如下所示。下面的例子意思是模拟键盘按下1000次空格键。
界面左边是各种不同的类型命令,直接点插入就可以生成一条语句。源文件我们自己也可以修改或者自己写脚本,其他和编程没什么两样,不过简单得多。界面右边是脚本属性,根据需求自己改。
For 1000 KeyPress "space", 1 Delay 100 Next
代码含义一目了然,delay这里默认单位是ms。
点击调试后如下所示
点击发布可以做成exe可执行文件。
3 python
python,著名的脚本语言,自然也能实现各种自动化操作。不过python适合完成比较复杂的一些操作(特别是web结合),如果比较简单的话还不如使用按键精灵一类的软件,时间上划不来。
3.1 模拟鼠标键盘输入
需要用的库pynput,官网:https://pypi.org/project/pynput/
待续
-
用Python编程,本课程教导新手程序员编写模块化代码以执行分析Python的数据。
2022-04-04 20:31:33然而,重点是教学 - 无可止知的原则,例如具有循环和功能封装的自动化,参见科学计算的最佳实践和科学计算中的足够实践,以了解更多信息。本课程中使用的示例分析了一组12从试验中收集了模拟炎症的文件,用于对关节... -
使用iTest2重构自动化功能测试脚本
2021-02-27 08:34:12随着敏捷方法学在企业软件项目中的广泛应用,其核心实践之一——自动化功能测试已经证明了它的价值,同时却也对项目提出了挑战。传统的“录制-回播”类型的测试工具也许能帮助测试人员很快地创建一系列的测试脚本,... -
中级程序员刷题软件-auto_template:在Python中为C++模板自动创建模板实例化代码
2021-07-01 12:33:56该程序自动创建所有实例化代码,程序员不必担心链接器问题和实例化问题。 C++ 模板和问题以及我们为什么需要这个: C++ 模板是泛化特定操作和避免大量代码重复的好方法。 它还加快了软件开发,并使软件设计和用例... -
10x 程序员工作法 - 划重点 | “自动化”主题的重点内容回顾汇总
2022-04-19 13:54:21主要用于学习关于自动化如何做~1.应用场景
主要用于学习关于自动化如何做~ 2.学习/操作
1.文档阅读
2.整理输出
原文
你好,我是郑晔。
“自动化”模块终于全部更新完毕。至此,四个工作原则我已经给你全部介绍了一遍,相对而言,这个模块的内容比较“硬”,我也竭尽全力帮你串起更多知识的脉络,所以,信息量也是非常大的。希望你能够找到自己接下来努力的方向,不断提升自己的“硬实力”。
重点复习
在这个模块中,我们学习到了一些最佳实践。
-
持续交付
- 将生产部署纳入了开发的考量。
- 持续交付的基础设施通常包含持续集成环境、测试环境、预生产环境和生产环境。
- 构建流水线保证到了下游的交付物一定是通过上游验证的。
- 随着 Docker 的诞生,交付由发布包变成了 Docker 镜像。
-
DevOps
- 将开发和运维结合到一起。
- 环境配置工具上的进步,让基础设施即代码成了行业共识。
-
验收测试
- 验收测试要站在业务的角度编写。
- BDD 是一种编写验收测试的方式。
- Given...When...Then... 的描述给了一个描述业务的统一方式。
- 写好验收测试,需要构建测试模型。
-
SOLID 原则
- 设计模式背后的道理。
- 单一职责原则(Single responsibility principle,SRP)。
- 开放封闭原则(Open–closed principle,OCP)。
- Liskov 替换原则(Liskov substitution principle,LSP)。
- 接口隔离原则(Interface segregation principle,ISP)。
- 依赖倒置原则(Dependency inversion principle,DIP)。
- 用好单一职责原则,前提条件是看待问题颗粒度要小。
-
DDD
- 它将思考的起点拉到了业务上。
- DDD 分为战略设计和战术设计。
-
微服务
- 做好微服务的前提是划分好限界上下文。
- 微服务的第一步,不要划分微服务。
在这个模块中,我们还了解了一些重要的思路,让我们把工作做得更好。
- 程序员的三大美德:懒惰、急躁和傲慢(Laziness, Impatience and hubris)。
- 小心 NIH 综合症(Not Invented Here Syndrome)。
- 写好构建脚本,做好项目自动化。
- 参照 Java 知识体系,学习运维知识。
- 软件设计最基础的原则是“高内聚、低耦合”。
- 分层架构是一种设计上的分解。
- 不同业务量的系统本质上不是一个系统。
- 采用简单技术解决问题,直到问题变复杂。
实战指南
-
请谨慎地将工作自动化。
——《29 | “懒惰”应该是所有程序员的骄傲》 -
将你的工作过程自动化。
——《30 | 一个好的项目自动化应该是什么样子的?》 -
有体系地学习运维知识。
——《31 | 程序员怎么学习运维知识?》 -
将部署纳入开发的考量。
——《32 | 持续交付:有持续集成就够了吗?》 -
将验收测试自动化。
——《33 | 如何做好验收测试?》 -
把函数写短。
——《34 | 你的代码是怎么变混乱的?》 -
构建好你的领域模型。
——《35 | 总是在说MVC分层架构,但你真的理解分层吗?》 -
用简单技术解决问题,直到问题变复杂。
——《36 | 为什么总有人觉得5万块钱可以做一个淘宝?》 -
学习领域驱动设计。
——《37 | 先做好DDD再谈微服务吧,那只是一种部署形式》
额外收获
在这个模块的最后,针对大家在学习过程中的一些问题,我也进行了回答,帮你梳理出一个思路,更好地理解学到的内容:
- 持续集成的延伸。
- 持续集成完成系统集成。
- 持续交付完成可部署上线。
- “持续验证”完成产品想法验证。
- AB 测试,用一个软件的多个版本验证想法。
- Selenium 用以完成浏览器的自动化。
- 熟练使用快捷键。
留言精选
在讲到 “懒惰”应该是所有程序员的骄傲时,jxin 同学提到:
有价值的事并不局限于事情本身。做自动化很重要,写代码很重要。但根据现有情况判断是否需要自动化,是否需要写代码也很重要。有的放矢,任务分解。权衡跟设计是件很艺术的事情,令人着迷。
另外,关于持续交付,Jxin 同学也提出了自己的理解:
分而治之是解决复杂问题的一大利器。持续交互就像重构中小步快走(每次微调后运行测试代码验证),都能保证大工程的稳步前进。同时由于单元小了,所以也灵活了,持续交互可以结合最小产品的理念,以小成本做test,收集数据后,即时调整产品发展方向。
关于软件设计, 毅 同学分享了自己的感悟:
我们常说任务到手不要着急去做,要从设计入手,把时间多花在前面。工作中发现大家都是思考了才动手的,那为什么越往后偏差越大呢?
共性原因有二:一是全局观不够,用咱们课里的话说就是上下文局限和反馈延迟(看到问题不提,直到代码写到那绕不过去了再沟通);
二是没有领域的概念和有意识地去实践(纸上谈兵),尤其是做流程型任务,都喜欢先把表结构定义出来,再去生成实体,所以从领域层面来看这些实体就很不合适了。结果必然是用面向对象的工具写出了面向过程的代码,既然是面向过程那OO设计原则就鲜有用武之地了。这两点也是我个人理解要做好软件设计的两个必要条件。
讲到分层架构时, desmond 同学提到:
学了REST和DDD,感觉两者有相通的地方:两者都以数据(一个是资源,另外一个是领域对象)为中心,并制定一套标准的数据操作(一个是HTTP Verb,另外一个项目主要用JPA这一套);而核心是业务建模。
对于微服务的理解,风翱 同学提到:
公司说我们的开发方式是敏捷开发,实际上只是使用了一些敏捷开发的方法,只有遵循敏捷开发的价值观和原则,才能算是敏捷开发。微服务也是一样,不是说拆分成多个服务去部署,就叫做微服务。也不是采用市面上常用的微服务框架,就是微服务了。
对于一个好的项目自动化应该是什么样子这个问题,西西弗与卡夫卡 同学提到:
设想过这样的情景(还没实现,打算实践一把):我们新招一名比较熟练的程序员,从TA入职拿到机器,到开发示意代码,再提交SCM,然后CI/CD,再发布到线上交付给用户,整个过程可以在入职当天的午饭之前完成。
这不光要求构建和集成自动化,甚至要求从入职开始的各个环节都能提前准备好,包括机器、开发环境、线上环境等,甚至连示范的需求都要能及时传递给TA。理想情况下,程序员只需要开发好程序,保证质量,提交到SCM即可,其他事情都应该交给机器。
要知道程序员都很贵,越早给用户交付价值越好。
对于自动化验收测试, shniu 同学分享了他的学习感悟:
自动化验收测试确实是很好的东西,比如在回归测试,省去了很多的重复工作。但我理解BDD的初衷是驱动产品、业务、开发、测试等去深入讨论沟通需求,在还没有真的写代码的时候去实例化story,并一起定义验收用例,让每个人对需求的理解都很透彻,当然特别注意的是要从统一的业务角度去描述,可见,真的做好BDD是需要不断的尝试和总结的。
对于“5万块做淘宝”这个话题,enjoylearning 同学提到:
做一个淘宝那样的,客户指的是业务类似,但用户量多少,需要多少并发数,搜索性能等如何都是需要跟客户沟通后才能决定技术选型的。现实中我们的有些系统已经满足了业务需求,就没有必要为了追求技术复杂度而去拆分了,只有面向问题技术选型才会有成效。
关于运维知识,hua168 同学对文章内容进行了补充:
现在运维流行DevOps,高级一点就是AI,其中一篇文章《DevOps 详解》不错,链接如下:
DevOps详解_语言 & 开发_Jerome Kehrli_InfoQ精选文章《DevOps知识体系与标准化的构建》也不错,下载地址:
文件下载-阿里云开发者社区运维知识体系:
运维知识体系v3.1【赵班长】Web缓存知识体系:
缓存知识体系v3.0【赵班长】感谢同学们的精彩留言。在下一个模块中,我将结合具体的应用场景,将之前讲过的“思考框架”和“四个原则”进行综合应用的分析。
感谢阅读,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给你的朋友。
后续补充
...
3.问题/补充
TBD
4.参考
划重点 | “自动化”主题的重点内容回顾汇总-极客时间 后续补充
...
-
-
PHP程序员玩转Linux系列 自动备份与SVN
2021-01-10 20:19:48PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux...date命令,打印当前系统时间,加个参数+%F,打印格式化的全日期, date +%F -
PHP Unit自动化单元测试技术研究
2021-04-16 17:36:11优秀的程序员与普通的程序员之间的区别在于:优秀的程序员会尽可能用测试检测自己的代码,越早测试程序中的问题,发现它的机会越大,花费去寻找和修正的时间就会越少。这就说明在软件发布之前如果缺少有效的测试,... -
FANUC机器人程序员A培训教程(一).pdf
2021-05-06 09:37:02FANUC机器人程序员A培训教程(一) -
FANUC机器人程序员培训课程V8-(1).pdf
2022-03-11 15:13:35FANUC机器人程序员培训课程V8-(1) -
FANUC机器人程序员A培训教程(三).pdf
2021-05-06 09:40:20FANUC机器人程序员A培训教程(三) -
程序员为了讨好大舅子,竟自学自动化编程
2021-11-15 20:00:35可以帮我写个自动化脚本吗? 我发现外行人都觉得程序员是万能的啊,但是其实我们都只是会ctrl c + ctrl v而已 不过,大舅子提需求了,能认怂吗? 当然不能啊,必须做啊 虽然我连自动化脚本怎么做、用什么语言都不...hello,大家好,我是帅气的超级饭饭团,最近刚和大舅子约了个晚饭,饭桌上大舅子第一句话便是:
听说你是程序员?可以帮我写个自动化脚本吗?
我发现外行人都觉得程序员是万能的啊,但是其实我们都只是会ctrl c + ctrl v而已
不过,大舅子提需求了,能认怂吗?
当然不能啊,必须做啊
虽然我连自动化脚本怎么做、用什么语言都不知道,但是,为了妹子,不能怂啊
我喝了一两白酒,壮了壮胆子,和大舅子讨论了下需求
酒过三巡菜过五味,最后终于将需求定了下来了
大概是这样的:
- 自动登录某app
- 自动搜索指定宝贝
- 自动评论留言
- 自定义搜索关键词、自定义留言个数
总结下来就是根据关键词自动评论,然后还要提供一个UI操作
确定了需求了,加上白红啤怼了几杯后,我反问大舅子那你妹就是我的了吧
大舅子说:需求搞出来,她就是你的了
为了妹子,必须拼啊,当晚开始奋斗
先是搜索相关技术,然后开始查漏补缺,最后便是开始实现
给大家看看需要的技术:
- autojs,自动化脚本引擎
- 一点js编程意识,实现语言用的就是js
- 一点安卓意识,毕竟自动化脚本针对的对象就是安卓手机了
最后给大家看看我奋笔疾书一整晚的效果
大概分为几步:
第一步,UI界面的设计
ui.layout( <vertical> <text textSize="18sp" textColor="#000000" margin="20" textStyle="bold"> 闲鱼自动评论 </text> <ScrollView> <vertical> <text textSize="16sp" margin="8">1.宝贝标签</text> <input w="*" text="卫衣" id="target" margin="0 16" /> <text textSize="16sp" margin="8">2. 评论内容</text> <input w="*" text="你好" id="comment" margin="0 16" /> <text textSize="16sp" margin="8">3. 总处理条数</text> <input text="2" id="total" inputType="number" margin="0 16" /> <linear gravity="center"> <button margin="16" id="ok">开始执行</button> </linear> </vertical> </ScrollView> </vertical> )
最终呈现出来的界面是这样的
虽然丑,但是能用就可以啦
第二步便是点击后的处理
ui.ok.click(() => { var target = ui.target.text(); var comment = ui.comment.text(); var total = ui.total.text(); let main = new Main(); threads.start(function () { main.process(target, comment, total); }); });
也就是监听了按钮的点击处理
第三步就是真正做自动化的地方了
let utils = new AppUtils(); utils.consoleShow(); console.log("处理的参数:" + target + "," + message + "," + limit); let mainTarget; auto.waitFor(); utils.openApp("闲鱼"); let search = id("search_bar_layout").untilFind(); utils.clickView(search[0]); let sousuoInputs = className("android.widget.EditText").indexInParent(1).depth(6).untilFind() sousuoInputs[0].setText(target) utils.paste(sousuoInputs[0], target); utils.sleep(1000); let results = className("android.view.View").descContains(target).untilFind(); utils.clickView(results[0]); mainTarget = results[0].desc(); console.log("设置标签:" + mainTarget); var targetViewMap = new java.util.HashMap(); while (targetViewMap.size() < limit) { let viewIndex = 0; while (true) { let targetViews = className("android.view.View").descContains(target).untilFind().filter(function (w) { return w.desc().length >= 10; }); if (targetViews.length <= viewIndex) { break; } let targetView = targetViews[viewIndex++]; let text = targetView.desc(); text = text.substring(0, Math.min(10, text.length)); if (!targetViewMap.containsKey(text)) { utils.sleep(1000); utils.clickView(targetView); utils.sleep(1000); if (textContains("客服").findOnce() != null) { utils.tryback(mainTarget); continue; } let btns = className("android.view.View").untilFind() var leaveMessage; for (key in btns) { let btn = btns[key] try { if (btn.desc() == null) { continue; } if (btn.desc() == "留言") { leaveMessage = btn; break; } if (!isNaN(btn.desc())) { leaveMessage = btn; break; } } catch (error) { } } utils.clickView(leaveMessage); utils.sleep(1000); try{ leaveMessage.setText(message) } catch(error) { } try { let leaveMessage2 = descContains("看对眼就留言").findOnce(); utils.clickView(leaveMessage2); utils.sleep(1000); leaveMessage2.setText(message) } catch (error) { } try { let leaveMessage3 = textContains("看对眼就留言").findOnce(); utils.clickView(leaveMessage3); utils.sleep(1000); leaveMessage3.setText(message) } catch (error) { } utils.sleep(1000); let sendBtn = textContains("发送").findOnce(); if (sendBtn == null) { console.warn("找不到发送按钮:" + text) continue; } utils.clickView(sendBtn); console.log("评论成功,避免被监控,停止1秒") utils.tryback(mainTarget); utils.sleep(3000); targetViewMap.put(text, targetView); console.log("当前成功评论个数:" + targetViewMap.size()) if (targetViewMap.size() >= limit) { break; } } } while (true) { if (scrollDown(0)) { break; } } } console.log("执行完毕");
可以看到第3步挺多sleep的地方,都是为了等待界面渲染的时间,因为手机比较卡,所以等待的时间也相对长了些。
最后将脚本打包后发给了大舅子,大舅子喜出望外…
当然啦,大舅子开心,我也开心,毕竟抱得妹子归啊哈哈哈哈
另外,我将自动化学习教程和实战例子都放到github和码云上了,有兴趣学习的可以拿去看
github地址:脚本仓库
码云地址:脚本仓库
b站视频:教学视频
-
FANUC机器人程序员A培训教程(二).pdf
2021-05-06 09:38:35FANUC机器人程序员A培训教程(二) -
软件测试工程师全栈学习路线(程序员阿沐整理).jpg
2021-07-23 12:55:49软件测试工程师全栈学习路线(程序员阿沐整理) -
31岁才转行程序员,目前34了,我来说说我的经历和一些感受吧...
2022-07-22 20:00:24自动化必经之路:前端开发基础知识以及互联网网络必备知识四、互联网程序原理 程序员威子 互联网程序原理 Web前端开发基础 HTML、CSS基本内容学习。为什么测试课程有开发?对不起,如果不会,自动化可能不欢迎,很多... -
无代码自动化测试的优秀实践与工具
2021-10-24 20:13:29无代码自动化测试的优秀实践与工具 -
一文带你用python做自动化测试
2022-02-22 21:57:27python 是目前测试推广最多的语言,翻翻各大招聘公司,...今天给大家带来的Python自动化测试,从零基础开始手把手有详细的步骤教你怎么写自动化测试。测试人员大多是希望利用编程语言来帮助他实现自动化的测试,而且 -
高级java笔试题-coding-to-monetization:从编码到货币化:程序员的财务自由之路
2021-06-03 00:49:27为了提高工作效率,你也用了各种成熟的框架以及自动化测试的工具;总之,通过学习,你成为了一个牛B的程序员。 甚至,你也积累了管理的经验,主动学习了项目管理的理论知识、各种研发组织模式,也许会进阶到管理岗位... -
程序员修炼三部曲(单元测试之道、版本控制之道、项目自动化之道)
2014-07-02 11:38:20版本控制之道-Subversion.pdf 单元测试之道-JUnit.pdf 项目自动化之道-如何建构、部署、监控Java应用.pdf -
FANUC机器人程序员培训课程V8-(3).pdf
2022-03-11 15:16:47FANUC机器人程序员培训课程V8-(3) -
前端Jest自动化测试
2021-12-22 22:02:38前端自动化测试(前提条件) 高质量的代码设计 高质量的代码实现 Jest的优点 比较新:喜新厌旧是人的天性,新技术出来后你总想动手尝试一下,这个就和家花没有野花香是一个道理。作为一个程序员,你更要有拥抱... -
运维自动化-私人定制
2015-05-14 15:11:16可视化的监控指标 好用的日志分析 直观的业务量化指标 争取冗余的资源 用程序员的思维去思考运维 -
程序员修炼三部曲(中文)
2016-02-04 10:02:06压缩包包含的内容: 1)版本控制之道-使用Subversion 第2版.pdf