要做就做健壮的应用

首先,这里应用包括web网站,手机app等等。

健壮的应用应该是可维护的,可自动恢复,可持续更新,可跟踪日志,可及时反馈。

先来看看目前项目的方式:

项目代码 + 自动部署

仅仅这样远远不够,存在的问题:

1)服务器如果重启,如何做到项目自动开始运行,而不是手动再部署一遍

2)正式环境下项目日志会每天不断增长,不利于以后日志的分析

3)正式环境下项目如果自己挂了,如何自动重启,如何给出通知

4)数据库如何自动备份

5)部署的时候如何自动测试

所以健壮的应用应该在项目一开始就解决上面的问题

目前我是这么做的

1) 使用脚本来启动应用服务,脚本放在服务器的自启动里面

2)使用log_rotation按天切割日志

3)使用monit自检查应用进程,如果挂了自行重启,并且给出邮件通知

4)使用<a href="https://github.com/meskyanichi/backup">backup</a>自动备份数据库

5)使用Git hooks在部署到production的时候自动测试

另外上述的功能在一个deploy的期间,自动完成。

至此,这样才是一个健壮的上线应用。

创业之我见

创业最难的地方是人,有一帮志同道合的人,才是王道。

产品开发要有节奏,不要盲目的追求快。

产品只有两个阶段,一个是快速推出产品,一个是无限迭代产品。

如何才能快,精简才能快,轻装才能快,所以产品的第一版只要核心功能,不要把大量的时间花在无谓的“前瞻性”的讨论上面。

不是非要天天加班的创业才叫有激情。

好的idea只是创业的起点,对于成功,它所占的比例少之又少。

成为一名优秀的程序员

一直想把这篇博文给写完,这段时间太忙了,今天终于可以提上日程。以下文字只是出于本人的思考,用来总结提醒自己,难免有不当之处,欢迎指正。

下文所指的软件是泛指,可以是桌面软件,也可以是互联网应用。

重要性由高到低排列order(“important desc”)

1) 测试!测试!!测试!!!

很不幸,前公司和目前公司都不重视测试,我真的无法用言语来表达测试的重要性,如果想成为一名优秀的程序员,测试一定不能少的。不管是什么测试先行,还是TDD,BDD,总之有测试就对了。代码想重构吗?对不起,没有测试不敢下手。软件会出错吗?对不起,没有测试不敢发布。试想一下,如果我们都不能保证程序运行的稳定性,还谈什么各种优化,各种重写。特别是软件维护的时候,我们也知道,软件维护占到了不少时间,如果一个软件没有测试,怎么维护?特别是如果新人接手,以为只是修改了一个无关紧要的代码,却不知带来了无数的bug。

2) 绝不轻易写劣质代码

常常有这样的念想在脑子,“不用写的那么好,能实现功能就行”,“这里简单,把那边的代码copy一份过来就行了”,“先这么做,等以后来重构”,“我知道这样写不好,但是时间有限,下次好好写”,我们总是有各种理由来写出明知是劣质的代码,殊不知这样做最大的损失就是自己,程序员要对自己负责,更要对写出的代码负责,因为工作最起码就是要有责任感。有时候想想,程序员写出好的软件真是一门艺术,要考虑可复用,考虑模块化,考虑命名注释清晰明了,甚至还考虑到未来扩展是否方便,对了,而且还不能过度设计。我们每敲一行代码都是对自己的考验,好的习惯是靠时间积累下来的。我们会发现,当劣质代码写多了,是决然写不出优质的软件的。

3) 不要拘泥于纷争,视野开阔一点

我也时常犯这样的错误,总是流连于争一家之长,相必这类文章大家都耳熟能详:“xxx能取代xx吗?”,“大家都用什么编辑器开发xxx啊”,“xxx打败xx的n个原因”,“xxx究竟好不好?”,“十大xxx排行”。存在即合理,事实胜于雄辩,不会因为你的一句话,某某语言就轰然倒下。所以别浪费时间了,跳出纷争,有那功夫,不如为自己的喜欢的开源软件多出一份力。视野开阔一点是指我们不要局限在技术层面,局限在技术的牛角尖里面,大道至简,多了解一些其他知识,对我们写程序也是有帮助的。优秀的程序员就是在最短的时间,使用最方便的工具,实现最优的功能。

4) 别浮躁

不知道程序员是不是容易有代码优越感,记得有一次,我翻看一位前辈的代码,发现有一些地方写的很糟糕,当时心里就嘀咕,“这怎么能这么写”,然后就自己开始重构,结果重构到一半,发现因为业务逻辑的关系,还真的必须那么写,回头看看那位前辈写的真不错,所以别轻易否定别人。我们还会时常拿自己的经验说事,某某才那么点工作经验,怎么拿的钱比我还多,其实真不能只拿工作经验来衡量一个程序员的好坏,我们要有自己的目标,如果得过且过的写代码,一年,三年都不见得水平会有提高,至于钱,觉得自己水平可以拿更高的工资,可以去找上司谈,谈不拢可以选择跳槽。总之,别浮躁,保持一颗求学若渴的心态。

未完待续。。。