黄博文,ThoughtWorks资深软件工程师/咨询师。在国内外多家企业做过技术教练以及技术咨询,拥有丰富的敏捷团队工作经验。拥有AWS解决方案架构师以及开发者证书。译作有《面向对象的思考过程》、《基础设施即代码》等。
我目前工作的一个项目后端使用java和spring建立了一个restful service,前端使用AngularJS来渲染页面,提供用户接口。在前端的AngularJS项目中,我们使用Jasmine来写单元测试,使用AngularJS自带的Angular_scenario来写端到端测试。
在我工作的项目中有这样一个需求。当通过自动部署脚本将当前一个CI构建的WAR包部署到指定服务器后,需要验证该WAR包是否被部署成功。 在这个项目中,持续集成服务器使用的是Jenkins,构建脚本使用的是maven,向服务器的部署使用的是Groovy写的部署脚本,调用了Tableuax API。
即使用octopress写博客又需要同步到其他站点的同学们有福了。本人写了一个octopress下的插件,用于将octopress中的最新的一篇博客同步到支持MetaWeblog API的博客站点中去。
Karma是一款运行JavaScript测试的工具。它支持大部分的JavaScript测试框架,并支持多浏览器跑测试、自动监听文件运行测试等功能,实在是JavaScript开发的必备测试利器。
前段时间曾经写过一篇文章,《优秀程序员无他-善假于物也》。其中谈到一点是优秀的程序员必须要能灵活的掌握常用软件的快捷键。对于程序员来说,每天使用时间最长的软件恐怕就是IDE(Integrated Development Environment)了。
List在函数式语言中是一个重要的抽象,很多事情离了它就很难做到。函数式语言的鼻祖Lisp名称就来自List processing。 Haskell本身也给List操作提供了一系列的操作符以及库函数。
今天看到同事写的一篇博客《依赖快捷键做重构是不行的》。里面讲了一个这样的案例:本来有一方法,假设叫methodA。 1 2 3 public void methodA(){ // blablabla... } 后来由于需求变动,需要增加一个参数,姑且看做这个样子。
为什么写博客 写技术博客对于程序员的提升是不可估量的。只要你坚持一段时间,你就会发现它给你带来的各种积极的变化。思考问题更加深入了,更容易关注细节了,表达能力也增强了…… 不断的总结自己。
坦白的说这本书不太适合我。当我看到大段大段的数学符号时,就两眼发蒙。刚开始还感觉跟得上,到后来完全lost了。 但是这并不妨碍我从另一个角度来重新了解了图灵、数学、计算机….去年的时候曾听过Jeff讲过的一个session:《世界及宇宙的终极答案》。
什么是Annotation? Annotation翻译为中文即为注解,意思就是提供除了程序本身逻辑外的额外的数据信息。Annotation对于标注的代码没有直接的影响,它不可以直接与标注的代码产生交互,但其他组件可以使用这些信息。
第一次接触Selenium 的WebDriver,是在一个Web项目中。该项目使用它来进行功能性测试。当我看到Firefox中的页面内容被一个个自动填充并且自动跳转的时候,感觉真的很神奇。通过这段时间的学习觉得可以将我学的关于WebDriver的知识进行一个总结。
Enum是在Java中用来定义枚举类型的关键字。Enum一般用来表示一组相同类型的常量,如性别、日期 、颜色等. 下面是一个最简单的枚举。 1 2 3 4 5 6 7 8 9 10 public enum Color { RED, GREEN, BLUE } 实际上在Java中枚举类型本质上就是一个类,其继承自java.lang.Enum类。
作为一名合格的ThoughtWorker,每年不读个几十本书都不好意思跟别人打招呼。从读书的角度来说,我还真不算是一名合格的ThoughtWorker。不过没关系,发现了问题就要解决问题。2013年来已经读了7,8本书了,按照这个频率下去今年30本书的目标应该问题不大。
当我们在定义类,接口和方法时,可以接收一个类型作为参数,这就叫做泛型。 函数可以传入普通的参数,也可以传入一个类型参数。不同之处是普通的参数就是值而已,但是类型参数却是个类型。 使用泛型的好处: 强类型检查。
函数式编程的定义是: In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids stateand mutable data. 即:函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了引入状态及可变数据。
运用一门程序设计语言对大多数程序员来说是小菜一碟,但是更上一层楼成为一名专家级的软件开发者,恐怕目前还是大多数人的梦想。《程序员的思维修炼》一书中将程序员分为5个层级:新手,高级新手,胜任者,精通者,专家。
在Haskell的世界中,没有变量赋值,流程跳转,如果要实现一些简单的功能,比如求一个数组中的最大值,都需要借助递归实现。 递归函数的定义: A function may be partly defined in terms of itself. 即如果一个函数的定义中使用了其自身,这个函数就叫做递归函数。
如果你是使用面向对像语言进行编程的程序员,那么你应该去了解掌握一门动态语言。而动态语言的魔力之一就是函数式编程。而要学习了解函数式编程,那么haskell是一个不错的选择。 Haskell是是一门纯函数式编程语言(purely functional programming language)。
《JavaScript语言精粹》这本书句句是精华。如果你想只读一本书了解JavaScript,这本是你的不二选择。 这么薄的一本书讲JavaScript的特点介绍的非常清楚,是我对JavaScript的认识更加的深入。
在今年的的ThoughtWorks China away day上,我见到了这本书的作者neal ford, 我们还有过简单的交流,并一起去爬了长城。惭愧的是当时我并没有读过他写的这本书。直到今天我拿到了这本书,并花了大半天的时间通读了一遍。
当我们想查询git某条指令如何使用时,git官网有详尽的文档供我们查看。在命令行下我们也可以随时通过 git –help的方法查看某条命令的详细帮助。 相对于在Terminal中内置的帮助文档,HTML格式更清晰,更详尽。