写给小团队的软件发布管理

/**
 * 谨献给会“越狱”的小黑
 *
 * 原文出处:https://www.toptal.com/devops/guide-release-management-for-small-teams
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-04-02
 */

使发布管理流程正规化(如果还没有的话)

在某些团队配备里,尤其是那些在初创公司的,当发布一个新产品版本时,既没有DevOps也没有基础设施工程师来提供支持。

况且,不像有着定义正式流程的大型官僚公司,在初创公司的CTO或者软件开发团队的一把手并不总是可以意识到 软件发布管理流程的复杂性;在公司的少数开发人员可能意识到了流程的复杂细节,但并不是每个人。如果没有很 好地文档化这块知识,我相信会导致不少困惑。

在此篇文章中,我会尝试专门从开发人员的视角,提供关于如何正规化发布流程的一些技巧。

进入软件发布清单

你可能了解写给某些外科专家的清单概念,根据由阿图•葛文德编著的《清单革命》一书。 我相信一个正规的发布流程(像软件开发


继续阅读»»»

如何引导和创建.NET项目

/**
 * 原文出处:https://www.toptal.com/dot-net/bootstrap-and-create-dot-net-projects
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-03-22
 */

创建.NET项目

使用Visual Studio向导创建一个.NET项目就像嗖一下那么简单。去到文件 => 新项目,或者``添加新项目```到一个已有的解决方案。 一旦新项目创建好后,你就可以马上进行编码了。然而,由向导产生的默认项目配置对于专业的团队是很难接受的,因为他们设定的质量太 低了。况且,也没有向导可以知道你需要在特定开发环境所执行的其他启动步骤。

在此篇文章中,我会带你走进若干个重要的、当你一旦创建项目就应该开启的配置,这对于最小化未来的技术债务很重要。同时,我们还会 回顾很多.NET开发人员在他们构建解决方案和新项目时会应用的一些通用实践。即使你没有应用其中 的某些想法,学习和大致了解一下大部分团队所做的也是很不错的。

结构

拥有一个良好定义的结


继续阅读»»»

机器人操作系统简介:终极机器人应用框架

/**
 * 原文出处:https://www.toptal.com/robotics/introduction-to-robot-operating-system
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-03-05
 */

机器人操作系统(ROS)不是一个真实的操作系统,而是一个框架以及一系列为运行在异质计算机集群的操作系统提供基础功能的工具。
它的用处不局限于机器人,还包括大量关注与外设一起工作的工具。

ROS 分成2000多个包,每个包提供特定的功能。连续框架的工具数量可能是它的最大功率。

为什么我应该用ROS?

ROS提供了硬件抽象,设备驱动,多机器进程间的通信,测试和可视化的工具等功能。

ROS的关键特性是软件运行和沟通的方式,使得你可以设计复杂的软件而不需要知道相关的硬件如何工作。ROS提供了一种利用中央枢纽连接进程(节点)网络的方式。
节点可以运行在众多设备上,并且可以通过各种途径与中央枢纽进行连接。

创建网络的主要方式有提供可请求的服务,或者定义与其


继续阅读»»»

从《孙子兵法》到软件开发

/**
 * 谨献给可爱的小黑
 *
 * 原文出处:https://www.toptal.com/agile/art-of-war-software-development
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-04-02
 */

如果你工作在软件行业里,很可能你已经听说了 分解征服 设计范例,基本上包含了递归地把一个问题 划分成两个或者多个子问题(分解 ),直到这些问题变得足够小可以直接解决为止(征服 )。

你可能不知道的是这个范例来源于一个古老的政治策略(名字来自拉丁语分而治之 ),此策略提议有可能通过 鼓励异议来维持对一个人的下属或者受控者的控制。

在历史的长河上,无数的政治家和军事领导人都使用此策略,诸如凯撒大帝(在高卢战记中使用此策略击败了强 壮的高卢)和拿破仑(这位法国炮兵专家把敌军进行了分解从而没有任何一部分能比他自己的军队更强壮,然后 扰乱他们的通信,以阻止敌人进行协调和执行攻击的努力)。

《孙子兵法》:把远古的原则应用到软件开发

然而,分解征服


继续阅读»»»

编写可测试的JavaScript代码

/**
 * 谨献给可爱的小黑
 *
 * 原文出处:https://www.toptal.com/javascript/writing-testable-code-in-javascript
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-04-02
 */

不管我们正是使用的是像Mocha或Jasmine这样结点配对的测试框架,或者是像PhantomJS这样模拟浏览器围绕DOM 依赖的测试,现在我们对于JavaScript单元测试的选择都比以前好了很多。

然而,这并不意味着我们要测试的代码如同我们的工具那样容易!组织和编写易于测试的代码需要一些努力和计 划,但这里有一些由函数编程概念启发的模式,可用于当需要测试代码时避免我们陷入痛苦之中。在这篇文章中, 我们将探索一些用于编写可测试的JavaScript代码的有用技巧与模式。

分离业务逻辑与显示逻辑

基于JavaScript浏览器应用的早期工作之一是侦听由终端用户触发的DOM事件, 然后通过运行一些业务逻辑和在页面上显示结果来向用户作出响应


继续阅读»»»

Python设计模式:为了圆滑时尚的代码

/**
 * 谨献给可爱的小黑
 *
 * 原文出处:https://www.toptal.com/python/python-design-patterns
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-04-02
 */

再次说明:Python是一门有动态类型和动态绑定的高级编程语言。我会把它描述为一门强大的高级动态语言。很多 开发人员深爱Python是因为它清晰的语法,良好的结构模块和包,以及它巨大的灵活性和众多的现代特性。

在Python,不会有任何东西强迫你去写类或者实例化对象。如果在项目中不需要复杂的结构,你可以只写函数。 甚至乎,你可以针对某些简单和快速的任务编写一个无须任何结构化代码的小脚本。

同时Python是一门100%面向对象的语言。为什么这么说?好吧,简单来说,在Python中的所有东西都是对象。
函数是对象,第一类对象(不管这意味着什么)。函数是对象这一事实很重要,所以请记住这一点。

那么,你可以用Python编写简单的脚本,或者只是打开Python终端并且在


继续阅读»»»

PHP7简介:新特性与移除的特性

/**
 * 原文出处:https://www.toptal.com/php/php-7-performance-features
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-03-13
 */

在PHP世界里,2015年最振奋人心的消息之一是PHP 7的版本发布,距离上一次主版本PHP 5长达10年之久。 向前迈进了巨大的一步后,PHP 7引入了大量的新特性以及性能升级。

然而,由于采用了一些兼容性中断,它把老的、弃用的功能也移除了,这使得老应用迁移到新版本更为困难。 如果你计划把已有的应用移到PHP 7之上或者构建新应用的话,此篇指南应该作为期待什么会发生的的快速向导。

但是等一等,PHP 6哪里去了?

如果近期你没在工作中一直使用PHP的话,你可能会疑惑PHP 6发生了什么,为什么会直接从PHP 5跳到PHP 7? 好吧,长话短说,PHP 6失败了。由于PHP主要用于网站开发而网站需要Unicode,版本6的主要特性是对于 Unicode的本地支持,所以把Unicode带到PHP这一


继续阅读»»»

整洁代码与处理异常的艺术

/**
 * 谨献给正在长大的小黑
 *
 * 原文出处:https://www.toptal.com/qa/clean-code-and-the-art-of-exception-handling
 * @author dogstar.huang <chanzonghuang@gmail.com> 2016-04-12
 */

异常如同编程本身一样那么古老。在过去好些日子里,当在硬件中完成了编程,或者通过底层编程语言,异常用于 警告程序流,以及用于避免硬件失败。今天,维基百科定义的异常如下:

异常或者需要特殊处理的例外情况 -- 经常改变程序的执行流程...

并且处理他们要求:

专门的编程语言结构或计算机硬件机制。

所以,异常需要特别的对待,并且一个并处理的异常可能引起非预期的行为。而后果则经常让人为之一惊。 在1996年,著名的阿丽亚娜5型火箭发射失败是由于一个未处理的浮点异常。 历史上最严重的软件问题包含了一些其他 由于未处理或者误处理异常的Bug。

随意时间的流逝,这些和其他(可能不是戏剧性的,但仍然是灾难性的)不计


继续阅读»»»